2016-08-18 13 views
0

私はOO環境で働いており、仲間と概念的に話し合っています。共通の祖先を持たない2つのクラス( "A"と "B")があり、BがAの情報にアクセスする必要があるとします。これは、フィールドやゲッターを使って行うことができます。ジレンマは、これらが「公然」と宣言され、結果的に全世界に見えるようになるということです。 「プライベート」可視性は可能ではないため(異なる目的のためにクラスツリー内の完全に異なる位置)、それらは公開されている。OO言語/モデルに「制御された可視性」のような概念はありますか?

しかし、これらのフィールドのみBと他の誰もに見えなければならないことを制御することができるようになる概念(のあらゆる OO言語)がある場合、私は思ったんだけど?

答えて

2

C++は、Javaのまたは類似でFriend classFriend function

を持っています。

+0

ありがとうございました - 友情は、私が探していたコンセプトによく似ています:) – MBaas

+0

この回答は、Javaの「友人」タイプの方法でプライベートデータを共有することについて話しています。クラスAとBを使用しています:) http:http ://stackoverflow.com/questions/14226228/implementation-of-friend-concept-in-java – jrahhali

+0

@jrahhali:はい、実際には、Visitorパターンまたはそのバリエーションを使用します。 – charlie

0

javaでは、protectedフィールドとprivateフィールド/メソッドを宣言できます。保護されたフィールド/メソッドは、同じパッケージ内のクラス、および拡張クラスにアクセスできます。パッケージのプライベートフィールド/メソッドは、同じパッケージ内のクラスに対してのみアクセス可能です。

このようにして、アクセス権のみを持つクラスを指定することはできませんが、アプリケーション/ライブラリで同じ効果を達成できるだけのアクセスを制限することができます。

javaは、accesとsecurityRulesを設定することで、より堅牢なアクセスを禁止するメカニズムも提供しています。それは、リフレクションを防止することさえできます(通常、Javaのunaccessible fields/methodsにアクセスする一般的な方法です)。しかし、それは本当に基本概念ではないので、あなたが探しているメカニズムではないかもしれません。あなたがVisitor patternを使用し、両方のクラスを変更することができるかどう

関連する問題