メソッド(コンピュータプログラミング)
メソッドは、オブジェクト指向プログラミングにおいてオブジェクトまたはクラスに関連付けられるサブルーチンです。構造、可視性、呼び出し、用途、種類、歴史的背景を解説します。
メソッドとは、オブジェクト指向プログラミングにおいて、オブジェクトまたはクラスに関連付けられた名前付きの手続きである。このパラダイムでは、メソッドは振る舞いを表す。すなわち、処理を実行し、値を計算して返し、またはオブジェクトの状態を変更する。メソッドはソフトウェア上で現実世界の行為をモデル化するうえで中心的な役割を果たし、独立した関数ではなく、型に付随する操作として扱われる。オブジェクトの概念も参照。
基本構造とシグネチャ
メソッドは通常、名前、引数リスト、戻り値の型(存在する場合)、およびメソッド本体から構成される。メソッドのシグネチャは名前と引数の型から成り、同じ名前を持つメソッドを区別するために用いられる。多くのC系オブジェクト指向言語では、たとえば public int getOne() { return 1; } のように記述できる。この例は、宣言の構文、可視性修飾子であるpublic、戻り値の型であるint、そしてリテラル値を返す単純な本体を同時に示している。これに似た宣言形式は、JavaやC#などの言語にも見られる。
可視性とアクセス制御
メソッドには一般に、どこから呼び出せるかを制御するアクセス修飾子が含まれる。代表的な修飾子にはpublic、protected、privateがあり、言語によってはパッケージレベルまたはモジュールレベルの可視性も提供される。publicメソッドは、それを定義した型の外部から呼び出せる。一方、privateメソッドは同じクラスまたはオブジェクトの内部からのみアクセス可能である。こうした制御はカプセル化の重要な一部であり、内部データや実装の詳細を保護し、データセキュリティと堅牢性に寄与する。
メソッドの種類と振る舞い
- インスタンスメソッドはインスタンス(オブジェクト)に対して動作し、通常はインスタンスフィールドにアクセスする。
- 静的メソッドまたはクラスメソッドは、特定のオブジェクトではなくクラス自体に属する。
- コンストラクタは、新しいオブジェクトを初期化するために使われる特別なメソッドである。
- ゲッターとセッターは、プロパティへのアクセスを制御するための軽量なメソッドである。
- 純粋メソッドは副作用を持たず、入力だけに基づいて値を返す。これに対し、オブジェクトの状態を変更したり、入出力を実行したりするメソッドもある。
多相性、オーバーロード、呼び出し
多相性により、異なるクラスが同一のメソッド名に対してそれぞれ独自の実装を提供できる。オーバーライドはスーパークラスのメソッドをサブクラスで置き換えることであり、動的ディスパッチは実行時に正しい実装を選択する。オーバーロードでは、クラスは同じ名前で引数リストの異なる複数のメソッドを定義できる。呼び出しには、たとえば obj.method(arg) のような呼び出し式を用いる。呼び出しは、可視性、シグネチャ、およびレシーバの実行時型に従って、特定のメソッド実装に結び付けられる。
歴史と発展
現代的なメソッドの概念は、初期のオブジェクト指向言語から発展した。SimulaやSmalltalkなどの言語は、データと手続きをひとまとめにするオブジェクトという考え方を導入し、後の主流言語がこれらの概念を採用して発展させた。数十年にわたり、リフレクション、メソッド参照、クロージャ、第一級関数、アノテーションまたは属性といった機能が加わり、メソッドの定義、発見、呼び出しの方法は広がってきた。
用途、例、主な区別
メソッドは、振る舞いのモデル化、APIの実装、グラフィカルインターフェースにおけるイベント処理、業務ロジックの整理などに使用される。実際には、小さなアクセサから複数のサブシステムを調整する大規模なルーチンまで、その規模はさまざまである。用語を比較すると、言語によっては「関数」を独立したルーチン、「メソッド」をオブジェクトまたはクラスに結び付いたルーチンとして区別する。第一級関数を備える言語では、関数をオブジェクトのフィールドに格納したり引数として渡したりできるため、この境界は曖昧になることがある。高度な手法には、リフレクションによるメソッド呼び出し、メソッドチェーン、他のメソッドを受け取る、または返す高階メソッドが含まれる。
より技術的な参照情報や例については、Java、C#、その他のオブジェクト指向言語に関する言語別の文書やチュートリアルを参照。一般的なOOP資料としては、オブジェクト指向プログラミングの概要、オブジェクトの定義、一般的な構文パターン、JavaやC#などの言語ページ、データセキュリティに関する資料、整数などの基本型の説明も参照できる。
著者
AlegsaOnline.com メソッド(コンピュータプログラミング) Leandro Alegsa
URL: https://ja.alegsaonline.com/art/64200