クラス設計でのメソッド
クラス メソッド
"メソッド" とは、クラスのオブジェクトに実行する操作を実装する関数です。他のクラス メンバーと共に、メソッドはカプセル化の概念をサポートします。クラスのインスタンスはプロパティにデータを含み、クラス メソッドはそのデータを操作します。この設計によって、クラスの内部動作をクラス外部のコードから隠蔽できるので、クラス外部のコードに影響を与えずにクラスの実装を変更できます。
メソッドは、他のメソッドやプロパティなど、クラス内部のプライベートなメンバーにアクセスできます。このカプセル化によりデータを隠蔽でき、オブジェクトに保存されたデータへのアクセスに必要な専用インターフェイスを作成できるようになります。
例と構文
クラスの記述開始の例については、単純なクラスの作成を参照してください。
サンプル コードと構文については、メソッドの構文を参照してください。
MATLAB® の標準的動作を変更するクラスを作成する方法についての説明は、既定の動作を変更するメソッドを参照してください。
@ とパス ディレクトリの使用、およびクラス ファイルをまとめる名前空間の詳細については、クラスのファイル編成を参照してください。
複数のファイルでクラスを定義する際に使用する構文は、別ファイルのメソッドを参照してください。
メソッドの種類
以下のように、ある機能を実行したり特定の動作をする、特化した種類のメソッドがあります。
"通常のメソッド" は、1 つ以上のオブジェクトに機能する関数であり、新しいオブジェクトあるいは計算値を返します。このメソッドは、入力引数を変更できない通常の MATLAB 関数に似ています。通常のメソッドにより、クラスは、算術演算や計算を行う関数を実装できます。このメソッドには、操作の対象となるクラスのオブジェクトが必要です。通常のメソッドを参照してください。
"コンストラクター メソッド" は、クラスのオブジェクトを作成する特化したメソッドです。コンストラクター メソッドは、クラスと同じ名前をもち、通常は、入力引数から得られるデータでプロパティ値を初期化します。クラス コンストラクター メソッドでは、少なくとも 1 つの出力引数 (作成するオブジェクト) を宣言しなければなりません。最初の出力は常に作成するオブジェクトです。クラス コンストラクター メソッドを参照してください。
"デストラクター メソッド" は、オブジェクトが破棄されるときに自動的に呼び出されます。たとえば、
delete(object)
を呼び出した場合や、オブジェクトへの参照がなくなった場合などです。ハンドル クラスのデストラクターを参照してください。"プロパティ アクセス メソッド" を使用すると、プロパティ値のクエリや設定が行われるときに実行するコードを、クラスが定義できます。プロパティの get メソッドおよび set メソッドを参照してください。
"静的メソッド" は、クラスに関連する関数ですが、必ずしもクラス オブジェクトを操作しません。このメソッドは、メソッドの呼び出し中に、参照されるクラスのインスタンスを必要としませんが、通常は、クラスに特化した方法で操作を実行します。静的メソッドを参照してください。
"変換メソッド" は、他のクラスからオーバーロードされるコンストラクター メソッドであり、ユーザー クラスのオブジェクトをオーバーロードされるコンストラクターのクラスに変換できます。たとえば、ユーザー クラスが
double
メソッドを実装すると、double クラス コンストラクターではなく、このメソッドが呼び出され、ユーザー クラスのオブジェクトが MATLAB double オブジェクトに変換されます。詳細については、オブジェクト コンバーターを参照してください。"抽象メソッド" は、それ自体はインスタンス化できないクラスを定義します。しかし、このクラスは多数のサブクラスで使用する共通インターフェイスを定義する方法となります。抽象メソッドを含むクラスは、インターフェイスとも呼ばれます。詳細と例は、抽象クラスとクラス メンバーを参照してください。
メソッドの命名
メソッドを実装する関数名は、次のいずれかの場合にのみ、ドットを含むことができます (例、set.PropertyName
) 。
プロパティ set/get アクセス メソッド (プロパティの get メソッドおよび set メソッド を参照)
名前空間名を使用する必要がある、名前空間修飾クラスに変換する変換メソッド (Create Namespacesを参照)
プロパティ アクセス メソッドまたは変換メソッドをローカル関数、入れ子関数として定義したり、自身のファイルに別々に定義したりできません。クラス コンストラクターと名前空間スコープ関数の関数定義には非修飾名を使用する必要があります。関数定義ステートメントに名前空間名を含めないでください。