日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

寫了十年代碼,面向對象還是一知半解,這也不能全怪你

 

一、先說幾個現象:

 

1.1

我曾經的團隊中的幾位優秀的架構師,寫框架代碼寫的很不錯的那種。他們為什么能寫出好代碼?為什么能做出復雜系統的設計? 他們自己好像也不能說出個所以然來。 我把這稱之為意識流。(也就是大概是憑經驗,靠感覺)并且,這種憑經驗的說法也被不少DDD的專家大佬用來回答如何掌握領域建模能力上。

 

1.2

或者你也有一種感覺,你知道一些好的設計原則和模式,但是你不會用。 另外一種感覺就是UML的圖你都會畫,但是如果讓你從0開始設計一套系統,你還是不知道如何開始。

 

1.3

只能憑經驗這種說法,對于我一個管理者來說。它意味著不可快速培養,無法規?;?;只能任由其自由生長,通過一個又一個項目來加強和驗證一個人是否擁有良好的設計能力,是否有架構師的潛質 。 我始終無法接受這個結果。 雖然之前我也是一個經驗和感覺型選手。

 

二、轉機

 

2.1

轉機的上半部分來自于我看了一書關于架構的神書《系統加構——復雜系統的產品設計與開發》 豆瓣評分達 9分。通常在8分以上就是值得一讀的書了,9分的書讀懂一本對某件事情的看法可能就會發生一些根本性的改觀。這本書確實很難懂,至少我強行安利給了我身邊的很多人,并且還組織過一段時間的讀書分享小組。 這本書的作者對于架構的本質 ,以及如何來做架構是非常深的。雖然這本書的難懂確實讓很多人放棄了,但我始終認為堅持看完3遍以上你對架構這件事情會產生很大的改觀。

 

2.2

上面那本書雖然把架構的本質講清楚了,但是并沒有降低多少做架構的復雜度。直到我通過這種書里面用的概念建模語言OPM 找到了另一本書《基于模型的系統工程——綜合運用OPM與SysML》 ,怎么說呢,我當時也是震驚的。因為這里面是這么說的:

 

功能是整個模型由此逐漸演變的種子。這條原理可能違反直覺。因為許多工程師傾向于從結構——對象、系統包括的實體,而不是功能開始建模。

 

也就是說它是從找到關鍵過程開始的,這有一種好像回到面向過程的方法里面去了。要知道在《面向對象分析與設計》里面,格雷迪大佬明確地表示這種結構化的設計過程是不可取的。

 

2.3

以公交車載客為例,如果是用面向對象的方式描述,就會把整個系統分為公交車,司機,乘客,車站等,然后分析它們在整個系統運作中的互動關系,關注的焦點是對象;而如果是面向過程,則會把整個從過程拆解為“開始跑路線-載客-啟動-到站”,關注的焦點是過程。

 

面向對象的建模(當然,這是靜態結構的建模,如果要對動態行為進行建模,我們還需要一個時序圖來表示)

寫了十年代碼,面向對象還是一知半解,這也不能全怪你

 

我們可以用乘客和司機為主體找到這樣幾個關鍵過程。(有人可能會發現這跟UML里面的用例圖是很像的)

寫了十年代碼,面向對象還是一知半解,這也不能全怪你

 

是的在OPM 里面會把角色也當成一個對象,它的類型是主體對象。主體對象作為一個人類對象操縱一個過程;但是如果接下來的操作可能會讓你出乎意料了。

寫了十年代碼,面向對象還是一知半解,這也不能全怪你

 

當然我們通過一個“過程”,它可以作為一個抓手或者推導,幫我們很自然地找到相關的對象。比如:

  • 司機跑公交,用的是哪輛公交車?找到一個輸入對象
  • 司機跑公交,跑的是哪條線路?找到另一個輸入對象
  • 司機跑公交,會產生什么?一條在進行中的線路(Running Itinerary) ,找到一條受過程影響的對象 。
  •  

以乘客的上車和下車過程作為推導,你會找到什么?

 

三、OO VS OP

 

OO我們說的是面向過程,但是這里的OP 不是面向過程。而是對象過程 。OPM它的全稱叫做Object Process Methodology 對象過程方法。是由以色列理工學院的Dov Dori教授研發出來的,它的目的是將面向對象的圖表和面向過程的圖表綜合到一套方法中,更方便對系統架構進行描述。所以你看到上面將對象與過程放到了一張圖里面。

 

它沒有改變OO里面關于抽象、封裝、模塊化與層次的本質 。而區別于OO里面僅通過在總是域中找名稱的形式來進行類的抽象,坦白講這有點像老師跟你說你自己想一下。雖然這個道理很深奧,但是可能很難參透。

 

而OPM給我們帶來的是找到關鍵過程,然后通過關鍵過程的鏈接(主體對象、工具對象、輸入對象、受影響的對象)等,為我們搭建了一個橋梁,能夠幫助我們降低抽象的門檻。并同時能夠讓我們利用OO的思想中的那些本質元素:抽象、封裝、模塊化與層次。 (OPM對于層次的建模不需要像UML那樣分為多張圖)

 

四、這是廣告

 

我在我們一期功能架構訓練營中將架構過程與OPM相結合,打造了一套科技學落地架構設計過程與方法。同學學完之后是這么說的:

學習這個打開了我的新世界 ,原來這個還有方法論。我也有下載你說的那個系統架構:復雜系統的產品設計與開發,用瑣碎的時間看了前面2張,后面就扔掉了。從投資與回報來說,你的課程確實性價比特別高。

在前幾天我還沒有意識到雖然這個過程是已經存在的,但是它之前是被應用在更廣泛的系統設計上(比如硬件或者其它系統),但是在軟件設計領域,可能還沒有。(如果有的話麻煩告訴我- -、) 想想這個過程可能拯救國內600萬被OO搞的頭大的程序員于水火之中,這件事情就值得我好好地去推廣。

分享到:
標簽:面向對象
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定