UML各个关系的对应代码

UML的几种关系介绍请移步《UML中的关系》

要真正画好UML图,透彻的理解各个关系的具体含义,需要明白各个关系对应的代码实现。

一、依赖
依赖是类的五种关系中耦合最小的一种关系。





依赖关系可以描述为:Uses a
生成代码的时候,这两个关系类都不会增加属性

  1. PublicclassFilmClip{
  2. publicFilmClip(){}
  3. }

  1. PublicclassChannel{
  2. publicChannel(){}
  3. }
依赖关系的表现形式 1 Channel 类是全局的,则 FilmClip 类可以调用

例如:VB中的公共模块,任何使用这个模块的类都叫做依赖于这个模块

表现形式2Channel类是FilmClip类的某个方法中的变量FilmClip类可以调用它。

表现形式3Channel类是作为FilmClip类中某个方法的参数或者返回值

如:

  1. PublicFilmClip{
  2. PublicChannelGrownup(Channelchannel){
  3. returnnull;
  4. }
  5. }
二、泛化
泛化关系可以描述为:Is a ,子类将继承父类的所有属性方法










对应代码

  1. classShape{}
  2. publicclassCircle:Shape{}
  3. publicclasspolygon:Shape{}

三、关联

(1)双向关联







(2)单向关联







C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性方法。没有生命期的依赖。一般是表示为一种引用。

(3)自身关联










代码对应:

1、单向关联代码













  1. PublicclassWater{
  2. publicclimatem_climate;
  3. publicWater(){}
  4. }


  1. Publicclassclimate{
  2. publicclimate(){}
  3. }

可见生成代码中,Water类的属性增加climate类。

2、双相关联代码示例:


  1. PublicclassWater{
  2. publicclimatem_climate;
  3. publicWater(){}
  4. }

  1. Publicclassclimate{
  2. publicWaterm_Water;
  3. publicclimate(){}
  4. }

可见生成代码中,两个类的属性添加了!
3、聚合












聚合:表示雁群类是由大雁类聚合而成。雁群类聚合大雁类,但是大雁可以离开雁群而独立存在

  1. PublicclassGooseGroup{
  2. publicGoosegoose;
  3. PublicGooseGroup(Goosegoose){
  4. this.goose=goose;
  5. }
  6. }
4、组合












  1. PublicclassGoose{
  2. publicWingswings;
  3. publicGoose(){
  4. wings=newWings();
  5. }
  6. }

聚合组合的区别:
1)构造函数不同:
聚合类的构造函数中包含了另一个类作为参数。
雁群类(GooseGroup)的构 造函数中要用到大雁(Goose)作为参数传递进来。大雁类(Goose)可以脱离雁群类而独立存在。
组合类的构造函数中包含了另一个类的实例化。
表明大雁类在实例化之前,一定要先实例化翅膀类(Wings),这两个类紧密的耦合在一起,同生共灭。翅膀类(Wings)是不可以脱离大雁类(Goose)而独立存在。
2)信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的。
在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀 类被严密的封装在大雁类中。


四、实现







实现指的是一个class类实现interface接口(可以是多个)的功能

实现是类与接口之间最常见的关系之一。

  1. interfaceinterfaceA{}
  2. classclassA:interfaceA{}

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...