問題タブ [information-hiding]
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.
filesystems - データ破壊
1つのファイルを完全に削除するために使用できる多くのファイルシュレッダープログラムがあります。私が知りたいのは、いくつかの実装の詳細です。たとえば、Gutmannアルゴリズムを考えると、ファイルおよびファイルシステムでどのように機能する必要がありますか?アプリケーションは、それらを上書きするために、すべてのhddクラスターを反復処理する必要がありますか?または、1つのファイルを開き、何らかの方法で内容を変更し、その後削除するだけで十分ですか?
逆に、削除されたファイルを復元する方法は?これらのトピックに関する情報はあまり見つかりませんでした。
お返事ありがとうございます。
c++ - アクセス可能なクラスのプライベート関数?
私はしばらくの間、C++ を学ぼうとしています。最近、次のコードに出くわしました。
そして、私の人生では、なぜメソッドが機能し、機能するのか理解できませvoid add(Point P)
んvoid sub( Point p )
。
"cannot access private properties of class Point"
or を使用しようとすると、 orのようなエラーが発生するべきではありませんadd
かsub
?
gcc
バージョンでコンパイルされたプログラム4.6.3
(Ubuntu/Linaro 4.6.3-1ubuntu5)
。実行すると、次のように出力されます。
c++ - C++入門編 3rdの文章の読み方
<C++ primer (3rd)>
以下は、 Stanley B. Lippman Josée Lajoie によるの第 7.6 章からの抜粋です。
inline として指定された関数は、関数が呼び出されたプログラム内の各ポイントで「インライン」に展開されます。例えば、
int minVal2 = min( i, j );
コンパイル中に展開されます
int minVal2 = i < j ? 私:j;
したがって、min() を関数にする実行時のオーバーヘッドは取り除かれます。min() は、関数の宣言または定義で関数の戻り値の型の前に inline キーワードを指定することにより、インラインで宣言されます。
inline int min( int v1, int v2 ) { /* ... */ }
ただし、インライン指定はコンパイラへの推奨事項にすぎないことに注意してください。インラインで宣言された関数は呼び出し時点での展開に適していないため、コンパイラはこの推奨事項を無視することを選択する場合があります。たとえば、rgcd() などの再帰関数は、呼び出しの時点で完全に展開することはできません (最初の呼び出しは可能ですが)。1,200 行の関数も、呼び出し時に展開されない可能性があります。一般に、インライン メカニズムは、頻繁に呼び出される小さく直線的な関数を最適化することを目的としています。 これは、セクション 2.3 で導入された IntArray クラスの size() インライン メンバー関数など、抽象データ型の設計に隠されている情報をサポートする上で最も重要です。
誰かが太字でマークされた文を説明できますか?
c++ - 「インクルード」をカプセル化して、選択したクラスのみを公開する
質問: ヘッダーで定義されている他の名前空間/クラスを非表示にしながら、ヘッダーから特定のクラスにアクセスすることは可能ですか?
たとえば、ヘッダー ファイルoutput.hppがあるとします。
別のヘッダー ファイル ( api.hpp ) では、 api.hppを含むファイルにアクセスsports::outcome::Injury
せずに使用したいと考えています。それは可能ですか?もしそうなら、どうすればそれを達成できますか?sports::outcome::Success
PS 実際のコードでは、api.hppには、クラスのメソッドを呼び出すテンプレート化されたメソッドが含まれてInjury
いるため、前方宣言では不十分です。
私の試み:
私の無知でinclude
、内部名前空間内に配置することでこれを達成しようとしました。SSCCEは次のとおりです。
それがうまくいったとき、私は時期尚早に祝いました:
失敗する方法:
標準ライブラリのコンテナーがoutput.hppのクラス メンバーとして使用されている場合、事態は崩壊します。たとえば、次のバージョンを使用します。
コンパイルは次のエラーで失敗します:
私は明らかにこれを間違っています。アドバイスと良い報告をいただければ幸いです。
c++ - C++ を隠す情報
情報隠蔽の原則とは何ですか? C++ はそれをどのようにサポートしていますか? また、C++ では情報隠蔽に違反することはできますか?
java - 情報の隠蔽とカプセル化の違いは何ですか?
情報の隠蔽とカプセル化の違いは何ですか?
カプセル化とは、データとそれらを一緒に操作する必要のある手順をバンドルすることを意味することを読みました。もしそうなら、次のクラスはカプセル化を達成しますか?
データ属性を宣言すると、age
private
情報の隠蔽が実現しますか?
java - 効果的なAPI設計のためにプライベートJavaクラスを使用する方法
私は、オープンソースライブラリであり、(おそらく)他の開発者によって使用される最初の「APIjar」を書いています。Joshua Blockの効果的なAPI設計に関する論文を読みましたが、彼が話していることの1つは、アクセスを最小限に抑え、情報の隠蔽を最大化するという彼の概念です。基本的に、API開発者が使用するJavaオブジェクトにのみアクセスできるようにし、API開発者がライブラリの「ガッツ」にアクセスできないようにする必要があります。
Java開発者としての数年間、クラスを.以外のものにする必要はありませんでしたpublic
。さらに、ネストされたクラスも使用したことがありません。だから私はここに座って、Java APIでこの「情報隠蔽」のベストプラクティスをどのように実装するのか疑問に思っていますか?そして、私はプライベートな、そしておそらくネストされたクラスが答えだと思います。しかし、どこから始めればよいのでしょうか。
- すべてのソースファイルは、コンパイルするため
.java
に少なくとも1つのクラスを必要とします。public
したがって、クラスを作成するprivate
(およびネストされていない)には、「クラスとバンドルする必要がありpublic
ます。これは、/クラスが密接に関連している場合にのみ意味があります。しかし、APIのセクションが他のアナログとは関係のないクラス(アクセシビリティを最小化する目的)で構成されていますか?public
private
private
public
- クラスをいつ
private
ネストし、いつ非ネストにしますか?それとも好みの問題ですか?
oop - Fortran 2003/2008 におけるサブクラスのデータ継承
Fortran 2003 では、変数がスーパークラスで PRIVATE として宣言されている場合、サブクラスはそれにアクセスできません。しかし、すべての変数が PUBLIC として宣言されている場合、プログラムは「情報隠蔽」の性質を失います。
Fortran オブジェクト指向プログラミングで「データの継承」と「情報の隠蔽」の両方を取る方法はありますか? 2003 年でない場合、Fortran 2008 で何か改善点はありますか?
javascript - JavaScript - eval されたスクリプトからグローバル スコープを非表示にする方法
私は通常、グローバル スコープを、常にどこからでもアクセスできる名前空間と考えています。グローバル スコープを完全に非表示にすることが理論的に可能かどうかを知りたいです。たとえば、eval
(ブラウザのコンソールで) 実行したいコードがあるとします。
eval
呼び出しをthis
ラップすることにより、次window
から非表示にすることができますcode
。
しかし、code
暗黙的にグローバル変数を作成することを止めることはできません。なんとなく可能ですか?私はこのようなものを使用したくありません, 私はただ興味があります.
java - デフォルトのシリアル化を受け入れている間、カプセル化はどのように壊れていますか?
シリアライゼーションはカプセル化を壊し、このカプセル化の損失は、カスタムのシリアライゼーションを提供することである程度最小限に抑えることができると言う人をよく耳にします。デフォルトのシリアル化によるカプセル化の損失を正当化する具体的な例を誰かが提供できますか?カスタムのシリアル化に頼ることで、この損失を最小限に抑えるにはどうすればよいですか?
この質問にJava関連のタグを付けていますが、これはプラットフォームや言語全体で共通の問題だと思うため、答えは言語にとらわれない可能性があります。