ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

単純なクラス階層

共有される特殊なプロパティ

サブクラスが、より一般のクラスの特殊化であることを示す例として、金融価値をもつ資産項目を表す資産クラスを考えます。資産の例として、株式、債券、預金口座を挙げます。この例は、DocAsset およびサブクラス DocStockDocBondDocSavings の 4 つのクラスを実装します。

DocAsset クラスは、クラスのプロパティ内の特殊化された資産サブクラスすべてに共通するデータを保持します。サブクラスは、スーパークラスのプロパティを継承し、さらにサブクラスに固有のプロパティを定義します。サブクラスは、あらゆる種類の資産です。

次の図は、資産クラスに定義されたプロパティを示します。

DocStockDocBondDocSavings クラスは、DocAsset クラスからプロパティを継承します。この例では、DocAsset クラスは、すべてのサブクラスに共通するデータを保存し、これらのサブクラスとメソッドを共有します。

金融資産クラスの設計

このクラスには、資産の子のすべてに共通する情報を保存する場所が用意されているため、それらの情報にアクセスできます。このクラスは、インスタンスを直接作成しないため、広範囲なメソッドは必要ありません。クラスは、次のメソッドを含みます。

  • コンストラクター

  • 1 つのプロパティのローカルな設定関数

クラス ファイルの表示

MATLAB エディターに、DocAsset クラス定義ファイルを開きます。MATLAB エディターに、DocAsset クラス定義ファイルを開きます。

クラスを使用するには、@DocAsset というフォルダーを作成して、DocAsset.m をこのフォルダーに保存します。@DocAsset の親フォルダーは、MATLAB® パス上になければなりません。

DocAsset クラスのまとめ

このクラスは、DocAsset.m という 1 つのファイルで定義し、同じ名前の @ フォルダーに配置しなければなりません。@DocAsset フォルダーの親フォルダーは、MATLAB パス上になければなりません。詳細は、関数 addpath を参照してください。

次の表では、DocAsset クラスに対して定義されるプロパティをまとめます。

DocAsset クラス プロパティ

名前

クラス

既定

説明

Description

char

''

資産の説明

CurrentValue

double

0

資産の現在値

Date

char

date

記録作成日 (関数 date が設定)

Type

char

'savings'

資産の種類 (株式、債券、預金)

次の表では、DocAsset クラスのメソッドをまとめます。

DocAsset クラスのメソッド

名前

説明

DocAsset

クラス コンストラクター

disp

オブジェクトに関する情報の表示

set.Type

Type の関数の設定。プロパティは、プロパティを設定するときに有効な値かどうかをテストします。

DocAsset コンストラクター メソッド

このクラスは、すべての Asset サブクラスに共通するデータを保存する 4 つのプロパティをもちます。Date 以外はすべて、サブクラスのコンストラクターによって、コンストラクターに渡されます。Date はプライベート プロパティで、関数 date を呼び出して設定します。

  • Description - 特定の資産を説明する文字列 (たとえば、株式の名前、預金口座の銀行名、債券発行者など)。

  • Date - オブジェクトの作成日。このプロパティの set アクセスはプライベートなので、オブジェクトを作成するときに、コンストラクターだけが date コマンドを使用して値を割り当てます。

  • Type - 資産の種類 (預金、債券、株式など)。ローカルの関数 set は、オブジェクトが作成されるかどうかをチェックしてエラーを出力します。

  • CurrentValue — 資産の現在値

プロパティ定義ブロック

以下のコード ブロックは、プロパティを定義する方法を表します。関数 set は、Type プロパティに定義されることに注意してください。これは、プロパティの値を、3 つの文字列、bondstocksavings のいずれかに制限します。

properties
   Description = '';
   CurrentValue = 0;
end
properties(SetAccess = private)
   Date % Set value in constructor
   Type = 'savings'; % Provide a default value
end

コンストラクター メソッドのコード

DocAsset クラスは別のクラスから派生していないので、スーパークラスのコンストラクターを呼び出す必要はありません。MATLAB では、指定した出力引数 (次のコードの a) に値を割り当てるときに、オブジェクトが作成されます。

function a = DocAsset(description,type,current_value)
% DocAsset constructor
   if nargin > 0
      a.Description = description;
      a.Date = date; 
      a.Type = type;
      a.CurrentValue = current_value;
   end
end % DocAsset

Type プロパティの関数 set

このクラスの設計では、資産が 3 種類 (債券、株式、預金) に限られます。したがって、Type プロパティが取り得る値は、以下のように関数 set を定義すると、可能な 3 つの文字列のうちの 1 つに制限されます。

	function obj = set.Type(obj,type)
   if ~(strcmpi(type,'bond') || strcmpi(type,'stock') || strcmpi(type,'savings'))
      error('Type must be either bond, stock, or savings')
   end
   obj.Type = type;
	end %Type set function

Type プロパティを設定しようとするときには、クラス コンストラクター関数内からでも、または初期値を割り当てる場合にも、この関数が呼び出されます。したがって、クラス定義の以下のステートメントは、エラーになります。

properties
   Type = 'cash';
end

唯一の例外は、関数 set.Type です。ここで、次のステートメント

obj.Type = type;

は、set.Type への再帰呼び出しにはなりません。

DocAsset Display メソッド

資産 disp メソッドは、子クラスの disp メソッドから呼び出されるように設計されます。その目的は、子オブジェクトに保存しているデータを表示することです。このメソッドは、表示するデータを子の disp メソッドと同じ形式で書式化します。

function disp(a)
% Display a DocAsset object
   fprintf('Description: %s\nDate: %s\nType: %s\nCurrentValue:%9.2f\n',...
   a.Description,a.Date,a.Type,a.CurrentValue);
end % disp

DocAsset サブクラスの display メソッドは、親クラスに保存されたデータを表示するためにこのメソッドを呼び出すことができます。この方法により、サブクラスの disp メソッドは、DocAsset クラスの変更とは無関係になります。

Stock Assets クラスの定義

株式は、資産の一種です。株式保有の情報を保存して操作するように設計されたクラスは、株式に関する以下の情報を含む必要があります。

  • 株式数

  • 1 株あたりの株価

さらに、基本クラス (DocAsset) は、特定の資産の説明、記録作成日、資産の種類、資産の現在値などの一般の情報を保存します。

クラス ファイルの表示

MATLAB エディターに、DocStock クラス定義ファイルを開きます。MATLAB エディターに、DocStock クラス定義ファイルを開きます。

クラスを使用するには、@DocStock というフォルダーを作成して、DocStock.m をこのフォルダーに保存します。@DocStock の親フォルダーは、MATLAB パス上になければなりません。

DocStock クラスのまとめ

このクラスは、DocStock.m という 1 つのファイルで定義し、同じ名前の @ フォルダーに配置しなければなりません。@DocStock フォルダーの親フォルダーは、MATLAB パス上になければなりません。詳細は、関数 addpath を参照してください。

DocStock は、DocAsset クラスのサブクラスです。

次の表では、DocStock クラスに対して定義されるプロパティをまとめます。

DocStock クラスのプロパティ

名前

クラス

既定

説明

NumShares

double

0

特定の株式の株式数

SharePrice

double

0

資産の現在値

DocAsset クラスから継承されるプロパティ

Description

char

''

資産の説明

CurrentValue

double

0

資産の現在値

Date

char

date

記録の作成日 (関数 date で設定)

Type

char

''

資産の種類 (株式、債券、預金)

次の表では、DocStock クラスのメソッドをまとめます。

DocStock クラスのメソッド

名前

説明

DocStock

クラス コンストラクター

disp

オブジェクトに関する情報の表示

基本クラスの指定

< 記号を使用すると、classdef 行の DocStock クラスに対する基本クラスとして、DocAsset クラスを指定できます。

classdef DocStock < DocAsset

プロパティ定義ブロック

以下のコードは、どのようにプロパティを定義するかを示します。

properties
   NumShares = 0;
   SharePrice = 0;
end

DocStock クラスの利用

Xdotcom という会社の株価 $23.47 の株について、200 株の資産株の記録を作成するものとします。

以下の引数を使用して DocStock コンストラクター関数を呼び出します。

  • 株式銘柄または説明

  • 株式数

  • 株価

たとえば、次のステートメント、

XdotcomStock = DocStock('Xdotcom',200,23.47);

では、Xdotcom Corp の株式資産についての情報がある DocStock オブジェクト XdotcomStock が作成されます。この資産は、1 株ごとの価値が $23.47 である株式 200 株で構成されています。

DocStock コンストラクター メソッド

DocStock クラスは DocAsset クラスから派生するため、コンストラクターは、最初に DocAsset オブジェクトのインスタンスを作成します (「DocAsset コンストラクター メソッド」を参照)。コンストラクターは、その 2 つのプロパティに値を設定した後、DocStock オブジェクトを返します。

function s = DocStock(description,num_shares,share_price)
   if nargin ~= 3 % Support no argument constructor syntax
      description = '';
      num_shares = 0;
      share_price = 0;
   end
   s = s@DocAsset(description,'stock',share_price*num_shares);
   s.NumShares = num_shares;
   s.SharePrice = share_price;
end % DocStock

DocStock disp メソッド

次のステートメント (最後にセミコロンを付けない)

XdotcomStock = DocStock('Xdotcom',100,25)

を発行すると、MATLAB ランタイムは @DocStock フォルダー内で disp というメソッドを探します。DocStock クラスの disp メソッドは、次の出力を行います。

Description: Xdotcom 
Date: 17-Nov-1998
Type: stock
Current Value:  $2500.00
Number of shares: 100
Share price: $25.00

以下の関数は、DocStockdisp メソッドです。この関数は、DocAssetdisp メソッドの呼び出しが返されると、fprintf を使用して、画面上に NumsharesSharePrice のプロパティ値を表示します。

function disp(s)
   disp@DocAsset(s)
   fprintf('Number of shares: %g\nShare price: %3.2f\n',...
   s.NumShares,s.SharePrice);
end % disp

Bond Assets クラスの設計

DocBond クラスは、特定の種類の資産を表すために DocAsset クラスから派生するという点において、DocStock クラスに似ています。

クラス ファイルの表示

MATLAB エディターに、DocBond クラス定義ファイルを開きます。MATLAB エディターに、DocBond クラス定義ファイルを開きます。

クラスを使用するには、@DocBond というフォルダーを作成して、DocBond.m をこのフォルダーに保存します。@DocBond の親フォルダーは、MATLAB パス上になければなりません。詳細は、関数 addpath を参照してください。

DocBond クラスのまとめ

このクラスは、DocBond.m という 1 つのファイルで定義し、同じ名前の @ フォルダーに配置しなければなりません。@DocBond フォルダーの親フォルダーは、MATLAB path 上になければなりません。

DocStock は、DocAsset クラスのサブクラスです。

次の表では、DocBond クラスに対して定義されるプロパティをまとめます。

DocBond クラスのプロパティ

名前

クラス

既定

説明

FaceValue

double

0

債券の額面価格

SharePrice

double

0

資産の現在値

DocAssetクラスから継承されるプロパティ

Description

char

''

資産の説明

CurrentValue

double

0

資産の現在値

Date

char

date

記録の作成日 (関数 date で設定)

Type

char

''

資産の種類 (株式、債券、預金)

次の表では、DocStock クラスのメソッドをまとめます。

DocBond クラスのメソッド

名前

説明

DocBond

クラス コンストラクター

disp

オブジェクトに関する情報の表示と、DocAssetdisp メソッドの呼び出し

calc_value

債券の現在値を計算するユーティリティ関数

基本クラスの指定

< 記号を使用すると、classdef 行の DocBond クラスに対する基本クラスとして、DocAsset クラスを指定できます。

classdef DocBond < DocAsset

プロパティ定義ブロック

以下のコード ブロックは、プロパティを定義する方法を示します。

properties
   FaceValue = 0;
   Yield = 0;
   CurrentBondYield = 0;
end

DocBond クラスの使用

額面価格 $100 と現行利回り 4.3% をもつ xyzbond の資産記録を作成するものとします。現在の債券相応利回りは 6.2% であり、この債券の市場価格がその額面価格に満たないことを意味します。

以下の引数を使用して DocBond コンストラクター関数を呼び出します。

  • 債券名または説明

  • 債券の額面価格

  • 債券の利率または利回り

  • (資産の現在値の計算に使用される) 相応の債券により支払われている現行利率

たとえば、次のステートメント、

b = DocBond('xyzbond',100,4.3,6.2);

は、DocBond オブジェクト b を作成します。このオブジェクトは、額面価格 $100、利回り 4.3% をもつ債券資産 xyzbond の情報と、さらに現在値の計算に使用する、債券の現行利回り (この場合 6.2%) の情報も含みます。

    メモ:   この例で行った計算は、MATLAB クラスの使用を説明するためのものであり、金融投資の実際の値を決定する方法を表すものではありません。

DocBond コンストラクター メソッド

DocBond コンストラクターは、4 つの引数を取ります。引数なしの構文を使用することもできますが、この場合は、引数の既定値を定義しなければなりません。

function b = DocBond(description,face_value,yield,current_yield)
   if nargin ~= 4
      description = '';
      face_value = 0;
      yield = 0;
      current_yield = 0;
   end
   market_value = DocBond.calc_value(face_value,yield,current_yield);
   b = b@DocAsset(description,'bond',market_value);
   b.FaceValue = face_value;
   b.Yield = yield;
   b.CurrentBondYield = current_yield;
end % DocBond

calc_value メソッド

DocBond クラスは、債券の利回りと債券換算現行利回りとの比によって額面価格を測る簡単な式を使用して、債券資産の市場価格を決めます。

資産の市場価格の計算では、利回りは非ゼロであることが必要であり、さらに計算が意味をもつためには正でなければなりません。このため、calc_value メソッドは無効な利回りの値でエラーを発生しませんが、市場価格の計算で無効な値が使用されないようにします。

資産の市場価格は、DocBond コンストラクター内で呼び出されると、DocAsset 基本クラス コンストラクターに渡されます。calc_value は、DocBond オブジェクトを入力引数として受け入れないため、その Static 属性を true に設定します。calc_value の出力は、基本クラス (DocAsset) コンストラクターが使用します。

methods (Static)
   function market_value = calc_value(face_value,yield,current_yield)
      if current_yield <= 0 || yield <= 0
         market_value = face_value;
      else
         market_value = face_value*yield/current_yield;
      end
   end % calc_value
end % methods

DocBond disp メソッド

次のステートメント (最後にセミコロンを付けない)

b = DocBond('xyzbond',100,4.3,6.2)

を発行すると、MATLAB ランタイムは @DocBond フォルダー内で disp というメソッドを探します。DocBond クラスの disp メソッドは、次の出力を表示します。

Description: xyzbond
Date: 17-Nov-1998
Type: bond
Current Value:  $69.35
Face value of bonds: $100
Yield: 4.30%

以下の関数は、DocBonddisp メソッドです。この関数が DocAssetdisp メソッドの呼び出しが返されると、fprintf を使用して画面上に FaceValueYieldCurrentValue プロパティの値を表示します。

function disp(b)
   disp@DocAsset(b) % Call DocAsset disp method
   fprintf('Face value of bonds: $%g\nYield: %3.2f%%\n',...
      b.FaceValue,b.Yield);
end % disp

Savings Assets クラスの定義

DocSavings クラスは、特定のタイプの資産を表すために DocAsset クラスから派生するという点において、DocStockDocBond クラスに似ています。

クラス ファイルの表示

MATLAB エディターに、DocSavings クラス定義ファイルを開きます。MATLAB エディターに、DocSavings クラス定義ファイルを開きます。

クラスを使用するには、@DocSavings というフォルダーを作成して、DocSavings.m をこのフォルダーに保存します。@DocSavings の親フォルダーは、MATLAB パス上になければなりません。

DocSavings クラスのまとめ

このクラスは、DocSavings.m という 1 つのファイルで定義し、同じ名前の @ フォルダーに配置しなければなりません。@DocSavings フォルダーの親フォルダーは、MATLAB パス上になければなりません。詳細は、関数 addpath を参照してください。

次の表では、DocSavings クラスに対して定義されたプロパティをまとめます。

DocSavings クラスのプロパティ

名前

クラス

既定

説明

InterestRate

double

''

預金口座に支払われる現行利率

DocAsset クラスから継承されるプロパティ

Description

char

''

資産の説明

CurrentValue

double

0

資産の現在値

Date

char

date

記録の作成日 (関数 date で設定)

Type

char

''

資産の種類 (株式、債券、預金)

次の表では、DocSavings クラスのメソッドをまとめます。

DocSavings クラスのメソッド

名前

説明

DocSavings

クラス コンストラクター

disp

オブジェクトに関する情報の表示と、DocAssetdisp メソッドの呼び出し

基本クラスの指定

< 記号を使用すると、classdef 行の DocBond クラスに対する基本クラスとして、DocAsset クラスを指定できます。

classdef DocSavings < DocAsset

プロパティ定義ブロック

以下のコードは、プロパティを定義する方法を示します。

properties
	   InterestRate = 0;
end

DocSavings クラスの利用

現在の預金残高 $1000 と利率 2.9% をもつ預金口座の資産に関して記録を作成するものとします。

以下の引数と共に DocSavings コンストラクター関数を呼び出します。

  • 銀行口座の説明

  • 預金残高

  • 預金口座に支払われる利率

たとえば、次のステートメント、

sv = DocSavings('MyBank',1000,2.9);

は、預金残高 $1000 と利率 2.9% をもつ MyBank の口座についての情報を含む、DocSavings オブジェクト sv を作成します。

DocSavings コンストラクター メソッド

預金口座の利率は、DocSavings クラスの InterestRate プロパティに保存されます。資産の説明と現在値 (預金残高) は、継承された DocAsset オブジェクトのプロパティに保存されます。

コンストラクターは、基本クラス コンストラクター (DocAsset.m) を呼び出し、オブジェクトのインスタンスを作成します。次に、InterestRate プロパティに値を割り当てます。コンストラクターで引数なしの構文を使用する場合は、引数の既定値を指定します。

function s = DocSavings(description,balance,interest_rate)
   if nargin ~= 3
      description = '';
      balance = 0;
      interest_rate = 0;
   end
   s = s@DocAsset(description,'savings',balance);
   s.InterestRate = interest_rate;
end % DocSavings

DocSavings disp メソッド

次のステートメント (最後にセミコロンを付けない)

sv = DocSavings('MyBank',1000,2.9)

を発行すると、MATLAB ランタイムは @DocSavings フォルダー内で disp というメソッドを探します。DocSavings クラスの disp メソッドは、次の出力を表示します。

Description: MyBank
Date: 17-Nov-1998
Type: savings
Current Value:  $1000.00
Interest Rate: 2.90%

以下の関数は、DocSavingdisp メソッドです。この関数は、DocAssetdisp メソッドの呼び出しから戻ると、関数 fprintf を使用して Numshares プロパティと SharePrice プロパティの値を画面に表示します。

function disp(b)
   disp@DocAsset(b)  % Call DocAsset disp method
   fprintf('%s%3.2f%%\n','Interest Rate: ',s.InterestRate);
end % disp
この情報は役に立ちましたか?