オブジェクト指向言語の継承関係

オブジェクト指向言語の継承関係

オブジェクト指向言語でソフトウェアを開発する時、一番、設計で悩むのはこの継承関係ではないでしょうか。

継承関係とは抽象度の大小で関係性を示すことで、後のコーディング量の削減やメンテナンスのしやすさに関わってきます。

例えば、「人」「男性」「中学生」とキーワードが並ぶと、抽象度で順列をつけると 【「人」> 「男性」>「中学生」】 となります。

尤も、中学生には女性もいるでしょう。上記は常には正しくないわけです。

ソフトウェア開発における継承関係

このブログで言いたいのはまさに「上記は常には正しくないわけです。」のところです。

あるシステムでは 【「人」> 「男性」>「中学生」】  は正しいのですが、あるシステムでは間違いという点です。

継承関係を考える上では実装したい世界はどのような範囲なのかを捉えることが絶対に必要になります。

話を戻しますね。【「人」> 「男性」>「中学生」】 が正しい世界。それは、 例えば、 ・男子中学の名簿システムなので男性=中学生か、男性の先生しかいないシステムでよい こうです。

はい、女性が登場しないシステムならば【「人」> 「男性」>「中学生」】で良いのです。

 1年後、この学校では将来女性も入学することが判明しました。

さて、エンジニアは困りました。なにせ、【「人」> 「男性」>「中学生」】という概念で 実装していたシステムに女学生が加わることになりました。

こうなると、システムの全更改ですね。多分、【「人(+性別属性)」>「中学生」】みたいな 設計に変更しないといけません。メンテナンス性の良かったオブジェクト指向がむしろ仇となりました。

つまりエンジニアは 「後々にどのようなシステム拡張や変更が行われるかを意識して継承関係を設計する必要がある」 のです。

これがエンジニアを悩ませる継承話なのです。将来の拡張なんてわかるわけが無いというのに。