UML
课件
精华版
面向对象方法发展的产物(20世纪80年代)面向对象的建模语言(1994年 50多种)方法大战 统一面向对象的分析与设计 软件开发全过程Requirements CaptureSystem Analysis and DesignImplementationTestingMaintenance,UML(Unified Modeling Language,统一建模语言),教学目的掌握UML语言的基本知识常用建模技术使用UML进行面向对象的分析与设计的能力 学习方法自主学习重视上机实践,课程说明,课程说明,按时到课案例教学实验课、实验报告考核:期末笔试60(实验+平时)40,教材和参考书,UML系统建模与分析设计,刁成嘉主编,机械工业出版社,2007.7UML参考手册(第2版),美:JAMES RUMBAUGH,IVAR JACOBSON,GRADY BOOCH著,UML China译,机械工业出版社,2005UML和模式应用(第3版),美:CRAIG LARMAN著,李洋等译,机械工业出版社,2006 UML基础、案例与应用(第3版),美:JOSEPH SCHMULLER著,李虎等译,人民邮电出版社,2004,第1章 面向对象技术概述,重点:软件工程相关概念面向对象相关概念,1.1 软件危机与软件工程,软件发展的几个时期1946(第一台计算机)1960“软件”雏形是简单的程序20世纪60年代末到70年代初“软件”成为产品至今 软件工程时期软件危机 软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。如何开发软件,以满足不断增长的、日趋复杂的要求如何维护规模不断庞大的软件产品,软件工程,由北大西洋公约组织NATO于1968年提出软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,1.1 软件危机与软件工程,软件开发的现状软件工程学科不断发展软件危机仍然存在中小型软件开发较为成熟,大型软件存在问题常见软件开发方法瀑布模型增量模型原型模型 螺旋模型(风险驱动),1.1 软件危机与软件工程,1.2 软件开发的基本认识,大型软件系统的特点开发代价高、时间长,参与人员多,软件生命周期长。软件系统开发的两个方面软件开发过程软件开发中资源的协调和管理,1.2 软件开发的基本认识,软件是逻辑部件,而不是物理部件,软件产品与硬件产品的区别表现形式不同(看不见,摸不着,长期运行看效果)生产方式不同(人与人的沟通,容易有疏忽与失误)产品需求不同(软件不允许有误差)维护方式不同(出现bug要调整,进而引发新bug),1.3 软件固有的复杂性,软件开发的复杂性与困难性是由于软件的特点造成的,软件的复杂性是固有的。软件复杂性的原因跟计算机体系结构相关(冯.诺依曼 硬件简单/软件复杂)软件开发是智力活动,无法形成统一开发模式软件系统的需求经常改变软件元素之间的关系不确定软件依赖硬件环境,1.4 软件工程的一般原则,分解,“分而治之”或“各个击破”,降低复杂性抽象,抽取系统本质特征,忽略非基本特征(Miller神奇的数字7)过程抽象数据抽象模块化,基本要求是高内聚、低耦合信息隐藏,也称封装(电话)复用 软件自动化 软件构件组装,结构化的开发方法SA、SD、SP特点:面向数据流 DFD软件结构图SC优化划分模块内部算法和流程,Jackson方法(不常用)面向数据结构(例如,学生信息管理系统,处理各表的输入输出),面向对象的开发方法OOA、OOD、OOP,1.5 几种基本的软件开发方法,1.6 面向对象的发展历程,196070年代COBOL(商用语言,银行)、FORTRAN(工程计算)、C(系统开发)结构化分析和设计技术1980年90年代初期Smalltalk、Ada、C+、Visual Basic早期面向对象生成(代码)方法90年代中晚期JavaUMLUnified Process,1.7 面向对象技术的优点,面向对象技术的优点稳定性较高,需求的较小改变不会影响软件的结构开发的系统更易于理解,贴近现实世界(功能为基础PK对象为基础)可靠性高复用结构化方法对问题进行功能分解,强调软件的结构按照功能来组织,一旦功能改变,软件结构就不稳定OO方法按照问题域分解,能够更直接地描述现实世界各个开发阶段之间过渡平滑 OOA与OOD阶段无鸿沟,1.8 面向对象领域的基本概念,OO技术领域存在一些基本术语和概念,需要掌握和理解。,1.8.1 对象和实例,对象(Object)有意义的一切事物都是对象它是系统用来描述客观事物的一个实体,是构成系统的一个基本单位。对象包括:属性(静态特征)和方法(动态特征)对象之间对过消息进行通信。实例(Instance)它与对象的概念很类似,但其含义更广泛一些。,1.8.2 类,类(Class)它是具有相同属性和方法的一组对象的集合为某类对象提供统一的描述类是静态概念,对象是动态的对象是类的实例,1.8.3 封装,封装(Encapsulation)就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。封装使对象具有2个部分:接口部分和实现部分(硬盘)封装提供2种保护保护对象防止直接访问对象内部细节保护客户防止对象实现部分的变化影响客户对象,1.8.4 继承,继承(Inheritance)它使子类可以继承父类的属性和方法继承增加了软件复用的机会单继承与多继承,override与overload,覆盖(override)在子类中增加或重新定义所继承的属性或方法。public class A String name;public String getValue()return“Value is:”+name;public class B extends A String address;public String getValue()return“Value is:”+address;,重载(overload)同一个类中有多个同名方法,但它们在操作数或操作数类型上有区别。系统根据实参引用不同方法。,1.8.5 多态,多态(polymorphism)在OO技术中,多态指使一个实体在不同上下文条件下具有不同意义或用法的能力与多态有关的概念继承覆盖动态绑定向上转型(指派),圆柱体 锥体 立方体,1.8.6 消息,消息(Message)是指向对象发出的服务请求对象直接用消息的方式传递信息,而不是参数包括:提供服务的对象的标识、服务标识、输入信息和回答信息等对象间的消息传递是OO方法的基本原则消息包括同步消息,请求者需要等待响应者返回异步消息,请求者不需要等待响应者返回,发出消息后可以继续自己的后续工作(和函数调用有本质区别),1.9 面向对象分析与设计,分析模型Analysis models描述应用领域设计模型Design models描述软件系统 如structure chartOO开发方法中分析模型和设计模型之间使用相同的模型和建模概念,二者之间映射方便,平滑过渡,防止不一致。,OOA用面向对象方法分析问题域,建立基于对象、消息的业务模型,形成对客观世界和业务本身的正确认识。生成业务对象的动、静态模型和抽象类 UML业务模型、用例图以及初步的交互图。OOD针对OOA给出的问题域模型,用面向对象方法设计出软件的基础架构(概要设计)和完整的类结构(详细设计),以完成业务功能。最后编码。生成对象类的动、静态模型(解决域)UML类图、交互图(顺序图和协作图)、状态图、活动图以及实施阶段的组件图和部署图。,1.9 面向对象分析与设计,小结,软件工程学科发展,但软件危机依然存在;软件固有的复杂性决定了这一局面;控制的基本原则有:分解、抽象、模块化、信息隐藏、复用;OO方法充分体现了上述原则;OO方法是解决软件危机的有效途径之一。,第2章 UML概述,2.1 为什么需要UML,计算机图形学 名言:一幅图顶得上一千个字,2.1.1 建模的意义,模型是对现实的简化,建模是为了更好地理解系统。模型帮助我们按照实际情况或需求对系统可视化;(掌握不了文字,画幅画代替)模型允许我们详细说明系统的结构、行为;模型给出了一个构造系统的模板;模型对我们作出的决策进行文档化。(先有文档,再有代码),2.1.2 建模的原理,选择创建什么模型对如何动手解决问题和如何形成解决方案有意义深远的影响。三只小猪盖房子 摩天大厦每一种模型可以在不同的精度级别上表示。最好的模型可以让你根据观察的角色及原因选择它的详细程度。对每个系统最好用一组几乎独立的模型去处理。飞机模型,2.1.3 选择UML,使用UML建立对象模型来映射现实世界UML实现业务域到计算机世界的完整、有序的映射,2.1.3 选择UML,UMLUnified Modeling LanguageUnified组合了当前最好的面向对象软件建模方法Grady Booch,James Rumbaugh,Ivar Jacobson,UML三位主要贡献者1.OMT(James Rumbaugh)2.The Booch method(Grady Booch)3.OOSE(Ivar Jacobson),Modeling用于表达现实的简化视图,以便于面向对象软件系统的设计与实现LanguageUML主要是遵循精确语法的图形语言(还包括规则 约束 扩展机制),2.1.3 选择UML,2.1.3 选择UML,UML目标:提供全面的建模语言(为所有事情所有人),便于开发组所有成员交流与通信。,2.1.3 选择UML,Unified Modeling Language,其它方法,Booch91,OMT-1,OOSE,Booch93,OMT-2,Unified Method 0.8,UML 0.9&0.91,UML 1.0,UML 1.1,UML 1.3,UML 1.4(使用非常多的一个版本),UML 1.5,UML 2.0,UML合作伙伴意见,2.2 UML的发展历史,95,96.6和96.10,97.1,97.9,99.6,01.9,03.3,最新,OMG,P67 www.OMG.org,2.3 UML的特点,统一的标准,已经被OMG接受为标准建模语言面向对象,支持面向对象开发可视化,表示能力强独立于开发过程,可以适用于不同软件过程概念明确,表示简洁,结构清晰,容易学习掌握,理解UML的特点,UML是一种语言遵循特定的规则允许创建各种模型并不告诉设计者需要创建哪些模型,自己不断总结探索并不提供开发过程,即:什么时候该创建什么图,这个模型怎么用,UML并不给出指导,由Unified Process给出,Unified Process不是本课程重点。软件工程三要素:方法(UML)、工具(rose)、过程(Unified Process)UML是可视化语言UML是图形化语言图形便于交流(一幅图抵上千文字),理解UML的特点,UML是用于构造系统或理解系统的语言UML既支持正向工程,又支持反向工程UML是文档化语言将所构造的系统用图形方式记录下来便于新程序员跟进开发产品新版本时很有用,2.4 UML的构成,基本构造块规则公共机制,2.4.1 基本构造块,事物(元素)thing模型中最具代表性成分的抽象关系 relationship事物之间的联系图 diagram相关事物的集合,事物(Thing)P68,结构事物(structural thing)类(class)接口(interface)协作(collaboration)用例(use case)主动类(active class)构件(component)节点(node),事物(Thing),行为事物(Behavioral Thing)交互(interaction)状态机(state machine),事物(Thing),分组事物(Group Thing)包(package)注释事物(Annotational thing)注解(note),关联(association)泛化(generalization)实现(realization)依赖(dependency),关系(relationship),图(diagram),用例图(use case diagram)顺序图(sequence diagram)协作图(collaboration diagram)类图(class diagram)对象图(object diagram)活动图(activity diagram)状态图(state chart diagram)构件图(component diagram)部署图(deployment diagram),用例图(use case diagram),类图(class diagram),顺序图(sequence diagram),协作图(collaboration diagram),活动图(activity diagram),描述多个对象状态的变化,状态图(state chart diagram),仅描述一个对象,构件图(component diagram),部署图(deployment diagram),2.4.2 通用机制,规范说明(specification)元素语义的文本描述,用来描述细节,图则是可视化描述修饰(adornment)对标准的表示符号增加细节描述,2.4.2 通用机制,通用划分(common division)类和对象接口和实现,2.4.2 通用机制,扩展机制(extensibility mechanism)版型(stereotype)根据已有的元素修订的新元素。,2.4.2 通用机制,扩展机制(extensibility mechanism)标记值(tagged value)模型元素附加的命名信息,任何元素都可使用。有时候和注解起到相同作用。,2.4.2 通用机制,扩展机制(extensibility mechanism)约束(constraint)语义文字描述的语义限制,2.5 UML的体系结构,4+1视图模型,逻辑视图(Logical View),