データをカプセル化する列挙型
プロパティをもつ列挙クラス
列挙クラスはプロパティを定義してデータ値を格納します。列挙メンバーは、MATLAB® がクラス コンストラクターで代入する、これらのプロパティの特定の値を表します。列挙クラスの定義の詳細については、列挙クラスの定義を参照してください。
プロパティ内にデータを格納
メモ
組み込みの数値クラスまたは論理クラスをサブクラス化する列挙クラスは、プロパティを定義することも、継承することもできません。この種類の列挙クラスの詳細については、組み込みクラスから派生した列挙を参照してください。
特定のデータを列挙メンバーと関連付けたい場合は、列挙クラス内でプロパティを定義します。しかし、MATLAB が特定の組み込みクラスのために定義する計算、順序、他の操作などを継承する必要はありません。
色の表示
列挙クラスを定義して、色設定でカラーの RGB 値を表示します。Colors
クラスは、色に対する名前を定義します。それぞれクラス コンストラクターへの引数として RGB 値を使用します。
classdef Colors properties R = 0 G = 0 B = 0 end methods function c = Colors(r, g, b) c.R = r; c.G = g; c.B = b; end end enumeration Blueish (18/255,104/255,179/255) Reddish (237/255,36/255,38/255) Greenish (155/255,190/255,61/255) Purplish (123/255,45/255,116/255) Yellowish (1,199/255,0) LightBlue (77/255,190/255,238/255) end end
列挙メンバーを使用してプロパティ値にアクセスできます。
Colors.Reddish.R
ans = 0.9294
Reddish
と名付けられた新しい赤の色調でプロットを作成するとします。
a = Colors.Reddish; [a.R,a.G,a.B]
ans = 0.9294 0.1412 0.1490
これらの値を使用して、列挙メンバーのプロパティにアクセスします。たとえば、関数 myPlot
は入力引数として Colors
列挙メンバーを受け入れます。この関数は、プロパティ値から色を定義する RGB 値にアクセスします。
function h = myPlot(x,y,LineColor) h = line('XData',x,'YData',y); r = LineColor.R; g = LineColor.G; b = LineColor.B; h.Color = [r g b]; end
赤味がかった色の線を使用するプロットを作成します。
h = myPlot(1:10,1:10,Colors.Reddish);
Colors
クラスは標準設定の色の定義をカプセル化します。列挙値を使用する関数に影響を与えることなく、色の列挙クラスの定義を変更することができます。
カテゴリを定義する列挙型
以下に示す Cars
クラスは、自動車の在庫表を作るために使用するカテゴリを定義します。Cars
クラスは handle
から派生する CarPainter
クラスから派生します。抽象 CarPainter
クラスは paint
メソッドを定義します。これは車を別の色に塗る場合に Color
プロパティを変更します。
Cars
クラスは Colors
列挙メンバーを使用して、使用できる色を制限したセットを指定します。正確に定義されたどのような色でも Cars
クラスに関係なく変更することができます。
classdef Cars < CarPainter enumeration Hybrid (2,'Manual',55,Colors.Reddish) Compact(4,'Manual',32,Colors.Greenish) MiniVan(6,'Automatic',24,Colors.Blueish) SUV (8,'Automatic',12,Colors.Yellowish) end properties (SetAccess = private) Cylinders Transmission MPG Color end methods function obj = Cars(cyl,trans,mpg,colr) obj.Cylinders = cyl; obj.Transmission = trans; obj.MPG = mpg; obj.Color = colr; end function paint(obj,colorobj) if isa(colorobj,'Colors') obj.Color = colorobj; else [~,cls] = enumeration('Colors'); disp('Not an available color') disp(cls) end end end end
CarPainter
クラスは paint
と呼ばれるメソッドを定義するためにそのサブクラスを必要とします。
classdef CarPainter < handle methods (Abstract) paint(carobj,colorobj) end end
Cars
クラスのインスタンスを定義します。
c1 = Cars.Compact;
この車の色は Greenish
で、Colors.Greenish
列挙型によって定義されます。
c1.Color
ans = Greenish
paint
メソッドを使用して、車の色を変更します。
c1.paint(Colors.Reddish) c1.Color
ans = Reddish