结构化⽅法和⾯向对象⽅法的⽐较
软件开发⽅法指在项⽬投资规模和时间限制内,设计、实现符合⽤户需求的⾼质量软件,根据软件开发的特点,提出的多种软件开发的策略。因为20世纪60年代计算机软件、硬件发展不均衡,使得⼤型软件的开发过程中出现了复杂程度⾼、研制周期长、正确性难以保证的三⼤难题,引发了“软件危机”。为了同时提⾼软件的效率和质量,与之对应的软件开发⽅法在不断的⾰新。经过⼏⼗年的研究和应⽤,两种基于相应的程序设计思想和语⾔的软件开发⽅法,结构化⽅法与⾯向对象⽅法,成为了主流的开发⽅法,被⼴泛的使⽤于软件⼯程中。
结构化⽅法包括结构化分析(Structured Analysis)、结构化设计(Structured Design)和结构化程序设计(Structured Program Design)三部分内容。相应地,⾯向对象⽅法包括⾯向对象分析(Object-Oriented Analysis)、⾯向对象设计(Object—Oriented Design)和⾯向对象程序语⾔(Object-Oriented Program Design)。两种软件开发⽅法从起源、思想、分析、设计,到程序设计、扩展重⽤、应⽤等各个⽅⾯有着许多的联系和区别,下⾯我将分别介绍两种软件开发⽅法并对其进⾏⽐较。
⼀.结构化⽅法
1.1结构化⽅法概述
结构化⽅法起源于结构化程序设计,具有⾯向功能、结构清晰、⽀持逐步求精等特点,使软件易于维护。在运⽤结构化开发⽅法时,设计⼈员⾸先需要运⽤抽象(Abstraction)⽅法在最⾼层次上描述问题的解决⽅案,之后,设计⼈员在进⾏逐步求精(Refinement),即通过逐步细化结构最终得出问题的解决⽅案,在此过程中各个结构内部的信息对外部是不可见的,即信息隐藏。
1.2结构化⽅法的特点
结构化⽅法基于功能分解设计系统结构, 它从内部功能上模拟客观世界。所采⽤的主要⼯具是数据流图DFD。通过不断将DFD中复杂的处理分解成⼦数据流图来简化问题。
优点:结构化⽅法能够增加软件规格说明的可读性和软件系统的可靠性。数据流图容易理解, 有利于开发⼈员与客户的交流。
缺点:软件系统结构对功能的变化⼗分敏感, 功能的变化往往意味着重新设计。设计出的软件难以重⽤, 延缓了开发的进程。
1.3结构化⽅法的过程
1.3.1结构化分析(SA)
结构化分析⽅法给出⼀组帮助系统分析⼈员产⽣功能规约的原理与技术,是⼀种需求分析⽅法。它⼀般利⽤图形表达⽤户需求,使⽤的⼿段主要有数据流图、数据字典、判定表以及判定树等。
1数据流图
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加⼯⾓度,以图形⽅式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析⽅法的主要表达⼯具及⽤于表⽰软件模型的⼀种图⽰⽅法。数据流图有两种典型结构,⼀是变换型结构,它所描述的⼯作可表⽰为输⼊、主处理和输出,呈线性状态。
数据流程图中有以下⼏种主要元素:
→:数据流。数据流是数据在系统内传播的路径,因此由⼀组成分固定的数据组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不⽤命名外,数据流应该⽤名词或名词短语命名。
□:数据源(终点)。代表系统之外的实体,可以是⼈、物或其他软件系统。
○:对数据的加⼯(处理)。加⼯是对数据进⾏处理的单元,它接收⼀定的数据输⼊,对其进⾏处理,并产⽣输出。
〓:数据存储。表⽰信息的静态存储,可以代表⽂件、⽂件的⼀部分、数据库的元素等。
如图所⽰即为⼀在线医院管理系统的顶层数据流图
2数据字典
数据字典,即为数据所建⽴的描述信息,⽬的是为了对数据流程图中的各个元素做出详细的说明,它对对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进⾏定义和描述。
3判定表
判定表是分析和表达多逻辑条件下执⾏不同操作的情况的⼯具。它是⼀个表格,最左侧⼀栏包含所有判定项和动作名称,右侧上部则是所有条件的组合情况,右侧下部则表⽰在当前条件下是否执⾏此动作的表项。
4判定树
判定树⼜称决策树,它适合描述问题处理中具有多个判断,⽽且每个决策与若⼲条件有关。使⽤判定树进⾏描述时,应该从问题的⽂字描述中分清哪些是判定条件,哪些是判定的决策,根据描述材料中的联结词出判定条件的从属关系、并列关系、选择关系,根据它们构造判定树。
5分析步骤
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,⽣成数据字典和基元描述;
④建⽴⼈机接⼝,提出可供选择的⽬标系统物理模型的DFD;
⑤确定各种⽅案的成本和风险等级,据此对各种⽅案进⾏分析;
⑥选择⼀种⽅案;
⑦建⽴完整的需求规约。
1.3.2结构化设计(SD)
结构化设计,即根据SA⽅法中的数据流图建⽴⼀个良好的模块结构图(如SC图);运⽤模块化的设计原理控制系统的复杂性,即设计出模块相对独⽴的,模块结构图深度,宽度都适当的,单⼊⼝单出⼝的,单⼀功能的模块结构的软件结构图或软件层次⽅框图。此⽅法提供了描述软件系统的⼯具,提出了评价模块结构图质量的标准,即模块之间的联系越松散越好,⽽模块内各成分之间的联系越紧凑越好。最终的任务就是将需求分析得到的数据流图DFD变换为系统结构图(SC)。
进⾏结构化设计主要遵循以下这么⼏个原则:
⑴抽象化:常⽤的抽象化⼿段有过程抽象、数据抽象和控制抽象[1]
⑵⾃顶向下,逐步细化:将软件的体系结构按⾃顶向下⽅式,对各个层次的过程细节和数据细节逐层细化,直到⽤程序设计语⾔的语句能够实现为⽌,从⽽最后确⽴整个的体系结构。
⑶模块化:将⼀个待开发的软件分解成若⼲个⼩的简单的部分——模块,每个模块可独⽴地开发、测试,最后组装成完整的程序。这是⼀种复杂问题的“分⽽治之”的原则。模块化的⽬的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。
⑷控制层次:表明了程序构件(模块)的组织情况。控制层次往往⽤程序的层次结构(树形或⽹型)来表⽰。
⑸信息屏蔽:将每个程序的成分隐蔽或封装在⼀个单⼀的设计模块中,定义每⼀个模块时尽可能少的显露其内部的处理,可以提⾼软件的可修改性,可测试性和可移植性。
⑹模块独⽴:每个模块完成⼀个相对特定独⽴的⼦功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独⽴性强必须做到⾼内聚低耦合[2]。
1概要设计
以需求分析的结果为出发点,构造出⼀个具体的系统设计⽅案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调⽤关系)。
2详细设计
详细设计即过程设计,在总的设计基础上,确定每个模块的内部结构和算法,最终产⽣每个模块的程序流程图。
1.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与OO
D没有严格的边界,他们是连续的、⽆缝的、允许有⼀定的相交(⼀些⼯作既可以看作是OOA的,也可以看作是OOD的)。
⾯向对象的设计⽅法是OO⽅法中⼀个中间过渡环节。其主要作⽤是对OOA分析的结果作进⼀步的规范化整理,以便能够被OOP直接接受。即确定对象结构、属性、⽅法等内容,对之前的模型进⾏优化等。
2.3.3⾯向对象编码(OOP)
⾯向对象程序设计是⼀种程序设计范型,同时也是⼀种程序开发的⽅法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提⾼软件的重⽤性、灵活性和扩展性。
⽐较
结构化⽅法与⾯向对象⽅法⽐较
三.
三.结构化⽅法与⾯向对象⽅法
3.1基本原则的⽐较
3.1.1结构化⽅法遵循基本原则有:
(1)抽象原则:是⼀切系统科学⽅法都必须遵循的基本原则,它注重把握系统的本质内容,⽽忽略与系统当前⽬标⽆关的内容,它是⼀种
基本的认知过程和思维⽅式。
(2)分解原则:是结构化⽅法中最基本的原则,它是⼀种先总体后局部的思想原则,在构造信息系统
模型时,它采⽤⾃顶向下、分层解决的⽅法。
(3)模块化原则:结构化⽅法最基本的分解原则的具体应⽤,它主要出现在结构化设计阶段中,其⽬标是将系统分解成具有特定功能的若⼲模块,从⽽完成系统指定的各项功能。
3.1.2⾯向对象⽅法遵循基本原则有:
(1)抽象: 抽象是指从事物中舍弃个别的、⾮本质的特征,⽽抽取共同的本质特征的做法。使⽤抽象的好处:⼀是便于访问,外部对象只需知道有限的⼏个操作(接⼝)即可访问其中的对象;⼆是便于维护,如果程序内部发⽣变化⽽其接⼝没有发⽣变化,则只需对其内部进⾏修改。
(2)分类:分类的作⽤就是按照某种原则划分出事物的类别,以便有助于认识复杂世界。在⾯向对象中分类就是把具有相同属性和⽅法的对象化为⼀类,⽤类作为这些对象的抽象描述。分类实际上是把抽象原则运⽤于对象描述时的⼀种表现形式。
(3)封装:在⾯向对象中封装就是⽤对象把属性和和操纵这些属性的操作包装起来,形成⼀个独⽴的实体单元,体现了事物的相对独⽴性。封装的另⼀个含义则是信息隐蔽,即外界不能直接存取对象的内部属性以及隐藏起来的内部操作,外界也不⽤知道对象操作的内部实现细节。
(4)多态性:多态性是指在具有继承关系的类层次结构中可以定义同名的操作或者属性,但是这些属
性和操作具有不同的含义,即具有不同的数据类型或表现出不同的⾏为。
3.2 程序设计思想⽐较
3.2.1 结构化⽅法
结构化⽅法的程序设计偏重于过程,在其基本指导思想中,⼀个完整的程序是由算法和数据结构两部分组成的,开发⼈员的⼯作就是实现这两部分的内容,并⽤合适的⽅式使其⼆者建⽴连接,实现期望的程序功能。
在具体设计流程上,结构化⽅法遵循了⾃底向上的设计思想,即先设计底层模块,确定模块内部算法,设计模块内部程序,并进⾏单元测试。模块完成之后,再进⾏模块之间的组装,进⾏模块的集成测试。随后进⾏确认测试和系统测试,完成设计和调试任务。
3.2.2 ⾯向对象⽅法
对于⾯向对象⽅法的程序设计,其唯⼀组成是对象,对象之间的关系构成了程序的基本框架。由于对象是⼀个数据、功能统⼀的实体,故开发⼈员需要实现对象内部的数据结构与算法,不过显然实现难度⽐⼀个完整的程序要⼩很多。之后的关注点就是协调好对象之间的信息传递,使其能协同⼯作,发挥预期效果。
与结构化⽅法相反的是,⾯向对象⽅法采⽤⾃顶向下的设计思想,先设计⽗类,再设计⼦类,并继承⽗类的属性与⽅法,⽽对象则是在最后程序运⾏过程中动态⽣成。
四.总结
在进⾏软件开发之前,合理地选择开发的模式尤为重要。结构化⽅法和⾯向对象⽅法各有优劣,并⾮完全对⽴,需要根据实际的情况加以选择。
结构化⽅法在程序设计时,先考虑问题⼤的⽅⾯,在确定了主要⽅向后,再由表及⾥深⼊到问题具体的细节,由易到难,逐层解决问题,使得整个程序设计过程由模糊到清晰,由概括到具体。结构化⽅法强调功能抽象和模块化,采取了分块处理问题的⽅法,可以把⼀个⽐较复杂的问题分解为若⼲个容易处理解决的部分,从⽽降低了问题处理的难度。
⾯向对象⽅法与⼈类习惯的思维⽅法⼀致,使得使⽤者和维护⼈员都容易理解,在⽤户使⽤时不会理解困难,在软件维护中可维护性也较⾼,并且易于测试和调试。它的稳定性好,对软件的局部进⾏修改时,不会引起整体的变化,⽽且对局部修改容易实现。它的可重⽤性好,并且由于它是把⼤的问题分解成相互独⽴的⼩问题处理,降低了开发的技术难度,开发⼯作的管理也变的容易了,开发⼤型软件变的容易,成本也降低了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论