建立类图和对象图(实例)

类图的抽象层次

在软件开发的不同阶段,使用的类图具有不同的抽象层次:

  1. 概念层类图
  2. 逻辑层类图(说明层类图)
  3. 实现层类图

概念层类图
用于需求分析阶段,描述应用领域中的概念:一般这些概念与类有很自然的联系,但未必有直接的映射关系。

独立于程序设计语言,类的描述一般只有类名,可能有少量属性和操作名称。
也可以用分析类表示。

image

逻辑层类图
逻辑层(说明层)类图用于概要设计阶段.
描述软件的功能声明部分,不是实现部分:声明的功能可能因为实现环境、运行特性等而有不同的实现。
主要列出属性和操作名称。

image

实现层类图
用于详细设计阶段,考虑类的实现问题。
针对具体编程语言,提供类的实现细节。
主要列出属性和操作的细节信息,如属性的数据类型、默认值等,操作的参数、返回类型等。
此时的类,才是真正的严格意义上的类。它揭示了软件实体的构成情况。

一般步骤

  1. 研究分析问题域,确定系统需求;
    (根据需求清单,或者用例模型)

  2. 确定类,明确类的含义和职责;

  3. 确定类之间的关系
    (泛化、实现、依赖、关联、聚合、组合)

  4. 确定类的属性和操作;
    (类的操作是依赖 其属性的,可以借助于交互图建模完成操作的定义)

  5. 调整和细化类及其关系,并增加相应说明
    (角色、多重性、约束等);

  6. 考虑是否有接口。

建模前

确定类-找名词

【注意】在泛化关系中,父类中可以被子类继承的属性和操作,在子类中不再添加。

注意

  1. 在使用名词/动词法寻找类时,很多团队会耗费大量时间,特别是对于大中型项目,建议无须咬文嚼字,要抓住本质。

  2. 关键是对问题领域建立概要的了解,首先考虑参与者类和实体类。

找到名词
image

筛选
image

分析属性

将相同的属性合并

例子:

在外卖订餐系统中,用户具有编号、姓名、邮箱地址。
image

分析操作

类的操作是依赖其属性的,也就说,类的操作需要和类属性相关。

需求描述:

  • 在外卖订餐系统中,用户具有编号、姓名、邮箱地址。
  • 用户可以使用系统查看菜单。可以对订单进行管理,如 生成订单、结账和取消订单。用户还可以修改个人信息。

下面图中,左边就是错误的,因为用户没有菜单的属性;需要改成右边的形式。
image
修改后:
image

确定关系 - 找动词

常用动词识别法。

image

建模

如何解决类名字和之前的参与者名字冲突?

直接使用参与者当作类,当作概念类。
image

需要更改样式
image
然后设置显示属性和操作。
image

属性除了接口,可见性都要是私有的
image

操作的可见性一般都是公共的

如果题目没有给出属性的类型,可以不写出属性类型

创建模板类

image

添加关联类

添加限定符

  1. 双击关联关系
  2. 右下角,勾选isID
  3. 双击{id}选qualifier,就会添加
  4. 添加后可以将isID取消,即可隐藏id两字

聚合、组合(部分到整体)

左下角直接添加即可

多重性、角色( end.name)

右下角选择multiplicity/role 直接添加即可

当接口为棒糖图时,能否定义属性和操作?(能)
建模样例:
image
建模扩展
image

双向工程

正向工程

将模型图,转换为各种编程语言。
在SU中,这些语言包括JAVA、C++、C#、Python等。

使用SU生成代码的步骤(以Java为例):
Tools | Java | Generate Code
依次选择包位置(视图模型),选择类,选择输出位置

点击tools\(\to\) Extension Manager
image
选择需要的编程语言\(\to\)Install
image

然后再点击tools,选择下载的语言\(\to\) Generate Code
image

逆向工程

逆向工程(反向工程):
在SU中,可以通过收集有关类、类的属性和操作 、类与类之间的关系以及包等静态信息,将这些信息转化成为对应的模型,在相应的图中显示出来。

使用SU生成模型的步骤(以Java为例):
Tools | Java | Reverse Engineer
依次选择源码文件,选择类,选择包位置(视图模型)
注意: SU4.x中,须先通过Tools | Extension Manager命令,注册安装相应的编程语言。

练习1

必修课(CompulsoryCourse)和选修课(OptionalCourse)都是课程(Course)的一种。一名教师(Teacher)可以不教授任何课程,也可以教授多门课程。一门课程至少有一名任课教师,至多有三名任课教师。每个教师都具有教师编号(Tid)和姓名(Tname),每门课程都具有课程编号(Cid)和课程名称(Cname)。
要求:
(1) 先根据描述画出类图。
(2) 然后修改类图:利用关联类教授(Instruct),将多对多关系转换为两个一对多关系。(注意:关联类不会改变类图中原有关联的多重性,只是从语义上有所变化)

答案:
image

练习2

问题:图书借阅者(Borrower)可以分为学生(Student)和教师(Teacher)两种。一名借阅者可以不借阅任何一本图书(Book),也可以借阅多本图书。一本图书至多被一名借阅者借阅。每个借阅者都具有借阅者编号(uId)和姓名(uName),每本图书都具有图书编号(bId)和图书名称(bName)。
要求:
① 先根据描述画出基础类图。
② 再利用关联类借阅(Loan)存储关联新属性借阅日期(loanDate)。
③ 然后利用限定符使其可以表示对于一个借阅者,给定一个图书编号(bId)后,查询结果只对应了0或1本图书。
注意:只提交最终的类图!

答案:
image

练习3

问题描述:

  1. 微信支付是一种非常方便的电子支付方式。

  2. 顾客线下购买完商品后,卖家计算总价,并出示二维码(二维码由图片和账号组成)。

  3. 顾客扫码后,输入支付金额,点击支付;如果微信余额足够,则余额支付,

    如果余额不足,则调用银行支付接口,从银行卡支付。

  4. 顾客输入正确密码,支付完成。

要求:根据以上描述,建立类图(需要定义核心类的主要属性和操作)。

答案:
image

概念类图与分析类图

概念类图
image
对应的分析类图

image

posted @ 2022-09-09 09:18  kingwzun  阅读(1013)  评论(0编辑  收藏  举报