软件工程导论第11章 面向对象设计
- 格式:ppt
- 大小:511.00 KB
- 文档页数:47
第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.如果在一个服务中包括了多项可独立定义的功能,则它是_____,应尝试把它分解为多个服务。
(1) 最小化各构件间的通信:应使得在子系统的各个高层构件之间的通信量应当达到最小。
个用户界面应当能够自行处理交互、改正错误和控制硬件,而不需打扰主应用。
仅当通过界面输入一个请求的时候,才需要把它转送到应用的其余部分。
(2) 隐藏复杂性:子系统应当把那些成组的类打包,形成高度的内聚。
例如,一个框架在它的类中间就存在高度的交互。
事实上,它自己就是一个子系统。
(3)逻辑功能分组:虽然输入和输出设备可能相互间不通信,但逻辑上把它们归组到一个处理输入/输出的子系统中,这样就提供了一个单元,它很容易识别并定位问题论域中的事件。
类与通过概念封装的子系统十分类似。
事实上,每个子系统都可以被当做一个类来实现,这个类聚集了它的构件,提供了一组操作。
类和子系统的结构是正交的,一个类的实例可能不止一个子系统的一部分。
高层设计标识在计算机环境中实现问题解决所需要的概念,并增加了一批必要的类。
这些类包括那些可使应用软件与系统的外部世界交互的类。
这些交互则包括与其他软件系统(如数据库管理系统、鼠标和键盘)的界面,与收集数据或者负责控制的硬件设备的界面等。
此阶段的输出是适合应用软件要求的类、类间的联系以及应用的子系统视图规格说明。
高层设计可以表征为标识和定义模块的过程。
但这种模块可以是一个单个的类,还可以是由一些类组合成的子系统,定义过程职责驱动的。
Wirfs-Brock和Helm等人使用了术语“契约”来描述类接口的协议,因为对象双方必须满足契约的条款,因此需要契约类比。
需方提出的请求必须列在协议表中,供方则必须提供所有协议的服务。
如果设计师安全遵循规范,高层设计和类设计这两个阶段是相对封闭的。
在这种情况下,应用软件中的每一个事物都是一个对象,包括应用软件自身在内。
根据这种思想,这两个阶段又是关联的。
应用软件的设计是大类的设计,这种类设计考察应用软件所期望的每个行为,并利用这些行为形成应用类的界面。
在进行应用类的内部设计时,使用了一些提供了某些行为的类的实例,它们相应于高层设计中所标识的子系统。
第1章软件工程学概述1.1 软件危机1.1.1 软件危机的介绍软件危机(软件萧条、软件困扰):是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含下述两方面的问题:如何开发软件,满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料;(6)软件成本在计算机系统总成本中所占的比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
1.1.2 产生软件危机的原因(1)与软件本身的特点有关(2)与软件开发与维护的方法不正确有关1.1.3 消除软件危机的途径对计算机软件有正确的认识。
认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
应该推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。
应该开发和使用更好的软件工具。
总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
1.21.2.1 软件工程的介绍软件工程:是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
(期中考)软件工程的本质特性:软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品1.2.2 软件工程的基本原理用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性1.2.3 软件工程方法学软件工程包括技术和管理两方面的内容。
软件工程——10.面向对象的设计软件工程——10、面向对象的设计在软件工程领域,面向对象的设计(ObjectOriented Design,简称OOD)是一种重要的方法,它为我们构建复杂、可维护和可扩展的软件系统提供了有力的支持。
面向对象的设计核心在于将现实世界中的事物和概念抽象为对象,并通过对象之间的交互来实现系统的功能。
这一方法使得软件系统更贴近现实,更容易理解和维护。
首先,让我们来谈谈对象的概念。
在面向对象的世界里,对象是具有特定属性和行为的实体。
比如说,一辆汽车可以被视为一个对象,它具有颜色、型号、速度等属性,同时还具有启动、加速、刹车等行为。
通过将复杂的系统分解为一个个相互独立又相互协作的对象,我们能够更好地管理系统的复杂性。
类是对象的模板,它定义了对象的属性和行为。
多个具有相似特征和行为的对象可以归为一个类。
例如,所有的汽车都可以属于“汽车”这个类。
类的存在使得我们可以方便地创建和管理对象,同时也促进了代码的复用。
在面向对象的设计中,封装是一个重要的原则。
它将对象的属性和行为封装在一起,外部只能通过定义好的接口来访问对象的内部状态。
这样做不仅提高了代码的安全性,还降低了模块之间的耦合度。
比如说,我们不需要知道汽车内部发动机的具体工作原理,只需要通过踩油门和刹车踏板等操作来控制汽车的行驶。
继承是另一个关键概念。
通过继承,子类可以继承父类的属性和方法,并在此基础上进行扩展和修改。
这大大减少了代码的重复,提高了开发效率。
例如,跑车是汽车的一个子类,它继承了汽车的基本属性和行为,同时又具有自己独特的加速性能和外观特点。
多态性则使得同一个方法在不同的对象上可以有不同的实现。
这增加了代码的灵活性和可扩展性。
比如,不同类型的汽车在刹车时的具体表现可能会有所不同,但它们都实现了“刹车”这个方法。
在进行面向对象的设计时,我们需要清晰地定义对象之间的关系。
常见的关系有关联、聚合和组合。
关联表示对象之间的简单联系,比如学生和课程之间的关联。
软件工程中的面向对象设计在软件工程领域中,面向对象设计是一种重要的设计方法,它强调将系统构建成一系列相互交互的对象,通过定义对象之间的关系和行为来实现系统的功能。
本文将介绍软件工程中的面向对象设计的基本概念、原则以及常用的设计模式。
一、基本概念面向对象设计是一种以对象为中心的设计思想,它将现实世界的事物抽象成对象,并通过对象之间的交互来完成系统的功能。
在面向对象设计中,对象具有状态、行为和标识,并通过封装、继承和多态等机制来实现代码的重用和灵活性。
1. 封装:封装是面向对象设计的基本原则之一,它将数据和方法封装在对象内部,只提供有限的接口供外部调用。
通过封装可以隐藏对象内部的实现细节,提高代码的安全性和可维护性。
2. 继承:继承是面向对象设计中实现代码重用的一种机制,它允许子类从父类继承属性和方法。
通过继承可以减少重复代码的编写,并且使系统更加灵活和可扩展。
3. 多态:多态是面向对象设计的核心概念之一,它允许不同类型的对象对同一消息作出不同的响应。
通过多态可以实现代码的动态绑定,提高系统的可扩展性和可维护性。
二、设计原则在面向对象设计中,有一些重要的设计原则可以指导我们进行设计,确保系统具有良好的扩展性、可维护性和可复用性。
1. 单一职责原则:一个类应该只有一个引起它变化的原因。
这个原则保证了类的内聚性,使得类更加清晰、简单和易于理解。
2. 开放封闭原则:软件实体应该对扩展开放,对修改封闭。
这个原则要求我们设计模块时要考虑到未来的变化,使得系统更加稳定和可扩展。
3. 里氏替换原则:子类应该能够替换掉父类,并且可以在不影响系统行为的情况下进行扩展。
这个原则要求我们设计时要正确地定义类之间的继承关系,避免出现意外的行为。
4. 接口隔离原则:客户端不应该依赖它不需要的接口。
这个原则要求我们将大型接口拆分成更小的接口,使得系统更加灵活和可维护。
5. 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖抽象。
第11章面向对象设计11.1面向对象设计的准则1. 模块化2. 抽象3. 信息隐藏4. 弱耦合5. 强内聚6. 可重用11.2启发规则1. 设计结果应该清晰易懂2. 一般\|特殊结构的深度应适当3. 设计简单的类4. 使用简单的协议5. 使用简单的服务6. 把设计变动减至最小图11.1理想的设计变动情况11.3软件重用11.3.1概述1. 重用2. 软件成分的重用级别3. 典型的可重用软件成分11.3.2类构件1.可重用软构件应具备的特点2. 类构件的重用方式11.3.3软件重用的效益1. 质量2. 生产率3. 成本11.4系统分解图11.2典型的面向对象设计模型1. 子系统之间的两种交互方式2. 组织系统的两种方案图11.3典型应用系统的组织结构3. 设计系统的拓扑结构11.5设计问题域子系统1. 调整需求2. 重用已有的类3. 把问题域类组合在一起4. 增添一般化类以建立协议图11.4窄菱形模式5. 调整继承层次图11.5阔菱形模式图11.6把多重继承简化为单一层次的单继承6. ATM系统实例图11.7ATM系统问题域子系统的结构11.6设计人机交互子系统1. 分类用户2. 描述用户3. 设计命令层次4. 设计人机交互类11.7设计任务管理子系统1. 分析并发性2. 设计任务管理子系统11.8设计数据管理子系统11.8.1选择数据存储管理模式1. 文件管理系统2. 关系数据库管理系统3. 面向对象数据库管理系统11.8.2设计数据管理子系统1. 设计数据格式2. 设计相应的服务11.8.3例子11.9设计类中的服务11.9.1确定类中应有的服务11.9.2设计实现服务的方法1. 设计实现服务的算法2. 选择数据结构3. 定义内部类和内部操作11.10设计关联1. 关联的遍历2. 实现单向关联图11.8用指针实现单向关联图11.9用指针实现双向关联3. 实现双向关联图11.10用对象实现关联4. 关联对象的实现11.11设计优化11.11.1确定优先级11.11.2提高效率的几项技术1. 增加冗余关联以提高访问效率图11.11公司、雇员及技能之间的关联链图11.12为雇员技能数据库建立索引2. 调整查询次序3. 保留派生属性11.11.3调整继承关系1. 抽象与具体2. 为提高继承程度而修改类定义图11.13设计类继承的例子3. 利用委托实现行为共享图11.14用表实现栈的两种方法11.12小结习题111. 面向对象设计应该遵循哪些准则?简述每条准则的内容,并说明遵循这条准则的必要性。