`

UML中类之间的关系及其Java代码例子<转>

    博客分类:
  • Java
阅读更多
关系是事物之间的联系。类之间有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中继承的关系

    总结起来,UML中的继承关系是表达类之间继承关系的重要工具,它在Java编程中起到了代码复用和组织系统结构的关键作用。通过理解并合理运用继承,开发者可以创建出更加灵活、可维护的软件系统。在实际项目中,大家...

    UML for Java Programmers

    每个例子都与Java编程紧密相关,使读者能够更好地将UML应用于实际开发中。 通过阅读《UML for Java Programmers》,你将能够: 1. 理解UML的基本元素和符号,如类、接口、关联、泛化等。 2. 掌握UML的七种主要图表...

    UML_Java_XML.rar_uml to xml_xml

    4. **自动化代码生成**:讲解如何利用XML表示的UML模型,通过XSLT(可扩展样式表语言转换)或Java代码生成器来自动化生成Java源代码。 5. **案例研究**:可能包含实际的UML模型例子,展示从模型到XML的转换过程,并...

    抽象工厂源代码,包括基础源码,以及相应的uml例图等有效信息JAVA。.zip

    在这个例子中,类图可能展示了抽象工厂、具体工厂、抽象产品和具体产品之间的继承和关联关系。 在实际开发中,抽象工厂模式常用于框架和库的构建,特别是那些需要跨平台或需要与多种相关产品进行交互的系统。它有助...

    单例的例子与UML图

    单例模式是软件设计模式中的一种经典模式,它保证了类在系统中只有一个实例存在,同时提供了全局访问点。这种模式常用于系统配置、数据库连接、缓存管理等场景,以减少资源消耗并确保一致性。 单例模式的核心在于...

    UML的一些教程

    本教程旨在介绍统一建模语言(UML)的基本概念及其应用,并通过详细的图解来帮助读者理解UML中各类图表的作用以及它们之间的相互关系。通过本教程的学习,读者将能够更好地理解和创建UML模型图。 ##### 1.2 UML概述...

    使用RationalRose进行UML可视化建模

    包是组织模型元素的方式,类图则表示系统中的类、接口和它们之间的关系。在系统中,可以创建包含“课程”、“学生”、“教师”等类的类图,并定义它们的属性和操作。 **五、用例实现图(Use Case Realization ...

    uml概念、历史简介

    - **双向支持**:UML支持正向工程(从模型到代码)和反向工程(从代码到模型)。 - **文档化**:UML可用于记录系统,便于新人快速了解项目。 #### UML的主要图表类型 - **结构建模**:类图、对象图。 - **行为建模...

    Java数据结构和算法中文第二版

    根据提供的文件信息,我们可以推断出这份材料实际上并不是关于“Java数据结构和算法”的书籍,而是有关UML(Unified Modeling Language,统一建模语言)在Java编程中的应用指南。因此,接下来将根据这个主题来展开...

    UML introduction3-类图

    在这个例子中,`Book`类与`Author`类和`Publisher`类之间存在关联关系。每个`Book`实例都有一个对应的`Author`实例和一个`Publisher`实例。此外,我们还可以为`Author`和`Publisher`类添加更多的细节,以更好地描述...

    uml和模式应用

    《UML for Java Programmers.pdf》这本书很可能深入讲解了如何在Java编程中应用UML,并结合具体的例子介绍了设计模式的使用方法。 总的来说,理解和熟练运用UML及设计模式是提高软件开发质量和效率的关键。通过学习...

    java课件精讲

    虽然给定内容没有完全展示UML类图,但UML(统一建模语言)是用于描述软件系统的标准图形化工具,包括类、接口、对象和它们之间的关系。对于`Circle`类,UML类图将显示类名、数据字段和方法的可视化表示,帮助理解类...

    ( 2 agile java.pdf

    - Integrated Development Environment (IDE):如Eclipse、IntelliJ IDEA等,用于编写和调试Java代码。 - JUnit:常用的单元测试框架,用于验证代码的正确性。 - **编译与运行**:本书提供了如何编译和运行第一个...

    EclipseUML使用说明书

    它支持创建、编辑和管理UML模型,并与Java代码同步更新。本文档旨在帮助用户了解如何安装、配置和使用EclipseUML 2007版本的功能。 #### 二、安装与启动 - **如何安装**:文档提供了详细的步骤来指导用户完成...

    JAVA的23种设计模式总结[整理].pdf

    类图是UML中的一种结构图,它描述了类、接口、对象及其相互关系。类图由类名、属性和方法构成,类之间的关系包括继承、实现、依赖、关联、聚合和组合。继承关系是"Is-a"关系,表现为实线连接;实现关系是接口与类...

    《信息系统建模与uml》-4

    ### 信息系统建模与UML——面向对象技术深入解析 #### 面向对象技术的基本原则 面向对象技术(OO, Object-Oriented)是一种软件开发方法论,它基于对象的概念来组织和构建软件功能。面向对象技术的核心原则包括封装...

    图书馆信息系统UML 实例

    在这个例子中,可能会使用Java语言编程实现这些功能。每种用例对应的类和接口将被实现,以满足系统的行为要求。 11.5 测试和配置 测试确保系统按照需求正确运行,包括单元测试、集成测试和系统测试。配置管理则...

Global site tag (gtag.js) - Google Analytics