【軟體工程學習筆記】軟體建模概述
軟體模型
正如計算機中的程序可以理解為: 數據結構(信息的載體) + 演算法 (負責行為)。
在軟體模型中,也可以分為結構模型與行為模型。這與上面的理解又異曲同工之妙。
另外,沒有一個模型能夠容納所有的的建模維度,這就是為什麼設計軟體時需要產生大量的模型設計。因為這樣的模型超出了人類的理解範圍,人類擅長做的是分而治之(即 對軟體的不同維度進行了切面,然後建立針對各個部分的模型。),而不是把一個複雜的事情當作一個整體(大腦處理單元),像計算 1+1一樣。
結構模型
結構是個很有趣的東西,它影響著事物的行為。(正如演算法需要嚴重依賴於數據結構一樣)。想像兩個小島之間如果沒有橋、船、飛機這些使之聯繫的東西,那麼這兩個小島幾乎不會產生什麼相互作用,也就沒有了相互影響的行為。
我們所了解UML中的類圖就是一種結構模型。
其中結構模型用來承載相應的信息(相應的屬性),舉個簡單的例子,此處構建一個簡單的模型「人」,人具有屬性「性別」;另外,我還構建了一個模型「車」,車具有屬性「輪胎」。為何我不把「性別」這個屬性放到「車」上呢? 因為在現實生活中,人們很少將「性別」這一概念用在「車」上。 這說明,我們建模時,往往會根據事物的現實評價屬性來安排其在各個類中的位置。
讓我們繼續擴展上面的元素,能夠發現,」人「和」車「存在某種關聯關係,為此,我們需要建立一定結構,讓兩者產生一定的聯繫,這裡我們選擇讓」人「的世界中多一個」車「的概念(將」車「加入到」人「的屬性),畢竟在這種關係中,」人「是主動的,它需要發出信號等來控制」車「的行為。相對而言,」車「才不管誰發出的信號,給油給電就跑,哪怕開車的是頭豬。
這裡的結構重在刻畫存在關係,而不關心建立在此關係上的行為。舉個簡單的例子,「人」擁有"車"(「擁有「意味著存在一種模糊的聯繫,抽象粒度大),而沒說「人」與「車」的具體交互行為,比如「人開車」,「人剎車」,「人轉動車的方向盤」等等,這裡所提到的行為都是建立在「人」與「車」存在的聯繫的情況,否則在」人「的世界中,壓根就沒」車「,還怎麼作用於」車「。
(稍後我會談談自己對於一些常見有趣的結構的體會)
行為模型
行為中,強調動作,強調細節。如果前面的結構中的語義是」存在關係「,那麼行為的語義是」在關係基礎上,發生了哪些更具體的交互「。
常見的行為模型:狀態圖,時序圖等等。
舉個網路通信的例子,A,B想要進行通信,但是A , B 之間沒有任何連接線,這種缺乏結構上的聯繫,導致了A,B不可能通信成功,最基礎的關係都不存在。
現在假設A,B之間存在連接線,那麼就可以通信了嗎?當然不行,你需要制定相應的交互協議,編碼規則等等,這些東西規定了A,B交互時的行為反應。
推薦閱讀:
※項目活動05:超聲波測距
※現在為什麼越來越多的人想學編程?
※經典的決策樹演算法
※你可聽說過維基百科的真理之路
※如何利用 Kvaser SDK 軟體開發包資料庫來充分發揮 Kvaser 硬體的作用