面向對象之封裝

組合:安全

定義:什麼叫組合,多個對象放在一塊兒稱爲組合。函數

實現:在程序中,一個對象將另外一個對象做爲本身的屬性。(類外部經過對象去添加屬性:obj.name=’新名字’,這個屬性會被添加到對象,將‘新名字’換成另外一個對象,就將另外一個對象的全部屬性,組合到obj中)spa

 

做用:組合也能夠下降代碼冗餘。對象

 

面向對象三大特徵之一封裝:接口

封裝不是真正意義上的隱藏,封裝的真諦在於明確區份內外。變量

1.什麼是封裝:封裝是指在類中屬性被隱藏,可是對外部提供訪問接口。原理

在面向對象中指的是將屬性和方法封裝起來。語法

2.爲何要封裝:程序

  1. 提升安全性。添加方法,設置邏輯驗證,獲取被封裝的數據屬性。
  2. 封裝是爲了明確區份內部和外部。

3.隔離複雜度。指封裝方法的做用。方法

3.如何定義封裝:在定義一個類時,在屬性或方法名稱前,加上兩個下滑線,就能夠將其設置爲私有的(封裝)。類中封裝後的屬性,是能夠在類中經過類名(或對象名).__被封裝屬性名被直接訪問的,可是外部是沒法直接訪問的。(能夠經過接口訪問,和強行訪問obj._A__name

 

4.封裝的實現原理與查找:

原理:

 

在類A中定義的(__name=’egon’、或者def __func():)屬性名稱在類的定義階段發生了轉變,變成了_A__name_A__func,因此致使外部沒法直接經過對象名.原名去訪問(可是能夠經過對象名.改變後的名字去訪問)

這種操做並非嚴格意義上的限制外部訪問,僅僅是一種語法上的變形,主要用來限制外部直接訪問。

查找方式:

類中:類名.__屬性名(A.__name)或者self.__屬性名(self.__name

類外:對象名._類名__屬性名(obj._A__name)

      類名._類名__屬性名(注意:此時該屬性是定義在類中的變量,若是是方法還須要手動傳入對象)

 

  1. 封裝數據與封裝方法的做用:

A.封裝數據的做用:將數據隱藏起來不是目的,隱藏起來而後對外提供操做接口,咱們能夠在接口添加對該數據操做的限制。一遍完成數據屬性操做的嚴格控制。

B.封裝方法的做用:目的是隔離複雜度(如取款過程,具體步驟爲:插卡、認證、取款、打印帳單,可是咱們只須要知道取款功能便可,將其餘方封裝,而且隱藏後放到取款函數中調用)

相關文章
相關標籤/搜索