Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

クラス設計でのメソッド

クラス メソッド

"メソッド" とは、クラスのオブジェクトに実行する操作を実装する関数です。他のクラス メンバーと共に、メソッドはカプセル化の概念をサポートします。クラスのインスタンスはプロパティにデータを含み、クラス メソッドはそのデータを操作します。この設計によって、クラスの内部動作をクラス外部のコードから隠蔽できるので、クラス外部のコードに影響を与えずにクラスの実装を変更できます。

メソッドは、他のメソッドやプロパティなど、クラス内部のプライベートなメンバーにアクセスできます。このカプセル化によりデータを隠蔽でき、オブジェクトに保存されたデータへのアクセスに必要な専用インターフェイスを作成できるようになります。

例と構文

クラスの記述開始の例については、単純なクラスの作成を参照してください。

サンプル コードと構文については、メソッドの構文を参照してください。

MATLAB® の標準的動作を変更するクラスを作成する方法についての説明は、既定の動作を変更するメソッドを参照してください。

@ とパス ディレクトリの使用、およびクラス ファイルをまとめるパッケージの詳細については、クラスのファイル編成を参照してください。

複数のファイルでクラスを定義する際に使用する構文は、別ファイルのメソッドを参照してください。

メソッドの種類

以下のように、ある機能を実行したり特定の動作をする、特化した種類のメソッドがあります。

  • "通常のメソッド" は、1 つ以上のオブジェクトに機能する関数であり、新しいオブジェクトあるいは計算値を返します。このメソッドは、入力引数を変更できない通常の MATLAB 関数に似ています。通常のメソッドにより、クラスは、算術演算や計算を行う関数を実装できます。このメソッドには、操作の対象となるクラスのオブジェクトが必要です。通常のメソッドを参照してください。

  • "コンストラクター メソッド" は、クラスのオブジェクトを作成する特化したメソッドです。コンストラクター メソッドは、クラスと同じ名前をもち、通常は、入力引数から得られるデータでプロパティ値を初期化します。クラス コンストラクター メソッドでは、少なくとも 1 つの出力引数 (作成するオブジェクト) を宣言しなければなりません。最初の出力は常に作成するオブジェクトです。クラス コンストラクター メソッドを参照してください。

  • "デストラクター メソッド" は、オブジェクトが破棄されるときに自動的に呼び出されます。たとえば、delete(object) を呼び出した場合や、オブジェクトへの参照がなくなった場合などです。ハンドル クラスのデストラクターを参照してください。

  • "プロパティ アクセス メソッド" を使用すると、プロパティ値のクエリや設定が行われるときに実行するコードを、クラスが定義できます。プロパティの get メソッドおよび set メソッドを参照してください。

  • "静的メソッド" は、クラスに関連する関数ですが、必ずしもクラス オブジェクトを操作しません。このメソッドは、メソッドの呼び出し中に、参照されるクラスのインスタンスを必要としませんが、通常は、クラスに特化した方法で操作を実行します。静的メソッドを参照してください。

  • "変換メソッド" は、他のクラスからオーバーロードされるコンストラクター メソッドであり、ユーザー クラスのオブジェクトをオーバーロードされるコンストラクターのクラスに変換できます。たとえば、ユーザー クラスが double メソッドを実装すると、double クラス コンストラクターではなく、このメソッドが呼び出され、ユーザー クラスのオブジェクトが MATLAB double オブジェクトに変換されます。詳細は、オブジェクト コンバーターを参照してください。

  • "抽象メソッド" は、それ自体はインスタンス化できないクラスを定義します。しかし、このクラスは多数のサブクラスで使用する共通インターフェイスを定義する方法となります。抽象メソッドを含むクラスは、インターフェイスとも呼ばれます。詳細と例は、抽象クラスとクラス メンバーを参照してください。

メソッドの命名

メソッドを実装する関数名は、次のいずれかの場合にのみ、ドットを含むことができます (例、set.PropertyName) 。

プロパティ アクセス メソッドまたは変換メソッドをローカル関数、入れ子関数として定義したり、自身のファイルに別々に定義したりできません。クラス コンストラクターとパッケージ スコープ関数は、関数定義に非修飾名を使用しなければなりません。関数定義ステートメントにパッケージ名を含めないでください。

関連するトピック