【レポート】抽象クラスと抽象メソッドの理解

【レポート】抽象クラスと抽象メソッドの理解

目的

実体の作ることのできない、あるいは作るべきでない概念を表すための抽象クラスと抽象メソッドを理解し、より高度なプログラムを作ること。

内容

図形クラス群に対して、三角形クラスを作成する。ただし、特殊条件の三角形(正三角形、直角三角形など)があるため、三角形クラスの抽象クラスをつくり、そこから派生させる。実行するmainのあるクラスは別途作成せよ。

ソースプログラム

以下にShapeクラスとそこから派生したSankakuクラス、またこのクラスから派生したTriangleクラスとTyokkakuクラス、またmainを含んだTester11クラスのソースプログラムを以下に示す。

・Shapeクラス

・Sankakuクラス

・Triangleクラス

・Tyokkakuクラス

・Tester11クラス

実行結果

3のソースプログラムの実行結果を以下の図1に示す。

図1

javadocの結果

ShapeクラスとSankakuクラスとTriangleクラスとTyokkakuクラスのjavadocの結果を以下の図に示す。

・Shapeクラス

図1
図2
図3

・Sankakuクラス

図4
図5
図6

・Triangleクラス:

図7
図8
図9
図10

・Tyokkakuクラス

図11
図12
図13
図14

考察

今回のプログラムのクラスの階層の図を以下に示した。

 クラスShapeとSankakuが抽象クラス。抽象クラスとは、実体を作ることができない概念を表すためのクラスのことであり、後で出てくる抽象メソッドも同じことを指す。抽象クラスの特徴として、インスタンスを生成できない、または生成すべきでないことと、メソッドの本体ができなく、その内容はサブクラスで具体化すべきであるといったことだ。また、抽象クラスはクラス宣言の部分にabstractをつけなくはならない。そして、1個でも抽象メソッドをもつクラスは、抽象クラスとして定義しなくてはならない。しかし、抽象クラスは、抽象メソッドを持たなくてもよい。

 今回のプログラムの部分で抽象クラスとメソッドが使われている部分はメソッドdraw。クラスTriangleでは正三角形を描画するプログラム、クラスTyokkakuでは直角三角形を描画するプログラムという2つのメソッドdrawには全く異なる内容が書かれている。

 今回のプログラムはクラスが5つあるが、呼び出される順としては、mainメソッドをもつTester11クラスである。まず、クラスShape型の配列を利用している。配列の要素p[0],p[1]は、それぞれ直角三角形、正三角形のインスタンスを参照する。それが終わったら拡張for文で、すべての要素に対して、メソッドprintを起動している。メソッドprintでは、toStringメソッドが返す文字列を表示して、メソッドdrawによる描画を行なっている。メソッドdrawはTyokkakuクラス、Triangleクラスの両方クラスで定義が同じだった。ここで、スーパークラスの非抽象メソッドを、サブクラスで抽象メソッドとしてオーバーライドすることができる。つまり、非抽象メソッドprintの中で、本体が定義されていない抽象メソッドtoStringとdrawを呼び出すことが出来る。従って、スーパークラスのShapeクラスで1つにくくり出した。

 また、直角三角形の出し方はまず、igetLengthメソッドでコンストラクタによって初期化したlength、今回は4を取得してint nに代入する。次に、for文によってまずi=1のときiはnつまり1は4以下かを判定している。今回は正しい為、for文の中身の処理に進む。次に引数iをとるメソッドputStarsを呼び出す。今回は、i=1です。While文では1は0より大きいので*を出す。その次はi=0なのでこれは0以上ではないので、while文の処理が終わり、メソッドputStarsの処理も終わり、メソッドdrawに戻り以下同じ処理を続ける。

 また、今回はプログラムに//**・・・・・*/形式の文章化コメントを記入している。これは、プログラムの仕様書ともなるドキュメントを生成するためのコメント。コメントを生成するには、javadocを利用している。付け足しとして、コメントが複数行にわたる時には、中間行の先頭にも*を書くのが一般的。コメントの最初には主説明を記述する。この部分には複数の文を記述可能だが、先頭の文は、コメントの対象となるクラスやメソッドなどの概要を簡潔にまとめた文書で書かなければならない。主説明の後ろには、プログラムの著者名・メソッドの戻り値などを、文書化コメント専用のタグを用いて記述する。タグは@で始まる特別な命令だ。

まとめ

 abstract付きで宣言されたメソッドは、抽象メソッドである。抽象メソッドは、本体を持たない。1個でも抽象メソッドをもつクラスは、抽象クラスとして定義しなければならない。抽象クラスの宣言には、abstractが必要である。抽象クラスのインスタンスを生成することできない。スーパークラスの非抽象メソッドを、サブクラスで抽象メソッドとしてオーバーライドすることが出来る。      

 文章化コメントの形式は/**・・・・*/である。Javadocツールによって、マニュアルというべきドキュメントを生成できる。文書化コメントの対象は、クラス・インタフェース・コンストラクタ・メソッド・フィールドである。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です