一.數據類型
先看看為什么會有不同的數據類型呢?很簡單,很多東西不能一概而論,而是需要更精確的划分。計算機計算1+1並不需要多么大的空間,但是計算10000000000+1000000000就得需要有個比較大的空間來放。還有有時候會計算小數,小數的位數不一樣,需要的空間也就不一樣。數字1和字母a也需要區分啊,於是開發者就想出了“數據類型”這一招,用來描述不同的數據的集合。
我記得最早接觸的數據類型就是int了。當初一個int a;就把我看得神魂顛倒,不知所以。像這種類型,就是一個基本的數據類型。以前總以為數據類型就是一個描述數據到底是什么玩意兒的東東,現在再去看,倒是有點兒淺了。數據類型學術點呢,是一個值的集合和定義在這個值集合的一組操作的總稱。一種數據類型也可以看成是一種已經實現了的“數據結構”。
按“值”是否可分解,將其分為兩類:
1.原子類型:其值不可分解,通常由語言直接提供,像C++中的int,float,double等等。
2.結構類型:其值可以分解為若干部分(分量),是程序員自定義的,比如結構體,類等等。
ps:對於什么是“原子”,經常會看到什么“原子操作”,“原子類型”,一般就是指不可再分的。
二.抽象的數據類型
抽象數據類型(abstract data type,ADT)只是一個數學模型以及定義在模型上的一組操作。通常是對數據的抽象,定義了數據的取值范圍以及對數據操作的集合。
其實,數據類型和抽象數據類型可以看成一種概念。比如,各種計算機都擁有的整數類型就是一個抽象數據類型,盡管實現方法不同,但他們的數學特性相同。
抽象數據類型的特征是實現與操作分離,從而實現封裝。
看到有人舉出了“超級瑪麗”例子,覺得寫得很不錯,如下:
就像“超級瑪麗”這個經典的任天堂游戲,里面的游戲主角是馬里奧,我們給他定義了基本操作,前進、后退、跳、打子彈等。這就是一個抽象數據類型,定義了一個數據對象、對象中各元素之間的關系及對數據元素的操作。至於,到底是哪些操作,這只能由設計者根據實際需要來定。像馬里奧可能開始只能走和跳,后來發現應該增加一種打子彈的操作,再后來又有了按住打子彈鍵后前進就有跑的操作。這都是根據實際情況來定的。
事實上,抽象數據類型體現了程序設計中問題分解和信息隱藏的特征。它把問題分解為多個規模較小且容易處理的問題,然后把每個功能模塊的實現為一個獨立單元,通過一次或多次調用來實現整個問題。
