1. 程式人生 > 其它 >讀Thinking in UML(p1-p8)

讀Thinking in UML(p1-p8)

面向物件 Vs 面向過程

摘抄說的比較好地方:

  1. 當系統已經達到了超越其處理能力的複雜極點,有了物件,就可以通過提升抽象級別來構建更大的、更復雜的系統。這是面向物件的作用。所以面向物件其實是幫我們構造更為複雜的系統來解釋越來越複雜的現實世界。所以,比掌握具體的技術更加重要的是掌握認識論所採用的方法和分析過程
  2. 面向過程最大的問題就是,它所描述的世界裡面的一切都是緊密練習在一起的,互相影響互相作用。在真實的世界中,過程,本身就是一個可變的因素,如果過程隨意變化,那麼依賴過程的分析法,必然會隨之而變。而對於面向物件理念來說,這個世界是分割開來的,並且只有在特點的場景之下,孤立物件之間進行了某些資訊互動
    才表現出我們所看到的的那樣一個過程。
  1. 在面向過程的分析中,如果我們要構成一個複雜的系統,那麼就要把所有的因素考慮到,把因素的因果關係都分析清楚,再把過程模擬出來,這個過程太難了(這裡我得到的提示是:有時候當我想要做單元測試,把覆蓋全部場景等同於找到所有的觸發點和因素,模擬過程,這簡直是和麵向過程分析,是一樣的道理。也許會有更加巧妙的方式。)。所以如果我們使用面向物件分析,那麼就可以把大的系統拆分出很多小的東西,然後再按照互動的規則,對他們進行分析,就能得到最終複雜的系統。

面向物件的特性

  1. 物件有著堅硬的外殼,從外部看來,除了它用來與外界互動的訊息通道之外,物件內部就是一個黑匣子,什麼也看不到,這稱為封裝
  2. 物件可以結合在一起形成新的物件,結合後的物件具有前兩者特性的總和,這稱為聚合
  1. 物件可以繁育,產下的孩子將擁有父輩全部的本領,這稱為繼承
  2. 每個物件都有多個外貌,在不同情況下可以展現不同的外貌,但本質只有一個,這就是介面
  1. 而多個物件卻可能長看相同的臉,但同樣的這張臉背後卻是不同的物件,它們有著不同的行為,這就是多型
  2. 從巨集觀角度說,物件是“短視”的,它不知道也無法理解它所處的巨集觀環境,也不知道它的行為會對整個巨集觀環境造成怎樣的影響。它只知道與它有著聯絡的身邊的一小群夥伴,這稱為依賴,並與小夥伴間保持著資訊交流的關係,這稱為耦合
  1. 同時物件也是“自私”的,即便在夥伴之間,每個物件也仍然頑固地保護著自己的領地,這稱為類屬性
    ,只允許其他人通過它開啟的小小視窗,這稱為方法,進行交流,從不允許對方進入它的領地。然而物件也喜歡群居,並且總是“物以類聚,人以群分”。這些群居的物件有著一些相似的性質,它們依靠這些相似的性質來組成一個部落。物件們尋找相似性質並組成部落的過程稱為抽象,它們組成的部落稱為
  2. 部落裡的每個成員既有共同的性質又有自己的個性,我們只有把特有的個性賦給部落成員才能區分它們並使它們活動起來,這稱為例項化

分析物件時,不需要動輒就把整個世界拉下水,從頭到尾分析一遍,我們只需要關係與它關係的那幾個物件。這使得我們在分析物件的時候需要考慮的資訊量就大大減少了,自然就簡化了我們所面對問題領域的複雜程度。

這讓我想起來,當我在分析一個框架的原始碼的時候,總是喜歡從資料的源頭,或者是觸發點開始去熟悉框架應該做的事情,俗稱先去了解主體流程,但是這個方案真的是合適的嗎?如果按照面向物件的分析方式,先分析出系統或者框架裡面的重要組成部分,然後分析他們之間的關係,以及依賴,包括他們是如何配合完成一系列操作的,這種方法,對分析的效率是否會有提升,這個待確定。