首页 > 代码库 > 结构化方法与面向对象方法之比较
结构化方法与面向对象方法之比较
先分别介绍一下结构化方法和面向对象方法。
一、结构化方法
结构化方法是计算机学科的一种系统开发方法。它采用系统的思想方法,从层次的角度,自顶向下地分析和设计系统。基本思想是基于功能的分解和抽象,形成系统的模块结构,从而针对每个模块进行结构化设计及结构化编程来完成系统的开发。
结构化方法由结构化分析、结构化设计和结构化程序设计三者组成。
(一)结构化分析
结构化分析是面向数据流进行需求分析的方法。采取的工具主要有数据流图、数据字典、实体关系图等。
数据流图是一种分层的建立系统逻辑模型的方法,模拟系统的一个大致边界,并展示系统和外部的接口、数据的输入输出以及数据的存储。它有四个基本要素:数据流、实体、数据加工和数据存储。数据流图分层的思想体现为,首先确定系统和系统涉及到的外部实体之间的数据流,画出第0层数据流图(顶层图);其次在顶层图的基础上对系统的主要功能进行分析,抽象出功能作为系统的加工,确定实体和加工之间的数据流,将顶层图细化为第1层数据流图;依此类推,之后不断细化得到第2、3乃至更多层的数据流图,直到不能再细化为止。
数据字典是一个包含所有系统数据元素定义的仓库。数据元素的定义必须是精确的、严格的和明确的。一个实体一般应包含以下几个部分的内容:名字、别名、用途、内容描述、备注信息。
实体关系图是数据库设计的基础,是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式。
(二)结构化设计
结构化设计是指在结构化分析的基础上,映射分析模型到设计模型,得到系统的模块结构、数据库结构等。如在数据流图的基础上,进行相应的变换分析和事务分析得到系统的模块结构,在ER模型的的基础上,进行数据库设计得到数据库结构。
(三)结构化程序设计
结构化程序设计是指在结构化设计的基础上,对每个模块结构进行处理过程设计,分析每个模块内部的逻辑程序结构,并用具体的编程语言实现该逻辑结构。
二、面向对象方法
面向对象方法是以面向对象思想为指导进行系统开发的一类方法的总称,这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。
和结构化方法相类似,面向对象方法由三部分组成:面向对象分析、面向对象设计和面向对象程序设计。
(一)面向对象方法的特点
面向对象方法构建的软件系统中,软件中任何一个元素都是对象,复杂的软件对象由相对简单的软件对象组成,各个对象之间仅能通过传递消息互相联系。用对象分解取代了传统的功能分解。将对象划分为对象类,每个对象类都定义一组数据和一组方法。按照子类和父类的关系,将若干对象类组成一个具有层次结构的系统。
封装性:把数据和实现操作的代码集中起来放在对象内部,不能从外部直接访问或修改。
继承性:指子类能够直接获得父类已有的性质和特性,而不必重新定义。
多态性:允许将父对象设置成和它的一个或多个子对象相等的技术,允许每个对象以适合自己的方式去响应共同的消息。即发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。
对象、类、封装性、继承性、多态性的引入,令面向对象方法相较于结构化方法有一定优势,能为生产可重用的软件构件和解决软件的复杂性问题一共一条有效的途径。
(二)面向对象分析和设计
面向对象方法采用统一建模语言UML,它是面向对象开发中的一种通用的、图形化的模型语言,是近代软件工程中对象分析和设计的重要工具。
分析过程:首先使用用例图(Use Case Diagram)从用户角度描述系统功能并指出各功能的操作者,然后根据需求建立系统的静态模型来构造系统的结构。静态模型包括类图(Class Diagram)、对象图(Object Diagram)和包图(Package Diagram)。类图描述了系统之间的类及其相互之间的关系,其本质反映了系统中对象的类型以及对象之间的各种静态关系,如关联、依赖、聚合等。对象图是类图的实例。包图用于描述系统的分层结构。最后根据系统执行时的时许状态或交互关系来描述系统的行为,从而构造其动态模型,包括交互图(Interaction Diagram )、状态图(Status Diagram)和活动图(Activity Diagram)等。交互图描述对象间的交互关系,包括顺序图和合作图。状态图描述对象的所有可能状态以及事件发生时状态的转移条件。活动图描述为满足用例要求所进行的活动以及活动间的约束关系。
设计过程:对象行为和对象间交互作用的进一步细化;用例的设计和实现;精化分析阶段的交互图、状态图、活动图;确定系统可重用的类或部件;用构件图描述代码部件的物理结构及相互之间的依赖关系;用配置图描述软硬件的物理体系结构。
面向对象分析和面向对象设计二者之间不存在明显的界限,分析可以作为设计的一部分。在分析阶段获得的信息,不仅是设计阶段的输入,同时也是设计阶段的一个完整部分。分析得到对象及其相互关系,而设计则是解决这些对象及其相互关系的实现问题。
现在再来分析一下二者的优点缺点。
结构化方法是最早最传统的软件开发方法,也是迄今为止信息系统中应用最普遍、最成熟的一种,它引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。结构化方法的基本思想可概括为:自顶向下、逐步求精、模块化技术。
自顶向下逐层分解,是指在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问 题。这是一个由模糊到清晰,由概括到具体的过程。而逐步求精是在遇到复杂问题的时候,先设计一些子目标作为过渡,来逐步细化。比如在对学生编写资料时,应 先将学生分为专科生、本科生、研究生。在对本科生填写资料时,又可对其的专业、班级、学号、姓名、籍贯等进行进一步的划分,依次类推,逐步把资料填写完 全。
结构化方法强调功能抽象和模块化。由于它采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低 了问题处理的难度。由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,简化了编程人员繁杂的工作;而在阅读时也能够 一气呵成,给人以明朗的感觉。
面向对象方法是目前已经发展成为主流的软件方法,它经过了30多年的研究和发展,已经越来越成熟和完善,应用也越来越深入和广泛。如著名的 Smalltalk,C++,Java,Eiffel等都属于面向对象语言。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步 骤,而是为了描叙某个事物在整个解决而面向对象的设计则是从另外的思路来解决问题。面向对象方法的本质是主张从客观世界固有的事物出发来构造系统,提倡用 人类在现实生活中常用的思维方法来认识和理解、描述客观事物,强调最终建立的系统能映射的问题域。使得系统中的对象,以及对象之间的关系能够如实地反映问 题域中固有的事物及其关系。
面向对象方法它有着自己的优点。首先,它与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会出现理解困难,在软件维护 中可维护性也较高,并且易于测试和调试。比如黑白双方在设计五子棋时,可分为行为是相同的黑白双方,负责绘制画面的棋盘系统,负责判定犯规、输赢等的规则 系统。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种 变化,同时利用第三类对象(规则系统)来对棋局进行判定问题的步骤中的行为。可以明显地看出,面向对象是以功能来划分问题,而不是步骤。
其次,它的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现。面向对象方法的可重用好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件边的容易,成本也降低了。
结构化方法与面向对象方法之比较