zoukankan      html  css  js  c++  java
  • 结构化方法和面向对象方法的比较

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

    一、结构化方法起源和发展

    1.1 结构化方法概述

    结构化方法起源于结构化程序设计,具有面向功能、结构清晰、支持逐步求精等特点,使软件易于维护。在运用结构化开发方法时,设计人员首先需要运用抽象(Abstraction)方法在最高层次上描述问题的解决方案,之后,设计人员在进行逐步求精(Refinement),即通过逐步细化结构最终得出问题的解决方案,在此过程中各个结构内部的信息对外部是不可见的,即信息隐藏(Information Hiding)性。

    1.2 结构化方法演变

    结构化开发方法主要经历了以下几个演变过程。

    ① 1967年,Edsger W. Dijkstra提出Go To Statement Considered Harmful人们开始意识到Go To语句的危害,并寻求一种新的方法,来代替Go To语句在程序中的作用。

    ② 1971年,Niklaus Emil Wirth提出逐步设计(Step wise design),为结构化设计奠定基础。

    ③ 1972年,Ben Shneiderman提出N-S(Nassi-Shneiderman)

    ④ 1974年,提出Warnier/Orr图以及HIPOIBM的层次化输入-处理-输出图。

    ⑤ 1975年,由赖瑞·康斯坦丁、爱德华·尤登等提出结构化方法。

    至此,结构化设计方法已经基本形成。结构化方法发展到如今主要包括三部分,即结构化分析、结构化设计以及结构化程序设计。

    二、结构化方法相关概念

    2.1 数据字典DD(Data Dictionary)

    数据字典主要包括数据项、数据结构、数据流、数据存储以及处理过程等几个部分,具体定义如下:

    ① 数据项:数据流图中数据块的数据结构中的数据项说明数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系}

    ② 数据结构:数据流图中数据块的数据结构说明数据结构描述={数据结构名,含义说明,组成:{数据项或 数据结构}}

    ③ 数据流:数据流图中流线的说明数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}

    ④ 数据存储:数据流图中数据块的存储特性说明数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流,组成:{数据结构},数据量,存取方式}

    ⑤ 处理过程:数据流图中功能块的说明处理过程描述={处理过程名,说明,输入:{数据流},输出: {数据流},处理:{简要说明}}

    2.2 实体关系图 ERD

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:nm:n)。

    2.3 功能建模语言DFD(Data Flow Diagram)

    构建DFD的具体过程如下(其中PSPEC表示处理规格说明Process Specification)

    ① 建模第0DFD。将软件/系统描述为一个泡泡,将外部实体描述为一个方框, 从方框到泡泡的箭头描述实体产生系统所使用的信息,从泡 泡到方框的箭头描述实体使用系统产生的信息。

    ② 将第0DFD扩展为第1DFD。将第0DFD的一个泡泡精化为第1DFD。在第1DFD中, 泡泡对应的是软件/系统的主要处理(或功能),箭头对应各 处理间的数据流。

    DFD图细化为子DFD。精化过程持续进行,直到每一个泡泡都执行一个简单的操作 ,也就是说,直至每个泡泡所代表的处理都

    2.4 状态转移图STD

    状态—迁移图(STD)或状态—迁移表被用来描述系统或对象的状态,以及导致系统或对象的状态改变的事件,从而描述系统的行为。属于结构化分析方法使用工具五、面向对象方法。通过行为建模给出需求分析方法的所有操作原则。

    在状态―迁移图中,由一个状态和一个事件所确定的下一状态可能会有多个。实际会迁移到哪一个状态,是由更详细的内部状态和更详细的事件信息来决定的,此时在状态―迁移图中可能需要使用加进判断框和处理框的记法。状态―迁移图的优点:第一,状态之间的关系能够直观地捕捉到,这样用眼睛就能看到是否所有可能的状态迁移都已纳入图中,是否存在不必要的状态等。第二,由于状态―迁移图的单纯性,能够机械地分析许多情况,可很容易地建立分析工具。

    三、结构化分析和设计

    3.1 结构化分析

    ①分析当前的情况,做出反映当前物理模型的DFD

    ②推导出等价的逻辑模型的DFD

    ③设计新的逻辑系统,生成数据字典和基元描述;

    ④建立人机接口,提出可供选择的目标系统物理模型的DFD

    ⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;

    ⑥选择一种方案;

    ⑦建立完整的需求规约。

    3.2 结构化设计

    ①评审和细化数据流图;

    ②确定数据流图的类型;

    ③把数据流图映射到软件模块结构,设计出模块结构的上层;

    ④基于数据流图逐步分解高层模块,设计中下层模块;

    ⑤对模块结构进行优化,得到更为合理的软件结构;

    ⑥描述模块接口。

    四、面向对象方法

    4.1 面向对象的起源和发展

    1967年挪威计算中心的Kisten NygaardOle Johan Dahl开发了Si面向对象程序设计mula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言。

    世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-CC++SelfEiffl都产生了深远的影响。随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展。之后,面向对象不断向其他阶段渗透,1980Grady Booch提出了面向对象设计的概念,之后面向对象分析开始。1985年,第一个商用面向对象数据库问世。1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展。

    4.2 面向对象的分析方法(OOA)

    Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:

    ①确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。

    ②确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。

    ③确定主题(subject)。主题是指事物的总体概貌和总体分析模型。

    ④确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。

    ⑤确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。

    4.3 面向对象的设计方法(OOD)

    面向对象的设计方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。在OOD的设计过程中,要展开的主要有如下几项工作。

    OOD的目标是管理程序内部各部分的相互依赖。为了达到这个目标,OOD要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口(interface)的后面,让它们只通过接口相互交流。

    这种依赖关系的转换使得系统的各部分具有了可复用性。

    OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。

    五、结构化设计和面向对象设计比较

    5.1 结构化设计和面向对象设计的相同点

    (1)二者在分解和抽象原则上存在联系。

    在结构化设计方法中往往采用分解的思想,将一个复杂的问题化整为零,层层消化从而得到一个问题的解决方案。而在面向对象设计中通过抽象求出问题的形式表示,通过接口继承和多态来将抽象的问题转化为具体的问题,最终求出问题的解决方案。

    (2)二者在重用性设计原则上一致

    在结构化设计中,不希望软件一部份影响软件的其他部分使用,因此会需要利用局部化将代码和数据分隔化,以隔绝不必要的信息。而在面向对象设计中,通过数据以及代码的封装来实现代码和数据的重用,并且提高了安全性。

    5.2 结构化设计和面向对象设计的不同点

    (1)主要思想不同:结构化的程序设计的主要思想是功能分解并逐步求精。面向对象程序设计的本质是把数据和处理数据的过程当成一个整体——对象。

    (2)处理问题的基本单位不同:结构化设计是将现实世界的问题自顶向下分解为若干小模型,小模型内部的控制方法为条件、分支和循环等,这些小模型就是过程。而在面向对象设计过程中,大多以类或对象为基本单位,对于提出的问题多采用封装、继承以及多态等方法,符合人们对日常生活的认知。

    (3)数据的处理方式不同:结构化设计直接通过过程处理数据,处理结果能够立即显示。而面向对象的设计将代码和数据封装成一个整体即为类,不同类的对象之间不能直接相互修改各自的数据。

    (4)安全性存在差异:面向对象方法支持多线程,当多个线程同时对数据进行操作时,如果控制不好就会导致数据修改的不确定性。而结构化设计方法,由于对数据的操作过程都是由相应的控制语句进行调控的,不支持多线程,这就保证了数据的安全性。

  • 相关阅读:
    Jquery 改变样式
    2017年04月06日 开启博客之路
    SVN-简要说明
    wp8 入门到精通 高仿微信发信息 键盘不消失
    wp8 入门到精通 仿QQPivot 提示数量
    wp8 入门到精通 虚拟标示符 设备ID
    wp8 入门到精通 测量代码执行时间
    wp8 入门到精通 聊天控件
    wp8 入门到精通 抓包
    wp8 入门到精通 LINQ to SQL
  • 原文地址:https://www.cnblogs.com/Reway/p/6185386.html
Copyright © 2011-2022 走看看