3-3 クラス図の関係その2
集約 あるクラスが他のクラスの一部を構成しているようなとき、集約の関係という 全体が部分の変数を持っている 会員リスト 会員 集約 全体
依存関係 依存関係は2つのモデル要素(クラスなど)間に存在する利用関係を表現する クラス間で依存関係が使用される3つのパターン 1.引数で参照する場合 2.ローカル変数として参照する場合 3.グローバルに参照する場合
1.引数で参照する場合 クラスAがその保持している操作の引数でクラスBを受け取っている場合 戻り値でも同様 クラスA
2.ローカル変数として参照する クラスAがその保持している操作の中でクラスBをローカル変数として使用している場合 クラスA +操作1() +操作2() 操作1(){ クラスB オブジェクト1; //クラスBのオブジェクトの作成 オブジェクト1,操作2(); //オブジェクト1(クラスB)の操作2の呼び出し ・ }
3.グローバルに参照する場合 クラスBがモデル全体やパッケージ全体から見えるように宣言されており、クラスAがクラスBを参照している場合 +操作1() クラスB +操作2() 操作1(){ オブジェクト1,操作2(); //オブジェクト1(クラスB)の操作2の呼び出し ・ }
汎化 汎化は、一般的な要素(スーパークラス)と特定化された要素(サブクラス)の関係を表現する サブクラスはスーパークラスの性質をすべて受け継ぎ、さらにサブクラス独自の性質を持っています 表記の仕方が2種類ある 1.シェアード・ターゲット・スタイル 2.セパレート・ターゲット・スタイル
汎化 スーパー スーパー サブ1 サブ2 サブ1 サブ2 スーパークラス 汎化 ・・・ ・・・ 省略表記 シェアード・ターゲット・スタイル セパレート・ターゲット・スタイル
学校の汎化関係の例 学校 義務教育学校 任意教育学校 小学校 中学校 高校 大学
コラム:単一継承、多重継承 単一継承:1つのスーパークラスのみと汎化関係にある 多重継承:2つ以上のスーパークラスと汎化関係にある メリット:現実をそのままモデリングできる デメリット:属性、操作の衝突が起こる可能性がある ※C++はサポートしているが、Java、Smalltalkではサポートしていない
多重継承の例 動物 サイズ 飛行物 サイズ 属性がぶつかる 多重継承 鳥
抽象クラス 汎化の階層を作成したとき、実際のオブジェクトを作成する必要がないクラスを作る場合がある →オブジェクトを1つも持たないクラスを抽象クラスという 抽象クラスはサブクラスをまとめる役割を担う →抽象クラスは必ずサブクラスを持つ
抽象化クラス 動物 {abstract} 抽象化クラス 動物 猫 犬 馬 猿