UML簡介 - Java2物件導向

Download Report

Transcript UML簡介 - Java2物件導向

UML簡介
1-1UML簡介
1-2使用者案例
1-2-1解構使用者案例
1-3類別圖Class Diagrams
1-4互動圖Interation Diagrams
1-5狀態圖State Diagrams
1-6活動圖Activity Diagrams
1-7套件
1-8UML軟體
1-8-1安裝JUDE
1-1UML簡介
• UML是Unified Modeling Language統一
模型語言,它是用來描述物件導向的分
析與設計(OOA&D),而發展的人為
Grady Booch、Ivar Jacobson和James
Rumbaugh,他們也是UML軟體及描述
標準的開發之父,而目前定義UML標準
的為OMG組織。
• Jacobson在1991年時以在易利信公司開
發電話交換機的經驗帶來使用者案例
(Use Case)的概念。
• Rumbaugh在1993年出版了物件導向模
型技術(OMT)的書。
• Booch在1993年Rational公司以方法論
開發了物件導向的系統。
• 在1995年的OOPSLA大會上,Booch、
Rumbaugh和Jacobson這三位大師組成
了物件導向系統描述的方法第0.8版。
1997年 Rational公司在OMG組織上提
出了UML1.0版。在2001年則推出了最
新的UML統一模型語言2.0版。
UML2.0
(OMG2001)
UML1.0
(OMG1997)
UML0.9
(1996)
Unified Method0.8
(1995OOPSLA)
Booch
1993年新增
Rumbaugh
1993年新增
Jacobson
(1991年提出)
•
這是顧客類別以UML類別圖的表示方法,
顧客為類別名稱,它有名稱屬性、住址
屬性和信用評等的方法。我們使用UML
來描述資料以視覺化的觀點來看。UML
可以讓我們程式設計師溝通更為方便,
而且可以用大的觀點來看整個的軟體設
計,也讓我們可以設計良好的物件導向
程式。
•
這是開發軟體的UML五個觀點。要
以使用者的角度來考量,除此之外
還要有實做的考量,設計的考量,
和流程與佈置的考量。
一般設計考量
實作考量
使用案例
流程考量
邏輯觀點
佈置考量
實體觀點
1-2使用者案例
•
•
Jacobson於1994年發明了使用案例圖
的方法。使用者案例是使用者觀點來看
模形化的軟體設計,這是以目標為導向
的模型設計。使用者案例可以幫助辨別
系統服務。使用者案例可以被進一步被
解構成小的使用者案例。
這是證券及期貨交易的使用者案例圖。
在這裏有四個參與者,分別是交易經理
設定有價證券交易的額度。交易員處理
風險分析,價格處理與交易處理,而風
險分析和價格處理包含了評估。業務員
作交易處理及價格處理。保證金額度繼
承了交易處理,它會確保這個交易是否
是可執行,如果保證金不夠,則無法執
行這個交易。
•
這是參與者,每一個使用者案例圖形都
有參與者,又稱為演員。
•
這是使用者案例UseCase,我們可
以將使用者案例給模組化。
•
這是參與者與使用者案例有者關係。這
條關係線是沒有箭頭,因此為雙向關係,
如果有箭頭則表示是單向關係。
•
這是包含(include)的關係,風險分
析包含了評估使用者案例。包含是
使用虛線,箭頭指向的是被包含的
使用者案例。
•
交易處理是保證金額度的一般化,
而保證金額度的使用者案例繼承了
交易處理使用者案例。箭頭指向的
就是父類別,而保證金額度就是子
類別。
•
這是使用者案例的關係。基礎使用者案
例使用(include)”被包含使用者案例”,
基礎使用者案例包含(include)”被包含使
用者案例”的行為,在這裏是使用虛線
箭頭指向”被包含使用者案例”。
“延伸使用者案例”延伸”基礎使用者
案例”,”延伸使用者案例”可以增加”
基礎使用者案例”的一些行為。
“子使用者案例”繼承”基礎使用者案
例”的一些屬性,而”子使用者案例”
也有新增屬於自己的一些行為。
•
•
1-2-1解構使用者案例
•
大型使用者案例是由四個小使用者案例
所組成,而UseCase3使用者案例又是
由UseCase3-1和UseCase3-2所組成。
因此將較複雜的使用者案例解構成較小
較簡單的使用者案例再來處理。
1-3類別圖Class Diagrams
• 物件導向塑模人員使用類別、物件和類別物件的關係來描述事物,還
有這些事物如何運作。類別及物件可以用來描述系統裏的元素,而關
係則是彼此物件間的訊息交流。
• 物件存在現實生活裏,可以是任意系統的一部份。類別是用來抽象描
述物件的屬性和行為。類別就是抽象的,而物件就是類別的實體。在
這一章我們將介紹物件類別圖來解釋類別。
• 物件導向程式設計(object oriented programming簡稱OOP)有幾個重
點,分別為物件Objects、類別class、繼承inheritance、多型
polymorphism和訊息message。
• 資料封裝指的是在類別成員(資料欄或方法)宣告使用公用public、私有
者private或受保護protected,私有者private只有本類別的方法允許使
用,保護者protected只有在本類別的衍生類別(子類別)或相同套件中
的類別可以存取,公用者public任何類別都允許存取。
• 衍生類別為本類別的次類別(subclass)或稱為子類別、延伸類別
(extended class)。本類別稱為子類別的父類別(super class)。
1-3-1類別
•
•
•
這是一個樂透遊戲,我們使用兩個骰子
來玩。
類別是由資料和方法所組成。類別名稱
就是類別的名子;資料宣告就是儲存在
每個類別物件裏的資料;方法就是每個
物件所提供的服務。我們定義骰子為
Lotto類別。
我們定義玩樂透遊戲(丟骰子)為
Play_lotto類別。樂透遊戲會丟兩個骰
子。
類別名稱
資料宣告
方法宣告
•
Lotto類別包含了兩個私有private(符號-)
資料,分別是整數int資料型態的MAX和
整數int資料型態的current_value。MAX
資料代表骰子最大的點數,而
current_value則代表目前骰子的點數。
Lotto()函數為Lotto類別的建構子
constructor。Lotto類別也包含了四個成
員函數,分別是play()函數,它為公用
的public(符號+),回傳值是整數int;
set_current_value()函數,它為公用的
public(符號+),回傳值是整數;
get_current_value()函數,它為公用的
public,回傳值是int整數;toString()函
數,它為公用的public,回傳值是字串
String。
•
當我們沒有使用明確的修飾子時,就會
使用預設的修飾子。預設的修飾子有本
套件內的存取範圍,但是我們不可以將
保留字package當作修飾子。類別或介
面有public或預設的存取範圍。只有內
部的類別才有private修飾子,而且它只
能被內部的類別存取。
1-3-2關係
• 我們經常看到一個類別相依於另外一個類別。相依關係就是使用的關
係。通常,類別A使用類別B,然後A類別的方法就會去呼叫B類別的
方法。假如是靜態的呼叫,則A只是使用名稱來參考B類別。假如不
是靜態的呼叫,則A類別會去存取B類別的物件實體來呼叫方法,A類
別必需參考B類別的實體物件。
• 一個物件能夠存取另外一個物件是很重要的設計決定。一個聚集
aggregation關係通常是一個物件實體化另外一個物件。這個存取關係
也可以是將物件當作是函數的參數傳遞。一般來講,我們應該降低類
別間的相依關係。越少類別間的相依關係,則系統或程式發生錯誤就
越少。
• 這個UML的圖形顯示Play_lotto類別包含了Lotto類別,而虛線箭頭是
表示使用(相依)的關係。Play_lotto類別使用了Lotto類別。Play_lotto
類別會開始(main()開始執行)丟兩個Lotto類別物件的骰子,然後作加
總的工作。
•
關係是二元關係,它是描述兩個類別間
的活動。例如學生可以選取科目,老師
可以教導科目。這是以UML的方式來表
式。關係間有著多重的關係。6…99表
示參與一門科目的學生數量是從最少6
人到最多99人。*表示有很多科目。0..5
表示一個老師可以教授的科目數量。
•
類別間有著關係,最常見的關係是相依
dependency、聚集aggregation和繼承
inheritance。這是UML的表示方法,分
別為相依、繼承、聚集。
•
這是class0類別相依於class1類別,虛
線的鍵頭代表相依於。又稱為類別
class0使用class1類別。
•
這是class2類別繼承於class3類別,實
線的箭頭代表繼承或一般化general。
也可以稱為class3類別是class2類別的
一般化。
• 我們建立Animal類別,然後
Dog類別繼承它,動物Animal
類別是狗Dog類別的一般化。
狗Dog類別是動物類別的特殊
化。因為動物可以是人、老鷹、
獅子、老虎、大象、鯨魚….和
狗,所以我們可以指狗是動物。
狗是動物的特殊化。
•
這是class4類別”has a”擁有
class5類別。Class4類別聚集
class5類別,或者稱為class5是
class4的一部份。聚集關係就像是
整體與部份的關係,例如一輛車子
是由車身、輪子、引擎和方向盤…
等聚集而成。左邊的空心菱形代表
Class4是Class5聚集之處。
•
這是class0是由class1所組成的,
也就是class0包含class1類別型別
的物件。組合的關係比聚集還強。
它有自己的組成部份,具有牢固的
所有權。實作合成的方式是把組成
部份當作類別的成員物件來執行,
把組成部份完全封裝到整體類別裏
面。左邊的實心菱形代表Class0是
由class5組合而成。
1-3-3介面
• 介面允許我們建立一定要被類別實作的方法,而事先不用定義這些方
法如何被處理。介面只提供方法的宣告部份,並不提供方法的實作
implement部份,因此可說介面純為設計用途。多個類別可以同時實
作同一介面所宣告的公用抽象方法。
• 我們使用interface關鍵字來定義介面。實作介面的類別應該使用
implements關鍵字來實作。類別可以實作超過一個以上的介面,只要
使用逗點將這些介面分開。
• 所有在介面裏宣告的方法一定要是公用的public。
• Dog類別繼承父類別Animal,並且實作介面PetOutput,Test類別是主
程式main(),它會使用Dog類別,這是UML的表示法。寵物叫聲介面
PetOutput就是我們的介面,我們使用<<interface>>來表示它為介面。
介面有宣告寵物叫聲sound(),它會被狗Dog類別實作,這樣狗就會有
叫聲。因為所有的動物或寵物都有叫聲,只要它們實作寵物叫聲
PetOutput,那這個動物或寵物就有叫聲了。
1-3-4抽象類別
•
•
Java支援抽象類別。抽象類別裏面宣告
了很多沒有被定義的函數,也就是該函
數主體是空的,這些還沒被定義的函數
就被稱為抽象abstract函數。定義抽象
類別,我們需使用abstract修飾子放到
class類別的前面。
在UML中抽象類別的名稱是斜體字。
Animal為斜體字,因此為抽象類別。它
被實體類別Dog給繼承。
1-3-5套件
•
•
•
在Java語言中,有內建的標準類別函式
庫。Java標準類別資料庫為Java程式開
發的內建類別資料庫。Java內建類別資
料庫通常都內建在Java的編譯器上或
Java的開發環境上。我們程式設計師經
常會用到Java標準類別資料庫,在程式
設計時,我們只要呼叫它,就可以完成
特定的功能,而不用再去撰寫新的類別
或方法。字串類別就是屬於Java標準類
別資料庫,我們直接使用它,只要用物
件,後面再接方法就可以用它了。例如
我們可以輸入java.lang中套件所有的類
別。
import java.lang.*
這是package1套件中包含三個類別,
分別是Class0類別、Class2類別和
Class1類別。
•
•
•
這是表示class0中,public、protected、
default和private的資料和方法能夠被在
相同套件package1中class1類別存取的
情況;class0被子類別class2存取情況;
class0被在不同套件中的子類別class3
存取情況;class0被在不同套件class4
存取情況。
沒有修飾子的資料、方法或類別,不可
以在不同套件外被存取,例如變數z。
這是UML的表示方法。
1-4循序圖Sequence Diagrams
• 循序圖說明物件之間如何的互動,並且說明訊息的順序,數個物件之
間是如何發送或接收訊息。循序圖有兩根軸線,垂直線表示經過時間,
而水平線則表示許多物件。我們使用循序圖來表示特定情節的互動情
形,在系統執行期間的某些時間點物件之間互動的情況。
• 這是建立UML循序圖的過程。
• 分析使用者案例,並建造該循序圖。
• 分析那一個實體初使化使用者案例,是使用者或是類別的物件。
• 對每一個物件都畫一個長方型來代表。
• 畫一個瘦長的長方型來代表函數的執行。
• 畫一個箭頭的線,代表它執行的方向。
• 分析那一個實體處理這個操作。
• 給這個函數一個名稱。
• 使用長條圖來顯示一個行程的開始。
• 繼續每一個使用者案例的新狀態。
系統邊界
物件1
物件2
物件3
境情者用使
經過時間
•
長方型代表物件:類別。左邊是物件名稱,
然後接冒號”:”,再接類別名稱。
•
物件方框內含上底線的物件或類別名稱
來表示各個物件,和物件在一起的垂直
破折線則是生命線(lifeline),表示在一
連串執行過程期間物件所執行的動作。
循序圖是由圖的頂端開始往下執行,隨
者時間的經過,物件間所發生的訊息交
換。訊息也有順序編號,方便我們了解。
同步的訊息是以實心的箭頭表示,而回
傳則是以帶箭頭的破折線來表示。
•
•
•
•
•
•
這是購物網店員結帳的情境分析。
使用者案例:
店員結帳。
店員讀取條碼。
初始化結帳。
結帳選項顯示。
•
•
•
•
•
•
•
這是購物網顧客使用者結帳的情境分析,
使用者向店家租用漫畫書,則需要刷漫
畫書的條碼,並且輸入要租借的時間,
然後應用程式會儲存我們的租借記錄,
並且列印出來我們使用者的帳號狀態。
使用者案例:
1.使用者輸入條碼。
2.應用程式提示租借時間。
3.使用者輸入租借時間。
4.應用程式儲存記錄。
5.應用程式列印使用者的帳號狀態。
1-5狀態圖State Diagrams
•
•
•
狀態圖state diagram是用來描述系
統行為的技術。它用來描述某個物
件所有可能的狀態和物件隨者不同
事件event來去改變它的狀態state。
狀態圖主要是為一個物件類別圖而
畫,它可以描述一個物件存活時的
行為。
實心黑圓圈為開始的狀態。狀態和
狀態間有轉移transition。每一個狀
態都顯示成圓角矩形,裏面有狀態
名稱。終點則顯示包圍者小實心圓
的圓圈。
一開始就開發票給消費者,因此到
了消費者未付款的狀態,如果消費
者付款了則到銷帳的狀態,最後到
結束的狀態。
•
•
有三種標準的事件名稱在UML裏面,進
入、離去和實行。進入事件在進入某個
狀態時,可用來指定所實行的動作,例
如分配屬性或傳答訊息。離去事件是從
某個狀態離開時,可用來指定所實行的
動作。實行事件可用來指定處於狀態當
中所要執行的動作,例如傳答訊息、等
待中或運算中。
這是電梯的狀態圖。一開始電梯在一樓,
電梯在第一層樓的狀態,然後有人搭電
梯往上,因此到電梯往上的狀態,然後
到達某一層樓而停止,這時電梯在電梯
停止的狀態。這時後轉移transition(狀
態的轉移)有三個方向,一個是電梯往
上,一個是電梯往下,一個是停止時間
到了,如果電梯往上則到電梯往上的狀
態,電梯往下則到電梯往下的狀態,如
果電梯的停止時間到了則會移動電梯到
第一樓的狀態。這個狀態機並沒有終點。
1-6活動圖Activity Diagrams
•
•
活動圖描述活動和資料的流程或者描述
活動間的決策。活動圖提供一個非常寬
的商業流程視野,而且優於顯示平行執
行緒。當在許多的使用者案例中使用工
作流程時就需要使用到它。當在分析使
用者案例時和情境分析就會使用到活動
圖。當在處理多執行緒的應用程式時也
會應用到活動圖。
這是活動圖的開始狀態。
•
•
•
這是購物網處理訂單的活動圖。當收到
訂單時,我們要準備訂單上的商品,同
時還要確認是否已經收到消費者的匯款。
當要寄送商品時,我們可以選擇宅即便
或郵寄包裹,並且通知消費者已經寄出
商品。最後結束訂單。
在收到訂單後,會有分叉,最後在結束
訂單前,會有會合。分叉後,會有平行
的行為,需要同步,當只有已經通知消
費者已經寄出和寄出商品後才會到結束
訂單的狀態。
在準備訂單上的商品後會有分支,在選
取宅即便或郵寄包裹後會合併。
1-7UML軟體
•
我們可以到http://jude.esm.jp/下載
JUDE軟體,它是UML模型的工具軟體,
目前為免費使用。UML描述語言有很多
種軟體,包含了Rational Rose(IBM的
軟體),Visual-Paradigm公司的UML軟
體。我們也可以在Linux上使用
Umbrello軟體,這是在Linux上使用的
軟體。這是JUDE的軟體。
1-8-1安裝JUDE
•
•
我們將下載的jude-community-1_5_2setup.exe軟體JUDE給安裝。我們選取
英文English。
我們可以選取Diagram來選取我們所要
繪製的圖形。