拡張性に関するクラスの階層構造の考慮事項
更新 : 2007 年 11 月
クラスの階層構造をどれほど綿密にデザインしても、時が経つにつれて発展させていく必要があります。クラスの階層構造をデザインする際の初期段階での選択によって、後の作業が簡単になります。
クラスの階層構造を拡張する
クラスの階層構造を簡単に拡張できるようにするためのヒントを次に示します。
クラスの階層構造は、一般的なクラスから特殊なクラスへという順に定義します。継承階層の各レベルでクラスを定義するときには、できるだけ一般的になるようにします。派生クラスは、基本クラスのメソッドを継承し、継承したメソッドを再利用したり拡張したりできます。
たとえば、コンピュータのハードウェアをモデルにしてクラスの階層構造をデザインするとします。出力デバイスのモデリングを開始する段階で、まず、Display、Printer、および File の各クラスを定義します。次に、基本クラスで定義されているメソッドを実装するクラスを定義します。たとえば、Display からは、LCDDisplay というクラスを派生させ、EnterPowerSaveMode という名前のメソッドを実装できます。
データ型やストレージを定義するときには、余裕を見て定義しておくと、後の変更が簡単になります。たとえば、現在のデータでは標準の Integer 変数で十分な場合でも、Long 型の変数を使用します。
派生クラスで必要な項目だけを公開します。Private なフィールドとメソッドでは、名前の競合が起こりにくく、後で変更する可能性のある項目が他のユーザーによって使用されるのを防ぐことができます。
派生クラスだけが必要とするメンバは、Protected に設定します。これによって、派生クラスだけがこれらのメンバに依存することとなり、開発中にこれらのメンバを更新しやすくなります。
基本クラスのメソッドが Overridable メンバに依存しないようにします。それらのメンバの機能は、継承するクラスによって変更される場合があります。