第5回 Smalltalk の総合練習(5月7日;5月15日)
■ 課題
旗の図形オブジェクトと図形を格納するオブジェクトを作ろう。旗の図形オブジェクトは、FlagMorph というクラス名で定義しよう。FlagMorph は RectangleMorph と StarMorph を組合せた図形である。RectangleMorph の基準点より x 軸方向に 11、y 軸方向に 6 だけ離れたところに、StarMorph を表示するものとする。ここで、FlagMorph は以下のメッセージが処理できるものとする。
- create RectangleMorph と StarMorph の図形を準備し、表示位置を (0,0) とする。ここで、RectangleMorph が座標 (0,0) に存在するとき、StarMorph は座標 (11,6) に存在することとする。
- position: 〈座標〉 引数の〈座標〉は、Point のインスタンスである。この座標のところに RectangleMorph が、そして、そこから、x 軸方向に 11、y 軸方向に 6 だけ離れたところに、StarMorph が、それぞれ表示されるものとする。
- openInWorld 図形を表示する。RectangleMorph を表示した後に、StarMorph を表示すること。
- delete 図形を非表示とする。
図形を格納するオブジェクトは、ShowCase というクラス名で定義しよう。ShowCase は、Bag と同じく、複数のオブジェクトを格納するものである。ただし、格納するオブジェクトは、StarMorph や RectangleMorph と同様に、position:、openInWorld、delete の 3 つのメッセージが処理できることとする。ここで、ShowCase は以下のメッセージが処理できるものとする。
- showRow: 〈幅〉 x: 〈x座標〉 y: 〈y座標〉 始点座標と幅を与え、始点座標から右方向に横一列に等間隔で格納した図形を表示する。
- showColumn: 〈高さ〉 x: 〈x座標〉 y: 〈y座標〉 始点座標と高さを与え、始点座標から下方向に縦一列に等間隔で格納した図形を表示する。
- showCircle: 〈半径〉 x: 〈x座標〉 y: 〈y座標〉 半径と中心座標を与え、その円周上に等間隔で格納した図形を表示する。
- openInWorld 格納した図形全てに openInWorld のメッセージを送る。
- delete 格納した図形全てに delete のメッセージを送る。
レポートには、クラスの定義、メソッドの定義、実行用のワークスペース、および、画像の表示を印刷し、各要所にコメントを手書きして提出せよ。
実行の様子を以下に例示する。
(C) 2009.4.30 by tokuhisa