オブジェクト指向アプローチ論 第9回 |
このページは,2007年前期まで実施されていた科目の補助教材ページです。既に履修し終わった方々 の参考のために公開を継続しています。したがって,内容が古いままのものが残っておりますので注意 して下さい。 ※2007年度より実施されている2年生選択科目「オブジェクト指向プログラミングa」のページはここ ではありません。「オブジェクト指向プログラミングa」のページはこちらです。 |
●クラスの継承 (前編)「Javaを学ぶ 第10回 (2003年2月 )」
【柔軟性を失うプログラム】
・プログラムを開発していく途中で,扱うべきデータ型(クラス)が,増えたらどうなるか?
→そのままでは,追加された新しいクラス型のオブジェクトを扱えない
(下の例では,drawYourself()メソッドはTriangle型しか受け取れないため)
→そこで,追加された新しいクラス型を扱うメソッドをオーバロードして追加してみる。
→一応,解決できたようだが,本当にこれでよいのか??
List 1, List 2, List 3, List 4, List 5, List 6
・新しいクラスが追加されるごとにそれを扱うメソッドをオーバロードで追加していくと,プログラムが柔軟でなくなってしまう。
※新しいクラスを扱うすべての箇所(プログラムによっては数百箇所になる)に新しいメソッドを追加していかなければならない
(それらの内容はほとんど同じにもかかわらず)
→ プログラムが複雑化・巨大化し,その結果,理解しにくく誤りが入り込みやすくなるし,変更しにくくなる。
※一箇所でも書き忘れるとコンパイルエラーになる
そこで,オブジェクト指向は『クラスの継承』と『メソッド・オーバライド』という考え方でこの問題を解決している。
【クラス型と集合】
List 7
【スーパーセットとサブセット】
【継承とis-a関係】
List 8
【メソッドのオーバライド】&【オブジェクト指向がもたらす汎用性】
List 9
List 10, List 11
List 12, List 13, List 14, List 15, List 5
●まとめ
以上のことから,スーパークラスにふさわしいクラスを考え,プログラムは出来るだけスーパークラスを使って記述する。
そして,バリエーションを得るには,新しいサブクラスを定義して,サブクラスの中でメソッドをオーバライドしてやればよい。