分層 抽象 複雜 認知

2022-07-01 15:15:11 字數 1872 閱讀 2194

抽象與分層是電腦科學中的一種基本思想方法,是降低計算機系統複雜度的有效方法。 

抽象,本質上是一種泛化與概括的思維方式。 

在計算機中核心資源就是cpu和記憶體,我們對cpu計算過程抽象的就是函式,函式是計算過程的泛化。而對記憶體中資料的抽象就是資料結構,資料結構是資料組織方式的泛化,而物件的本質就是二者的結合,將一部分相關的資料看為乙個整體,並且繫結一系列與資料相關的函式。 

而程式設計中模組化,物件導向正是抽象這一概念的衍生。

而分層就是基於抽象來進行的,我們對底層的資料和計算過程抽象之後,底層就可以通過呼叫介面對外提供某種服務,在這個基礎上我們又可以進行更高一層的抽象,就這樣一層一層的往上構建我們就可以得到內在結構高度自動化,對外通過介面提供強大的功能的虛擬機器。

原文: 

抽象層次

抽象層次是物件導向方法中極其重要,但是又非常難以掌握的技巧。學 會站在不同的抽象層次考慮問題是建立好模型的基礎,所以筆者不能不在這裡說一些與技術無關的「廢話」。

首先,抽象層次越高,具體資訊越少,但是概括能力越強;反之,具體資訊越豐富,結果越確定,但相應的概括能力越弱。從資訊的表達能力上說,抽象層次越高表達能力越豐富,越容易理解。可能有人會對這個提出疑問,因為在人們的印象裡,越是抽象的東西越難理解,相反越具體的事物越容易認識,難道不是嗎?

筆者認為,越具體的事物越容易理解這個說法是一種誤解,因為人們所認識的事物概念都是抽象的,具象只是乙個相對的概念。比如人們會覺得一塊石頭很容易認識,因為它有顏色,有大小,有硬度。可 是你有沒有想過這些用來描述石頭的概念都是具象的還是抽象的呢?什麼叫硬度?是手摸上去的感覺?還是用它砸玻璃的結果?還是乙個數字後面跟個物理學單位?你肯定不會去想這些,但你不會感到石頭是硬的這個概念難於理解。你覺得它們很容易理解是因為經過多年的積累,這個抽象的概念被你消化和吸收了。

事實上,這個你看來很具體的硬度是你從感覺、視覺、聽覺、數字等綜合起來以後得出的乙個抽象概念。如果說它的硬度是摩氏5 級,非常具體,你卻相反不能夠很好地理解了。舉例來說,對普通人很容易理解的顏色,對盲人來說就十分「抽象」。 再舉乙個例子,同樣是長度的概念,天文學所用的光年相對於公尺、公里這些常見單位的概念要更抽象。但說太陽系距離銀河系中心大約有27000 光年,就比說這個距離是255439722759681600000 公尺要容易理解,這是因為這個數字之大已經超過人們可以通過對比來理解的地步了。

實際上,由於人腦對資訊的處理能力是有限度的,如果資訊量超過了人腦的處理能力,人就會失去對這個事物的理解能力。因此,越是具體的表達資訊量越大,越接近人腦的處理極限,人們的理解能力越是下降(這也是面向過程方法為什麼困難的原因之一)。對物件導向方法來說,這時就需要提高抽象層次,用乙個新的概念來概括一部分相關的資訊,一 旦人們像接受了光年概念一樣消化了這個新的概念,理解起來就變得容易了。同時,這個新的概念就遮蔽了(或者說封裝了)更多具體的資訊。抽象層次越高,被遮蔽的資訊也就越多,資訊量越少,也就越容易理解和處理。這就是物件導向比面向過程具有優勢的原因。讀者可以回顧一下本書開頭引用的 grady booch 的那段話,相信會有進一步的認識。

但隨之而來的另乙個問題是如果抽象層次太高,信 息量過少的話,人們實施起來又會產生新的困難——資訊量不足。因此,在物件導向的分析過程中,在適當的時候採用適當的抽象層次是十分重要的。幾乎所有使用過uml 的朋友都會覺得選擇用例的粒度是一件很困難的事,實際上用例粒度選擇的困難本質上是由於沒有找準抽象層次而產生的。

抽象有兩種方法,一種是自頂向下,另一種是自底向上。自頂向下的方法適用於讓人們從頭開始認識乙個事物。例如介紹汽車的工作原理時,從發動機、傳動裝置、變速器等較高層次的抽象概念來講就比較容易明白。如果降乙個層次,從發動機原理講起,一大部分聽眾就會開始迷惑;再降乙個層次,從熱力學原理和力學原理講起,那就更沒人能搞懂汽車是怎麼工作的了。自底向上的方法適用於在實踐中改進和提高認識。例如在實踐中發現了發動機的問題,因而改進發動機結構,甚至採用新的發動機原理,最終能夠提公升汽車的質量。

Flink API的抽象分層

flink中提供了4種不同層次的api,如下圖所示 低階api stateful stream processing 提供了對時間和狀態的細粒度控制,簡潔性和易用性較差,主要應用在對一些複雜事件的處理邏輯上。核心api datastream dataset api 主要提供了針對流資料和離線資料的處...

窮舉 分類 分層 抽象的要義

窮舉 分類 分層 抽象是我推薦的4種分析問題的方法,即可以用於需求的分析,也可以用於其它的方面。窮舉就是羅列出所有可能的情況。當知道某一種可能的時候,要舉一反三,列出所有的可能,針對問題的全集考慮解決方案。假如你考慮開發乙個庫存管理系統,有入庫單 出庫單 損溢單等3種型別的單據,有2種帳本 庫存流水...

解決複雜問題 抽象

什麼是抽象?為什麼要抽象?抽象的過程就是發現事物的本質及其規律的過程。在對事物抽象的過程中,使得我們對事物的認識更加深刻。1 能夠認識事物的本質 2 簡單易理解 3 更容易總結規律 怎麼抽象?1 學習 思考 總結 有些時候,我們所遇到的問題,以前遇到過類似的問題,或者別人遇到過類似的問題,我們只需要...