虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
目录
类建模,描述系统内部对象的特征、对象之间的相互关系以及对象所属的每个类的属性和操作,捕获系统的静态特征。
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..之间的交易