uml学习入门
http://www.uml.org.cn/oobject/200911175.asp
1 面向對象概述
這是第一節,主要先來確定幾個基礎的概念.
1.什么是對象
對象(Object)是面向對象的基本構造單元.是一些變量和方法的集合,用于模擬實現世界中的一些事物模型.如一臺電腦,一個人,一間房子等.當然也可以模擬一些虛擬的東西,比如一個學號,一個編號,一個院系等.
2.面向對象與面向過程的區別
面向對象"什么做什么"與面向過程"做什么"最大的區別在于,面向對象的重點在于誰發出了什么命令,而面向過程只關心一個命令.
面向對象以對象為基礎,以事件或消息驅動對象執行處理.它不像面向過程設計一樣以函數為單元,在一開始就需要使用一個主函數,來概適整個程序,像向對象是以部分著手,去構建整個程序.面向對象以數據為中心,使用類作為表現數據的載體,面向過程以功能為中心來撈述程序. 面向對象的程序控制流程以事件或消息來驅動,而面向過程的程序則是以事先預定的程序來執行.所以當需求變化很大的時候,面向過程的程序往往需要重構大部分甚至所有代碼,而面向對象則可以輕構解決.
3對象與類
類是對象集合的再抽像,對象是類的實例.可以用一個簡單的例子來說明.把中國人當成是一個類,那么你我都是這個類的一個實例.你我等這些中國人的集合抽像成了中國人這個類.中國人是一個虛的概念,而你我是一個實實在在的個體.
4消息和事件
消息是對象與對象之間相互作用的方式.消息一般包括消息的發送對象,消息的接收對象,消息的傳遞方式,消息的內容,消息的返回五部分組成.
比如張三對李四說:今天我們來喝一杯.
事件是系統預先定義的,通過指定的條件觸發的動作.
比如我打一下你的頭,你頭痛了. 這里我通過"打"這個行為來傳遞了一個消息對你產生了作用,你觸法了"痛"這個事件.
5面向對象的基本特征
抽象:將要描述的事物進行簡化,將事物特征進行概括,以事物層次結構來組織模型.
比如:狗.我們在軟件中不可能把狗的所有信息都描述出來,我們把它簡化為有四條腿,一個頭,一個尾巴,還有一個軀桿. 這樣我們就像畫畫一樣畫出了一個抽象的模型圖. 然后對它的特征進行概括,比如它會叫,會吃,會走. 然后狗還分哈巴狗,狼狗等很多種.所以這里又分出了狗的層次.
封裝:將對象的狀態和行為綁到一起,并且盡可能的隱藏對象的內部細節.
比如:一臺電視機,它的所有特征和內部結構都封裝起來,我們不需要知道它的內部原理是怎么的,我們只需要知道怎么打開它,怎么換臺就夠了.
繼承:繼承是反映客觀世界中對象的層次關系.正如上面狗的例子中,我們的狼狗,哈巴狗都繼承自一個虛擬的狗的概念中.繼承在很大程度上簡化了我們的工作,也清淅的展示出了對象的層次關系.
多態:多態是指兩個或多個屬于不同類的對象,對于同一個消息或方法調用做出不同響應的能力..
比如:當我們手上拿一個藍球的時候,我們說:走,打球. 對方就能清楚的理解我們指的打球是指打藍球或不是足球,乒乓球。
2 面向對象方法分析與設計
1.面向對象分析
面向對象分析的目的是知識客觀世界并進行建模.
其實在面向對象的分析過程中也是對需求的分析和理解.
使用面向對象分析的過程一般如下:
獲取問題陳述-->確定類-->準備數據字典-->確定關聯-->使用繼承來細化類型-->完善對象模型-->建立對象動態模型-->建系統功能模型
(1) 獲取問題陳述就是與用戶一起理解系統,搞清楚系統的業務邏輯,發現用戶的需求,在這個時候我們應該以一個用戶的身份去看待這些需求.很多設計人員在這個時候沒有做足功能,導致最后系統的設計和維護異常困難,并開始抱怨起用戶的變態要求.在搞清楚系統的需求之后,我們不要馬上開始編碼,如果在這個時候你都已經寫下了幾篇代碼了,那么恭喜你,以后夠你受的了.
(2)當得到了足夠多的問題并對其理解之后,我們就可以把問題中承現出來的物理實體和概念描述整理出來,暫時把這些標志成一個類實體.然后清除冗余類和與系統不相干的類.最終得到我們的模型實體
(3)把第二步分析出來的類建立一個數據字典,這個數據字典很有可能會在我們的數據庫設計中起到很大的作用.
(4)通過第二步和第三步,我們已經得到了系統中的實體信息,現在我們就要讓各個實體信息之間產生聯系.
比如在一個學生選課系統中. 學生被定義為一個實體,課程也被定義為一個實體,通過選課這個行為把兩個實體聯系起來.這個行為由學生來引發.目標為課程,產生的結果是學生是否成功的選了一門課程.通過這樣的分析,在以后的設計過程中我們可以很容易的設計出學生類的方法.
1class Student{
2
3 public bool ChooseCurriculum(Curriculum curriculum){
4
5 //.
6
7 }
8
9 //.
10
11}
12
13class Curriculum{
14
15 //.
16
17}
18
(5)使用繼承來細化類
使用繼承來共享公共屬性,以此來對類進行組織,一般可以使用以下兩種方式來實現.
自底向上:通過把現有類的共同性質一般化為父類,尋找具有相似的屬性關系或操作的類來發現繼承.這些結果常常是基于客觀世界的現有分類,只有可能,應盡量使用現有概念.
自頂向下:把現有的類細化為更具體的子類.
(6)完善對象模型
設計過程中不可能一次就能正確的設計出需要的,往往會在這過程中加深對需求的理解.往往需要重復前面的過程.
(7)建立對象動態模型
跟據前面幾步的對象模型,接著就是建立對象的動態模型
準備腳本:動態分析從尋找事件開始,然后確定各對象的可能事件順序.
確定事件:確定所有外部事件.
準備事件跟蹤表:把腳本表示成一個事件跟蹤表,即不同對象之間的事件排序表,對象為表中的列,給每個對象分配一個獨立的列.
構造狀態圖:對各對象類建立狀態圖,反映對象接收和發送的事件,每個事件跟蹤都對應于狀態圖中的一條路徑.
(8)建立系統功能模型
功能模型是用來說明值是如何計算的,標明值與值之間的依賴關系及相關的功能.數據流圖有助于表示功能依賴關系.一般建功能模型的步驟如下:
先列出輸入,輸出值,輸入,輸出值是系統與外界之間的事件的參數.
建立數據流圖,數據流圖可說明輸出值是怎么從輸入值轉換的,數據流圖通常按層次組織.
2.面向對象設計
面向對象設計是把分析價段得到的需求轉變成符合成本和質量要求的,抽象的系統實現方案的過程.
(1)面向對象的準則
模塊化:對象就是模塊,它把數據結構和操作這些數據的方法緊密地結合在一起構成模塊.
抽象:面向對象方法不僅支持對過程進行抽象,而具支持對數據進行抽象.抽象方法的好壞以及抽象的層次都對系統設計有很大影響
信息隱藏:通過對象的封裝來實現,對象暴露接口的多少以及接口的好壞對系統設計有很大影響
低耦合:低耦合是設計的一個重要標準,有助于使系統中某一部分的變化對其他部分的影響降到最低.
高內聚:內聚度高的模塊很容易理解,很容易被復用,擴展和維護.
(2)面向對象的實用規則
設計的結果應該清晰易懂.
一般到具體結構的深度應適當.
盡量設計小而簡單的類.
把設計變動減至最小.
(3)系統設計
系統設計是問題求解及建立解答的高級策略,必須制定解決問題的基本方法.系統設計一般是先從高層入手,然后細化.系統設計要決定整個結構及風格,這種結構為后面設計階段的策略提供基礎.
3 面向對象建模
1.為什么要用UML建模
模型是什么?模型就是對現實世界的形狀或狀態的抽象模擬和簡化,模型提供了系統的骨架和藍圖.
模型有助于按照實際情況或按照所需要的樣式對系統進行可視化.
模型能夠規約系統的結構或行為.
模型給出了指導構造系統的模板.
對系統用戶而言,軟件的開發模型向他們描述了軟件開發者對軟件系統需求的理解.讓系統用戶查看軟件對象模型并且找到其中的問題,可以使開發者不至于從一開始就發生錯誤.
對軟件開發而言,軟件的對象模型有助于他們對軟件的需求以及系統的架構和功能進行溝通.
對軟件的維護和技術支持者而言,在軟件系統開始運行后的相當長的一段時間內,軟件的對象模型能夠幫助他們理解程序的架構和功能,迅速地對軟件所出現的問題進行修復.
建模并不是僅對大型的軟件系統,甚至一個小型的留言本也能從建模的過程中受益.
2.以面向對象建模為基礎的開發模式
軟件生命周期可以分為制定計劃,需求分析,設計,編碼,測試,運行和維護.軟件開發模式是跨越整個軟件生存周期的系統開發,運行和維護所實施的全部內容光煥發結構框架,給出軟件開發活動中各個階段之間的關系.這里介紹4種常見的開發模式.
(1)瀑布模型
瀑布模型也被軟為生存周期模型,其核心思想是按照相應的工序將問題進行簡化,將系統功能的實現與系統的設計工作分開,便于項目之間的分工與協件,即采用結構化的分析與設計方法將邏輯實現與物理實現分開.瀑布模型將軟件生命周期劃分為項目計劃,需求分析,軟件設計,軟件實現,軟件測試,軟件運行與維護6個階段.并規定了他們自上而下的次序,每一個階段都是依次銜接的.
瀑布模型為項目提供了接階段劃分的檢查點,這樣有利于軟件開發過程中人員的組織及管理.瀑布模型在當前階段完成后才去關注后續階段,這樣有有利于開發大型的項目.然后也存在一定的缺陷.比如當開發成果尚未經過測試時,用戶無法看到軟件效果,不能得到在開發過程中的及時反饋,增加了項目開發過程的風險.對需求不穩定的項目來說缺乏足夠的靈活性.并具要在需求分析階段要完全確定系統用戶所需要的所有需求也相當的困難.
(2)噴泉模型
噴泉模型以對象為驅動,以用戶需求為動力.用來描述面向對象的軟件開發過程.噴泉模型認為軟件開發過程自下而上,各階段是相互復疊和多次反復的.各個開發階段沒有特定的次序要求,并且可以交互進行.可以在某個開發階段中隨時補充其他任何開發階段的遺漏.
噴泉模型不像瀑布模型那樣,需要分析活動結束后才開始設計活動.設計活動結束后才開始編碼.該模型的各個階段沒有明顯的界限.開發人員可以同步進行開發,其優點是可以提高軟件項目開發效率,節省開發時間.但也使開發過程中需要大量的開發人員,因此不利于項目的管理.此處這種模型要求嚴格管理文檔,使得審核的對度加大,尤其是面對可能隨時加入各種信息,需求與資料的情況.
(3)基于構件的開發模型
基于構件的開模型利用模塊化方法將整個系統模塊化,并在一定構件模型的支持下復用構件庫中的一個或多個構件,通過組合手段高速率,高質量地構造應用程序軟件系統開發的過程.
基于構件的開發方法使得軟件開發就得容易,構件組裝模型導致了軟件的復用,提高了軟件開發效率.構件組裝模型允許多個項目同時開發,降件了費用,提高了可維護性,可分步提交軟件產品.但也因為采用自定義組裝結構標準,缺乏通用的組裝結構標準,因而引入了軟大的風險.可重用性和軟件高效性不易協調,并且由于過分依賴于構件,所以構件庫的質量影響著產品的質量.
(4)XP方法
敏捷方法.是近幾年興起的一種輕量級的開發方法,它強調適應性而非預測性,強調以人為中心而不是以流程為中心,以及對變化的適應對和人性的關注.
XP(eXtreme Programming)方法是最引人注目的一種敏捷方法.它規定了一組核心價值和方法,消除了大多數重量型開發過程中的不必要產物,建立一個漸進型開發過程.該方法將開發階段的4個活動(分析,設計,編碼和測試)混合在一起,在全過程中采用迭代增量開發,反饋修正和反復測試.
具有以下優點
采用簡單計劃策略,不需要長期計劃和復雜模型,開發周期短.在全過程中中采用迭代增量開發,反饋修正和反復測試.保證了軟件的質量.能夠適應用戶經常變化的需求,提供用戶滿意的高質量軟件.
講了這么多枯燥了概念東西,下一節中我們就以結合實例來學習uml中的用例圖.
?
總結
- 上一篇: 大话数据结构之算法 时间复杂度
- 下一篇: 装饰模式与代理模式的区别