miniyuan
面向对象技术引论第一次作业
1. 用况、用况图及其关系
-
什么是用况:
使用视角:用况是对操作者使用系统的一项功能时所进行的交互过程的描述。
系统设计视角:一个用况规约了系统可以执行的一个动作序列。包括一些可能的变体,并对特定的操作者产生可见的、有值的结果。
-
用况图的作用:
用况图的作用是从用户或外部系统的视角描述系统的功能需求,明确系统边界、参与者、用况以及它们之间的关系,便于需求分析人员、开发人员和用户沟通。
-
参与者和用况之间的关系:
参与者和用况之间主要是关联关系,也称通信关系,表示某个参与者参与或触发某个用况。在用况图中,参与者通常画成小人,系统功能画成椭圆,二者之间用实线连接。
-
用况和用况之间的关系:
- 包含关系:一个用况总是需要复用另一个用况的行为。表示为带箭头的虚线,标注
<<include>>,箭头指向被包含的用况。 - 扩展关系:某个用况在特定条件下对基础用况进行补充。表示为带箭头的虚线,标注
<<extend>>,箭头指向被扩展的基础用况。 - 泛化关系:一个用况是另一个用况的特殊形式。表示为实线空心三角箭头,箭头指向更一般的用况。
- 包含关系:一个用况总是需要复用另一个用况的行为。表示为带箭头的虚线,标注
2. 类之间关系的概念
类图中描述类之间关系常用以下概念:
- 关联:表示两个类的对象之间存在结构性联系。通常用实线表示,可在两端标注角色名和多重性。
- 聚合:一种特殊形式的关联,表示弱整体-部分关系,部分对象可以脱离整体对象存在。用空心菱形表示,菱形在整体一端。
- 组合:一种特殊形式的关联,表示强整体-部分关系,部分对象依赖整体对象存在,整体销毁时部分也随之销毁。用实心菱形表示,菱形在整体一端。
- 泛化:表示继承关系,即子类是父类的一种特殊类型。用实线空心三角箭头表示,箭头指向父类。
- 实现:表示类实现接口或规格。用虚线空心三角箭头表示,箭头指向接口。
- 依赖:表示一个类在较弱程度上使用另一个类,例如方法参数、局部变量或临时调用。用带箭头的虚线表示,箭头指向被依赖者。
此外,还常用多重性表示一个类的对象与另一个类的对象之间的数量关系。
3. 社交平台用户部分类图的问题与改正
原图的问题主要有:
- 关系类型错误:用户和用户帖子、用户评论、用户点赞之间画成组合关系不合适。帖子、评论、点赞更像用户参与或产生的内容/行为记录,不应简单看作用户的组成部分。
- 类名冗余:类名“用户帖子”、“用户评论”、“用户点赞”把关联角色写进了类名。更合理的类名应是“帖子”、“评论”、“点赞”,用户与它们之间的关系通过关联名称表达。
- 缺少多重性:例如一个用户可以发表多篇帖子、多个评论、多个点赞记录。
- 类图信息不完整:所有类仅显示了类名,缺少属性栏(如帖子的标题、内容、发布时间)和必要的操作。
- 缺少内容间关系:原图没有表现评论、点赞与被评论/被点赞对象之间的关系。
可改为:
4. 图书状态类图的问题与改正
原图的问题主要有:
- 关系类型错误:把可借、已借出、修复中画成了图书的子类。实际上这些不是图书的种类,而是同一本图书在不同时刻可能处于的状态。应建模为状态属性,而不是继承层次。
- 类图信息不完整:所有类仅显示了类名,缺少属性栏和必要的操作。
可改为:
5. 文件夹与文件类图的含义
该类图表达了文件系统中的层次结构,其中空心菱形表示聚合关系,1 和 * 表示多重性:
- 文件夹与文件之间是聚合关系。一个文件夹可以包含多个文件,一个文件属于一个文件夹。
- 文件夹与文件夹之间也是聚合关系。一个父文件夹可以包含多个子文件夹,一个子文件夹属于一个父文件夹。
不过系统中子文件夹到父文件夹的多重性似乎应该改为 0..1?因为根文件夹没有父文件夹。
6. 绘图软件类图的问题与改进
原图的主要不足有:
- 关系类型缺失:成组图形与图形之间仅画了泛化,未画组合/聚合关系,无法表达”成组图形由多个图形组成”的递归结构。
- 缺少多重性:图片与图形、成组图形与子图形之间均未标注
1对*的多重性。 - 基类未标记抽象:
图形作为基类应标注<<abstract>>。 - 类图信息不完整:所有类仅显示类名,缺少属性(如圆的半径、矩形的长宽)和操作(如
draw())。
可改进如下:
7. 代码仓库托管平台类图
约束说明:
- 仓库的拥有者可以添加其他用户为协作者。
- 审核 PullRequest 的用户应是目标仓库的协作者。
- PullRequest 的状态可包括“待审核、已通过、已拒绝、已合并”。
- 只有审核通过的 PullRequest 才能合并到仓库代码中,合并后会形成新的提交或修改仓库的代码历史。
8. 自动售货机顺序图
该顺序图覆盖了用户选择商品、售货机检查库存、缺货提示、扫码支付、支付成功出货和支付失败提示等主要流程。