1. 程式人生 > >《UML面向物件建模與設計》第3章——類建模

《UML面向物件建模與設計》第3章——類建模

雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正!

目錄

3.1物件和類的概念

3.2連結和關聯的概念

3.3泛化和繼承

3.5類模型導航


類建模,描述系統內部物件的特徵物件之間的相互關係以及物件所屬的每個類的屬性和操作,捕獲系統的靜態特徵。

3.1物件和類的概念

 

如圖,每個引數都會有一個方向、名稱、型別預設值

方向:表示引數是輸入(in)、輸出(out)、還是可修改的輸入引數(inout)。

3.2連結和關聯的概念

 連結和關聯用來建立物件和類之間的聯絡。

3.2.1連結和關聯

一個關聯的連線連線同一個類的多個物件

關聯本質上是雙向的。

 引用:在一個物件中引用另一個物件的屬性。

3.2.2 多重性

 

多重性:指定了一個類與關聯類的單個例項可能相關的例項數目。約束了相關物件的數目。

 

多重性是對集合大小的約束,基數是集合中實際的元素數目。

3.2.3 關聯終端名

就是在關聯那條線兩端寫的東西,比如employee與employer

通過關聯終端名可以統一對同一個類的多重引用。

附在一個類上的關聯遠端的所有名稱都必須是唯一的。

3.2.4   排序

可以通過適當在關聯終端邊旁標上“{ordered}”來表示一個有序的物件集合。

圖:包含大量重疊視窗的工作站螢幕,螢幕上的每個視窗至多出現一次。這些視窗有明顯的順序,因此在螢幕上的任何地方只有頂層視窗是可見的

3.2.5 包和序列

(bag):允許重複值的元素集合

序列(sequence):允許重複值的有序元素集合

在關連端標註{bag}{sequence},就允許在一對物件上有多重連結。

圖:一條航線是一系列有序的飛機場,同一飛機場可以被訪問多次。

{order}和{sequence}是相同的,前者不允許重複,後者允許重複。

序列關聯是一個有序包,有序關聯是一個有序集合。

3.2.6     關聯類

關聯類:是一種關聯,也是一個類。

 這邊補充一道關於關聯類與普通類的例題,也就是書中的例題3.34.

圖左邊的關聯類中,對於每個Person與Magazine,只能有一個Subscription。

圖右邊的關聯類中,對於每個Person與Magazine,可以有多個Subscription,每個Subscription都有自己的跟蹤日期、每次支付金額以及當前有效期。

3.2.7   限定關聯

限定符的表示法:在關聯線靠近源類一端繪製一個小方框,限定符方框可以依附於源類的任何一邊(頂部、底部、左側、右側)。源類加上限定符就產生出目標類。

3.3泛化和繼承

 

3.3.1定義

泛化是指類(父類)與其一個或多個變體(子類)之間的關係。

父類擁有公共屬性、操作和關聯,子類增加了特定的屬性、操作和關聯。每個子類繼承了其父類的特徵。

如類Person擁有公共屬性name,sex等,然後它可以泛化為teacher、doctor等。

泛化是可傳遞的,可以跨越任意層次。

3.3.2   泛化的用途

①支援多型

②架構化描述物件

③支援程式碼複用

3.5類模型導航

遍歷類模型的OCL製品:屬性、操作、簡單關聯、限定關聯、關聯類、過濾器。

OCL表示式可以將多個關聯遍歷連在一起使用。使用OCL,遍歷物件到單個關聯,這樣的遍歷會生成單件或集合。

OCL表示式的示例:

·在某個時間間隔內,某個信用卡賬戶發生了那些交易?

aCreditCardAccount.Statement.Transaction->   遍歷從物件aCre...到State...再到Tran...,生成一組交易

Select(aStartDate <= transactionDate and        OCL操作符select(集合操作符)

transactionDate <= anEndDate)                         找出在時間aStar...到anEnd..之間的交易