抽象化 (計算機科學)

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

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

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

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

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

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

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

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

程式設計中，抽象類別包括下列4類：

1：過程抽象：能夠引入一些新的操作；

2：資料抽象：能夠引入新的資料物件類型；

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

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

參考文獻
Barbara Liskov, John Guttag著，裘健译．程序开发原理：抽象、规格与面向对象设计．北京：电子工业出版社，2006年10月：第3-5頁。

Category:数据管理
Category:抽象
Category:软件工程
Category:面向对象的程序设计