導入
ソフトウェア エンジニアリングにおいて、抽象型とは、一連のデータと、それが実行できる一連の操作の数学的仕様です。このタイプのデータは、データ構造が実装する必要がある仕様に対応しているため、抽象と呼ばれます。一般に、ほとんどの抽象型は再帰的な構造を記述することに注意してください。
最も使用される抽象型は、スタック、キュー、リスト、バイナリツリーです。

構造
抽象型は5 つのフィールドで構成されます。
- TA (抽象型)
- 使用済み
- 運営
- 前提条件
- 公理
これら 5 つの要素は、多くの場合、頭字語TUOPAでまとめられます。

抽象型
「TA」フィールド(抽象型) には、記述されている型の名前が含まれており、場合によっては、それが別の抽象型の拡張ではないかどうかを指定します。たとえば、スタックとは何かを説明する Stack という名前の型を作成するには「TA: Stack」と書き、それを拡張したい場合は「Extension TA: Stack」と書きます (新しい非操作操作を に割り当てることで抽象型を拡張します)。最初の仕様で定義されています)。
使用済み
「Uses」フィールドには、説明しているもので使用する抽象型が含まれています。たとえば、定義する抽象型 Pile は仕様内で抽象型Boolean を使用するため、「Uses: Boolean」と記述します。
運営
「操作」フィールドには、すべての操作のプロトタイピングが含まれます。プロトタイピングとは、名前、引数、戻り値による操作の説明を意味します。
操作はいくつかのタイプに分類されます。
- コンストラクター (定義しているタイプのオブジェクトを作成できます)。
- トランスフォーマー (オブジェクトとそのコンテンツを変更できるようにします);
- オブザーバー (オブジェクトの状態に関する情報を与える関数)。
タイプ「TA:スタック」の動作例:
作成: -> スタック
「作成」操作はコンストラクターであることに注意してください。実際、この関数はスタック オブジェクトを作成します。さらに、このスタックの作成には引数は必要ありません。これは、矢印の左側に表示がないことで示されます。

前提条件
「事前条件」フィールドには、関数が通常の動作を行うために関数の引数で尊重される条件が含まれています。ここで関数の一連の定義について説明します。
公理
「公理」フィールドには、抽象型の各操作の動作を記述する一連の公理が含まれています。それぞれの公理は真の論理命題です。
コメント付きの例: スタック
スタックは、LIFO (「後入れ先出し」) 原則を尊重した単純なデータ構造であることを思い出してください。つまり、この構造に追加したばかりの最後の要素に常にアクセスします。
| 抽象タイプ:スタック 使用法:ブール値、要素 操作: 作成する : $$ {\rightarrow} $$ スタックスタック: スタック $$ {\times } $$ 要素$$ {\rightarrow} $$ スタック上:尻尾 $$ {\rightharpoonup} $$ 要素残り: 尾 $$ {\rightharpoonup} $$ スタックisEmpty: スタック $$ {\rightarrow} $$ ブール値insertEnd: スタック $$ {\times} $$ 要素$$ {\rightarrow} $$ スタック |
ここでは、基本的なスタック操作と、スタックの最後に要素を挿入できる「insertEnd」操作を考慮します (この操作により、抽象型で再帰を表現できるようになります)。シンボル「
ここにはコンストラクターがあります。 3 つのトランスフォーマー: stack 、剰余、およびinsertEnd ;そして 2 つのオブザーバー: vertexとisEmpty 。どのスタックも「stack(p,e)」または「create()」の形式であることがわかるため、「スタック」操作はコンストラクターであると考える人もいます。
| 前提条件: p $$ {\in} $$ スタック定義済み(頂点(p)) $$ {\Rightarrow} $$ $$ {\neg} $$ isEmpty(p)定義済み(剰余(p)) $$ {\Rightarrow} $$ $$ {\neg} $$ isEmpty(p) |
これらの前提条件は、上部を「見る」ことができない、または空のスタックの残りを取得することができないという事実に対応しています。
| 公理: p $$ {\in} $$ スタック e、f $$ {\in} $$ 要素(P1) 頂点(スタック(p,e)) = e (P2) 剰余(スタック(p,e)) = p (P3) isEmpty(create()) = true (P3) isEmpty(stack(p,e)) = false (P4) insertEnd(create(),e) = stack(create(),e) (P5) insertEnd(stack(p,f),e) = stack(insertEnd(p,e),f) |
vdm | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| ソフトウェアライブラリ | 標準ライブラリ ・ネームスペース ・フレームワーク ・テンプレート・インターフェース ・プログラミングインターフェース( API ) | ||||||||
| 語彙 |
| ||||||||
| ソースコード内 |
| ||||||||
| ソフトウェア開発ツール | 開発環境• 統合開発環境( IDE ) • ドキュメントジェネレータ • バージョン管理 • モデル • パッチ • 仕様 | ||||||||
| 民間伝承 | Hello world • シンプルで愚かなままにしてください • エキゾチックなプログラミング言語 | ||||||||
| カテゴリ:ソフトウェア開発 • カテゴリ:コンピュータプログラミング | |||||||||
