抽象化 (計算機科學)

計算機科學中,抽象化(英語:Abstraction)是將資料與程序,以它的語意來呈現出它的外觀,但是隱藏起它的實作細節。抽象化是用來減少程式的複雜度,使得程式設計師可以專注在處理少數重要的部份。一個電腦系統可以分割成幾個抽象層(Abstraction layer),使得程式設計師可以將它們分開處理。

抽象與抽象層

抽象就是把一個問題或模型,以不同規則或方法所得出的不同的解(求解方法和解本身即抽象層),這些不同的解可以組合並還原成問題或模型的本身。

抽象的意義是可以忽略不是求解過程中必需的。例如要用電腦程式去模擬「人」,在描述了人的動作(飲食、思考、移動等)符合設計要求後(如可完整表達「人」在坐下時候的動作),其他「人」的細節(軀幹器官細胞活動乃至人際關係)都可以忽略,以集中設計需要的功能,並減低程序的複雜度

為了使抽象的成品(算法)不會出現問題,要注意抽象時是否漏掉重要特徵。

程式語言

在程式設計中,高級語言是對機器指令序列的抽象。高階語言的出現,使得程式的編寫得以簡化,極大提高了程式的編寫效率。隨著軟體技術的發展,元件技術進一步提升了程式抽象的級別。

另一種可取的替代方法是設計一種語言機制,允許程式師在需要的時候構建自己的抽象方法。一個通用的機制是使用過程(procedure)。通過分離過程的定義和規則,程式語言包含了兩種重要的抽象方法:參數化抽象(abstraction by parameterization)和規格化抽象(abstraction by specification)。其中:

參數化抽象是用參數替換資料特徵來進行抽象。這樣能夠歸納出模組,從而使其可以用於更多的情況。例如,可以定義一個排序抽象,既能夠實現對實數陣列的排序,又能夠實現對整型陣列的排序,或者甚至對陣列類型這類一般結構都有用。

規格化抽象是將執行細節(即模組如何實現)抽象為用戶所需求的行為(即模組做什麼)。這是從具體實現中抽象出模組,需要的僅僅是模組的實現能夠符合我們所依賴的表述形式。每當將一個過程與一個注釋(這個注釋提供了充分的資訊,是其他人不用看過程主體就能使用該過程)關聯起來,我們就會使用規格化抽象。

程式設計中,抽象類別包括下列4類:

1:過程抽象:能夠引入一些新的操作;

2:資料抽象:能夠引入新的資料物件類型;

3:反覆運算抽象:能夠反覆運算遍歷在集合中的元素,而不必顯示如何獲得元素的細節;

4:類型層次:能夠從多個單獨的資料類型中抽象成幾組相關的類型。

參考文獻

  • Barbara Liskov, John Guttag著,裘健譯.程序開發原理:抽象、規格與面向對象設計.北京:電子工業出版社,2006年10月:第3-5頁。