15

データの抽象化とは何を指しますか? 実際の例を一緒に提供してください。

4

16 に答える 16

20

抽象化には2つの部分があります。

  • 特定の観点から重要ではない詳細を非表示にする
  • 特定の観点から重要な詳細を特定し、それらの詳細を持っている場合は、アイテムが同じクラスであると見なします。

たとえば、在庫を処理するプログラムを設計している場合、システムに在庫がある特定のタイプのアイテムの数を調べたいと思います。インターフェイスシステムの観点からは、データベース、csvファイル、SOAPインターフェイスを介したリモートリポジトリ、またはパンチカードからこの情報を取得するかどうかは関係ありません。widget.get_items_in_stock()私はそれが整数を返すことを言うことができて知っていることができることをただ気にしています。

後でその番号を別の方法で記録することにした場合、インターフェイスを設計する人は、メソッドwidgetを持っている限り、それを知ったり、気にしたり、心配したりする必要はありません。get_items_in_stock()同様に、ウィジェットクラスをサブクラス化してget_square_root_of_items_in_stock()メソッドを追加しても、インターフェイスは気にする必要はありません。新しいクラスのインスタンスをそれに渡すこともできます。

したがって、この例では、データの取得方法の詳細を非表示にし、メソッドを持つものはすべて、特定の目的のために同じクラス(またはそのサブクラス)get_items_in_stock()のインスタンスであると判断しました。

于 2010-09-03T10:53:36.323 に答える
11

データの抽象化とは、データをマシンに格納するのではなく、人間がデータに遭遇したときにデータを処理できるようにするデバイスです。

最下位レベルでは、すべてのプリミティブ データ型は抽象化されています。プログラマーは通常、データをビット レベルで処理する必要はなく (最終的にはビット レベルで格納されます)、整数、浮動小数点数、文字などとして扱います。 .

次に、その抽象化にレイヤーを追加します。おそらく、2 つの整数で aPointを表すか、 we と列挙で月、曜日などを表します。

抽象化レイヤーごとに、私たちは機械から離れ、(願わくば) 人間がデータを理解することに近づきます。これにより、パフォーマンスが低下する可能性があります。ポイントを 2 つの整数で最も効率的に表現できるとは限りません。これは、抽象化を使用した場合の開発 (およびメンテナンス) 時間の短縮によって補われます。

于 2010-09-03T16:13:12.510 に答える
6

プログラムされるアプリケーションに適した新しいデータ型を作成する手法は、データの抽象化として知られています。

于 2012-12-11T06:44:59.057 に答える
1

抽象化は人体から骨格を隠しています。肌はそれを封じ込める素晴らしい方法を行います。(私がそこにいるのがどれほど抽象的なかわかりますか?しゃれが意図されています。私は脱線します...)

水筒を持っている場合は、蓋を開けて飛び出すまでひねって飲むことができます。

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実装が何であるかを知りません。を呼び出し、true に設定します。ただし、1 つの関数を呼び出すだけで、このすべての作業を実行できます。クライアントは、 の実装で使用されるいくつかのアクションを実行する必要はありません。の場合も同様です。そして、それが抽象化ですバックエンドがすべての作業を行うことをクライアントに知らせます。「インターフェースから実装を分離する」という用語が使用される場合、これが意味されます。ExerciseBottleopen()BendStraw()straw_openExerciseBottleopen()WaterBottle

于 2016-06-23T02:59:41.520 に答える
1

抽象化とは、重要な情報のみを外の世界に提供し、その背景の詳細​​を隠すことを意味します..例. あなたのコンピューターでは、モニター、キーボード、マウスしか見ることができません..あなたは内部配線について何も知りません。これは抽象化です。

于 2014-07-12T11:53:22.797 に答える
0

単にデータの抽象化は、不要なデータイルをユーザーから隠すことに他なりません。例: 人は単に電話をかけたいだけで、番号を選択するかダイヤルするだけです。この情報を呼び出しボタンをクリックします。彼にとっては十分です.彼は、接続がどのように行われるか、電話をかける背後にあるプロセス、または音声がどのように転送されるかについて知りたくありません.

于 2014-09-14T07:42:39.570 に答える
0

ソフトウェア開発において、与えられたシナリオに従ってデータ属性を制限し、無関係な属性をすべて削除する手法。これにより、ソフトウェア開発がより簡単になります。

于 2013-04-15T11:40:33.387 に答える
0

私はこの質問がずっと前に尋ねられたことを知っています。abstractionしかし、他の人が概念を非常に簡単に理解するのに役立つかもしれない実際の例を 1 つ共有したいと思います。

現実世界での抽象化の類推は次のように機能する可能性があり ます。あなた (オブジェクト) はブラインド デートを手配し、レストランであなたを認識できるように何を伝えるかを決定しています。居住地、身長、髪の色、ジャケットの色に関する情報を含めることにしました。これは、手順(あなたの日付があなたを見つける)がスムーズに機能するのに役立つすべてのデータです. そのすべての情報を含める必要があります。一方で、この状況には関係のない、あなたに関する情報がたくさんあります。あなたの社会保障番号、お気に入りのサッカー選手はすべて、この特定の状況には関係ありません。デート相手を見つけるのに役立たないからです。あなた。

于 2015-12-27T17:37:01.013 に答える
0

データ抽象化の日常生活の例を見つけるのは困難です。ただし、プログラミング言語のデータ型、DBMS のテーブルとビュー、LinkedList、List、Queue、Stack などのデータ構造は、データの抽象化です。これらの抽象化により、特定の方法でデータにアクセスする方法が提供されます。

この記事は、データの抽象化を理解し、抽象化を詳細に制御するのに役立ちます。また、制御とデータの抽象化の実例もいくつか含まれています。

于 2013-09-19T17:17:29.657 に答える
-2

データ隠蔽は、おっとのセキュリティ機能を扱います。このプロパティによると、クラスのプライベート データ メンバーは、クラスの外部ではなく、クラスの内部でのみアクセスまたはビジュアル化されます。

于 2015-07-18T18:48:45.617 に答える