コンピュータプログラミングII (12)

モノをひとまとまりとして捉える (5)

このスライドの使い方

テキスト等がはみ出した場合は、フォントサイズを小さくして調整する。 「S」 キーで小さく、「B」 キーで大きくなる。また、 下記のキーボード操作が使用できる。(一部キー操作は IE のみ対応)

「←」 or 「Page Up」 前のスライドに戻る
「→」 or 「Page Down」 or「スペース」 次のスライドに進む
「Home」 and 「End」 先頭(Home)または最後(End)のスライドへ移動
「C」 or 「contents?」 をクリック スライド一覧の表示
「F11」 or 「Ctrl+Shift+F (Win)」, 「Cmd+Shift+F (Mac)」 フルスクリーン表示と通常表示の切り替え
「F」 フッタの表示と非表示の切り替え
「A」 全スライド表示に切替 (印刷時に使う)
「S」「-」/「B」「+」 フォントサイズの大(B) 小(S)

本日のゴール

クラス間の関係

AがBを持っている、BはAの一部である、という関係を包含関係集約 (aggregation)、または has-a の関係と呼ぶ。

class Sun {
  Earth theEarth;
}

class Earth {

}

属性(フィールド)とすることで、包含関係が表現できる。また、メッセージを送ることができる。 この例では太陽は地球を管理下に置き、太陽から地球にメッセージを送ることができる。

包含されたオブジェクトの生成

包含元のオブジェクト生成時に、同時に生成するのが基本である。

class Sun {
  Earth theEarth;
  Sun() {
    theEarth = new Earth();
  }
}

class Earth {

}

ただし、あらかじめ用意したオブジェクトを外部から登録したい場合は異なる。

class Sun {
  Earth theEarth;
  void setEarth(Earth theEarth) {      // 外部からオブジェクトを与える
    this.theEarth = theEarth;
  }
}

class Earth {

}

クラスの包含関係: 例

1対多の包含関係

同種のものを複数持つ場合には、配列など複数の要素をまとめられる構造を使う。

class Car {
  final int numTire = 4;
  Tire[] tire;
  Car() {
    tire = new Tire[numTire];    // 配列の生成
    for(int i = 0; i < numTire; i++) {
      tire[i] = new Tire();      // オブジェクトの生成
    }
  }
}

class Tire {

}

1対多の包含関係: 例

包含といっても、Car オブジェクトに Tire オブジェクトが埋め込まれているのではない。 参照でたどれる関係となっている。

例題: のんびり歩く亀 (シンプル版)

亀がのんびり歩いている姿をアニメーションをする。 ここではシンプルに、甲羅を含む胴体に頭がくっついているだけの構造にする。

等速で下から上にゆっくり移動させること。ウィンドウの上まで来ると止まるようにすること。

ファイル名: simpleTurtle.pde

例題: のんびり歩く亀 (シンプル版)

ヒント

参考

例示している亀の大きさと色は下記の通り。

色は colorMode(HSB, 360, 100, 100); の場合。

例題: のんびり歩く亀 (シンプル版) (解答例)