课后小结与习题集锦
- UML简介
- 理解面向对象:
- 运用面向对象
- 关系
- 聚集,组成,接口和实现
- 介绍用例
- 用例图
- 状态图
- 顺序图
- 协作图
- 活动图
- 构建图
- 部署图
类图初步
- 类构成:1.三部分:名字(首位大写,其他单词首位大写),属性(其他单词首位大写),方法(其他单词首位大写)
- 包:UML组织图形元素的单位:在类名前面加“包名::”称为路径名
- 属性:类的属性在类的每一个对象中都有具体值+类的属性可以加类型和缺省值
- 操作的型构:有参数,有返回值(通常在分析完,做设计的时候,型构是对编码人员比较有用的信息)
- 如果表达多个类之间的关系,可以只用类名,下面两个框是空的。同样地作用,还有类的省略表示法。
- 职责:描述类的属性和能完成的任务。画图就在下面再填一框。(类的职责是消除二义性的一种非形式化的方法)
- 约束:对类的属性加约束。在类的外面,花括号里面。
- 注释:
- 课后习题:
关系
- 关联:注意加关联的名字和方向+可以加在关联中的角色+标出关联的另一个方向+多个类关联
- 关联上的约束:约束类+表示“或”关系
- 关联类:关联也可以做成类,并且用虚线和关联联系起来
- 对象也可以有关联:关联名要和对象名一样加下划线
- 多重性:*表示many, a..b区间, a,b表示或
- 限定符(ID):本来是一对多的关系,限定起来就变成一对一的关系。
- 自身关联:有多个角色的时候,可能就会自己和自己连。
- 继承:在UML中就是泛化。(是三角空箭头)(在父类中已经指明的属性和操作在子类中可以不指明)(没有父类的是基类或根类)(只有一个父类是单继承,否则是多继承)
- 多态:即允许将子类的指针赋值给父类的指针。(即一个方法有不同的更深的具体实现)
- 抽象类:不提供实例的类。类名用斜体即可。
- 依赖:一个类的型构中使用了另一个类的定义。
- 聚集:一个类是由几部分组成(由空心菱形箭头表示)+聚集上的约束(or)
- 组成:类必须由某些类组成(实心箭头表示)(部分体只能属于一个整体)
-
组成结构图:上面两个是直接展示由谁组成,但要展示组成元素间的关系的话
-
课后习题:(暂略)
接口和实现
- 接口:用一个矩形框表示,上面有《interface》的字样,和类用空心三角虚线连接(和继承有点像)+接口可表示成一个圆圈。
- 使用接口:类通过接口和某个类交互
- 端口:接口和类的交互点。用类上的一个矩形小方块表示。
- 可见性:属性和操作可被使用的范围。 public+(所有), protected#(继承了的才行), private-(最初的自己才行)
- 作用域:
- 课后习题:
- 做类图的步骤:
- 注意名词——会变成类和属性,注意动词——会变成方法。
- 总结和辨析形成初步类图
对象图
- 对象是类的实例
- 对象构成:1. 实例名(其他单词首位大写,记得加下滑线):类名 2.类名(因为还没创建实例)
- 参与者(发起用例的实体):可以是人,也可是另一个系统。
用例图
- 从用户观点对系统行为进行描述。先了解领域分析出类,然后确定功能就有用例,还可以细化到不同场景,所有的用例合起来就是系统的边界,然后细化每个用例考虑包含和扩展,
- 用例:事件的序列
- 参与者:发起用例的实体。
- 场景(包括有异常的部分):一个用例可能有多个场景,可以把场景理解为用例的一条路径。
- 前置条件,后置条件。
- 包含用例:include有相同步骤的可以直接合起来
- 扩展用例:extende额外增加的
- 课后习题:
- 用例初步画法:发起参与者在左,接守参与者在右,用例是椭圆,系统边界是矩形框:
- 每个用例需要说明文档:
- 发起用例的参与者
- 用例的假设条件
- 用例的前置条件
- 场景中的步骤
- 场景完成后的后置条件
- 从用例中获益的参与者
- 包含:《inclde》,线型箭头虚线
- 扩展:
- 扩展点:扩展只能发生在基用例序列的某个点上:比如“在×××之前”
- 《extend》,线型箭头虚线
- 扩展和包含是容易混淆的,箭头从一个指向另一个并不代表先发生。
-
泛化:就是类中的继承
-
用例间的泛化,表示同类的泛化
-
参与者间的泛化
- 课后习题:
状态图
- 表明对象从一个状态到另一个状态的转移
- 点:起始状态 点圈:终止状态
- 状态到状态的转移并不总是线性的,可以由条件转不同。
- 例:洗衣机:浸泡,洗涤,漂洗,脱水
顺序图
- 表达基于时间的动态交互
- 对象:常常使用匿名对象(即 “:类名”)
- 对象能够给自己发送消息
- 消息:并不是所有的消息箭头都有相同的形状。消息上应带有方法,并且有参数。返回的是有交代的结果。
调回|同步:发送者要等接受者发回的消息 | (配合前面的使用) | 异步:接收者不用返回 |
- 如果一个用例结束:则可以在返回消息上加《transacation over》
- 消息传递的条件:[cash>price],只有在返回消息中有,和返回消息的内容是一致的,所以有时可以省略返回消息。
- 实例顺序图:把一个场景用顺序图表示出来。 一般顺序图:将用例的所有场景放到一个图中。
- (自己总结)画出一个顺序图的步骤:1. 确定用例 2.用详尽的语言描述过程 3. 确定用例中的对象 4.确定每个对象的操作 5.画图,先对象后加消息
- 在消息队列中创建实例:《create》
-
对象的销毁: 大写的X在生命线末位,或者由别人发《destroy》进行销毁。
- 帧化和交互,老师提到过,但这么复杂,真的会考吗(?)。
活动图
- 对象之间的活动常常有时间先后
- 活动的转换也不常是线性的,有时涉及条件转换
- 一个活动一旦完成将自动引起另一个活动。
- 活动:圆角矩形表示
- 判定:菱形分开分支,两边路径要表明。
- 并发路径:不是条件分支,是一个操作后,还有多个活动同时进行。
- 信号:凸代表输出事件,凹代表输入事件。
- 泳道:为了方便看活动是由哪个对象进行的。
- 往后还有一些非常高级的概念,暂不解决。
协作图
- 系统中的元素是相互协作的(顺序图也能表达,二者合称交互图)
- 消息:三种表达方式:同步(调用等待接收者返回消息),异步(不用等),返回
构建图
- 软件构建(注意尖括号的作用)
部署图
- 一个立方体表示一个计算机