「データの抽象化」とは正確には何を意味するのでしょうか?
-
30-09-2019 - |
質問
データの抽象化とは何を指しますか?実際の例も併せて教えてください。
解決
抽象化には2つの部分があります。
- 隠れる 特定の視点から重要ではない詳細
- 特定の視点から重要な詳細を特定し、アイテムが 同じ それらがそれらの詳細を持っている場合のクラス。
たとえば、在庫に対処するためのプログラムを設計している場合、システムが在庫している特定のタイプのアイテムの数を調べたいと思います。インターフェイスシステムの観点から見ると、データベース、CSVファイル、SOAPインターフェイスまたはパンチカードを介したリモートリポジトリからこの情報を取得しているかどうかは気にしません。言えることができるだけです widget.get_items_in_stock()
そして、それが整数を返すことを知っています。
後でその番号を他の方法で記録したいと判断した場合、インターフェイスを設計する人は、それを知る必要はありません。 widget
まだあります get_items_in_stock()
方法。 Wiseのように、ウィジェットクラスをサブクラス化して追加する場合、インターフェイスは気にする必要がありません get_square_root_of_items_in_stock()
方法。新しいクラスのインスタンスも同様に渡すことができます。
したがって、この例では、私たちはそうしています 隠れた データの取得方法の詳細と、 get_items_in_stock()
メソッドはのインスタンスです 同じ 特定の目的のためのクラス(またはそのサブクラス)。
他のヒント
データの抽象化は、マシンに保存されているのではなく、人間が遭遇するようにデータを扱うことができる任意のデバイスです。
最も低いレベルでは、すべてのプリミティブデータ型は抽象化です - プログラマーとして、通常、ビットレベルでデータを処理する必要はありません(最終的には保存されます)が、整数として、浮動小数点数、文字など。
次に、その抽象化にレイヤーを追加します - おそらく2つの整数が Point
, 、または私たちと列挙は、今年の月、曜日などを表すための列挙。
各抽象化レイヤーを使用すると、マシンからさらに移動し、(できれば)データの人間の理解に近づきます。これにより、パフォーマンスのペナルティが抽出される可能性があります。ポイントが2つの整数で最も効率的に表現できるとは限りません。これは、抽象化が使用される場合の短い開発(およびメンテナンス)時間によって補償されます。
プログラムされるアプリケーションに適した新しいデータ型を作成する手法は、データ抽象化として知られています。
抽象化とは、重要な情報のみを外部に提供し、背景の詳細を隠すことを意味します。あなたのコンピュータでは、モニタ、キーボード、マウスしか見えません。内部配線については何も知りません。これは抽象化です。
データの抽象化は、あなたがそれを得ることができる限り、データを壊すと説明されているようです。食べ物は、リンゴ、オレンジ、ピザの抽象化になります。動物は猫、牛、豚の抽象化になります。食品オブジェクトは、この擬似コードのようなものです。
class food{
name;
calories;
weight;
public eat(name);
}
すべての食品には、名前、カロリー量、重量があります。それはかなり抽象的です。
その後、継承するオブジェクトを作成することができますが、これは少し抽象的ではありません。
class pizza inherits food{
toppings;
say_toppings();
}
ピザにはトッピングがありますが、食物からの名前、カロリー、重量を継承しています。
基本的に抽象化は、各アイテムの最低レベルに達し、それらから拡張されるクラスを作成すると説明されています。それはあなたのコードもより再利用可能にします...あなたがあなたの基本クラスの食品を十分に抱きしめ、それについてすべてを含めて、食品業界で働く誰でもあなたのクラスを使用することができるすべてのものを含めたなら。
抽象化は、人体からスケルトンを隠しています. 。肌は素晴らしい方法をします 含む それ。 (私がどのようにそこにいるのかを見てください?しゃれを意図しています。私は脱線します...)
私が水のボトルを持っているなら、私は蓋を開けてそれからそれをひねることでそれから飲むことができます。
bool lid_open = false;
void open_water_bottle_by_twisting() { lid_open = true; }
しかし、水のボトルは容器です。容器は液体を開いて酔っ払うことができるまで液体を保持します(液体が飲むことができると仮定します)。
class Container
{
bool lid_open = false;
protected:
Container() {}
void open_by_twisting()
{
lid_open = true;
}
public:
virtual ~Container();
};
class WaterBottle : public Container
{
WaterBottle() : Container() {}
public:
~WaterBottle();
};
ただし、すべてのコンテナが同じ方法で開かれているわけではありません。水のボトルなどの一部の容器には、ねじれができるふたがあります。他の人は、運動ボトルなどの蓋を持っていません - それらには、保管や飲酒のために倒れることができる曲がりくねったストローが含まれています。
class Container
{
bool lid_open;
bool straw_open;
protected:
void TurnLid() { lid_open = true; }
void BendStraw() { straw_open = true; }
Container() : lid_open(false), straw_open(false){}
public:
virtual void open() = 0;
virtual ~Container();
};
class WaterBottle : public Container
{
public:
WaterBottle() : Container() {}
void open()
{
TurnLid();
}
~WaterBottle();
};
class ExerciseBottle : public Container
{
public:
ExerciseBottle() : Container() {}
void open()
{
BendStraw();
}
~ExerciseBottle();
};
しかし、クライアントは何を知りません ExerciseBottle
の実装 ExerciseBottle
's open()
は。それは呼び出します BendStraw()
, 、それが設定します straw_open
本当です。だが ExerciseBottle
この作業をすべて行うために1つの関数を呼び出すだけです。クライアントは、の実装で使用されるいくつかのアクションを実行する必要はありません open()
. 。ケースも同様に行われます WaterBottle
. そして、それが抽象化です: バックエンドがそのためにすべての作業を行うことをクライアントに知らせる. 。 「インターフェイスから実装を分離する」という用語が使用される場合、これが意味されます。
相互作用しやすい、または人間と遭遇するデータの詳細を使用する複雑なシステムであり、バイナリ番号システムなどのコンピューターシステムが格納する方法とは異なります。ニーマ、ロハン、アンペンド(プログラマー)によって回答しました
ソフトウェアの開発とすべての無関係な属性を削除するための指定されたシナリオに従ってデータ属性を制限する手法は、ソフトウェア開発をより簡単にします。
オン /オフをオン /オフにできるテレビの1つの実例を取り、チャンネルを変更し、ボリュームを調整し、スピーカー、VCR、DVDプレーヤーなどの外部コンポーネントを追加しましょう。空中またはケーブルを介して信号を受信する方法、それらがどのように翻訳され、最終的に画面に表示されるかわからない。
背景の詳細や説明を含めずに、本質的な特徴を表現する行為を指します。
データの抽象化の日々の生活の例を見つけることは困難です。ただし、プログラミング言語、テーブル、ビューのDBMS、LinkedList、リスト、キュー、スタックなどのデータ構造のデータ型はデータの抽象化です。これらの抽象化は、特定の方法でデータにアクセスする方法を提供します。
この記事 データの抽象化を理解し、抽象化を詳細に制御するのに役立ちます。また、制御とデータの抽象化の実際の例のいくつかがあります。
抽象化とは、背景の詳細や説明を含めずに、本質的な機能を表現する行為を指します。
単にデータの抽象化は、ユーザーからの不要なデータセイルを隠すことに他なりません。例:人は単に電話をかけたいだけで、彼はただ選択またはダイヤルします。 [通話]ボタンをクリックしますこの情報。彼にとっては十分です。彼は、接続がどのように行われ、電話をかけるのにどのようなプロセスや音声が転送されるかについて知りたくありません。
私はこの質問がずっと前に尋ねられたことを知っています。しかし、それでも他の人がの概念を理解するのに役立つかもしれない1つの実際の例を共有するのが好きです abstraction
とても簡単に。
抽象化の実際の類推は、次のように機能するかもしれません。 あなた(オブジェクト)は盲目の日付を満たすように手配しており、彼らがレストランであなたを認識できるように彼らに何を伝えるかを決めています。どこにいるか、身長、髪の色、ジャケットの色に関する情報を含めることにします。これは、手順(あなたの日付を見つける日付)がスムーズに機能するのに役立つすべてのデータです。そのすべての情報を含める必要があります。一方、この状況には関係のないあなたに関する多くの情報があります。あなたの社会保障番号、あなたのお気に入りのサッカー選手はすべて、あなたの日付が見つけるのを助けないので、この特定の状況とは無関係です君。
データの抽象化:必要な情報をユーザーに提供し、ユーザーから不要な情報を非表示にするために使用されます。データの抽象化と呼ばれます。それはあなたのビジネスロジックを世界の外から隠すでしょう。
技術例: Console.WriteLine();
非技術例:テレビリモート、車のリモコン。
より詳しく: リアルタイムの例を使用したデータ抽象化
データを隠すと、おっと、セキュリティ機能が扱われます。このプロパティによれば、クラスのプライベートデータメンバーは、クラスの外ではなくクラス内でのみアクセスできます。