MATLAB 組み込み型のサブクラス
MATLAB 組み込み型
組み込み型は、数値配列、logical 配列、文字配列など、基本的なデータの種類を表します。cell 配列および構造体などのその他の組み込み型には、任意のクラスに属するデータが含まれます。
組み込み型は、これらのクラスのオブジェクトを処理するメソッドを定義します。たとえば、並べ替え、算術演算および論理演算などの数値配列の演算を実行できます。
MATLAB® の組み込みクラスの詳細は、MATLAB の基本クラスを参照してください。
メモ
組み込みクラスと同じ名前のクラスを定義することはサポートされていません。
サブクラス化できる組み込み型
MATLAB 数値クラスと logical
クラスをサブクラス化することができます。数値型のリストは、数値型を参照してください。
Sealed
属性が true
に設定されたクラスをサブクラス化することはできません。クラスが Sealed
であるかどうかを判別するには、クラスのメタデータをクエリします。
mc = ?ClassName; mc.Sealed
値が 0
であれば、そのクラスは Sealed
ではなく、サブクラス化が可能です。
組み込み型をサブクラス化する理由
組み込みクラスのサブクラス化によって、特定のクラスのデータで行える操作を拡張します。たとえば、次の場合です。
クラス データで固有の操作を実行する
組み込みクラスのメソッドとその他の組み込み関数を、サブクラスのオブジェクトで直接使用する。たとえば、算術演算子が既に定義されているクラス (
double
など) からサブクラスが派生している場合、これらの演算子をすべて再実装する必要はありません。
組み込み型のサブクラスで使用できる関数
列挙型を定義するクラスを考えます。このクラスは、整数クラスから派生し、値を比較するメソッドや並べ替えるメソッドを継承できます。たとえば、int32
のような整数クラスは、すべての比較演算のメソッド (eq
、ge
、gt
、le
、lt
、ne
) をサポートします。
サブクラスがメソッドとして継承した関数の一覧を見るには、関数 methods
を使用します。
methods('SubclassName')
一般に、サブクラスのオブジェクトは次のいずれでも使用できます。
継承メソッド
スーパークラスと同じクラスの入力引数を通常は受け入れる関数
サブクラス オブジェクトを使用した組み込み関数の動作
組み込みクラスのサブクラスを定義すると、その組み込みクラスで定義されたすべてのメソッドがサブクラスに継承されます。また、MATLAB により、いくつかの組み込み関数をオーバーライドする追加のメソッドが、組み込みクラスのサブクラスに提供されます。
組み込みクラスに使用される組み込みの関数とメソッドは、組み込みクラスのサブクラスで呼び出された場合に異なる動作をすることがあります。どの関数を使用しているか、またサブクラスでプロパティを定義しているかどうかによって、動作は異なります。
動作の分類
組み込みクラスのサブクラスで継承されたメソッドを呼び出した場合、結果はメソッドによって行われる処理の性質によって異なります。これらメソッドの動作は、次のように分類できます。
データの値を処理して、スーパークラスのオブジェクトを返す。たとえば、
double
をサブクラス化して、2 つのサブクラス オブジェクトを加算する場合は、MATLAB により、数値が足し合わされ、クラスdouble
の値が 1 つ返されます。データの方向や構造を処理して、サブクラスのオブジェクトを返す。このような処理を実行するメソッドには、
reshape
、permute
、transpose
などがあります。サブクラスのオブジェクトを組み込みクラスに変換して、指定されたクラスのオブジェクトを返す。
uint32
、double
、char
などの関数は、サブクラスのオブジェクトを組み込みオブジェクトと同じように取り扱います。オブジェクトを比較、または特定のセットが含まれているかどうかをテストして、関数に応じて論理オブジェクトまたは組み込みオブジェクトを返す。
isequal
、ischar
、isobject
などの関数は、サブクラスのオブジェクトをスーパークラスのオブジェクトと同じように取り扱います。インデックス式でサブクラスのオブジェクトを返す。サブクラスでプロパティが定義されている場合、既定のインデックスは機能しなくなります。サブクラスは独自のインデックス メソッドを定義しなければなりません。
連結によってサブクラスのオブジェクトを返す。サブクラスでプロパティが定義されている場合は、既定の連結が無効になるので、サブクラスで独自の連結メソッドを定義しなければなりません。
組み込みクラスのサブクラスで使用できる組み込み関数を一覧するには、関数 methods
を使用します。
プロパティを定義する組み込みサブクラス
組み込みクラスのサブクラスでプロパティが定義される場合は、MATLAB の通常のインデックスと連結処理がサポートされなくなります。サブクラスのプロパティには任意のデータを含むことができるので、MATLAB で通常これらの処理を行うために呼び出す組み込み関数を使用することができなくなるためです。
このため、プロパティをもつクラスに対するインデックス付けと連結を、サブクラスで定義しなければなりません。サブクラスでインデックス付けと連結機能が必要な場合は、サブクラスで適切なメソッドを実装する必要があります。
インデックス付けのメソッド
サブクラスでインデックス付けをサポートするには、次のメソッドを実装する必要があります。
メモ
モジュール インデックスの mixin クラスが R2021b で導入されましたが、これらの mixin は組み込みクラスのサブクラスと互換性がありません。subsref
、subsasgn
、および subsindex
の実装方法の詳細については、subsref メソッドおよび subsasgn メソッドのコード パターンを参照してください。
連結のメソッド
サブクラスで連結をサポートするには、次のメソッドを実装する必要があります。