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

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/Reway/p/6185386.html
Copyright © 2011-2022 走看看