クラスのメタデータ
クラスのメタデータとは
クラスのメタデータとは、さまざまなメタクラス オブジェクトから利用できるクラス定義に関する情報のことです。クラスのインスタンスを作成せずに情報を取得するには、メタクラス オブジェクトを使用します。メタデータを使用すると、プログラムによってクラスを検証できます。各メタクラスには、それが記述するクラスやクラス コンポーネントに関する情報を含むプロパティ、メソッド、イベントが含まれます。
すべてのクラス コンポーネントには関連付けられたメタクラスがあり、それらには matlab.metadata.Class オブジェクトからアクセスします。たとえば、matlab.alias.AliasFileManager クラスの matlab.metadata.Class オブジェクトを作成します。
mc = ?matlab.alias.AliasFileManager
mc =
Class with properties:
Name: 'matlab.alias.AliasFileManager'
Description: 'Create and edit alias definition files'
DetailedDescription: ' Use an AliasFileManager object to create...'
Sealed: 1
Abstract: 0
Enumeration: 0
ConstructOnLoad: 0
HandleCompatible: 1
InferiorClasses: [0×1 matlab.metadata.Class]
Namespace: [1×1 matlab.metadata.Namespace]
Aliases: [0×1 string]
RestrictsSubclassing: 1
PropertyList: [1×1 matlab.metadata.Property]
MethodList: [28×1 matlab.metadata.Method]
EventList: [1×1 matlab.metadata.Event]
EnumerationMemberList: [0×1 matlab.metadata.EnumerationMember]
SuperclassList: [1×1 matlab.metadata.Class]matlab.metadata 名前空間
matlab.metadata 名前空間には、クラスとクラス コンポーネントの定義が記述されたメタクラスが含まれています。クラス名はメタクラスによって記述されるコンポーネントを表します。たとえば、各クラス プロパティには関連付けられた matlab.metadata.Property があります。クラス コンポーネントに定義された属性は、それぞれのメタクラス オブジェクトのプロパティに対応します。
matlab.metadata.Namespace—matlab.metadata.ClassのNamespaceプロパティからアクセスします。matlab.metadata.Class— 関数metaclassまたは?演算子を使用して、クラス名またはクラス オブジェクトから作成します。matlab.metadata.Property—matlab.metadata.ClassのPropertyListプロパティからアクセスします。matlab.metadata.DynamicProperty—addpropメソッドから取得します。matlab.metadata.Method—matlab.metadata.ClassのMethodListプロパティからアクセスします。matlab.metadata.Event—matlab.metadata.ClassのEventListプロパティからアクセスします。matlab.metadata.EnumerationMember—matlab.metadata.ClassのEnumerationMemberListListプロパティからアクセスします。
メタクラス オブジェクト
メタクラスは、それぞれのクラス コンストラクターを直接呼び出してもインスタンス化できません。クラスのインスタンスまたはクラス名からメタクラス オブジェクトを作成します。
?— 名前付きクラスのClassNamematlab.metadata.Classオブジェクトを返します。変数に文字としてクラス名が格納されているmatlab.metadata.Class.fromNameを使用します。matlab.metadata.Class.fromName('— 名前付きクラスのClassName')matlab.metadata.Classオブジェクトを返します (matlab.metadata.Class.fromNameはmatlab.metadata.Classのメソッドです)。metaclass(obj)— クラス インスタンス (metaclass) のメタクラス オブジェクトを返します。
? 演算子を使用してクラス名から matlab.metadata.Class オブジェクトを作成します。
mc = ?MyClass;
fromName メソッドを使用してクラス名から matlab.metadata.Class オブジェクトを作成します。
mc = matlab.metadata.Class.fromName('MyClass');クラス インスタンスから matlab.metadata.Class オブジェクトを作成します。
obj = MyClass; mc = metaclass(obj);
関数 metaclass は、matlab.metadata.Class オブジェクト (すなわち、matlab.metadata.Class クラスのオブジェクト) を返します。matlab.metadata.Class オブジェクトから、他のメタクラス オブジェクト (matlab.metadata.Property、matlab.metadata.Method など) を取得できます。
メモ
ここで、メタクラスとは matlab.metadata 名前空間内のすべてのクラスを指す用語です。matlab.metadata.Class は、MATLAB® クラスに関する情報がインスタンスに含まれる matlab.metadata 名前空間内のクラスです。メタデータはメタクラスに含まれるクラス情報です。
メタクラス オブジェクトのライフサイクル
クラス定義を変更すると、MATLAB はそのクラス定義を再度読み込みます。クラスのインスタンスが存在する場合、MATLAB は新しい定義に従ってそれらのオブジェクトを更新します。
ただし、MATLAB は既存のメタクラス オブジェクトを新しいクラス定義に更新しません。クラスのメタクラス オブジェクトが存在している場合にクラス定義を変更すると、MATLAB はメタクラス オブジェクトを削除して、そのハンドルを無効にします。クラスの更新後、新しいメタクラス オブジェクトを作成しなければなりません。
クラスの変更と再読み込みの方法ついての詳細は、変更済みクラスの自動更新を参照してください。