- UML2面向對象分析與設計(第2版)
- 譚火彬編著
- 2514字
- 2019-07-01 10:17:33
1.5 建立面向對象思維
本節將通過簡單、通俗的案例來闡釋對象建模的基本概念,使讀者初步認識UML模型,并在開闊視野的基礎上,輕松建立面向對象的思維,同時使讀者掌握用面向對象方法分析問題的要領,為學習對象建模方法“熱身”。
在學習案例前,我們先區分幾個概念:對象技術、建模和UML。作為一種軟件開發思想,對象技術是理論基礎。引入對象技術的目的是能夠有效地分析和設計軟件系統,這個過程就是建模(關于建模的概念,將在第2章中做詳細介紹)。為了表達建模結果,開發人員需要一種語言作為工具,這個工具就是統一建模語言(Unified Modeling Language, UML)??偟膩碚f,建模是最終目的,對象技術是一種建模理論,而UML是一種體現面向對象思維的建模語言,它是將對象理論轉換為實踐的工具。
為了更好地理解面向對象思維方式,先來看一段個人簡介:tanHuobin是類OOTeacher的一個實例,這個類是基于beiHangUniversity的softwareSchool的工作;類GraduateStudent的所有實例都可以通過Course類的對象OOTechnology建立關聯,并可發送phone消息或email消息。
在該個人簡介中,我們看到了類、實例、關聯、消息等面向對象的詞匯,這是建立面向對象思維的基礎。當然,在實際應用中,這些概念并不是一次就能夠定義清楚的,它需要經歷一個分析和設計的過程。在本節的最后,我們將利用面向對象思維方式描述一件在日常生活中發生的事情,并借此引入后面將要學習的各種UML模型。
1.5.1 引入案例
我的一位朋友結婚了
這是人們日常生活中一件很普通的事情,但這只是事情的結果,結果背后還隱藏著很多活動和過程。這就需要經過有效地分析和設計過程來描述,下面我們將從不同的角度進行探討。
A.這里面有什么事物?
要分析問題,首先要找到問題中所包含的事物。在本案例中,可能存在月老、小伙、姑娘、戀人、玫瑰花等各種人/物或事件。
B.每個事物看上去是什么樣的?
找到這些事物后,本步就要分析每個事物的特征,以認識和理解事物本質。在本案例中,每個事物可能的特征為:月老——看上去有些年紀了、挺熱心;小伙——看上去很強壯、很誠實;姑娘——看上去很漂亮,還很溫柔;戀人——看上去很黏糊,最終結婚了;玫瑰花——火紅火紅的。
C.每個事物能做什么?
認識這些事物后,本步要分析這些事物的能力,以完成特定的事情。在本案例中,每個事物的能力有:月老——牽線搭橋,介紹兩人認識;小伙——獻花追求,表達愛意;姑娘——仰慕傾情,以身相許;戀人——交往,結婚;玫瑰花——令姑娘心動,傳情示愛。
D.這些事物都在什么地方?
分析完這些事物本身的特征和能力后,本步就要安排這些事物出場,為此還要定義每個事物所處的位置。在本案例中,月老可能在婚介所或交友網站;小伙可能在軟件園工作;姑娘可能在醫院工作;而戀人則可能出現在電影院;玫瑰花可以在花店,也可以在小伙或姑娘的手中。
E.這些事物之間有什么關系?
安排好所有事物后,為了能夠有效地完成事情,還需要分析他們彼此之間的關系,以便彼此合作。在本案例中,可能的關系如表1-1所示。
表1-1 各元素之間的關系

F.這些事物是怎么完成整件事情的?
最后就是我們的重頭戲——要利用前面的那些事物及事物之間的關系,完成整件事情。完成本案例的過程如下所示。
(1)月老牽線搭橋,介紹小伙和姑娘認識。
(2)姑娘和小伙一見鐘情,成為一對戀人。
(3)一對戀人開始交往。
(4)小伙用獻花表達對姑娘的愛意。
(5)姑娘收到999朵紅玫瑰,心情無比激動。
(6)小伙真心求婚,姑娘以身相許。
(7)一對戀人終于走入婚姻殿堂。
1.5.2 用面向對象思維分析案例
第1.5.1小節中用通俗的語言展示了分析問題的6個方面(A~F)。而在面向對象的方法中,分析問題的思路還是一樣的,只是引入了相應的術語來表達分析維度。
A.這里面有什么事物?(類和對象)
本案例中的類為:小伙、姑娘、月老、戀人、玫瑰花。
B.每個事物看上去是什么樣的?(類的屬性)
每個類都有自己的屬性,每個對象都有一個相應的屬性值。小伙屬性:體格,屬性值:強壯;姑娘屬性:性情,屬性值:溫柔;月老屬性:年紀,屬性值:較大;戀人屬性:關系,屬性值:初戀。玫瑰花:顏色;屬性值:紅色。
C.每個事物能做什么?(類的操作)
每個類都具備操作功能,而其對象利用這些操作完成相應的行為。小伙:追求、送花、娶親;姑娘:愛慕、相許、出嫁;月老:牽線搭橋;玫瑰花:示愛。
D.這些事物都在什么地方?(類的狀態、部署)
每個類的對象都會有它合理的或者必需的空間位置和邏輯位置。尤其當這些位置對對象的行為造成重要影響的時候,表明它們的位置極其重要。在本案例中,列出的位置對故事主要情節沒有太大的影響,系統可以不予考慮。
E.這些事物之間有什么關系?(類之間的關聯)
類之間的關系非常多,根據面向對象的觀點,一般將類之間的關系主要分為三類:協作關系(關聯),甲會對乙做什么(如月老和小伙、姑娘的關系,小伙和玫瑰的關系,小伙和姑娘的關系);整體—部分關系(聚合和組合),甲是乙的一個組成部分(如戀人和小伙的關系,戀人和姑娘的關系);抽象—具體關系(泛化),甲是乙的一個特例(如人和小伙的關系,人和月老的關系,人和姑娘的關系)。
F.這些事物是怎么完成整件事情的?(類之間的交互)
每個類都會盡量利用伙伴的能力;類之間分工協作,互通信息,共同完成整體的目標,這是面向對象的分析和設計的核心。第1.5.3小節我們將通過特定的工具(UML)表達整個完成事件的過程。
1.5.3 利用UML表達分析結果
前面兩小節是通過文字的形式呈現了分析問題的過程。而在面向對象的方法中,還有更好的方式呈現這個過程,這就是建模——采用UML進行建模。
◆ 為了描述整個系統中的靜態關系,采用UML類圖。圖1-12中的類圖則代表了完整故事情節的靜態模型。

圖1-12 反映結婚過程的靜態類圖
◆ 為了理解整個事情的業務流程,可以采用UML活動圖。圖1-13中的活動圖描述了整個事情的發生經過。

圖1-13 反映結婚過程的活動圖
◆ 為了對每個活動的細節進行詳細分析,可以采用UML順序圖。圖1-14中的順序圖描述了初次見面的情節。

圖1-14 初次見面的順序圖
◆ 為了能夠理解在活動系統中各個參與對象之間的關系,可以采用UML通信圖。圖1-15中的通信圖還是描述了初次見面的情節,不過它更關注參與對象之間的協作。

圖1-15 初次見面的通信圖
◆ 為了了解某個對象內在的變化過程,可以采用UML狀態圖。圖1-16的狀態圖展示了戀人關系的發展歷程。

圖1-16 戀人關系發展的狀態機圖
- Learning Scala Programming
- Flask Web全棧開發實戰
- Getting Started with CreateJS
- VSTO開發入門教程
- Learn Programming in Python with Cody Jackson
- 人人都是網站分析師:從分析師的視角理解網站和解讀數據
- Apache Mesos Essentials
- Python Data Analysis Cookbook
- Visual Foxpro 9.0數據庫程序設計教程
- Learning Apache Karaf
- AutoCAD基礎教程
- HTML5游戲開發實戰
- Extending Docker
- Implementing Domain:Specific Languages with Xtext and Xtend
- Switching to Angular 2