第11章面向对象设计与实现

合集下载

张海藩《软件工程导论》(第6版)(章节题库 第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
类与对象的设计
类的定义与属性
类的定义
类是对象的抽象,它描述了一组具有相同属性和行为的对象。类定义了对象的结构、行为和关系。
属性
属性是类中用于描述对象状态的变量。每个对象都有其自己的属性值,这些属性值决定了对象的状态 。
对象的行为与关系
行为
行为是类中定义的方法,用于描述对 象可以执行的操作。方法定义了对象 的行为和功能。
高层模块不应该依赖于低层模块,它们都应 该依赖于抽象。
面向对象设计的优势
提高代码可重用性
通过类和继承实现代码重用,减少重 复代码。
提高代码可维护性
面向对象设计使得代码结构更加清晰, 易于理解和维护。
提高开发效率
通过快速原型开发,快速构建软件系 统。

《软件工程导论》课后习题答案

《软件工程导论》课后习题答案
23:59:38
作业及解答(第3章)
• 数据结构的描述 符 号
= +
含 义
x = a+b


被定义为 与 或
[...,...] 或 [...|...] { ... }或 m{...}n (...) “...” ..
23:59:38
x = [a , b],x = [a | b] 重复 x = {a}, x = 3{a}8 可选 x = (a) 基本数据元素 x = “a” 连结符 x = 1..9
P1 记录存款信息
P2 打印存单 F5存款信息 F3存单 E1 储户 F4利息
F5存款信息 D1存款信息 F7密码 F2取款单
F5存款信息 P3 核算密码
F4利息 F4利息 F6取款信息 P6 设置利率 P4 计算利息
P5 打印利息清单 F8储蓄利率
E2 业务员
23:59:38
F8储蓄利率
F8储蓄利率
23:59:38
重庆工学院计算机科学与工程学院 李梁(liliang@) 李梁
作业及解答( 作业及解答(第3章)
23:59:38
重庆工学院计算机科学与工程学院 李梁(liliang@) 李梁
作业及解答( 作业及解答(第3章)
• 3-6 复印机的工作过程大致如下:未接到复印 命令时处于闲置状态,一旦接到复印命令则进 入复印状态,完成一个复印命令规定的工作后 又回到闲置状态,等待下一个复印命令;如果 执行复印命令时发现没纸,则进入缺纸状态, 发出警告,等待装纸,装满纸后进入闲置状态, 准备接收复印命令;如果复印时发生卡纸故障, 则进入卡纸状态,发出警告等待维修人员来排 除故障,故障排除后回到闲置状态。 • 请用状态转换图描绘复印机的行为。

软件工程导论第11章

软件工程导论第11章
22
【还可以把适配接口再进一步细分为转换接口和扩充接口。转换接口, 是为了克服与表示方法、数据结构或硬件特点相关的操作给重用带来 的困难而设计的,这类接口是每个类构件在重用时都必须重新定义的 服务的集合。当使用C++语言编程时,应该在根类(或适当的基类)中, 把属于转换接口的服务定义为纯虚函数。如果某个服务有多种可能的 实现算法,则应该把它当作扩充接口。扩充接口与转换接口不同,并 不需要强迫用户在派生类中重新定义它们,相反,如果在派生类中没 有给出扩充接口的新算法,则将继承父类中的算法。当用C++语言实现 时,在基类中把这类服务定义为普通的虚函数。】
4. 弱耦合 耦合:指一个软件结构内不同模块之间互连的紧 密程度。 在面向对象方法中,对象是最基本的模块,因此, 耦合主要指不同对象之间相互关联的紧密程度。 弱耦合是优秀设计的一个重要标准。
5
对象之间的耦合分为两大类: (1) 交互耦合: 对象之间的耦合通过消息连接来实现。 使交互耦合尽可能松散,应遵守下述准则: 尽量降低消息连接的复杂程度。 应该尽量减少消息中包含的参数个数,降低参数的复 杂程度。 减少对象发送(或接收)的消息数。 (2) 继承耦合 与交互耦合相反,应该提高继承耦合程度。 通过继承关系结合起来的基类和派生类,构成系统中 粒度更大的模块。设计时应该使特殊类尽量多继承并 使用其一般化类的属性和服务,从而更紧密地耦合到 其一般化类。
13
2. 软件成分的重用级别 (1) 代码重用 源代码剪贴:最原始的重用形式。 复制或修改原有代码时可能出错,存在严重的配臵 管理问题,人们几乎无法跟踪原始代码块多次修改 重用的过程。 源代码包含:许多程序设计语言都提供包含库中 源代码的机制。配臵管理问题有所缓解,修改了库 中源代码之后,所有包含它的程序自然都必须重新 编译。 继承:利用继承机制重用类库中的类时,无须修 改已有的代码,就可以扩充或具体化在库中找出的 类,基本上不存在配臵管理问题。

软件工程课本讲解面向对象的OMT方法

软件工程课本讲解面向对象的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

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++语言)(第二版)-程磊-清华大学出版社

第11章 Windows 编程初步-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社
另外,Qt Creator、C++ Builder 等也是比较优秀的C++ 编程环境,能够进行Windows程序设计,也有丰富的类 库支持,感兴趣的读者也可以学习使用。
❖ 第一种方法的特点是可以使应用程序更精炼,运 行效率更高,编写程序时有较大的自由度,但难 度较大;
❖ 第二种方法的特点是采用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版)-微课视频版-朱福喜-清华大学出版社

第11章-面向对象与Java程序设计 (第3版)-微课视频版-朱福喜-清华大学出版社
由于ODBC有其不足之处,如它不容易使用、没有面向对象 的特性等,因而SUN公司开发了一套Java语言的数据库应用 程序开发接口。在JDK的早期版本中,JDBC只是一个可选部 件,到JDK 1.1公布时,JDBC API就成为Java语言的标准部 件。
第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"));

第11章面向对象的设计与实现一、填空题(30小题)1、类型一致性原则

第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)基础领域包含了( )。

软件工程_张海蕃

软件工程_张海蕃

应该推广使用在实践中总结出来的开发软件的成功 的技术和方法,并且研究探索更好更有效的技术和 方法,尽快消除在计算机系统早期发展阶段形成的 一些错误概念和做法。 应该开发和使用更好的软件工具。正如机械工具可 以“放大”人类的体力一样,软件工具可以“放大” 人类的智力。在软件开发的每个阶段都有许多繁琐 重复的工作需要做,在适当的软件工具辅助下,开 发人员可以把这类工作做得既快又好。如果把各个 阶段使用的软件工具有机地集合成一个整体,支持 软件开发的全过程,则称为软件工程支撑环境。
与软件开发和维护有关的许多错误认识和作法的形 成,可以归因于在计算机系统发展的早期阶段软件 开发的个体化特点。错误的认识和作法主要表现为 忽视软件需求分析的重要性,认为软件开发就是写 程序并设法使之运行,轻视软件维护等。
事实上,对用户要求没有完整准确的认识就匆忙着 手编写程序是许多软件开发工程失败的主要原因之 一。只有用户才真正了解他们自己的需要,但是许 多用户在开始时并不能准确具体地叙述他们的需要, 软件开发人员需要做大量深入细致的调查研究工作, 反复多次地和用户交流信息,才能真正全面、准确、 具体地了解用户的要求。对问题和目标的正确认识 是解决任何问题的前提和出发点,软件开发同样也 不例外。急于求成,仓促上阵,对用户要求没有正 确认识就匆忙着手编写程序,这就如同不打好地基 就盖高楼一样,最终必然垮台。事实上,越早开始 写程序,完成它所需要用的时间往往越长。
另一方面还必须认识到程序只是完整的软件产品的 一个组成部分,在上述软件生命周期的每个阶段都 要得出最终产品的一个或几个组成部分(这些组成 部分通常以文档资料的形式存在)。也就是说,一 个软件产品必须由一个完整的配置组成,软件配置 主要包括程序、文档和数据等成分。必须清除只重 视程序而忽视软件配置其余成分的糊涂观念。 作好软件定义时期的工作,是降低软件成本提高软 件质量的关键。如果软件开发人员在定义时期没有 正确全面地理解用户需求,直到测试阶段或软件交 付使用后才发现“已完成的”软件不完全符合用户 的需要,这时再修改就为时已晚了。

第十一章 活动图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

第十一章 活动图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社
判断节点具有一个进入控制流和至少两 个导出控制流。
判断节点具有多个导出流,对于每条导 出流而言,应当在表示该控制流的箭头 上附加控制条件。
act 取款 输入i
[x>0] 列出数列第x项
[x<=0] 报错
合并节点
合并节点将多个控制流进行合并,并 统一导出到同一个离开控制流。
合并节点仅有逻辑意义而没有时间和 数据上的意义:几个动作都指向同一 个合并节点也并不意味着这些动作要 在进入之后互相等待或进行同步数据 之类的操作。
act 考试
主任务
并发任务A
分叉节点 并发任务B
结合节点 下一个主任务
对象流
act 考试
客户
订单中心
对象流是UML为填补活动图与面向对象 选择商品 思想之间的疏离而出现的。如果需要在 生成订单
活动图中表现对象流,则首先需要绘制
出泳道,且对象应该作为泳道的负责对
订单: Order [未支付]
象出现。
开始
终止
控制流
控制流是活动图中用于标示控制路径 的一种符号。它负责当一个动作或活 动节点执行完毕后,将执行主体从当 前已完毕的节点转移到过程的下一个 动作或动作节点。
控制流从活动图的开始标记开始运行, 经过顺序、分支等结构引导着各个动 作的连续执行。
act 取款
x=5
判断节点
判断节点是活动图中进行逻辑判断、并 创造分支的一种方法。
对业务流程建模
选择一个将要描述的重要过程,过程中尽量涉及数量少但是关键的对象 或参与者,将无关或关联很小的对象排除在外,为每一个对象或参与者 绘制泳道。
在总体业务流程中提取关键的动作或活动节点,并且将他们与对象或参 与者相对应;若发现有些动作无法对应,则考虑动作是否在这个流程中 起关键作用,或者是否遗漏了某些对象或参与者。

Python教程之----第11章-Python的面向对象(上)

Python教程之----第11章-Python的面向对象(上)

第11章 面向对象编程(上)
· 面向对象编程 · 类和对象 · 构造方法和析构方法
· self的使用 · 运算符重载
✎ 学习目标
1 了解面向对象编
程思想
掌握类和对象的定义 2
和使用
掌握构造方法的使用
4
掌握self的使用
3
✎ 目录页
01 面向对象编程概述 02 类和对象 03 构造方法和析构方法 04 self的使用 05 运算符重载
print("%s的车在鸣笛..."%(self.color))
✎ 析构方法
• 当删除一个对象来释放类所占用资源的时候, Python解释器默认会调用另外一个方法,这个方 法就是__del__( )方法。
• __del__方法被称为析构方法。
✎ 过渡页
01 面向对象编程概述 02 类和对象 03 构造方法和析构方法 04 self的使用 05 运算符重载
✎ 过渡页
01 面向对象编程概述 02 类和对象 03 构造方法和析构方法 04 self的使用 05 运算符重载
✎ 面向对象
程序员“面向对象”
在现实世界中存在各种不同形态的事物, 这些事物之间存在着各种各样的联系。在程 序中使用对象来映射现实中的事物,使用对 象间的关系来描述事物之间的联系,这种思 想就是面向对象。
✎ self的使用
• 在方法的列表中,第1个参数永远都是self。 • self的字面意思是自己,我们可以把它当做C++里面的
this指针理解,表示的是对象自身。 • 当某个对象调用方法的时候,Python解释器会把这个对
象作为第1个参数传给self,开发者只需要传递后面的参 数就可以了。

第11章面向数据的设计方法

第11章面向数据的设计方法
上述结构正文也可对应地用Jackson结构图表 示。图6-2-5是与模型过程SHUTTLE_1的结 构正文对应的Jackson结构图。
Shuttle -1
软件工程
wait- body1
Leave(1)
TRANSit- b ody1
Shuttlebody1
Arrive(1)
Wait(1)*
Transit(1)* Station(i)*
11.2.2 扩充功能性过程
Button-0
BD
软件工程
Button-1
Shuttle-0
SV
Shuttle-1
LAMP CMDS
图10-2-2 修改后的SSD LAMPCMDS—Lamp commands
软件工程
SHUTTLE_1 seq LON(1) /* 控制发光板“亮”,说 明交通车正停在站1上 */ read 状态向量 WAIT_BODY1 itr while Wait(1) read 状态向量 WAIT_BODY1 end LOFF(1) /* 交通车即将离站;控 制发光板“暗” */ LEAVE(1) TRANSIT_BODY1 itr while Transit(1) read 状态向量 TRANSIT_BODY1 end
分析技术识别出系统中的实体(包括人、对象、 产生或使用信息的组织)和动作(客观世界中 影响系统实体的那些事件); 2)生成实体结构图:针对每一实体,将影响它 的所有动作按发生的时间顺序用Jackson结构 图(Jackson diagrams)表示出来。为了描述 时间约束,同一动作必须出现在多张结构图中;
LEAVE(i)
TRANSIT_BODY itr while Transit(i) read 状态向量

软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著)

软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著)
重用基本上从设计阶段开始。
重用有两方面的含义:
一是尽量使用已有的类(包括开发环境提供的类库, 及以往开发类似系统时创建的类),
二是如果确实需要创建新类,则在设计这些新类的 协议时,应该考虑将来的可重复使用性。
11.2 启发规则
1. 设计结果应该清晰易懂 用词一致。 使用已有的协议。 减少消息模式的数目。 避免模糊的定义。 2. 一般-特殊结构的深度应适当 应该使类等级中包含的层次数适当。一般说来,
第11章 面向对象设计
11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化
分析是提取和整理用户需求,并建立问题域精 确模型的过程。
分析结果重用:重用某个系统的分析模型。这 种重用特别适用于用户需求未改变,但系统体 系结构发生了根本变化的场合。
3. 典型的可重用软件成分 项目计划 成本估计 体系结构 需求模型和规格说明 设计 源代码 用户文档和技术文档 用户界面 数据 测试用例
11.3.2 类构件






任务管理部分
11.1 面向对象设计的准则
所谓优秀设计,就是权衡了各种因素,从而使 得系统在其整个生命周期中的总开销最小的设 计。
对大多数软件系统而言,60%以上的软件费用 都用于软件维护,因此,优秀软件设计的一个 主要特点就是容易维护。
设计准则有6条。
1. 模块化
对象就是模块。它是把数据结构和操作这些数 据的方法紧密地结合在一起所构成的模块。

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

张海藩《软件工程导论》(第6版)(课后习题 第11章 面向对象设计)【圣才出品】
3.为什么说类构件是目前比较理想的可重用软构件?它有哪些重用方式? 答:(1)可重用的软构件应具备的特点: ①模块独立性强。 ②具有高度可塑性。 ③接口清晰、简明、可靠。 (2)类构件的重用方式: ①实例重用。 ②继承重用。 ③多态重用。
4.试用面向对象方法,设计本书第 2 章中给出的订货系统的例子。 答:略。
break; }
int main(){ FILE *fi; int i,inQuote; fi=fopen(“xxx.c”, “r”) if(fi==NULL) return 1; i=inQuote=0;
2/8
圣才电子书 十万种考研考证电子书、题库视频学习平台

b.有明确的定义。为使类的定义明确,分配给每个类的任务应该简单。 c.简化对象之间的合作关系。 d.不要提供太多的服务。 ④使用简单的协议 ⑤使用简单的服务 ⑥把设计变动减至最小 (2)启发规则的必要性 人们使用面向对象方法学开发软件的历史虽然不长,但也积累了一些经验。总结这些经 验得出了几条启发规则,它们往往能帮助软件开发人员提高面向对象设计的质量。

char input[Len_Max+2]; int n=sizeof(input); void CheckKeyWord(){ int i,result; for(i=0;i<n;i++) {
result=strcmp(input,Key[i]); if(result==0){ count[i]++; break; } if(result<0)
3/8
圣才电子书 十万种考研考证电子书、题库视频学习平台

5.试用面向对象方法,设计本书习题 2 第 2 题中描述的储蓄系统。 答:使用面向对象方法设计出的储蓄系统的对象模型如图 11-7 所示:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

。给处理器分配任务要考虑特定动作、通信限制和计 算限制等。ATM机系统没有任何通信和计算限制的问 题。 如果ATM必须要有自主性,当通信网络出现故障时还 可以运行,那么它就必须要有自己的CPU和程序设计 。
确定物理部件之间的配置和 连接形式
确定物理部件之间的配置和连接形式,包括连接拓扑
、重复部件和通信。比如,进程间的通信调用连接的 单个操作系统内部的任务,这种调用要比同一个程序 中的子程序要慢得多,对于时间要求比较严格的时候 是不实用的。简单的做法是合并任务,运用子程序来 建立连接。 ATM机系统中,多个ATM客户机连接到中心计算机, 然后路由到相应的银行计算机。拓扑结构是星型的, 中心计算机来仲裁通信。
职责与方法
创建者模式
问题:一个对象由谁(哪个对象)创建? 指导原则是:将创建一个对象A的职责分配给对象B的
条件是B“包含”或组成聚集了A、B记录A、B紧密地 使用A或者B具有A初始化数据并且在创建A时会将这 些数据传递给A。简而言之,就是一个对象要由拥有 或者使用其信息的、与其有密切关系的另一个已存在 的对象创建。 例如在POS机系统中的Sale对象是由那个对象类创建?
传统观点:

模块控制构件,协调问题域中所有其他构件的调用; 问题域构件,完成部分或全部用户的需求; 基础设施构件,负责完成问题域中所需要相关处理的功能 。
构件级设计步骤
步骤1:标识出所有与问题域相对应的设计类 步骤2:确定所有与基础设施相对应的设计类 步骤3:细化所有不能作为复用构件的设计类 在类或构件的协作时说明消息的细节 为每一个构件确定适当的接口 细化属性并且定义相应的数据类型和数据结构 详细描述每个操作中的处理流 步骤4:说明持久性数据源(数据库和文件)并确定管理数据源
所需要的类 步骤5:开发并且细化类或构件的行为表示 步骤6:细化部署图以提供额外的实现细节 步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选择
基于类的构件设计原则
开关原则(The Open-Closed Principle, OCP):模块应该对外延



具有开放性,对修改具有封闭性。 替换原则(Subsitution Principle, SP):子类可以替换它们的基类。 依赖倒置原则(Dependency Inversion Principle, DIP):依赖于抽 象、而非具体实现 接口分离原则(Interface Segregation Principle, ISP):多个用户 专用接口比一个通用接口要好。 发布复用等价性原则(Release Reuse Equivalency Principle, REP):复用的粒度就是发布的粒度。 共同封装原则(Common Closure Principle, CCP): 一同 变更的类应该和在一起。 共同复用原则(Common Reuse Principle,CRP):不能一起复 用的类不能被分到一组。
职责。 指导原则是:给对象分配职责时,应该把职责分配给具有完成 该职责所需要信息的那个类。 例如在POS机系统中,销售的总额该如果确定?决定总额的一 些元素应该是属于哪些对象的信息?
按照信息专家的建议,这里应当寻找具有确定总额所需信息的那个
对象类。分析领域模型和设计模型得到,要计算总额应该知道销售 的所有SalesLineItem实例及其小计之和。Sale实例包含了上述信息。 为了确定商品的小计,这里需要SalesLineItem.quantity、和 ProductDescription.price。SalesLineItem知道其数量和与其关联的 ProductDescription。
<Business Object> Title -bookid: string -borrowednum: integer -reservatednum: integer +finde() create() destroy
be reserved in a <Business Object> Reservation -reserveddate: date -noticedate:date -borrowerid:integer -isbn:string +find() create() destroy
11.4 使用设计模式
有经验的软件开发者建立了既有通用原则又有惯用方
案的指令系统来指导他们编制软件。 如果以结构化形式对这些问题、解决方案和命名进行 描述使其系统化,那么这些原则和习惯用法就可以称 为模式。
基于职责设计对象(General Responsibility Assignment
域类模型
<Business Object> Item -id: integer +findonTitle() +findonid() +findonReservation() create() destroy
be loaned in a <Business Object> Loan -id: integer -borroweddate: date -returndate: date -borrowerid: integer create() destroy <Business Object> Borrower -borrowerid: integer -name: string -borrowednum: integer -fine: number +find() create() destroy copy of
11.3 确定并发性
系统设计的一个重要目标就是识别必须是并发获得的
那些对象和具有互斥获得的对象。可以将具有互斥获 得的对象叠加在单线程控制或任务中。
状态机模型可以帮助我们识别并发性。如果两个对象
在不交互的情况下,在同一时刻可以接受事件,它们 就是内在并发的。如果事件不同步,我们就不能将这 两个对象叠加在单线程控制中。
设计模型是系统需求和系统之间的桥梁,是设计构造
本身的一个重要部分。而面向对象设计模型是对系统 中包含的对象或对象类,以及它们之间的不同类型关 系的描述。
领域类模型 包模型
11.1 设计模型
面向对象设计模型是对系统中包含的对象或对象类,以及
它们之间的不同类型关系的描述。 面向对象的设计两类设计模型:
供对象操作来访问对象和修改数据 接口可以用UML中的类图形式来描述 UML的格式标记“interface”中必须包含名字部分
图书馆系统中借书者的接口
interface borrower{ public void borrower(int borrowerid,int bookid); public void setborrower(int borrowerid); public void addload(Load loaditem); public void getload(); public void getnoload(); public void removeload(); public void write(); public void read(); … }//borrower
11.2 构件级设计
构件级设计定义了数据结构、算法、接口特征和分配
给每个软件构件的通信机制。
每个构件的类定义或者处理叙述都转化为一种详细设
计。
设计采用图形或基于文本的形式来详细说明内部的数
据结构、局部接口细节和处理逻辑。 设计符号包括UML图和一些辅助表示。 通过一系列结构化编程结构来说明程序的设计。
静态模型:通过系统对象类及其之间的关系来描述系统的静态
结构。在UML中常用类图、用例图、构件图、包图等描述系 统中元素的关系。 动态模型:描述系统的动态结构和系统对象之间的交互。在 UML中常用时序图、协作图、状态图、活动图等来描述系统 的行为。
域类模型 领域分析 确定域类 包模型:用包图表示
对象的认知职责包括:

职责的粒度会影响职责到类和方法的转换
GRASP
职责不同于方法,职责是一种抽象,而方法实现了职
责。 绘制UML交互图时,就是在决定职责的分配。通过 GRASP中的基本原则来指导如果分配职责给一个对象。 五种基本的GRASP模式:
创建者模式 信息专家模式 控制器模式 低耦合模式 高内聚模式
计算销售总额
控制器模式
根据MVS(Model View Separation)原则,UI对象不应当包含应用逻

has
has
包图
图书流通 《子系统》 图书流通 《子系统》 图书维护 《子系统》 信息查询 管理所有 的与外部 通信 标识借阅 者并更新 信息 《子系统》 交互界面 《子系统》 标识借阅 《子系统》 标识图书
对象接口描述
接口设计中应该避免涉及接口的具体表示
正确的方式是将具体的接口实现方法隐藏起来,只提
构件类
构件是计算机软件中的一个模块化的构造块 在OMG UML规范中将构件定义为“系统中某一定型化的、可
配置的和可替换的部件,该部件封装了实现并暴露一系列接 口”。 面向对象的观点:
构件中的每一个类都被详细阐述,包括所有的属性和与其实现相关
的操作。 从分析模型开始,详细描述分析类(对于构件而言该类与问题域相 关)和基础类(对于构件而言该类为问题域提供了支持性服务)。
责,即对其所作所为进行抽象。 UML把职责定义为“类元的契约或义务”。就对象的角色而言, 职责与对象的义务和行为相关。职责分为以下两种类型:
对象的行为职责包括:

自身执行一些行为,如创建对象或计算 初始化其他对象中的动作 控制和协调其他对象中的活动 对私有封装数据的认知 对相关对象的认知 对其能够导出或计算的事物得认知
相关文档
最新文档