## 連載:面向對象葵花寶典:思想、技巧與實踐(10) - “抽象” 詳解
抽象的中文概念非常形象,簡單來說就是“抽取出來比較像的部分”。
?
那么,在面向對象的領域里,抽取什么東西比較像的部分?
?
還記得前面給類下的定義么?我們一起來回顧一下:類就是一組相似事物的統稱。
再結合我們對象的定義:對象就是一個具體的類,一個真實存在的類。
我們就很容易發現了抽象的詳細含義:抽取多個對象或者類中比較像的部分。
?
?
?
注:
史派克:《貓和老鼠》中的斗牛犬
?
這里的抽象分為兩個層次:
**第一個層次:對象?抽象成?類。**
例如奧巴馬和梅西抽象成“人”,這一層的抽象主要是將“屬性類似”的對象抽取成類。
注意這里的屬性類似是指屬性類別一致,而屬性的取值是不一樣的。例如如果將“奧巴馬”和“梅西”都抽象成“人”,那么其屬性有身高、體重、性別、年齡等,但“奧巴馬”和“梅西”的這些屬性取值肯定是不同的。
?
**第二個層次(或更高層次):將?類?抽象成超類**(或者說父類,其實就是更高一級的類),
例如人和豬抽象成“動物”,這一層的抽象主要是將“行為類似”的類抽象成父類。
注意這里是“行為類似”,而不是第一層抽象的那樣“屬性類似”,因為在面向對象領域,行為一致的話就認為是同一類的,當然也不能是完全不同,完全不同的話就沒有相似點,也就無法抽象成類了,所以這一層抽象的重點是“相似”。
?
實際應用中,抽象的層次是不限的,根據業務的需要,或者不同的觀察角度,可以抽象出很多層。
?
**【抽象的作用】**
抽象并不是面向對象領域特有的概念和方法,在人類的科學研究中,抽象是再常見不過的技術了:生物學將豬馬牛羊等生物抽象為“動物”,將花草樹木等抽象為“植物”,醫學將心肝脾肺腎抽象為“內臟”,化學將碳氫氧氮等抽象為“元素”,物理學上將地球、火星、水星等抽象為“行星”。。。。。。等等。
?
又比如我們的高中學習課程,也抽象出“語文、數學、物理、化學”等學科,我們的大學課程,又分為了幾十上百個專業。
?
在人類的科學研究,以及日常生活和學習中,抽象最主要的作用是“劃分類別”,而劃分類別的主要目的其實還是“隔離關注點,降低復雜度”。因為這個世界太復雜了,復雜到一個人不可能同時關注所有的內容。心理學上的研究證實,人同時能關注的事務不超過?7+/-2個。可以想象,如果沒有抽象分類,我們將面對一個混沌的世界,同時關注如此多的內容,即使是天才,估計也要崩潰。
?
在面向對象領域,抽象也不例外。抽象的主要作用也是劃分類別,所以,**抽象是面向對象領域里面發現類的主要方法**
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版