アクセサと公開フィールド
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 19:11 UTC 版)
「メソッド (計算機科学)」の記事における「アクセサと公開フィールド」の解説
多くの言語では、フィールドを公開 (public) 状態にすることで、オブジェクトのフィールドをメソッドを介さず直接読み書きできる。しかし、不特定多数のアプリケーションから利用されるライブラリなどではカプセル化の観点から、実際にはアクセサを介してフィールドを読み書きすることがほとんどであり、フィールドを公開状態にして直接読み書きすることは避けられる。アクセサを用意することで、ライブラリの仕様に則した使い方を強制することができるというメリットがある。 フィールドとアクセサが1対1の状態であれば、公開状態のフィールドの読み書きとアクセサを介したフィールドの読み書きはほとんど変わらない。それにも関わらず、わざわざアクセサを介してフィールドを読み書きする理由は、アクセサの実装はクラス実装者の自由であり、アクセサ (setter) が受け取った値をどう処理するかはクラスの実装に委ねられるからである。例えば、アクセサ (getter) が値を返す際、フィールドを参照せず常に0を返すという実装も有りうる。 公開フィールドへの直接アクセスと比較した際のアクセサの利点としては以下のようなものがある。 意図的に setter メソッドを実装しないことで、フィールドの値を外部から勝手に変更させないようにすることができる。 例えばコンストラクタで指定した初期値を常に保持し続けるイミュータブル (不変) なクラスを定義することも可能となる。 getter/setter でフィールドにアクセスするときにデータを加工してから取得したり設定したりすることができる。 例えば内部データの単位とは異なる単位の値に換算して返す、などである。 setter でフィールドにデータを設定するときにバリデーション (validation) を実行できる。 例えば設定したいデータを整数のみ、自然数のみ、偶数のみ、あるいは日付形式文字列のみ、などに限定して、範囲外あるいはフォーマット外の値が渡された場合に異常系とみなして例外をスローするといった実装ができる。 また、アクセサを使う最も重要な理由のうちのひとつとして、多態性の恩恵を受けられるという点がある。スーパークラスのアクセサを仮想メソッドにして、サブクラスごとにオーバーライドすることで、上に挙げたような機能や振る舞いをオブジェクトの種別ごとにカスタマイズすることも可能となる。 純粋なオブジェクト指向環境として知られるSmalltalkでは、アクセサによる多態性がMVCの依存性辞書[要説明]の管理を始めあらゆる箇所で活用されている。
※この「アクセサと公開フィールド」の解説は、「メソッド (計算機科学)」の解説の一部です。
「アクセサと公開フィールド」を含む「メソッド (計算機科学)」の記事については、「メソッド (計算機科学)」の概要を参照ください。
- アクセサと公開フィールドのページへのリンク