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


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

    一、总述

      早期的程序开发,如C语言程序开发,使用的基本都是结构化开发方法。现在较常用的开发方法为面向对象开发(Object-Oriented),分为分析(Analysis)、设计(Design)、编程(Programming)三部分。

      本文将对结构化方法和面向对象方法简单进行分别的讨论和分析,并对比这两种方法。

    二、结构化方法[1]

      结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。

      结构化方法的基本要点是:自顶向下、逐步求精、模块化设计、结构化编码。

      结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。

      结构化设计方法是以自顶向下,逐步求精,模块化为基点,以模块化,抽象,逐层分解求精,信息隐蔽化局部化和保持模块独立为准则的设计软件的数据架构和模块架构的方法学。

      结构化方法按软件生命周期划分,有结构化分析(SA),结构化设计(SD),结构化实现(SP)。

    三、面向对象方法[2]

      面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

      面向对象方法的实质就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。

      面向对象开发是基于结构化开发的,还保留着结构化开发中的“函数”、“结构体”等元素,但面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,它被誉为"研究高技术的好方法",更是当前计算机界关心的重点。十多年来,在对OO方法如火如荼的研究热潮中,许多专家和学者预言:正像70年代结构化方法对计算机技术应用所产生的巨大影响和促进那样,90年代OO方法会强烈地影响、推动和促进一系列高技术的发展和多学科的综合。

    四、结构化与面向对象方法之比较

    1、结构化方法的优点:

    (1)、从系统整体出发,强调在整体优化的条件下“自上而下”地分析和设计,保证了系统的整体性和目标的一致性;

    (2)、结构化方法强调功能抽象和模块化。由于它采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度;

    (3)、严格区分系统开发的阶段性,每一阶段的工作成果是下一阶段的依据,便于系统开发的管理和控制;

    (4)、文档规范化,按工程标准建立标准化的文档资料,便于软件在以后的维护。而且由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,也大大简化了编程人员繁杂的工作。  

    2、结构化方法的缺点

    (1)、重用性差:结构化分析与设计清楚的定义了系统的接口, 当系统对外界接口发生变动时,可能会造成系统结构产生较大变动, 难以扩充新的功能接口;

    (2)、软件可维护性差: 由于软件的可修改性差,导致维护困难,造成维护时费用和成本高,可维护性变差;

    (3)、开发的软件难以满足用户需要:用传统的结构化方法开发大型软件时,往往此系统涉及各种不同领域的知识,在开发需求模糊或需求不断变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。 

    3、面向对象方法的优点 

    (1)、编程容易。因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。对象是有状态的(也就是属性),对象的行为与它的所处的状态密切相关;

    (2)面向对象方法的可重用好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件边的容易,成本也降低了;

    (3)它与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会出现理解困难,在软件维护中可维护性也较高,并且易于测试和调试;

    (4)、面向对象可以使工程更加模块化,实现更低耦合高内聚思想;

    (5)、符合人们认识事物的规律,系统开发循序渐进,反复修改,确保较好的用户满意度。  

    4、面向对象方法的缺点 

    (1)、开发过程管理要求高,整个开发过程要经过“修改—评价—再修改”的多次反复;

    (2)、面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障的代价大,尤其是继承的深度很大时。对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困难的事情。

    (3)、开发人员易将原型取代系统分析;缺乏规范化的文档资料,不利于以后的维护。[3]

    5、比较两种开发方式

    面向对象开发更加接近于现实生活,可以使人的思路更加明确,而面向结构开发则更注重思维逻辑,具有一定难度。结构化的语言,像C语言一样,是以函数为编程主体。面向对象的语言,像java等,是以对象为编程主体。区别:函数只是操作,数据由其它的地方提供,对象是数据与操作的封装,是独立的个体。

    五、个人思考

      我想就我自己的经验谈一谈结构化和面向对象方法。对这两种方法的接触来自C语言程序设计以及面向对象程序设计这两门课程。或许以语言的学习来说明,虽然不是很契合软件开发这一主题,但因为是个人经历,总算也能有点发言权,总有点共通之处。

      在大一刚开始学习编程的时候,我们以C语言作为入门语言。经过了一个学期的学习,总算由一开始的无比费劲变得较为熟练了。总的来说,以C语言为代表的一众结构化设计语言逻辑严密,操作和使用都有诸多规定章程,感觉看上去就很适合科学研究,虽然复杂但是用得漂亮就能令人无比惊艳,有种孤绝的高级感。

      后来在大二,我们经历了和OO激烈抗争的一个学期。抛开课程制度等等问题,单纯讨论面向对象方法,可以说是为我打开了一扇新世界的大门。一开始写作业的时候,因为其实是不会java的,所以只是用C写完了再简单地修改一下语法就当作最终的作业交了上去。后来在逐渐掌握了java之后,发现面向对象方法其实是一种新颖有效的思考问题的方式。它的封装将“模块化”放大到极致,让人可以较为独立地思考每一部分的功能。个人以为与这种方式相比,C语言等结构化设计语言更倾向于一个整体,虽然函数起到了“模块化”的作用,但还是没法做到完全独立,让人在使用的时候还是要考虑很多。这一点在本学期编译设计课程中体现地更明显,在工程的规模上升了,需要处理需要使用的量明显增多的情况下,就不得不考虑很多全局的设计,否则依靠大量传参是较复杂很容易凌乱的。我曾经尝试用java重写以前的C语言程序,还是发现能有较明显的顺畅感。虽然我的经验依然不够,解决的问题尚停留在较低级的阶段,但总的来说,我觉得面向对象方法令人思路相对清晰,更加贴近实际生活中人的思考方式。

    六、参考文献

    [1]百度百科——结构化方法 baike.baidu.com/结构化方法

    [2]百度百科——面向对象方法 baike.baidu.com/面向对象方法

    [3]结构化方法和面向对象方法之比较http://wenku.baidu.com/link?url=9zY7VV2CgyyDMunNLyfSMzgrcZIKJEySyCsw6qlEpGNiP4Y_Oxw8PRYCaD5yoHKNg720kk7RXoooTlEDqEVnYfKYEELBFnFGtRHIYUg4Sq

  • 相关阅读:
    ORA: ORACLE12C导入11G IMP备份文件
    EBS:支出类别 定义
    EBS: 触发器三种状态(INSERTING, UPDATING , DELETING )实例
    EBS: FND_FNDCPMCP_DEV 功能定义出错
    EBS: 关于GL_IMPORT_REFERENCES表, GL_SL_LINK_TABLE字段的值说明
    EBS:请求集查询
    EBS:将定期成本分配传送至 GL 后的检查
    ORACLE long类型转字符 LONG_TO_CHAR()
    EBS:程序包里的存储过程、函数的名称怎么查询呢
    EBS: Form Builder 10G CHECKBOX点击触发器
  • 原文地址:https://www.cnblogs.com/zrs4tc/p/6206784.html
Copyright © 2020-2023  润新知