软件工程专题(三)
1.7面向对象技术
1.7.1面向对象的基本概念
面向对象(object-oriented,OO)方法是以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受。下面列举几个面向对象设计方法中的重要术语,它们构成面向对象的程序设计语言的核心。
◆对象(Object)
对象是和有数据及可对这些数据施加的操作结合在一起所构成的独立单位的总称。一个对象通常可由对象名、属性和操作三部分组成。
对象的划分判定标准:
1、 子对象之间独立性要高,即耦合度尽量达到最低,(理想的情况是达到组件化的程度);
2、 子对象相对其他划分方法,更易于处理。所以对于复杂的大系统,一般都要经过多次的尝试,以尽量能找到较优的划分方案。对于比较简单的系统,E-R转换也能的到较为满意的划分。
◆实例(Instance)
实例是由某个特定类所描述的一个对象。
◆类(Class)
类是一组具有相同属性和相同操作的对象的集合。类是面向对象的程序设计语言提供的可再用软件成分。
◆方法(Method)
对象所能执行的操作称为方法。方法是类中定义的函数,描述对象执行操作的算法。
◆消息(Message)
消息是要求某个对象执行类中定义的某个操作的规格说明。一个消息通常包括接受对象名、调用的操作名和适当的参数(如有必要)。
主要特点:
◆封装性
封装性是一种信息隐蔽技术,它使系统分析员能够清晰地标明他们所提供的服务界面,用户和应用程序员则只看得见对象提供的操作功能(即封装面上的信息),看不到其中的数据或操作代码细节。
◆多态性
多态性是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。
◆继承性
继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。一个父类可以有多个子类。父类描述了这些子类的公共属性和操作,子类中还可以定义其自己的属性和操作。如果一个子类只有唯一的一个父类,这种继承称为单一继承。如果一个子类有多个父类,可以从多个父类中继承特性,这种继承称为多重继承。
◆分布式对象Distributed Object
在发布实施角度上看,对象可分为三种:本地对象,远地对象,虚拟对象。
本地对象Local Object :指分布在同一个系统中的对象,互称为本地对象
远地对象Remote Object :指分布在不同系统中的对象(同一个群体系统)。
虚拟对象Virtual Object :不同于本地和远地对象,虚拟对象不属于真实的对象,而是一个虚设的类型。真正的操作不在虚拟对象本身,只是远地对象在本地的映射。
本地和远地对象是相互的关系。而虚拟对象只是一种映射,用于关联本地和远地对象,起到分布和负载均衡的作用。
面向对象数据库技术:是面向对象技术和数据库技术的有机的结合,它有着关系数据库没有的优点。
面向对象数据库(OODB) +关系数据库(RDB)→对象-关系数据库(ORDB)
面向对象的特征:类和继承性,对象及对象标识、封装性、信息/实现隐蔽、状态保持,消息,多态性,一般性。
u 面向对象技术的出现正是弥补了前述关系模型的固有局限性。
u 对象数据模型是有很强的描述复杂对象的能力,能包含更多的数据语义信息。
u 面向对象方法可很方便的表示嵌套对象,因而很容易表达层次数据,这点与RDB形成鲜明的对比,RDB强迫用户用多个关系的元组表达层次数据。
u 面向对象方法可方便的构造各种类型、而RDB不提供增加用户定义数据类型的手段。
面向对象的系统分析设计,看起来其实也很简单,步骤大概如下:
(1)从项目开始,进行步骤(2)。
(2)对系统进行分析,如果它在一定的要求下可解决,则停止分析,进行设计;如果它在一定的要求下不可解决,则对它进行划分。
(3)步骤(2)如果有分析结果,则对其中每一个子对象,进行步骤(2)。
边界条件(也即上面提到的“一定要求”,对象划分的原则):
u 子对象之间独立性要高,即耦合度尽量达到最低,(理想的情况是达到组件化的程度);
u 子对象相对其他划分方法,更易于处理(如实现,维护等)。
当前常见的面向对象的方法很多,下面简单介绍三种:
Peter Coard和Edward Yourdon的OOA和OOD方法
OOA(面向对象分析)模型由5个层次和5个活动组成:
5个层次:主题层、对象类层、结构层、属性层、服务层
5个活动:标识对象类、标识结构、定义主题、定义属性、定义服务
在这种方法中定义两种对象类之间的结构:
分类结构——反映了一般与特殊的关系
组装结构——反映了对象之间整体与部分的关系
OOA中的5个层次和5个活动继续贯穿在OOD(面向对象设计)过程中。OOD模型由4个部分,即:
Ø 问题域
Ø 人机交互
Ø 任务管理
Ø 数据管理
Booth的OOD方法
Booth认为软件开发是一个螺旋上升的过程。在螺旋上升的每个周期中,有4个步骤:
Ø 标识类和对象
Ø 确定它们的含义
Ø 标识它们之间的关系
Ø 说明每一个类的界面和实现
OMT方法
OMT(对象建模技术)定义了3种模型:
Ø 对象模型
描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。它为动态模型和功能模型提供了基本的框架。用对象图表示。
Ø 动态模型:
描述与时间和操作顺序有关的系统特征——激发事件、事件序列、确定事件先后关系的状态以及事件和状态的组织。用状态图表示。
Ø 功能模型:
描述与值的变换有关的系统特征——功能、映射、约束和函数依赖。用数据流图表示。
OMT方法有4个步骤
分析:这是OMT方法的第一步,其目的是建立可理解的现实世界模型。
系统设计:确定整个系统的体系结构,形成求解问题和建立解答的高层次策略。
对象设计:在分析的基础上,对象设计阶段建立基于分析模型的设计模型,考虑实现的细节。
实现:将对象设计阶段开发的对象类及其关系转换成特定的程序设计语言、数据库或硬件的实现。
1.7.3面向对象设计方法
面向对象的类设计相关原则:
1. 开闭原则(the Open Closed Principle OCP)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。
2. 替换原则 (the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
3. 依赖原则 (the Dependency Inversion Principle DIP)
在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。
4. 接口分离原则(the Interface Segregation Principle ISP)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。
这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
例题:
国家标准《计算机软件产品开发文件编制指南GB8567-88》中规定,在一项软件开发过程中,一般来说应该产生14种文件,其中管理人员主要使用的有A 、B 、C 、开发进度月报、项目开发总结报告。开发人员主要使用的有A 、B 、D 、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、测试计划和E 。维护人员主要使用的有设计说明书、E和C 。
A~E:①软件需求说明书 ②项目开发计划 ③可行性研究报告
④模块开发卷宗 ⑤测试分析报告 ⑥操作手册
⑦用户手册
[分析]
本题综合考查了软件生命周期各个阶段的相关知识。
大家在复习软件工程这部分内容的时候,除了对软件生命周期的每个阶段(如需求分析、软件设计、软件维护等)的相关知识应该仔细复习以外,对整个软件生命周期各阶段还应有个总体的认识和把握。前面在知识要点中有比较表对各阶段的任务、参与人员和产生文档做出了归纳和总结,大家复习的时候可以好好参考一下。
[答案]
A:② B:③ C:④ D:① E:⑤
同步辅导中的软件工程部分的题目很好,大家可以做一下,题目类型和软考类似;
转载自:《系统分经典教材》