作者有话说:原创不易,仅供参考,大家发现有什么错误欢迎在评论区留言,也可以给作者小白一些鼓励。其次,请不要直接搬运或抄袭,文章内容仅用于参考和交流学习,感谢理解~
往期文章
【软件工程】结构化分析与设计——数据流图、SC图、流程图、N-S图
【软件工程】面向对象与UML——用例图、时序图、协作图、活动图、状态图
目录
一、分析类模型
分析类有三种类型:边界类<<boundary>>、控制类<<control>>、实体类<<entity>>,三者图示如下:
1、确定边界类
一个参与者与一个用例间对应一个边界类对象,用于隔离用例和用户,如下图所示:
2、确定控制类
一个用例对应一个控制类,控制类对象夹在边界类对象和实体类对象之间,用于控制系统内操作,如下图所示:
3、确定实体类
实体类对象放在控制类对象后面,可以有多个,用于保存对象信息。
二、餐厅预订系统-UML分析
为在线餐厅预订系统设计一个UML分析类图,该系统允许用户浏览不同的餐厅,查看餐厅详情,选择餐桌,选择用餐时间,并进行预订。
功能需求:
1、用户可以查看餐厅列表,每个餐厅有不同的菜单和可预订的餐桌。
2、用户可以查看每个餐厅的详细信息,包括餐厅的位置、评分、菜单和空闲餐桌。
3、用户选择一个餐厅后,可以选择一个具体的餐桌和预订时间。
4、用户填写个人信息并完成预订过程。
5、系统应确认预订并向用户发送预订详情。
题目要求:
1、分析出实体类、边界类和控制类,绘制使用分析类表示的查看餐厅详细信息的时序图
2、绘制UML分析类图。确保图中包含所有必要的类以及类之间的关系(重数),使用标准UML符号来清晰表达不同类之间的关系,如关联、依赖等
3、简短的说明文档,描述每类的作用和它们之间的关系
1、分析类表示时序图
通过学习面向对象分析可知,一个参与者和一个用例之间要有一个边界类,边界类和实体类之间有一个控制类。从题干中分析出参与者是用户,“查看餐厅详细信息”这个用例的边界类是查看餐厅详情界面,控制类是餐厅详情控制,实体类有位置、评分、菜单、空闲桌椅等。在动态建模的时序图中,首先用户向边界类发送一个查看餐厅信息的请求,边界类通知控制类进行响应,接着依次查看各实体类情况,最后返回餐厅信息给边界类呈现给用户
分析类表示的查看餐厅详细信息时序图如下所示:
2、分析类图
分析步骤
(1)分析用例
用户与系统的用例有:查看餐厅列表用例、查看餐厅详细信息用例、预订餐厅用例、查看预约详情用例。
(2)找出分析类
分析出各个用例的分析类,即边界类、控制类、实体类。
(3)写出类结构
写出各个分析类的结构,即类名、类属性、类操作,如下图所示。
(4)画出类关联
分析各个类之间的关联关系,即普通、递归、多重、有序、限制、聚集、组合、泛化、依赖、约束与派生等关联关系,画出关联关系的图形表示,如下图所示。
(5)添加重数
写上类关联间的重数符号。
(6)整合各用例的分析类图
找出各用例分析类图间的其他关联,把整个系统的分析类图完整画出,
餐厅预订系统的分析类图如下所示:
(这个分析类图实在是有点大,压缩下来太模糊了,我截了一些小图放在下面,拼接一下就是完整的图了,可供大家参考~)
3、说明文档
首先根据题目提取出餐厅预订系统的所有类:用户、查看餐厅列表界面、餐厅列表控制、餐厅、查看餐厅详情界面、餐厅详情控制、位置、评分、菜单、空闲餐桌、预订餐厅界面、预订餐厅控制、具体餐桌、用户个人信息、预订时间、餐厅预订系统界面、确认预订控制、预订详情。
类信息:
1、类名:用户类(参与者)
属性:姓名(string)、手机号(int)
操作:查看餐厅列表()、查看餐厅详情()、预约餐厅()、查看预约详情()
2、类名:查看餐厅列表界面(边界类)
属性:无
操作:显示餐厅列表()
3、类名:餐厅列表控制(控制类)
属性:无
操作:获取餐厅列表()
4、类名:餐厅(实体类)
属性:餐厅名称(string)、菜单(string)、可预订餐桌号(string)
操作:无
5、 类名:查看餐厅详情界面(边界类)
属性:无
操作:显示餐厅详情()
6、类名:餐厅详情控制(控制类)
属性:无
操作:获取餐厅详情()
7、类名:位置(实体类)
属性:地址(string)
操作:无
8、类名:评分(实体类)
属性:分数(string)、评分人数(int)
操作:无
9、类名:菜单(实体类)
属性:菜名(string)、价格(real)
操作:无
10、类名:空闲餐桌(实体类)
属性:空闲餐桌数量(int)、空闲餐桌号(string)
操作:无
11、类名:预订餐厅界面(边界类)
属性:无
操作:显示预订操作()
12、类名:预订餐厅控制(控制类)
属性:无
操作:填写预订信息()
13、类名:具体餐桌(实体类)
属性:餐桌号(string)
操作:无
14、类名:用户个人信息(实体类)
属性:预订人姓名(string)、预订电话(int)
操作:无
15、类名:预订时间(实体类)
属性:预订时间
操作:无
16、类名:餐厅预订系统界面(边界类)
属性:无
操作:显示预订详情()
17、类名:确认预订控制(控制类)
属性:无
操作:确认预订信息()、发送预订详情()
18、类名:预订详情(实体类)
属性:预订人姓名(string)、预订电话(int)、预订餐厅名称(string)、预订餐桌号(string)、预订时间(string)
操作:无
类间关联信息:
1、在查看餐厅列表的用例中,用户类与查看餐厅列表界面类为双向关联,一个或多个用户可以浏览一个查看餐厅列表界面,一个界面可以由一个或多个用户访问。查看餐厅列表界面类和餐厅列表控制类是一对一的关联。餐厅列表控制类与餐厅类是聚集关联,一个餐厅列表包含一个或多个餐厅,一个餐厅属于一个或多个餐厅列表,每个餐厅都是每个餐厅列表的“部分”。
2、在查看餐厅详情用例中,用户类和查看餐厅详情界面类为双向关联,查看餐厅详情界面类与餐厅详情控制类是一对一的关联。餐厅详情控制类和位置类、评分类、菜单类、空闲餐桌类是组合关联,餐厅信息由位置、评分、菜单、空闲餐桌这几个元素组成,一个餐厅包含一个位置、一个评分、多个菜单、0或多个空闲餐桌。
3、在预订餐厅的用例中,用户类和餐厅预订系统界面类是双向关联,餐厅预订系统界面类和预订餐厅控制类是一对一的关联。控制类和预订时间类为单向关联,一个用户可以预订一个或多个时间段。控制类和用户个人信息类是依赖关联,因为用户个人信息需要使用用户的姓名和手机号属性作为预订人姓名和预订电话,两者是一对一的关系。控制类和具体餐桌类是双向关联,一个用户可以预订一或多个餐桌,一个餐桌只能属于一个用户。
4、具体餐桌类跟空闲餐桌类也是聚集关联,0或多个空闲餐桌包括0或一个具体餐桌,每个具体餐桌都是空闲餐桌的“部分”。
5、在查看预订详情用例中,用户类和餐厅预订系统界面类,餐厅预订系统界面类和确认预订控制类都是双向关联。预订详情类跟控制类是单向关联,一个预订详情发送到一个用户。
6、预订时间类、用户个人信息类、具体餐桌类跟预订详情类是聚集关联,一个预订详情包括一或多个预订时间,一个用户个人信息、一或多个已预订的具体餐桌。