當我們談論抽象時,我們在談論什麼
來自專欄一些思考
依據詞性不同,抽象主要有兩種意思:
1:作為一個動詞(嚴格說應該是抽象化):抽取出某個實體或者非實體概念的某個或者某些屬性。
2:作為一個形容詞:與具體是反義詞,概念分為實體概念和非實體概念,實體概念在物理世界中有對應的實體,非實體概念則沒有。只有非實體概念才可以用抽象這個形容詞來描述,實體概念則不能描述,比如我可以說心靈這個非實體概念抽象,但我不能說足球這個實體概念抽象。抽象的概念不能通過實體接觸來把握,只能通過邏輯思維進行處理。
在科學和工程中我們談論的抽象通常是第一種意義,在日常生活中通常是第二種意義,在此主要分析作為動詞的抽象,即抽象化。所有抽象的主要目的都是減輕複雜度。根據對對象所抽取出的屬性的不同可以分為以下幾種。
1:黑箱化。即僅抽取出對象的輸入介面以及介面能夠接受的輸入方式、輸出結果(預期目標)、輸入輸出的關係這三個屬性,隱藏起從輸入到輸出的實現細節。例子有:
風扇就是一個黑箱,輸入介面是按鈕,介面的輸入方式是按壓,輸出結果是扇風。
編程中封裝即是一種典型的黑箱化。
複雜系統減少複雜度的基本方法:創造基本元素→組合基本元素形成複合對象→將複合對象黑箱化(命名,確定輸入介面以及輸入方式,輸出結果,輸入輸出關係)。編程語言的過程抽象和數據抽象均採用此方法,比如將求平方根的過程定義為一個函數,在使用時就不必考慮輸入的數據是如何從基本四則運算一步一步得到最終結果。電路系統的形成也是採用此方法,利用基本電子元器件構造出複雜元器件,然後將其抽象黑箱化。
相關知識見附註1和附註2
2:抽取多個事物的共有的性形成一種新事物並對新事物進行命名(即歸類),同時還需提供對新事物添加屬性的方式從而能夠通過添加特性來得到原事物。比如籃球,足球,乒乓球共性是其形狀,抽取形狀可以形成球的概念,通過對球添加不同的顏色,大小,表面花紋的屬性可以得到三類原事物。新事物和原事物的關係只能用包含/包含於來描述,而不能用組成/被組成來描述(組合體並非由組件抽象出共性所得,比如黑箱和其組件的關係就只能用組成/被組成來描述)。這種抽象的目的也是為了減輕複雜度,比如有5個事物,各自具有5個屬性,那需要掌握5個事物和25個屬性,抽象這5個事物的3個共有屬性形成新事物後只需要掌握6個事物和13個屬性,從而使知識層次化(樹狀結構),能夠從更低複雜度的層次上把握大量的事物。比如有三個大型函數,它們除了在某一步調用了不同的函數來處理某一個數據以外其他部分都相同(比如),那麼可以將這三個大型函數的共同部分寫成一個新函數,而將那一步所調用的函數所謂新函數的參數,在使用時其傳遞所需的函數即可。大部分科學定律也是從大量的現象中用這種抽象得到的。這種抽象本質上是對某個屬性的限制條件進行泛化以便更加形成具有一般性的概念,比如C語言中函數參數的取值限制為數據,在C++,Java,Python,lisp等進一步發展的語言中放寬了這個限制,函數也可以作為參數,即對取值要求進行了泛化,形成了高階函數的概念,而C語言中的函數則作為高階函數參數特化的一個概念。
3:根據目標抽取單個事物的某些屬性(黑箱是一種特例)。最常用於對現實進行建模,根據模型的目的選擇所抽取的性質,比如要對小球進行建模從而模擬小球的運動狀態,只需抽象出小球的質量,速度,加速度這幾個性質即可。
附註1:維基百科中黑箱的定義
黑箱指一個僅知道輸入輸出關係而不知道內部結構的系統或設備。與之相反的是白箱。 例子有:
- 物理學/電子工業中,指未知內部結構,只露出若干接頭的電路,如二埠網路;
- 計算機科學中,指內部工作方法不清楚的程序。(也許是閉源軟體)
- 系統工程學中指一個系統只能根據其外部表徵來推測其系統功能,而不能了解其內部詳細構造。例如中醫就是一個黑箱系統,尤其是經絡結構。
附註2:維基百科中計算機科學對抽象的定義。
https://zh.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8)
推薦閱讀:
※下雨時,跑起來就能少淋雨嗎?
※生活「肽」重要
※電梯五方通話電梯無線對講電梯出故障時如何自救
※肽百問百答【北方基因】
※花花中暑了怎麼辦?