原文: http://www.martinfowler.com/eaaCatalog/specialCase.html

特定の場合に特別な振る舞いをするサブクラス

解説の全文は『PofEAA』 496 ページを参照。

Nullはポリモルフィズムを壊すのでオブジェクト指向プログラミングでは扱いがやっかいなものだ。通常、アイテムが正確な型かサブクラスであるかどうかを気にせず与えられた型の変数参照でfooを自由に起動することができる。強い型チェックの言語ですら、コンパイラにその呼び出しが正しいかをチェックさせることができる。しかしながら、変数にはnullを格納できるので、nullのメッセージを起動することによってランタイムエラーを引き起こすかもしれない。

変数がnullであり得る場合、nullであっても正しいことをするために忘れずにnullチェックのコードで囲まないといけない。正しいものは多くのコンテキスト中で同じことが多い。従って、いろんなところで似たようなコードを結局は書く - コードを複製する罪を受け入れる- のだ。

Nullはこのような問題の共通の例で、他のものは規則的なものだ。数論の世界だと、無限という実数での通常の不変式を壊す特別なルールをもつものを扱わなければならない。私のビジネスソフトウェアに関して一番最初の経験の一つは、ユーティリティ 「占有者」と呼ばれ、何も知らされてはいなかったユーティリティ顧客とのものだった。これらは全て、型の通常の振る舞いを変更するということを暗に言っている。

nullや妙な値を返す代わりに、呼び出し側が期待するものと同じインタフェースを持ったSpecial Caseを返しなさい。

ChangeLog

  • (translated by money@andore.com)

PofEAA index | パターンカタログの日本語版 | パターンカタログの英日対応表