共找到3條詞條名為ADT的結果 展開
ADT
數學模型
抽象數據類型(Abstract Data Type,ADT)是描述數據結構的一種理論工具,其目的是使人們能夠獨立於程序的實現細節來理解數據結構的特性。抽象數據類型的定義取決於它的一組邏輯特性,而與計算機內部如何表示無關。
抽據類型(,)計算科具類似類據構模型;具類似語義程序設計語言的數據類型。抽象數據類型是間接定義的,通過其上的可執行的操作以及這些操作的效果的數學約束(與可能的代價)。
例,抽堆棧(stack)由3個操作定義:推入push,彈出pop(接受約束:每次彈出返回的是最新被推入且沒有被彈出的數據,也就是後進先出),查看堆棧頂端數據peek。當分析使用堆棧演演算法的效率,所有這3個操作用時相同,無論堆棧中包含多少項數據;並且對每項數據棧使用了常量大小的存儲。
抽據類型()純粹論,簡化描述抽算,類評價據構,形式描述程序設計語言類型系統。據類型據構,程序設計語言式;形式規範語言描述。模塊():模塊操常式(),註釋描述約束。
在編程語言(或庫)和教科書中,常見的幾個抽象數據類型如下:
• 關聯數組
• 複數
• 容器
• 雙端隊列
• 列表
• Multimap
• 優先隊列
• 隊列
• 集合
• 堆棧
• 字元串
• 樹
實現於程序時,抽象數據類型只顯現出其介面,並將實現加以隱藏。用戶只需關心它的介面,而不是如何實現。未來更可以改變實現的方式。(其支持信息隱藏原理,或保護程序免受變化的衝擊。)
抽象數據類型的強處在於對用戶隱藏了實現細節,僅公開其介面。這表示抽象數據類型可以用各種方法來實現,只要遵循其介面,就不會影響到用戶。
在抽象數據類型和數據結構之間,有一個實現上的微妙差別。例如,列表的抽象數據類型可以數組為基礎、或者使用鏈表來實現。列表即是一種具良好運算(加入元素、移除元素等等)定義的抽象數據類型。鏈表是以指針為基礎的數據結構,且可用來創建一個列表。鏈表常用於列表的抽象數據類型。
從實現中分離出介面,並不表示用戶不該知道實現的方法,而是用戶不能依賴於實現細節。例如,一個抽象數據類型可以用腳本語言創建,或其它可以被反編譯的語言(如C語言)。即使用戶可發現實現的方法,只要所有客戶端程序遵循該介面,且改變實現方式時不會產生影響,那就仍是抽象數據類型。
抽象數據結構即根據所要運算的數據以及其計算複雜性所定義的抽象存儲區,而不關心具體的數據結構的實現。
就實現高效率的演演算法而言,對數據結構的選擇相當重要。抽象數據結構的選擇,決定了高效率的演演算法的設計,和估計其計算複雜性。
這個概念與編程語言理論中所使用的抽象數據類型非常接近,大致上抽象數據結構和抽象數據類型的名稱,和具體的數據結構的名稱一致。
一部分抽象數據類型在程序設計中相當普遍且實用,所以在某些編程語言中,成為原生類型、或加進標準庫中。例如,Perl 的數組可以用列表或雙端隊列之類的抽象數據類型來實現,散列表也可以用 Map 或 Table 來做。C++ 標準庫和 Java 庫也提供了列表、堆棧、隊列、Map、優先權隊列和字元串。
有理數(可以 a/b 格式表示的數,且 a 和 b 都是整數)本來是不能在電腦中表示出來。不過可以合理的抽象數據類型來定義,如下。
構造:使用兩個整數 a 與 b 創建實體,其中 a 為分子,b 為分母。
運算:加法、減法、乘法、除法、乘除、比較、約分,轉成實數(浮點數)。
ADT[數學模型]
堆棧的抽象數據類型介面,以C語法編寫:
抽象數據類型可以如下方式使用:
上述堆棧的抽象數據類型,一開始可以使用數組來實現,然後改用鏈表,而不會傷到任何用戶的代碼。有多少方法可以實現抽象數據類型,取決於編程語言。例如,上述示例可使用C 編寫一個結構,以及隨同的一組數據結構,可使用數組或鏈表來存放記錄;當構造函數函數返回一個抽象句柄時,就對用戶隱藏了真實的實現過程。
• 抽象化
抽象數據類型是一個數學模型以及定義在其上的一組操作組成,因此,抽象數據類型一般通過數據對象、數據關係以及基本操作來定義,即抽象數據類型三要素是(D,R,P)。
ADT抽象數據類型名{
數據對象:<數據對象的定義>
數據關係:<數據關係的定義>
基本操作:<基本操作的定義>
} ADT抽象數據類型名
其中基本操作的定義格式為:
基本操作名(參數表)
初始條件:<初始條件描述>
操作結果:<操作結果描述>
抽象數據類型的特徵主要體現在以下幾個方面:
數據抽象:用ADT描述程序處理的實體時,強調的是其本質的特徵、其所能完成的功能以及它和外部用戶的介面(即外界使用它的方法)。
數據分裝:將實體的外部特性和其內部實現細節分離,並且對外部用戶隱藏其內部實現細節,它包含兩層含義:
①將數據和其行為結合在一起,形成一個不可分割的獨立單位;
②信息隱藏,即儘可能隱藏數據內部細節,只留有限的對外介面形成一個邊界,與外部發生聯繫。封裝的原則使得軟體錯誤能夠局部化,大大降低排錯的難度,便於軟體的維護。
繼承性。數據封裝使得一個類型可以擁有一般類型的數據和行為,即對一般類型的繼承。若特殊類型從多個一般類型中繼承相關的數據和行為,則為多繼承。
多態性。多態性是指在一般類型中定義的數據或行為被特殊類型繼承后,具有不同的數據類型或呈現出不同的行為。例如,“蘋果”是“水果”的子類,它可以有“水果”的一般“吃”法,但其本身還可以有別的多種“吃法”。
註:“抽象”的意義在於數據類型的數學特性,其數學特性和具體的計算機或語言無關。