结构化方法与面向对象之应用比较
一、结构化方法
1.什么是结构化方法
结构化方法(StructuredMethodology)是计算学科的一种典型的系统开发方法。它采用了系统科学的思想方法,从层次的角度,自顶向下地分析和设计系统。结构化方法包括结构化分析(StructuredAnalysis,简称SA)、结构化设计(StructuredDesign,简称SD)和结构化程序设计(StructuredProgramDesign,简称SP)三部分内容。
2.结构化方法的原则
结构化方法的基本思想就是将待解决的问题看作一个系统,从而用系统科学的思想方法来分析和解决问题。结构化方法遵循以下基本原则。
(1)抽象原则
过程抽象原则:任何一个完成明确功能的操作都可被使用者当做单位的实体看待, 尽管这个操作时机上可能由一系列更低级的操作来完成。
数据抽象原则:允许设计人员在不同层次上描述数据对象的细节。
控制抽象原则:一个程序控制机制无须规定其内部细节。
(2)分解原则
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层分解,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构
(3)模块化原则
将一个待开发的软件分解成若干个小的简单的部分,也就是模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。
3.结构化方法的过程
3.1结构化分析
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。
需要用到的辅助工具有:
1.数据流图:
是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。
数据流图中主要图形元素有:
→:数据流—流是数据在系统内传播的路径,因此由一组成分固定的数据组成。如订票单由旅客姓名、年龄、单位、身份证号、日期、目的地等数据项组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
□:数据源(终点)—代表系统之外的实体,可以是人、物或其他软件系统。
○:对数据的加工(处理)—加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。
〓:数据存储—表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。
示例:
2.数据字典(DD-Data Dictionary)
数据字典是结构化分析方法的核心。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确严格的定义,使用户和系统分析员对输入、输出、存储和中间结果有共同的理解。
3.判定树
使用判定树进行描述时,应先从问题定义的文字描述中分清哪些是判定条件,哪些是判定结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。
4.判定表
判定表和判定树似是而非,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。
3.2结构化设计
结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。SD方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。结构化设计的步骤如下:
①评审和细化数据流图;
②确定数据流图的类型;
③把数据流图映射到软件模块结构,设计出模块结构的上层;
④基于数据流图逐步分解高层模块,设计中下层模块;
⑤对模块结构进行优化,得到更为合理的软件结构;
⑥描述模块接口。
3.3结构化程序设计(SPD)
它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。
结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。
顺序结构:顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。
选择结构:选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。
循环结构:循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环。
当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。
直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是"直到条件为真时为止",所以称为直到型循环。
二、面向对象方法
2.1 什么是面向对象方法
面向对象(Object+oriented,简称OO)方法是以面向对象思想为指导进行系统开发的一类方法的总称。这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。
2.2面向对象方法的特点
面向对象方法构建的软件系统中,软件中任何一个元素都是对象,复杂的软件对象由相对简单的软件对象组成,各个对象之间仅能通过传递消息互相联系。用对象分解取代了传统的功能分解。将对象划分为对象类,每个对象类都定义一组数据和一组方法。按照子类和父类的关系,将若干对象类组成一个具有层次结构的系统。
封装性:把数据和实现操作的代码集中起来放在对象内部,不能从外部直接访问或修改。
继承性:指子类能够直接获得父类已有的性质和特性,而不必重新定义。
多态性:允许将父对象设置成和它的一个或多个子对象相等的技术,允许每个对象以适合自己的方式去响应共同的消息。即发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。
2.3面向对象方法的过程
2.3.1面向对象分析(OOA)
面向对象分析阶段是通过行为分析法认定对象及他们之间的关系。面向对象的分析模型通常使用UML的建模方法进行建模。
1用例图
使用用例图从用户角度描述系统功能并指出各功能的操作者。用例图是指用户使用系统时所执行的一个与行为相关的事物序列,这个序列是在与系统的会话中完成的。
用例图包括用例和角色两个要素,角色与用例之间的连接,用例之间的使用和扩展关系,通过角色执行用例,可以识别出不同的用例。
2类图
类图描述了系统中的类及其相互之间的关系,其本质反映了系统中对象的类型以及对象之间的各种静态关系。
3顺序图
顺序图表示对象之间交互的顺序。是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
4活动图
描述满足用例功能需求所要进行的相关活动。是阐明了业务用例实现的工作流程。业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作。业务用例由一系列活动组成,它们共同为业务主角生成某些工件。工作流程通常包括一个基本工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。
5遵循原则
抽象:指为了某一分析目的而集中精力研究对象的某一性质,它可以忽略其它与此目的无关的部分。抽象是我们科学地研究和处理复杂问题的重要方法。抽象机制被用在数据分析方面,称之为数据抽象。数据抽象是OOA的核心。数据抽象把一组数据对象以及作用其上的操作组成一个程序实体。使得外部只知道它是如何做和如何表示的。
封装:即信息隐蔽。它是指在确定系统的某一部分内容时,应考虑到其它部分的信息及联系都在这一部分的内部进行,外部各部分之间的信息联系应尽可能的少。
继承:是指能直接获得已有的性质和特征而不必重复定义它们。OOA可以一次性地指定对象的公共属性和方法,然后再特化和扩展这些属性及方法为特殊情况,这样可大大地减轻在系统实现过程中的重复劳动。在共有属性的基础之上,继承者也可以定义自己独有的特性。
2.3.2面向对象设计(OOD)
面向对象设计与面向对象分析采用一致的概念,原则和表示方法,二者之间并没有很大的区别,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是近几年提出的一种新的软件生命周期模型——喷泉模型(如图所示),其中分析与设计这两个水泡表明OOA与OOD没有严格的边界,他们是连续的、无缝的、允许有一定的相交(一些工作既可以看作是OOA的,也可以看作是OOD的)。
面向对象的设计方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。即确定对象结构、属性、方法等内容,对之前的模型进行优化等。
2.3.3面向对象编码(OOP)
面向对象程序设计是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
三、结构化方法与面向对象方法的对比
1.基本思想上
结构化方法的基本思想就是将待解决的问题看作一个系统,从而用系统科学的思想方法来分析和解决问题。它的要点是是把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
面向对象方法的基本思想体现在以下方面:一、客观世界中的事物都是对象,对象之间存在一定的关系,并且复杂对象由简单对象构成。二、具有相同属性和操作的对象属于一个类,对象是类的一个实例。三、类之间可以有层次结构,即类以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作。四、类具有封装性,把类内部的属性和一些操作隐藏起来,只有公共的操作对外是可见的,对象只可通过消息来请求其他对象的操作或自己的操作。五、强调充分运用人在日常逻辑思维中经常采用的思想方法与原则。例如:抽象,分类,继承,聚合,封装,关联等。
2.主要特点的比较
结构化分析方法的特点
(1)面向用户,用户自始至终参与系统的分析工作; (2)强调调查工作的重要性;
(3)对管理业务中的各种数据进行分解; (4)采用了层次分解的系统思想; (5)用图形工具来分析和构建新方案。
面向对象分析方法的特点
(1)强调系统开发的整体性和全局性
(2)侧重于数据转换的过程而不是数据本身 (3)系统的开发周期长 (4)封装性 (5)继承性 (6)多态性 (7)易维护性
3.适用范围
结构化开发方法的适用范围:适用于规模较大、结构化程度较高的系统的开发。
面向对象开发的适用范围:处理过程明确,简单的系统;涉及面窄的小型系统;不适合于大型、复杂系统,存在大量运算、逻辑性强的处理系统
四、总结
软件开发的目标是以最小的代价开发出满足用户需求 的软件。为此,根据系统的实际需求,分别针对具体情况选择采用不同的 设计方法,可以充分发挥面向对象与结构化方法各自的优势。
结构化方法在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问题,使得整个程序设计过程由模糊到清晰,由概括到具体。结构化方法强调功能抽象和模块化,采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。
面向对象方法与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会理解困难,在软件维护中可维护性也较高,并且易于测试和调试。它的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现。它的可重用性好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件变的容易,成本也降低了。
[1] 林玲 结构化方法与面向对象方法在建模中的应用与比较 机电技术 2011年10月
[2] 喻 梅 结构化程序设计方法与面向对象程序设计方法之比较