第11章 面向对象设计
张海藩《软件工程导论》(第6版)(章节题库 第11章 面向对象设计)【圣才出品】

第11章面向对象设计一、选择题1.()是不需要接收消息就能主动执行的服务。
A.内部服务B.外部服务C.内嵌服务D.上层服务【答案】B【解析】主动服务是不需要接收消息就能主动执行的服务,它在程序实现中是一个主动的程序成分,而外部服务属于主动服务,所以答案选B项。
2.火车是一种陆上交通工具,火车和陆上交通工具之间的关系是()关系。
A.组装B.整体与部分C.has aD.一般与具体【答案】D【解析】火车是一种陆上交通工具,而陆上交通工具不一定是火车,还可以是汽车、自行车等,说明火车是陆上交通工具的具体化,而陆上交通工具是火车的一般化,所以它们之间的关系是一般与具体的关系。
3.()只供对象内部的其他服务使用,不对外提供。
A.外部服务B.内部服务C.内嵌服务D.上层服务【答案】B【解析】对象的服务分为外部服务和内部服务两种,其中,内部服务只供内部的其它服务使用,不对外提供,外部服务只供对象外部的其它服务使用,不对内提供。
4.对象标识是分配给每个对象的永久性标识(又称作“柄”),它不符合下述条件()。
A.在一定的范围或领域(例如一个应用系统)中是唯一的B.与对象实例的特征、状态及分类(可能是动态的)无关C.在对象存在期间保持一致D.在对象存在之后保持一致【答案】D【解析】对象标识符合如下几个条件:①在一定的范围或领域中是唯一的;②与对象实例的特征、状态及分类无关;③在对象期间保持一致。
5.对象或者类的整体行为(例如响应消息)的某些规则所不能适应的(对象或类的)()。
A.状况B.情态C.条件D.问题【答案】D【解析】对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。
二、填空题1.对象的服务可分为_____、_____。
【答案】外部服务;内部服务2._____不同取值所构成的组合都可看作对象的一种新的状态。
【答案】对象的每个属性3.如果在一个服务中包括了多项可独立定义的功能,则它是_____,应尝试把它分解为多个服务。
软件工程第十一章面向对象设计

THANKS
感谢观看
01
抽象类是一种不能被实例化的 类,它只能被其他类继承。
02
抽象类可以包含抽象方法和具 体方法。抽象方法是没有具体 实现的方法,需要在继承抽象 类的子类中实现。
03
通过继承抽象类,子类可以继 承抽象类的属性和方法,并且 可以重写或实现抽象类中的方 法。
接口与抽象类的选择
在设计软件时,选择使用接口还是抽象类取决于具体需求和设计目标。
关系
关系描述了对象之间的交互和联系。 常见的关系包括关联、聚合和继承。
继承与多态的设计
继承
继承是一种实现代码重用的方式,子类可以继承父类的属性和方法,并可以扩展或覆盖它们。通过继承,可以建 立类之间的层次结构,使得代码更加清晰和易于维护。
多态
多态是指一个接口可以有多种实现方式,或者一个对象可以有多种形态。多态可以提高代码的灵活性和可扩展性, 使得程序更加易于维护和修改。
02
类与对象的设计
类的定义与属性
类的定义
类是对象的抽象,它描述了一组具有相同属性和行为的对象。类定义了对象的结构、行为和关系。
属性
属性是类中用于描述对象状态的变量。每个对象都有其自己的属性值,这些属性值决定了对象的状态 。
对象的行为与关系
行为
行为是类中定义的方法,用于描述对 象可以执行的操作。方法定义了对象 的行为和功能。
高层模块不应该依赖于低层模块,它们都应 该依赖于抽象。
面向对象设计的优势
提高代码可重用性
通过类和继承实现代码重用,减少重 复代码。
提高代码可维护性
面向对象设计使得代码结构更加清晰, 易于理解和维护。
提高开发效率
通过快速原型开发,快速构建软件系 统。
软件工程课本讲解面向对象的OMT方法

化旳动态模型 + 细化旳功能模型。
16
第11章 面向对象的OMT方法
对象模型化技术OMT 对象模型化技术把分析时搜集旳信息构造在三类
模型中,即对象模型、功能模型和动态模型。
这个模型化旳过程是一种迭代过程。
17
第11章 面向对象的OMT方法
图11.4 三元关联 29
第11章 面向对象的OMT方法
角色为关联旳端点,阐明类在关联中旳作用和角 色。不同类旳关联角色可有可无,同类旳关联角色不 能省。角色旳表达如图11.5所示。
教师
讲授
课程
主讲
内容
图11.5 关联旳角色旳表达
30
第11章 面向对象的OMT方法
2) 受限关联
受限关联由两个类及一种限定词构成,限定词是 一种特定旳属性,用来有效地降低关联旳重数,限定 词在关联旳终端对象集中阐明。
技术之上旳,OMT措施旳基础是开发系统旳3个模型,再 细化这3种模型,并优化以构成设计。对象模型由系统中 旳对象及其关系构成,动态模型描述系统中对象对事件旳响应及对 象间旳相互作用,功能模型则拟定对象值上旳多种变换及变换上旳
约束。
6
第11章 面向对象的OMT方法
11.1.2 系统分析
分析旳目旳是拟定一种系统“干什么”旳模型,该模型经过 使用对象、关联、动态控制流和功能变换等来描述。分析过程是 一种不断获取需求及不断与顾客磋商旳过程。
8
第11章 面向对象的OMT方法
3. 构造动态模型
构造动态模型旳环节如下: (1) 准备经典交互序列旳脚本。 (2) 拟定对象间旳事件并为各脚本安排事件跟踪。 (3) 准备系统旳事件流图。 (4) 开发具有主要动态行为旳各个类旳状态图。 (5) 检验状态图中共享事件旳一致性和完整性。 最终得到:动态模型 = 状态图 + 全局事件流图。
C++铁道第2版-11

程序运行结果如下: 请输入三角形的三个边长(a、b、c): 3 4 5↙ a=3,b=4,c=5 三角形的面积=6 请输入三角形的三个边长(a、b、c): int main() 2 2 4↙ { double a,b,c; a=2,b=2,c=4 这三条边不能构成三角形,异常发生,结束! try //检查异常 { cout<<"请输入三角形的三个边长(a、b、c):"<<endl; cin>>a>>b>>c; if (a<=0||b<=0||c<=0) throw 1; // 语句throw抛出int型异常 while (a>0&&b>0&&c>0) { cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl; cout<<"三角形的面积="<<triangle(a,b,c)<<endl; cout<<"请输入三角形的三个边长(a、b、c):"<<endl; cin>>a>>b>>c; if(a<=0||b<=0||c<=0) throw 1; }} //语句throw抛出int型异常 catch(double) // 捕获异常,异常类型是double型 { cout<<"这三条边不能构成三角形,异常发生,结束!"<<endl; } catch(int) // 捕获异常,异常类型是int型 { cout<<"边长小于或等于0,异常发生,结束!"<<endl;} return 0;}
第11章 Windows 编程初步-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

❖ 第一种方法的特点是可以使应用程序更精炼,运 行效率更高,编写程序时有较大的自由度,但难 度较大;
❖ 第二种方法的特点是采用MFC提供的类库编写程 序,这些类中已经封装了大部分的Windows API 函数,还提供了编写不同程序类型的模版和框架, 所以编写程序比较容易,而且还允许直接调用 Windows API 函数来实现一些特殊的功能。
第三部分 Visual C++环境下Windows程序 开发概述
第11章 Windows 编程初步 第12章 MFC库和应用程序框架 第13章 综合设计实例– 简单绘图程序
第11章 Windows 编程初步
本章要点:
❖简单的Windows程序框架 ❖自定义类和Windows程序框架结合
在编写Windows 应用程序时,常采用两种方法: ❖ 一是使用Windows SDK ( Software development Kit,即
图11.5 向解决方案中添加新项
图11.6 添加main.cpp文件
(6)可以看到在“解决方案管理器”视图中的“源文件” 栏目中被添加了一个main.cpp文件,同时可以看到 Visual Studio开发工具的中间编辑窗口也打开了一个空 白的文件编辑窗口,在这里输入例11.1的源程序,然后保 存,如图11.7所示。
❖ Windows程序一般是一个可视化的窗口程序,通过操作 系统发送的消息来处理用户输入的数据,然后通过在窗口 上绘制或者把数据发给窗口上的组件来显示数据。
❖ 句柄就是一个标识符,用来区别同类对象或者资源的唯一 标志,可以认为它是个无符号整数或者一个指针均可。
第11章-面向对象与Java程序设计 (第3版)-微课视频版-朱福喜-清华大学出版社

第6页
11.1.3 JDBC的实现及其驱动程序
源的SQL请求。数据库驱动程序可修改应用程序的请求,使 得请求符合相关的DBMS所支持的文法。 ·数据源:由用户想要存取的数据以及与它相关的操作系统、 DBMS和用于访问DBMS的网络平台组成。
第5页
11.1.2 从ODBC到JDBC
2. JDBC的诞生
Java 刚诞生时,由于没有数据库API,编程人员不得不在 Java程序中加入C语言的ODBC函数调用。这就使Java的很多 优秀特性无法充分发挥,如平台无关性、面向对象特性等。
第4页
11.1.2 从ODBC到JDBC
1. ODBC的结构模型
ODBC包括4个主要部分: ·应用程序接口:屏蔽不同的ODBC数据库驱动程序之间函数
调用的差别,为用户提供统一的SQL编程接口。 ·驱动程序管理器:为应用程序装载数据库驱动程序。 ·数据库驱动程序:实现ODBC的函数调用,提供对特定数据
("jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM
Table1"); while (rs.next())
System.out.println(rs.getString("a") + " " +rs.getString ("b") + " " + rs.getString("c"));
计算机科学与技术专业课课件_软件工程SE_Chapter11

面向对象设计的准则
◆强内聚
(1) 服务内聚
一个服务应该完成一个且仅完成一个功能。
(2) 类内聚
类的属性和服务应该全都是完成该类对象的任务所必需的, 其中不包含无用的属性或服务。如果某个类有多个用途,通 常应该把它分解成多个专用的类。
(3) 一般-特殊内聚
一般-特殊结构应该是对相应的领域知识的正确抽取。 一般说来,紧密的继承耦合与高度的一般-特殊内聚是一致的。
◆信息隐藏
●信息隐藏通过对象的封装性实现:类结构分离了接口 与实现,从而支持了信息隐藏。对于类的用户来说, 属性的表示方法和操作的实现算法都应该是隐藏的。
2013-8-31
上海大学计算机学院
3
面向对象设计的准则
◆弱耦合
(1) 交互耦合 对象之间的耦合通过消息连接来实现,则这种耦合就 是交互耦合。尽量降低消息连接的复杂程度。应该尽 量减少消息中包含的参数个数,降低参数的复杂程度。 减少对象发送(或接收)的消息数。 (2) 继承耦合 继承是一般化类与特殊类之间耦合的一种形式。从本 质上看,通过继承关系结合起来的基类和派生类,构 成了系统中粒度更大的模块。因此,它们彼此之间应 该结合得越紧密越好。 设计应该使特殊类尽量多继承并使用其一般化类的属 性和服务。
实例重用、继承重用和多态重用。
◆可重用软构件应具备的特点
(1) 模块独立性强。具有单一、完整的功能,且经过 反复测试被确认是正确的。 (2) 具有高度可塑性。提供为适应特定需求而扩充或 修改已有构件的机制。 (3) 接口清晰、简明、可靠。
2013-8-31
上海大学计算机学院
9
类构件
◆类构件的重用方式
2013-8-31 上海大学计算机学院 12
第11章面向对象的设计与实现一、填空题(30小题)1、类型一致性原则

第11章面向对象的设计与实现一、填空题(30小题)1、类型一致性原则要求子类S必须满足6个限制条件:( )、( )、( )、( )、( )和( )。
答案:S的状态空间(State-space)必须与T的状态空间一致(但S可以拥有额外空间以延伸T的状态空间)、在S和T的共享空间中,S的状态空间必须等同于或位于T的状态空间之内。
对于T的每一操作(如T.叩),S覆盖或重定义为S.op,则:S.Op必须与T.op名称相同、S.op的形式函数原型的参数必须与T.op的形式函数原型的参数表一一对应、S.op 的前置条件必须等同于或弱于T.op的前置条件、S.op的后置条件必须等同于或强于T.op 的后置条件2、类的实例化是( )。
答案:对象3、对象之间进行通信的构造叫做( )。
答案:消息4、闭合行为原则是指:( )。
答案:在基于类型/子类型层次结构的继承层次结构中,类C的任何对象操作的执行,包括从C的超类继承的所有操作应满足C的类不变式5、类型( )对于创建类库的类层次结构至关重要。
答案:一致性原则6、输出端是指( )。
答案:通过一个给定程序的多行代码来测量引用其他程序的次数7、不同应用中信息共享的这种机制和构造是通过( )来实现的。
答案:类库8、类型一致性设计原则可表述为( )。
答案:如果S为T的真子类型,则S必须与T一致,即类型S的对象可以出现在类型T的对象所需要的任何环境中,并且当该对象的任何获取操作执行时,仍能保持其正确性9、耦合性用来度量( )。
答案:程序之间联系的次数和强度10、没有经过封装的原始代码规定为( )封装。
答案:0级11、一个( )可以具体实现为多个类,每个类又包括自己独特的内部设计。
答案:类型12、受限关联由两个类和一个( )组成。
答案:限定词13、类具有属性,描述类的属性用( )。
答案:数据结构14、一个标准的面向对象系统包含的类通常来自于4个主要领域:( )。
(1)基础领域包含了( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.面向对象编程的测试
将测试的目光集中在: 将测试的目光集中在: 类功能的实现 面向对象程序风格 主要体现为以下两个方面(假设编程使用C++语言): 主要体现为以下两个方面(假设编程使用C++语言): C++语言 数据成员是否满足数据封装的要求; 数据成员是否满足数据封装的要求; 类是否实现了要求的功能。 类是否实现了要求的功能。
设计内容
面向对象模型设计一般包括四个方面的 面向对象模型设计一般包括四个方面的 模型 内容: 内容: 一、问题域部分:进一步修改、完善、补充; 进一步修改、完善、补充; 二、人机交互部分; 人机交互部分; 三、任务管理部分; 任务管理部分; 四、数据管理部分。
OOA向OOD的演进 向 的演进
主题层 类-&-对象层 结构层 属性层 服务层 问题域 部分 人机交 互部分 任务管 理部分 数据管 理部分
4.面向对象的单元测试 (1)类层测试 (2)对象集群层测试 5.面向对象的集成测试 对类间协作进行测试 (1)基于线程的测试 把响应系统的一个输入或一个事件所需要的那些类集成 起来。分别集成并测试每个线程。 (2)基于使用的测试 先测试独立类,再测试使用独立类的下一个层次的类 (称为依赖类) 6.面向对象的确认测试 检查用户可见的动作和用户可识别的输出。 根据动态模型和描述系统行为的脚本来设计确认测试用例。
例:订单处理系统
第11 章 面向对象的软件设计
2.部署图 部署图描述了处理器、设备和软件构件运行时 的体系结构。 (1)结点:是某种计算资源的物理对象,包括计 算机、设备(如打印机、通信设备)等 (2) 连接:连接用一条直线表示,它指出结点之间 存在着某种通信路径,并指出通过哪条通信路径 可使这些结点间交换对象或发送消息
面向对象测试
对面向对象软件的测试可分为下列 四个层次进行: 层次进行 四个层次进行:
1. 算法层 2. 类层(方法与属性之间的相互作用) 类层(方法与属性之间的相互作用) 3. 主题层(类-&-对象之间的相互作用) 主题层( 对象之间的相互作用) 对象之间的相互作用 4. 系统层
面向对象测试步骤
第11 章 面向对象的软件设计
本章学习内容: 1.理解面向对象软件设计的基本原理 2. 掌握系统设计的过程与方法 3.掌握详细设计的内容与过程 4.了解面向对象的实现技术 5.了解面向对象测试的概念与方法
1. 分析阶段 理解应用问题,建立对象模型、 理解应用问题,建立对象模型、动态 对象模型 模型和功能模型,说明对象关联、 模型和功能模型,说明对象关联、控制流及 数据变换。 数据变换。 2. 系统设计阶段 确定系统框架 考虑并发任务、 系统框架, 确定系统框架,考虑并发任务、通讯机 制和数据存储策略。 制和数据存储策略。 3. 对象设计阶段 从实现的角度细化分析对象模型、 细化分析对象模型 从实现的角度细化分析对象模型、 动态模型和功能模型
配给适当的硬件或软件去执行
1. 确定事件驱动型任务(一些与硬件设
备通讯的任务) 备通讯的任务) 隔激发的事件) 隔激发的事件)
2. 确定时钟驱动型任务(以固定时间间
3. 确定优先任务 4. 确定关键任务 5. 确定协调任务
数据管理设计
数据管理部件提供了在数据管理系统 中存储和检索对象的基本结构。 中存储和检索对象的基本结构。 数据管理方法 方法有 数据管理方法有: 1. 关系数据库管理系统 ( RDBMS ) 2. 面向对象数据库管理系统 面向对象数据库管理系统(OODBMS)
面向对象分析模型
对面向对象分析的扩充
面向对象设计模型
OOA向OOD的演进图
人机交互部分
人机接口部件的最基本对象是窗口, 主要的窗口类型包括 窗口类型包括: 主要的窗口类型包括:
安全/登录窗口 登录窗口。 ① 安全 登录窗口。 启动窗口。启动窗口主要完成: ② 启动窗口。启动窗口主要完成:
对象的创建和初始化; 对象的创建和初始化 系统管理功能; 系统管理功能 外设的激活与关闭。 外设的激活与关闭
第11 章 面向对象的软件设计
11.1 面向对象软件设计概述
11.1.1 面向对象设计准则 –模块化 –抽象 –信息隐蔽 –低耦合 –高内聚 –可重用
启发式规则
简单清晰、深度适当。 简单清晰、深度适当。
单位
演第11 章 面向对象的软件设计
11.1.2 面向对象设计的过程 1.系统设计 (1)首先进行系统架构设计,使系统具有良好 的稳定性、开放性和可扩充性 (2)如果系统复杂,应将系统划分为若干个子 系统 (3)给系统分配处理机和任务 (4)根据数据结构、文件和数据库选择实现数 据存储的基本策略 (5)标识全局资源和确定控制访问这些资源的 机制
第11 章 面向对象的软件设计
举例:
第12 章 面向对象软件实现
12.1 面向对象软件实现 面向对象实现阶段的主要任务: 选择合适的面向对象的编程语言与开发环境; 基于选定的语言和开发环境编码实现详细设计 中所得到的对象、算法、公式和规则等; 将编写好的各个类代码模块根据类的相互关系 集成; 对软件进行测试和调试,完成各个部分和整个 系统。
7.面向对象的系统测试
–检测软件的整体行为表现 。 检测软件的整体行为表现
OOT的视角扩大到包括复审分析和 OOT的视角扩大到包括复审分析和 设计模型,此外, 设计模型,此外,测试的焦点从过程构 模块)移向了类。 件(模块)移向了类。
面向对象的软件维护
OO方法可提高软件维护效率的重要 OO方法可提高软件维护效率的重要 原因是: 原因是: 由于程序与问题域一致, 由于程序与问题域一致,各个阶段的表 示一致,从而大大降低了理解的程度。 示一致,从而大大降低了理解的程度。 将系统中最容易变化的因素(功能) 将系统中最容易变化的因素(功能)作 为对象的服务而封装在对象的内部, 为对象的服务而封装在对象的内部,对 象的封装性使一个对象的修改对其他影 响也小,从而避免了波动效应。 响也小,从而避免了波动效应
11.2 系统设计
6.2.1逻辑体系架构设计 1.层次模式分析 (1)分层模式 表示层:图形用户界面、窗口 等。 应用逻辑层:管理业务过程的 任务和规则。 对象存储层:持久化存储机制, 例如,文件系统、数据库等。
第11 章 面向对象的软件设计
(2)设计要求 层与层之间的耦合应尽可能地松散; 级别相同、职责类似的元素应该被组织到同一 层中; 复杂的模块应被继续分解为粒度更细的层或子 系统; 应尽量将可能发生变化的元素封装到一层中; 每一层应当只调用下一层提供的功能服务,而 不能跨层调用; 一层绝不能使用上一层提供的功能服务,即不 能在层与层之间造成双向依赖。
< < la y e r> > A'
< < la ye r> > C
第11 章 面向对象的软件设计
2.子系统划分 设计准则: 子系统应具有良好的接口,通过接口和系统的 其他部分通信; 除了少数的“通信类”外,子系统中的类应只 和该子系统中的其他类协作; 子系统的数量不宜太多; 可以在子系统内部再次划分,以降低复杂度。
1. 2. 3. 4. 5. 6. 7.
面向对象分析的测试 面向对象设计的测试 面向对象编程的测试 面向对象的单元测试 面向对象的集成测试 面向对象的确认测试 面向对象的系统测试
1.面向对象分析的测试 重点在其完整性和冗余性。 重点在其完整性和冗余性。 2.面向对象设计的测试 建议针对功能的实现和重用以及对 OOA结果的拓展,应从如下三方面考虑: 结果的拓展,应从如下三方面考虑: 结果的拓展 (1)对认定的类的测试; )对认定的类的测试; (2)对构造的类层次结构的测试; )对构造的类层次结构的测试; (3)对类库的支持的测试。 )对类库的支持的测试。
业务功能窗口。 ③ 业务功能窗口。 大多数面向对象的用户界面的设计都是事 件驱动的。 件驱动的。
GUI准则 准则
1. 一致性 2. 减少步骤 3. 及时提供反馈信息 4. 提供撤消命令 5. 无须记忆 6. 易学 7. 富有吸引力
任务管理设计
确定必须同时动作的对象 找出相互排斥的对象 设计任务管理子系统: 设计任务管理子系统:确定各类任务并把任务分
第11 章 面向对象的软件设计
11.2.2 物理体系结构建模 用构件图和部署图来描述系统的物理体系结构 1.构件图 构件图就是描述构件类及其它们之间的关系。 (1)构件间的依赖关系:依赖关系,用来表示 一个构件需要另一些构件才能有完整的定义。 (2)接口:是一个构件提供给其他构件的一组 操作
第11 章 面向对象的软件设计
12.3 程序设计风格 1.提高可重用性 (1)提高方法的内聚 (2)减小方法的规模 (3)保持方法的一致性 (4)把策略与实现分开 (5)全面覆盖 (6) 尽量不使用全局信息 (7)利用继承机制
2.提高可扩充性 (1)封装实现策略 (2)不要用一个方法遍历多条关联链 (3)避免使用多分支语句 (4)精心确定公有方法 3.提高健壮性 (1)预防用户的操作错误 (2)检查参数的合法性 (3)不要预先确定限制条件 (4)先测试后优化
12.2程序设计语言 1.面向对象语言的技术特点 (1)支持类与对象概念的机制 (2)实现整体/部分结构的机制 (3)实现一般/特殊结构的机制 (4)对于实现属性和服务的机制 (5)类型检查 (6)类库 (7)效率 (8)持久保存对象 (9)参数化类 (10)开发环境
2.面向对象语言的选择 (1)可复用性 (2)类库和开发环境 (3)其他因素
第11 章 面向对象的软件设计
2.详细设计 (1)细化、补充类的属性和操作 (2)设计类操作的实现算法 (3)优化数据访问路径 (4)实现外部交互式的控制 (5)调整类结构,增加继承性 (6)设计类之间的关联的实现方式 (7)确定对象属性的精确表示 (8)把类和关联打包归纳到模块中