1、UML与面向对象技术,软件学院:宋 波 20112012学年第1学期 软件工程专业(2009级全日制本科),参考书: UML基础、案例与应用,Joseph著,李虎等译. 人民邮电出版社,2006年7月 UML与Rational Rose 2002从入门到精通,Wendy,Michael B,丘忡潘等译.,电子工业出版社,2004年9月 Practical Object-Oriented Design with UML,美 Mary Priestley著,清华大学出版社,2005年5月,课程成绩 期末考试:50% 作业+考勤+提问:10% 实验+提问:10% 期中考试:30%,本课程学习内容:,
2、统一建模语言UML Rational Rose:UML建模环境 UML与面向对象程序设计,第 1 章 UML概 述,授课教师:宋 波 时间、地点:周一3、4(106)、周二1、2节(103)、周五3、4节(单周103); 周一1、2节(107);周二5、6节(102)、周五1、2节(单周106),授课内容,UML的历史 UML建模要素 UML标准视图 面向对象领域中的基本概念 UML图与OOP的关系 UML应用领域 UML图与软件开发阶段,学习目标,了解UML的发展历史 掌握UML建模要素与标准视图 掌握UML图与OOP的关系 了解UML应用领域 了解UML图与软件开发阶段,教学重点: UML
3、建模要素与标准视图 教学难点: UML图与OOP的关系,教学设计:,了解知识,掌握知识,了解知识,UML与OOP的关系,重点掌握,什么是UML?,UML(Unified Modeling Language,统一建模语言): 是一种可视化的建模语言,它能够让系统构造者用标准的、易于理解的方式建立起能够表达他们设计思想的系统蓝图,并且提供一种机制,以便于不同的人之间有效的共享和交流设计成果。,UML有什么用处?,一个项目之所以成功,是因为功能的提出者(客户)和实现功能的开发人员(程序员)之间有一座可以很好沟通的桥梁。 UML借助一套图形和符号,可以来完成这座桥梁的作用。,UML不是一门程序设计语言
4、。但可以使用代码生成器工具将UML模型转换为多种程序设计语言代码,或使用反向生成器工具将程序源代码转换为UML。,UML不是一种可用于定理证明的高度形式化的语言,这样的语言有很多种,但它们通用性较差,不易理解和使用。而UML是一种通用建模语言。,什么是建模?,建模是对现实的简化。 就是把复杂的系统变成小的系统,采用“各个击破”的原则逐一解决。,为什么要建模?,建立大厦和建立茅草屋的区别是建设茅草屋不需要设计; 要生产合格的软件就要有一套关于体系结构、过程和工具的规范。,建模的目标,模型帮助我们按照实际情况,或按照我们所需要的样式对系统进行可视化。 模型允许详细说明系统的结构和行为。 模型给出一
5、个知道我们构造系统的模板。 模型对我们的决策进行文档化。,输出“Hello, World”的Java Applet程序。import java.awt.Graphics; class HelloWorld extends java.applet.Applet public void paint(Graphics g) g.drawString(“Hello, World!“,10,10); ,HelloWorld类图: 对HelloWorld的关键抽象,HelloWorld类图:与HelloWorld直接相关的类,依赖关系,HelloWorld类的继承层次,HelloWorld类依赖的包,顺序
6、图,问题?Java Application 与Applet的区别?,HelloWord的构件图,Hello.html - -,什么是UML?,UML(Unified Modeling Langeage) 是一种可视化的建模语言,能让设计者用标准的、易于理解的方式表达出系统的实现过程、实现用户与设计者之间的交流。,1.1 UML的历史,1.2 UML建模要素,UML建模要素包括: 基本建模元素 关系元素 图(图形表示) 3大类基本建模元素,1基本建模元素,结构建模元素: 反映事物和描述性实体,包括类、接口、协作、用例、主动类、构件和节点等元素。,类,类名,属性,操作,接口:,String,isE
7、qual(String) : Boolean Hash() : Integer ,Hashable,Comparable,接口标记,角色:,用例: 是一组动作序列的描述,系统执行这些动作后将产生一个对特定参与者可以观察且有价值的结果; 在图形上,用例用一个仅包含其名字的实线椭圆表示。,协作: 定义了一个交互,由一组共同工作以提供某协作行为的角色和其它元素构成的一个实体; 一个给定的类可以参与几个协作; 协作用一个仅包含名字的虚线椭圆表示;例如,订单管理。 协作与对应的用例存在着一种实现关系。,求一元二次方程根,求一元二次方程根,主动类: 是其对象至少拥有一个进程或线程的类,因此它能够启动控制活
8、动。 构件: 是系统中物理的、可替代的部件;一个组件可能是源代码、可执行程序或动态库。,节点: 是在运行时存在的物理元素。代表一种可计算的资源,具有一定的记忆能力和处理能力。,行为建模元素: 反映事物之间的交互过程和状态变化,这类建模元素有交互图和状态图。,交互: 由在特定语境中共同完成一定任务的一组对象之间交换的消息组成;一个对象群体的行为或单个操作的行为都可用一个交互来描述; UML中的交互用顺序图和协作图实现。,状态机: 描述了一个对象或一个交互在生命周期响应事件所经历的状态序列,单个类或者一组类之间协作的行为可以用状态机来描述。,组织建模元素描述通过一组模型元素所反映的模型、子系统、框
9、架等的组织,包括包、模型、子系统、框架等元素。, Finances, Credits, Accounts, BankInterface,注释建模元素用来在建模过程中对模型进行注释和描述性说明。,Represents an incorporated entity,Company,注释,2关系元素,关系元素反映了模型元素之间的关系: 关联:是一种结构关系,描述了一组链,链是用于链接对象的。,关联示例:,Manages,Job,boss,worker,employee,employer,1*,*,*,01,Company,Person,角色名,重数,关联名称,关联类,二元关联,自关联,泛化:是一种一
10、般/特殊关系。 继承就是一种泛化关系。,Tree,Oak,Elm,Birch,孩子,双亲,Person,Student,Graduate,祖先,依赖:是两个结构之间的语义关系,其中一个结构的变化会影响到另一个结构的语义。, Application Server, DataBase,依赖类型,实现:是泛化和依赖关系的结合,在接口和实现它们的类或构件之间用到这种关系。,String,isEqual(String) : Boolean Hash() : Integer ,Comparable, Comparable,isEqual(String) : Boolean Hash() : Integer
11、 ,实现,特殊的实现标记,聚集(Aggregation)与 组成(Composition)。,Polygon,Point,1,3*,points,Contains,Polygon,Window,Slider,1,2,Scrollbar,Header,1,Title,1,1,Panel,1,Body,聚集,组成,约束用来表示各种限制,如关联路径上的限制,和属性特征检测(存在、所有)。,Person,Committee,Member-of,约束,Chair-of,subset,课堂练习?,什么是UML? 结构建模元素包括哪些? 行为建模元素包括哪些? 组织建模元素包括哪些? 关系元素包括哪些?,课
12、堂练习?,什么是UML? 是一种可视化的建模语言,能让设计者用标准的、易于理解的方式表达出系统的实现过程、实现用户与设计者之间的交流。,结构建模元素包括哪些? 反映事物和描述性实体,包括类、接口、协作、用例、主动类、构件和节点等元素。 行为建模元素包括哪些? 反映事物之间的交互过程和状态变化,包括交互图和状态图。,组织建模元素包括哪些? 包、模型、子系统、框架等。 关系元素包括哪些? 关联、泛化、依赖、实现、聚集、组成、约束、,3UML图,用例图(Use Case Diagram) 类图(Class Diagram) 对象图(Object Diagram) 顺序图(Sequence Diagr
13、am) 协作图(Collaboration Diagram) 状态图(Status Diagram) 活动图(Activating Diagram) 组件图(Component Diagram) 部署图(Deployment Diagram)共9种图。,4图形表示,UML定义了两类8种图形表示软件模型: 静态结构图包括类图、对象图、组件图、部署图。 动态行为图包括用例图、交互图(顺序图和协作图)、状态图、活动图。,1、用例图,2、顺序图,3、协作图,4、类图,状态1: 建立一元二次方程(a,b,c系数已确定,x1,x2不确定),状态2: 计算一元二次方程的判别式,求根(a,b,c,x1,x2已
14、确定)。,转移的描述,状态3:a = 0或a,b,c输入异常。,6、活动图,1.3 UML标准视图,视图是表达系统某一方面特征的UML建模组件的子集。 标准建模语言UML的重要内容可以由五类视图(共9种图形)来定义。,1. 用例视图(Use case View): 强调从用户角度看到的或需要的系统功能,并指出各功能的操作者。 在UML中,用例视图的静态方面用用例图表现;动态方面用协作图、状态图和活动图表现。用例视图是中心,因为它的内容决定了其他视图的设计。,2. 逻辑视图: 用途:描述用例视图中提出的系统功能的实现。 逻辑视图既描述系统的静态结构,也描述系统内部的动态协作关系。 使用者:主要是
15、设计人员和开发人员。 组成: 静态结构在类图和对象图中进行描述(描述了类、对象、以及两者之间的关系); 动态模型在状态图、顺序图、协作图以及活动图中进行描述。,进程视图: 用途:考虑资源的有效利用、代码的并行执行,以及系统环境中异步事件的处理; 使用者:主要是开发人员和系统集成人员。; 组成:状态图、协作图和活动图。,4组件视图,用途:描述系统的实现模块以及它们之间的依赖关系; 组成:组件图; 使用者:主要是开发人员。静态方面由组件图描述,动态方面由协作图、状态图、活动图描述。,5部署视图,用途:显示系统的物理部署,并描述位于节点实例上的运行组件实例的部署情况; 组成:部署图; 使用者:开发人
16、员、系统集成人员和测试人员。 部署视图的静态内容由部署图描述,动态方面由协作图、状态图、活动图描述。,视图之间的关系,进程视图,总 结:,UML中静态模型包括哪些图? 类图:系统中各种类之间的静态结构; 对象图:类图的一个实例; 组件图:描述代码组件之间的依赖关系; 部署图:运行时处理节点和组件的部署。,总 结:,UML中动态模型包括哪些图? 用例图:系统的执行者与用例之间联系; 顺序图:对象之间(时间上)协作关系; 协作图:对象之间(消息收发)协作关系; 状态图、活动图:对类描述的补充。,1.4 面向对象领域中的基本概念,如何理解面向对象思维方式? 一些面向对象的概念,面向对象方法: 是一种
17、运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。 面向对象=对象 + 类 + 继承 + 消息通信 面向对象的主要特征: 封装性(Encapsulation) 继承性(Inheritance) 多态性(Polymorphism),对象(object),无论是具体的还是抽象的,遍布于我们的周围,它们组成了整个世界; 程序通常也要模拟现实世界中的对象;,首先最重要的,对象是一个类(种类)的实例。例如你和我都是Person这个类的实例,那么其中,你和我就是对象,而Person则是一个类。 对象是系统中用来描述客观事务的一个实体,具有自身的结构(Structure),也就
18、是说,它具有属性(特性)和行为。对象的行为包括它所能执行的操作。属性和操作合起来被称为特征。,如何理解面向对象思维方式?,类(Class): 是具有相同属性和方法的一组对象的集合,为这类对象提供统一的对象描述。 同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值相同。,在面向对象世界里,类除了起到分类的作用外,类还是用来创建对象的模板。 面向对象的目标是开发出能够反映现实世界某个特定片段的软件(或者说是“建模”)。 你考虑到的属性和行为越多,你所建立的模型就越符合实际。,对象、实体与类,对象,实体,类,抽象数据类,计算机世界,现实世界,计算机逻 辑的实现,影射,抽
19、象,实 例 化,抽 象,概念世界,关掉计算机时,对所有的类和对象会有影响吗? 对“对象”有影响: 丢失内存中的所有对象及包含的信息; 对“类”没有影响: 类已经编程并保存在磁盘上了; 结论:类是持久单元,对象是变化的运行单元。,问题?,对象之间如何协同工作? 通过相互发送消息来协同工作。 OO程序是如何进行初始化的? 从main( )方法开始执行,在程序启动时获得控制; 自动创建一个类的对象,从其实例开始整个程序的执行。,问题?,1.5 UML图与OOP的关系,类图和状态图 UML定义了类图,用于完成对类的静态结构和空间位置的刻画。 UML设计了状态图用于描述类的生命周期,这是对于一个类的动态
20、描述。,2活动图,在类图中只有方法的声明,没有方法实现方式的信息。因此,需要描述方法如何实现,即对于算法的描述。而UML定义了活动图完成这个工作。,3顺序图,为了描述类之间是如何使用消息进行合作的,UML定义了顺序图以及协作图。,4对象图,在具体应用中,一般不绘制完整的对象图,而是更多的使用顺序图或协作图描述对象之间的消息合作。,需求 分析,用例图,设计,对一个类进行 静态描述,类 的结构和空间 关系,对类的 生存周 期描述,类图(对象图),状态图,类的所有信息描述,深入类内部的方法(算法)描述,活动图,对类之间的消息协作描述,顺序图或协作图,开发,开发 完成 后软 件系 统的 形态,组件图,
21、部署,运行 软件 系统,部署图,UML图与软件开发阶段,总结:OOP建模步骤,需求分析、系统分析、系统设计、系统实现、系统测试。,需求分析: 用户的需求; 用例图可以确定外部的角色以及它们所需要的系统功能。 系统分析: 用UML逻辑视图和动态视图描述; 只为问题域建模,不定义系统的解决方案的细节。,系统设计: 把分析阶段的成果扩展成技术解决方案,加入类提供技术基础结构、用户接口、数据库等; 系统实现: 把设计阶段的类转换成OOP语言代码 系统测试 单元测试、集成测试、系统测试等,本章小结,UML是一种建模语言而不是一种方法。原理上,任何方法都由建模语言和过程两部分构成。 建模语言提供方法中用于表示设计的符号(图形符号); 建模过程则描述了进行设计需要遵循的步骤。 UML统一了面向对象建模的基本概念、术语及图形符号,为人们建立了便于交流的共同语言。 UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具。,