软件工程理论与实践第8期-7 面向对象设计
本章的目标是使学生理解面向对象设计原则,掌握架构设计要点,掌握用面向对象方法进行系统设计的方法。能够提交设计模型文档,包括架构设计方案、关键构件和关键类的详细设计。具体的,本章通过具体案例的讨论、分析、设计和实现,使学生将理论应用于实践,加强学生对实际问题的分析和解决能力,以及团体协作和项目管理能力。
目录
7 面向对象设计
7-1 面向对象设计的基本概念
第1关:选择题
相关知识
1、什么是面向对象设计?
面向对象设计(Object-Oriented Design,OOD)就是在面向对象分析(Object-Oriented Analysis,OOA)模型的基础上运用面向对象方法进行系统设计,目标是产生一个符合具体实现条件的OOD模型。
2、面向对象设计(OOD)的目标
提高软件生产率.
1)设计的投入在编程、测试时得到回报
2)面向对象(OO)方法使系统更易于理解
3)分析文档、设计文档、源程序对应良好
4)功能变化引起的全局性修改较少
5)OOD结果的复用
提高质量
1)不仅是事后通过测试排除错误,而是着眼于软件开发过程中的每个环节,从分析、设计阶段开始质量保证。
2)高质量不只是没有错误,而是好用、易用、可移植、易维护,用户由衷的满意。
加强可维护性
1)需求是不断变化的,设计结果要对变化有弹性。
2)适应不可预见的变化,把易变部分和较稳定部分隔离,将变化限制在局部。
3)易变性:服务>接口>属性>类。
3、面向对象分析(OOA)与面向对象设计(OOD)的关系
(1)OOD运用与OOA部分相同的概念:对象、类、属性、服务(操作)、封装、继承、消息、关联、聚合、多态、主动对象等。
(2)OOD运用与OOA部分相同的表示法。
(3)OOD——按实现条件对OOA模型进行调整,并补充新的组成部分。
比如:
图形用户界面系统;
硬件、操作系统及网络;
数据管理系统;
其他——编程语言、第三方构件;
基本思想:尽可能隔离实现条件对系统的影响——提供独立的接口对不可隔离的因素,按实现条件调整OOA模型。
4、面向对象设计(OOD)过程
1)问题部分的设计
2)人机交互部分的设计
3)控制驱动部分的设计
4)数据接口部分的设计
5)不强调次序
每个部分均采用与OOA一致的概念、表示法及活动,但有自己独特的策略。
1.ACD
第2关:判断题
7-2 问题域分析基本概念
第1关:选择题
相关知识
什么是问题域部分
对面向对象分析结果按实现条件进行补充与调整就是问题域部分。
如何进行问题域部分设计
进行问题域部分设计,要继续运用面向对象分析的方法,包括概念、表示法及一部分策略。不但要根据实现条件进行面向对象设计,而且由于需求变化或新发现了错误,也要对面向对象分析的结果进行修改.面向对象设计的重点是对面向对象分析的结果进行补充与调整,要强调的是这部分工作主要不是细化,但面向对象分析未完成的细节定义要在面向对象设计完成。
进行问题域部分设计,要继续运用面向对象分析的方法,包括概念、表示法及一部分策略。不但要根据实现条件进行面向对象设计,而且由于需求变化或新发现了错误,也要对面向对象分析的结果进行修改.面向对象设计的重点是对面向对象分析的结果进行补充与调整,要强调的是这部分工作主要不是细化,但而是面向对象分析未完成的部分。
问题域部分设计一般步骤
(1)为复用设计与编程的类而增加结构
(2)增加一般类以建立共同协议
(3)按编程语言调整继承
(4)提高性能
(5)为数据存储管理增补属性与服务
(6)为编程方便增加底层成分
(7)决定关系的实现方式
(8)对例外的处理
(9)编程语言限制了可用的属性类型
(10)构造或优化算法
(11)调整服务
(12)决定对象间的可访问性
(13)考虑采用设计模式
(14)其它
1.BCD
第2关:判断题
7-3 问题域分析部分设计实例
第1关:认识starUML中的相关元素
相关知识
介绍类与类之间的关系
类图: 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
类图的3个基本组件:类名、属性、方法。
类的几个主要关系:实现,关联,泛化,聚合,组合,依赖
starUML中的类图
在StarUML中默认打开的“toolbox”工具中就是类相关的一下基础功能组件,以及组件的功能简介基础组件中有类实例,以及描述类的各个功能组件。如图所示。
类组件的基本操作介绍:
单击选择Class,至工作区域内单机左键,即可创建一个class实例。创建实例后,周围会出现一堆功能按钮,去描述这个类,如图所示。图后会有介绍各个组件功能的介绍。
功能介绍:
1.用来标识Class的可见性(默认为public)
2.用来添加note的,比如:类的说明
3.增加类的属性
4.增加类的操作方法。
5.增加Reception
6.增加子类
7.增加父类
8.添加已有的接口
9.添加需要的接口
10.添加关联
11.添加聚合
12.添加组合
13.添加端口
14.添加部件
任务描述
请认真学习以上描述,并模仿以下图片画出对应的类图。
(答案保存为:/data/workspace/myshixun/answer/step0/step0.mdj,以mdj格式存储方便评分)
第2关:对象抽象
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
案例涉及的对象
任务描述
请根据以上描述,使用代码说明酒店管理系统能够抽象出来哪些对象?
(请画出各个参与者的类图,以列的形式排列,属性可先暂时不写,答案保存为:/data/workspace/myshixun/answer/step1/step1.mdj,以mdj格式存储方便评分)
第3关:设计客户类
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
案例涉及的对象
任务描述
设计酒店管理系统中客户对象类包含的属性,并画出对应的类图。
(请画出客户对象的具体类图,包含属性,答案保存为:/data/workspace/myshixun/answer/step2/step2.mdj)
第4关:设计酒店类
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
案例涉及的对象
任务描述
设计酒店对象类包含的属性,并画出对应的类图。
(请画出酒店对象的具体类图,包含属性,答案保存为:/data/workspace/myshixun/answer/step3/step3.mdj)
第5关:设计获取酒店信息类
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
案例涉及的对象
任务描述
请根据时序图所描述的信息,设计获取酒店信息的类,并画出对应的类图。
(请画出获取酒店信息的具体类图,包含属性,答案保存为:/data/workspace/myshixun/answer/step4/step4.mdj)
第6关:设计客户类和获取酒店信息的类的关联关系
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
任务描述
请根据时序图所描述的信息,画出客户类和获取酒店信息的类之间的关联关系(由客户“发起”获取酒店信息的要求)。
(请画出客户类和获取酒店信息的类之间的关联关系图,答案保存为:/data/workspace/myshixun/answer/step5/step5.mdj)
第7关:完成整个关联关系图
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
相关知识
聚合(Aggregation)
聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
任务描述
请根据时序图所描述的信息,补充酒店类和获取酒店信息的类之间的关联关系,并基于之前的结果完善整个关联关系图。
(请画出客户类和获取酒店信息的类,以及获取酒店信息类和酒店类之间的关联关系图(两两互为聚合关系),答案保存为:/data/workspace/myshixun/answer/step6/step6.mdj)
7-4 人机交互部分设计实例
第1关:单选题
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
相关知识
人机交互界面的作用
最终的系统是要提供给用户使用的。用户对系统的理解,包括用户要操纵的系统中的事物、系统能够完成的功能以及任务的实施过程决定了用户对系统的使用。而用户对系统的使用是通过人机界面来进行的。
简言之,人机交互部分是人和计算机之间交互信息的媒介,对它的设计涉及计算机科学、心理学、艺术学、认知科学和人机工程学等学科。
人机交互界面的设计原则
按照上述根据人机交互需求所做的设计,可以用面向概念表达所有的界面成分,如下为一些指导策略:
1、每个窗口分别对应一个类。
2、发现窗口类间的共性以及部件类的共性,定义较一般的窗口类和部件类分别形窗口类问以及部件类间的泛化关系。
3、用类的属性表示窗口或部件的静态特征。如尺寸、位置和颜色等。
4、用操作表示窗口或部件的动态特征,如选中、移动和滚屏等。
5、发现界面类之间的联系,在其间建立关联。必要时,进一步地绘制用户与系统会话的顺序图
6、建立界面类与问题域类之间的联系。
任务描述
基于人机交互部分的设计原则,需要准确的判断出每个交互页面应当包含的元素。
本关任务:请基于人机交互部分的设计原则,从右侧题目对应的页面中正确选择缺少部分的内容,完成整个页面的设计。
1.ABC
第2关:多选题
7-5 控制驱动部分设计实例
第1关:认识starUML中的相关元素
任务描述
请认真学习以上描述,根据需要选择恰当的工具。模拟制作图书馆的一部分用例:学生借书的操作如图所示。
(答案保存为:/data/workspace/myshixun/answer1/step0/step0.mdj,以mdj格式存储方便评分)
第2关:补充类图属性
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
相关知识
如何进行控制驱动部分的设计
识别控制流
1)面向对象分析定义的主动对象:这是由业务逻辑所决定的;
2)系统的并发需求所要求的多控制流:若要求多项工作同时进行,则每一项工作就是一个控制流。例如,销售与统计。
3)系统分布方案所要求的多控制流:每一个分布站点至少有一个控制流。
4)根据任务的紧急程度设置控制流;高优先控制流,低优先控制流,紧急控制流;
5)为实现方便设立的控制流;例如:负责处理机之间通讯的控制流。
6)对异常事件的处理:由于异常事件的发生,不能在程序的某个可预知的控制点进行处理,应该设立一个专门的控制流进行处理异常事件。
7)实现并行计算;通常用一个进程实现一个计算任务,用线程实现各子任务。
8)设置起协调者作用的控制流;若有多个控制流需要相互交换信息,可考虑增设一个或多个控制流,对相应的控制流起协调者的作用。
审查与调整
过度并发性意味着执行效率的损失;
考虑控制流之间职责的均衡分布情况,它们之间协作的情况,以保证每个控制流是高内聚的,且与相关的控制流是松耦合的;
每个控制流应该有以上列举的理由之一,除非由明确的其他理由。
定义各控制流
描述控制流:对控制流命名,并进行简要说明;为控制流指定操作对设计部分的每个操作指定它属于哪个控制流;要保证每个操作属于一个控制流。
定义各控制流的细节:若控制流由事件驱动,则要描述触发控制流的条件。例如,若控制流由时钟驱动,则可能要描述触发之前所经历的时间间隔;考虑描述控制流从那里取数据和往那里送数据之类的情况
控制流间的通信
1)操作调用;
2)邮箱;
3)共享存储器;
4)远程过程调用;
控制流间的同步
可能有多个控制流使用一个对象中的同一个操作;
可能有不同的控制流使用一个对象中的不同操作;
当一个对象在同一时刻有多个控制流通过时,就可能要出现问题。即可能导致对象的状态混乱。对这个问题处理不当,会导致并发系统失败。
任务描述
请根据类图所描述的信息,请补充个人基本信息类的属性,并画出类图。
(答案保存为:/data/workspace/myshixun/answer1/step1/step1.mdj)
第3关:画出维护个人信息参与者
任务描述
在正式画时序图之前,我们应该先明确在当前时序场景中都有哪些参与者。所以,请根据类图所描述的信息,使用用例图画出在该场景对应时序图中的两个参与者(客户和客户个人信息页面)。
(答案保存为:/data/workspace/myshixun/answer1/step2/step2.mdj)
第4关:画出时序图-1
任务描述
请基于上一关的内容,补充客户传递信息(客户个人基本信息)到客户个人基本信息页面,客户个人基本信息页面进行更新,然后返回修改提示的过程,并画出对应的时序图。
(答案保存为:/data/workspace/myshixun/answer1/step3/step3.mdj)
第5关:画出时序图-2
任务描述
请基于上一关的内容,补充客户传递信息(结束维护个人信息)到客户个人基本信息页面,客户个人基本信息页面进返回退出提示的过程,并画出对应的时序图。
(答案保存为:/data/workspace/myshixun/answer1/step4/step4.mdj)
7-6 数据管理部分设计实例
第1关:根据类图写出客户表
阅读材料
酒店管理系统是为酒店及其客户服务的业务平台,开发的目标是用于帮助客户预订酒店,包括选择酒店、提交订单和撤销订单;以及帮助酒店处理预订业务,包括接受客户预订、执行客户订单和活动促销。通过酒店管理系统的应用,期望防范恶意预订、提高酒店的房间利用效率、为酒店吸引回头客并提高客户的满意度、提高酒店销售额和利润。
相关知识
什么是数据管理部分
数据管理部分是负责在特定的数据管理系统中存储和检索对象的组成部分。其目的是,存储问题域的持久对象、封装这些对象的查找和存储机制,以及为了隔离数据管理方案的影响。
不同的数据管理系统对数据管理部分的设计有不同的影响,常见的数据管理系统有:
文件系统、r-dbMS、 OODBMS
数据管理部分问题范围:
对象在永久性存储介质上的存储;
只存储对象的属性部分;
可能只有一部分对象需要长久存储;
什么是关系数据库系统
关系数据库是采用关系模型的数据库。关系模型用二维表结构来表示各类实体及其间的联系。二维表由行和列组成。一个关系数据库由多张表组成。
什么是面向对象数据库系统
面向对象数据库是采用面向对象模型的数据库。它有两方面的特征:一方面它是面向对象的,应支持对象、类、属性、继承、聚合、关联等面向对象概念;另一方面它也具有数据库所应具有的特性和功能。
由于面向对象数据库与使用面向对象方法开发的应用系统采用了面向对象模型,对类图中的类及关系不需要再进行数据模型的转换,在面向对象数据库系统中可直接进行永久对象的存储与检索也不需要再设计负责保存与恢复永久对象的操作或类,因为每个类的对象都可以直接在面向对象数据库系统中存取。(如一个人有多个电话号码,借助于set集合对象作为一个属性)
设计数据管理部分包括
1、针对关系数据库的数据存取设计;面向对象、实体一联系模型以及关系数据库中的概念间的对应关系。
2、对永久类的存取设计;对每个永久类,应设计一个表,用以存储其永久对象。
3、对关系的存取设计;包括对关联的存储设计和对聚合的存储设计以及对继承的存储设计;
任务描述
请根据类图所描述的信息,将客户类抽象为一张数据库表,并保存到MySQL数据库中。然后使用desc命令,将结果保存为txt文件。
简单方法
将以下内容复制粘贴进去
+------------+--------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+------------+----------------+
| guestID | bigint(20) | NO | PRI | NULL | auto_increment |
| birthday | varchar(255) | YES | | 0002-02-02 | |
| enterprise | varchar(255) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| nickName | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | 123456 | |
| credit | double | YES | | 1000 | |
| phone | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+------------+----------------+
————————————————
注意:复制粘贴方法
最后Ctrl+S保存,然后评测就行。
第2关: 根据类图写出酒店表
创建一个res.txt路径为/data/workspace/myshixun/answer1/step2/res.txt,将以下内容复制粘贴到res.txt中,操作同上
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| hotelID | bigint(20) | NO | | NULL | |
| hotelName | varchar(255) | YES | | NULL | |
| city | varchar(255) | YES | | NULL | |
| circle | varchar(255) | YES | | NULL | |
| address | text | YES | | NULL | |
| level | varchar(255) | YES | | NULL | |
| score | double | YES | | 0 | |
| introduction | text | YES | | NULL | |
| equipment | text | YES | | NULL | |
| commentsNum | int(11) | YES | | 0 | |
+--------------+--------------+------+-----+---------+-------+
10 rows in set (0.00 sec)
————————————————
第3关:根据类图写出酒店工作人员表
创建一个res.txt路径为/data/workspace/myshixun/answer1/step3/res.txt,将以下内容复制粘贴到res.txt中,操作同上
+------------+--------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+------------+----------------+
| hotelWorkerID | bigint(20) | NO | PRI | NULL | auto_increment |
| password | varchar(255) | YES | | 123456 | |
| hotelName | varchar(255) | YES | | | |
+------------+--------------+------+-----+------------+----------------+
————————————————
更多推荐
所有评论(0)