uml类转java_UML中类之间的关系及其Java代码例子(转)

关系是事物之间的联系。类之间有

4

种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。

1.

依赖是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定)。在

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

2.

泛化是一般事物(称为超类或父类)和较特殊的事务(称为子类)之间的关系,对类来说一般就是继承了,如:

public Class A extends B

。一般用一个带空心箭头的实线表示泛化关系。

3.

关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。

一般把关联画为连接相同或者不同的类一条实线。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。

关联在代码中一般表示为属性,例如

public class A

{

private B b;

}

可以认为有一个

A

指向

B

的关联。

如果

B

也关联到

A

,那么它们就是双向的关联。

有的时候

B

不是

A

的属性,但是也可以有关联关系,例如:

public class A

{

public B[] getBs()

{...}

}

方法

getBs

可能去查数据库,找到

A

B

之间的关联关系。

4.

两个类之间的简单关联表示了两个同等地位类之间的结构关系。聚合也是一种关联关系,与简单关联不同的是,它描述的是一个整体和组成部分的关系,即

“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

对象

}

另外有一个差别是组合中的一个对象在同一时刻只能属于一个组成对象,而聚合的一个部分对象可以被多个整体对象聚合,例如一个学生可以在多个学校就读,而一个菜单在同一时刻只能是某个窗口内的对象。

5.

实现关系就比较简单了,指的是一个类元描述了另一个类元保证实现的契约。对类来说,就是一个类实现了一个接口

public interface A

{

public void methodA();

}

public class B implements A

{

public void methodA()

{...}

...

}

一般在面对对象的系统中,尽可能的使用接口来减少类之间的耦合。因为接口没有实现,所以依赖于接口就不会依赖于某种具体实现,例如

jdbc

里的

Connection

ResultSet

都是接口,不同数据库厂商的实现可以不一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值