オブジェクト指向アプローチ論 第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





●まとめ
 以上のことから,スーパークラスにふさわしいクラスを考え,プログラムは出来るだけスーパークラスを使って記述する。
 そして,バリエーションを得るには,新しいサブクラスを定義して,サブクラスの中でメソッドをオーバライドしてやればよい。