结构化方法与面向对象方法之应用比较

结构化方法与面向对象方法之应用比较

一、结构化方法

1.结构化方法简述

    结构化方法是计算学科的一种典型的系统开发方法。它采用了系统科学的思想方法,从层次的角度,自顶向下地分析和设计系统。结构化方法包括结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三部分内容。其中,SA 和SD 主要属于学科抽象的内容,SP 则主要属于学科设计方面的内容。

    在结构化方法中,有两大类典型方法,一类是以Yourdon 的结构化设计、Gane/Sersor构化分析方法以及Demarco 结构化分析方法为代表的面向过程的方法;另一类是以Jackson 方法和Warnier-Orr 方法为代表的面向数据结构的方法。

2.结构化方法遵循的基本原则

(1)抽象原则,(2)分解原则,(3)模块化原则。

3.结构化方法的核心问题

    模型问题是结构化方法的核心问题。建立模型是为了更好地理解要模拟的现实世界。建模通常是从系统的需求分析开始,在结构化方法中,就是使用SA 方法构建系统的环境模型;然后使用SD 方法,确定系统的行为和功能模型;最后用SP 方法进行系统的设计。SD 的主要任务就是要在系统环境模型的基础上建立系统的行为和功能模型,完成系统内部行为的描述。实现系统行为和功能模型的主要工具有:数据字典、数据流图、状态变迁图和实体一联系模型等。

4.结构化方法建模工具

(1).数据字典

    数据字典是一个包含所有系统数据元素定义的仓库。数据元素的定义必须是精确的、严格的和明确的。一个实体一般应包括以下几个部分的内容:名字;别名;用途;内容描述;备注信息

(2).数据流图

    数据流图是SA 和SD 的核心技术, 它采用面向处理过程的思想描述系统,它是一种描述信息流和数据从输入到输出变换的应用图形技术。模拟系统的一个大致边界,并展示系统和外部的接口、数据的输入和输出以及数据的存储。

(3).状态变迁图

    状态变迁图及时地描述了对象的状态,它着重系统的时间依赖行为。状态变迁图源于实时系统的建模。状态变迁图看起来非常像数据流图,然而,它们之间却存在着本质的不同。数据流图着重于数据流和数据转换的过程,而状态变迁图着重于状态的描述,如激励发生时的开始状态和系统执行响应后的结果状态。状态变迁图的条件和一个过程的输入数据流相对应,同时,还与控制流的流出相对应。

(4).实体联系模型

    实体联系模型被用来模拟系统数据部件之问的相互关系。实体联系模型独立于当前的系统状态,并与具体的计算机程序设计语言无关。

二、面向对象方法

1.面向对象方法简述

    面向对象(Object—oriented,简称OO)方法是以面向对象思想为指导进行系统开发的一类方法的总称。这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。

2.面向对象方法的基本思想

    面向对象技术的基本思想是尽可能地运用人类的自然思维方式来构造软件系统。现实世界的问题是由客观实体和实体之间的联系构成的,对象就是客观实体的抽象。面向对象的方法自出现以来很快受到计算机软件界的青睐,并迅速成为世纪年代的主流开发方法。

 

    面向对象方法学的基本观点如下客观世界是由对象组成的。任何客观的事物或实体都是对象,复杂的对象可以由简单的对象组成。具有相同的数据和相同的操作的对象可以归并为一个类,对象是对象类的一个实例。从一个类可以产生许多对象。类可以派生出子类,子类继承父类的全部特性数据和操作,又可以有自己的新特性。子类与父类形成类的层次结构。对象之间通过消息传递相互联系。类具有封装性,它的数据与操作等对于外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务。

 

    面向对象是一种新的软件工程方法,新的程序设计范型,其基本技术是使用对象、类、继承、封装、消息等基本概念进行程序设计和实现。因此可以说面向对象=对象类+继承+通信。如果一个计算机软件系统采用这些概念来建立模型并予以实现,它就是面向对象的。

 

    面向对象方法学包括面向对象分析,面向对象设计,面向对象编程,以及面向对象测试。这里主要涉及到与过程建模密切相关的面向对象的分析和设计。从软件过程的定义可以看出,面向过程的方法学在建模过程中的关注焦点不是对象的内部性质,因此,有关不同开发领域的度量信息历史数据库可以帮助开发人员有信心去理解这些关系,并且有信心得到动态模型的预期结果。

3.面向对象方法的核心问题

    面向对象方法的核心问题也是模型问题。面向对象模型主要由OOA 模型、OOD 模型组成。其中,OOA 主要属于学科抽象方面的内容,OOD 主要属于学科设计方面的内容。

4.面向对象方法主要模型

(1).OOA 模型

    OOA 关心的是构建现实世界的模型问题。如何解决现实世界的建模问题呢?根据系统科学的思想,首先需要对复杂的系统进行分解,最常用的分解方法就是分层。关于OOA 模型的分层方法有不少, 本书采用P.Coad 和E.Yourdon 的分层方法。该方法将OOA 模型划分为5 个层次,即:主题层、对象层、结构层、属性层和服务层。OOA 的主要任务就是要在问题域上构建具有这5 个层次内容的OOA 模型。

(2).OOD 模型

    OOD 根据设计的需要,仅对OOA 在问题域方面建立的5 个抽象层次进行必要的增补和调整,同时,OOD 还必须对人机交互、任务管理和数据管理3个部分的内容进行抽象,最后建立完整的OOD 模型。

三、结构化与面向对象方法对比

    结构化设计从系统的功能入手,按照工程标准和严格规范将系统分解为若干功能模块。然而,由于用户的需求和软、硬件技术的不断发展变化,作为系统基本成分的功能模块很容易受到影响,局部修改甚至会引起系统的根本性变化。开发过程前期入手快而后期频繁改动的现象比较常见。

    面向对象方法则从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言,具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型。对象、类、继承性、多态性、动态定连概念和设施的引入使用,显然令面向对象的设计方法具有一定的优势,能为生产可重用的软件构件和解决软件的复杂性问题提供一条有效的途径。

1.结构化方法的优点

1)从系统整体出发,强调自上而下的分析,保证了系统的整体性和目标的一致性;

2)采用分块处理问题的方法,可以降低问题处理的难度;

3)严格区分系统开发的阶段性,便于系统开发的管理和控制;

4)规范化的文档,思路清晰,方便开发人员编程以及便于软件后期的维护。

2.结构化方法的不足

1)对问题域的认识。结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物——对象作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题。同时,当系统较复杂时,很难检验分析的正确性。 因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。

2)分析与设计差异。 结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致。结构化分析的结果数据流图(DFD)和结构化设计结果模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”不存在可靠的转换规则,而更多地是带有人为的随意性,容易因理解上的错误而埋下隐患。

3)难以适应需求变化。结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。

4)重用性差。结构化分析与设计清楚的定义了系统的接口,当系统对外界接口发生变动时,可能会造成系统结构产生较大的变动,难以扩充新的功能接口。

5)软件可维护性差,由于软件的可修改性差,导致维护困难,造成维护费用太高。

3.面向对象方法的优点

1)可重用性好,由于把大问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作变得容易。

2)编程容易,由于面向对象更接近现实,可以从现实出发,进行适当的抽象。

3)由于与人类习惯的思维方式一致,使得用户和维护人员更容易理解,在软甲维护中可维护性更高,便于测试和调试。

4)系统开发循序渐进,反复修改,确保较好的用户满意度。

4.面向对象方法的不足

1)对客观事物判断的不确定性。面向对象方法中对象的确定有时会因客观边界模糊而难以确定,即使确定下来也将会带有很多人为的因素,这样就很难保证软件描述的正确性。

2)认识差异。在问题域模型中,面向对象方法把具体或抽象的问题域或现象直接表述为对象,同时把现象类型直接表述为类。大多数面向对象分析方法支持多视角模型, 即对同一问题域现象,不同的主体可以将它表述为同一对象或类型,但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述。也就是说,在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为。对象或类,但却不能表述各自之间存在的对问题域现象的不同认识。

四、总结

    结构化方法和面向对象方法是目前的主要软件开发方法, 它们各有优缺点。 软件工程的目标是以最小的代价开发出满足用户需求的软件。在有些特定的应用场合,可以在软件开发过程中结合它们的优点,一起运用到软件开发中去。在实际的软件开发过程中,采用两种或两种以上的方法相结合,发挥各种方法的长处,在软件工程的理论研究和工程实践中都有重要的意义。

 

posted @ 2016-12-21 17:43  李子涵  阅读(947)  评论(0)    收藏  举报