[软件工程] 面向对象方法学引论

面向对象方法学引论

面向对象的思想最初出现于挪威斯陆大学和挪威计算机中心共同研制的Simula 67 语言中,其后,随着位于美国加利福尼亚的Xerox(施乐) 研究中心推出的Smalltalk–76 和80 语言,面向对象的的程序设计技术迅猛的发展。
  到了20世纪90年代,面向对象方法学已经成为人们在开发软件是首选的成熟的范型,成为当前最好的软件开发技术。
  传统的软件工程方法是面向过程的,将数据和处理过程分离,求解过程是先对应用领域(问题空间)进行分析,建立起问题空间的逻辑模型,再通过一系列复杂的转换和算法,构造计算机系统,获得解空间。
  由于问题空间与解空间的模型、描述方式的不同,存在着复杂的转换过程,需求变化就更难适应。传统的软件工程方法难于支持软件复用。

9.1 面向对象方法概述

9.1.1 什么是面向对象的开发方法

OOSD(Object-Oriented Software Development)法是一种把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。
  面向对象的方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。
什么是面向对象
  根据Coad和Yourdon的定义,按照以下4个概念设计和实现的系统,称为是面向对象的。
面向对象: 对象 (object)
      类 (classification)
      继承(inheritance)
      通信 (communication with messages)
  面向对象技术的特点
   1、对软件开发过程所有阶段进行综合考虑。
   2、软件生存期各阶段所使用的方法、技术具有高度的连续性,用符合人类认识世界的思维方式来分析、解决问题。
   3、将OOA、OOD、OOP有机地集成在一起。 
     OOA(Object-Oriented Analysis)面向对象分析
     OOD( Object-Oriented Design )面向对象设计
     OOP( Object-Oriented Program )面向对象的程序设计

9.1.2 面向对象开发方法的组成

OOSD由三部分组成

OOSD由三部分组成:
  OOA(Object-Oriented Analysis)面向对象的分析
    强调的是对一个系统中的对象特征和行为的定义。建立系统的三类(对象、状态、处理)模型。

OOD(Object-Oriented Design)面向对象的设计
    与OOA密切配合顺序实现对现实世界的进一步建模。

OOP (Object-Oriented Program)面向对象的程序设计
    是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码。

1、OOA法

就是要解决“做什么”的问题。OOA 法的基本任务就是要建立三种模型:

对象模型(信息模型)

定义构成系统的类和对象,它们的属性与操作。

状态模型(动态模型)

描述任何时刻对象的联系及其联系的改变,即时序。常用状态图, 事件追踪图描述。
   功能模型(函数模型)
    描述系统内部数据的传送处理。
   显然,在三大模型中,最重要的是对象模型。

2、OOD 法

在需求分析的基础上,进一步解决“如何作”的问题,OOD 法也分为概要设计和详细设计。
  概要设计:细化对象行为,添加新对象,认定类,组类库,确定外部接口及主要数据结构
  详细设计:加细对象描述

3、OOP 法

使用面向对象的程序设计语言,如C++进行程序设计。
  Coad和Yourdon给出一个面向对象的定义:
  面向对象=对象+类+继承+消息
  如果一个软件系统是按照这样四个概念设计和实现的,则可以认为这个软件系统是面向对象的。

9.2 面向对象的概念

理解面向对象的基本概念对于学习和掌握面向对象的开发方法是十分重要的。

9.2.1 对象

对象(Object)是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象,对象可以是事、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。
   对象都存在一定的状态(state),内部标识(identity),可以给对象定义一组运算(operation),对象通过其运算所展示的特定行为称为对象行为(behavior),对象本身的性质称为属性(attribute),对象将它自身的属性及运算“包装起来”,称为“封装”(encapsulation).
   对象的最基本的特征是封装性和继承性。

9.2.2 其它概念

1、 类(Class)

类又称对象类(Object Class),是一组具有相同属性和相同操作的对象的集合。在一个类中,每个对象都是类的实例(instance) ,它们都可以使用类中提供的函数。
  类具有属性,用数据结构来描述类的属性,类具有操作,它是对象的行为的抽象,操作实现的过程称为方法(method) ,方法有方法名,方法体和参数。
  由于对象是类的实例,在进行分析和设计时,通常把注意力集中在类上,而不是具体的对象上。

2、 继承 (Inheritance)

继承是使用现存的定义作为基础,建立新定义的技术。是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容做为自己的内容,并加入若干新内容。
继承性分类:
  单重继承:一个子类只有一个父类。即子类只继承一个父类 的数据结构和方法。
  多重继承:一个子类可有多个父类。继承多个父类的数据结 构和方法。

3、消息(Message)

消息就是向对象发出的服务请求(互相联系、协同工作等)。对象之间的联系可表示为对象间的消息传递,即对象间的通讯机制。
  一个消息应该包含以下信息:消息名、接收消息对象的标识、服务标识 、消息和方法、输入信息、回答信息。
  在对象的操作中当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的消息。
注意:在并发系统中,多个控制线程(Thread of Control)并发执行,情况就复杂得多,消息可以是发出服务请求、提交数据、发布事件信息、或是传递同步控制信息。

4. 多态性和动态绑定

多态性(Polymorphism)是指相同的操作或函数,过程作用于不同的对象上并获得不同的结果。
即相同的操作的消息发送给不同的对象时,每个对象将根据自己所属类中所定义的操作去执行,故产生不同的结果。
例如: “绘图”操作,作用在“椭圆” 和“矩形” 上,画出不同的图形。
动态绑定(dynamic binding)是在运行时根据对象接收的消息动态地确定要连接的服务代码。

5、方法(method)

类中操作的实现过程称为方法。
   一个方法包括方法名、参数及方法体。
  方法描述了类与对象的行为,每一个对象都封装了数据和算法两个方面,数据由一组属性表示,而算法即是当一个对象接收到一条消息后,它所包含的方法决定对象如何动作。通常是在某种编程语言(如Java、C++)下实施的运算。

9.3 面向对象建模

  • 用面向对象方法成功地开发软件的关键,同样是对问题域的理解。面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。
  • 用面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。

9.4 对象模型

面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型为建立动态模型和功能模型,提供了实质性的框架。
  统一建模语言UML;

  • 定义类(属性、服务)、类的图形符号;
  • 类与类之间的关联、泛化(继承)、依赖和细化等关系及其表示等等。

9.5 动态模型

动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。

  • 对一个对象来说,生命周期由许多阶段组成,在每个特定阶段中,都有适合该对象的一组运行规律和行为规则,用以规范该对象的行为。生命周期中的阶段也就是对象的状态。
  • 各对象之间相互触发就形成了一系列的状态变化。我们把一个触发行为称作一个事件。
  • 状态与事件密不可分,一个事件分开两个状态,一个状态隔开两个事件。事件表示时刻,状态代表时间间隔。

9.6 功能模型

功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。

  1. 功能模型由一组数据流图组成。在面向对象方法学中,数据流图远不如在结构分析、设计方法中那样重要。
  2. 同对象模型和动态模型比较,数据流图并没有增加新的信息,但是,建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。
  3. 因此,不能完全忽视功能模型的作用。

9.7 3种模型之间的关系

对象模型、动态模型、功能模型分别从3个不同侧面描述了所要开发的系统。
  这3种模型相互补充、相互配合,使得我们对系统的认识更加全面:
  功能模型指明了系统应该“做什么”;
  动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;
  对象模型则定义了做事情的实体。
其中,对象模型是最基本最重要的,它为其他两种模型奠定了基础,我们依靠对象模型完成3种模型的集成。
 (1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
 (2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
 (3)功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。
 (4)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
 (5)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
 (6)用例图中的行为者,可能是对象模型中的对象。
 (7)功能模型中的处理(或用例)可能产生动态模型中的事件。
 (8)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值