结构化编程和面向对象过程编程区别与应用
结构化方法与面向对象方法之比较与应用
结构化方法也可以成为面向过程的方法,这种方法与面向对象的方法有着显著的不同。作为北航的莘莘学子,对于面向对象应该有着十分深刻的领悟,有着显著的面向对象的特点的语言就是java,Java强调万物皆是对象,从现实世界的抽象出对象来解决问题。而有着显著的面向过程特点的编程语言就是C语言,C语言作为我们大一第一门学习的语言,它强调将一个问题细分成不同的小问题,逐步求解,最后综合得出最终的解。接下来我们就详细的比较一下这两种方法在实际中的应用。
结构化方法的概念:
结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
结构化方法的生命周期划分:结构化分析(SA),结构化设计(SD),结构化实现(SP)
结构化分析(SA):
分析当前的情况,作出当前物理模型的DFD。
推导出等价的逻辑模型的DFD。
设计心得逻辑系统,生成数据字典和基元描述。
建立人机接口,确定目标系统物理模型的DFD。
结构化设计(SD):
评审和细化数据流图。
确定数据流图的类型。
把数据流图映射到软件模块结构,设计出上层结构。
基于数据流图逐步分解高层模块,设计中下层模块。
对模块结构进行优化,得到更为合理的软件结构。
描述模块接口。
结构化实现(SP):
每个模块尽量只执行一个功能。
每个模块用过程语句(函数方式)调用其他模块。
模块间传送的参数作数据。
模块间公用的信息较少。
结构化方法的局限性:
(1)结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域。同时,当系统较为复杂时,很难检验分析的正确性。因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发的衔接也比较困难。
(2)结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致,结构化方法的结果-数据流图和结构化设计结果-模块结构图是两种不同的表示体系,从分析到设计的转换实际上并不存在可靠的转换规则,而是带有人为的随意性,容易因理解上的错误而埋下隐患,舍得设计文档与问题域的本来面貌相差甚远。
(3)结构化方法对需求变化的适应能力较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起一个加工和它相连的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。[1]
面向对象方法的概念:
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象的几个重要的基本概念:
对象:对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。一个对象请求另一对象为其服务的方式是通过发送消息。
类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
继承:继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。
封装:具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传送消息给它。
面向对象方法的建模技术:Use-case,Activity diagram,Sequence diagram,Class diagram,Statechart diagram.
Use-case:在软件工程中,用例是一种在开发新系统或者软件改造时捕获潜在需求的技术。每个用例提供了一个或多个场景,该场景揭示了系统是如何同最终用户或其它系统交互的,从而获得一个明确的业务目标。用例要避免技术术语,取而代之的是最终用户或者领域专家的语言。用例一般是由软件开发者和最终用户共同创作的。
面向对象方法的步骤:
OOA:
确定问题域,区分类和对象。
区分整体对象以及组成部分,确定类的关系以及结构。
定义属性和服务。
确定附加非系统约束。
OOD:
改进和完善系统分析的结果
设计交互过程和用户接口。
设计任务管理,以及子系统以及任务之间的协调方式。
设计全局资源,确定人物或子系统的资源分配。
对象设计。
面向对象方法的局限:
(1) 面向对象方法中对象的确定有时会因客观便捷模糊而难以判定,这样就很难保证软件描述的正确性。
(2) 面向对象在描述问题域方面的不足,在问题域模型中,面向对象方法把具体或抽象的问题域现象直接表述为对象,同时把现象类型直接表述为类。在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为类和对象,却不能表述各自之间存在的对问题域现象的不同认识,除非通过地层结构的处理。
结构化设计和面向对象方法的总结
(1) 首先面向过程的设计的功能分解是每一层依赖于其上一层,很容易出现牵一发而动全身的情况,而在面向对象中,整个系统被分解成对象的集合而不是工嗯呢该的结合,起到了很好的封装效果,外部只需要调用这个对象的接口而不用关心接口是如何实现的。
(2) 面向过程的设计适合较小型的开发,比如我们日常解决的算法题,这种情况由于目标明确,功能固定使用面向过程开发可以功能细化,思路清晰,实现简单的特点。而面向对象的思想更适合于较大的工程软件开发,这样可以充分发挥面向对象灵活的优势。
(3) 结构化方法易学易用,符合人们正常解决日常生活问题的思路,而面向对象方法虽然较难理解,但是掌握之后对抽象的解决问题有着很大的帮助。[2]
(4)
总结语
软件开发的目标是以最小的代价开发出满足用户需求 的软件。为此,根据系统的实际需求,分别针对具体情况选择采用不同的 设计方法,可以充分发挥面向对象与结构化方法各自的优势。结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界。面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及他们之间的关系,从内部结构上模拟客观世界,它采用了新概念,新方法,新的表现形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大的益处。开发者在开发实践中, 从实际出发, 考虑执行效率、开发 者的技术水平、系统规模、是否为易需求变化的系统等因素, 尽量利用 它们各自的优点, 避免他们的缺点。如对于开发一些小型嵌入式实时监 控系统或同等稳定小系统, 可用结构化方法;对于开发入门者, 使用结 构化方法和面向对象方法相结合;对于大型系统或者需求易变系统, 使 用面向对象方法。总之, 根据实际出发, 选取合适的软件开发方法, 达到 最佳的开发效益。
[1] 张莉, 裘国永. 结构化方法与面向对象方法的比较分析[J]. 陕西师范大学学报(自科版), 2001, 29(2):29-32.
[2] 曹昊, 许玲, 谢赞福,等. 结构化较面向对象方法优势应用域的研究[J]. 微计算机信息, 2010, 26(21):194-196.