1. 程式人生 > >面向物件程式設計(OOP)思想小結

面向物件程式設計(OOP)思想小結

Concepts

  • 類(class):對我們要解決問題的抽象,比如建造房子的藍圖;但實現機制上來講,類是根據藍圖構建而成的,儲存在記憶體中的,用來表示物件的資料
  • 物件(object):根據類構建的實體,比如根據藍圖造出來的房子;實現時,通常是複製類的資料到新的記憶體空間,有可能需要改變初始值。
  • 例項(instance):物件的名字。指向物件在記憶體中儲存地址的引用(reference)變數。也就是說,例項只是某個物件的別名(alias),給某個物件建立新的例項,並不會開闢新的記憶體空間存放一個新的物件。

4 Pillars

Encapsulation

將相關的變數和函式通過某種架構組合

到一起,構成物件的類;此時該類的變數被稱為屬性(Property),函式被稱為方法(Method)。

這樣相當於將面向過程中的變數和函式做了分類,一個類中的變數可以隨時被該類中的方法使用,並且不用作為函式引數來傳遞。因為越多的引數會使函式越難以使用,移植和維護。

Abstraction

隱藏物件內部的屬性和方法。

優點:

  1. 簡化介面設計:對外暴露的方法少,介面設計越簡單;
  2. 減少程式碼變化的影響:更新模組內部私有屬性和方法的程式碼,不會影響到模組外部適配的相容性。

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”,中文譯為多型。

優點:

  1. 統一方法命名
  2. 簡化介面設計

Written with StackEdit.