特別なケース
特定のケースに対して特別な動作を提供するサブクラス。
詳しい説明については P of EAA ページの 496 を参照してください。
Null はポリモーフィズムを打ち破るため、オブジェクト指向プログラムでは厄介な存在です。通常、ある型の変数参照に対して自由に foo を呼び出すことができ、そのアイテムが正確な型であるかサブクラスであるかについて心配する必要はありません。厳密に型付けされた言語では、呼び出しが正しいことをコンパイラにチェックさせることもできます。しかし、変数は null を含む可能性があるため、null でメッセージを呼び出すとランタイムエラーが発生し、親切でフレンドリーなスタックトレースが表示される場合があります。
変数が null になる可能性がある場合は、null テストコードでそれを囲んで、null が存在する場合に適切な処理を行うようにする必要があります。多くの場合、適切な処理は多くのコンテキストで同じであるため、同じようなコードを多くの場所に記述することになり、コードの重複という罪を犯すことになります。
Null はこのような問題の一般的な例ですが、他の問題も定期的に発生します。数値システムでは無限大を扱う必要があり、加算などの操作には実数の通常の不変条件を破る特別ルールがあります。ビジネスソフトウェアにおける私の最初の経験の一つは、完全に知られておらず「占有者」と呼ばれていた公益料金の顧客とのものでした。これらはすべて、型の通常の動作を変更することを意味しています。
Null または奇妙な値を返すのではなく、呼び出し側が期待するインターフェイスと同じインターフェイスを持つ特別ケースを返します。