面向對象思想的個人總結(不要噴我,不是官宣)

程序員:What When Where How Who Why;
架構師:What Why Where When Who How;
設計師:What Who Why How When Where。

 

面向對象What:
       面向對象思想是相對於面向過程思想而言的,不拘泥於實現過程,不面對拆分的細節,直接面對一個整體,就是面向對象。
把一組有着共同行爲模式的人、共同屬性特徵的物、共同步驟流程的事歸納抽象爲類。把類分解具象,就可以得到對象。
       對象間進行通信的構造被稱爲消息。類有父類子類,子類繼承父類共享父類方法以補充自身功能,子類覆蓋父類的接口以適應子類業務的需要。
       重寫是重寫父類的方法;重載是對同名函數重新裝載參數。
       靜態成員爲不同的對象之間,提供數據共享的渠道。這些數據可讀可修改,且只能被靜態方法訪問。
       靜態類型和靜態綁定在編譯後已確定,動態類型和動態綁定在運行後才能確定,動態綁定支持多態。

 

面向對象When:
       當團隊進行項目開發時,會有分工的情況。各個模塊的開發分包獨立,在集成時控制層針對業務情況分別調用,調用模塊不需要介入被調用模塊的細節。這體現了面向對象的封裝和接口的特性。
       使得生產者和使用者的角色邊界清晰明確,提高工作效率,便於測試和糾錯。

 

面向對象Where:
       同一對象在不同場景下對於同一消息,或是同一對象在同一場景下對不同消息,可能存在不同的反應。不同的反應意味着對象會有不同的功能操作和屬性體現。這就是多態。
       原子化後單一職責的不同的功能代碼組,應該被放置到不同的模塊中,接口做好隔離,避免代碼交叉感染。
       被調用的接口應儘可能支持多地組合重用,節省開發成本。
       總結爲:多態、精細、少繼承、多組合。

 

面向對象How:
       爲了確定問題域,理解問題,支持分析,必須做到五個步驟:認定對象、組織對象、說明關係、確定功能、定義屬性。
       職責單一、接口隔離、組合複用、寧拆分勿雜糅;
       對擴展開放、對修改封閉;
       子類可以替換父類,便於更新;
       依賴抽象,面向接口編程,避免使用者陷入生產細節;
       各模塊各自爲政。

 

面向對象Why:
       當今的軟件項目越來越龐大,需要團隊開發才能完成。整體採用面向過程的開發方式,不僅會讓開發週期變長、代碼冗餘度增加,還難以管理團隊、難以評估成員間工作情況,也難以測試並適應需求的變更。總的來說,就是開發模式理念不再適用了。
這讓我們反求諸己,什麼樣的理念才適合當前的情況,又符合人的認知特性和團隊的發展特性呢?面向對象很可能是我們的答案。

       人的認知模式從嬰兒身上可見一斑,嬰兒在眼前的混沌中伸出雙手,拿起物品完成了分解對象的過程。該行爲多次重複,使得孩子認知了物體的外在表徵、內在屬性、功能特點、與其他物品的聯繫並掌握使用方法,甚至是修改、替換和製造方法,完成了對象抽象爲類的過程;長期頻繁使用的知識和能力,形成條件反射,這啓發了靜態成員和靜態綁定概念的出現;而語言語法可對天地萬物描述的靈活性也啓發了動態綁定的出現;繼承來源於親子家族關係的模式;多態描述了人與人、人與事、人與物之間關係的切換;封裝更是對現代社會中家庭、家族、公司、團體甚至黨派等功能組合體的精確描述。可見面向對象思想的出現早已經奠定了生物學和社會學的基礎。
       從當前的工業模式和人力資源管理模式來說,三個問題急需解決:
       一、如何適應工廠流水線模式和分包模式以實現集約化(一人一時做一事)生產管理?二、如何利用好已有的工業基礎架構已節省開發資源?三、如何在多個不同需求但流程相似的場景下複用已有的功能,並分別給出需要的答案?
       所以,面向對象基於繼承、封裝和多態三個方向的探索,得以建立了完整的思想體系,爲上述三個問題提供了答案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章