直接忽略“面向对象程序设计基础”的内容,即类的概念,继承等,因为这些内容在学习一门面向对象编程语言后一般都了解了
对象类型
1.物理对象和概念对象
物理对象:有形态的具体物体,如:电视机,遥控器
概念对象:无形态的抽象概念,如:帐户,情绪
2.领域对象和实现对象
领域对象:程序要解决的领域中本身包含的对象,如账户,取款机,客户
实现对象:由于计算机程序需要而设计的辅助对象,如:错误恢复日志
3.主动对象和被动对象
主动对象:不再外部刺激下可以改变自身状态,通常用进程或线程实现,如:定时器
被动对象:不改变自身状态,除非接收外部信息
结构建模技术
1.UML中类的表示
类的表示
类名 |
属性1:类型1 属性2:类型 ....... |
操作1:返回类型1 操作2:返回类型2 ...... |
对象的表示
对象:类名 |
属性1:类型1 属性2:类型 ....... |
操作1:返回类型1 操作2:返回类型2 ...... |
在属性,操作前面可以加前缀表示可访问性
- 号 私有
+ 号 公有
# 号 受保护的
类之间的关系
1.继承
2.关联
表示类之间有双向关系,表示对象关系时称链接,链接是关联的实例就像对象是类的实例
在类之间画一条线段表示关联关系
不要去识别所有的类间关系,就像不要把现实对象中的所有属性都写入类中
注:在分析阶段,关联关系常被认为是双向的,即可以从关联关系的任何一段进行跟踪,但在设计阶段,只需要从其中一个方向来实现系统的需求
(1)角色
可以为关联关系线断的一端附加一个角色名,表明相关联的两端的类在关系中扮演的角色,如: 角色:父亲 儿子 关系:父子关系
(2)重数
因为关联表示的是类与类之间的关系,而每个类可以有多个对象
重数表示与指定对象关联的对象可以有多少个
(3)限定
(4)自反关联关系和角色
同一个类的两个对象的关联关系,即类与自己的关联,称自反关联关系,其中,包括单向关联和双向关联
用从一个类图像顶部出发回折连接到类图像的右边的折线表示自反关联,带箭头就可以表示单向关联
课程的单向自反关联:一门课程(如高等数学)以另一门课程(如初等数学)为前导课程,高等数学可以索引饿到初等数学,但是初等数学没有索引到高等数学,因为初等数学有无限种后续课程:物理学,化学,生物学.......不可知它究竟有多少种可后续的课程,也没有必要被索引。
目录的双向自反关联:父目录可以包含零个到多个子目录,子目录可以索引到上一级父目录,父目录也可以索引到下一级子目录
(5)n元关联关系
关联关系通常是二元关系,但类可以有n元的关联关系
用一个连接所有相关类的菱形表示
因为建模阶段,二元关系是类之间最好的关联形式。n元关系可以转化为多个二元关系。
在设计阶段,一些二元关系还可以转换为单向关系
如学生参与某个教授讲授的课程,学生-课程-教授 三元关系可以转化为:
学生注册了课程
教授讲授课程
教授教学生
(6)关联关系类:
有时两个有关联的类的本身内容不足以表示这种关联关系,需要补充另一个类来表示"关系",比如两个人的属性不足以表示他们之间的恋爱关系,那就要创建一个恋爱关系的对象,这个对象可以包含:恋爱关系建立时间,恋爱关系的热度,等,之所以不把恋爱的属性列入“人”的类中,是因为,并不是每两个人之间都有恋爱关系,人的对象在其他场合下,可以有敌对关系,恋爱关系,或者没有关系,在其他场合下,人不体现出"恋爱"这个特征。
在关联线段中间向一侧作垂直虚线连接一个关联关系类图,表示关联关系类
3.聚合关系—— 一种特殊的关联关系
表示整体类与局部类的关系,即一个类属于另一个类的一部分或者说一个类包含另一个类,如团队与队员的关系
在关联线段的连接整体类的那一端使用菱形来表示
(1)组合关系—— 一种特殊的聚合关系
局部对象会在整体对象消失时消失的聚合关系
可以在创建整体对象之后创建局部对象,但是在析构这个整体对象之前,要显式地删除这些对象
一般的聚合关系的菱形使用空心菱形,而组合关系的菱形使用实心菱形
(2)约束和注意事项
"约束"是对UML元素语义的扩展,即补充说明一些UML标准中未定义的限制
用{补充的约束内容}表示约束,如:
账户 |
- 帐号 - 密码{加密的} - 余额{余额>=0} |
在两个关联关系间也可以添加约束
{or}表示"二者得一,不可兼有"关系,{subset}表示子集关系
可以在两条关系线段中间画一条垂直的虚线,并在虚线旁边写上约束
如某俱乐部与客户关系是关联关系,中客户与俱乐部间关系可以是“某客户是俱乐部的会员”的关系,也可以是"某客户是俱乐部的高级会员"的关系,这两种关系中,前者是后者的子集
如笔记本与光驱的关系是聚合关系,笔记本可以拥有CD-ROM,或者DVD,二者之一,但不可二者兼有,即"笔记本拥有CD-ROM",与“笔记本拥有DVD”的两个关系中可以有一种
关于"注意事项":对UML添加注释,用右上角折的折角矩形中写入内容表示