ドキュメンテーション

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

クラスの階層 - 概念

分類

クラスを階層化すると、コードに加え、既に解決済みの設計問題の解も再利用しやすくなります。クラスの階層はセットとみなすことができます。このセットは、スーパーセット ("スーパークラス" または "基本クラス") とサブセット ("サブクラス" または "派生クラス") からなります。次の図は、クラスを使用して従業員のデータベースを表す方法を例として示しています。

階層のルートには、Employees クラスがあります。このクラスは、すべての従業員のセットに適用するデータと操作を含みます。従業員のセットにはサブセットが含まれます。サブセットのメンバーは従業員でもありますが、従業員のタイプをさらに特定して定義するセットのメンバーでもあります。TestEngineer のようなサブクラスは、これらのサブセットの例です。

抽象化を進める方法

クラスは、現実の世界の概念または物事を表現します。クラスを設計する際には、クラスが表現するものを抽象化します。従業員の抽象化と、クラスの利用目的に対して従業員の本質的な面は何かを考えてください。たとえば、住所、氏名、部門は、すべての従業員がもっているものです。

クラスを設計するときに抽象化にはこれらの必要な要素のみを含めなければなりません。たとえば、従業員の髪の色や靴のサイズも特長には違いありませんが、この従業員クラスの設計には関係がないといえるでしょう。一方、販売担当地域は、一部の従業員だけに関係するので、サブクラスに属します。

クラス階層の設計

クラスのシステムを設計する際には、共通のデータと機能をスーパークラスに配置します。このスーパークラスから、サブクラスを派生します。サブクラスは、スーパークラスのデータや機能を継承し、特定の目的に応じたサブクラスに固有の特徴のみを定義します。この方法には、次のような利点があります。

  • すべてのクラスに共通するコードの重複を避けられる。

  • スーパークラスを修正せず、さらに他のサブクラスに影響を与えずに、いつでもサブクラスの追加や変更ができる。

  • スーパークラスが変更されると (たとえば、全従業員に従業員番号が割り当てられた場合など) と、サブクラスも同様に変更される。

スーパークラスとサブクラスの動作

サブクラスのオブジェクトは、スーパークラスを特殊化したものであるので、スーパークラスのオブジェクトと同様に動作します。このことにより、同じように動作する関連するクラスの開発は容易になりますが、実装は異なります。

スーパークラス オブジェクトとサブクラス オブジェクトの Is-A 関係

サブクラスのオブジェクトとそのスーパークラスのオブジェクトとの関係は、通常、以下のようなステートメントを使用して説明することができます。

サブクラス is a スーパークラス。例:技術者 is a 従業員。

つまり、サブクラスに属するオブジェクトは、スーパークラスと同じプロパティ、メソッド、イベントに加えて、サブクラスで定義される新しい機能をもつことになります。この関係を関数 isa を使ってテストします。

サブクラスのオブジェクトをスーパー クラスのオブジェクトのように取り扱う

サブクラスのオブジェクトをスーパークラスのメソッドに渡すことはできますが、アクセスできるのはスーパークラスで定義されているプロパティだけです。この動作により、スーパークラスに影響を与えずにサブクラスを修正できます。

スーパークラスとサブクラスの動作について、次の 2 点を覚えておく必要があります。

  • スーパークラスで定義されているメソッドは、サブクラス オブジェクト上で使用可能

  • サブクラスで定義されているメソッドは、スーパークラス オブジェクト上で使用不可能

したがって、その他の Employee オブジェクトのように Engineer オブジェクトを取り扱うことができますが、Employees オブジェクトを Engineer オブジェクトに渡すことはできません。

オブジェクト代替の制限

MATLAB® では、そのオブジェクトの最も特有なクラスに基づいてオブジェクトのクラスを判定します。したがって、Engineer オブジェクトは、class Engineer である一方、関数 isa を使用するとわかるように、これは Employees オブジェクトでもあります。

通常、MATLAB では、配列は 1 つのクラスのみに属していなければならないため、スーパークラス オブジェクトとサブクラス オブジェクトが混在した配列の作成はできません。異なるクラスのオブジェクトを連結しようとした場合、MATLAB は、最も優先度の低いクラス (通常、式内で一番左にあるクラスが優先度の高いクラス) によって定義されるコンバーター メソッドを検索します。

詳細は、「異なるクラスのオブジェクトの連結」を参照してください。

異なるタイプのクラス階層の詳細は、「matlab.mixin.Heterogeneous」を参照してください。

コンバーター メソッドの定義方法の詳細は、「オブジェクトを他のクラスに変換する」を参照してください。

実装とインターフェイスの継承

MATLAB クラスは、スーパークラスから実装されたメソッドの継承、スーパークラスの抽象メソッドで定義されたインターフェイスの継承をサポートします。

継承の実装により、サブクラスはコードを再利用できます。たとえば、employee クラスは、すべての employee サブクラスが使用できる submitStatus メソッドをもつことができます。サブクラスは、一般的な面を再利用しながら特化した機能を提供するように継承メソッドを拡張できます。この過程の詳細は、「スーパークラス メソッドとプロパティの修正」を参照してください。

複数のクラスに同じインターフェイスを指定し、これらのクラスで各クラスに特化した実装をメソッドとプロパティに与えてインターフェイスを定義する場合に、インターフェイスの継承は便利です。

抽象クラスをスーパークラスとして使用して、インターフェイスを作成します。このクラスは、サブクラスで実装しなければならないメソッドとプロパティを定義しますが、実装は与えません。

サブクラスでは、スーパークラスの抽象メンバーの独自の実装を与えなければなりません。インターフェイスを作成するには、Abstract 属性を使用してメソッドとプロパティを abstract として定義します。

詳細と例は、「抽象クラスの定義」を参照してください。

この情報は役に立ちましたか?