面向对象编程的两顶帽子
生活随笔
收集整理的這篇文章主要介紹了
面向对象编程的两顶帽子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從傳統的面向過程的模式,到學習掌握面向對象編程的過程中,總是有些思想觀念難于轉變,面向對象,更多的是思維的方式,而不是使用方法。越是深入的學習,越感到面向對象技術的博大精深,最近有一些心得總結一下。?
????在面向對象編程中,套用重構的思想,也使用兩頂帽子,來達成目的。
????重構的兩頂帽子,指修改及新增功能兩頂帽子,在新增功能時,不改變任何原來的代碼,也就是戴上新增功能的帽子,如果發現原來的代碼有問題,就戴上重構的帽子,而不增加或改變原有代碼執行的功能及接口。那么面向對象編程的兩頂帽子是什么呢??
1.什么是對象編程的兩頂帽子??
????一個軟件的目的是為了解決一個或一些問題,就有了需求和實現,在面向對象編程中,表現為一個個的類或是對象,相互協作,調用,通信。在這個過程當中,簡單來說就是使用和被使用兩種關系。?
????一個對象總會表現出兩種形式,它自身,及它的接口。或者說是它的本體與表象。本體是對象自身的結構及構成,表象是它的接口,與其它對象的交互或是表現。?
那么,當我們關注的是對象的自身還是接口的時候,就需要戴上不同的帽子。?
有哪些帽子可戴呢?我們把一個對象分成兩部分,一是接口,一是實現,接口是對象對外部的表現,實現是內部分運行及處理機制,所以就有了這兩頂帽子。?
為什么會是兩頂而不是三頂四頂?從認識事物來看,二分法很容易理解和體會,就象白和黑,好和壞一樣,當關注接口時,根本不用想如何實現,會不會有實現的困難等,關注實現時,也不用考慮需不需要更多的功能,要不要改個名稱,加個參數等情況,只要專注于實現此接口的功能即可。?
之所以要這么做,是因為接口和實現是對象的一體兩面,這兩個因素互相影響而形成一個完整的整體。接口的改變必定導致實現的改變,實現的改變有可能會影響接口。把它分開來,減少這種相互影響。?
如何戴這兩頂帽子?當然不能同時戴,先戴實現的帽子么?也不可能,沒有接口你實現什么呢?一開始要戴上接口這頂帽子,然后去實現它,在實現當中,你會發現實現的代碼需要和更多的其它對象交互,沒關系,就當它于經存在了,當你完成編譯時,你自然會發現通不過,通過編譯器的提示又戴上了接口的帽子,如此交替反復。?
戴上帽子后,干什么呢??
帽子是一種角色的象征,而不是做事的方式,因為在編碼的時候,寫接口和寫實現都是在寫代碼,做事方式一樣,但是想法不同。?
當你戴上接口的帽子時,你就是一個使用者,從客戶的角度來考慮問題,把你當前處理的對象當做是你的供應商,你就是一個挑剔的客戶。?
我們從自然界來理解這個問題,一個對象就是一個物體,這個對象之所以是這樣,并不是因為它本身長的是這樣,而是因為周圍環境的影響才會成為這樣,也就是接口部分是由于外界的需要而形成的,可以看成它不屬于對象自身,而是由它的客戶擁有,對象自身擁有的是關于接口的實現,它為了向外界提供所需要的接口,不得不在內部進行演化,來實現這種接口。?
當戴上實現的帽子時,你就變成了那個供應商,面對著挑剔的客戶,也就是剛才戴著接口的帽子的那個你,你就想著如何去應付它。來滿足他的要求。
這種方式和設計模式有什么關系?上面所說的接口,是指一個類的方法,屬性,事件等,是細粒度的接口,實現,是指對這個類的方法,屬性,事件等的實現,不是指類一級的實現。是我在編程過程中,對細部處理的一些想法。當然這種方法放大了以后,到設計類及類間關系這一級,實現就變得次要了,關心更多的是接口。?
模式的定義(Alexander):每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。?
而設計模式,指的是在軟件開發活動中的模式。是軟件設計的模式,一般說來,一個設計模式是多個類相互協作的結果,一個設計模式的實現就是一個設計,而不是設計的實現。一個模式可以有N個設計,而每一個設計,又可以有N種實現。所以兩頂帽子,描述的是面對一個設計,如何去實現它的問題。?
和TDD有什么關系?事實上,這兩頂帽子是學習TDD的一種理解。TDD通過測試來驅動開發,由測試來保證重構,是一套完善的機制和方法論。結合其它的XP思想,形成一整個XP的開發過程模式,從這一點可以看出老外高手思想、邏輯體系的嚴明。TDD的測試就是接口的帽子,為了通過測試寫的代碼就是實現的帽子,但不同點在于,測試驅動的是整個的開發,包括設計及實現,重構等過程,是一個大的框架。?
當然,如果不寫測試,或測試代碼不能完全覆蓋的情況下,也可以戴這兩頂帽子,比如私有方法,對一個類的內部來說,它仍然是使用它的方法的一個接口。?
通過戴這兩頂帽子,能改善接口的易用性,穩定性及偶合性。因為在寫每一個接口的時候,都是站在使用者的角度來考慮的,這時候關注的是調用者使用的方便,從小處著眼,比如一個私有方法,我們會關注它起什么名字,準備給它傳什么參數,需要返回什么值等,而在對此方法的實現里,關注怎么把這個方法實現得更好。再大一點,到類級,再大一點,到一組協作的類,再大一點,到組件,模塊等,原理都是一樣的。
????在面向對象編程中,套用重構的思想,也使用兩頂帽子,來達成目的。
????重構的兩頂帽子,指修改及新增功能兩頂帽子,在新增功能時,不改變任何原來的代碼,也就是戴上新增功能的帽子,如果發現原來的代碼有問題,就戴上重構的帽子,而不增加或改變原有代碼執行的功能及接口。那么面向對象編程的兩頂帽子是什么呢??
1.什么是對象編程的兩頂帽子??
????一個軟件的目的是為了解決一個或一些問題,就有了需求和實現,在面向對象編程中,表現為一個個的類或是對象,相互協作,調用,通信。在這個過程當中,簡單來說就是使用和被使用兩種關系。?
????一個對象總會表現出兩種形式,它自身,及它的接口。或者說是它的本體與表象。本體是對象自身的結構及構成,表象是它的接口,與其它對象的交互或是表現。?
那么,當我們關注的是對象的自身還是接口的時候,就需要戴上不同的帽子。?
有哪些帽子可戴呢?我們把一個對象分成兩部分,一是接口,一是實現,接口是對象對外部的表現,實現是內部分運行及處理機制,所以就有了這兩頂帽子。?
為什么會是兩頂而不是三頂四頂?從認識事物來看,二分法很容易理解和體會,就象白和黑,好和壞一樣,當關注接口時,根本不用想如何實現,會不會有實現的困難等,關注實現時,也不用考慮需不需要更多的功能,要不要改個名稱,加個參數等情況,只要專注于實現此接口的功能即可。?
之所以要這么做,是因為接口和實現是對象的一體兩面,這兩個因素互相影響而形成一個完整的整體。接口的改變必定導致實現的改變,實現的改變有可能會影響接口。把它分開來,減少這種相互影響。?
如何戴這兩頂帽子?當然不能同時戴,先戴實現的帽子么?也不可能,沒有接口你實現什么呢?一開始要戴上接口這頂帽子,然后去實現它,在實現當中,你會發現實現的代碼需要和更多的其它對象交互,沒關系,就當它于經存在了,當你完成編譯時,你自然會發現通不過,通過編譯器的提示又戴上了接口的帽子,如此交替反復。?
戴上帽子后,干什么呢??
帽子是一種角色的象征,而不是做事的方式,因為在編碼的時候,寫接口和寫實現都是在寫代碼,做事方式一樣,但是想法不同。?
當你戴上接口的帽子時,你就是一個使用者,從客戶的角度來考慮問題,把你當前處理的對象當做是你的供應商,你就是一個挑剔的客戶。?
我們從自然界來理解這個問題,一個對象就是一個物體,這個對象之所以是這樣,并不是因為它本身長的是這樣,而是因為周圍環境的影響才會成為這樣,也就是接口部分是由于外界的需要而形成的,可以看成它不屬于對象自身,而是由它的客戶擁有,對象自身擁有的是關于接口的實現,它為了向外界提供所需要的接口,不得不在內部進行演化,來實現這種接口。?
當戴上實現的帽子時,你就變成了那個供應商,面對著挑剔的客戶,也就是剛才戴著接口的帽子的那個你,你就想著如何去應付它。來滿足他的要求。
這種方式和設計模式有什么關系?上面所說的接口,是指一個類的方法,屬性,事件等,是細粒度的接口,實現,是指對這個類的方法,屬性,事件等的實現,不是指類一級的實現。是我在編程過程中,對細部處理的一些想法。當然這種方法放大了以后,到設計類及類間關系這一級,實現就變得次要了,關心更多的是接口。?
模式的定義(Alexander):每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。?
而設計模式,指的是在軟件開發活動中的模式。是軟件設計的模式,一般說來,一個設計模式是多個類相互協作的結果,一個設計模式的實現就是一個設計,而不是設計的實現。一個模式可以有N個設計,而每一個設計,又可以有N種實現。所以兩頂帽子,描述的是面對一個設計,如何去實現它的問題。?
和TDD有什么關系?事實上,這兩頂帽子是學習TDD的一種理解。TDD通過測試來驅動開發,由測試來保證重構,是一套完善的機制和方法論。結合其它的XP思想,形成一整個XP的開發過程模式,從這一點可以看出老外高手思想、邏輯體系的嚴明。TDD的測試就是接口的帽子,為了通過測試寫的代碼就是實現的帽子,但不同點在于,測試驅動的是整個的開發,包括設計及實現,重構等過程,是一個大的框架。?
當然,如果不寫測試,或測試代碼不能完全覆蓋的情況下,也可以戴這兩頂帽子,比如私有方法,對一個類的內部來說,它仍然是使用它的方法的一個接口。?
通過戴這兩頂帽子,能改善接口的易用性,穩定性及偶合性。因為在寫每一個接口的時候,都是站在使用者的角度來考慮的,這時候關注的是調用者使用的方便,從小處著眼,比如一個私有方法,我們會關注它起什么名字,準備給它傳什么參數,需要返回什么值等,而在對此方法的實現里,關注怎么把這個方法實現得更好。再大一點,到類級,再大一點,到一組協作的類,再大一點,到組件,模塊等,原理都是一樣的。
總結
以上是生活随笔為你收集整理的面向对象编程的两顶帽子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最大期望算法与混合高斯模型的推导
- 下一篇: 统计特性和概率估计-1 (数学推导与证明