1. 程式人生 > >面向對象編程(OOP)思想小結

面向對象編程(OOP)思想小結

prope 面向 藍圖 pil 接口 通過 節點 變化 bst

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.

面向對象編程(OOP)思想小結