Main Content

データをカプセル化する列挙型

プロパティをもつ列挙クラス

列挙クラスはプロパティを定義してデータ値を格納します。列挙メンバーは、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

関連するトピック