1. 程式人生 > >面向物件思想的個人總結(不要噴我,不是官宣)

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

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

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

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

面向物件Where:        同一物件在不同場景下對於同一訊息,或是同一物件在同一場景下對不同訊息,可能存在不同的反應。不同的反應意味著物件會有不同的功能操作和屬性體現。這就是多型。        原子化後單一職責的不同的功能程式碼組,應該被放置到不同的模組中,介面做好隔離,避免程式碼交叉感染。        被呼叫的介面應儘可能支援多地組合重用,節省開發成本。        總結為:多型、精細、少繼承、多組合。

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

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

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