2011-08-29 15 views
9

データ抽象化と情報隠蔽に違いはありますか?このリンクのすべての回答を通過した後、私はもっと混乱しています。 Abstraction VS Information Hiding VS Encapsulation 違いは見つかりませんでした。私たちが目標(情報隠蔽)を目標として&と呼ぶことができるかどうかは、プロセスとして他のもの(抽象化)ですか?しかし、これは私にとって満足できる差ではありません。さらに、私はカプセル化が抽象化のプロセスを実装する技術だと思っていますか?正確な違いを説明してください。情報の隠蔽とデータ抽象化の違いは?

答えて

6

情報隠蔽は、設計者が実装の詳細へのアクセスを制限することを特に決めた場合です。オブジェクト指向設計よりも古くなった原則ですが、しばしば使用されます。

単純な例は、Cで定数を定義することです。、#define NAME_SIZE 15定数のコード(クライアント)は、その値を知る必要はなく、後でその値を変更することをデザイナーが決定しても問題はありません。彼らはあなたがそれを変更することを決定するかもしれないので、それが本当に15であるという事実について仮定をするべきではありません。あなたは集計を扱っているとき抽象がある

は、例えば、車は抽象化は、私たちは簡単な方法で、複雑な物事を考えることを可能などのシャーシ、モーター、車輪、などの詳細を抽象化したものです。

カプセル化は、抽象を構成する要素の詳細レベルをどのように決定するかです。良好なカプセル化は情報の隠蔽を適用し、詳細の限界を強制する。たとえば、私の車は実際にはすべての部品で構成されていますが、それだけで私のニーズに合ったインターフェースを私に提供します。ドア、ロック、窓、ライト、ホーン、サンルーフ、動きの方向、加速、減速などを制御することができます。これらのすべての「方法」の詳細を操作するのは興味深いかもしれませんが、私はもっ​​と見ることから。

車の実装が変更された場合(私は燃焼機関から電気またはハイブリッドに変更されます)、私は運転手として制限されたインターフェイスしか知らないため、車の運転方法を変更する必要はありません。抽象化は、情報隠しは車のない一部がchoke valveかもしれないあった場所の例

など、私は車を運転し、代わりに金属片の数百、ゴムてるだけで知ることができます。私の両親は、彼らが運転していた車で働いていたことを彼らに教えてくれました。それは電気自動車では役に立たない燃焼エンジンのディテールでした。

+1

実例を説明してリアルタイムで説明します。ありがとう。 :) –

1

「情報隠蔽」は、「データ抽象化」の重要な部分ですが、全体の概念ではありません。

覚えておいてください:手順上のコード(FORTRANやBASICでは "グローバルを使用しない"など)で "情報隠蔽"をすることができますが、 "抽象データ型"

Information hidingAbstract Data Typesは密接に関連していますが、それぞれ異なる概念です。

2

通常、クラスはクライアントから実装の詳細を隠します。これは情報隠蔽と呼ばれます。インターフェースを作成することによって、私たちは...情報隠蔽の

例は...以下の我々は、ヘッダー・ファイル内のインタフェースを持っている です...

class Coder 
{ 
    public: 
     Coder(); 
     void prints(); 

private: 
     int x; 

}; 

を情報隠蔽する概念を召喚し、別のファイル内の関数の実装「Coder.cppは」...

Coder::Coder 
{ 
x=10;//any int value you can take; 
} 

void Coder::prints()  
{ 
    cout<<x; 
} 

ではなく、我々は、単一の場所でそれを行っている可能性が二つのファイル(1つのヘッダ+ 1つのcppファイル)に上記のやってtahnされます。我々は、我々がこれを行っている場合

class Coder 
    { 
     public: 
      Coder() 
      { 
       x=10;//any int value you can take; 

      } 
      void prints() 
    { 
      cout<<x; 
     } 

    private: 
      int x; 

    }; 

は、我々は情報隠蔽を実装することができませんでした...コンストラクタとヘッダファイル自体に印刷機能のdefinationを与えている可能性が...と私たちのクライアントは、我々が実装されている方法を知っている私たちの機能!データ用

あなたが考えることができabsraction ...スタックの例...

スタッククラスのクライアントは、スタックの実装を気にする必要はありません。クライアントは、データアイテムがスタックに置かれたときに、後入れ先出しの順序で呼び出されることを知っています。クライアントは、その機能の実装方法ではなく、スタックが提供する機能を気にします。この概念は、データ抽象化と呼ばれます。

5

データ隠蔽は、アクセス修飾子を使用してJavaメソッドおよび変数の可視性を隠すプロセスです。アクセス修飾子はpublic、private、protectedです。

抽象化は、このクラスを拡張する任意のクラスのスケルトンを形成する抽象クラスとメソッドのBeanによる特定の動作を定義するプロセスです。

0

抽象化は、(抽象画のように)詳細が少ないものの表現です。 OOでは、抽象型はその内部表現にコミットせずに操作できます。たとえば、電話番号の抽象化としての電話番号は、国コード、市外局番、および実際の番号で構成されていることをクライアントが知らなくても操作できます。抽象化は、抽象データ型(電話番号など)に関して、実装方法を心配することなく話すことができるため、分析および設計段階で最も役立ちます。

もっとよく知られているタイプのstringは、テキストの抽象です。stringは、その実装方法を知らなくても操作できます。文字列抽象化により、アプリケーション設計での使用に影響を与えずに内部構造を変更することができます。

情報の隠蔽とカプセル化は、抽象データ型を実装する2つの方法です。抽象データ型では、内部状態やカプセル化を隠す必要がない場合もあります。例えば、抽象化としての数字は、intとして実装することができる。

関連する問題