クラス階層とは
クラス階層とも呼ばれるクラス階層は、継承を通じて接続され、同様のことを行う関連クラスのグループです。 階層の最上部は、その下にある他のすべてのクラスの派生元となる単一の基本クラスにすることも、1つまたは複数の派生クラスで機能が結合する複数の基本クラスを持つこともできます。 クラス間の関係はツリーとして示すことができ、大きな分類内の小さなツリーも階層と見なすことができます。
すべてのクラス階層が複数のルートを持つことができるわけではなく、クラス階層の構造はそれが記述されている言語に大きく依存します。C++では複数の継承が可能です。 一方、Java®は単一の継承に制限されているため、通常、クラスの関係はより単純で、単一のルートを持つ比較的自己完結型のツリーとして構築されます。 インターフェースの継承は、Java®のクラス階層に多少の複雑さを追加しますが、インターフェースがツリーを一緒にマージするような複雑なフレームワークで呼び出されることはほとんどありません。
クラスの階層のコンポーネントは、言語のルールが継承に関して常に守られている限り、タイプと機能が異なります。 階層内のクラスは、パブリック、保護、抽象、具象、仮想のいずれかになります。 インターフェイス、グローバル関数、およびフレンドも使用できます。 コンピュータ言語に応じて、これらのタイプの一部は、他のタイプよりも継承に適している場合があります。 一般に、階層は非常に柔軟であり、さまざまな目的でさまざまな方法で使用できます。
特定のタイプのクラスを階層内のどこに配置するかに関する厳格な規則はありません。 任意のクラスは、上記のタイプのいずれかと考えられます。 一般に、その下に派生クラスを持たない階層の最後のクラスは、パブリックで具体的である必要があります。 ただし、純粋な抽象クラス階層も存在する可能性があるため、これは単なる経験則です。
クラス階層は、コードを整理して機能をカプセル化するための便利なツールになりますが、階層を深く掘り下げると、コードを明確にして保守しやすくするのではなく、実際にコードを混乱させる場合があります。 多くのクラス間に強固な関係を構築するには、ある程度の先見性が必要です。 最初はコードを多数の小さな断片に分割する方が簡単かもしれませんが、それらの小さな断片は後で処理するのが難しくなる可能性があります。 適切に構築されたクラス階層は、開発者とユーザーの両方がクラスの動作を決定するのに役立ちます。 メンテナンスと明快さを念頭に置いて構築されていない場合、多くのレベルの継承は振り返って理解するのが混乱する可能性があります。