首页 > 代码库 > 结构化方法与面向对象方法之应用比较

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

 

         结构化方法与面向对象方法是最具代表性的,也是目前应用最为广泛的软件开发方法。本文将分别对两者进行介绍和比较。

 

  一、结构化方法

    结构化方法(Structured Methodology)是计算机学科的一种典型的系统开发方法。它采用系统科学的思想方法,从层次的角度,自顶向下地分析和设计系统。基本思想是基于功能的分解和抽象,形成系统的模块结构,从而针对每个模块进行结构化设计及结构化编程来完成系统的开发。

结构化方法由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三者组成。

  (一)结构化分析

    结构化分析是面向数据流进行需求分析的方法。采取的工具主要有数据流图、数据字典、实体关系图等。

    数据流图(Data Flow Diagram,DFD)是一种分层的建立系统逻辑模型的方法,模拟系统的一个大致边界,并展示系统和外部的接口、数据的输入输出以及数据的存储。它有四个基本要素:数据流、实体、数据加工和数据存储。数据流图分层的思想体现为,首先确定系统和系统涉及到的外部实体之间的数据流,画出第0层数据流图(顶层图);其次在顶层图的基础上对系统的主要功能进行分析,抽象出功能作为系统的加工,确定实体和加工之间的数据流,将顶层图细化为第1层数据流图;依此类推,之后不断细化得到第2、3乃至更多层的数据流图,直到不能再细化为止。

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

    实体关系图(E-R图)是数据库设计的基础,是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式。

  (二)结构化设计

    结构化设计是指在结构化分析的基础上,映射分析模型到设计模型,得到系统的模块结构、数据库结构等。如在数据流图的基础上,进行相应的变换分析和事务分析得到系统的模块结构,在ER模型的的基础上,进行数据库设计得到数据库结构。

  (三)结构化程序设计

    结构化程序设计是指在结构化设计的基础上,对每个模块结构进行处理过程设计,分析每个模块内部的逻辑程序结构,并用具体的编程语言实现该逻辑结构。

 

  二、面向对象方法

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

和结构化方法相类似,面向对象方法由三部分组成:面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)。

  (一)面向对象方法的特点

    面向对象方法构建的软件系统中,软件中任何一个元素都是对象,复杂的软件对象由相对简单的软件对象组成,各个对象之间仅能通过传递消息互相联系。用对象分解取代了传统的功能分解。将对象划分为对象类,每个对象类都定义一组数据和一组方法。按照子类和父类的关系,将若干对象类组成一个具有层次结构的系统。

    封装性:把数据和实现操作的代码集中起来放在对象内部,不能从外部直接访问或修改。

    继承性:指子类能够直接获得父类已有的性质和特性,而不必重新定义。

    多态性:允许将父对象设置成和它的一个或多个子对象相等的技术,允许每个对象以适合自己的方式去响应共同的消息。即发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。

    对象、类、封装性、继承性、多态性的引入,令面向对象方法相较于结构化方法有一定优势,能为生产可重用的软件构件和解决软件的复杂性问题一共一条有效的途径。

  (二)面向对象分析和设计(OOA&OOD)

    面向对象方法采用统一建模语言UML,它是面向对象开发中的一种通用的、图形化的模型语言,是近代软件工程中对象分析和设计的重要工具。

    OOA过程:首先使用用例图(Use Case Diagram)从用户角度描述系统功能并指出各功能的操作者,然后根据需求建立系统的静态模型来构造系统的结构。静态模型包括类图(Class Diagram)、对象图(Object Diagram)和包图(Package Diagram)。类图描述了系统之间的类及其相互之间的关系,其本质反映了系统中对象的类型以及对象之间的各种静态关系,如关联、依赖、聚合等。对象图是类图的实例。包图用于描述系统的分层结构。最后根据系统执行时的时许状态或交互关系来描述系统的行为,从而构造其动态模型,包括交互图(Interaction Diagram )、状态图(Status Diagram)和活动图(Activity Diagram)等。交互图描述对象间的交互关系,包括顺序图和合作图。状态图描述对象的所有可能状态以及事件发生时状态的转移条件。活动图描述为满足用例要求所进行的活动以及活动间的约束关系。

    OOD过程:对象行为和对象间交互作用的进一步细化;用例的设计和实现;精化OOA阶段的交互图、状态图、活动图;确定系统可重用的类或部件;用构件图(Component Diagram)描述代码部件的物理结构及相互之间的依赖关系;用配置图(Deployment Diagram)描述软硬件的物理体系结构。

    面向对象分析和面向对象设计二者之间不存在明显的界限,分析可以作为设计的一部分。在分析阶段获得的信息,不仅是设计阶段的输入,同时也是设计阶段的一个完整部分。分析得到对象及其相互关系,而设计则是解决这些对象及其相互关系的实现问题。

 

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

  (一)  相同点

    ①两者都是软件开发方法,目的都是为了把客观世界中要解决的问题转化为软件开发中的问题并加以解决。

    ②在分析和设计的过程中都运用到抽象和分解的方法,逐层逐步的实现系统的分析和设计。

    ③在设计的过程中都注重遵循局部化的原则。局部化是指在软件开发过程中,不希望软件一部分过多地设计或影响软件的其他部分。在结构化方法中主要体现在代码与数据的分隔化,在面向对象方法中主要体现在数据、代码的封装上。

    ④在实现地过程中都注重遵循重用性的原则。重用性即复用性,是软件或软件构件能为其他软件所复用的一种特性。在结构化方法中主要体现在基本模型的组合实现,在面向对象方法中主要体现在类的继承和对象组合上。

  (二)  不同点

    ①出发点不同。结构化方法以过程为中心,强调过程抽象化和模块化,是一种面向过程的程序开发方法。面向对象方法以对象为中心,强调把问题域映射到对象与对象之间的接口上,使用符合人们通常的思维方式来处理问题。

    ②概念以及术语名词不同。结构化方法中的过程、函数、数据。面向对象方法中的类、对象、继承。

    ③具体的编程语言不同。结构化方法的C、BASIC、FORTRAN。面向对象方法的C++、VB、JAVA。

    ④分析设计时使用的逻辑工具不同。结构化方法的数据流图、实体关系图等。面向对象方法的对象模型图、功能模型图等。

    ⑤控制程序的方式不同。结构化方法设计的系统通过调用子程序和返回。面向对象方法通过“事件驱动”来激活和运行程序。

    ⑥可扩展性与可重用性不同。结构化方法设计的系统扩展性差、可重用性低,功能变化会影响到整个系统。面向对象方法扩展性好、可重用性高,功能变化只需增加或者修改操作,而基本的对象结构都不用改变。

    ⑦运行效率不同。结构化方法设计的系统运行效率高。面向对象方法的程序运行效率低。

  (三)  评价与总结

    如上述,结构化方法和面向对象方法各有优缺点。在提高程序的可重用性和可维护性上,面向对象方法更胜一筹。但面向对象方法的基础仍是结构化程序设计,并且在一些大型信息系统的开发过程中,结构化方法仍有很大的作用。因此,在开发软件的过程中,要善于选择或者结合这两种方法,发挥各自的优势,达到提高软件开发效率,降低成本,提高软件可维护性的目的。

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