オブジェクト指向プログラミング 第11回
コンポジットパターンの例題と演習
配布プリントのプログラムを入力、実行し、コンポジットパターンについて理解する。
演習
OSのファイルシステムを真似たプログラムを例題を参考に作成する。クラス図は次の通り。
クラス名 | 役割 |
---|---|
Entry | ファイルやディレクトリの持つ機能を規定 |
File | ファイルを表す。 |
Directory,ディレクトリを表す
Entryクラス
Fileクラス
- フィールドはString型のファイル名を示すname、int型のファイルサイズを示すsize
メソッド名 | 戻り値 | 引数 | 動作 |
---|---|---|---|
getName() | void | なし | 名前を表示 |
getSize() | int | なし | ファイルサイズを取得 |
printList() | void | なし | ファイル名を表示 |
Directoryクラス
- フィールドにはString型でディレクトリ名を示すnameと、ディレクトリエントリの配列リストdirectories
メソッド名 | 戻り値 | 引数 | 動作 |
---|---|---|---|
getName() | void | なし | ディレクトリ名を示す |
getSize() | int | なし | 配列リストdirectoriesからサイズを取得し、加算する |
printList() | void | なし | 配列リストdirectoriesの内容を表示する |
add | void | Entry型のオブジェクト | ファイルやディレクトリを配列リストに追加する |
テスト用クラス
このクラスでディレクトリ構造の内容を配列リストに追加し、それを表示する。
public static void main(String[] args) { // ディレクトリオブジェクトの作成 Directory rootdir = new Directory("root"); Directory bindir = new Directory("bin"); Directory homedir = new Directory("home"); // ファイルをディレクトリに追加 bindir.add(new File("ls", 100)); bindir.add(new File("vi", 200)); otakidir.add(new File("sample.c", 100)); // ディレクトリにディレクトリを追加 rootdir.add(bindir); rootdir.add(homedir); // ディレクトリリストの表示 rootdir.printList(); }