第2章软件工程方法与工具•软件工程方法概述•面向对象的概念与开发方法•统一建模语言UML简介•软件工具概述•UML建模工具RationalRose2.1软件工程方法概述•概念软件工程包含技术和管理两方面的内容,是技术和管理紧密结合所形成的工程学科。通常将软件开发全过程中使用的一整套技术方法的集合称为方法学(methedology),也称为范型(paradigm)。软件开发范型(Paradigm)•范型又称为风范。通常认为范型就是开发模型(Model)或开发模式(Pattern),实际上它与方法(Methodology)一样,都被视为一种开发技术。范型支配了设计方法、编码语言、测试和检验技术的选择。•过程性范型把软件视为处理流,定义成由一系列步骤构成的算法。每一步骤都是带有输入和输出的一个过程,把这些步骤串联在一起可产生贯通于整个程序的控制流。•面向对象范型把标识和模型化问题领域中的实体做为系统开发的起点,面向对象系统中的对象是数据抽象与过程抽象的综合。•逻辑性范型是基于规则的,它把有关问题的知识分解成一组具体规则(如prolog语言)。•面向进程范型把一个问题分解成独立执行的模块。让不只一个程序同时运行。这些进程互相配合,解决问题。•面向存取范型是一种在构造用户界面方面很有用的技术。•函数型范型是基于规则的,它把有关问题的知识分解成一组具体规则,用语言的“if_then”等结构来表示这些规则。•说明性范型。•每种开发范型都有它的支持者和用户:每种开发范型都特别适合于某种类型的问题或子问题;每种开发范型都用不同的方式考虑问题;每种开发范型都使用不同的方法来分解问题每种开发范型都导致不同种类的块、过程、产生规则。•系统开发时通常把大型问题分解成一组子问题。对于每个子问题采用适当的软件开发范型。2.1软件工程方法概述•三要素:方法、工具和过程。软件工程方法(method)为软件开发提供了“如何做”的技术;方法覆盖面很广,包括沟通、需求分析、设计建模、编程、测试和支持;软件工程方法依赖于一组基本原则,其涵盖了包括建模和其他技术在内的所有技术领域;目前使用最广泛的软件工程方法:传统方法(结构化方法),面向对象方法。2.1软件工程方法概述•三要素:方法、工具和过程。软件工具为软件工程方法提供了自动的或半自动的软件支撑环境,如CASE、ISEE等;过程是为了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。2.1软件工程方法概述•结构化方法也称为生命周期方法学或结构化范型。将软件生命周期的全过程依次划分为若干个阶段,采用结构化技术来完成每个阶段的任务。特点:(1)强调自顶向下顺序地完成软件开发的各阶段任务;(2)结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。2.1软件工程方法概述面向对象方法是将数据和对数据的操作紧密地结合起来的方法。软件开发过程是多次反复迭代的演化过程。面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。2.1软件工程方法概述形式化方法形式化方法是一种基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。该过程的具体描述如图所示。2.1软件工程方法概述形式化方法的主要特点(1)软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明;(2)设计、实现和单元测试等开发过程由一个变换开发过程代替。通过一系列变换将形式的规格说明细化成为程序。这种细化的过程如图所示。2.2面向对象的概念与开发方法•现实世界就是由各种对象组成的,如建筑物、人、汽车、动物、植物等。•复杂的对象可以由简单的对象组成。•在研究对象时主要考虑对象的属性和行为,有些不同的对象会呈现相同或相似的属性和行为,如轿车、卡车、面包车。•通常将属性及行为相同或相似的对象归为一类。•类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为。2.2面向对象的概念与开发方法•Coad和Yourdon给出了“面向对象”的一个定义:面向对象=对象+类+继承+消息通信•如果一个系统是使用这样4个概念设计和实现的,则可认为这个系统是面向对象的。对象•对象是包含现实世界物体特征的抽象实体,它反映了系统为之保存信息和(或)与它交互的能力。•例如,Student对象的数据可能有姓名、性别、出生日期、家庭住址、电话号码等,其操作可能是对这些数据值的赋值及更改。对象•对象与后面讲的类具有几乎完全相同的表示形式,主要差别是对象的名字下面要加一条下划线。对(1)第一种格式是对象名在前,类名在后,中间用冒号连接。对象名:类名(2):类名这种格式用于尚未给对象命名的情况,注意,类名前的冒(3)对象名对象•对象有两个层次的概念:(1)现实生活中对象指的是客观世界的实体。可以是可见的有形对象,如人、学生、汽车、房屋等;也可以是抽象的逻辑对象,如银行帐号,生日。(2)程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。对象•可以将程序中的对象分为5类:物理对象,角色,事件,交互,规格说明。(1)物理对象(PhysicalObjects)──物理对象是最易识别的对象,通常可以在问题领域的描述中找到,它们的属性可以标识和测量。例如,大学课程注册系统中的学生对象;一个网络管理系统中各种网络物理资源对象(如开关、CPU和打印机)都是物理对象。对象(2)角色(Roles)──一个实体的角色也可以抽象成一个单独的对象。角色对象的操作是由角色提供的技能。•例如,一个面向对象系统中通常有“管理器”对象,它履行协调系统资源的角色。一个窗口系统中通常有“窗口管理器”对象,它扮演协调鼠标器按钮和其他窗口操作的角色。特别地,一个实际的物理对象可能同时承担几个角色。•例如,一个退休教师同时扮演退休者和教师的角色。对象(3)事件(Events)──一个事件是某种活动的一次“出现”。•例如“鼠标”事件。一个事件对象通常是一个数据实体,它管理“出现”的重要信息。事件对象的操作主要用于对数据的存取。•如“鼠标”事件对象有诸如光标坐标、左右键、单击,双击等信息。对象(4)交互(Interactions)──交互表示了在两个对象之间的关系,这种类型的对象类似于在数据库设计时所涉及的“关系”实体。•当实体之间是多对多的关系时,利用交互对象可将其简化为两个一对多的关系。•例如,在大学课程注册系统中,学生和课程之间的关系是多对多的关系,可设置一个“选课”交互对象来简化它们之间的关系。对象(5)规格说明(Specification)──规格说明对象表明组合某些实体时的要求。规格说明对象中的操作支持把一些简单的对象组合成较复杂的对象。•例如,一个“烹饪”对象定义了各种调料和它们的量,以及它们组合的次序和方式。类与封装•类。可以将现实生活中的对象经过抽象,映射为程序中的对象。对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)。•为了让计算机创建对象,必须先提供对象的定义,也就是先定义对象所属的类。例如,可以将学生对象所属的类定义为Student。类的图形表示如图所示。类与封装•封装。面向对象的封装特性与其抽象特性密切相关。封装是一种信息隐蔽技术,就是利用抽象数据类型将数据和基于数据的操作封装在一起。用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的。•封装的定义是:(1)清楚的边界,所有对象的内部信息被限定在这个边界内;(2)接口,即对象向外界提供的方法,外界可以通过这些方法与对象进行交互;(3)受保护的内部实现,即软件对象功能的实现细节,实现细节不能从类外访问。继承•继承。继承是一种联结类的层次模型,为类的重用提供了方便,它提供了明确表述不同类之间共性的方法。•我们将公共类称为超类(superclass)、父类(fatherclass)、祖先(ancestor)或基类(baseclass),而从其继承的类称为子类(subclasses)、后代(deslendane)或导出类(derivedclass)。多态•根据为请求提供服务的对象不同可以得到不同的行为,这种现象称为多态。•在运行时对类进行实例化,并调用与实例化对象相应的方法,称为动态绑定、后期绑定或运行时绑定。相应地,如果方法的调用是在编译时确定的,则称为是静态绑定、前期绑定或编译时绑定。•通过在子类中覆盖父类的方法实现多态。消息通信•消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。•发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。•一个对象接收到消息,则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。面向对象的开发方法面向对象软件开发方法的特征方法的唯一性即方法是对软件开发过程所有阶段进行综合考虑而得到的。从生存期的一个阶段到下一个阶段的高度连续性即生存期后一阶段的成果只是在前一阶段成果的补充和修改。把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。Rumbaugh方法Rumbaugh和他的同事提出的对象模型化技术(OMT)用于分析、系统设计和对象级设计。分析活动建立三个模型:对象模型(描述对象、类、层次和关系);动态模型(描述对象和系统的行为);功能模型(类似于高层的DFD,描述穿越系统的信息流)。面向对象的开发方法Coad和Yourdon方法Coad和Yourdon方法常常被认为是最容易学习的OOA方法。建模符号相当简单,其OOA过程如下:(1)使用“要找什么”准则标识对象;(2)定义对象之间的一般化/特殊化结构(又称为分类结构);(3)定义对象之间的整体/部分结构(又称为组合结构);(4)标识主题;(5)定义对象的属性及对象之间的实例连接;(6)定义服务及对象之间的消息连接。面向对象的开发方法Booch方法包含“微开发过程”和“宏开发过程”两个过程。OOA宏观开发过程如下:标识类和对象;标识类和对象的语义;标识类和对象间的关系;进行一系列精化;实现类和对象。面向对象的开发方法Jacobson方法也称为OOSE(面向对象软件工程),其特点是特别强调使用用例——用以描述用户和产品或系统间如何交互的场景。过程如下:标识系统的用户和他们的整体责任通过定义参与者及其职责、用例、对象和关系的初步视图,构造需求模型通过表示界面对象、建立界面对象的结构视图、表示对象行为、分离出每个对象的子系统和模型,构造分析模型面向对象的开发方法Wirfs-Brock该方法不要求明确区分分析和设计任务。从评估客户规格说明到设计完成,是一个连续的过程。相关的任务描述如下:评估客户规格说明使用语法分析从规格说明中提取候选类将类分组以标识超类定义每个类的职责将职责赋予每个类表示类之间的关系基于职责定义类之间的协作建立类的层次表示构造系统的协作图面向对象的开发方法2.3统一建模语言UML简介•面向对象的建模语言很多,目前使用最广泛的是统一建模语言(UML,UnifiedModelingLanguage);•它将Booch、Rumbaugh和Jacobson等各自独立的OOA和OOD方法中最优秀的特色组合成一个统一的方法。UML的产生和发展UML(UnifiedModelingLanguage)的概念于1996年由面向对象方法领域的三位著名专家GradyBooch,JamesRumbaugh和IvarJacobson提出的。•1996年6月和10月分别发布了UML0.9,UML0.91。•1997年1月,UML1.0被提交给对象管理组织OMG。•1997年9月,提交UML1.1,1997年11月被OMG采纳作为基于面向对象技术的标准建模语言。•1998、2000、2001、2003、2005年分别发布了UML1.2、UML1.3、UML1.4、UML1.5、UM