問題タブ [encapsulation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encapsulation - 抽象化 VS 情報隠蔽 VS カプセル化
ソフトウェア開発における抽象化と情報隠蔽の違いは何ですか?
私は混乱しています。抽象化は、詳細な実装を隠し、情報を隠して、何かの詳細全体を抽象化します。
更新:これら 3 つの概念に対する適切な答えを見つけました。そこから取られたいくつかの引用については、以下の別の回答を参照してください。
python - Python記述子プロトコルは他の言語で類似していますか?
他の言語で実装されている Python 記述子プロトコルのようなものはありますか? 包含クラスの実装を肥大化させずにモジュール性/カプセル化を高める良い方法のように思えますが、他の言語で同様のことを聞いたことがありません。ルックアップのオーバーヘッドのために、他の言語には存在しない可能性がありますか?
python - Python の「プライベート」メソッドが実際にはプライベートではないのはなぜですか?
Python では、次のように名前の前に 2 つのアンダースコアを追加することで、クラス内に「プライベート」メソッドと変数を作成できます__myPrivateMethod()
。では、これをどのように説明できますか
どうしたんだ?!
よく分からないという方のために少し説明します。
パブリック メソッドとプライベート メソッドを持つクラスを作成し、インスタンス化します。
次に、パブリック メソッドを呼び出します。
次に、そのプライベート メソッドを呼び出してみます。
ここではすべてが良さそうです。私たちはそれを呼び出すことができません。実は「プライベート」です。ええと、実際にはそうではありません。オブジェクトでdir()を実行すると、すべての「プライベート」メソッドに対して Python が魔法のように作成する新しい魔法のメソッドが明らかになります。
この新しいメソッドの名前は、常にアンダースコア、その後にクラス名、その後にメソッド名が続きます。
カプセル化はここまでですよね?
いずれにせよ、私はいつも Python がカプセル化をサポートしていないと聞いていました。何を与える?
language-agnostic - プライベート メンバーとパブリック メンバーの実際 (カプセル化の重要性)
オブジェクト指向プログラミングの最大の利点の 1 つはカプセル化であり、私たちが (または少なくとも私が) 教えられてきた "真実" の 1 つは、メンバーは常に非公開にし、アクセサーとミューテーターを介して利用できるようにする必要があるということです。これにより、変更を検証および検証する機能が保証されます。
しかし、これが実際にどれほど重要なのか、私は興味があります。特に、より複雑なメンバー (コレクションなど) がある場合、コレクションのキーを取得したり、コレクションから項目を追加/削除したり、等
一般的にルールを守っていますか?自分用に書かれたコードか、他の人が使用するコードかによって、答えは変わりますか? この難読化のために私が見逃しているもっと微妙な理由はありますか?
c++ - コレクションをカプセル化するのは良い (正しい) 方法ですか?
msdn はstd::list
、削除または挿入時に要素の再配置を実行すべきではないと言っていますが、リスト要素へのポインターを返すのは適切で一般的な方法ですか?
delete
PS:ポインタのコレクション(およびデストラクタの要素が必要)、共有ポインタのコレクション(私は好きではない)などを使用できることを知っています.
c++ - 使用するコンテナを公開せずにイテレータを公開するにはどうすればよいですか?
私はしばらくの間C#を使用していますが、C++に戻るのは頭痛の種です。私は自分のプラクティスのいくつかをC#からC ++に移行しようとしていますが、抵抗を感じているので、あなたの助けを喜んで受け入れます。
次のようなクラスのイテレータを公開したいと思います。
問題ないことをやっていますか?typedef std :: vector <T> :: iteratorだけでいいですか?実装コンテナではなく、イテレータに依存することを望んでいます...
python - プライベート メンバーを持つクラスのサブクラス化
Python の本当に優れた点の 1 つは、アクセサーと同じ名前の変数に名前を付けることができる単純さです。
サブクラス化したいクラスのプライベート メンバーへのアクセスを提供する簡単な方法はありますか? アクセサーやミューテーターを常に使用せずに、クラス内の生データ オブジェクトを単純に操作したいことがよくあります。
これがプライベートとパブリックの一般的な考え方に反しているように見えることはわかっていますが、通常、サブクラス化しようとしているクラスは私自身のものであり、メンバーをサブクラスに公開することは非常に満足していますが、そのクラスのインスタンスには公開しません. この区別を明確にする方法はありますか?
php - PHPで「保護」または「プライベート」を使用しないのはなぜですか?
私は Joomla フレームワークを使用してきましたが、それらが慣習を使用してプライベート メソッドまたは保護されたメソッドを指定していることに気付きました (メソッド名の前にアンダースコア " "を_
付けます)。. どうしてこれなの?携帯性と関係ありますか?、、またはキーワードは古いバージョンの PHP では使用できませんか?public
private
protected
public
private
protected
c++ - プライベート/パブリックメンバーとしてベクトルを使用したクラスデザイン?
コンテナクラスまたは他のクラスをプライベートまたはパブリックメンバーとしてクラス内に配置するための最良の方法は何ですか?
要件:
1.クラス内のVector<someclass>
2.ベクトルの追加とカウントが必要なインターフェイス