比较四种典型面向对象方法的异同

合集下载

面向对象23种设计模式

面向对象23种设计模式

面向对象23种设计模式面向对象23种设计模式在面向对象的编程中,设计模式是一种解决问题的通用方案。

设计模式可以帮助开发人员在开发过程中减少代码的冗余和复杂性,并提高代码的可维护性和可重用性。

本文将介绍23种面向对象的设计模式。

1. 工厂方法模式工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定实例化哪个类。

在工厂方法模式中,客户端不需要知道具体的创建逻辑,只需要知道工厂类中定义的接口即可。

2. 抽象工厂模式抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定它们的具体类。

在抽象工厂模式中,客户端不需要知道具体的创建逻辑,只需要知道工厂类中定义的接口即可。

3. 单例模式单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个访问该实例的全局点。

4. 原型模式原型模式是一种创建型设计模式,它允许复制或克隆一个现有的对象,而不必知道其具体实现。

5. 建造者模式建造者模式是一种创建型设计模式,它允许逐步创建复杂的对象,而不必知道其内部实现细节。

6. 适配器模式适配器模式是一种结构型设计模式,它将一个或多个不兼容的类或接口转换为客户端所需的接口。

7. 桥接模式桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离开来,以便独立地进行修改。

8. 组合模式组合模式是一种结构型设计模式,它将一组对象作为单个对象处理,以便客户端可以以相同的方式处理单个对象和组合对象。

9. 装饰器模式装饰器模式是一种结构型设计模式,它允许向现有对象添加额外的功能,同时不改变其现有的结构。

10. 外观模式外观模式是一种结构型设计模式,它为一组复杂的子系统提供了一个统一的接口,以便于客户端使用。

11. 享元模式享元模式是一种结构型设计模式,它利用共享技术来最小化内存使用,以及提高应用程序的性能。

12. 代理模式代理模式是一种结构型设计模式,它提供了一个代理对象,使得客户端可以通过代理对象间接地访问实际对象。

面向对象的方法有哪些

面向对象的方法有哪些

面向对象的方法有哪些面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将问题分解为对象,并通过对象之间的交互来解决问题。

在面向对象编程中,我们使用类(class)和对象(object)来组织和管理代码,从而实现代码的封装、继承和多态。

面向对象的方法有以下几种:1. 封装(Encapsulation):封装是面向对象编程的基本特征之一。

它指的是将相关的属性和行为(方法)组合在一起,形成一个对象。

封装可以隐藏对象的内部细节,只提供一些外部接口,从而提高代码的可维护性和重用性。

2. 继承(Inheritance):继承是面向对象编程的另一个重要特征。

它通过创建一个新的类(子类)来继承已有类(父类)的属性和方法。

子类可以继承父类的所有非私有成员,并且可以添加自己的成员。

继承可以实现代码的重用和扩展。

3. 多态(Polymorphism):多态是面向对象编程的核心概念之一。

它指的是同一个类的实例在不同的情况下表现出不同的行为。

多态的实现方式包括函数重载和函数重写。

多态可以提高代码的灵活性和可扩展性。

4. 抽象(Abstraction):抽象是将具体的事物抽象成一般性的概念或模板。

在面向对象编程中,抽象是通过接口(interface)和抽象类(abstract class)来实现的。

接口定义了一组方法的签名,抽象类则提供了部分或者完整的方法实现。

抽象可以帮助我们定义通用的行为,并且使得程序具有更高的可复用性。

5. 组合(Composition):组合是指通过将一个类的对象作为另一个类的成员来组合两个类的关系。

组合可以实现部分和整体之间的关系,从而提高代码的灵活性和可维护性。

6. 封装(Encapsulation):封装是将对象的属性和方法封装起来,以隐藏内部实现的细节。

通过封装,对象对外只暴露有限的接口,隐藏了实现的细节,并且可以添加必要的验证和保护机制,提高代码的可靠性和安全性。

四种程序设计语言比较

四种程序设计语言比较
并发:
过程式语言的并发机制主要有会合,异步发送。
类型系统:
对于过程式语言和面向对象语言,都有顺序、条件、循环三种控制语句。过程式程序语言中多类型的雏型是联合和变体记录,程序根据运行中判别式的值自动呈现结构不同的类型,但在引用和处理中还要显式指明处理的是哪个类型变体。以便静态编译。过程式语言在处理变长数组时效率不高。
总的来说,过程式的程序设计是一种自上而下的设计方法,设计者用一个main函数概括出整个应用程序需要做的事,而main函数由对一系列子函数的调用组成。对于main中的每一个子函数,都又可以再被精炼成更小的函数。重复这个过程,就可以完成一个过程式的设计。其特征是以函数为中心,用函数来作为划分程序的基本单位,数据在过程式设计中往往处于从属的位置。
逻辑式程序设计语言:
逻辑程序设计的风格不是描述计算过程而是证明过程。一般构造一个希望的解,证明它就是所希望的解。构造过程就实施了计算。第二个特点是描述性。第三个特点是大量利用表的数据结构和递归。
Prolog程序公理部分是事实和规则(无条件和条件子句),查询是求证目标。它在封闭世界(限于规则和事实库)完成证明的演绎过程。回溯是实现各子目标同时满足的唯一方法。
由以上表中可以看出,这五个特征对“面向对象”是缺一不可的。
表达能力:
面向对象语言有4个主要特点:认识性、类别性、多态性、继承性,它们和动态绑定的结合使用,体现出面向对象语言强大的表达能力。
执行效率:
面向对象语言中,c++的执行效率也比较高,但是诸如java语言,由于是解释执行,需要生成中间代码,所以效率相对来说较低。
2、过程式程序设计语言:
过程式程序设计语言是一种为程序设计人员提供准确定义任务执行步骤的语言。在过程式程序设计语言中,程序设计人员可以指定计算机将要执行的详细的算法步骤。有时,也把过程式程序设计语言看成是指令式程序设计语言。所不同的是,过程式程序设计语言中包含了过程调用。在过程式程序设计语言中,可以使用过程或例程或方法来实现代码的重用而不需复制代码。

面向对象方法与结构化方法的比较

面向对象方法与结构化方法的比较

结构化方法和面向对象方法的比较结构化方法是结构化分析,结构化设计和结构化编程的总称,是最早最传统的软件开发方法,也是迄今为止信息系统中应用最普遍、最成熟的一种,它引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。

面向对象方法它不仅仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学。

人们普遍认为面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息和多态性等概念和原则来构造系统的软件开发方法。

结构化方法和面向对象方法二者的比较如下。

一、基本思想的比较结构化方法的基本思想主要体现在三个方面。

一、自顶向下,逐步求精:把程序看成是一个逐步演化的过程。

把一个系统与程序看成是一层一层的。

例如:户籍管理系统可以划分为:户籍迁入迁出,人员迁入迁出,户籍注销,人员注销等几个子系统,而每个子系统又划分为接收用户信息,实施处理,提供返回信息等等部分。

二、模块化:即将几个系统分成几个模块,每个模块实现特定的功能,最终整个系统由这些模块组成。

模块跟模块之间通过接口传递信息,模块最重要的特点就是独立性,模块之间还有上下层的关系,上层模块调用下层模块来实现一些功能。

三、语句结构化:顺序结构、分支结构、循环结构,都是常用的语句结构。

面向对象方法的基本思想主要有:一、客观世界中的事物都是对象,对象之间存在一定的关系,并且复杂对象由简单对象构成。

二、具有相同属性和操作的对象属于一个类,对象是类的一个实例。

三、类之间可以有层次结构,即类可以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作。

四、类具有封装性,把类内部的属性和一些操作隐藏起来,只有公共的操作对外是可见的,对象只可通过消息来请求其他对象的操作或自己的操作。

五、强调充分运用人在日常逻辑思维中经常采用的思想方法与原则。

例如:抽象,分类,继承,聚合,封装,关联等。

面向对象的优缺点

面向对象的优缺点

⾯向对象的优缺点使⽤⾯向对象思想进⾏开发有以下优点:1、易维护采⽤⾯向对象思想设计的结构,可读性⾼,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是⾮常⽅便和较低成本的。

2、质量⾼在设计时,可重⽤现有的,在以前的项⽬的领域中已被测试过的类使系统满⾜业务需求并具有较⾼的质量。

3、效率⾼在软件开发时,根据设计的需要对现实世界的事物进⾏抽象,产⽣类。

使⽤这样的⽅法解决问题,接近于⽇常⽣活和⾃然的思考⽅式,势必提⾼软件开发的效率和质量。

4、易扩展由于继承、封装、多态的特性,⾃然设计出⾼内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,⽽且成本较低。

⼋、OO⽅法特点和优缺点1.特点(1)利⽤特定软件直接从对象客体的描述到软件结构的转换。

(2)解决了传统结构化⽅法中客观世界描述⼯具与软件结构的不⼀致性。

(3)减少了从系统分析、设计到软件模块结构之间的多次转换映射的繁杂过程。

2.OO⽅法优缺点优点:(1)是⼀种全新的系统分析设计⽅法(对象、类、结构属性、⽅法)。

(2)适⽤于各类信息系统的开发。

(3)实现了对客观世界描述到软件结构的直接转换,⼤⼤减少后续软件开发量。

(4)开发⼯作的重⽤性、继承性⾼,降低重复⼯作量。

(5)缩短了开发周期。

缺点:(1)需要⼀定的软件⽀持环境。

(2)不太适宜⼤型的MIS开发,若缺乏整体系统设计划分,易造成系统结构不合理、各部分关系失调等问题。

(3)只能在现有业务基础上进⾏分类整理,不能从科学管理⾓度进⾏理顺和优化。

(4)初学者不易接受、难学。

⾯向对象⽅法学把分析、设计和实现很⾃然地联系在⼀起了。

虽然⾯向对象设计原则上不依赖于特定的实现环境,但是实现结果和实现成本却在很⼤程度上取决于实现环境。

因此,直接⽀持⾯向对象设计范式的⾯向对象程序语⾔、开发环境及类库,对于⾯向对象实现来说是⾮常重要的。

为了把⾯向对象设计结果顺利地转变成⾯向对象程序,⾸先应该选择⼀种适当的程序设计语⾔。

软件工程方法之异同

软件工程方法之异同

软件工程方法之异同软件工程方法是软件工程学科的核心内容,而软件工程方法以结构化方法和面向对象方法为主要两个阵营。

两种方法的发展都为软件开发历史做出了巨大的贡献,它们各有特点,互相区别。

两者的联系:面向对象程序设计主要克服了结构化程序设计中存在的问题。

面向对象程序设计出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。

在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。

其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。

在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。

每个函数都可以具有它们自己的局部数据。

这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。

面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。

结构化方法:结构化程序设计方法主张按功能来分析系统需求, 原则有自顶向下, 逐步求精, 模块化等.结构化程序设计首先采用结构化分析(SA)方法对系统进行需求分析, 然后采用结构化设计(SD)方法对系统进行概要设计,详细设计, 最后采用结构化编程(SP)方法实现系统.结构化程序设计按功能来把系统逐步细化, 因此又叫做面向功能的程序设计方法.结构化程序设计的每个功能都负责对数据的接收,处理,输出,这种方式又称为面向数据流的处理方式用DFD(数据流图)表示.结构化程序设计里最小的程序单元是函数.整个程序由一个个函数组成, 而整个程序的入口是一个主函数(main()), 由主函数调用其他函数,函数之间的依赖来构成整个程序的功能.结构化程序设计的局限性:设计不够直观,与人类的思维不一致.适应性差,可扩展性不强.程序的三种基本结构:结构化程序设计非常强调某个功能的算法.算法由一系列操作组成. 任何简单或复杂的算法都可以由顺序结构,选择结构,循环结构这三种基本结构来构成.面向对象方法:面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计.在系统构造中尽可能的利用人类的自然思维方式,强调以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特征,把它们抽象表示为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌.面向对象方法的三个基本特征:封装性:将对象的实现细节隐藏起来, 通过一些公共的接口方法来供外部调用对象的功能.继承性:是面向对象实现的的重要手段,子类继承父类, 子类直接获得父类的非private属性和方法.多态性:子类对象可以赋值给父类对象引用, 但运行的时候仍然表现出子类的行为特征,同一个类型的对象在执行同一个方法时, 可能表现出不同的特征.面向对象还支持如下特点:对象是面向对象最基本的概念, 它的基本特点有:标识唯一性,分类性,多态性,封装性,模块独立性好.类是具有公共属性公共方法的一类事物.类是对象的抽象, 对象是类的实例化. 类的封装提高了类的内聚性, 降低了对象之间的耦合性.对象间的相互合作需要一个机制协助进行, 这样的机制称为"消息", 消息是一个实例与另一个实例之间的相互通信的机制.面向对象方法中,类之间的共享属性和共享方法的机制称为继承.继承具有传递性.继承分为多继承和单继承."基于对象"和面向对象面向对象和"基于对象"都实现了"封装"的概念, 但是面向对象实现了"继承和多态", 而"基于对象"没有实现.两者比较:显而易见,结构化方法和面向对象方法在设计程序的时候的思想是有着本质的不同的。

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解面向对象设计是一种广泛应用于软件开发的思想,其核心在于将数据和操作封装在一起形成对象,并通过各种方式进行交互和组合,从而实现复杂的功能。

在这一过程中,设计模式起到了非常重要的作用,可以有效地提高代码的可读性、可维护性和可扩展性。

本文将对23种常见的设计模式进行详解。

一、创建型模式1.简单工厂模式简单工厂模式属于创建型模式,其目的是提供一个工厂类,使得创建对象的过程更加简单。

在这种模式中,使用者只需要提供所需对象的参数,而无需关心对象的具体实现细节。

简单工厂模式适合于对象创建过程较为简单的情况。

2.工厂方法模式工厂方法模式是简单工厂模式的进一步扩展,其核心在于将工厂类进行接口抽象化,使得不同的工厂类可以创建不同的对象实例。

工厂方法模式适合于对象创建过程较为复杂的情况。

它可以为工厂类添加新的产品类型,而不会影响原有的代码。

3.抽象工厂模式抽象工厂模式是工厂方法模式的进一步扩展,其目的是提供一个可以创建一系列相关或者独立的对象的接口。

在抽象工厂模式中,使用者只需要关心所需对象组合的类型,而无需关注对象的具体实现过程。

4.建造者模式建造者模式也是一种创建型模式,其目的在于将复杂对象分解为多个简单的部分,并将其组装起来形成复杂对象实例。

在建造者模式中,使用者只需要关注所需对象以及它们的组合方式,而无需关心对象的具体实现过程。

5.原型模式原型模式是一种基于克隆的创建型模式,其核心在于通过复制现有的对象实例来创建新的对象。

在原型模式中,对象实例的创建过程与对象所包含的状态密切相关。

原型模式适合于创建复杂对象实例,且这些对象实例之间是相对独立的情况。

二、结构型模式6.适配器模式适配器模式是一种结构型模式,其目的在于将一个类的接口转换为另一个类所能使用的接口。

在适配器模式中,使用者可以通过不同的适配器实现对象之间的互相调用。

7.桥接模式桥接模式是一种结构型模式,其目的在于将抽象部分与实现部分相互分离,从而使得两者可以独立变化。

软件工程方法之异同

软件工程方法之异同

软件工程方法之异同软件工程方法之异同软件工程方法是软件工程学科的核心内容,而软件工程方法以结构化方法和面向对象方法为主要两个阵营。

两种方法的发展都为软件开发历史做出了巨大的贡献,它们各有特点,互相区别。

两者的联系:面向对象程序设计主要克服了结构化程序设计中存在的问题。

面向对象程序设计出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。

在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。

其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。

在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。

每个函数都可以具有它们自己的局部数据。

这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。

面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。

结构化方法:结构化程序设计方法主张按功能来分析系统需求, 原则有自顶向下, 逐步求精, 模块化等.结构化程序设计首先采用结构化分析(SA)方法对系统进行需求分析, 然后采用结构化设计(SD)方法对系统进行概要设计,详细设计, 最后采用结构化编程(SP)方法实现系统.结构化程序设计按功能来把系统逐步细化, 因此又叫做面向功能的程序设计方法.结构化程序设计的每个功能都负责对数据的接收,处理,输出,这种方式又称为面向数据流的处理方式用DFD(数据流图)表示.结构化程序设计里最小的程序单元是函数.整个程序由一个个函数组成, 而整个程序的入口是一个主函数(main()), 由主函数调用其他函数,函数之间的依赖来构成整个程序的功能.结构化程序设计的局限性:设计不够直观,与人类的思维不一致.适应性差,可扩展性不强.程序的三种基本结构:结构化程序设计非常强调某个功能的算法.算法由一系列操作组成. 任何简单或复杂的算法都可以由顺序结构,选择结构,循环结构这三种基本结构来构成.面向对象方法:面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计.在系统构造中尽可能的利用人类的自然思维方式,强调以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特征,把它们抽象表示为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌.面向对象方法的三个基本特征:封装性:将对象的实现细节隐藏起来, 通过一些公共的接口方法来供外部调用对象的功能.继承性:是面向对象实现的的重要手段,子类继承父类, 子类直接获得父类的非private属性和方法.多态性:子类对象可以赋值给父类对象引用, 但运行的时候仍然表现出子类的行为特征,同一个类型的对象在执行同一个方法时, 可能表现出不同的特征.面向对象还支持如下特点:对象是面向对象最基本的概念, 它的基本特点有:标识唯一性,分类性,多态性,封装性,模块独立性好.类是具有公共属性公共方法的一类事物.类是对象的抽象, 对象是类的实例化. 类的封装提高了类的内聚性, 降低了对象之间的耦合性.对象间的相互合作需要一个机制协助进行, 这样的机制称为"消息", 消息是一个实例与另一个实例之间的相互通信的机制.面向对象方法中,类之间的共享属性和共享方法的机制称为继承.继承具有传递性.继承分为多继承和单继承."基于对象"和面向对象面向对象和"基于对象"都实现了"封装"的概念, 但是面向对象实现了"继承和多态", 而"基于对象"没有实现.两者比较:显而易见,结构化方法和面向对象方法在设计程序的时候的思想是有着本质的不同的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

普通本科毕业小论文题目:比较四种典型面向对象方法的异同学院软件与通信工程学院学生姓名张伟聪学号 0123992 专业软件工程届别 125指导教师廖汉成二O一四年九月二十七日一、引言随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。

特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提出了更高的要求。

结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化。

发展软件质量,缩短软件开发周期,发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新方法、新技术,探索新途径。

面向对象的方法是一种分析方法、设计方法和思维方法。

面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。

也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。

其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。

面向对象程序设计方法起源于六十年代末期的语言SIMULA’67,到了七十年代末期,软件行业正受到软件危机的困扰,结构化的开发方法不能够很好地解决软件危机。

面向对象语言Smalltalk的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象也和开发方法开始结合,出现了面向对象的开发方法。

自80年代后期以来,相继出现了多种面向对象开发方法,现将其中四种典型的方法作一个简介和比较。

面向对象方法都支持三种基本的活动:识别对象和类,描述对象和类之间的关系,以及通过描述每个类的功能定义对象的行为。

一.Booch方法Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。

1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。

Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型和物理模型,描述了系统的构成和结构,动态模型分为状态图和时序图。

该方法对每一步都作了详细的描述,描述手段丰富、灵活。

不仅建立了开发方法,还提出了设计人员的技术要求,不同开发阶段的资源人力配制。

OOD[3](Object Oriented Design)方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。

OOD主要包括下述概念:类(class)、对象(object)、使用(uses)、实例化(instantiates)、继承(inherits)、元类(meta class)、类范畴(class category)、消息(message)、域(field)、操作(operation)、机制(mechanism)、模块(module)、子系统(subsystem)、过程(process)等。

其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。

元类是类的类。

类范畴是一组类,它们在一定抽象意义上是类同的。

物理的一组类用模块来表达。

机制是完成一个需求任务的一组类构成的结构。

Booch方法的过程包括以下步骤:(1)在给定的抽象层次上识别类和对象;(2)识别这些对象和类的语义;(3)识别这些类和对象之间的关系;(4)实现类和对象;这四种活动不仅仅是一个简单的步骤序列,而是对系统的逻辑和物理视图不断细化的迭代和渐增的开发过程。

类和对象的识别包括找出问题空间中关键的抽象和产生动态行为的重要机制。

开发人员可以通过研究问题域的术语发现关键的抽象。

语义的识别主要是建立前一阶段识别出的类和对象的含义。

开发人员确定类的行为(即方法)和类及对象之间的互相作用(即行为的规范描述)。

该阶段利用状态转移图描述对象的状态的模型,利用时态图(系统中的时态约束)和对象图(对象之间的互相作用)描述行为模型。

在关系识别阶段描述静态和动态关系模型。

这些关系包括使用、实例化、继承、关联和聚集等。

类和对象之间的可见性也在此时确定。

在类和对象的实现阶段要考虑如何用选定的编程语言实现,如何将类和对象组织成模块。

在面向对象的设计方法中,Booch强调基于类和对象的系统逻辑视图与基于模块和进程的系统物理视图之间的区别。

他还区别了系统的静态和动态模型。

然而,他的方法偏向于系统的静态描述,对动态描述支持较少。

Booch方法的力量在于其丰富的符号体系,包括:. 类图(类结构-静态视图). 对象图(对象结构-静态视图). 状态转移图(类结构-动态视图). 时态图(对象结构-动态视图). 模块图(模块体系结构). 进程图(进程体系结构)用于类和对象建模的符号体系使用注释和不同的图符(如不同的箭头)表达详细的信息。

Booch建议在设计的初期可以用符号体系的一个子集,随后不断添加细节。

对每一个符号体系还有一个文本的形式,由每一个主要结构的描述模板组成。

符号体系由大量的图符定义,但是,其语法和语义并没有严格地定义。

二.OMT方法Rumbaugh等人提出了面向对象的建模技术—OMT(Object Modelling Technique)方法,采用了面向对象的概念,并引入各种独立于语言的表示符。

OMT 方法讨论的核心就是建立三类模型:对象模型、动态模型、功能模型。

对象模型描述了由对象和相应实体构成的系统静态结构,描述了系统中对象的标识,属性、操作及对象的相互关系,该模型使用了对象图来描述,它是分析阶段3个模型的核心,提供了其它两类模型都适用的框架。

主要的概念包括:a.类;b.属性;c.操作;d.继承;e.关联(即关系);f.聚集。

动态模型根据事件和状态描述了系统的控制结构,系统中与时间和操作顺序有关的内容。

如:标记变化的事件,事件的顺序,定义事件背景的状态等。

其主要概念有:a.状态;b.子状态和超状态;c.事件;d.行为;e.活动。

功能模型着重描述系统中与值的转换有关的问题,如函数、映射、约束和功能作用等。

其主要概念有:a.加工;b.数据存储;c.数据流;d.控制流;e.角色。

三类模型描述的角度不同,却又相互联系。

OMT方法将开发过程分为四个阶段:1. 分析基于问题和用户需求的描述,建立现实世界的模型。

分析阶段的产物有:. 问题描述. 对象模型=对象图+数据词典. 动态模型=状态图+全局事件流图. 功能模型=数据流图+约束2. 系统设计结合问题域的知识和目标系统的体系结构(求解域),将目标系统分解为子系统。

3. 对象设计基于分析模型和求解域中的体系结构等添加的实现细节,完成系统设计。

主要产物包括:. 细化的对象模型. 细化的动态模型. 细化的功能模型4. 实现将设计转换为特定的编程语言或硬件,同时保持可追踪性、灵活性和可扩展性。

OMT的特点有以下几点:(1)自底向上的归纳OMT的第一步是从问题的陈述入手,构造系统模型。

从真实系统导出类的体系,即对象模型包括类的属性,与子类、父类的继承关系,以及类之间的关联。

类是具有相似属性和行为的一组具体实例(客观对象)的抽象,父类是若干子类的归纳。

因此这是一种自底向上的归纳过程。

在自底向上的归纳过程中,为使子类能更合理地继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。

由于这种类体系的构造是从具体到抽象,再从抽象到具体,符合人类的思维规律,因此能更快、更方便地完成任务。

这与自顶向下的Yourdon方法构成鲜明的对照。

在Yourdon方法中构造系统模型是最困难的一步,因为自顶向下的"顶"是一个空中楼阁,缺乏坚实的基础,而且功能分解有相当大的任意性,因此需要开发人员有丰富的软件开发经验。

而在OMT中这一工作可由一般开发人员较快地完成。

在对象模型建立后,很容易在这一基础上再导出动态模型和功能模型。

这三个模型一起构成要求解的系统模型。

(2)自顶向下的分解系统模型建立后的工作就是分解。

与Yourdon方法按功能分解不同,在OMT中通常按服务(Service)来分解。

服务是具有共同目标的相关功能的集合,如I/O处理、图形处理等。

这一步的分解通常很明确,而这些子系统的进一步分解因有较具体的系统模型为依据,也相对容易。

所以OMT也具有自顶向下方法的优点,即能有效地控制模块的复杂性,同时避免了Yourdon方法中功能分解的困难和不确定性。

(3)OMT的基础是对象模型每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据。

因此Jackson方法和PAM中输入、输出数据结构与整个系统之间的鸿沟在OMT中不再存在。

OMT不仅具有Jackson方法和PAM的优点,而且可以应用于大型系统。

更重要的是,在Jackson 方法和PAM方法中,当它们的出发点———输入、输出数据结构(即系统的边界)发生变化时,整个软件必须推倒重来。

但在OMT中系统边界的改变只是增加或减少一些对象而已,整个系统改动极小。

(4)需求分析彻底需求分析不彻底是软件失败的主要原因之一。

OMT彻底解决了这一问题。

因为需求分析过程已与系统模型的形成过程一致,开发人员与用户的讨论是从用户熟悉的具体实例(实体)开始的。

开发人员必须搞清现实系统才能导出系统模型,这就使用户与开发人员之间有了共同的语言,避免了传统需求分析中可能产生的种种问题。

(5)更重要的是OMT彻底解决了软件的可维护性在OMT之前的软件开发方法都是基于功能分解的。

尽管软件工程学在可维护方面作出了极大的努力,使软件的可维护性有较大的改进。

但从本质上讲,基于功能分解的软件是不易维护的。

因为功能一旦有变化都会使开发的软件系统产生较大的变化,甚至推倒重来。

更严重的是,在这种软件系统中,修改是困难的。

由于种种原因,即使是微小的修改也可能引入新的错误。

所以传统开发方法很可能会引起软件成本增长失控、软件质量得不到保证等一系列严重问题。

正是OMT 才使软件的可维护性有了质的改善。

三.OOSE方法Jacobson于1994年提出了面向对象的软件工程——OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。

use case是指行为相关的事务(transaction)序列,该序列将由用户在与系统对话中执行。

因此,每一个use case就是一个使用系统的方式,当用户给定一个输入,就执行一个use case 的实例并引发执行属于该use case的一个事务。

基于这种系统视图,Jacobson将use case模型与其它五种系统模型关联:. 领域对象模型,即需求模型。

use case模型根据领域来表示。

. 分析模型。

use case模型通过分析来构造。

. 设计模型。

use case模型通过设计来具体化。

相关文档
最新文档