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

摘要:
结构化方法是一种强调开发方法和所开发软件的结构合理性的软件开发方法,也称为新生命周期方法。它是对生命周期方法的继承和发展,是生命周期方法与结构化编程思想的结合。结构化编程的基本思想是采用“自上而下、逐步细化”的编程方法和“单进单出”的控制结构。

1.结构化方法

结构化方法,是70年代末,由Demarco等人提出的,旨在减少分析活动中的错误,建立满足用户需求的系统逻辑模型。结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法,也称为新生命周期法,是生命周期法的继承与发展,是生命周期法与结构化程序设计思想的结合。其基本思想是用系统工程的思想和工程化得方法,根据用户至上的原则,自始自终按照结构化、模块化,自顶向下地对系统进行分析与设计。

1.1 结构化方法的基本原理

  • 抽象化:

常用的抽象化手段有过程抽象、数据抽象和控制抽象

过程抽象:任何一个完成明确功能的操作都可被使用者当做单位的实体看待,尽管这个操作时机上可能由一系列更低级的操作来完成。

数据抽象:与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。

与过程抽象和数据抽象一样,控制抽象可以包含一个程序控制机制而无须规定其内部细节。

  • 自顶向下,逐步细化:

将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。

  • 模块化:

将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。

  • 控制层次:

表明了程序构件(模块)的组织情况。控制层次往往用程序的层次结构(树形或网型)来表示。

深度:程序结构的层次数,可以反映程序机构的规模和复杂程度。

宽度:同一层模块的最大模块个数

模块的扇出:一个模块调用(或控制)的其他模块数

模块的扇入:调用(或控制)一个给定模块的模块个数

信息屏蔽:将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少的显露其内部的处理,可以提高软件的可修改性,可测试性和可移植性。

  • 模块独立:

每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独立性强必须做到高内聚低耦合。

耦合:模块之间联系的紧密程度,耦合度越高模块的独立性越差。耦合度从低到高的次序为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。

内聚是指内部各元素之间联系的紧密程度,内聚度越低模块的独立性越差。内聚度从低到高依次是:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。

1.2 结构化分析的方法

  结构化分析的步骤:

  1. 分析当前的情况,做出反映当前物理模型的DFD
  2. 推导出等价的逻辑模型的DFD
  3. 设计新的逻辑系统,生成数据字典和基元描述
  4. 建立人机接口,提出可供选择的目标系统物理模型的DFD
  5. 确定各种方案的成本和风险等级,据此对各种方案进行分析
  6. 选择一种方案
  7. 建立完整的需求规约。

  结构化分析的常用工具:

  • 系统关系图

结构化方法与面向对象方法的比较第1张

  • 数据字典

结构化方法与面向对象方法的比较第2张

  • 数据流程图

结构化方法与面向对象方法的比较第3张

  • 结构图

结构化方法与面向对象方法的比较第4张

2.面向对象

2.1面向对象的特征 

面向对象有三大特性:封装,继承,多态  

  • 封装

结构化方法与面向对象方法的比较第5张

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

  • 继承

结构化方法与面向对象方法的比较第6张

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

  • 多态

结构化方法与面向对象方法的比较第7张

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

3.优缺点

3.1 结构化方法的优缺点

优点:

由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。

按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合:顺序结构、选择结构和循环结构来实现。

结构化程序设计的基本思想是采用"自顶向下,逐步求精"的程序设计方法和"单入口单出口"的控制结构。自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;"单入口单出口"的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序来。

  • 整体思路清楚,目标明确。
  • 设计工作中阶段性非常强,有利于系统开发的总体管理和控制。
  • 在系统分析时可以诊断出原系统中存在的问题和结构上的缺陷。

缺点:

  • 用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
  • 用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。
  • 系统的开发周期长。

3.2 面向对象方法的优缺点

优点:

  • 开发效率提高
  • 便于维护
  • 容易扩展
  • 降低人力成本
  • 便于开发任务部署。因为面向对象的思想已经决定了一个项目可以由很多子组件组装起来。

缺点:

  • 性能的流失,包括时间和空间
  • 整体设计容易出现尾大不掉。对OOA要求颇高,若缺乏整体规划,很容易造成结构不合理,各部分关系失调。
  • 局限到具体业务,无法从更高层面科学提取分析。

4.参考文献

  • http://www.worldbestlearningcenter.com/aboutit/structured-analysis-design.htm
  • http://baike.baidu.com/link?url=bUtTOm7fXVk-ZI25mwT1-tSeh-0Hxujxy6DYFEkYEtGDM7GhAAZM3BDR4uK4ZaLD87HSEuIN4_EWLrOwLEtyA_
  • http://baike.baidu.com/item/%E7%BB%93%E6%9E%84%E5%8C%96%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1
  • https://www.tutorialspoint.com/object_oriented_analysis_design/ooad_object_oriented_analysis.htm
  • http://www.javalearningacademy.com/object-oriented-programming-concepts-as-a-story/
  • https://en.wikipedia.org/wiki/Structured_programming
  • https://en.wikipedia.org/wiki/Structured_analysis

免责声明:文章转载自《结构化方法与面向对象方法的比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇零基础 Vue 开发环境搭建 打开运行Vue项目SQL Server常用语句下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Scala 面向对象(八):特质(接口) 一

1 Scala接口的介绍 从面向对象来看,接口并不属于面向对象的范畴,Scala是纯面向对象的语言,在Scala中,没有接口。 Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说,多个类具有相同的特征(特征)时,就可以将这个特质(特征)独立出来,采用关键字trait声明。 理解trait 等价于(interface + abstract...

[转载] 常用CASE工具介绍

(因为学习ERWin无意发现的此文章,非常不错,转载一篇!) 一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建模。 二,软件开发CASE工具简介 (一)图稿绘制: 1,visio:这是目前国内用得最...

毕业设计之感悟 —— UML 与 ER 图

    今天毕业设计答辩,虽然我第一个上场,但是不是特别紧张,因为整个系统都是我写的。我以为自己天衣无缝,能应付所有老师的所有问题。事实上,我被老师教育了一番。     老师说我,毕业论文中没有一个类。我一开始比较懵,什么没有类?然后我和老师说我写了什么什么类。老师说,没有 UML 类图之类的东西。     其实我一开始是抗拒的。UML 类图,有什么用?不...

全面理解js面向对象

前言 当今 JavaScript 大行其道,各种应用对其依赖日深。web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解。所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包、函数式编程、原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕。这都是对...

golang实现面向对象的封装、继承、多态

1. 基本介绍 面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程框架,尽可能的模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程。 封装、继承、多态和抽象是面向对象的4个基本特征。 2. golang的面向对象类型 golang实现面向对象的两个关键类型是stru...

如何评价软件工程师知识技能水平

1.良好的编码能力   软件人员的一个重要职责是把用户的需求功能用某种计算机语言予以实现。编码能力直接决定了项目开发的效率。这就要求软件工程师至少精通一门编程语言,比如当前国内企业常用的C/C++、VB和国际上最流行的Java语言,熟悉它的基本语法、技术特点和API(应用程序接口)。                  2.自觉的规范意识和团队精神   随着...