Main Content

MATLAB 組み込み型のサブクラス

MATLAB 組み込み型

組み込み型は、数値配列、logical 配列、文字配列など、基本的なデータの種類を表します。cell 配列および構造体などのその他の組み込み型には、任意のクラスに属するデータが含まれます。

組み込み型は、これらのクラスのオブジェクトを処理するメソッドを定義します。たとえば、並べ替え、算術演算および論理演算などの数値配列の演算を実行できます。

MATLAB® の組み込みクラスの詳細は、MATLAB の基本クラスを参照してください。

メモ

組み込みクラスと同じ名前のクラスを定義することはサポートされていません。

サブクラス化できる組み込み型

MATLAB 数値クラスと logical クラスをサブクラス化することができます。数値型のリストは、数値型を参照してください。

Sealed 属性が true に設定されたクラスをサブクラス化することはできません。クラスが Sealed であるかどうかを判別するには、クラスのメタデータをクエリします。

mc = ?ClassName;
mc.Sealed

値が 0 であれば、そのクラスは Sealed ではなく、サブクラス化が可能です。

組み込み型をサブクラス化する理由

組み込みクラスのサブクラス化によって、特定のクラスのデータで行える操作を拡張します。たとえば、次の場合です。

  • クラス データで固有の操作を実行する

  • 組み込みクラスのメソッドとその他の組み込み関数を、サブクラスのオブジェクトで直接使用する。たとえば、算術演算子が既に定義されているクラス (double など) からサブクラスが派生している場合、これらの演算子をすべて再実装する必要はありません。

組み込み型のサブクラスで使用できる関数

列挙型を定義するクラスを考えます。このクラスは、整数クラスから派生し、値を比較するメソッドや並べ替えるメソッドを継承できます。たとえば、int32 のような整数クラスは、すべての比較演算のメソッド (eqgegtleltne) をサポートします。

サブクラスがメソッドとして継承した関数の一覧を見るには、関数 methods を使用します。

methods('SubclassName')

一般に、サブクラスのオブジェクトは次のいずれでも使用できます。

  • 継承メソッド

  • スーパークラスと同じクラスの入力引数を通常は受け入れる関数

サブクラス オブジェクトを使用した組み込み関数の動作

組み込みクラスのサブクラスを定義すると、その組み込みクラスで定義されたすべてのメソッドがサブクラスに継承されます。また、MATLAB により、いくつかの組み込み関数をオーバーライドする追加のメソッドが、組み込みクラスのサブクラスに提供されます。

組み込みクラスに使用される組み込みの関数とメソッドは、組み込みクラスのサブクラスで呼び出された場合に異なる動作をすることがあります。どの関数を使用しているか、またサブクラスでプロパティを定義しているかどうかによって、動作は異なります。

動作の分類

組み込みクラスのサブクラスで継承されたメソッドを呼び出した場合、結果はメソッドによって行われる処理の性質によって異なります。これらメソッドの動作は、次のように分類できます。

  • データの値を処理して、スーパークラスのオブジェクトを返す。たとえば、double をサブクラス化して、2 つのサブクラス オブジェクトを加算する場合は、MATLAB により、数値が足し合わされ、クラス double の値が 1 つ返されます。

  • データの方向や構造を処理して、サブクラスのオブジェクトを返す。このような処理を実行するメソッドには、reshapepermutetranspose などがあります。

  • サブクラスのオブジェクトを組み込みクラスに変換して、指定されたクラスのオブジェクトを返す。uint32doublechar などの関数は、サブクラスのオブジェクトを組み込みオブジェクトと同じように取り扱います。

  • オブジェクトを比較、または特定のセットが含まれているかどうかをテストして、関数に応じて論理オブジェクトまたは組み込みオブジェクトを返す。isequalischarisobject などの関数は、サブクラスのオブジェクトをスーパークラスのオブジェクトと同じように取り扱います。

  • インデックス式でサブクラスのオブジェクトを返す。サブクラスでプロパティが定義されている場合、既定のインデックスは機能しなくなります。サブクラスは独自のインデックス メソッドを定義しなければなりません。

  • 連結によってサブクラスのオブジェクトを返す。サブクラスでプロパティが定義されている場合は、既定の連結が無効になるので、サブクラスで独自の連結メソッドを定義しなければなりません。

組み込みクラスのサブクラスで使用できる組み込み関数を一覧するには、関数 methods を使用します。

プロパティを定義する組み込みサブクラス

組み込みクラスのサブクラスでプロパティが定義される場合は、MATLAB の通常のインデックスと連結処理がサポートされなくなります。サブクラスのプロパティには任意のデータを含むことができるので、MATLAB で通常これらの処理を行うために呼び出す組み込み関数を使用することができなくなるためです。

このため、プロパティをもつクラスに対するインデックス付けと連結を、サブクラスで定義しなければなりません。サブクラスでインデックス付けと連結機能が必要な場合は、サブクラスで適切なメソッドを実装する必要があります。

インデックス付けのメソッド

サブクラスでインデックス付けをサポートするには、次のメソッドを実装する必要があります。

  • subsasgn — ドット表記とインデックス付き代入の実装

  • subsref — ドット表記とインデックス付き参照の実装

  • subsindex — オブジェクトのインデックス値としての実装

メモ

モジュール インデックスの mixin クラスが R2021b で導入されましたが、これらの mixin は組み込みクラスのサブクラスと互換性がありません。subsrefsubsasgn、および subsindex の実装方法の詳細については、subsref メソッドおよび subsasgn メソッドのコード パターンを参照してください。

連結のメソッド

サブクラスで連結をサポートするには、次のメソッドを実装する必要があります。

  • horzcat — オブジェクトの水平方向の連結の実装

  • vertcat — オブジェクトの垂直方向の連結の実装

  • cat — 指定した次元における配列オブジェクトの連結の実装

関連するトピック