オブジェクト指向の説明としての「犬猫」の何が問題か

Twitter上でたまに(割と?)交わされる議論っぽくて調べてみた

togetter.com

オブジェクト指向の説明として「犬猫」が用いられる事は割とある、と言うか大半がそうであり、よく使われる事例である気がする。しかしこれが初心者への説明としては不適切なのではないか?と言う話である。一体何がいけないのだろうか。

ぱっと考えた時、「犬猫」を抽象化したら、それは「哺乳類」である。もしくは「動物」である。よってこれは何ら間違っていないし正しい気がする。ことによると、「犬猫」の抽象クラスは「ペット」である事が適切であるらしい。なぜか?

その理由は、業務システム上、哺乳類を扱ったり、その鳴き声をどうこうするシステムなんてほぼないからである。現実のシステム事例から乖離しすぎている、との事。なるほど。

システムには必ずコンテキストが存在する。ちなみに「犬猫」の抽象クラスが「哺乳類」である事自体が間違いではない。例えば生物分類のデータベース等では適切である。

ただ殆どのシステムはそうではない。前提がない、理解していない状態でのふわっとした設計(コンテキストを見ていない)をするとこういう事が起こりかねない(ペットショップのシステムで「哺乳類」クラスを作る、生物分類のシステムで「ペット」クラスを作るなど)

一時期「DDD」のような言葉も流行った。今思えばこういう危うさへの対応だった気がする。前提を正しく理解していなければそう言った破滅的な設計ミスをしかねない。

犬猫問題は、初学者のみならず、システム開発者全員が気をつけなければならないドメイン理解の重要性を、改めて再認識させてくれる問題でもあったのだなぁ、と思った。