【软件建模】详解UML中9种模型图
一、软件建模中的模型图是什么
在软件系统中,咱们通过软件建模去定义一个软件系统是什么,具备那些系统功能;
那么我们是如何具体去很好的展示这些定义?
如何描述这个软件系统有什么功能?能干嘛呢?
答案就是:我们是通过软件建模4+1视图去总结描述的,这些视图具体是由什么实现的呢?这就通过一个比较具体的模型图实现的,通过模型图去承载对系统的组件功能和运作机制的描述,更清晰的展示这个系统。
简单来说,模型图就是描述在对系统进行软件建模过程的一个具体体现。
二、如何进行表达模型图
目前软件建模中,比较常用的一种建模方法:面向对象方法(当然也有其他的很多方法,但是比较偏向某种领域)。
面向对象方法建模已经发展成一种建模标准了,使用非常普遍的一种方法,形成了UML(Unified Modeling Language)统一建模语言,是面向对象开发中一种通用的图形化建模语言。
我们可以使用UML建模工具来辅助我们完成模型图。
那么UML的内容组成有哪些呢,我们如何去描绘一个模型图?
UML的组成:由事物、关系、图三部分组成。
1)事物:表示模型图中一个构造块,表示概念上或者物理上的元素,有三类事物:
- 结构事物(用例、类、接口、协作、活动类、组件、节点)
- 行为事物(交互、状态机);组织事物(包)
- 辅助事物(注释)
2)关系:将上面的事件联系在一起,有五种关系:耦合度由强到弱
- 泛化: 指的是类之间的继承或者实现关系,继承使用空心三角箭头+实线表示[<|--],实现使用空心三角箭头+虚线表示[<|..],生命周期:在定义类关系时就必须确定,一开始有效
- 组合:表示个体与组成部分之间的关联关系,组成部分是个体不合分割的一部分[*--],使用实心菱形+实线表示,生命周期:在类实例化时有效
- 聚合:表示集体与个体的关联关系,个体独立于集体,使用空心菱形+实线[o--],生命周期:在调用方法调用时有效
- 关联:表示一个类需要依赖另一个类做成员属性的关联关系,使用箭头+实线表示[-->],生命周期:在类的成员变量内有效
- 依赖:表示一个类需要依赖另一个类做方法的返回值、形参、局部变量或者调用另外一个类方法的依赖关系,使用箭头+虚线表示[..>],生命周期:在类的函数调用时有效
3)图:就是将多个事物联系在一起组成的图,有两种:
- 动态图:状态图,顺序图,合作图,活动图
- 静态图:用例图,类图,对象图,组件图,部署图
在IDEA中,有一款UML建模开源工具插件可以直接在IDEA上面使用,比较方便,叫PlantUML,安装该插件可以使我们很方便的创建各种类型的模型图,并很快的表达出我们的软件系统。在IDEA的插件市场上直接搜索安装后,重启即可目录下右键新建一个PlantUML文件,然后选择创建不同类型的模型图了
PlantUML插件官网地址:开源工具,使用简单的文字描述画UML图。 (plantuml.com)
三、模型图分类及使用
总共有9种模型图:
1)用例图:
用于描述角色(actor)以及角色与用例(use case)之间的连接关系(如:泛化、关联和依赖);说明的是系统实现了那些功能,谁要使用这些系统功能,以及他们使用该系统可以做些什么(与外部交互)。是一种静态模型。
实际使用:用例图就是给出一组用例、参与者以及它们之间的关系。是以参与者(也就是使用者)如何使用系统为核心,描述系统干什么。主要有两点:
(1)识别有价值的客户群体(参与者)
(2)描述系统对外的接口功能(系统干什么吃的)
我们列举一个例子:图书馆管理系统
(1)价值客户群体有:借阅者(教师、学生)、图书管理员、系统管理员
(2)系统具有的功能有:图书借出功能、归还功能、记录功能、预约功能、查询借阅者账户功能、收取借阅者罚款功能
我们使用UML工具将上面的用例图画出来:
(1)puml文件代码:
@startuml
left to right direction
/'角色'/
actor 图书or系统管理员 as admin
actor 借阅者 as user
actor 教师 as teacher
actor 学生 as student
/'用例'/
usecase (把图书归还系统) as return
usecase (把图书借出系统) as lend
usecase (预约借书) as reserved
usecase (检查读者账户) as checkAcc
usecase (收取罚款) as putMoney
usecase (记录归还信息) as recordReturn
usecase (查询查阅信息) as queryInfo
usecase (记录借出记录) as recordLend
usecase (登陆系统) as login
usecase (借阅图书) as lendBook
usecase (预约图书) as reservedBook
usecase (归还图书) as returnBook
usecase (查询图书) as queryBook
usecase (缴纳罚款) as getMoney
/'角色与用例的关系'/
admin --> return
admin --> lend
admin --> queryInfo
admin --> reserved
return .> recordReturn: include
putMoney .> return:extends
queryInfo .> recordReturn: include
queryInfo .> recordLend: include
reserved .> lend:include
lend .> checkAcc:include
lend .> recordLend:include
teacher --|> user:泛化
student --|> user:泛化
user --> login
user --> reservedBook
user --> returnBook
user --> queryBook
user --> lendBook
getMoney .> returnBook:extends
getMoney .> queryBook:include
lendBook .> queryBook:include
reservedBook .> queryBook:include
returnBook .> queryBook:include
reservedBook .> lendBook:extends
@enduml
(2)呈现的用例图:
2)组件图:也叫构件图,用于描述系统的物理结构以及各种构件之间的依赖关系。是一种静态模型。
3)部署图:用于描述系统的物理部署。例如计算机和设备,以及它们之间是如何连接的。是一种静态模型。
4)类图:
用于描述系统中的类,以及各个类之间的关系(如:泛化、实现、依赖、关联、聚合、组合);说明的是系统内部的数据结构,是一种静态模型。
具体来讲就是定义系统中对象和类,类与类之间的关系,以及类的内部结构,即类的属性和操作(方法)
继续看上面的例子,根据用例图,
(1)我们可以定义出系统中具有的类对象有:借阅者、管理员、学生、老师,图书等
(2)这些类对象具有的属性功能有:id,名字,借书数量,书的类别、书的名字、书的二维码等,借书、还书,查看书等
(3)这些类对象具有的关系:实现、继承、依赖等
UML代码:
@startuml
interface bookOperation{
+findBook(string):String
+borrowerBook():String
+returnBook(string):Boolean
}
abstract class Borrower {
+name:string
+bookNum: int
+setBookNum()
+findBook()
+borrowerBook()
+returnBook()
}
class bookRack {
+ barCode:String
+ Type:String
+ totalNum:int
+ bookName
+ getBook()
+ setBook()
}
Borrower ..> bookRack:依赖
Borrower ..|> bookOperation:实现
class Teacher {
+teacherId: int
+setBookNum()
}
class Student {
+studentId: int
+setBookNum()
}
Teacher --|> Borrower:继承
Student --|> Borrower:继承
@enduml
UML类图:
5)对象图:与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。它描述的不是类之间的关系,而是对象之间的关系。是一种静态模型。
6)状态图:用于描述类的对象所有可能的状态,以及事件发生时状态的转移条件,是对类图行为上的补充。是一种动态模型。
7)活动图:用于描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。是一种动态模型。
8)顺序图:也叫序列图或时序图,用于描述参与者与系统对象之间有序的交互过程,强调消息是如何在对象之间被发送和接收的。是一种动态模型。
就是描述系统的功能是如何完成。
我们以上面图书管理系统,描述借阅者从借书到还书这一过程是如何完成
UML代码:
@startuml
autonumber
actor User as user
user -> UserController :借书(Borrower(id))
UserController -> Reservations:查询是否预约:isReserved(id)
UserController <-- Reservations:查询结果:(true/false)
UserController -> Reservations:如果已预约,删除记录:delReserved(id)
Reservations -> Books:更新借书状态:updateState(id)
Books -->Reservations:ok
Reservations -->UserController:ok
UserController --> user:ok
UserController -> Reservations:如果未预约,先登记:registerReserved(id)
Reservations ->Reservations:登记:register(id)
Reservations -> Books:直接借书:borrowBook(id)
Books -->Reservations:ok
Reservations -->UserController:ok
UserController --> user:ok
@enduml
顺序图:
9)合作图:也叫协作图,和顺序图相似,用于描述对象间的动态合作关系。可以看成是类图和顺序图的交集,重点描述对象之间的相互通信关系。如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择合作图。是一种动态模型。
- 点赞
- 收藏
- 关注作者
评论(0)