标签:机制 独立 顺序 自己 模型 另一个 定义 核心 数据分析
软件开发方法指在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发的策略。因为20世纪60年代计算机软件、硬件发展不均衡,使得大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题,引发了“软件危机”。为了同时提高软件的效率和质量,与之对应的软件开发方法在不断的革新。经过几十年的研究和应用,两种基于相应的程序设计思想和语言的软件开发方法,结构化方法与面向对象方法,成为了主流的开发方法,被广泛的使用于软件工程中。
结构化方法包括结构化分析(Structured Analysis)、结构化设计(Structured Design)和结构化程序设计(Structured Program Design)三部分内容。相应地,面向对象方法包括面向对象分析(Object-Oriented Analysis)、面向对象设计(Object—Oriented Design)和面向对象程序语言(Object-Oriented Program Design)。两种软件开发方法从起源、思想、分析、设计,到程序设计、扩展重用、应用等各个方面有着许多的联系和区别,下面我将分别介绍两种软件开发方法并对其进行比较。
结构化方法起源于结构化程序设计,具有面向功能、结构清晰、支持逐步求精等特点,使软件易于维护。在运用结构化开发方法时,设计人员首先需要运用抽象(Abstraction)方法在最高层次上描述问题的解决方案,之后,设计人员在进行逐步求精(Refinement),即通过逐步细化结构最终得出问题的解决方案,在此过程中各个结构内部的信息对外部是不可见的,即信息隐藏。
结构化方法基于功能分解设计系统结构, 它从内部功能上模拟客观世界。所采用的主要工具是数据流图DFD。通过不断将DFD中复杂的处理分解成子数据流图来简化问题。
优点:结构化方法能够增加软件规格说明的可读性和软件系统的可靠性。数据流图容易理解, 有利于开发人员与客户的交流。
缺点:软件系统结构对功能的变化十分敏感, 功能的变化往往意味着重新设计。设计出的软件难以重用, 延缓了开发的进程。
1.3.1结构化分析(SA)
结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术,是一种需求分析方法。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、判定表以及判定树等。
1数据流图
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。数据流图有两种典型结构,一是变换型结构,它所描述的工作可表示为输入、主处理和输出,呈线性状态。
数据流程图中有以下几种主要元素:
→:数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
□:数据源(终点)。代表系统之外的实体,可以是人、物或其他软件系统。
○:对数据的加工(处理)。加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。
〓:数据存储。表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。
如图所示即为一在线医院管理系统的顶层数据流图
2数据字典
数据字典,即为数据所建立的描述信息,目的是为了对数据流程图中的各个元素做出详细的说明,它对对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述。
3判定表
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。它是一个表格,最左侧一栏包含所有判定项和动作名称,右侧上部则是所有条件的组合情况,右侧下部则表示在当前条件下是否执行此动作的表项。
4判定树
判定树又称决策树,它适合描述问题处理中具有多个判断,而且每个决策与若干条件有关。使用判定树进行描述时,应该从问题的文字描述中分清哪些是判定条件,哪些是判定的决策,根据描述材料中的联结词找出判定条件的从属关系、并列关系、选择关系,根据它们构造判定树。
5分析步骤
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。
结构化设计,即根据SA方法中的数据流图建立一个良好的模块结构图(如SC图);运用模块化的设计原理控制系统的复杂性,即设计出模块相对独立的,模块结构图深度,宽度都适当的,单入口单出口的,单一功能的模块结构的软件结构图或软件层次方框图。此方法提供了描述软件系统的工具,提出了评价模块结构图质量的标准,即模块之间的联系越松散越好,而模块内各成分之间的联系越紧凑越好。最终的任务就是将需求分析得到的数据流图DFD变换为系统结构图(SC)。
进行结构化设计主要遵循以下这么几个原则:
⑴抽象化:常用的抽象化手段有过程抽象、数据抽象和控制抽象[1]
⑵自顶向下,逐步细化:将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。
⑶模块化:将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。
⑷控制层次:表明了程序构件(模块)的组织情况。控制层次往往用程序的层次结构(树形或网型)来表示。
⑸信息屏蔽:将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少的显露其内部的处理,可以提高软件的可修改性,可测试性和可移植性。
⑹模块独立:每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独立性强必须做到高内聚低耦合[2]。
1概要设计
以需求分析的结果为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系)。
2详细设计
详细设计即过程设计,在总的设计基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图。
它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。
结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。
顺序结构:顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。
选择结构:选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。
循环结构:循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环。
当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。
直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是"直到条件为真时为止",所以称为直到型循环。
面向对象(Object+oriented,简称OO)方法是以面向对象思想为指导进行系统开发的一类方法的总称。这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。
面向对象方法构建的软件系统中,软件中任何一个元素都是对象,复杂的软件对象由相对简单的软件对象组成,各个对象之间仅能通过传递消息互相联系。用对象分解取代了传统的功能分解。将对象划分为对象类,每个对象类都定义一组数据和一组方法。按照子类和父类的关系,将若干对象类组成一个具有层次结构的系统。
封装性:把数据和实现操作的代码集中起来放在对象内部,不能从外部直接访问或修改。 继承性:指子类能够直接获得父类已有的性质和特性,而不必重新定义。
多态性:允许将父对象设置成和它的一个或多个子对象相等的技术,允许每个对象以适合自己的方式去响应共同的消息。即发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。
面向对象分析阶段是通过行为分析法认定对象及他们之间的关系。面向对象的分析模型通常使用UML的建模方法进行建模。
1用例图
使用用例图从用户角度描述系统功能并指出各功能的操作者。用例图是指用户使用系统时所执行的一个与行为相关的事物序列,这个序列是在与系统的会话中完成的。
用例图包括用例和角色两个要素,角色与用例之间的连接,用例之间的使用和扩展关系,通过角色执行用例,可以识别出不同的用例。
2类图
类图描述了系统中的类及其相互之间的关系,其本质反映了系统中对象的类型以及对象之间的各种静态关系。
3顺序图
顺序图表示对象之间交互的顺序。是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
4活动图
描述满足用例功能需求所要进行的相关活动。是阐明了业务用例实现的工作流程。业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作。业务用例由一系列活动组成,它们共同为业务主角生成某些工件。工作流程通常包括一个基本工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。
5遵循原则
抽象:指为了某一分析目的而集中精力研究对象的某一性质,它可以忽略其它与此目的无关的部分。抽象是我们科学地研究和处理复杂问题的重要方法。抽象机制被用在数据分析方面,称之为数据抽象。数据抽象是OOA的核心。数据抽象把一组数据对象以及作用其上的操作组成一个程序实体。使得外部只知道它是如何做和如何表示的。
封装:即信息隐蔽。它是指在确定系统的某一部分内容时,应考虑到其它部分的信息及联系都在这一部分的内部进行,外部各部分之间的信息联系应尽可能的少。
继承:是指能直接获得已有的性质和特征而不必重复定义它们。OOA可以一次性地指定对象的公共属性和方法,然后再特化和扩展这些属性及方法为特殊情况,这样可大大地减轻在系统实现过程中的重复劳动。在共有属性的基础之上,继承者也可以定义自己独有的特性。
面向对象设计与面向对象分析采用一致的概念,原则和表示方法,二者之间并没有很大的区别,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是近几年提出的一种新的软件生命周期模型——喷泉模型(如图所示),其中分析与设计这两个水泡表明OOA与OOD没有严格的边界,他们是连续的、无缝的、允许有一定的相交(一些工作既可以看作是OOA的,也可以看作是OOD的)。
面向对象的设计方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。即确定对象结构、属性、方法等内容,对之前的模型进行优化等。
面向对象程序设计是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
(1)抽象原则:是一切系统科学方法都必须遵循的基本原则,它注重把握系统的本质内容,而忽略与系统当前目标无关的内容,它是一种基本的认知过程和思维方式。
(2)分解原则:是结构化方法中最基本的原则,它是一种先总体后局部的思想原则,在构造信息系统模型时,它采用自顶向下、分层解决的方法。
(3)模块化原则:结构化方法最基本的分解原则的具体应用,它主要出现在结构化设计阶段中,其目标是将系统分解成具有特定功能的若干模块,从而完成系统指定的各项功能。
(1)抽象: 抽象是指从事物中舍弃个别的、非本质的特征,而抽取共同的本质特征的做法。使用抽象的好处:一是便于访问,外部对象只需知道有限的几个操作(接口)即可访问其中的对象;二是便于维护,如果程序内部发生变化而其接口没有发生变化,则只需对其内部进行修改。
(2)分类:分类的作用就是按照某种原则划分出事物的类别,以便有助于认识复杂世界。在面向对象中分类就是把具有相同属性和方法的对象化为一类,用类作为这些对象的抽象描述。分类实际上是把抽象原则运用于对象描述时的一种表现形式。
(3)封装:在面向对象中封装就是用对象把属性和和操纵这些属性的操作包装起来,形成一个独立的实体单元,体现了事物的相对独立性。封装的另一个含义则是信息隐蔽,即外界不能直接存取对象的内部属性以及隐藏起来的内部操作,外界也不用知道对象操作的内部实现细节。
(4)多态性 :多态性是指在具有继承关系的类层次结构中可以定义同名的操作或者属性,但是这些属性和操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。
结构化方法的程序设计偏重于过程,在其基本指导思想中,一个完整的程序是由算法和数据结构两部分组成的,开发人员的工作就是实现这两部分的内容,并用合适的方式使其二者建立连接,实现期望的程序功能。
在具体设计流程上,结构化方法遵循了自底向上的设计思想,即先设计底层模块,确定模块内部算法,设计模块内部程序,并进行单元测试。模块完成之后,再进行模块之间的组装,进行模块的集成测试。随后进行确认测试和系统测试,完成设计和调试任务。
对于面向对象方法的程序设计,其唯一组成是对象,对象之间的关系构成了程序的基本框架。由于对象是一个数据、功能统一的实体,故开发人员需要实现对象内部的数据结构与算法,不过显然实现难度比一个完整的程序要小很多。之后的关注点就是协调好对象之间的信息传递,使其能协同工作,发挥预期效果。
与结构化方法相反的是,面向对象方法采用自顶向下的设计思想,先设计父类,再设计子类,并继承父类的属性与方法,而对象则是在最后程序运行过程中动态生成。
在进行软件开发之前,合理地选择开发的模式尤为重要。结构化方法和面向对象方法各有优劣,并非完全对立,需要根据实际的情况加以选择。
结构化方法在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问题,使得整个程序设计过程由模糊到清晰,由概括到具体。结构化方法强调功能抽象和模块化,采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。
面向对象方法与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会理解困难,在软件维护中可维护性也较高,并且易于测试和调试。它的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现。它的可重用性好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件变的容易,成本也降低了。
标签:机制 独立 顺序 自己 模型 另一个 定义 核心 数据分析
原文地址:http://www.cnblogs.com/yuxiaoqiang/p/6204629.html