《UML面向物件建模與設計》第3章——類建模
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正!
目錄
類建模,描述系統內部物件的特徵、物件之間的相互關係以及物件所屬的每個類的屬性和操作,捕獲系統的靜態特徵。
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..之間的交易