タグ付けされた質問 「encapsulation」

OOPにおいて、オブジェクトのコンポーネントの一部へのアクセスを制限するためのメカニズム、または実装の詳細からの分離を促進する設計原則。


12
Pythonの「プライベート」メソッドが実際にはプライベートではないのはなぜですか?
Pythonでは、次のように、名前の前に2つのアンダースコアを付けることで、クラス内に「プライベート」メソッドと変数を作成できます__myPrivateMethod()。それでは、これをどのように説明できますか >>> class MyClass: ... def myPublicMethod(self): ... print 'public method' ... def __myPrivateMethod(self): ... print 'this is private!!' ... >>> obj = MyClass() >>> obj.myPublicMethod() public method >>> obj.__myPrivateMethod() Traceback (most recent call last): File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod' >>> dir(obj) ['_MyClass__myPrivateMethod', …

30
C ++で 'friend'を使用する必要があるのはいつですか?
私はC ++のFAQを読んでいて、そのfriend宣言に興味がありました。個人的には使用したことがありませんが、言語を探求することに興味があります。 使用の良い例は何friendですか? FAQをもう少し読むと、 << >>演算子をオーバーロードして、それらのクラスの友達として追加です。しかし、これがカプセル化を壊さないかどうかはわかりません。これらの例外はいつOOPである厳密性の範囲内にとどまることができますか?
354 c++  oop  encapsulation  friend 


4
__getattr__と__getattribute__の違いを理解する
私は違いを理解しようとしています__getattr__と__getattribute__、しかし、私はそれで失敗しています。 答えはスタックオーバーフローの質問に違い__getattr__Vsは__getattribute__言います: __getattribute__オブジェクトの実際の属性を確認する前に呼び出されるため、正しく実装するのが難しい場合があります。あなたは非常に簡単に無限の再帰に終わることができます。 それが何を意味するのか全く分かりません。 次にそれは言う: あなたはほぼ間違いなく欲しい__getattr__。 どうして? 私があればことを読んで__getattribute__失敗した、__getattr__と呼ばれています。では、なぜ同じことをする2つの異なる方法があるのでしょうか。コードが新しいスタイルクラスを実装する場合、何を使用すればよいですか? この質問をクリアするためのコード例を探しています。私は自分の能力を最大限に活用しましたが、私が見つけた答えは問題を完全に議論していません。 ドキュメントがある場合は、それを読む準備ができています。

22
抽象化VS情報隠蔽VSカプセル化
ソフトウェア開発における抽象化と情報隠蔽の違いは何ですか? 私は混乱しています。抽象化は詳細な実装を隠し、情報を隠すことは何かの詳細全体を抽象化します。 更新:これらの3つの概念に対する良い答えを見つけました。そこから引用されたいくつかの引用については、以下の個別の回答を参照してください。

9
コレクションまたはストリームを返す必要がありますか?
メンバーリストに読み取り専用ビューを返すメソッドがあるとします。 class Team { private List < Player > players = new ArrayList < > (); // ... public List < Player > getPlayers() { return Collections.unmodifiableList(players); } } さらに、クライアントが行うことはすべて、リストを1回、即座に繰り返すことであると想定します。プレーヤーをJListか何かに入れるかもしれません。クライアントは後の検査のためにリストへの参照を保存しません! この一般的なシナリオでは、代わりにストリームを返す必要がありますか? public Stream < Player > getPlayers() { return players.stream(); } または、Javaで非慣用的なストリームを返していますか?ストリームは、それが作成された同じ式内で常に「終了」するように設計されていましたか?

9
Java:サブパッケージの可視性?
プロジェクトに2つのパッケージがあります:odp.projとodp.proj.test。これらの2つのパッケージのクラスだけに表示したい特定のメソッドがあります。これどうやってするの? 編集: Javaにサブパッケージの概念がない場合、これを回避する方法はありますか?テスターやそのパッケージの他のメンバーだけが使用できるようにする特定のメソッドがあります。私はすべてを同じパッケージに入れるべきですか?広範な反射を使用しますか?

21
依存性注入はカプセル化を犠牲にする必要がありますか?
私が正しく理解している場合、依存性注入の一般的なメカニズムは、クラスのコンストラクターまたはクラスのパブリックプロパティ(メンバー)を介して注入することです。 これにより、注入される依存関係が明らかになり、カプセル化のOOP原則に違反します。 このトレードオフを特定することは正しいですか?この問題にどのように対処しますか? 以下の自分の質問に対する私の回答も参照してください。

7
戦略パターンとコマンドパターンの使用
どちらのデザインパターンもアルゴリズムをカプセル化し、実装の詳細を呼び出し元のクラスから切り離します。私が識別できる唯一の違いは、ストラテジーパターンが実行用のパラメーターを取り込むのに対し、コマンドパターンは受け取らないことです。 コマンドパターンは、作成時に実行のためにすべての情報が利用可能である必要があり、その呼び出しを(おそらくスクリプトの一部として)遅らせることができるようです。 1つのパターンと他のパターンのどちらを使用するかは、どの決定によって決まりますか?

24
Integer.parseInt()をカプセル化する良い方法
Integer.parseInt()Stringをintに変換するためによく使用するプロジェクトがあります。何かがうまくいかない場合(たとえば、はString数字ではなく文字a、など)、このメソッドは例外をスローします。ただし、コード内のどこでも例外を処理する必要がある場合、これは非常に醜く非常にすぐに見え始めます。これをメソッドに入れたいのですが、変換が失敗したことを示すためにクリーンな値を返す方法がわかりません。 C ++では、intへのポインターを受け入れるメソッドを作成し、メソッド自体にtrueまたはfalseを返させることができます。ただし、私の知る限り、これはJavaでは不可能です。true / false変数と変換された値を含むオブジェクトを作成することもできますが、これも理想的ではないようです。同じことがグローバルな値にも当てはまり、マルチスレッドで問題が発生する可能性があります。 これを行うクリーンな方法はありますか?

15
カプセル化と抽象化の違い
今日は面接をしました。カプセル化と抽象化の違いについて、OOPから質問がありましたか? カプセル化は基本的にデータメンバーとメンバー関数をクラスと呼ばれる単一のユニットにバインドすることであるという私の知識に彼女に返信しました。一方、抽象化は基本的に実装の複雑さを隠し、ユーザーに簡単にアクセスできるようにすることです。彼女は私の答えで大丈夫だろうと思った。しかし、彼女は、両方の目的が情報を隠すことである場合、これら2つの実際の違いは何であるかを尋ねました。私は彼女に答えることができなかった。 この質問をする前に、これら2つのOOPの概念の違いについてStackOverFlowの他のスレッドを読みました。しかし、私は面接官を説得する立場に自分自身を見つけていません。 誰かが最も簡単な例でそれを正当化できますか?

2
TypeScriptのプライベートキーワードとプライベートフィールドの違いは何ですか?
TypeScript 3.8以降では、privateキーワードを使用してメンバーをプライベートとしてマークすることの違いは何ですか? class PrivateKeywordClass { private value = 1; } そしてJavaScriptのために提案された#プライベートフィールドを使用します: class PrivateFieldClass { #value = 1; } どちらを優先するべきですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.