2016-06-17 20 views
-5

多くの人々は、抽象化は何かを隠しており、ユーザーに機能性だけを示していると言います。誰もがあなたが隠しているすべてのものは何ですか、あなたが示しているすべてのものは何ですか?動物、エンジン、車両の例を説明しないでください。抽象化で隠れているものは何ですか?

+4

実装の詳細を隠し、パブリックAPIを公開します。 – hexafraction

+3

[プログラミングで抽象化の意味は何ですか?](http://stackoverflow.com/questions/21220155/what-does-abstraction-mean-in-programming) –

+0

https://en.wikipedia.org/wiki /抽象化_%28ソフトウェア_エンジニアリング%29 –

答えて

1

具体的な例が多く役立つ場合があると思います。

HashMapには、ハッシュコリジョンを処理するための内部構造があります。これは、単一リンクリストの実装です。さて、内部構造がどのように機能しているのか、呼び出されているのか、フィールドが呼び出されているのかなど、あなたは知っていますか?さらに重要なのは、ケアですが、HashMapが「うまく動作する」限りですか?

好奇心・学習目的以外のものでなければならないものが「いいえ」—の場合—これらの詳細はあなたから隠されており、マップのインターフェイスの抽象化によって公開されています。

結果は、(学習することが少ないために)推論しやすいクラスであり、ライブラリメンテナのメンテナンスが容易です(変更を心配する必要がないため、コードを壊すそれらがまだインタフェースを守っている限り)。

+0

あなたの例はオフです。抽象化は 'HashMap'の内部を隠すことではなく、実装をAPI(契約)から分離することに関するものです。 'Map' APIは' HashMap'や 'TreeMap'で実装できます。 – Andreas

+0

@アンドレアスそれは両方です。それは、TreeMapからHashMapを分離することです。もっと細かいレベルでは、HashMapとリンクリストの衝突解決戦略を持つHas​​hMapを、他の解決戦略を使ってHashMapから分離することもあります。より詳細なレベルでは、一般に、この特定のリンクリスト解決戦略を持つものから、リンクリスト解決戦略でHashMapを分離することです。私の例は、実装をAPI(Map APIと一般的にはHashMap APIの両方(例えば 'HashMap.Entry.key'については何も言わない)の両方)から分離するものです – yshavit

0

抽象化は過負荷の用語です。

オブジェクト指向言語の抽象化は、基本的に、実世界のオブジェクトをモデリングする際に不要な詳細を取り除くことを意味します。また、それを単純化プロセスと考えることもできます。

コンピュータサイエンス全体の抽象化は、よりシンプルなインターフェイスを提供することによって複雑さを隠すことを意味します。あなたの質問は「データ抽象化」を目標としているように見えます。これは、データが抽象化レイヤーで表現されている正確な方法を隠すことを意味します。これは、例えば、データベースのNumberデータ型あなたはそれが数字であることは分かっていますが、ディスクにどのように格納されているかはわかりません。

カプセル化と同じように抽象化が使用されることがあります。

関連する問題