FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgMemberAccessRights

目次→教本→プログラマーのための案内Member Access Rights←オリジナル・サイト

メンバーアクセス権とカプセル化 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

コードのある部分への、メンバーアクセスを制限します。

メンバーアクセス権
概要
Type のすべてのメンバー(メンバーデータ、手続き、定数など)は、3つの異なる分類のいずれかに属します。それぞれ、コード上のどこでアクセスしたり、参照したりできるかを決定する独自のルールを持っています。
これらのルールをアクセス権と呼びます。
メンバーには 公開(public)、保護(protected)、個人(private) があり、それぞれ Public, Protected, Private のラベルに続く Type の定義で宣言されます。

デフォルト、つまり、アクセス分類ラベルがない場合、Type のメンバーは公開(public)です。

公開のメンバー
公開のメンバーは、どこからでも参照できます。
公開のメンバーは、例えば、メンバー手続きや、モジュール・レベルのコードまたは手続きから、アクセスできます。

保護されたメンバー
保護されたメンバーは、メンバーが宣言される、Type のメンバー手続き、または生成された Type のメンバー手続きから、アクセスできるだけです。
保護されたメンバーは、コードの外にアクセスできません。

個人メンバー
非公開のメンバーは、ただ、メンバーが宣言された、Type のメンバー手続きから、アクセスできるだけです。
非公開のメンバーは、外部のコードに、アクセスできません。また、生成された Type から、メンバー手続きに、アクセスできません。

構築子と解体子
構築子と解体子は、他のいかなるメンバーとも同じ規則に従います:
- public の場合、オブジェクトはコード上のどこからでもインスタンス化と破棄が可能です。
- 保護されている場合、オブジェクトは、その Type または派生 Type のメンバ手続きからのみインスタンス化と破棄が可能です。
- プライベートの構築子と解体子は、オブジェクトのインスタンス化をその Type のメンバ手続きにのみ制限します。

カプセル化
概要
カプセル化とは、あるオブジェクトがどのように実装されているかの詳細を、そのオブジェクトのユーザーから隠しておくプロセスです。
代わりに、オブジェクトのユーザーはパブリック・インターフェイスを通してオブジェクトにアクセスします。
このようにして、ユーザーはオブジェクトがどのように実装されているかを理解しなくても、オブジェクトを使うことができます。

カプセル化は、アクセス指定子(Private、Protected、Public)によって実装されます。
通常、Type のすべてのメンバ変数は Private(実装の詳細を隠す)とされ、ほとんどのメンバ手続きは Public(ユーザにインターフェースを公開)とされます。
Type のユーザにパブリック・インターフェースの使用を要求することは、メンバ変数に直接パブリック・アクセスを提供するよりも負担が大きいように見えるかもしれませんが、実際にはそうすることで Type の再利用性と保守性を促進する多くの有用な利点が得られます。

カプセル化された型の利点
保護:
変数へのグローバル・アクセスは、誰がグローバル変数にアクセスできるか、またどのように使うかを厳密にコントロールできないため、危険です。
Type のパブリック・メンバーだけが同じ問題を抱えていますが、その規模は小さいものです。

カプセル化によって、Type のプログラマーは以下のことが可能になります:
- 型の内部(ポインタや変数など)へのアクセスを積極的に制御することができます(none / read only / write only / read & write)。
- ある種の破壊的なユーザアクション(ポインタの上書き、デアロケートなど)を拒否することで、操作を安全にします。

抽象化:
完全にカプセル化された Type では、その Type を使うためにどのようなメンバー手続きが公開されているか、それらがどのような引数を取り、どのような値を返すかを知っているだけでよいのです。
Type が内部でどのように実装されているかは問題ではありません。

例えば、名前のリストを保持する Type は、異なるデータ構造を使って実装することができました。
しかし、その Type を使うためには、どのデータ構造を使っているかを知る必要はありません。
これにより、プログラムの複雑さが劇的に軽減され、ミスも減ります。

内部実装の詳細を隠します:
- 内部のメンバーは Private/Protected として宣言され、ユーザー・インターフェースは、メソッドやプロパティをゲッター/セッターとして使います。
- さらに、構築子、コピー構築子、解体子、代入演算子などを定義します。
ある種の抽象化を提供します。
これが何よりもカプセル化の利点です。


参照:
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2020-08-08 01:10:17
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

ホームページのトップに戻る

表示-非営利-継承