抽象データ型について知る前に、データ構造とは何かについて知っておく必要があります。
データ構造とは何ですか?
データ構造とは、データを効率的に利用できるようにデータを整理する手法です。データ構造を表示するには 2 つの方法があります。
なぜデータ構造なのか?
データ構造を使用する利点は次のとおりです。
- これらは、高速で強力なアルゴリズムを作成するために使用される重要な要素です。
- これらはデータの管理と整理に役立ちます。
- データ構造により、コードがわかりやすくなり、理解しやすくなります。
抽象データ型とは何ですか?
抽象データ型は、データ構造が準拠する必要があるインターフェイスのみを提供するデータ構造の抽象化です。このインターフェイスには、何かを実装する必要があるか、またはどのプログラミング言語で実装する必要があるかについての具体的な詳細は示されていません。
言い換えれば、抽象データ型はデータと操作の定義であるが実装の詳細を持たないエンティティであると言えます。この場合、保存しているデータとそのデータに対して実行できる操作はわかっていますが、実装の詳細についてはわかりません。実装の詳細が記載されていない理由は、たとえば、すべてのプログラミング言語には異なる実装戦略があるためです。 C データ構造は構造体を使用して実装されますが、C++ データ構造はオブジェクトとクラスを使用して実装されます。
例えば、 List は、動的配列とリンク リストを使用して実装される抽象データ型です。キューは、リンク リスト ベースのキュー、配列ベースのキュー、およびスタック ベースのキューを使用して実装されます。マップは、ツリー マップ、ハッシュ マップ、またはハッシュ テーブルを使用して実装されます。
抽象データ型モデル
抽象データ型モデルについて知る前に、抽象化とカプセル化について知っておく必要があります。
Javaのソートリスト
抽象化: 内部の詳細をユーザーから隠し、必要な詳細のみをユーザーに表示する手法です。
カプセル化: データとメンバー関数を 1 つのユニットに結合する技術であり、カプセル化として知られています。
上図は ADT モデルを示しています。 ADTモデルにはパブリック関数とプライベート関数の2種類のモデルが存在します。 ADT モデルには、プログラムで使用するデータ構造も含まれています。このモデルでは、最初にカプセル化が実行されます。つまり、すべてのデータが単一のユニット、つまり ADT にラップされます。次に、データ構造に対して実行できる操作と、プログラムで使用しているデータ構造が何であるかを示す抽象化が実行されます。
実際の例で抽象データ型を理解しましょう。
スマートフォンで考えてみると。スマートフォンの次のような高いスペックに注目します。
Cのブール値
- 4GBのRAM
- Snapdragon 2.2GHzプロセッサ
- 5インチ液晶画面
- デュアルカメラ
- アンドロイド8.0
上記のスマートフォンのスペックはデータですが、スマートフォン上では以下の操作も可能です。
スマートフォンとは、上記のようなデータや仕様、動作を行うものです。抽象/論理ビューと操作は、スマートフォンの抽象ビューまたは論理ビューです。
上記の抽象/論理ビューの実装ビューを以下に示します。
class Smartphone { private: int ramSize; string processorName; float screenSize; int cameraCount; string androidVersion; public: void call(); void text(); void photo(); void video(); }
上記のコードはスマートフォン上で実行できる仕様と操作を実装したものです。プログラミング言語の構文が異なるため、実装ビューは異なる場合がありますが、データ構造の抽象/論理ビューは同じままです。したがって、抽象/論理ビューは実装ビューから独立していると言えます。
注: int、float、char などの事前定義されたデータ型に対して実行できる操作はわかっていますが、データ型の実装の詳細はわかりません。したがって、抽象データ型は、データ型の内部詳細をすべて隠す隠しボックスと見なされると言えます。
データ構造例
サイズ 4 のインデックス配列があるとします。インデックスの位置は 0、1、2、3 から始まります。配列は、要素が連続した位置に格納されるデータ構造です。最初の要素のメモリアドレスは 1000、2 番目の要素は 1004、3 番目の要素は 1008、4 番目の要素は 1012 です。整数型なので 4 バイトを占有し、各要素のアドレスの差は 4 です。バイト。配列に格納される値は 10、20、30、および 40 です。これらの値、インデックス位置、およびメモリ アドレスが実装です。
整数配列の抽象的または論理的なビューは次のように記述できます。
- 整数型の要素のセットを格納します。
- 位置、つまりインデックスによって要素を読み取ります。
- インデックスによって要素を変更します
- ソートを実行します
整数配列の実装ビュー:
a[4] = {10, 20, 30, 40} cout<< a[2] a[3] = 50