Main Content

クラスを使用したグラフィックスの表示

クラスによる面積の計算

CircleArea クラスで、標準的なクラス定義の構文を示します。このクラスは円の半径の値を保存し、リクエストに応じて円の面積を計算します。CircleArea にはクラスのオブジェクトをグラフ化し、表示し、作成するためのメソッドが実装されています。

CircleArea クラスを使用するには、CircleArea.m という名前のファイルにこのコードをコピーし、MATLAB® パスにあるフォルダーにこのファイルを保存します。

classdef CircleArea
   properties
      Radius
   end
   properties (Constant)
      P = pi
   end
   properties (Dependent)
      Area
   end
   methods
      function obj = CircleArea(r)
         if nargin > 0
            obj.Radius = r;
         end
      end
      function val = get.Area(obj)
         val = obj.P*obj.Radius^2;
      end
      function obj = set.Radius(obj,val)
         if val < 0
            error('Radius must be positive')
         end
         obj.Radius = val;
      end
      function plot(obj)
         r = obj.Radius;
         d = r*2;
         pos = [0 0 d d];
         curv = [1 1];
         rectangle('Position',pos,'Curvature',curv,...
            'FaceColor',[.9 .9 .9])
         line([0,r],[r,r])
         text(r/2,r+.5,['r = ',num2str(r)])
         title(['Area = ',num2str(obj.Area)])
         axis equal
      end
      function disp(obj)
         rad = obj.Radius;
         disp(['Circle with radius: ',num2str(rad)])
      end
   end
   methods (Static)
      function obj = createObj
         prompt = {'Enter the Radius'};
         dlgTitle = 'Radius';
         rad = inputdlg(prompt,dlgTitle);
         r = str2double(rad{:});
         obj = CircleArea(r);
      end
   end
end

CircleArea クラスの使用

ダイアログ ボックスを使用してオブジェクトを作成します。

ca = CircleArea.createObj

半径の値を追加して [OK] をクリックします。

Dialog for entering radius

定義された円の面積をクエリします。

ca.Area
ans =

  164.2202

オーバーロードしたプロット メソッドを呼び出します。

plot(ca)

Graph of circle with radius 7.23

クラス定義の説明

クラス定義コードは classdef キーワードおよびそれに続くクラス名によって始まります。

classdef CircleArea

propertiesend のキーワードの間で Radius プロパティを定義します。既定の属性を使用します。

   properties
      Radius
   end

P プロパティを Constant (定数値をもつクラス プロパティの定義) として定義します。クラスを初期化するときに、関数 pi を一度だけ呼び出します。

   properties (Constant)
      P = pi
   end

Area プロパティの値は Radius プロパティに依存するため、これを Dependent として定義します。

   properties (Dependent)
      Area
   end

CircleArea クラス コンストラクター メソッドの名前はクラスと同じで、円の半径の値を引数として受け取ります。また、このメソッドは入力引数を受け付けません (クラス コンストラクター メソッド)。

   methods
      function obj = CircleArea(r)
         if nargin > 0
            obj.Radius = r;
         else
            obj.Radius = 0;
         end
      end

Area プロパティは Dependent であるため、その値はクラスで保存されません。get.Area メソッドはクエリに応じて Area プロパティの値を計算します (依存プロパティの get メソッドおよび set メソッド)。

      function val = get.Area(obj)
         val = obj.P*obj.Radius^2;
      end

set.Radius メソッドは Radius プロパティに代入された値をテストして、その値が 0 未満ではないことを確認します。MATLAB は set.Radius を呼び出して Radius に値を代入します (プロパティの get メソッドおよび set メソッド)。

      function obj = set.Radius(obj,val)
         if val < 0
            error('Radius must be positive')
         end
         obj.Radius = val;
      end

CircleArea クラスは関数 plot をオーバーロードします。plot メソッドは関数 rectangle を使用して円を作成し、半径を描画します (クラス定義での関数のオーバーロード)。

      function plot(obj)
         r = obj.Radius;
         d = r*2;
         pos = [0 0 d d];
         curv = [1 1];
         rectangle('Position',pos,'Curvature',curv)
         line([0,r],[r,r])
         text(r/2,r+.5,['r = ',num2str(r)])
         axis equal
      end

CircleArea クラスは関数 disp をオーバーロードして、MATLAB がコマンド ウィンドウにオブジェクトを表示する方法を変更します。

      function disp(obj)
         rad = obj.Radius;
         disp(['Circle with radius: ',num2str(rad)])
      end
end
methods (Static)

CircleArea クラスは、ダイアログ ボックスを使用してオブジェクトを作成する Static メソッドを定義します (静的メソッド)。

      function obj = createObj
         prompt = {'Enter the Radius'};
         dlgTitle = 'Radius';
         rad = inputdlg(prompt,dlgTitle);
         r = str2double(rad{:});
         obj = CircleArea(r);
      end

Static methods ブロックの終端と classdef ブロックの終端です。

   end
end