MATLAB でのオブジェクトの操作
一部の MATLAB® 関数は "オブジェクト" を返します。オブジェクトは、データ ("プロパティ") を関数およびメソッドと結合します。オブジェクト プロパティには、データ (数値やテキストなどの単純なタイプを含む) やその他のオブジェクトが含まれています。関数とメソッドは、オブジェクト自体に対してアクションを実行します。これらの関数は、たとえば、オブジェクト プロパティに対してアクションを実行したり、オブジェクトの状態を変更したりできます。
オブジェクトの作成
オブジェクトを作成するときに、そのオブジェクトに変数を割り当てることができます。変数により、オブジェクトのプロパティやメソッドにアクセスできます。たとえば、関数histogram
の次の構文では、x
のデータのヒストグラムが表示されるだけでなく、オブジェクトが出力 h
として返されます。
h = histogram(x)
1,000 個の乱数を表示する histogram オブジェクトを作成します。出力引数を指定して histogram
を呼び出すと、グラフ、そのオブジェクトの型またはクラス (Histogram
)、およびオブジェクトのプロパティとその値の部分リストが表示されます。
x = randn(1000,1); h = histogram(x)
h = Histogram with properties: Data: [1000x1 double] Values: [3 1 2 15 17 27 53 79 85 101 127 110 124 95 67 32 27 16 6 6 4 1 2] NumBins: 23 BinEdges: [-3.3000 -3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000 -0.9000 -0.6000 -0.3000 0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3 3.3000 3.6000] BinWidth: 0.3000 BinLimits: [-3.3000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
ワークスペースでは、histogram オブジェクトが、オブジェクトの次元や型などの他のアクティブな変数とともにリストされます。
オブジェクト プロパティの取得と設定
オブジェクト プロパティにはデータが含まれています。プロパティ値を変更することで、オブジェクトの特定の特性を変更できます。オブジェクトに割り当てられた変数と共にドット表記を使用すると、そのプロパティにアクセスしたり、それを変更したりできます。
histogram オブジェクトの場合、プロパティには生データ、ビンの数、各バーの高さ、およびヒストグラムの外観を制御するその他の情報が含まれています。たとえば、Orientation
は、バーの表示方向を水平または垂直のどちらにするかを決定する、histogram オブジェクトのプロパティです。オブジェクトの名前 (h
)、ドット、およびプロパティ名を入力して、プロパティの値にアクセスできます。
h.Orientation
ans = 'vertical'
同じ構文を使用してプロパティの値を変更できますが、等号記号と新しい値を追加する必要があります。
h.Orientation = "horizontal"
h = Histogram with properties: Data: [1000x1 double] Values: [3 1 2 15 17 27 53 79 85 101 127 110 124 95 67 32 27 16 6 6 4 1 2] NumBins: 23 BinEdges: [-3.3000 -3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000 -0.9000 -0.6000 -0.3000 0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3 3.3000 3.6000] BinWidth: 0.3000 BinLimits: [-3.3000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
すべてのオブジェクト プロパティが書き込み可能なわけではありません。プロパティが読み取り専用の場合、読み取ることはできても、新しい値をプロパティに代入しようとするとエラーが返されます。たとえば、ヒストグラムの Values
プロパティには各バーの高さが格納され、オブジェクトの作成時にその高さが計算されます。これは読み取り専用プロパティであるため、Values
を直接変更することはできません。
オブジェクトを受け入れる関数
一部の関数は、オブジェクトに対してアクションを実行することを目的としています。これらの関数は、オブジェクトの 1 つのクラスのみに対して定義される "メソッド" か、そのオブジェクトを通常の入力引数として受け入れる関数にすることができます。いずれの場合も、オブジェクトの変数を入力として使用できます。たとえば、Histogram
オブジェクトに、ヒストグラムのビンの数を増やす関数 morebins
と、減らす関数 fewerbins
が含まれているとします。現在、ヒストグラム内にあるビンの数を確認するには、NumBins
プロパティにアクセスします。
h.NumBins
ans = 23
morebins
を呼び出して、ヒストグラム h
のビンの数を増やします。関数 morebins
は、ビンの数をおよそ 10% ずつ増やすので、ビンの数は 23 から 26 に増えます。
morebins(h)
ans = 26
他のオブジェクト指向のプログラミング言語では、頻繁にドット表記を使用して、h.morebins
のようにメソッドを呼び出します。その構文は、MATLAB のメソッドでもサポートされます。ただし、サンプル コード内で整合性を取るために、このドキュメンテーションでは、ほとんどのメソッドおよびオブジェクト入力を受け入れる関数に関数形式を使用しています。
関数 morebins
には入力引数が追加されていませんが、このことは、オブジェクトを受け入れるすべての関数に当てはまるわけではありません。オブジェクト自体に加え、オブジェクト関数は追加の入力引数をもつことができ、それらの引数は、標準の関数構文を使用して関数に渡すことができます。たとえば、次の構文では、2 つの入力引数を取るオブジェクト関数を呼び出すことができます。
functionName(objectVariable,arg1,arg2)
ユーザー独自のクラスベース オブジェクトの定義
オブジェクト指向のプログラミング手法を使用すれば、MATLAB 言語で提供されるオブジェクトに加えて、独自のクラスベース オブジェクトを作成できます。MATLAB 言語は標準の OO 規則に従います。詳細については、最初に単純なクラスの作成を参照してください。