编程语言 结构化方法与面向对象方法之应用比较

编程语言 12/16 阅读 383 views次 人气 0
摘要:

一、序言:

软件开发方法是指,在软件工程的投资额度,预期时间内,对用户的需求进行分析,设计,编码实现的这一过程。根据现代软件工程的不同需求,软件开发方法有多种策略,并没有严格意义上的优劣之分。今天我们来了解一下结构化方法(structured methodology)与面向对象方法(object-oriented methodology)。

本文将主要由三部分组成,第一部分将会回顾一下结构化方法。第二部分将会介绍面向对象方法。第三部分将会是关于两种方法的应用情形的一些讨论,以及个人理解。

二、结构化方法:

1.发展历史:

1966 年C-BOhm G-Jacopini 首先提出了关于“程序结构”的理论并给出了任何程序的逻辑结构都可以用顺序结构选择结构和循环结构来表示的证明

这一理论和证明的出现标志着计算机领域在程序设计和实现方面开始形成一种体系。在程序结构理论的基础上1968 年E.W.Dijkstra提出了“GOTO 语句是有害的”的论述引起普遍重视此后结构化程序设计SP 逐渐形成并成为计算机软件领域的重要方法对计算机软件的发展具有重要的意义 伴随着 SP 的形成相继出现了 Modula-2C 以及 Ada 等结构化程序设计语言。

总体而言,结构化方法出现于20世纪70年代前后,是一种早期的传统软件工程的主要软件开发方法。

2.基本思想:

结构化开发方法主要由三部分组成:structured analysis(结构化分析),structured design(结构化设计),structured programming(结构化程序设计)。所谓结构化,就是指基于功能的分解与抽象,形成系统的模块结构,从而针对每个模块进行结构化设计及结构化编程来完成系统的开发,把一个复杂的系统分解成容易求解的各个模块,从而把复杂的问题简单化。在实际使用中,需要遵循三条主要的原则,抽象原则分解原则模块化原则

一般来讲,结构化也可以认为是过程化的。因为结构化的分析、设计,都是基于系统要实现的各种功能,根据数据的处理、变化、走向,来分解并设计各个模块,以及模块之间的配合。

3.结构化的分析内容:

结构化的分析是面向数据流的分析方法,主要用到的工具是:数据字典、数据流图状态变迁图和实体一联系模型等。下面将会一一介绍。

数据字典:一个包含所有系统中将会使用到的数据元素定义的字典。数据元素的定义必须是精确的严格的和明确的 一个实体一般应至少包括以下几个部分的内容名字,用途,数据结构描述

数据流图:数据流图是结构化分析和结构化设计的核心技术,它采用面向处理过程的思想来描述系统从易于理解的角度来讲,它实际上就是一种描述信息流和数据从输入到输出变换的图表将会模拟系统数据流动的的一个大致边界并展示系统和外部的接口数据的输入和输出以及数据的存储注意数据流图一般需要详细考虑系统的各种功能,给出每一层的数据处理情况。

状态变迁图:描述系统内的运行状态,和数据流图有一定的相似性,但是数据流图强调的是数据的流动,数据的依赖关系。而状态变迁图则侧重于数据处理前后的状态变化。

实体一联系模型:实体一联系模型被用来模拟系统模块之问的相互关系。

4.结构化的设计内容:

在结构化分析的基础上,映射分析所得到的模型到结构化设计模型,以得到系统的模块结构、数据库结构等。

系统模块结构将会从之前的数据流图等分析中抽象出来,根据所接触的数据流层数的不同,系统模块将会有高层和底层的区分,以及调用和被调用的关系。一般来讲,为了完成一个高性能的软件系统,通常模块的设计被要求是高聚合,低耦合的,也就是所说的一个模块完成一个明确的单一任务,不同模块之间要尽量相互独立。

数据库结构将会从之前分析阶段的实体关系获得,注意这一部分实际上是数据库系统的知识,需要系统的分析,设计。一般的要求是所建立的数据库应当满足三范式的要求。

三、面向对象方法:

1.发展历史:

面向对象方法的起源更大程度上和语言相关,即面向对象的编程语言(Object-oriented program language)的发展推动了面向对象的分析和设计方法。面向对象程序语言的研究和使用始于 20 世纪 60 年代后期第一个OOPL是挪威计算中心于 1967 年研制的 Simula 语言该语言引入了许多面向对象的概念如类和继承等 Simula语言的影响1972 年Xerox公司研制Smalltalk语言,并对面向对象的概念进行了更加精确的定义。此后OOPL 得到了极大地发展相继出现了一大批实用的面向对象语言

20世纪80年代中期随着OOPL推广使用面向对象技术很快被应用到系统分析和系统设计中20世纪90年代面向对象分析Obiect-Oriented Analysis和面向对象设计Object—Oriented Design)开始成熟。

2.面向对象方法简述:

面向对象的方法主要分为以下几个部分:面向对象分析(OOA) 面向对象设计(OOD)和面向对象程序设计(OOP)。其中面向对象分析是最为核心的一个部分。面向对象的设计基本上是对OOA做必要的增补和调整。

面向对象分析:主要为5个层次进行设计,主题层、对象层结构层属性层和服务层 OOA 的主要任务就是要在问题域上构建具有这 5 个层次内容的 OOA 模型主题层:为用户提供关于每个部分的说明,相当于是一种概念模型,给读者直观的功能理解。对象层,给出对于系统的一个抽象内容的封装分类表述,对象是属性及其服务的一个封装。结构层,用于区分整体与部分的一个描述层次,给出整体内的各部分结构以及相互关系。属性层,详细描述对象的属性。服务层,给出系统内各个组件对于给诋毁那个输入的处理情况的描述。设计阶段经常使用的图例是,用例图,类图,顺序图,活动图。

四、问题描述和应用对比:

以一个简易的课程系统为例子,该系统要完成考试成绩管理,课程信息管理。学生和教师可以登录/注册。课程选择已经确定,学生可以查询课程信息,查询成绩。教师可以查询/登记成绩,查询学生,发布信息。

结构化方法的数据流图顶层图大致如下:

 

面向对象方法的用例图大致如下:

 

这里只是给出了两种方法中的一笑部分工作。我们可以看出两者在对于问题的理解上有着本质的不同。这也可以理解为对于世界的认知方式的差异。结构化方法认为系统的运行过程就是一个个处理过程的执行过程,是数据流动的过程。因此强调对于处理过程的设计,安排,对于数据流图的逐层设计。而弱化了数据之间的关系,系统接触的对象的联系。而后者,面向对象的方法的特点,就是认为世界是由对象构成。通过抽象对象为类,获得对系统的整体设计,并逐层分析,设计,对象的属性,对象内部的结构,对象提供的服务。换言之,面向对象的方法,强调对于对象及其属性的管理,相对弱化了数据流动的处理的概念(取而代之的是对象之间的依赖关系)。

以我个人的观点来看。二者并无明显的优劣,一个好的软件工程开发方法,应当兼备两者的优点。面向对象的方法抽象层次更好,一定程度上更能够减少数据管理错误的出现,但是也在另一方面造成了一定的性能损失,因为需要为对象进行管理。结构化方法能够很快的抓住问题的处理方法和流程,因此适用于模块内,对于一个比较复杂的功能的划分和处理。

这里有一点比较有趣。面向对象方法仅仅是方法,同理结构化方法也仅是方法,没有人规定二者一定要用特定的语言进行实现。OOPL也可以使用结构化的方法,面向对象的方法也可以使用过程语言进行具体编码。只不过在条件允许的情况下没必要采用这种麻烦且没必要的方式。



参考文献:

《结构化方法与面向对象方法在建模中的应用与比较》  机电技术 2011年10月 作者:林玲

《软件开发方法——结构化方法与面向对象方法比较》 科技信息 2011年13期 作者:汪寒昊 谢加胜 邢 跃



评论

该文章不支持评论!

分享到: