首頁>科技>

抽象資料型別英文名叫( Abstract Data Type ),這裡有兩個關鍵詞,一個叫“資料型別”,一個叫“抽象”,它們分別是什麼意思呢?

資料型別,它包含了兩個東西,一個是“資料物件集”,就是我們說的“是什麼東西”,第二個是“資料集合相關聯的操作集”。這就好比,不能單純講怎麼去處理圖書,我們是要對這些圖書進行操作的。這兩件事情:圖書的擺放,對圖書的操作,是緊密結合在一起的。

這兩個東西在C語言裡是獨立處理的,但是在一些面向物件的語言裡邊,比如C++、Java,你就會發現,它們很好的為資料型別專門設計了一種機制,就是一個“類”,把這個資料集跟它相關的操作集封裝在一個類裡面。

那再說什麼是抽象呢?

抽象,抽象的意思就是“不具體”,就是說,描述資料型別的方法是不依賴於具體的實現的,對一個數據型別的描述,它跟

存放資料的機器無關跟資料儲存的物理結構無關實現操作的演算法和程式語言皆無關

總體來說,我們只描述資料物件集和相關的操作集"是什麼",我們不關心“它是怎麼做到的”這個問題。

舉個例子,關於“矩陣”的抽象資料型別的定義。

圖片首先我們要給這個抽象資料型別一個名稱叫“矩陣”,然後我們要描述一下它的資料物件集,一個 NM 的矩陣,是由 NM 個矩陣的元素構成的,我們把這個元素描述成一個三元組 a , i , j ,其中 a 是這個矩陣元素的值,同時我們還需要知道這個矩陣元素在矩陣裡面所處的位置,就是它的行號 i 和列號 j ,就這樣描述了一個數據的物件集,相關聯的操作集有很多很多(如下圖)。

我們來看一下,為什麼這個就叫做“抽象”的表示呢?

首先我們來看,在描述資料物件集的時候,說a是矩陣元素的值,那這個值是float?還是double?還是int?我們在這個抽象資料型別中描述是不關心的。

相應地,當需要對它的元素值進行操作的時候,我們返回的也是ElementType,是一個通用的元素型別,我在實現這個矩陣相關的所有函式的時候,我在頭上寫一個define,你需要什麼,我就把它define(定義)成什麼樣子。

這樣的話,你實現的這些函式是跟“你那個矩陣元素到底是哪種型別”是沒有關係的,哪種型別都是可以運算的。

這就避免了你對int實現了一遍,下一次矩陣變成 double 型別的,結果你又對 double ……難道重新寫一遍嗎?當然你說我可以直接用一個 replace (替換),我把所有的int替換成 double 。

另外一個呢,像這個矩陣,我們只是說這是一個 M*N 的矩陣,至於在程式裡面它是怎樣一個存法?我們是用二維陣列去存它 ?還是一維陣列 ?還是用連結串列 ?這個我們在抽象資料型別定義的時候,都是不關心的。

我不管它是怎麼實現的,我只是說:我要實現的是一個矩陣 。再比如說上面圖片中的 Add() 函式 ,如果它們可以相加的話,我要返回它們的和,那我可沒說,在我算這個矩陣加法的時候,到底是先按行加呢 ?還是先按列加呢 ?我到底是用什麼語言去實現這個函式呢 ?統統不管,這就是所謂的抽象。

2
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 2億人圍觀!22歲何同學採訪蘋果 CEO