关系是事物之间的联系。类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。
依赖是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定)。在UML中表示为一条指向被依赖事物的虚线。依赖有很多构造型,不过一般不需要使用,以免搞得过份复杂。其实另外3种关系泛化、关联和实现都可以算作是某种依赖关系,只不过它们有比较强的语义和重要的作用,所以划分出来。一般对类关系建模的时候,先对泛化、关联和实现建模,剩下的关系都可以看作依赖了。
对应到代码中,依赖关系可能有很多种形式,例如
public class A
{
public B getB(C c, D d)
{
E e = new E();
B b = new B(c, d, e);
}
}
这里类A就依赖于类B(方法返回类)、C和D(参数类)、E(方法内变量的类),因为这几个类的变化都有可能影响到类A
泛化是一般事物(称为超类或父类)和较特殊的事务(称为子类)之间的关系,对类来说一般就是继承了,如:public Class A extends B。一般用一个带空心箭头的实线表示泛化关系。
关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。
一般把关联画为连接相同或者不同的类一条实线。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。
关联在代码中一般表示为属性,例如
public class A
{
private B b;
}
可以认为有一个A指向B的关联。
如果B也关联到A,那么它们就是双向的关联。
有的时候B不是A的属性,但是也可以有关联关系,例如:
public class A
{
public B[] getBs()
{...}
}
方法getBs可能去查数据库,找到A和B之间的关联关系。
两个类之间的简单关联表示了两个同等地位类之间的结构关系。聚合也是一种关联关系,与简单关联不同的是,它描述的是一个整体和组成部分的关系,即“has-a”关系,意思是整体对象拥有部分对象,例如学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。聚合用带一个空心菱形(整体的一端)的实线表示。
public Class Person
{...}
public Class School
{
private ArrayList students;
private void addStudent(Person person)
{
students.add(person);
}
}
组合则是比聚合更强的关联形式。组合是指带有很强的拥有有关系且整体与部分的生命周期一致的聚合关联形式。例如Windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超
出组合的生命周期。组合是用带实心菱形的实线来表示。
public Class Menu
{...}
public Class Window
{
private Menu menu;
}
组合和聚合在代码实现上的主要差别在于生命周期的实现上,组成需要负责其部分的创建和销毁。
public Class School
{
public School()
{...}//不需要创建任何Person对象,其Students都是已有的Person对象
public void destroy()
{...}//只需要关掉School对象和断开它与自己所有的Person对象的关联即可,Person对象是不会销毁的
}
public Class Window
{
private Menu menu;
public Window()
{
menu = new Menu();
}//可以在这时候创建Menu对象,也可以在之后创建
public void destory()
{
menu.destory();
}//必须同时或者在这之前销毁关联的Menu对象
}
另外有一个差别是组合中的一个对象在同一时刻只能属于一个组成对象,而聚合的一个部分对象可以被多个整体对象聚合,例如一个学生可以在多个学校就读,而一个菜单在同一时刻只能是某个窗口内的对象。
实现关系就比较简单了,指的是一个类元描述了另一个类元保证实现的契约。对类来说,就是一个类实现了一个接口
public interface A
{
public void methodA();
}
public class B implements A
{
public void methodA()
{...}
...
}
一般在面对对象的系统中,尽可能的使用接口来减少类之间的耦合。因为接口没有实现,所以依赖于接口就不会依赖于某种具体实现,例如jdbc里的Connection和ResultSet都是接口,不同数据库厂商的实现可以不一样。
总结一下
1)依赖关系:关系对象出现在局部变量或者方法的参数里,或者关系类的静态方法被调用
2)关联关系:关系对象出现在实例变量中
3)聚合关系:关系对象出现在实例变量中
4)合成关系:关系对象出现在实例变量中
5)Generalization: extends
6)实现: implements
聚合是这样的:学生与所选课程之间的关系就是组合,他们之间在感念上没有必然关系,删掉一门课程,不会影响到学生
组合是这样的:订单和订单条目的关系就是聚合,他们的关系很紧密,删掉一个订单,订单条目也就没有意义了
组合是聚合的一种形式
分享到:
相关推荐
本文将深入探讨UML类图中的类间关系,特别关注纵向关系——继承。 继承是面向对象编程(OOP)的核心概念之一,它在UML类图中通过一个箭头表示,箭头从子类指向父类。这种关系允许子类(也称为派生类或子类型)继承...
在UML中,包含关系和扩展关系是两种关键的结构关系,它们帮助我们理解和描述系统的组件如何相互作用和组织。这些概念在软件设计师的考试中是重要的考察点,因此理解它们的含义和应用至关重要。 首先,我们来看包含...
在UML类图中,类与类之间的关系对于理解系统的结构至关重要。本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B...
因此,对UML类图中类之间的依赖关系进行研究具有重要意义。 #### 类之间依赖关系的分类 为了更细致地研究类间的依赖关系,可以将其分为两大类:数据依赖和方法依赖。 - **数据依赖**:指的是一个类中的数据成员被...
在UML(统一建模语言)中,类图是一种重要的模型表示工具,它用来描绘系统中的类、接口以及它们之间的关系。类图中的类扮演着核心角色,它们定义了系统的结构和行为。类可以分为抽象类和具体类,以及主动类和非主动...
UML类图是UML中的一种重要组成部分,用于描述类和对象之间的关系。 1.UML类图的基本组成部分 UML类图由三个部分组成:类名、类特性和类操作。类名表示类的名称,如果是抽象类就用斜体显示。类特性是类的字段和属性...
UML中的继承关系是面向对象编程的一个核心概念,它反映了类之间的"is-a"关系。在这个场景中,我们将深入探讨UML中的继承关系及其在Java编程中的应用。 在UML类图中,继承关系通常通过一个带有空心三角形箭头的直线...
在这个"uml 实验类的关系"中,我们将深入探讨类之间的三种主要关系:关联、泛化和依赖。 1. **关联关系**:关联是描述类之间的一种结构关系,它表示一个类的对象与另一个类的对象之间存在某种联系。在图书管理系统...
在组合关系中,整体与部分是不可分离的,整体的生命周期结束就意味着部分的生命周期也结束。例如,大脑(Brain类)与人(Human类)之间的关系,没有大脑的人是无法生存的。组合关系在代码中的表现形式与关联和聚合...
今天,我们将探讨UML类关系中的四种基本关系:依赖、关联、聚合和组合。 依赖(Dependency) 依赖关系是指一个类使用另一个类的对象或服务的关系。依赖关系是一种弱关系,表示一个类需要另一个类的支持,但不拥有...
类之间的关系是UML中核心的概念,它们反映了类之间的相互作用和依赖。本文将详细探讨四种主要的UML类关系——依赖、泛化、关联和实现,并通过Java代码示例来阐述这些关系的实现。 1. **依赖(Dependency)**:依赖...
UML类图是UML中的核心概念之一,它提供了一种可视化的方式来描绘系统的静态结构,包括类、接口、对象以及它们之间的关系。在这个文档中,我们将深入探讨UML类图、类与类间的关系,并结合提供的文档资源进行详细的...
在UML中,类图是一种重要的图形,用来展示系统中类、接口、协作以及它们之间的关系。本文将深入探讨UML类图中的几种关键关系:关联、组合、聚合、依赖,这些关系构成了类之间互动的基础框架。 #### 关联关系...
类图是UML中的核心概念,它描述了系统中类的结构和它们之间的关系。在理解和应用UML类图时,了解类以及它们之间的各种关系至关重要。 ### 类的定义 类是对象的抽象,包含三个基本要素:属性(Attributes)、操作...
#### 类之间关系的实现技术 在UML类图中,类之间的关系根据紧密程度的不同可以分为继承、关联、聚集和组合。接下来,我们分别讨论这些关系在将类映射成表的过程中是如何实现的。 ##### 继承的实现 - **策略一**:...
例如,在“狗”与“动物”的关系中,“狗”类继承自“动物”类,意味着“狗”拥有“动物”类的所有属性和方法,并可以添加自己的特有属性和方法。 在代码实现上,如示例所示,`Tiger`类继承自`Animal`类,这可以...
《UML在构建客户关系管理系统中的应用》 UML(统一建模语言)是一种标准化的图形建模语言,用于软件工程领域,特别是系统分析和设计阶段。在这个课设项目中,“uml客户关系管理系统”深入展示了如何运用UML来构建一...
关联是UML中最常见的一种关系,表示两个或多个类之间的结构联系。关联可以是单向或双向的,也可以有多个角色,并且可以指定关联的多重性,即一个类实例可以与多少个另一个类的实例关联。例如,员工与部门之间的关联...
类框图是一种静态模型,用于描述系统中的类、对象及其之间的关系。类框图基本关系及符号是 UML 中的一些基本概念,包括类、包、接口、关联、依赖、聚合、组合、泛化等。 1. 基本元素符号: 类(Classes)是类框图...