封裝的意義
1.封裝意味著什么?
用囊狀物包圍赦拘、包裝或者保護(hù)
2.一個(gè)良好的類接口能夠隱藏其所性類的內(nèi)部實(shí)現(xiàn),并向外界提供一個(gè)與類的內(nèi)部實(shí)現(xiàn)分離和區(qū)別開來(lái)的
細(xì)菌細(xì)胞膜外表面的意義在于與外界進(jìn)行感知芬沉、接觸以及發(fā)生交互作用
3.一個(gè)良好的類接口設(shè)計(jì)必須是完整的躺同,同時(shí)又不能暴露類的任何內(nèi)部實(shí)現(xiàn)
如果一個(gè)細(xì)菌的細(xì)胞膜不是封閉的,那么這種細(xì)菌肯定活不長(zhǎng)丸逸;其內(nèi)部的有機(jī)組織會(huì)迅速溢出蹋艺,它也肯定會(huì)死亡
4.一個(gè)良好的類接口會(huì)保護(hù)類的內(nèi)部實(shí)現(xiàn),以免它們?cè)馐芪唇?jīng)授權(quán)的訪問(wèn)和操作
殺滅細(xì)菌(和人類)的主要手段是制造能夠破壞細(xì)胞膜的東西.從微觀層面來(lái)說(shuō)黄刚,這包括化學(xué)制品捎谨、酶或者能夠適當(dāng)制造破孔的有機(jī)生物體(或許最終是納米機(jī)器人).而從宏觀層面來(lái)說(shuō),刀和槍都是人類長(zhǎng)久以來(lái)熱衷的武器
5.封裝是面向?qū)ο缶幊痰暮诵母拍?/p>
6.所謂面向?qū)ο筱疚ǔ6x為:數(shù)據(jù)以及操作這些數(shù)據(jù)的函數(shù)的組合涛救,補(bǔ)充-通過(guò)由一組函數(shù)構(gòu)成的接口將調(diào)用代碼與內(nèi)部數(shù)據(jù)隔離開來(lái)(由接口來(lái)負(fù)責(zé)操縱內(nèi)部數(shù)據(jù)).此觀念強(qiáng)調(diào)了兩點(diǎn),一點(diǎn)是低耦合度业扒,另一點(diǎn)是被組合起來(lái)的函數(shù)構(gòu)成了一個(gè)起保護(hù)作用的接口
7.面向?qū)ο缶褪顷P(guān)于將接口和實(shí)現(xiàn)分享的方法學(xué)检吆,只不過(guò)這種分離必須能夠改善高內(nèi)聚性和低耦合度
8.數(shù)據(jù)成員大多永遠(yuǎn)都應(yīng)當(dāng)為私有的
9.公用數(shù)據(jù)違反了封裝原則,因?yàn)樗试S調(diào)用代碼直接操縱對(duì)象的內(nèi)部信息程储,這意味著對(duì)調(diào)用代碼的高度信任
10.在現(xiàn)實(shí)當(dāng)中咧栗,很少人需要直接去操縱對(duì)象的內(nèi)部實(shí)現(xiàn)逆甜。舉個(gè)例子,很少有人需要直接操縱我的胃致板,因?yàn)槟菢铀麄兛赡芎苋菀滓徊恍⌒木透慑e(cuò)事交煞,至多他們只會(huì)通過(guò)我的公用接口去間接地操縱我的內(nèi)部,做法的好處是他們?cè)谶M(jìn)行操作之前必須首先讓我知道并得到我的認(rèn)可才行斟或,例如遞給我一瓶標(biāo)有"喝掉我"字樣的液體素征,那么我可以決定是喝了它,還是用它來(lái)洗頭或洗車萝挤,根據(jù)自己的感覺(jué)和判斷.當(dāng)然御毅,有些人的確有資格直接操作我的"內(nèi)部",例如外科醫(yī)生怜珍,只不過(guò)即使如此:這種情況也很少見(jiàn)我至少能夠選擇是否愿意接受手術(shù)我至少能夠選擇我高度信任的醫(yī)生.
Python封裝實(shí)現(xiàn)的步驟:
定義類型端蛆,封裝零散數(shù)據(jù)【抽象的屬性】
[使用__slots__屬性,限制當(dāng)前類的屬性列表à為了代碼的統(tǒng)一性]
所有屬性私有化【屬性使用雙下劃綫開頭酥泛,外界就不能直接訪問(wèn)這樣的屬性了】
給每個(gè)屬性提供set/get方法今豆,在方法中添加限制條件
高級(jí)封裝
使用@property和@get_method.setter注解,來(lái)注釋set/get方法柔袁,隱藏set/get方法的實(shí)現(xiàn)呆躲,讓方法的使用方式和屬性一致
偽方法重載:python中,默認(rèn)不提供方法重載捶索,但是在高級(jí)封裝的過(guò)程中插掂,又出現(xiàn)了類似方法重載的代碼語(yǔ)法,所以~稱之為偽方法重載腥例。
對(duì)方法的封裝
在封裝的過(guò)程中辅甥,除了封裝私有屬性,還可以針對(duì)一些底層的操作方法進(jìn)行私有化燎竖,將方法封裝在類的內(nèi)部璃弄,通過(guò)提供的一個(gè)公共方法來(lái)控制該方法的訪問(wèn)權(quán)限