3

オブジェクト指向の概念:、、encapsulationおよびdata abstractiondata hiding3つの異なる概念ですが、互いに非常に関連しています。そのため、インターネットから情報を読んで概念を完全に理解するのに苦労しています。ある場所で入手できる情報は、インターネット上の別の場所の情報と矛盾しています。誰かが私に3つの概念を明確に説明し、3つの違いを引き出すチュートリアルに案内してもらえますか?

4

2 に答える 2

3

まず第一に、野心的になりすぎないでください。あなたが言ったように、これらの 3 つの概念は関連しており (特に最初の 2 つ)、多くのコンテキストで互いに使用できる可能性があります。それらを正しく使用することは、完全な最終定義を持つことよりもはるかに重要です。

データ隠蔽」とは、クライアントと実装 (の一部) の間に壁を置くことです。モジュールの一部のオブジェクトは、モジュールの内部にあり、ユーザーには見えない場合があります。このように、これは依存を回避するための方法です。あるものがどのように実装されているかがわからない場合、その実装は変更される可能性があります。

データの抽象化」とは、同じ抽象化の下で異なる種類のデータを再グループ化することです。プロトコルの考え方に近いです。オブジェクトがどのように実装されているかはわかりませんが、よく知られているプロトコル、つまりさまざまなタイプのデータに対して機能する一連のメソッドを尊重していることはわかっています。Python では、ファイルのようなオブジェクトが良い例です。Java では、インターフェイスを使用します。学ぶことが少なくて済み、抽象化レベルで、つまりこの抽象化の下で再グループ化されたすべての種類のデータについていくつかのプロパティをチェックできるため、これは良いことです。

カプセル化」とは、オブジェクトの周りにシェルを配置して、その使用を簡素化することです。これは、コード ベース内のオブジェクトを、ますます低レベルのレイヤーに再グループ化できるという考えに関連しています。レイヤー内の 1 つのオブジェクトは、その下のレイヤーのオブジェクトのみを呼び出します。たとえば、画面に線を描画する場合、線オブジェクトは、openGL コンテキスト、ピクセル ドロワー、およびその他のもののみをカプセル化できます。これらの下位レベルのオブジェクトは、line オブジェクトによってカプセル化されます。カプセル化は、同じオブジェクトが同時に異なるレイヤーの一部である場合に適用される可能性があることに注意してください。これは良くありませんが、避けられない場合があります。たとえば、Python のファイルのようなオブジェクトには、高レベル/カプセル化メソッド (open、close、read) と低レベルのもの (seek) があります。

それでおしまい。明らかに、それぞれの定義はより広くなる可能性がありますが、これらは 3 つの概念をもう少し異なるものにします。

于 2012-01-15T15:42:30.650 に答える
0

データと関数を単一のユニット(クラスと呼ばれる)にまとめることは、カプセル化と呼ばれます。データのカプセル化は、クラスの最も印象的な機能です。データには外部からアクセスできず、クラスにラップされている関数のみがデータにアクセスできます。これらの関数は、オブジェクトのデータとプログラムの間のインターフェースを提供します。プログラムによる直接アクセスからのデータのこの隔離は、データ隠蔽または情報隠蔽と呼ばれます。抽象化とは、背景の詳細​​や説明を含めずに、重要な機能を表現する行為を指します。クラスは抽象化の概念を使用し、サイズ、重み、コストなどの抽象属性、およびこれらの属性を操作するための関数のリストとして定義されます。これらは、作成されるオブジェクトのすべての重要なプロパティをカプセル化します。属性は情報を保持するため、データメンバーと呼ばれることもあります。これらのデータを操作する関数は、メソッドまたはメンバー関数と呼ばれることもあります。クラスはデータ抽象化の概念を使用するため、抽象データ型(ADT)として知られています。

于 2013-01-24T16:02:19.173 に答える