结构化方法与面向对象方法的比较
Posted dreamingsheep
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构化方法与面向对象方法的比较相关的知识,希望对你有一定的参考价值。
1.结构化方法
结构化方法,是70年代末,由Demarco等人提出的,旨在减少分析活动中的错误,建立满足用户需求的系统逻辑模型。结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法,也称为新生命周期法,是生命周期法的继承与发展,是生命周期法与结构化程序设计思想的结合。其基本思想是用系统工程的思想和工程化得方法,根据用户至上的原则,自始自终按照结构化、模块化,自顶向下地对系统进行分析与设计。
1.1 结构化方法的基本原理
- 抽象化:
常用的抽象化手段有过程抽象、数据抽象和控制抽象
过程抽象:任何一个完成明确功能的操作都可被使用者当做单位的实体看待,尽管这个操作时机上可能由一系列更低级的操作来完成。
数据抽象:与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
与过程抽象和数据抽象一样,控制抽象可以包含一个程序控制机制而无须规定其内部细节。
- 自顶向下,逐步细化:
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。
- 模块化:
将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。
- 控制层次:
表明了程序构件(模块)的组织情况。控制层次往往用程序的层次结构(树形或网型)来表示。
深度:程序结构的层次数,可以反映程序机构的规模和复杂程度。
宽度:同一层模块的最大模块个数
模块的扇出:一个模块调用(或控制)的其他模块数
模块的扇入:调用(或控制)一个给定模块的模块个数
信息屏蔽:将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少的显露其内部的处理,可以提高软件的可修改性,可测试性和可移植性。
- 模块独立:
每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独立性强必须做到高内聚低耦合。
耦合:模块之间联系的紧密程度,耦合度越高模块的独立性越差。耦合度从低到高的次序为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
内聚是指内部各元素之间联系的紧密程度,内聚度越低模块的独立性越差。内聚度从低到高依次是:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
1.2 结构化分析的方法
结构化分析的步骤:
- 分析当前的情况,做出反映当前物理模型的DFD
- 推导出等价的逻辑模型的DFD
- 设计新的逻辑系统,生成数据字典和基元描述
- 建立人机接口,提出可供选择的目标系统物理模型的DFD
- 确定各种方案的成本和风险等级,据此对各种方案进行分析
- 选择一种方案
- 建立完整的需求规约。
结构化分析的常用工具:
- 系统关系图
- 数据字典
- 数据流程图
- 结构图
2.面向对象
2.1面向对象的特征
面向对象有三大特性:封装,继承,多态
- 封装
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
- 继承
所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
- 多态
所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
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
以上是关于结构化方法与面向对象方法的比较的主要内容,如果未能解决你的问题,请参考以下文章