建立类图和对象图(实例)
类图的抽象层次
在软件开发的不同阶段,使用的类图具有不同的抽象层次:
- 概念层类图
- 逻辑层类图(说明层类图)
- 实现层类图
概念层类图
用于需求分析阶段,描述应用领域中的概念:一般这些概念与类有很自然的联系,但未必有直接的映射关系。
独立于程序设计语言,类的描述一般只有类名,可能有少量属性和操作名称。
也可以用分析类表示。
逻辑层类图
逻辑层(说明层)类图用于概要设计阶段.
描述软件的功能声明部分,不是实现部分:声明的功能可能因为实现环境、运行特性等而有不同的实现。
主要列出属性和操作名称。
实现层类图
用于详细设计阶段,考虑类的实现问题。
针对具体编程语言,提供类的实现细节。
主要列出属性和操作的细节信息,如属性的数据类型、默认值等,操作的参数、返回类型等。
此时的类,才是真正的严格意义上的类。它揭示了软件实体的构成情况。
一般步骤
-
研究分析问题域,确定系统需求;
(根据需求清单,或者用例模型) -
确定类,明确类的含义和职责;
-
确定类之间的关系
(泛化、实现、依赖、关联、聚合、组合) -
确定类的属性和操作;
(类的操作是依赖 其属性的,可以借助于交互图建模完成操作的定义) -
调整和细化类及其关系,并增加相应说明
(角色、多重性、约束等); -
考虑是否有接口。
建模前
确定类-找名词
【注意】在泛化关系中,父类中可以被子类继承的属性和操作,在子类中不再添加。
注意
-
在使用名词/动词法寻找类时,很多团队会耗费大量时间,特别是对于大中型项目,建议无须咬文嚼字,要抓住本质。
-
关键是对问题领域建立概要的了解,首先考虑参与者类和实体类。
找到名词
筛选
分析属性
将相同的属性合并
例子:
在外卖订餐系统中,用户具有编号、姓名、邮箱地址。
分析操作
类的操作是依赖其属性的,也就说,类的操作需要和类属性相关。
需求描述:
- 在外卖订餐系统中,用户具有编号、姓名、邮箱地址。
- 用户可以使用系统查看菜单。可以对订单进行管理,如 生成订单、结账和取消订单。用户还可以修改个人信息。
下面图中,左边就是错误的,因为用户没有菜单的属性;需要改成右边的形式。
修改后:
确定关系 - 找动词
常用动词识别法。
建模
如何解决类名字和之前的参与者名字冲突?
直接使用参与者当作类,当作概念类。
需要更改样式
然后设置显示属性和操作。
属性除了接口,可见性都要是私有的
操作的可见性一般都是公共的
如果题目没有给出属性的类型,可以不写出属性类型
创建模板类
添加关联类
添加限定符
- 双击关联关系
- 右下角,勾选isID
- 双击{id}选qualifier,就会添加
- 添加后可以将isID取消,即可隐藏id两字
聚合、组合(部分到整体)
左下角直接添加即可
多重性、角色( end.name)
右下角选择multiplicity/role 直接添加即可
当接口为棒糖图时,能否定义属性和操作?(能)
建模样例:
建模扩展
双向工程
正向工程
将模型图,转换为各种编程语言。
在SU中,这些语言包括JAVA、C++、C#、Python等。
使用SU生成代码的步骤(以Java为例):
Tools | Java | Generate Code
依次选择包位置(视图模型),选择类,选择输出位置
点击tools Extension Manager
选择需要的编程语言Install
然后再点击tools,选择下载的语言 Generate Code
逆向工程
逆向工程(反向工程):
在SU中,可以通过收集有关类、类的属性和操作 、类与类之间的关系以及包等静态信息,将这些信息转化成为对应的模型,在相应的图中显示出来。
使用SU生成模型的步骤(以Java为例):
Tools | Java | Reverse Engineer
依次选择源码文件,选择类,选择包位置(视图模型)
注意: SU4.x中,须先通过Tools | Extension Manager命令,注册安装相应的编程语言。
练习1
必修课(CompulsoryCourse)和选修课(OptionalCourse)都是课程(Course)的一种。一名教师(Teacher)可以不教授任何课程,也可以教授多门课程。一门课程至少有一名任课教师,至多有三名任课教师。每个教师都具有教师编号(Tid)和姓名(Tname),每门课程都具有课程编号(Cid)和课程名称(Cname)。
要求:
(1) 先根据描述画出类图。
(2) 然后修改类图:利用关联类教授(Instruct),将多对多关系转换为两个一对多关系。(注意:关联类不会改变类图中原有关联的多重性,只是从语义上有所变化)
答案:
练习2
问题:图书借阅者(Borrower)可以分为学生(Student)和教师(Teacher)两种。一名借阅者可以不借阅任何一本图书(Book),也可以借阅多本图书。一本图书至多被一名借阅者借阅。每个借阅者都具有借阅者编号(uId)和姓名(uName),每本图书都具有图书编号(bId)和图书名称(bName)。
要求:
① 先根据描述画出基础类图。
② 再利用关联类借阅(Loan)存储关联新属性借阅日期(loanDate)。
③ 然后利用限定符使其可以表示对于一个借阅者,给定一个图书编号(bId)后,查询结果只对应了0或1本图书。
注意:只提交最终的类图!
答案:
练习3
问题描述:
-
微信支付是一种非常方便的电子支付方式。
-
顾客线下购买完商品后,卖家计算总价,并出示二维码(二维码由图片和账号组成)。
-
顾客扫码后,输入支付金额,点击支付;如果微信余额足够,则余额支付,
如果余额不足,则调用银行支付接口,从银行卡支付。
-
顾客输入正确密码,支付完成。
要求:根据以上描述,建立类图(需要定义核心类的主要属性和操作)。
答案:
概念类图与分析类图
概念类图
对应的分析类图
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16671563.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步