聚合(Aggregation)关系是用来表示整体与部分关系的关联
UML类图关系(泛化、继承、实现、依赖、关联、聚合、组合)

继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java 中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;聚合跟组合其实都属于关联只不过它们是两种特殊的关联因为本是同根生所以它们之间难免会有相似之处下面让我们一起来看一下它们之间有何不同聚合与组合的概念相信不用我在此赘述大家就已经了解了下面直接上例子程老师的《大话》里举大那个大雁的例子很贴切在此我就借用一下大雁喜欢热闹害怕孤独所以它们一直过着群居的生活这样就有了雁群每一只大雁都有自己的雁群每个雁群都有好多大雁大雁与雁群的这种关系就可以称之为聚合另外每只大雁都有两只翅膀大雁与雁翅的关系就叫做组合有此可见聚合的关系明显没有组合紧密大雁不会因为它们的群主将雁群解散而无法生存而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期聚合关系图:组合关系图:从从代码上看这两种关系的区别在于:构造函数不同雁群类:[csharp]view plaincopy1.public class GooseGroup2. {3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7. {8.this.goose = goose;9. }10. }[csharp]view plaincopy1.public class GooseGroup2. {3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7. {8.this.goose = goose;9. }10. }大雁类:[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6. {7. wings=new Wings();8. }9.}[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6. {7. wings=new Wings();8. }9.}聚合关系的类里含有另一个类作为参数雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来大雁类(Goose)可以脱离雁群类而独立存在组合关系的类里含有另一个类的实例化大雁类(Goose)在实例化之前一定要先实例化翅膀类(Wings)两个类紧密耦合在一起它们有相同的生命周期翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在信息的封装性不同在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
类之间的几种关系

类之间的⼏种关系类之间的关联关系UML类图中的关系分为四种:泛化、依赖、关联、实现;关联关系⼜可以细化为聚合和组合。
⼀、泛化(Generalization)泛化是⽗类和⼦类之间的关系,⼦类继承⽗类的所有结构和⾏为。
在⼦类中可以增加新的结构和⾏为,也可以覆写⽗类的⾏为。
⼀般⽤⼀个带空⼼箭头的实线表⽰泛化关系,UML图如下:泛化对应Java中继承关系,即⼦类继承⽗类中出private修饰外的所有东西(变量、⽅法等)。
⽰例代码:public class Animal {}public class Tiger extends Animal {}Tiger继承Animal,因此Tiger与Animal之间是泛化(继承)关系。
这个很好理解。
⼆、依赖(Dependency)依赖关系是⼀种使⽤关系,特定事物的改变有可能会影响到使⽤该事物的事物,反之不成⽴。
在你想显⽰⼀个事物使⽤另⼀个事物时使⽤。
⼀般⽤⼀条指向被依赖事物的虚线表⽰,UML图如下:通常情况下,依赖关系体现在某个类的⽅法使⽤另⼀个类作为参数。
代码⽰例:public class Screwdriver { //螺丝⼑,作为⼈类的⼯具,是⽤来被⼈类使⽤的}public class Person{public void screw(Screwdriver src){ //拧螺丝,需使⽤螺丝⼑}}Person类的screw()⽅法在使⽤时就得传⼊⼀个Screwdriver类型的参数,这样Screwdriver的改变就会影响到Person,因此Person与Screwdriver之间就是依赖关系(Person依赖于Screwdriver)。
三、关联(Association)是⼀种结构关系,说明⼀个事物的对象与另⼀个事物的对象相联系。
给定有关联的两个类,可以从⼀个类的对象得到另⼀个类的对象。
关联有两元关系和多元关系。
两元关系是指⼀种⼀对⼀的关系,多元关系是⼀对多或多对⼀的关系。
UML类图关系泛化、继承、实现、依赖、关联、聚合、组合

继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承实现指的是一个class 类实现interface 接口(可以是多个)的功能;实现是类与接口之间最常 见的关系;在Java 中此类关系通过关键字implements 明确标识,在设计时一般没有争 议性;依赖可以简单的理解,就是一个类A 使用到了另一个类B ,而这种使用关系是具有偶然性的、、 临时性的、非常弱的,但是B 类的变化会影响到A ;比如某人要过河,需要借用一条船, 此时人与船之间的关系就是依赖;表现在代码层面,为类B 作为参数被类A 在某个method 方法中使用;Inte rfare指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可 以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java 中此类关系通过关键字extends 明确标识,在设计时一般没有争议性;b lnterface_BQlass_A ClaSs_B关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这 种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而 且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B 以类属性的形式出现在关联类A 中,也可能是关联类A 引用了一个类型为被关联类B 的全 局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a 的关系,此 时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象, 也可以为多个整体对象共享;比如计算机与CPU 、公司与员工的关系等;表现在代码层面, 和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a 的关系,这种关系比聚合更强, 也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生 命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联 关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向 关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区 分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别Cl3ss A 十 depend<Qlass.B classBJ ;:;;VoidClass_B的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联》依赖;聚合跟组合其实都属于关联只不过它们是两种特殊的关联因为本是同根生所以它们之间难 免会有相似之处下面让我们一起来看一下它们之间有何不同聚合与组合的概念相信不用我在此赘述大家就已经了解了下面直接上例子 程老师的《大话》里举大那个大雁的例子很贴切在此我就借用一下大雁喜欢热闹害怕孤独所 以它们一直过着群居的生活这样就有了雁群每一只大雁都有自己的雁群每个雁群都有好多 大雁大雁与雁群的这种关系就可以称之为聚合另外每只大雁都有两只翅膀大雁与雁翅的关 系就叫做组合有此可见聚合的关系明显没有组合紧密大雁不会因为它们的群主将雁群解散 而无法生存而雁翅就无法脱离大雁而单独生存一一组合关系的类具有相同的生命周期聚合关系图:构造函数不同雁群类:[csharp] view plaincopypublic class GooseGroup { public Goose goose; public GooseGroup(Goose goose) { this .goose = goose;} 10. }[csharp] view plaincopy1. 2. 3.4.5. 6.7. 8.9. 组合关系图:从从代码上看这两种关系的区别在于:1.public class GooseGroup2.{3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7.{8.this.goose = goose;9.}10.}大雁类:[csharp] view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6.{7.wings=new Wings();8.}9.}[csharp] view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6.{7.wings=new Wings();8.}9.}聚合关系的类里含有另一个类作为参数雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来大雁类(Goose)可以脱离雁群类而独立存在组合关系的类里含有另一个类的实例化大雁类(Goose)在实例化之前一定要先实例化翅膀类(Wings)两个类紧密耦合在一起它们有相同的生命周期翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在信息的封装性不同在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
名词解释 (共6小题,每题4分,共24分)

一、名词解释(共6小题,每题4分,共24分)1、多重继承答:指得是一个类可能有多个基类,是从多个类继承得来的2、聚集(Aggregation)答:聚集(Aggregation)是表达主体部分关系的关联,它用在聚合端的菱形符号来表示。
如桌子和桌腿的关系。
3、类图!答:反映类及类之间关系的视图。
4、持久对象答:可通过对象标识来访问的对象因其能够被保存在持久性存储器中,因而被称为持久性对象,其生存周期超出了应用程序的一次性运行时间。
5、关联答:描述链集合的一种结构关系,其中链是对象之间的连接;它是与实例间连接相关的两个或多个类元之间的语义关系。
-6、组成(Composition)答:组成(Composition)是关联的更强的形式,具有管理组成部分的特有责任,如组成部分的分配和释放。
如树和树叶的关系。
另外,离开整体后部分不能独立存在或者失去意义。
1、下图是某个系统的类图表示。
请指出图中用箭头标出的四处位置的含义分别是什么答:1是泛化关系,2是1对多的关联关系,3是1对1的关联关系,4是组成关系。
2、列举使用UML进行建模时用到的静态结构模型答:用例图、对象图、类图、组件图、部署图是静态结构模型、5、分析说明为什么面向对象的开发方法为软件复用技术提供了良好的环境答:面向对象方法之所以特别有利于软件复用,是由于它的主要概念及原则与软件复用的要求十分吻合。
支持复用的OO 概念与原则是:对象与类、抽象、封装、继承与一般——特殊结构、整合与整体——部分结构、粒度控制、多态性。
对象与类:OO 方法用对象描述问题域中的事务,并用类作为同种对象的抽象表示。
类是系统的基本构成单位,它符合可复用构件所应具备的那些特性:完整性、独立性、可标识性、一般性。
抽象、封装:尤其是OO 方法的对象封装性,为软件复用技术提供了良好的条件。
四、综合题(共3小题,每题10分,共30分)1、问题描述为:建立图书信息管理系统。
系统要求实现以下功能:1)用户管理功能,包括读者信息的录入、修改、更新,以及登录等。
UML图中类之间的关系_依赖,泛化,关联,聚合,组合,实现答辩

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现1.2.3.4.5.6.类与类图1 类(Class封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。
一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
3 类的属性即类的数据职责,类的操作即类的行为职责一、依赖关系(Dependence依赖关系(Dependence):假设A类的变化引起了B 类的变化,则说名B类依赖于A类。
• 依赖关系(Dependency 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
• 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
[java] view plaincopyprint?1. public class Driver2. {3. public void drive(Car car4. {5. car.move(;6. }7. ……8. }9. public class Car10. {11. public void move(12. {13. ......14. }15. ……16. }{car.move(;}……}public class Car{public void move({......}……}依赖关系有如下三种情况:1、A类是B类中的(某中方法的)局部变量;2、A类是B类方法当中的一个参数;3、A类向B类发送消息,从而影响B类发生变化;GeneralizationGeneralization A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)• 泛化关系(Generalization也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
OOAD其他习题

什么是面向对象设计面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。
从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程。
面向对象设计是模仿现实生活处理问题的思维和方式来解决软件开发问题,首先根据需要解决的问题和功能进行抽象把他看作是一个具体的事物同时给他添加相应的属性和行为服务,这样就可以像日常生活里遇到问题一样按照自己的思维方式来解决并把这些思维方式直接映射到代码里。
面向对象系统的特点封装性封装是指将一组数据和与这组数据有关的操作放在一起,形成一个能动的实体——对象。
封装是一种通过定义严格的外部接口在单独编写的模块之间减少相互依赖的技术。
一个对象要具有封装性,应具备如下几个条件:1. 具有一个清楚的边界。
2. 具有一个接口。
3. 对象内部的属性和实现代码受到封装壳的保护。
面向对象系统的封装性是一种信息隐藏技术,它使系统设计员能够清楚地表明他们所提供的服务界面,用户和应用程序员则只能看见对象所提供的服务,而看不到其中的数据和操作代码细节。
对象的封装机制的目的在于将对象的使用者和设计者分开。
除了对象的封装以外,类概念本身也具有一种封装意义,它将数据和与这个数据有关的操作集合封装在一起。
继承性继承是一个对象可以获得另一个对象的特性的机制,它支持层次分类的概念。
将被继承的对象称为基类或父类,而继承的对象称为派生类或子类。
如果父类中的某些行为不适用于子类,则只需对这些操作的实现部分加以修改和重写,以满足子类的要求。
父类可以继承其它的类,子类也可以被别的类所继承,从而形成类的继承层次关系,也称为类层次。
若一个类只有一个父类,则称为单继承,这样建立起来的类类层次形成了一个树。
当一个类有多于一个基类时,则称为多重继承。
采用继承性的语言具有如下的优点:1. 提高了软件的重用性。
2. 符合逐步求精的软件工程原则。
3. 便于实现多态性。
4. 便于系统的扩展。
5. 类层次反映了现实世界中普遍存在的一般与特殊的关系,也反映了人类认识世界的演绎方法。
软件工程中英对照术语表

abstract class 抽象类,提供一组子类共有行为的类,但它本身并不具有实例。
抽象类表示一个概念,从中派生的类代表对这一概念的实施。
Abstraction 抽象,对视图或模型的创建,其中忽略了不必要的细节,以便专注于一组特定的相关细节。
access modifier存取权限,对类、方法或属性进行访问控制的关键字。
Java 中的存取权限可以是公有、私有、保护和包装(默认)。
accessor methods存取器方法,由对象提供的、用于定义连接该对象实例变量的方法。
用来返回实例变量值的存取器方法被称为获取方法;用来为实例变量指定值的存取器方法被称为设置方法。
acceptance验收,客户接受软件产品(作为部分或完整履行合同的结果)所有权的操作。
action动作,对构成计算过程抽象的可执行语句的规范。
动作通常会导致系统状态发生变化,这是通过向一个对象发送消息或是更改链接或属性值来实现。
action sequence动作序列,解析为一系列先后发生的动作的表达式。
action state动作状态,表示不可分动作的执行状态,通常指的是调用一个操作。
activation激活,动作的执行active class主动类,表示系统中控制线程的类。
请参见主动对象。
activity活动,要求角色执行的工作单元。
active object主动对象,拥有线程并可发起控制活动的对象。
主动类的实例。
activity graph活动图,状态机的特例,用于对涉及一个或多个分类器的进程建模。
对比:状态图(statechart diagram)。
同义词:活动图(activity diagram)。
actor主角,系统之外与系统交互的某人或某事物。
actor class主角类,定义一组主角实例,其中每个主角实例相对于系统而言都担任着同样的角色。
在与用例交互时这些用例的用户所担任的一组紧密相关的角色。
主角为每个要与其通信的用例都准备了一个角色。
面向对象程序设计中的聚合与组合关系

面向对象程序设计中的聚合与组合关系面向对象程序设计(Object-Oriented Programming,OOP)是一种广泛应用的程序设计范式,它以对象作为程序的基本单元,将相关数据和方法封装在一起。
在OOP中,对象之间的关系通常可以分为聚合和组合两类。
本文将对这两种关系进行详细讲解。
一、聚合(Aggregation)聚合是指一个对象包含另一个对象,且被包含对象可以独立存在。
例如,一个图书馆包含多个书籍,但是这些书籍可以独立存在,也可以属于其他图书馆。
在UML类图中,聚合关系通常用空心的菱形箭头表示。
聚合关系的特点是:1. 被聚合对象与聚合对象之间是“整体-部分”的关系。
2. 被聚合对象可以独立存在,即该对象的生命周期不会受到聚合对象的生命周期的影响。
3. 一个聚合对象可以包含多个被聚合对象,但一个被聚合对象只能属于一个聚合对象。
4. 聚合关系通常是动态变化的,即一个对象可以在多个聚合对象之间移动。
例如,下面是一个简单的图书馆类:```javapublic class Library {private String name;private List<Book> books;public Library(String name) { = name;books = new ArrayList<>();}public void addBook(Book book) {books.add(book);}public void removeBook(Book book) {books.remove(book);}}```这个类中包含一个书籍列表,即聚合了多个Book对象。
但是,每个书籍可以独立存在,不受图书馆的限制。
二、组合(Composition)组合是指一个对象包含另一个对象,且被包含对象不能独立存在,它们是“整体-部分”的关系。
例如,一个汽车包含多个轮子,但是一个轮子不能独立存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 包可以拥有其他的元素,这些元素可以是 包可以拥有其他的元素, 接口、组件、节点、协作、用例和图, 类、接口、组件、节点、协作、用例和图, 甚至可以是其他包。拥有是一种组成关系, 甚至可以是其他包。拥有是一种组成关系, 这意味着模型元素被声明的包中, 这意味着模型元素被声明的包中,而且一 个模型元素不能被一个以上的包所拥有。 个模型元素不能被一个以上的包所拥有。 如果包被撤销,其中的元素也要被撤销。 如果包被撤销,其中的元素也要被撤销。 在UML中,最有用的和强调最多的启发性 中 原则就是依赖。。 原则就是依赖。。
• Information包图:这部分类图是系统的信 包图: 包图 息显示部分,包括书籍信息, 息显示部分,包括书籍信息,读者信息的 显示,查询各种信息的对话框等界面。 显示,查询各种信息的对话框等界面。 • Maintenance包图:这部分类图是系统运 包图: 包图 行界面的维护部分,包括读者信息, 行界面的维护部分,包括读者信息,书籍 信息的修改,更新和查询的内容。 信息的修改,更新和查询的内容。
•
如果构件属于一个包, 如果构件属于一个包,可以在构件名 称前加上包名, 称前加上包名,还可以另外一个隔开的区 域里绘出构件的操作。 域里绘出构件的操作。 接口可以用一个小圆圈来代表, 接口可以用一个小圆圈来代表,用实 线和构件连接起来。这表示的实现关系。 线和构件连接起来。这表示的实现关系。 另外还可在图中表示出依赖关系——构件 另外还可在图中表示出依赖关系 构件 和它用来访问其他构件的接口之间的关系。 和它用来访问其他构件的接口之间的关系。 用一个“球窝”符号。其中“ 用一个“球窝”符号。其中“球”表示提 供的接口, 代表了所需要的接口。 供的接口,“窝”代表了所需要的接口。
构件图和部署图
构件图和部署图显示系统实现时的 一些特性, 一些特性,包括源代码的静态结构和运 行时刻的实现结构。 行时刻的实现结构。构件图显示代码本 身的结构, 身的结构,部署图显示系统运行时刻的 结构。 结构。 • 构件图 构件图(Component diagram)显示 构件图 显示 软件构件之间的依赖关系。 软件构件之间的依赖关系。在构件图中 通常包含了3种元素 构件、 种元素: 通常包含了 种元素:构件、接口和依赖 关系。 关系。 •
• 对象图 • 对象图(Object diagram )描述的是参与 对象图 描述的是参与 交互的各个对象在交互过程中某一时刻 的状态。 的状态。对象图可以被看作是类图在某 时刻的实例。 时刻的实例。 在UML中,对象图使用的是与类图相同 中 的符号和关系。 的符号和关系。
• 包图 • 一个最古老的软件方法问题是:怎样将 一个最古老的软件方法问题是: 大系统拆分成小系统。 大系统拆分成小系统。解决这个问题的 一个思路是将许多类进行分组, 一个思路是将许多类进行分组,形成一 个高内聚、低耦合的类的集合。 个高内聚、低耦合的类的集合。UML中 中 这种分组机制叫包(Package) ,如下图。 如下图。 这种分组机制叫包
• 部署图可以对系统的硬件平台建模,还可 部署图可以对系统的硬件平台建模, 以描述影响系统运行和软件配置的硬件性 如图6-32,是一个网络系统中有线猫 能。如图 , 和无线路由之间的部署图。 和无线路由之间的部署图。
• 6.2.4 UML的动态建模机制 的动态建模机制 • 对于一个系统的各个对象之间如何进行相 互作用来实现系统功能就是这个系统中动 态的行为。 态的行为。对于动态行为的描述通过动态 建模来完成。 的动态建模包括状态图, 建模来完成。UML的动态建模包括状态图, 的动态建模包括状态图 顺序图,协作图,活动图。 顺序图,协作图,活动图。
类的接口和软件实体(构件) 类的接口和软件实体(构件)的接 口概念是相同的。构件实现一些接口, 口概念是相同的。构件实现一些接口, 并使用另一些接口。 并使用另一些接口。如果构件间的依赖 关系与接口有关, 关系与接口有关,那么可以被具有同样 接口的其他构件所替代。 接口的其他构件所替代。构件图描述软 件构件以及它们之间的依赖关系, 件构件以及它们之间的依赖关系,从而 便于人们分析和发现当修改某个构件时 可能对那些构件产生影响, 可能对那些构件产生影响,以便对它们 做相应的修改或更新。 做相应的修改或更新。构件可以是源代 码构件、二进制目标码构件、 码构件、二进制目标码构件、可执行构 件或文档构件。 件或文档构件。
包图主要显示类的包以及这些包之间的 依赖关系。 依赖关系。有时还显示包和包之间的继 承关系和组成关系。 承关系和组成关系。包间的依赖用虚线 表示。 表示。
UI Package
Function
BuinessPackage
MainWindow
ReturnItemframe
BookTitle
BookLoan
do/Bootup
Working
Shutting Down
Shutor mouse movement
Screensaving
• 内部转换 在内部转换中可以包含进入或者走出 此状态应该执行的活动或动作, 此状态应该执行的活动或动作,它们将响应 对象所接收到的事件, 对象所接收到的事件,但是不改变对象的状 态。 • 子状态 一个状态可以进一步地细化为多个子 状态,将可以进一步细化的状态称作组合状 状态, 态。或关系说明在某一时刻仅可到达一个子 状态。 状态。在组合状态的嵌套状态图部分包含子 状态有两种情况, 状态有两种情况,即顺序子状态和并发子状 态。
状态图是由状态和迁移组成的图, 状态图是由状态和迁移组成的图,描述类 实例对接受事件的响应。 实例对接受事件的响应。状态描述对象生 命周期的一段时间, 命周期的一段时间,可以是等待其它事件 时所处的时间, 时所处的时间,或是执行某一活动时所处 的时间。 的时间。
• 状态 • 状态由一个带圆角的矩形表示,状态图的 状态由一个带圆角的矩形表示, 图标可分为3部分 名称、活动,如图6-33、 部分: 图标可分为 部分:名称、活动,如图 、 6-34所示。 所示。 所示
构件图可以对实现环境中的真实软 件建模; 件建模;通过依赖关系展示软件的构造 情况;在对系统进行改变或升级之前, 情况;在对系统进行改变或升级之前, 提供对现有系统的精确描述; 提供对现有系统的精确描述;有了构件 图,不用阅读所有的代码就可以发现实 现中的瓶颈问题。 现中的瓶颈问题。构件是定义了良好接 口的物理实现单元, 口的物理实现单元,是系统中可替换的 物理部分。构件图中的接口、 物理部分。构件图中的接口、依赖关系 与类图中的相同。图所示为UML2.0中, 与类图中的相同。图所示为 中 表示构件的一种图标, 表示构件的一种图标,其是顶部带有关 键字《 键字《component》的矩形。 》的矩形。
图6-37中显示了使用计算机时如果不打 中显示了使用计算机时如果不打 字或不碰鼠标, 字或不碰鼠标,则过一段时间屏幕保护 程序就会运行, 程序就会运行,它可以保护显示器屏幕 免受损坏。图中的方括号是UML表示 免受损坏。图中的方括号是 表示 “if”的方式。 ”的方式。
Initializing Turn PC on
• 图6-24所示,咖啡桌是一个组合体,它的 所示, 所示 咖啡桌是一个组合体, 部分有桌面和桌腿。 部分有桌面和桌腿。
• 实现 实现(Realization) • 实现是规格说明和其实现之间的关系,它 实现是规格说明和其实现之间的关系, 将一种模型元素与另一种模型元素连接起 比如类和接口。 来,比如类和接口。
初始状态只能作为转换的源, 初始状态只能作为转换的源,而不能作为 转换的目标。 转换的目标。初始状态在一个状态图中只 允许有一个,用一个实心的圆表示, 允许有一个,用一个实心的圆表示,如图 6-35所示。 所示。 所示
• 终止状态 • 终止状态是模型元素的最后状态,是一个 终止状态是模型元素的最后状态, 状态图的终止点。 状态图的终止点。终止状态只能作为转换 的目标,而不能作为转换的源。 的目标,而不能作为转换的源。终止状态 与初始状态不同的是,在一个状态图中, 与初始状态不同的是,在一个状态图中, 终止状态可以有多个, 终止状态可以有多个,它用一个含有实心 圆的空心圆表示,如图6-36所示。 所示。 圆的空心圆表示,如图 所示
• 聚合 • 聚合(Aggregation)关系是用来表示整体 聚合( ) 与部分关系的关联。在聚集中, 与部分关系的关联。在聚集中,部分类可 以没有整体类而存在, 以没有整体类而存在,但是当它们聚集成 一个整体,就用来组成该整体类。 一个整体,就用来组成该整体类。在UML 中,聚合关系用带空心的菱形头的实线表 其头部指向整体。 示,其头部指向整体。
如图6-30所示,构件A与构件 之间通过 所示,构件 与构件 与构件B之间通过 如图 所示 接口连接。 接口连接。
• 部署图 • 部署图(Deployment Diagram)描述系 部署图( ) 统硬件的物理拓扑结构以及在此结构上执 行的软件。 行的软件。部署图可以显示计算结点的拓 扑结构和通信路径、 扑结构和通信路径、节点上运行的软件构 软件构件包含的逻辑单元(对象 对象、 等 件、软件构件包含的逻辑单元 对象、类)等。 部署图常用于帮助理解分布式系统。 部署图常用于帮助理解分布式系统。
• 转换 • 转换用带箭头的直线表示,一端连接源 转换用带箭头的直线表示, 状态,即转出状态,一端连接目标状态, 状态,即转出状态,一端连接目标状态, 即转入状态。 即转入状态。转换可以标注与此转换相 关的选项,如事件、动作和监护条件。 关的选项,如事件、动作和监护条件。 • 初始状态 • 每个状态图都应该有一个初始状态用于 代表状态图的起始位置。 代表状态图的起始位置。
1)顺序子状态 顺序子状态 如果一个组成状态的自状态对 应的对象在其生命期内的任何时刻 都只能处于一个子状态, 都只能处于一个子状态,即多个子 状态之间是互斥的,不能同时存在。 状态之间是互斥的,不能同时存在。
• 从图 从图6-38中可以看到一个物体移动,其 中可以看到一个物体移动, 中可以看到一个物体移动 向前” 向后” “向前”和“向后”运动两个状态必须在 前一个状态完成之后才能进行下一个状态, 前一个状态完成之后才能进行下一个状态, 不可能同时进行。 不可能同时进行。