2003年10月10日
川俣晶の縁側ソフトウェア技術雑記total 4594 count

『継承』さんごめんなさい。あなたは無実でした。オブジェクト指向を巡る混乱の中での間違いだった?

Written By: 川俣 晶連絡先

 オブジェクト指向の問題点として指摘される機能に、「継承」というものがあります。実際、継承はソースの流れが分かりにくくなるということは、私も感じていて、前にも書いています。継承は出来る限り使わない、あるいは、絶対に使わないと主張する人もいます。

 しかし、継承悪者説は冤罪ではないか、という気がしてきました。

 そんな気がするようになった発端は、「どうしても受け入れるのが気持ちが悪いオブジェクト指向と、そうではないオブジェクト指向の違いは何か?」( https://mag.autumn.org/Content.aspx?id=20031007141013 )の最後で、オブジェクト指向に感じる気持ちの悪さを、「要求とコードの中間に詳細なモデルの構築を要求する」としたことです。

 もし、それがオブジェクト指向の気持ちの悪さの源泉だとすると、継承はいったいどうなのか、と考えてみたわけです。

 そう考えた直接的な理由は、NestedHtmlWriter( https://www.piedey.co.jp/softs/NestedHtmlWriter.html )を使ってコーディングしていて、少し手直しを必要としたことにあります。

 NestedHtmlWriterは継承のお化けです。何重にも継承関係が存在するもので、継承イコール悪とするなら、かなり出来の悪いものです。

 しかし、NestedHtmlWriterを使っていて、気持ちの悪さを感じません。

 これはなぜだろうかと考えたわけです。

 その結果、思ったことは、「継承は悪くない」ということでした。

 もともと、継承的な関係を持つ対象をプログラミングする場合、継承の機能を使って表現することは、最も自然なことであり、継承を使わない方がかえって見通しが悪くなるのだと思いました。

 たとえば、NestedHtmlWriterが扱うXHTMLなら、要素は、インライン要素などのカテゴリに分けられ、同じカテゴリに属する要素は、共通の機能性を要求されます。このカテゴライズは、継承によって素直に表現することができます。

 このような継承の使い方は好ましい、というのが私の感想です。

 それにも関わらず、継承が悪者扱いされるのはなぜか。

 ちょっと考えて思い付いたことは、継承の使い方を間違えているからではないか、と言うことでした。

 つまり、継承的な関係を持つ対象をプログラミングする場合に継承を使うのは正しいとするなら、継承的な関係を持たない対象を継承を使って表現することは、分かりにくさを生むと言えるかもしれません。たとえば、継承的な関係は無いものの、共通の性質があるときに継承を使って共通の性質をスーパークラスで実現する、というようなものは、この例です。実際、思い返してみると、私がさほど複雑ではないのにソースを見て悲鳴を上げた継承の使用例は、それに該当するものだと思います。対象が継承的な関係を持っているから継承を使ったわけではなく、ただ単に、switch文のポリモーフィズムへの置き換えというリファクタリングを盲目的に行っただけのことでした。

 (ただ、念のために付け加えるなら、全く整理されていない意味も読み取れない破滅的なソースを扱う場合、盲目的にswitch文のポリモーフィズムへの置き換えを実行することは悪くないと思います。その方が、それを行わないよりも、分かりやすくなる可能性が高いと思います。根拠は無いですが)

 このような見方をするなら、継承の出番は多くない、という感じがします。

 全てとは言わないまでも、大半の機能を継承を前提としてデザインしていく行為は、たぶん間違いでしょうが、全ての継承を排斥する行為も、同様に間違いなのでしょう。たぶん。根拠はありませんが。

 なお、例によって、この文章の内容は単なる思いつきですので、内容は一切無保証です。本人も100%信じているわけではありません。

Facebook

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20031010155146
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.