面向物件程式設計(OOP)思想小結
阿新 • • 發佈:2019-01-08
Concepts
- 類(class):對我們要解決問題的抽象,比如建造房子的藍圖;但實現機制上來講,類是根據藍圖構建而成的,儲存在記憶體中的,用來表示物件的資料。
- 物件(object):根據類構建的實體,比如根據藍圖造出來的房子;實現時,通常是複製類的資料到新的記憶體空間,有可能需要改變初始值。
- 例項(instance):物件的名字。指向物件在記憶體中儲存地址的引用(reference)變數。也就是說,例項只是某個物件的別名(alias),給某個物件建立新的例項,並不會開闢新的記憶體空間存放一個新的物件。
4 Pillars
Encapsulation
將相關的變數和函式通過某種架構組合
這樣相當於將面向過程中的變數和函式做了分類,一個類中的變數可以隨時被該類中的方法使用,並且不用作為函式引數來傳遞。因為越多的引數會使函式越難以使用,移植和維護。
Abstraction
隱藏物件內部的屬性和方法。
優點:
- 簡化介面設計:對外暴露的方法少,介面設計越簡單;
- 減少程式碼變化的影響:更新模組內部私有屬性和方法的程式碼,不會影響到模組外部適配的相容性。
Inheritance
引入樹的層級概念。從樹的根節點往下,物件越來越具體。子節點上的物件比父節點的物件更具體,是其父節點的子集,可以在父節點物件的基礎上,擁有更多針對子節點物件的方法和屬性。
這種設計方法,可以減少程式碼冗餘(redundancy),減少不一致性(inconsistency),降低程式碼的維護難度。
Polymorphism
用希臘詞根解釋,“poly” 意思是許多(many),“morph” 意為形式(form)。一句話解釋就是針對不同的資料形式提供同樣的程式介面。
例如,動物可以移動自己的位置,人可以走,狗可以爬,蛇可以爬,同時車也可以移動位置。雖然可以這樣的動作都可以定義為 move()
,但他們的移動方式都不一樣。
animal.move(x,y) human.move(x,y) dog.move(x,y) snake.move(x,y) car.move(x,y)
這種把不同類的方法按照其共性來統一命名,我們稱之為 “Polymorphism”,中文譯為多型。
優點:
- 統一方法命名
- 簡化介面設計
Written with StackEdit.