面向對象和麪向過程究竟是怎麼回事?

今天下午在一個組的項目回顧會議上,這個同事講了本身用DDD思想對三個模塊的重構。把以前在Service層的一些業務邏輯下沉到了領域層裏,由之而引發的討論。java

部門經理:「其實你的業務邏輯整體並無少,只是把邊界從新劃分了一下。」編程

一塊兒參與開發的同事:「在第二個模塊中(任務系統,包括了任務拆分,狀態跟蹤等)這種思想比較有優點,在一三項目中不是很明顯。」函數

因而引出了個人一個問題:「到底什麼是面向對象,什麼是面向過程,在什麼狀況下適合面向對象,什麼場景下適用於面向過程?」設計

  • 以C語言和Java語言爲例: C語言沒有類,可是有結構體,結構體中不能有函數,只能有屬性。這說明了什麼?說明了在面向過程的思考方式中,數據和操做是嚴格分離的
  • C語言中爲何函數須要定義到調用此函數的前面,也就是說先聲明後調用?若是按照流程化的思路來看這種設計方式,想要調用一個子流程,勢必要在調用以前就定義好
  • 而在java的類中,就沒有函數定義前後的問題,這與面向過程和麪向對象的最小定義粒度有關,面向過程的最小定義粒度爲流程(方法、操做、函數),而在面向對象中,最小定義粒度爲對象,這個對象的行爲沒有前後,包含在對象這個大的容器中。
  • 封裝、抽象、繼承、多態其實就是類比的對象進行的建模,好比以人爲例,人有些屬性不想示人,有些屬性只能給指定的人瞭解,這就是封裝。人掌握的知識實際上是現象的一種抽象。人繼承來來自父母的一些生活習慣,而又有所不一樣,這就是多態。
  • 歸總, 子類相對父類來講有不一樣的模型(對真實世界的建模),這是4種面向對象的終極緣由。 
  • 爲何面向對象的思考方式更有利於擴展維護?拿一個工做崗位爲例,一我的在一個工做崗位上,若是有一天這個崗位有了更多的工做要求,若是改動量較小,那麼對該崗位的人進行技能培訓就能夠了。若是要求多到一種程度,拆分紅兩我的,或者拆分紅多個崗位。而若是用面向過程的思路,那麼每次改動,都至關於多了一個流程?(這裏存疑,多流程的問題在哪?難維護的理由是什麼?這裏我沒有想明白
  • 面向過程要求人有更好的流程化思惟方式,面向對象要求人有更好的抽象思惟方式。那麼若是有一天出現一個「面向文檔編程」呢?要求人有更好的把問題描述清楚的表達能力。換句話說, 面向過程就是面向流程思考,面向對象就是針對模型思考

最後距離,若是咱們描述入職流程,一個大牛的入職流程可能和一個應屆生的入職流程徹底不同,若是把入職這個行爲寫到employee的方法中,那麼這就是面向對象的寫法,若是維護一個入職流程的方法,根據不一樣的人用switch case的方式進行不一樣行爲的跳轉,那麼就是面向過程。xml

面向過程就是面向流程思考,面向對象就是針對模型思考對象

相關文章
相關標籤/搜索