结构化分析设计与面向对象分析设计比较研究重庆工商大学计算机科学与技术08软件龚霞指导老师康世瀛中文摘要:解析了结构化方法和面向对象方法这两种软件开发方法具有的分析设计过程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象开发大型软件系统的同时可结合结构化方法。
关键词:软件开发;结构化方法;面向对象方法Abstract:This paper anatomizes the analysis and design process of Structural method and objected-oriented method,discusses their applications and disadvantages and proposes that structural method can also be used while developing the large-scale software systems in selecting the objected-oriented method.Key words:software-development;objected-oriented method;structural method一、引言结构化方法由E.Yourdon和L.L.Constantine在1978年提出,结构化方法又可称为面向功能的软件开发方法或面向数据流的软件开发方法。
结构化方法是建立在软件生存周期的模型基础上的一种软件开发方法,相对于早期的个体化开发方法无疑是前进了一大步。
由于传统的生命周期开发学存在下面的问题:生产率提高的幅度远不能满足需求,软件的重用度很低,软件难以维护,软件往往不能满足用户的需求。
所以出现了面向对象软件开发方法。
这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构,所以面向对象的软件开发方法彻底实现了PAM没有完全实现的目标。
不仅如此,面向对象技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质性的突破,彻底地解决了这些方面存在的严重问题,从而宣告了软件危机末日的来临。
二、结构化分析设计方法1、结构化方法的定义结构化方法采用的是自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。
2、结构化方法的基本要点结构化方法基本要点是:自顶向下,逐步求精,模块化设计。
自顶向下的核心本质是“分解”,它将相对复杂的大问题分解为简单的小问题,对每一个小问题进行精确、定量的描述。
逐步求精即是抽象处理,将系统功能按层次进行分解,由单一简单的模块来描述整个系统。
模块化设计是将求精得到的功能化的模块,以功能块为单位进行程序设计,实现其求解算法。
模块化降低了程序复杂程度,使程序设计、测试和维护等操作简化。
3、分析设计方法结构化分析法是基于问题分解与抽象的观点,将任何信息处理过程看作是将要输入数据变换成所要求的输出信息的装置,因此数据流分析是需求分析的出发点。
结构化分析方法采用“自顶向下,由外及里,逐步求精”的策略对问题进行分析。
具体做法是首先将整个系统看作一个加工(信息处理的装置,是一个黑匣子),标识出系统边界和所有的输入/输出数据流。
然后再对加工内部进行细化分解,将复杂功能分解为若干简单功能的有机结合,并逐步补充细节描述。
结构化分析使用数据流图、加工说明和数据字典等来构造系统的需求分析模型。
结构化设计则是在需求分析的基础上,针对给定的问题给出解决方案。
结构化设计中的总体设计部分要给出被建系统的模块结构,详细设计部分要为个模块提供关于算法的详细描述。
结构化方法比功能分解法更强调对问题域的分析,但所使用的建模概念仍然不能直接的映射到问题域中的事物。
需求的变化往往会引起相应的加工和数据流的变化,进而影响与之相关的其他加工和数据流的变化。
系统复杂时也不能检验分析建模的正确性。
此外,结构化需求分析与后续的结构化设计所采用的概念与表示法存在着不一致,且转换规格不严格、具体,仅是指导性的,这致使从需求分析模型过度到设计模型较为困难。
所以结构化分析设计方法更适合需求确定的中、小型系统开发上。
三、面向对象分析设计方法1、面向对象方法的定义面向对象方法解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式从多方面来构造软件系统,这与传统的开发方法构造系统的思想是不一样的。
面向对象方法是一种运用对象、类、继承、聚合、关联、消息和封装等概念和原则来构造软件系统的开发方法。
2、面向对象方法的基本思想(1)、客观世界中的任何事物都是对象,对象之间存在一定的关系。
面向对象方法要求从现实世界客观存在的事物出发来建立软件系统,强调直接从现实世界中的事物为中心来思考问题和认识问题,并根据这些事物的本质特征和系统责任,把他们抽象成系统对象,作为系统的基本构成单位。
(2)、用对象的属性来描述事物的数据特征;用对象的操作来描述事物的行为特征。
(3)、对象的属性和操作结合为一体,成为一个独立的、不可分割的实体,实体对外屏蔽其内部细节。
(4)、通过抽象对事物进行分类。
把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
(5)、复杂的对象可以用简单的对象作为其构成部分。
(6)、通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。
特殊类继承一般类的属性和方法,从而简化系统的构造过程。
(7)、对象之间通过消息进行通信,以实现对象之间的动态联系。
(8)、通过关联表达类之间的静态关系。
3、面向对象的基本原则面向对象的基本原则主要分为抽象、分类、封装、消息通信和多态性等。
(1)、抽象抽象是指从事物中舍弃个别的、非本质的特征,而抽取共同的本质特征的做法。
使用抽象的好处:一是便于访问,外部对象只需知道有限的几个操作(接口)即可访问其中的对象;二是便于维护,如果程序内部发生变化而其接口没有发生变化,则只需对其内部进行修改。
(2)、分类分类的作用就是按照某种原则划分出事物的类别,以便有助于认识复杂世界。
在面向对象中分类就是把具有相同属性和方法的对象化为一类,用类作为这些对象的抽象描述。
分类实际上是把抽象原则运用于对象描述时的一种表现形式。
(3)、封装在面向对象中封装就是用对象把属性和和操纵这些属性的操作包装起来,形成一个独立的实体单元,体现了事物的相对独立性。
封装的另一个含义则是信息隐蔽,即外界不能直接存取对象的内部属性以及隐藏起来的内部操作,外界也不用知道对象操作的内部实现细节。
(4)、消息通信消息必须直接发给特定的对象,消息中包含关于所请求的服务的必要信息,且遵守所规定的通信规约。
一条消息应包括:消息名、入口参数和返回参数。
一个对象可以是消息的发送者,也可以是消息的接受者,还可以作为消息的参数值。
(5)、多态性多态性是指在具有继承关系的类层次结构中可以定义同名的操作或者属性,但是这些属性和操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。
4、分析设计方法面向对象分析强调用对象的概念对问题域中的事物进行完整的描述,刻画事物的静态特征和行为特征,同时也要如实的反映问题域中的事物之间的各种关系,包括分类关系、组装关系等静态关系以及动态关系。
面向对象分析主要有五个步骤:标识对象(类);标识结构;标识主题;定义属性;定义服务。
面向对象分析模型面向对象分析过程模型面向对象设计是把系统所要求解的问题分解为一些对象及对象间传递消息的过程。
因为对象既可以像数据流一样被处理,又可以像过程一样被描述成处理的流程和细节,所以面向对象分析到面向对象设计之间不存在转换。
面向对象设计以面向对象分析为基础,且面向对象分析与面向对象设计采用一致的表示法。
面向对象设计与面向对象分析之间虽然不强调严格的阶段划分,但是分析与设计有着不同的侧重点与分工,因此具有不同的开发过程及具体策略。
“分析”主要考虑的是做什么,而“设计”则是考虑的怎么做。
另一种观点则是“分析”针对的是问题域和系统的责任,而“设计”考虑的是与实现有关的因素。
四、结构化分析设计与面向对象分析设计比较结构化分析设计主要是将现实世界的问题转化为计算机可以理解的对数据的加工处理,是面向过程的;而面向对象分析设计则是将现实世界的问题直接映射成对象及其接口,面向问题域,复合人们的思维习惯。
下面通过一个实例分析设计来比较两者:在超市型书店中,顾客可以从书架上自由选书,然后到收款台付款和打印单据。
为方便顾客,书店还向顾客提供查询服务,可以依据顾客提供的信息,如书号、书名、作者或出版社,查询书店中有无相应的图书。
书店管理人员日常需要详细记录进书与售书情况,需要经常查询库存书和销售情况,还要统计销售量、销售利润最大的图书(比如10种)信息,为书店进书提供依据。
书店只设一个收款台,用一台微机即可实现经营管理。
从系统功能的角度分析,该系统应包括以下四个部分。
(1)进书登记。
登记本店购进图书的书名、书号、作者、出版社、进价、定价、库存数等信息;(2)售书登记。
登记售书日期、书号、售出数量、单据号、开单人等消息,打印销售单据;(3)查询统计与报表。
随时显示和打印给定时间段内的售书情况,并结算销售金额与利润;统计销售量、销售利润最大的10种图书;随时显示和打印库存书清单;(4)购书查询。
可查询有无某书号、书名、作者、出版社的书。
1、结构化分析设计(1)、系统E-R图系统所包含的实体有库存书、单据,二者之间具有售书关系,所对应的E-R 图如图所示。
系统E-R图(2)、系统的DFDDFD是自顶向下逐步细化的层次图,其中包含四种元素,即用矩形框表示的起点与终点;有向线表示的数据流;圆角框表示的加工;以及半封闭矩形表示的文件。
该系统所对应的DFD:顶层DFD:一层DFD:查询4输出报表客户查询结果二层DFD:3.2管理员查询4.1显示库存清单报表三层DFD:(3)、数据字典(1)文件条目库存表=0{入库书目+进书日期+库存数+封面+备注}m售书表=0{书号+单据号+数量}m单据表=0{单据号+开单日期+开单人+购书单位+总金额}m(2)数据流条目书目=书号+书名+作者+出版社入库书目=书目+进价+定价售书输入=1{书号+数量}m购书单=单据号+1{书名+定价+数量}m +总金额+付款金额+找零+开单日期查询选择=[客户查询输入|管理员查询选择]客户查询输入=[书号|书名|作者|出版社|书名+作者|书名+出版社|作者+出版社]客户查询结果=书目+库存数+封面起止日期=起始日期+终止日期管理员查询选择=[销售额选择|销售量最大选择|销售利润最大选择]+起止日期销售额查询结果管理员查询结果=销售额查询结果+销售量最大查询结果+销售利润最大查询结果报表选择=库存清单选择+售书选择+单据选择报表输出结果=库存清单+售书报表+单据报表库存清单=1{序号+入库书目+进书日期+库存数}m+书种数+总数量+总金额+报表生成日期售书报表=1{书号+书名+1{单据号+数量+开单日期+开单人+购书单位} n+售出数}m+销售书种数+总金额+利润总计+起止日期单据报表=1{单据号+开单日期+开单人+购书单位+1{书号+书名+数量+定价}n+合计金额}m+销售书种数+总金额+利润总计+起止日期客户查询输入|=[书号|书名|作者|出版社|书名+作者|书名+出版社|作者+出版社]管理员查询选择=[销售额选择|销售量最大选择|销售利润最大选择]+起止日期销售额查询结果=0{书目+销售数量+销售金额}m+起止日期销售量最大查询结果=0{书目+销售数量}10+起止日期销售利润最大查询结果=0{书目+销售利润}10+起止日期2、面向对象分析设计(1)、系统的用例图(2)、系统的类图从上面的分析设计过程可以看出,结构化方法是系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界;面向对象方法则是从行为的角度进行建模,基于行为分析发认定对象及它们之间的关系,从内部结构上模拟客观世界。