《2.软件工程方法.ppt》由会员分享,可在线阅读,更多相关《2.软件工程方法.ppt(58页珍藏版)》请在课桌文档上搜索。
1、第2讲 软件工程方法,2023/3/10,2,内容提要,结构化分析、设计和程序设计基于数据流图的结构化分析基于数据流分析的结构化设计方法详细设计面向对象的方法面向对象的概念面向对象的分析,设计和编码,1.结构化分析,2023/3/10,4,1.1 结构化分析与数据流图,结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法数据流图描绘系统的逻辑模型,图中无具体的物理元素,只是描绘信息在系统中流动和处理的情况数据流图可以作为计算机人员与客户之间的通信工具软件设计的出发点,System=data+function,2023/3/10,5,1.2 数据流图符号/1,2023/3/10,6,1
2、.2 数据流图符号/2,2023/3/10,7,1.3 数据流图画法/1,数据流与程序流程图中用箭头表示的控制流有本质不同在数据流图中应描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件处理并不一定是一个程序,可以代表一系列程序、单个程序或者程序的一个模块,甚至人工处理过程一个数据存储也并不一定是一个文件,它可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等等通常在数据流图中忽略出错处理,也不包括如打开文件、关闭文件之类的内务处理数据流图的要点是描绘“做什么”,而不是“怎么做”,2023/3/10,8,1.3 数据流图画法/2,重复元素的画法有时数据的源点和终点相同数据存储有时
3、也要重复为了表示方便,代表同一事物的同样符号在图中出现在n个地方,则在这个符号的一个角上画n-1条短斜线做标记,2023/3/10,9,1.3 数据流图画法/3,命名为数据流(或数据存储)命名名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分不要使用空洞的、缺乏具体含义的名字(如“数据”、“信息”、“输入”之类)如果在为某个数据流(或数据存储)起名字时遇到了困难,则可能是因为数据流图分解不恰当造成的,应该试试重新分解,看是否能克服这个困难,2023/3/10,10,1.3 数据流图画法/4,为处理命名通常先为数据流命名,然后再为与之相关联的处理命名名字应该反映整个处理的功能,
4、而不是一部分名字最好由一个具体的及物动词,再加上一个具体的宾语构成通常名字中仅包括一个动词,如果必须用两个动词才能描述清楚,可能分成两个处理更恰当如果再为某个处理命名时遇到困难,则可能是发现了分解不当的迹象,应该重新分解数据源点/终点是目标系统的外围环境,采用它们在问题域中习惯使用的名字(如“采购员”,“仓库管理员”等),2023/3/10,11,1.4 层次数据流图/1,为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统,2023/3/10,12,1.4 层次数据流图/2,在多层数
5、据流图中,顶层流图仅包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据底层流图是指其加工不需再做分解的数据流图,它处在最底层中间层流图则表示对其上层父图的细化。它的每一加工可能继续细化,形成子图。,2023/3/10,13,1.5 数据流图例子/1,商店业务处理系统,2023/3/10,14,1.5 数据流图例子/2,这个数据流图只是一个高层的系统逻辑模型,它反映了目标系统要实现的功能数据流图绘制步骤首先确定系统的输入和输出根据商店业务,画出顶层数据流图,以反映最主要业务处理流程经过分析,商店业务处理的主要功能应当有销售、采购、会计三大项。主要数据流输入的源点
6、和输出终点是顾客和供应商。然后从输入端开始,根据商店业务工作流程,画出数据流流经的各加工框,逐步画到输出端,得到第一层数据流图,2023/3/10,15,1.5 数据流图例子/3,第一层数据流图,2023/3/10,16,1.5 数据流图例子/4,对销售进行细化:客户提出要求,根据商品名册编辑订单判断数据库中是否有该客户,如果没有要进行登记。根据商品库存进行订单检查如果有货,则下订单如果无货,产生暂存订单,通知采购部门订货,当货品到达后,采购部门发到货通知,此时,与暂存订单相对比,如果有货了,则下订单给会计部门发收款单,会计部门将据此开收据,同时,修改库存将发货票和收据返回给客户编写销售历史经
7、理可以查询库存,2023/3/10,17,1.5 数据流图例子/5,加细每一个加工框 销售细化,2023/3/10,18,1.5 数据流图例子/6,采购细化,2023/3/10,19,1.6 数据流图原则/1,数据流图上所有图形符号只限于前述四种基本图形元素数据流图的主图必须包括前述四种基本元素,缺一不可数据流图的主图上的数据流必须封闭在外部实体之间每个加工至少有一个输入数据流和一个输出数据流在数据流图中,需按层给加工框编号。编号表明该加工所处层次及上下层的亲子关系,2023/3/10,20,1.6 数据流图原则/2,规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数
8、据流必须一致。此即父图与子图的平衡可以在数据流图中加入物质流,帮助用户理解数据流图图上每个元素都必须有名字数据流图中不可夹带控制流初画时可以忽略琐碎的细节,以集中精力于主要数据流,2.结构化设计,2023/3/10,22,基本思想:DFD System HierarchyData Flow 的分类 变换流(Transform Flow):,事实上所有信息流都可归结为变换流,2.1 数据流分类/1,2023/3/10,23,事务流(Transaction Flow),T=Call one of the several subroutines depending on the type of th
9、e incoming transaction request.当信息流具有明显的“发射中心”时,可归结为事务流。,2.1 数据流分类/2,2023/3/10,24,2、分析设计 变换分析例:汽车数字仪表板的设计,功能:通过模-数转换实现传感器和微处理机接口;在发光二极管面板上显示数据;指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;指示加速或减速;如果车速超过55mph,则发出警告铃声。,2.2 面向数据流的设计方法/1,2023/3/10,25,第一步:DFD的分界,先分出I、P、O三块,2.2 面向数据流的设计方法/2,2023/3/10,26,一般问题的一级分
10、解方法:,2.2 面向数据流的设计方法/3,2023/3/10,27,第二步:映射,2.2 面向数据流的设计方法/4,2023/3/10,28,例:,2.2 面向数据流的设计方法/5,2023/3/10,29,第三步:修改 本着高内聚、低耦合的原则。例:精化后的数字仪表板系统的软件结构。注:每个模块应附一简要说明描述 进出该模块的信息(接口描述);模块内部的信息;过程陈述,包括主要判定点及任务等;对约束和特殊特点的简短讨论。,2.2 面向数据流的设计方法/6,2023/3/10,30,事务分析,2.2 面向数据流的设计方法/7,2023/3/10,31,3、SD的总体过程:,优化的前题是:“G
11、et it to work,then make it fast.”,2.3 结构化设计过程,3.结构化编码,2023/3/10,33,3.1 结构化编码,结构程序设计的特点:自顶向下逐步求精;具有单入、单出的控制结构(取消GOTO语句)工具程序流程图(Program Flow Chart)盒图(Box Diagram)PAD(Problem Analysis Diagram),2023/3/10,34,本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。系统有明确的边界定义,且系统结构依赖于系统
12、边界的定义,这样的系统不易扩充和修改。数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差.,4.结构化技术的缺点,5.面向对象方法学,2023/3/10,36,杭 州,北 京,Message,Send by method,对象Object,Object,=数据Attribute,Attributes:location;employee;,+操作Method,Methods:send;sell;,注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。,我想
13、把邮局搬到我家门口,多加几个邮递员,24小时都开门,对不起,本邮局不提供此类服务,唉,那就先送束花吧 Post_office.Send(request,payment),5.1 面向对象方法学概念/1,2023/3/10,37,尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体 对象。程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。,5.1 面向对象方法学概念/2,2023/3/10,38,5.2 面向对象思想的起源,维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。他生前只于1
14、922年出版了一本著作逻辑哲学论(Tractatus Logico-Philosophicus)。在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是“OO”,Object-Oriented,面向对象。,2023/3/10,39,5.3 OOM的四要素/1,对象:世界由对象构成对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,20
15、23/3/10,40,5.3 OOM的四要素/2,类:物以类聚类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。在一个类中,每个对象都是类的实例(Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。,2023/3/10,41,例:class Post_office private:loc_type location;emp_type employee;public:void send(req_type request,money_ty
16、pe payment);void sell(int goods,money_type payment);,main()Post_office My_PO;req_type My_request;money_type My_payment;My_PO.Send(My_request,My_payment);,2023/3/10,42,继承:世界的相似性与多样性继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承。继承是使用已存在的定义做为基础建立新定义的技术。新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改继承类。既存类可当
17、做基类来引用,则新类相应地可当做派生类来引用。,5.3 OOM的四要素/3,2023/3/10,43,2023/3/10,44,使用继承设计一个新类,可以视为描述一个新的对象集,它是既存类所描述对象集的子集合。这个新的子集合可以认为是既存类的一个特殊化。Quadrilateral类是Polygon类的特殊化。Quadrilateral是限制为四条边的多边形。我们还可以进一步地把类Quadrilateral特殊化为Rectangle。,2023/3/10,45,类Quadrilateral的界面可以等同于类Polygon的界面,而Rectangle类的界面又与Quadrilateral类的界面相
18、同。新类的界面还可以被看做是既存类界面的一个扩充界面。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。,2023/3/10,46,2023/3/10,47,在类的继承层次中,Quadrilateral的实际参数可以替换Polygon的形式参数。类Quadrilateral的界面与类Polygon的界面是相容的Quadrilateral的界面可响应Polygon界面的所有消息。,2023/3/10,48,5.3 OOM的四要素/4,消息:合作之道消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,
19、只能通过消息请求它进行处理(如果它提供相应消息的话)。消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,2023/3/10,49,OOM=Object+Class+Inheritance+Communication with messages,2023/3/10,50,传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解OOM:以object 为核心,强调对现实概念的模拟而不强调算法。
20、“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。Class:由特殊到一般的归纳(induction)Inheritance:由一般到特殊的演绎(deduction),5.4 方法比较/1,2023/3/10,51,传统方法:结构依赖于功能,不稳定。OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。OOM:一个class所有的 instances 都可重用它的代码;由 inhe
21、ritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。,5.4 方法比较/2,2023/3/10,52,传统方法:可维护性是最令人头痛的问题。OOM:从以下几方面改善了可维护性 稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;容易测试、调试。,有这一条就什么都好办了!,这一点还可商榷,5.4 方法比较/3,2023/3/10,53,OOM并不是减少了开发时间,而是
22、通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与Prototyping结合使用效果好。,5.4 方法比较/4,6 面向对象的系统分析与设计,2023/3/10,55,6.1 概述,面向对象的分析(OOA)分析问题论域,找出问题解决方案,发现对象,分析对象的内部构成和外部关系,建立软件系统的对象模型面向对象的设计(OOD)根据已确定的系统对象模型,运用面向对象技术,进行系统软件设计,2023/3/10,56,6.2 面向对象的分析,问题论域分析业务范围,业务规则,业务处理过程,确定系统的责任,范围和边界,确定系统的需求发现和定义对象和类识别对象和类,确
23、定它们的内部特征:属性和操作,这是一个抽象过程识别对象的外部联系对象与对象,类与类之间的各种外部联系,包括一般与特殊,整体与部分,实例连接(关联),消息连接等建立系统的静态结构模型对象类图和对象图,系统与子系统结构图等,绘制相应的图建立系统的动态行为模型对象之间的交互关系等,2023/3/10,57,6.3 面向对象的设计,设计对象和类具体设计对象和类的属性,操作,设计对象与类的各种外部联系的实现结构,设计消息与事件的内容、格式等设计系统结构设计组件与子系统,以及它们的相互的静态和动态关系设计问题论域子系统负责领域的业务服务设计人机交互系统设计数据管理子系统设计任务管理子系统进程管理设计优化,提高系统性能,2023/3/10,58,小结,结构化设计方法以功能分解为中心面向对象方法自然地以论域中的对象作为软件的基本分析和设计单元,改善了软件的可理解性,可重用性,