1. 程式人生 > >了解抽象數據類型

了解抽象數據類型

ava 操作 取反 屬於 AC nth 可能 java 重要

抽象數據類型(Abstract Data Type 簡稱ADT)是指一個數學模型以及定義在此數學模型上的一組操作。抽象數據類型需要通過固有數據類型(高級編程語言中已實現的數據類型)來實現。抽象數據類型是與表示無關的數據類型,是一個數據模型及定義在該模型上的一組運算。對一個抽象數據類型進行定義時,必須給出它的名字及各運算的運算符名,即函數名,並且規定這些函數的參數性質。一旦定義了一個抽象數據類型及具體實現,程序設計中就可以像使用基本數據類型那樣,十分方便地使用抽象數據類型。

在早期的編程語?中,?戶只能??定義?法,?所有的類型都是規定好的(例如int、boolean、String等等)。 ?現代編程語?允許?戶??定義類型對數據進?抽象,這是軟件開發中的?個巨?進步。

對數據進?抽象的核?思想就是類型是通過其對應的操作來區分的:?個整型就是你能對它進?加法和乘法的東 ?;?個布爾型就是你能對它進?取反的東?;?個字符串就是你能對它進?鏈接或者取?字符串的東?,等等。 在?定意義上,?戶在以前的編程語?上似乎已經能夠定義??的類型了,例如定義?個名叫Date的結構體,?? ?int表?天數和年份。但是真正使得抽象類型變得新穎不同的是對操作的強調:?戶不?管這個類型??的數據是 怎麽保存表?的,就好像是程序員不?管編譯器是怎麽存儲整數?樣。起作?的只是類型對應的操作。

和很多現代語??樣,在Java中內置類型和?戶定義類型之間的關系很模糊。例如在 java.lang 中的類 Integer 和 Boolean 就是內置的——Java標準中規定它們必須存在,但是它們的定義?是和?戶定義類型的? 式?樣的。另外,Java中還保留了原始類型,它們不是類和對象,例如 int 和 boolean ,?戶?法對它們進? 繼承。

對於類型,不管是內置的還是?戶定義的,都可以被分為可改變 不可變兩種。其中可改變類型的對象能夠被改 變:它們提供了改變對象內容的操作,這樣的操作執?後可以改變其他對該對象操作的返回值。所以 Date 就是 可改變的,因為你可以通過調? setMonth 操作改變 getMonth 操作的返回值。但 String 就是不可改變的, 因為它的操作符都是創建?個新的 String 對象?不是改變現有的這個。有時候?個類型會提供兩種形式,?種是可改變的?種是不可改變的。例如 StringBuilder 就是?種可改變的字符串類型。

抽象類型是通過它的操作定義的. 對於類型T來說,它的操作集合和規格說明完全定義和構造了它的特性。例如,當我們談到 List 類型時,我們並 沒有特指?個數組或者鏈接鏈表,?是?系列模糊的值——哪些對象可以是 List 類型——滿?該類型的規格說明 和操作規定,例如 get() , size() , 等等。

那麽,如何設計抽象類型呢?

設計?個抽象類型包括選擇合適的操作以及它們對應的?為,有?個重要的規則。

1.設計少量,簡單,可以組合實現強?功能的操作??設計很多復雜的操作。

2.每個操作都應該有?個被明確定義的?的,並且應該設計為對不同的數據結構有?致的?為,?不是針對某些特殊 情況。例如,或許我們不應該為 List 類型添加?個 sum 操作。因為這雖然可能對想要操作?個整數列表的?戶 有幫助,但是如果?戶想要操作?個字符串列表呢?或者?個嵌套的列表? 所有這些特殊情況都將會使得 sum 成為 ?個難以理解和使?的操作。

3.操作集合應該充分地考慮到?戶的需求,也就是說,?戶可以?這個操作集合做他們可能想做的計算。?個較好測 試?法是檢查抽象類型的每個屬性是否都能被操作集提取出來。例如,如果沒有 get 操作,我們就不能提取列表 中的元素。抽象類型的基本信息的提取也不應該特別困難。例如, size ?法對於 List 並不是必須的,因為我們 可以? get 增序遍歷整個列表,直到 get 執?失敗,但是這既不?效,也不?便。

4.抽象類型可以是通?的:例如,列表、集合,或者圖。或者它可以是適?於特定領域的:?個街道的地圖,?個員 ?數據庫,?個電話簿等等。但是?個抽象類型不能兼有上述?者的特性。被設計?來代表?個紙牌序列的 Deck 類型不應該有?個通?的 add ?法來向類型實例中添加任意對象,?如整型和字符串類型。反過來說,對於像 dealCards 這樣的只對特定領域(譯者註:紙牌遊戲)有效的?法,把它加? List 這樣的通?類型中也是沒有意義的。

毫無疑問,抽象數據類型大大的擴大了我們所能操做的變量的範圍。通過抽象數據類型,我們擁有了定義屬於自己的變量的機會,並能根據我們的所需向其中添加任何的屬性以及函數。抽象數據類型毫無疑問地大大降低了我們地編程難度,能夠更自由簡單地使用各種功能,僅僅只需要通過變量本身便能實現很多操做。抽象數據類型讓我們地編程更加得心應手,也更加地有趣。

了解抽象數據類型