封裝:將一堆零碎的東西封箱裝起來!
1.什么是封裝?
封裝是指將現(xiàn)實世界中存在的某個客體的屬性與行為綁定在一起,并放置在一個邏輯單元內。該邏輯單元負責將所描述的屬性隱藏起來,外界對客體內部屬性的所有訪問只能通過提供的用戶接口實現(xiàn)。這樣做既可以實現(xiàn)對客體屬性的保護作用,又可以提高軟件系統(tǒng)的可維護性。只要用戶接口不改變,任何封裝體內部的改變都不會對軟件系統(tǒng)的其他部分造成影響。結構化設計方法沒有做到客體的整體封裝,只是封裝了各個功能模塊,而每個功能模塊可以隨意地對沒有保護能力客體屬性實施操作,并且由于描述屬性的數據與行為被分割開來,所以一旦某個客體屬性的表達方式發(fā)生了變化,或某個行為效果發(fā)生了改變,就有可能對整個系統(tǒng)產生影響。
2.如何實現(xiàn)封裝?
例如:
#?定義了一個商品類型,封裝和商品有關系的數據
class?Goods:
def?__init__(self,?name,?price,?stock):
self.name?=?name
self.price?=?price
self.stock?=?stock
#封裝具體的數據到對象中:對象是通過類型來封裝具體的數據的
g1?=?Goods(“連衣裙”,?199,?120)#?將對象敏感的數據,封裝在類的內部,不讓外界直接訪問;而是通過定義的set/get方法來間接訪問內部的數據的過程,此時,就可以在set/get方法中,添加條件限制代碼!
例如:
class Person:
? ? ? ? ?def__init__(self,?name,?age):
? ? ? ? ? ? ? ? ? self.__name?=?name
? ? ? ? ? ? ? ? ? self.__age?=?age
? ? ? ? ?def set_name(self,?name):
? ? ? ? ? ? ? ? ? self.__name?=?name
? ? ? ? ?def get_name(self):
? ? ? ? ? ? ? ? ? returnself.__name
? ? ? ? ?def set_age(self,?age):
? ? ? ? ? ? ? ? ? if age?>= 0 and age?<= 100:
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.__age?=?age
? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? ? ? print("設置的年齡不合法...")
? ? ? ? def get_age(self):
? ? ? ? ? ? ? ? ? ?returnself.__age
? ? ? ? def__str__(self):
? ? ? ? ? ? ? ? ? ?return"姓名:%s;年齡:%s"%?(self.__name,self.__age)
3.封裝實現(xiàn)的步驟
1.完成一個類的定義
2.所有屬性私有化
3. 給每個屬性提供set/get方法