抽象データ型-Wikipedia

before-content-x4

a 抽象データ型 adt )データは、それらにアクセスするすべての許容操作の定義とともにデータの複合です。

after-content-x4

アクセスはセット操作を介してのみアクセスされるため、データは外側にカプセル化されます。

ADTが説明します、 だった 操作は(セマンティクス)ですが、まだそうではありませんが、 どうやって 彼らはそれをする必要があります(実装)。
インサートの概念は異なる方法で指定することもでき、ADTはさまざまな方法で注目されます。ただし、最新のプログラミング言語は、STERの作成を具体的にサポートしています。

オブジェクト指向のプログラミング言語は、ここでのデータと操作以来、クラスの概念を通じてインサートの作成をサポートしています バウンド データは保護でき、許容操作を決定できます。
ADAやModula-2などのいくつかのモジュラープログラミング言語も、STEの作成を特にサポートしています。原則として、セマンティクスはコメントテキストとして説明されている間、操作のデータと署名を定義することによりADTを決定することができます。

Javaは、クラス、抽象クラス、インターフェイスを通じてSTESをサポートします。インターフェイスでは、操作のデータと署名のみが定義されています。 実装 最初にインターフェイス。一般に、クラスはデータとその上で許可されている操作を決定します。

抽象データ型は、さまざまな仕様で指定できます。仕様は、操作の意味と相互作用を定義する署名とセマンティクスで構成されています。

数学的な観点から、それは署名、生産者、公理を通じてターゲルブラの仕様です。これにより、最初のタイプの仕様である数学的軸測定が生じます。

もう1つのオプションは、数学代数の仕様です。これは、セマンティクスの指定でのみ公理とは異なります。操作の内容は、数学的手段、行列、ベクトル、結果などによって定義されます。

さらに、プログラミング言語のインターフェイスを指定することで、たとえばJavaインターフェイスとして、または機能的なプログラミング言語でデータ型を実装することで、特別な形式など、特別な形式があります。ただし、機能的なプログラミング言語での実装は、ATSの仕様として機能し、最終的に手続き型またはオブジェクト指向の言語で実装されます。この仕様の利点は、仕様が理にかなっているかどうかをすぐにテストできることです。これは、他のオプション、特に公理的では簡単に不可能です。

after-content-x4

ステップの下に積み重ねられています( スタック 、後に働いています 最初のうちの最後の – プリンス)とキュー( 、後に働いています 先入先出 -prince)上記の4つの仕様で定義されています。

サイン [ 編集 | ソーステキストを編集します ]

数学的 – 軸方向および代数法 [ 編集 | ソーステキストを編集します ]

スタック(ここで定義されています)
要素(スタックが機能するここでは定義されていないADT)
ブール 
emptystack:→スタック(空のスタックを作成)
isStackEmpty:スタック→ブール(スタックが空であるかどうかを尋ねます)
プッシュ:要素×スタック→スタック(スタックの上部に要素を詰めます)
POP:スタック→スタック(上部要素を削除して新しいスタックを返します)
上:スタック→要素(削除せずに上部要素を返します) 
列
エレメント
ブール 
emptyque:→キュー
iscueeempty:キュー→bool
enqueue:要素×キュー→キュー(背面に要素を追加)
dequeue:キュー→キュー(フロント要素を削除)
ヘッド:キュー→要素(削除せずにフロント要素を返します) 

Informelleメソッド(Java) [ 編集 | ソーステキストを編集します ]

公共  インターフェース  ISTACK < >  {  公共  ブール  ISTACKMPTY ();  公共  ISTACK < >  押す  エレメント );  公共  ISTACK < >  ポップ ();  公共   ();  }  公共  インターフェース  IC < >  {  公共  ブール  IsqueueEmpty ();  公共  IC < >  enqueue  エレメント );  公共  IC < >  dequeue ();  公共   ();  }  

機能的なプログラミング言語(Haskell)を介した仕様 [ 編集 | ソーステキストを編集します ]

データ  スタック  そうです  =   |  s  そうです  スタック  そうです ))  ISTACKMPTY  ::  スタック  a   ブール  押す  ::  そうです   スタック  そうです   スタック  そうです  ポップ  ::  スタック  そうです   スタック  そうです   ::  スタック  そうです   そうです  データ   そうです  =   |  Q   そうです ))  そうです  IsqueueEmpty  ::   そうです   ブール  enqueue :: e  Queue e  Queue e
dequeue :: Queue e  Queue e
head :: Queue e  e

セマンティック [ 編集 | ソーステキストを編集します ]

(同一の)署名をより詳細に表示する場合でも、データ型に違いはありません。セマンティクスの定義には違いがあります。

数学的軸方向の方法 [ 編集 | ソーステキストを編集します ]

X:要素
 S:スタック
 isstackEmpty(emptyStack())= true
 isstackEmpty(push(x、s))= false
 pop(emptystack())=エラー
 pop(push(x、s))= s
 top(emptystack())=エラー
 TOP(push(x、s))= x
 push(top(s)、pop(s))= s、falls s nicht leer 
X:要素
 Q:キュー
 isqueueEmpty(emptyqueue())= true
 isqueueEmpty(enqueue(x、q))= false
 head(emptyqueue())=エラー
 head(enqueue(x、q))= isqueuempty(q)then x else head(q)
 dequeue(emptyqueue())=エラー
 dequeue(enqueue(x、q))= isqueuempty(q)then q else enqueue(x、dequeue(q)) 

数学的代数法 [ 編集 | ソーステキストを編集します ]

sets item = e(my the element) stack = s = 機能
    emptystack = isStackEmpty(s)= push(s、x)= 、滝 = 、滝 TOP(s)= 、滝 = 、滝 pop(s)= 、滝 = 、滝 = 、滝  
sets item = e(my the element) キュー= q = 機能
    emptyqueue = isqueueEmpty(q)= enqueue(q、x)= 、滝 = 、滝 head(q)= 、滝 = 、滝 dequeue(q)= 、滝 = 、滝 = 、滝  

Informelleメソッド(Java) [ 編集 | ソーステキストを編集します ]

セマンティクス:メソッドの前提条件と効果/結果を指定することにより(オブジェクト指向プログラミングの場合、メソッドはすでに存在するオブジェクトに結合しているため、データ構造の存在を前提条件として提供する必要はありません)。

公共  インターフェース  ISTACK < >  {  //特定のクラスのコンストラクター  // result:本当、スタックが空の場合、それ以外の場合はfalse  公共  ブール  ISTACKMPTY ();  //効果:スタックには、上部要素として要素エレムが含まれています。  //結果:要素エレムを挿入した後のスタック。  公共  ISTACK < >  押す  エレメント );  //前提条件:スタックは空ではありません。  //効果:上部要素はスタックから削除されます。  //結果:削除後のスタック。  公共  ISTACK < >  ポップ ();  //前提条件:スタックは空ではありません。  //結果:上部要素。  公共   ();  }  公共  インターフェース  IC < >  {  公共  ブール  IsqueueEmpty ();  公共  IC < >  enqueue  エレメント );  公共  IC < >  dequeue ();  公共   ();  }  

機能的なプログラミング言語(Haskell)を介した仕様 [ 編集 | ソーステキストを編集します ]

emptystack  =   ISTACKMPTY   =  真実  ISTACKMPTY  s  バツ  XS ))  =  間違い  押す  そうです  XS  =  s  そうです  XS  ポップ  s  バツ  XS ))  =  XS   s  バツ  XS ))  =  バツ  emptyque  =   isQueueEmpty E = True
isQueueEmpty (Q xs x) = False
enqueue e xs = Q xs e
dequeue E = E
dequeue (Q (E) x) = E
dequeue (Q (Q ys y) x) = enqueue x (dequeue (Q ys y))
head E = error "Queue ist leer."
head (Q (E) x) = x
head (Q (Q ys y) x) = head (Q ys y)

よくプログラムされたADTのプロパティを努力するには、ほとんどがよく指定されたデータ構造でもあります。

  • 普遍 (実装の独立性):一度設計および実装されたADTは、あらゆるプログラムに含まれ、そこで使用できます(例:ユニットの形で)。
  • 正確な説明 (正確な仕様):実装とアプリケーションの間のインターフェイスは明確かつ完全でなければなりません。
  • シンプルさ (シンプルさ):ADTの内部実装はアプリケーションに関心がなく、ADTはメモリ自体にその表現と管理を引き継ぎます。
  • 保護性 (整合性):インターフェイスは、密閉型の限界と見なす必要があります。ユーザーは非常に正確に知っている必要があります だった ADTはそうですが、決してありません どうやって 彼はそれをします。
  • カプセル (カプセル化):ユーザーはデータの内部構造に介入することはできません。意図しないデータを削除または変更し、プログラミングエラーを作成するリスクは大幅に減少します。
  • モジュール性 (モジュール性):モジュラー原理により、明確で安全なプログラミングとプログラムパーツの簡単な交換が可能になります。トラブルシューティングの場合、個々のモジュールは非常に分離されていると表示できます。その後、すべての環境またはアプリケーションプログラムをわずかに変更することなく、広告を介して多くの改善を引き継ぐことができます。

プログラムされたオブジェクト指向の場合、オブジェクト指向のパラダイムが自然にインサートの作成をサポートするため、これらのプロパティは特に簡単に満たすことができます。広告を作成するためのもう1つのオプション(オブジェクト指向プログラミングに関連する)は、一般的なタイプです。

  • バーバラ・リスコフ、スティーブン・ジレス: 抽象データ型を使用したプログラミング 。の: Sigplanの通知 、 フライト。 9、いいえ。 4、1974、S。50–59
  • ジョン・ガッタグ: 抽象データ型とデータ構造の開発 。の: ACMの通信 、 フライト。 20、1977、いいえ。 6、S。396–404。
  • J. A. Goguen、J。W。Sutcher、E。W。Wagner: 抽象データ型の仕様、正確性、および実装に対する初期代数アプローチ 。 In:R.T。ええ(hrsg。): プログラミング方法論に関する現在の傾向 、Vol。 IV、1978、Prentice-Hall Int。
  • Hartmut Ehrig、Bernd Mahr: 代数仕様の基礎1 – 方程式と初期セマンティクス 。 Springer-Verlag、1985年
  • ルカ・カルドリ、ピーター・ウェグナー: タイプ、データの抽象化、および多型の理解について 。の: コンピューティング調査 、Vol。17、No。 4、1985年12月、pp。470–522
  • ジョンC.ミッチェル、ゴードンD.プロットキン: 抽象データ型には実存的なタイプがあります 。の: プログラミング言語ANSシステムに関するACMトランザクション 、 フライト。 10、いいえ。 3、Juli 1988、S。470–502。
  • ピーターミュラー: C ++を使用したオブジェクト指向プログラミングの紹介 ADTへの章
  • ホルヘ・マルティネス: 注文された代数構造:フロリダ大学が後援するゲインズビル会議の議事録、2月28日 – 3月3日、200 。 Kluwer Academic Publishers、Dordrecht;ボストン2002、ISBN 978-1-4020-0752-1(英語、 限られたプレビュー Google Book検索で)。
  • スケートボード、センホルツ: コンピューターサイエンスの基本的および高度なコース 。 Cornelsen、Düsseldorf1992、ISBN 3-464-57312-5。
after-content-x4