Main Content

classdef

クラス定義のキーワード

構文

classdef (Attributes) ClassName < SuperclassNames
    properties (Attributes) ... end
    methods (Attributes) ... end
    events (Attributes) ... end
    enumeration ... end
end

説明

classdef ... end は、クラス定義を囲みます。classdef ブロックの最初の行の構文は次のとおりです。

classdef (Attribute1 = value1, Attribute2 = value2,...) ClassName < 
SuperclassName1 & SuperclassName2 & ...

  • (Attribute1 = value1, Attribute2 = value2,...) — オプションのクラス属性。属性名とそれに関連付けられた値のコンマ区切りリストとして指定します。たとえば、次の構文は、許可されたサブクラスの制限付きリストを使用して、抽象クラスを定義します。

    classdef (Abstract = true, AllowedSubclasses = {ClassA, ClassB}) exampleClass

    logical 値を取る属性は、明示的な値がなくても使用できます。前の例では、明示的な値を使用せずに Abstract を指定すると、属性は true に設定されます。詳細については、クラスの属性を参照してください。

  • ClassName — 有効なクラス名は、アルファベットで始まり、英字、数字、またはアンダースコアを含むことができます。ファイル拡張子 .m が付いた、クラスと同じ名前のファイルにクラスを保存します。

  • SuperclassName1 & SuperclassName2 & ... — スーパークラスのリスト。& 文字で区切ります。他のクラスからのクラス派生の詳細については、サブクラス定義を参照してください。

classdef ブロックには、次のクラス メンバー ブロックのうち 1 つ以上を含めることができます。

  • プロパティ properties (Attributes) ... end はプロパティ ブロックを定義します。クラス定義には複数のプロパティ ブロックを格納することができます。各ブロックは、その特定のブロック内のプロパティに適用されるさまざまな属性設定を指定します。プロパティ構文の詳細については、プロパティ構文を参照してください。

  • メソッド methods (Attributes) ... end はメソッド ブロックを定義します。クラス定義には複数のメソッド ブロックを格納することができます。各ブロックは、その特定のブロック内のメソッドに適用されるさまざまな属性設定を指定します。メソッド構文の詳細については、クラスのメソッドおよび関数の定義を参照してください。

  • イベント events (Attributes) ... end はイベント ブロックを定義します。クラス定義には複数のイベント ブロックを格納することができます。各ブロックは、その特定のブロック内のイベントに適用されるさまざまな属性設定を指定します。イベント構文の詳細については、イベントとリスナーの構文を参照してください。

  • 列挙 enumeration ... end は列挙ブロックを定義します。列挙クラスの定義の詳細については、列挙クラスの定義を参照してください。

すべて折りたたむ

Motor クラスは、電気モーターの現在速度を格納し、モーターの起動と停止のための基本機能を使用できるようにします。このクラスは ElectricVehicleComponent スーパークラスから継承し、プロパティ ブロックとメソッド ブロックを含みます。

classdef Motor < ElectricVehicleComponent
   
    properties
        CurrentSpeed = 0
        SpeedRange = [0, 180]
    end

    methods
        function motor = start(motor,speed)
            arguments
                motor (1,1) Motor
                speed (1,1) {mustBeReal, mustBeNonnegative}
            end
            if motor.CurrentSpeed > 0
                error("Motor:start:MotorAlreadyRunning",...
                    "Cannot start a motor that is already running.")
            end
            motor.CurrentSpeed = speed;   
        end
        
        function motor = stop(motor)
            if motor.CurrentSpeed == 0
                error("Motor:start:MotorNotRunning",...
                    "Cannot stop a motor that is not running.")
            end
            motor.CurrentSpeed = 0;
        end
    end
end

ヒント

  • キーワード classdef の前には、空行とコメントに限り置くことができます。

  • クラス定義ファイルは、MATLAB® パス上のフォルダーか、親フォルダーが MATLAB パス上にあるクラス フォルダーに配置できます。クラス フォルダー名は @ 文字で始まり、その後にクラス名が続きます (たとえば @MyClass)。クラス フォルダーの詳細については、クラス定義を含むフォルダーを参照してください。

  • propertiesmethodsevents、および enumeration は、所定のオブジェクトまたはクラス名のそれぞれのクラス メンバーをクエリするために使用される MATLAB 関数の名前でもあります。

  • プロパティは定義クラスと同じ名前をもつことはできません。

  • メソッドはメインのクラス ファイル以外のファイルで定義できます。詳細については、別ファイルのメソッドを参照してください。

バージョン履歴

R2008a で導入