日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面向对象编程的两顶帽子

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象编程的两顶帽子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
從傳統(tǒng)的面向過程的模式,到學(xué)習(xí)掌握面向?qū)ο缶幊痰倪^程中,總是有些思想觀念難于轉(zhuǎn)變,面向?qū)ο?#xff0c;更多的是思維的方式,而不是使用方法。越是深入的學(xué)習(xí),越感到面向?qū)ο蠹夹g(shù)的博大精深,最近有一些心得總結(jié)一下。?

????在面向?qū)ο缶幊讨?#xff0c;套用重構(gòu)的思想,也使用兩頂帽子,來達(dá)成目的。

????重構(gòu)的兩頂帽子,指修改及新增功能兩頂帽子,在新增功能時(shí),不改變?nèi)魏卧瓉淼拇a,也就是戴上新增功能的帽子,如果發(fā)現(xiàn)原來的代碼有問題,就戴上重構(gòu)的帽子,而不增加或改變?cè)写a執(zhí)行的功能及接口。那么面向?qū)ο缶幊痰膬身斆弊邮鞘裁茨?#xff1f;?
1.什么是對(duì)象編程的兩頂帽子??
????一個(gè)軟件的目的是為了解決一個(gè)或一些問題,就有了需求和實(shí)現(xiàn),在面向?qū)ο缶幊讨?#xff0c;表現(xiàn)為一個(gè)個(gè)的類或是對(duì)象,相互協(xié)作,調(diào)用,通信。在這個(gè)過程當(dāng)中,簡(jiǎn)單來說就是使用和被使用兩種關(guān)系。?

????一個(gè)對(duì)象總會(huì)表現(xiàn)出兩種形式,它自身,及它的接口。或者說是它的本體與表象。本體是對(duì)象自身的結(jié)構(gòu)及構(gòu)成,表象是它的接口,與其它對(duì)象的交互或是表現(xiàn)。?
那么,當(dāng)我們關(guān)注的是對(duì)象的自身還是接口的時(shí)候,就需要戴上不同的帽子。?
有哪些帽子可戴呢?我們把一個(gè)對(duì)象分成兩部分,一是接口,一是實(shí)現(xiàn),接口是對(duì)象對(duì)外部的表現(xiàn),實(shí)現(xiàn)是內(nèi)部分運(yùn)行及處理機(jī)制,所以就有了這兩頂帽子。?

為什么會(huì)是兩頂而不是三頂四頂?從認(rèn)識(shí)事物來看,二分法很容易理解和體會(huì),就象白和黑,好和壞一樣,當(dāng)關(guān)注接口時(shí),根本不用想如何實(shí)現(xiàn),會(huì)不會(huì)有實(shí)現(xiàn)的困難等,關(guān)注實(shí)現(xiàn)時(shí),也不用考慮需不需要更多的功能,要不要改個(gè)名稱,加個(gè)參數(shù)等情況,只要專注于實(shí)現(xiàn)此接口的功能即可。?
之所以要這么做,是因?yàn)榻涌诤蛯?shí)現(xiàn)是對(duì)象的一體兩面,這兩個(gè)因素互相影響而形成一個(gè)完整的整體。接口的改變必定導(dǎo)致實(shí)現(xiàn)的改變,實(shí)現(xiàn)的改變有可能會(huì)影響接口。把它分開來,減少這種相互影響。?
如何戴這兩頂帽子?當(dāng)然不能同時(shí)戴,先戴實(shí)現(xiàn)的帽子么?也不可能,沒有接口你實(shí)現(xiàn)什么呢?一開始要戴上接口這頂帽子,然后去實(shí)現(xiàn)它,在實(shí)現(xiàn)當(dāng)中,你會(huì)發(fā)現(xiàn)實(shí)現(xiàn)的代碼需要和更多的其它對(duì)象交互,沒關(guān)系,就當(dāng)它于經(jīng)存在了,當(dāng)你完成編譯時(shí),你自然會(huì)發(fā)現(xiàn)通不過,通過編譯器的提示又戴上了接口的帽子,如此交替反復(fù)。?
戴上帽子后,干什么呢??
帽子是一種角色的象征,而不是做事的方式,因?yàn)樵诰幋a的時(shí)候,寫接口和寫實(shí)現(xiàn)都是在寫代碼,做事方式一樣,但是想法不同。?
當(dāng)你戴上接口的帽子時(shí),你就是一個(gè)使用者,從客戶的角度來考慮問題,把你當(dāng)前處理的對(duì)象當(dāng)做是你的供應(yīng)商,你就是一個(gè)挑剔的客戶。?
我們從自然界來理解這個(gè)問題,一個(gè)對(duì)象就是一個(gè)物體,這個(gè)對(duì)象之所以是這樣,并不是因?yàn)樗旧黹L(zhǎng)的是這樣,而是因?yàn)橹車h(huán)境的影響才會(huì)成為這樣,也就是接口部分是由于外界的需要而形成的,可以看成它不屬于對(duì)象自身,而是由它的客戶擁有,對(duì)象自身?yè)碛械氖顷P(guān)于接口的實(shí)現(xiàn),它為了向外界提供所需要的接口,不得不在內(nèi)部進(jìn)行演化,來實(shí)現(xiàn)這種接口。?

當(dāng)戴上實(shí)現(xiàn)的帽子時(shí),你就變成了那個(gè)供應(yīng)商,面對(duì)著挑剔的客戶,也就是剛才戴著接口的帽子的那個(gè)你,你就想著如何去應(yīng)付它。來滿足他的要求。

這種方式和設(shè)計(jì)模式有什么關(guān)系?上面所說的接口,是指一個(gè)類的方法,屬性,事件等,是細(xì)粒度的接口,實(shí)現(xiàn),是指對(duì)這個(gè)類的方法,屬性,事件等的實(shí)現(xiàn),不是指類一級(jí)的實(shí)現(xiàn)。是我在編程過程中,對(duì)細(xì)部處理的一些想法。當(dāng)然這種方法放大了以后,到設(shè)計(jì)類及類間關(guān)系這一級(jí),實(shí)現(xiàn)就變得次要了,關(guān)心更多的是接口。?
模式的定義(Alexander):每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數(shù)次地使用那些已有的解決方案,無需在重復(fù)相同的工作。?
而設(shè)計(jì)模式,指的是在軟件開發(fā)活動(dòng)中的模式。是軟件設(shè)計(jì)的模式,一般說來,一個(gè)設(shè)計(jì)模式是多個(gè)類相互協(xié)作的結(jié)果,一個(gè)設(shè)計(jì)模式的實(shí)現(xiàn)就是一個(gè)設(shè)計(jì),而不是設(shè)計(jì)的實(shí)現(xiàn)。一個(gè)模式可以有N個(gè)設(shè)計(jì),而每一個(gè)設(shè)計(jì),又可以有N種實(shí)現(xiàn)。所以兩頂帽子,描述的是面對(duì)一個(gè)設(shè)計(jì),如何去實(shí)現(xiàn)它的問題。?

和TDD有什么關(guān)系?事實(shí)上,這兩頂帽子是學(xué)習(xí)TDD的一種理解。TDD通過測(cè)試來驅(qū)動(dòng)開發(fā),由測(cè)試來保證重構(gòu),是一套完善的機(jī)制和方法論。結(jié)合其它的XP思想,形成一整個(gè)XP的開發(fā)過程模式,從這一點(diǎn)可以看出老外高手思想、邏輯體系的嚴(yán)明。TDD的測(cè)試就是接口的帽子,為了通過測(cè)試寫的代碼就是實(shí)現(xiàn)的帽子,但不同點(diǎn)在于,測(cè)試驅(qū)動(dòng)的是整個(gè)的開發(fā),包括設(shè)計(jì)及實(shí)現(xiàn),重構(gòu)等過程,是一個(gè)大的框架。?
當(dāng)然,如果不寫測(cè)試,或測(cè)試代碼不能完全覆蓋的情況下,也可以戴這兩頂帽子,比如私有方法,對(duì)一個(gè)類的內(nèi)部來說,它仍然是使用它的方法的一個(gè)接口。?
通過戴這兩頂帽子,能改善接口的易用性,穩(wěn)定性及偶合性。因?yàn)樵趯懨恳粋€(gè)接口的時(shí)候,都是站在使用者的角度來考慮的,這時(shí)候關(guān)注的是調(diào)用者使用的方便,從小處著眼,比如一個(gè)私有方法,我們會(huì)關(guān)注它起什么名字,準(zhǔn)備給它傳什么參數(shù),需要返回什么值等,而在對(duì)此方法的實(shí)現(xiàn)里,關(guān)注怎么把這個(gè)方法實(shí)現(xiàn)得更好。再大一點(diǎn),到類級(jí),再大一點(diǎn),到一組協(xié)作的類,再大一點(diǎn),到組件,模塊等,原理都是一樣的。

總結(jié)

以上是生活随笔為你收集整理的面向对象编程的两顶帽子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。