《软件工程导论》实验报告五 设计建模工具的使用(一)类图
目 录
一、实验目的
二、实验环境
三、学时分配
四、实验内容与步骤
1. 百度搜索1-2张类图,请重新绘制它们,并回答以下问题:
2. 根据以下描述,提取这个问题涉及的类,定义各个类之间的关系,并画出类图。
3. 某报社采用面向对象技术实现报刊征订的计算机管理系統,该系统基本需求如下:报社发行多种刊物,每种刊物通过订单来征订,订单中有代码、名称订期、单价、份数等项目,订户通过填写订单来订阅报刊。报社下设多个发行站,每个站负责收集登录订单、打印收款凭证等事务。报社负责分类并统计各个发行站送来的报刊订阅信息。
4. 请查阅相关资料,描述自己所了解的航天飞船等相关内容,并绘制出对应的类图。
5. 【思考题】:试分析类与类之间的关联、泛化、依赖和细化四种关系,以及类图的作用。
五、实验问题及解决方法
六、实验心得
一、实验目的
1. 掌握面向对象分析中的建模工具——类图,理解面向对象的对象模型,模拟应用程序的静态视图,为其他图(如顺序图、交互图)奠定基础;会熟练使用建模工具,分析并建立相应的模型。
2. 掌握应用Visio等业界常用的建模工具的基本使用方法和基本绘图操作,选择一种并熟练使用,会使用该工具针对具体问题建立分析模型。
二、实验环境
1. 操作系统:Windows 操作系统。
2. 操作软件:WPS 文档编辑器、建模工具 boardmix。
3. 硬件设备:笔记本电脑一台。
三、学时分配
学时分配: 2 学时。
四、实验内容与步骤
1. 百度搜索1-2张类图,请重新绘制它们,并回答以下问题:
1)有哪些类;
2)有哪些关系;
3)简要描述该图的作用;
要求:所绘制的图不得与本文中其它习题一样。
(1)在百度上搜索一张学籍管理系统的类图,重新绘制后的学籍管理系统类图如图5-1所示:
图5-1 学籍管理系统类图
1)有哪些类;
答:学籍管理系统中总共有学生、教师、系统管理员、学生信息库、教师信息库、系统管理员信息库、学籍管理系统七大类。
2)有哪些关系;
答:学生和学生信息库之间、教师和教师信息库之间以及系统管理员和系统管理员信息库之间都是聚合关系;学生和教师之间以及教师和系统管理员之间都是双向关联关系;学生信息库、教师信息库以及系统管理员信息库和学籍管理系统之间都是聚合关系。
3)简要描述该图的作用;
答:学籍管理系统包含了多个学生信息库、教师信息库以及系统管理员信息库,同时学生信息库中包含多名学生、教师信息库中包含多名教师、系统管理员信息库中包含多名系统管理员。学生具有姓名和学号,并且可以进行注册、选课和查询个人考试信息;教师具有姓名和工资号,并且可以进行注册、授课和安排学生考试;系统管理员具有姓名和工资号,并且可以进行注册、管理学生信息、管理教师信息和管理选课系统。通过此类图可以清晰地展示学籍管理系统中各个类之间的关系,有助于开发者理解系统的整体结构和功能,帮助测试者更好地理解系统的结构和功能,从而更有效地进行测试和辅助教学。
(2)在百度上搜索一张学生选课系统的类图,重新绘制后的学生选课系统类图如图5-2所示:
图5-2 学生选课系统类图
1)有哪些类;
答:学生选课系统中总共有用户、学生、选课情况、课程信息、课程表五大类。
2)有哪些关系;
答:学生和用户之间是泛化关系;学生和选课情况之间、学生和课程表之间、学生和课程信息之间都是关联关系;课程信息和课程表之间是组合关系。
3)简要描述该图的作用;
答:学生选课系统中所有的学生都是用户,但是并非所有的用户都是学生。课程信息是课程表的一部分,学生可以查看自己的选课情况以及自己的课程表和对应的课程信息。用户具有账号、密码和姓名,可以进行登录和修改密码的操作;学生可以进行选课、查询选课情况和查询成绩;选课情况中具有学号和课程号,可以进行查询、增加课程和删除课程;课程信息具有课程名称、课程号、任课教师、学分、上课时间、上课地点、总学时、周学时、限选人数和现选人数,可以增加选择和取消选择;课程表具有专业、课程号、课程名称、任课教师、上课地点、上课时间,可以增加课程、删除课程、查询课程并进行发布。通过此类图可以清晰地表达学生、课程和选课等元素之间的关系,包括学生与课程之间的关联关系、学生与选课之间的关联关系等。这有助于开发者理解系统的整体结构,并能够更好地进行设计和开发,从而更快地掌握系统的开发方法。
2. 根据以下描述,提取这个问题涉及的类,定义各个类之间的关系,并画出类图。
汽车和自行车都是交通工具 。一辆自行车只能归一个人拥有,但一辆汽车可归一个人或者两个⼈拥有。一个人可能没有自行车或者汽车,也可能拥有多辆自行车或者汽车。每个人都具有年龄和名字。每辆汽车都有自己的颜色和商标。
根据题意可知总共有交通工具、汽车、自行车和人四大类,汽车和交通工具之间以及自行车和交通工具之间都是泛化关系,而汽车和人之间以及自行车和人之间都是关联关系。其中汽车具有color和brand两个属性,人具有name和age两个属性,对应的交通工具类图如图5-3所示:
图5-3 交通工具类图
3. 某报社采用面向对象技术实现报刊征订的计算机管理系統,该系统基本需求如下:报社发行多种刊物,每种刊物通过订单来征订,订单中有代码、名称订期、单价、份数等项目,订户通过填写订单来订阅报刊。报社下设多个发行站,每个站负责收集登录订单、打印收款凭证等事务。报社负责分类并统计各个发行站送来的报刊订阅信息。
请就此需求建立这个报刊征订的计算机管理系统的对象模型。
根据题意可知总共有报社、刊物、发行站、订单和订户五大类,报社与刊物之间、刊物与订单之间、发行站与订单之间以及订单与订户之间都是关联关系,报社与发行站之间是聚合关系。其中报社可以进行分类和统计报刊订阅信息;发行站可以收集登录订单和打印收款凭证;订单具有code、name、regular、price、copies五个属性;订户可以填写订单,对应的报刊征订的计算机管理系統类图如图5-4所示:
图5-4 报刊征订的计算机管理系统类图
4. 请查阅相关资料,描述自己所了解的航天飞船等相关内容,并绘制出对应的类图。
例如:神舟六号飞船是神舟飞船系列的一种,它由轨道舱、返回舱和逃逸救生塔组成。航天员可以在返回舱内驾驶飞船,轨道舱则是航天员工作和休息的场所。在紧急情况下,可以利用逃逸救生塔逃生。在飞船两侧有多个太阳能电池翼,可以为飞船提供电能。
(说明:可直接根据上述例子中的描述绘制“飞船系统”的类图,也可自己描述进行绘图)
根据题意可知总共具有神舟飞船系列、神舟六号飞船、太阳能电池翼、轨道舱、返回舱、逃逸救生塔以及航天员七大类,神舟飞船系列和神舟六号飞船之间是泛化关系,神舟六号飞船和太阳能电池翼之间、航天员和轨道舱之间、航天员和返回舱之间、航天员和逃逸救生塔之间都是依赖关系,神舟六号飞船和轨道舱、返回舱以及逃逸救生塔之间都是聚合关系。其中轨道舱可以工作和休息;返回舱可以进行飞船驾驶;逃逸救生塔可以逃生,对应的神舟飞船系列类图如图5-5所示:
图5-5 神舟飞船系列类图
5. 【思考题】:试分析类与类之间的关联、泛化、依赖和细化四种关系,以及类图的作用。
(1)关联关系也是依赖关系的一种特例,表示类与类之间的关系,如果一个类,类中有成员变量,且成员变量是一个类,则它们就构成关联关系。在类图中,关联关系通常用一条线表示,可以在线上添加箭头表示方向或多重性,对应的关联关系图如图5-6所示:
图5-6 关联关系图
(2)泛化关系是一种特殊的依赖关系,实际上也就是继承关系。A类是B类和C类的父类,B、C有共用父类A,说明 A 类是B、C类的泛化,假如B、C继承了A类,A就和B、C存在泛化关系。在类图中,泛化关系用一条带有箭头的线表示,箭头指向父类,对应的泛化关系图如图5-7所示:
图5-7 泛化关系图
(3)依赖关系是最常见的一种关系,是一种使用关系,即一个类的实现(或部分方法的实现)需要另外一个类的协助,所以应尽量避免双向的互相依赖关系。对象A持有对象B的引用,对象A需要借助对象B的协助,假如A是一个类,那么B可以是局部变量,也可以是类中方法参数,或者对静态方法的调用;(对象A可以依赖B,也可以不依赖B,用到了有B的部分方法就依赖了B)。在类图中,依赖关系通常用一条带有箭头的虚线表示,箭头指向被依赖的类,对应的依赖关系图如图5-8所示:
图5-8 依赖关系图
(4)细化关系是一种特殊形式的泛化关系,它表示一个更具体的类(子类)继承了一个更通用的类(父类)的属性和行为。在类图中,细化关系可以用一条带有箭头的实线表示,箭头指向被细化的类,对应的细化关系图如图5-9所示:
图5-9 细化关系图
(5)类图是一种用于描述软件系统的静态结构的图形表示方法,它包含了系统的类、接口、属性、方法以及它们之间的关系。第一,类图可以清晰地展示系统的各个组成部分以及它们之间的关系。第二,通过绘制类图,开发人员可以更好地理解系统的结构和功能,从而更好地设计和实现系统。第三,类图可以帮助开发人员了解系统的详细信息,包括类的属性和方法以及它们之间的关系,有助于开发人员在编程时更好地理解系统的需求和设计。第四,通过观察类图测试人员可以更好地理解系统的结构和功能,从而更有效地进行测试。同时类图也可以帮助开发人员在系统维护时更好地理解和修改系统的结构。第五,类图可以作为文档记录系统的结构和组织方式,供开发人员和其他相关人员查阅和理解。同时通过绘制类图可以将系统的结构和设计思路传递给其他开发人员或新成员。
五、实验问题及解决方法
(1)实验问题:类图过于复杂,难以理解和维护。
解决方法:将类图划分为多个子图或模块,并使用包图或其他工具来组织它们之间的关系。
(2)实验问题:无法准确地表达类之间的关系。
解决方法:仔细分析类之间的关系,并使用正确的线条和标注来表示它们,如果关联关系复杂,可以考虑使用其他图来表示。
(3)实验问题:类的属性和操作没有正确展示。
解决方法:在类图中列出所有属性和操作,并使用恰当的表示方法,属性应该显示其类型和名称,操作应该显示其参数和返回类型。
(4)实验问题:类的命名不准确。
解决方法:使用准确的命名来描述类的功能和属性,避免使用模糊或易混淆的名称,以使读者更容易理解类的作用。
(5)实验问题:忽略类之间的交互。
解决方法:在类图中显示类之间的所有交互,包括消息传递和数据共享等,有助于读者更好地理解类之间的协作关系。
(6)实验问题:类的继承关系无法准确表达。
解决方法:在类图中明确表示类的继承关系,使用箭头和标注来表示继承关系。
(7)实验问题:类图缺乏必要的包和子系统划分。
解决方法:使用包图来组织类图中的类和接口,以保持类的清晰和易于管理,可以根据需要将类图划分为多个子系统或模块,并使用包图来表示它们之间的关系。
(8)实验问题:类的定义不清晰。
解决方法:如果类的定义不清晰,将导致整个类图的不准确,明确类的职责和属性,确保类的定义完整且易于理解。
(9)实验问题:类的命名不统一。
解决方法:遵循统一的命名规范,确保类的命名准确、清晰且易于理解。
六、实验心得
1、在绘制类图之前,我认识到深入理解业务逻辑和需求是非常重要的。只有了解系统的功能需求和业务流程,才能准确地确定类之间的关系和属性。这有助于确保类图的一致性和准确性,因此在开始绘制类图之前,我会尽力与业务人员交流,了解业务需求和流程,以便更好地理解业务逻辑。
2、在绘制类图的过程中,我深刻体会到合理使用UML规范的重要性,UML是一种通用的建模语言,提供了丰富的符号和标记方法,可以帮助我们准确地表达复杂的系统和模型。但是如果使用不当,反而会影响图的可读性和理解性。因此在绘制类图时要遵循UML规范,使用正确的符号和标记方法,以提高图的可读性和可理解性。
3、在绘制类图时,我意识到适当简化类图是非常重要的,类图是一种静态建模方法,用于描述系统的结构和组织方式。但是如果类图过于复杂,就会影响读者的理解和分析。因此在绘制类图时,要适当简化图的内容,突出重要的类和关系,避免过多的细节和复杂性。
4、在绘制类图时,我深刻体会到注重细节和质量的重要性,一个高质量的类图可以清晰地表达系统的结构和组织方式,而一个质量差的类图则会给读者带来困惑和误解。因此在绘制类图时,要注重细节和质量,确保每个类和关系的描述都是准确和清晰的。
5、在绘制类图的过程中,我认识到不断迭代和优化是非常重要的,类图是一种建模工具,可以帮助我们分析和设计系统。但是由于我们对系统的理解和需求的变化,类图也需要不断地迭代和优化。因此在绘制类图的过程中,要不断地检查和修正图的准确性和完整性,以确保类图能够满足系统的需求和变化。