第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)。
11.1 面向对象设计的准则
所谓优秀设计,就是权衡了各种因素,从而使得系统在其 整个生命周期中的总开销最小的设计。
对大多数软件系统而言,60%以上的软件费用都用于软件 维护,因此,优秀软件设计的一个主要特点就是容易维护。
在第五章介绍了软件设计的几条基本原理,这些原理在进 行面向对象设计时仍然成立,但是增加了一些与面向对象 方法密切相关的新特点,从而具体化为下列的面向对象设 计准则:
1. 设计结果应该清晰易懂
用词一致。 使用已有的协议。 减少消息模式的数目。 避免模糊的定义。
2. 一般-特殊结构的深度应适当
应该使类等级中包含的层次数适当。一般说来,在一个中等规模(大约 包含100个类)的系统中,类等级层次数应保持为7±2。
不应该仅仅从方便编码的角度出发随意创建派生类,应该使一般-特殊 结构与领域知识或常识保持一致。
设计则是把分析阶段得到的需求转变成符合成本和质量要 求的、抽象的系统实现方案的过程。
从面向对象分析到面向对象设计,是一个逐渐扩充模型的 过程,或者说,面向对象设计就是利用面向对象观点建立 求解域模型的过程。
在实际的软件开发过程6. 可重用
软件重用是提高软件开发生产率和目标系统质量的重要途 径。
重用基本上从设计阶段开始。 重用有两方面的含义:
✓ 一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类 似系统时创建的类),
✓ 二是如果确实需要创建新类,则在设计这些新类的协议时,应该 考虑将来的可重复使用性。
11.2 启发规则
4. 弱耦合
耦合指不同对象之间相互关联的紧密程度。
一般说来,对象之间的耦合可分为两大类:
✓ 交互耦合
✓ 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。
✓ 交互耦合应尽可能松散:尽量降低消息连接的复杂程度;尽量减 少消息中的参数个数,降低参数的复杂程度;减少对象发送(或 接收)的消息数。
第11章 面向对象设计
本章内容
11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化
回顾:面向对象分析
分析的主要工作:理解、表达和验证 关键:建立对象模型、动态模型和功能模型。 复杂的对象模型由5个层次组成:主题层、类与对象层、
结构层、属性层和服务层。 分析模型都不是一次完成的,为了理解问题域的全部含义,
必须反复多次地进行分析。
分析
设计
实现
OO方法的步骤
分析是提取和整理用户需求,并建立问题域精确模型的过 程。
6. 把设计变动减至最小
出现必须修改设计的情况,应该使修改的范围尽可能小。
理想的设计变动情况
11.3 软件重用
11.3.1 概述
1. 重用
重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复 使用。
广义地说,软件重用可分为以下3个层次: ✓ 知识重用(软件工程知识的重用)。 ✓ 方法和标准的重用(面向对象方法或国家制定的软件开发规范的重 用)。 ✓ 软件成分的重用。
4. 使用简单的协议
一般说来,消息中的参数不要超过3个。当然,不超过3个的限制也不 是绝对的。
5. 使用简单的服务
一般说来,应该尽量避免使用复杂的服务。类中的服务都很小,可以 用仅含一个动词和一个宾语的简单句子描述它的功能。
如果一个服务中包含了过多的源程序语句,或者语句嵌套层次太多, 或者使用了复杂的CASE语句,则应该仔细检查这个服务,设法分解 或简化它,考虑用一般-特殊结构代替。
✓ 继承耦合
✓ 与交互耦合相反,应该提高继承耦合程度。 ✓ 继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起
来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越 紧密越好。
5. 强内聚
内聚衡量一个模块内各个元素彼此结合的紧密程度。 内聚定义为:设计中使用的一个构件内的各个元素,对完成一
个定义明确的目的所做出的贡献程度。 在设计时应该力求做到高内聚。 在面向对象设计中存在下述3种内聚:
✓ 服务内聚。一个服务应该完成一个且仅完成一个功能。 ✓ 类内聚。一个类应该只有一个用途,它的属性和服务应该是
高内聚的。 ✓ 一般-特殊内聚。设计出的一般-特殊结构,应该符合多数人
的概念,应该是对相应的领域知识的正确抽取。
1. 模块化
对象就是模块。它是把数据结构和操作这些数据的方法紧密 地结合在一起所构成的模块。
2. 抽象
面向对象方法不仅支持过程抽象,而且支持数据抽象。类实 际上是一种抽象数据类型。此外,某些面向对象的程序设计 语言还支持参数化抽象(把数据类型作为参数)。
3. 信息隐藏
在面向对象方法中,信息隐藏通过对象的封装实现:类结构 分离了接口与实现,从而支持了信息隐藏。
3. 设计简单的类
应该尽量设计小而简单的类,以便于开发和管理。 为使类保持简单,应该注意以下几点:
✓ 避免包含过多的属性。 ✓ 有明确的定义。 ✓ 尽量简化对象之间的合作关系。 ✓ 不要提供太多服务:一个类提供的公共服务不超过7个。 ✓ 在开发大型软件系统时,设计出大量较小的类,需要划分“主题”。
OOD 过程
输入OOA模型 问题域部分设计
人机交互部分设计
任务管理部分设计
数据管理部分设计
构件化与系统部署 向OOP输出OOD模型
OOA与OOD的关系
一致的概念与表示法 OOA和OOD采用一致的概念和表示法,从而不存在分析 与设计之间的鸿沟。
不同的内容、目标和抽象层次
✓OOA:研究问题域和用户需求,运用面向对象的观点发现问题域中 与系统直接有关的对象,以及对象的特征和相互关系。目标是建立一 个直接映射问题域,符合用户需求的OOA模型。 ✓OOD:在OOA模型基础上,针对选定的实现平台进行系统设计,按 照实现的要求进行具体的设计,目标是产生一个能够在选定的软硬件 平台上实现的OOD模型。 ✓OOA模型:抽象层次较高,忽略了与实现有关的因素 ✓OOD模型:抽象层次较低,包含了与实现平台有关的细节