积跬步,聚小流------关于UML类图

UML的存在

类图是使用频率比较高的UML图,它用于描述系统中所含的类以及它们之间的相互关系,帮助人们简化对系统的理解,也是系统分析和设计阶段的重要产物,也是系统编码和测试的重要类型依据。


UML的表示方法


它的表示方法也比较简单,分成三层,第一层是类名,第二层是属性,第三层是方法。

而 属性和方法中用到的“+”表示public,“-”表示private,“#”表示protected,以及属性的写法:权限修饰符、属性名(方法名),然后是数据类型(或返回值),这些都是基本语法,都比较明显也比较简单。

当然还有接口和抽象类的表示方法:

用来描述接口;

用来描述抽象方法;

UML描述类图之间的关系

类图之间的关系有四种:泛化关系、实现关系、依赖关系、关联关系,而关联关系又分为普通关联关系、聚合关系和合成关系。而事实上这些关系我们容易理解,可更多时候我们要注意如何转化成java代码:

泛化关系 

泛化关系实质上就是我们的继承,类继承与另一个类,这个代码应该好些,我们只需要记一下UML表示方法就好了


(图片是从网上随意转载的)
这里需要注意的是集成的方向,空心箭头加实现表示继承,箭头指向谁表示继承于谁;
至于 java中关系代码则为public class Tiger extends Animal(){};

实现 关系 

这就是来相对于接口的,描述实现接口,这个我们也来简单记下:

(图片是从网上随意转载)
作为对比,与继承类似的是都是空心箭头,而与继承不同的则是虚线表示实现;
而java代码在这里的写法则为public class PenBrush implents IBrush(){};

依赖关系

把依赖关系放在第三个,是因为它是类与类之间最浅的关系,它可以是单向的,也可以是双向的,但是我们通常都用单向的,避免双向的。

(图片是从网上随意转载)
依赖关系解释起来比起继承和实现来略微有些麻烦,因为继承和实现我们经常用到,而且比较单一,有着明确的上下级,而依赖关系则不然,就像图中的人都依赖于计算机来作某些事情,就像在《大话设计模式》中动物依赖空气和水,空气和水是不同于动物的单独事物,就像计算机是不同于人类的独立的事物一样,它是独立存在的,而人类在计算或者其它行动中需要用到计算机,就像动物的呼吸需要空气,喝水需要水一样,它的行为中可能会用到另一个独立的存在,而如果不进行这个行为可能就不需要动用这个存在,就像一个死去的动物,已经不要水和空气,可是它仍然是一个动物,这个类是不会变的。
解释起来可能相比较有些麻烦,但是表示方法还是很简单的,一个虚线加上实心箭头就够了;
至于代码实现方法,则就需要具体情况进行具体对待了。 总体上说,通常可以表现为:
①:被指向的类,在指向它的类中,做为一个方法的参数,这是最常用的一种方式;
public class Person{
	public void count(Computer computer){
		
	}
}
②:还可以将被指向的类,在指向它的类中,作为一个方法中的局部变量;
public class Person{
	public void count(){
		Computer computer=new Computer();
	}
}
③:再有一种方式就是被指向的类中含有静态方法,而指向它的类调用它的静态方法;

public class Computer(){
       public static void test(){

       }
}
public class Person{
	Computer.test();
}

关联关系:

最后就是我们的关联关系了,说它分为三种状态:普通关联关系、聚合关系和合成关系,他们最大的共同之处就是都是关联关系,而代码表现出来的方式就是被指向类会作为指向类的成员变量出现,而我们再来看看它们有什么不同?

普通关联关系


(图片是从网上随意转载)
这是最普通的关联关系,代码也很容易写:
public class Customer{
  private Address address;
}
而相应的还有自关联和双向关联,而这些也都是将相应的类做成成员变量即可,自关联将自己,双向关联互相做成。

聚合关系

关联关系就像是一个老人讲故事,要想知道这个事情,要从多少多少年说起了,那个年代那个背景可能会让你理解的更深刻。而聚合关系则不仅仅是这样,不只是那个时代造成了这样,而是主人公可能就在一个组织里,那个组织的人的共性,他是组织里的人,组织都是由他这类人组成的。

(图片是从网上随意转载)
它的描述形式比起简单的关联来多了一个菱形,而菱形所在的类指向对方。
它的代码编写,比起普通关联要麻烦了很多:
public class Car{
   private Engine engine;
   public Car(Engine engine){
     
  }
  public void setEngine(Engine engine){

  }
}
它不仅将被指向对象作为了成员变量,还将成员对象作为构造方法以及set方法或其他业务方法的参数。

合成关系

合成关系,还有人把它叫做组合关系,它之所以不同于聚合关系,是因为关联的对象在本质上是在一起的,就像四肢对于生物,就像数字对于计算。

(图片是从网上随意转载)
鉴于它的同根同源性,菱形变成了实心,而相应的程序也做出了变化:
public class Head{
   private Mouth mouth;
   public Head(){
       mouth=new Mouth();
   }
}
它是在整体的构造方法中直接实例化成员。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值