软件工程专题(三)

本文介绍了面向对象技术的基本概念,包括对象、实例、类、方法和消息等,并探讨了面向对象设计的主要特点如封装性、多态性和继承性。此外,文章还概述了几种面向对象的分析与设计方法。

1.7面向对象技术<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.7.1面向对象的基本概念

面向对象(object-orientedOO)方法是以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受。下面列举几个面向对象设计方法中的重要术语,它们构成面向对象的程序设计语言的核心。

◆对象(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不提供增加用户定义数据类型的手段。

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1.7.2面向对象的分析方法

面向对象的系统分析设计,看起来其实也很简单,步骤大概如下:

1)从项目开始,进行步骤(2)。

2)对系统进行分析,如果它在一定的要求下可解决,则停止分析,进行设计;如果它在一定的要求下不可解决,则对它进行划分。

3)步骤(2)如果有分析结果,则对其中每一个子对象,进行步骤(2)。

边界条件(也即上面提到的“一定要求”,对象划分的原则):

u        子对象之间独立性要高,即耦合度尽量达到最低,(理想的情况是达到组件化的程度);

u        子对象相对其他划分方法,更易于处理(如实现,维护等)。

当前常见的面向对象的方法很多,下面简单介绍三种:

Peter CoardEdward YourdonOOAOOD方法

OOA(面向对象分析)模型由5个层次和5个活动组成:

 5个层次:主题层、对象类层、结构层、属性层、服务层

   5个活动:标识对象类、标识结构、定义主题、定义属性、定义服务

在这种方法中定义两种对象类之间的结构:

分类结构——反映了一般与特殊的关系

组装结构——反映了对象之间整体与部分的关系

OOA中的5个层次和5个活动继续贯穿在OOD(面向对象设计)过程中。OOD模型由4个部分,即:

Ø         问题域

Ø         人机交互

Ø         任务管理

Ø         数据管理

BoothOOD方法

Booth认为软件开发是一个螺旋上升的过程。在螺旋上升的每个周期中,有4个步骤:

Ø         标识类和对象

Ø         确定它们的含义

Ø         标识它们之间的关系

Ø         说明每一个类的界面和实现

OMT方法

OMT(对象建模技术)定义了3种模型:

Ø         对象模型

    描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。它为动态模型和功能模型提供了基本的框架。用对象图表示。

Ø         动态模型:

    描述与时间和操作顺序有关的系统特征——激发事件、事件序列、确定事件先后关系的状态以及事件和状态的组织。用状态图表示。

Ø         功能模型:

描述与值的变换有关的系统特征——功能、映射、约束和函数依赖。用数据流图表示。

 OMT方法有4个步骤

分析:这是OMT方法的第一步,其目的是建立可理解的现实世界模型。

系统设计:确定整个系统的体系结构,形成求解问题和建立解答的高层次策略。

对象设计:在分析的基础上,对象设计阶段建立基于分析模型的设计模型,考虑实现的细节。

实现:将对象设计阶段开发的对象类及其关系转换成特定的程序设计语言、数据库或硬件的实现。

1.7.3面向对象设计方法

面向对象的类设计相关原则:

1. 开闭原则(the Open Closed Principle OCP

  一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。

2. 替换原则 (the Liskov Substitution Principle LSP)

  子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov1987年提出的设计原则。它同样可以从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 。维护人员主要使用的有设计说明书、EC

       A~E①软件需求说明书       ②项目开发计划           ③可行性研究报告

④模块开发卷宗         ⑤测试分析报告           ⑥操作手册

⑦用户手册

[分析]

    本题综合考查了软件生命周期各个阶段的相关知识。

    大家在复习软件工程这部分内容的时候,除了对软件生命周期的每个阶段(如需求分析、软件设计、软件维护等)的相关知识应该仔细复习以外,对整个软件生命周期各阶段还应有个总体的认识和把握。前面在知识要点中有比较表对各阶段的任务、参与人员和产生文档做出了归纳和总结,大家复习的时候可以好好参考一下。

[答案]

A    B  C   D    E

同步辅导中的软件工程部分的题目很好,大家可以做一下,题目类型和软考类似;




转载自:《系统分经典教材》

转载于:https://www.cnblogs.com/ITmuse/archive/2007/11/21/967920.html

专题七:软件工程专题 1、软件工程知识 1.1概述 软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程。其目的是提高软件生产率、提高软件质量、减低软件成本。 软件工程是1968年在德国的NATO会议上提出的,希望用工程化的原则和方法来克服软件危机;而软件危机就是软件开发和维护过程中的各种问题,由于软件开发阶段缺乏好的方法的指导和好的工具的辅助,而且缺少有关的文档,使得大量的软件难以维护。 软件生命周期是指由软件定义、软件开发和软件维护等阶段组成的全过程,反映软件生存期内各种工作得组织以及各个阶段如何衔接。下表归纳了软件生存周期各个阶段的任务、参与人员和产生文档。 常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。 阶段 任务 参与人员 产生文档 软件定义阶段——待开发软件要“做什么” 系统分析 确定待开发软件的总体要求和适用范围,以及与之有关的硬件、支撑软件的要求 用户、项目负责人、系统分析员 可合并项目计划书中 软件项目计划 确定待开发软件的目标,对其进行可行性分析,并对资源分配、进度安排等做出合理的计划 用户、项目负责人、系统分析员 可行性分析报告、项目计划书 需求分析 确定待开发软件的功能、性能、界面等要求,从而确定系统的逻辑模型 用户、项目负责人、系统分析员 需求规格说明书 软件开发阶段——待开发软件“怎么做” 软件设计 概要设计 模块分解,确定软件的结构,模块的功能和模块间的接口,以及全局数据结构的设计 系统分析员、高级程序员 设计说明书、数据说明书、模块开发卷宗 详细设计 设计每个模块的实现细节和局部数据结构的设计 高级程序员、程序员 编码 用某种程序语言为每个模块编写程序 高级程序员、程序员 程序清单 软件测试 发现软件中的错误,并加以纠正 高级程序员或系统分析员(另一部门或单位) 软件测试计划、软件测试用例说明,软件测试报告 软件维护阶段—开发后交付使用的软件的维护 软件维护 使软件适应外界环境的变化、实现功能的扩充和质量的改善而修改软件 维护人员 维护计划、维护报告   软件由计算机程序、数据及文档组成,同时与硬件、数据库人、过程等共同构成计算机系统。软件工程包括个要素:方法、工具和过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值