今天要介紹的型別不是一種型別(驚!那今天要講甚麼?好抽象喔!)
對!就是講抽象資料型別(Abstract Data Type)!
為什麼說他不是一種真的資料型別,因為他本身並不提供另外的型別,而他只是一種概念,程式寫法的概念。
還是好模糊喔!
嗯,如果我們用物件的概念去解釋他(待物件導向單元再做解釋),就會較容易了解了。就是將資料及資料的運算方法透過一個類似模組的方式來完成,也就是說,我們可以利用模組來實作抽象資料型別。
例如:SetCurrentFontToBold() 就會比直接指定 Font 的 Attribute 來得容易許多,也不用去記每一個資料的屬性,對程式設計來說,不失是一種好的方法。
所以使用抽象資料型別的好處是:
.可以隱藏細部的實作方法
如上述所提的例子,如果字型的資料結構改變,則因為我們在程式中是以抽象型別的常是來處理,所以只要改變常式中的內部處理方式即可,對於呼叫常式的程式並不需要去異動他
.程式不容易出錯
透過抽象資料型別的另一個好處是,我們不用再去寫冗長的程式碼,也不需一一去記住該調整哪個資料欄位的屬性,該如何去設定他的值,這些細節都被封裝在抽象型別的常式中,這樣出錯的機率就可以大大的降低了。
.程式具有自我註解的能力
如上面 SetFontToBold() 的例子,這樣的程式碼,一看就知道是用來做什麼的,簡潔有力,容易理解。
.不再需要再常式間傳遞資料
當然,我們透過模組的函式呼叫也一樣可以達到同樣的效果,但是您可能需要將資料設成全域變數或者是透過參數傳遞來達成。
抽象型別是像java的interface這一類的東西嗎?
在書中所提到的,物件本身就是一種抽象的資料型別。
像我們對於物件的屬性會以 Private 的方式來做為內部運算時使用,
避免外部的程式直接存取物件的屬性資料。
而與外界溝通時,則另外建構 Public Method 來做為溝通的橋樑,
如
private m_A
Public getA() return m_A;
Public setA(v) m_A=v;
這個功用則與他的抽象資料型別的概念較為類似。