理解UML中类的四种关系

来源:互联网 发布:招行一金通分析软件 编辑:程序博客网 时间:2024/05/02 17:43

关联关系(association):关联在图中表示为普通实线。是认识的关系,没有生命期的依赖。一般表示一种引用。就像两个陌生人一样互相认识了,成为朋友,而这两个人是互相独立的生命个体,这就是关联关系(双向关联)。而如果A认识B,而B不认识A,则是单向关联。还有一个自身关联,姑且认为是自我认知吧。

        聚合(aggregation): 聚合就是“has-a”。实线空心菱形。

        组合(compostion):组合就是“contains-a”。实线实心菱形。

        这两种关系都是表示整体和部分的关系,不同之处:
        组合关系是你和你的心的关系(心脏只属于自己)。大树和叶子,车子和轮胎。

        你和你买的书之间的关系是聚合关系。(你不用这本书了,别人还可以用)。

依赖(dependency):是一种弱的关联,如果说关联是朋友之间,而依赖就是米老师说的一个公司和一个外包公司关系吧,是互相use的关系。这两个公司本来没关系的,但铁路公司想要开发的时候就和外包公司有了关系。虚线实箭头表示。

 注:上述关系都是在一定的问题域中才有效,要看问题的描述,有时候关系还可能上升,如果这个公司长时间和一个外包公司亲密合作,就有可能成为是组合关系了。也就是老百姓常说的就事论事吧,要依情况而定。

 
泛化(realization):就是常说的继承了。实线空三角。

实现(Realization):一般是接口的实现。虚线空三角。

百度了一下,用简单的代码示例:

泛化(继承)

  1. class A{  
  2.   
  3. }  
  4.   
  5. class B : A{  
  6.   
  7. }  


 

依赖:

  1. class A{  
  2.   
  3.       public void Function(B b)  
  4.   
  5.      {}  
  6.   
  7. }  
  8.   
  9. class B {  
  10.   
  11. }  


 

关联

  1. class A{  
  2.   
  3.       B b = new B();  
  4.   
  5. }  
  6.   
  7. class B {  
  8.   
  9. }  


 

    单向关联

    两个类是相关的,但是只有一个类知道这种联系的存在

  

  1. <span style="color:#000000;">BankAccount.java  
  2.   
  3. public class BankAccount {  
  4.   
  5. }  
  6.   
  7. OverdrawnReport.java  
  8.   
  9. public class OverdrawnReport {  
  10.   
  11.          private BankAccount overdrawnReports;  
  12.   
  13. }  
  14.   
  15. </span>  


 

 

      双向关联

      两个类彼此知道它们间的联系

    

  1. <span style="color:#000000;">Job.java  
  2.   
  3. public class Job {  
  4.   
  5.          private Person jobs;  
  6.   
  7. }  
  8.   
  9. Person.java  
  10.   
  11. public class Person {  
  12.   
  13.          private Job persons;  
  14.   
  15. }  
  16.   
  17. </span>  

聚合

  1. class A{  
  2.   
  3.       B b = new B();  
  4.   
  5.      C c = new C();  
  6.   
  7. }  
  8.   
  9. class B {  
  10.   
  11. }  
  12.   
  13. class C {  
  14.   
  15. }  


 

组合

  1. class A{  
  2.   
  3.       B b = new B();  
  4.   
  5.      C c = new C();  
  6.   
  7. }  
  8.   
  9. class B {  
  10.   
  11. }  
  12.   
  13. class C {  
  14.   
  15. }  

组合和聚合的代码好像大致相同。

图还是不太会画,唉...慢慢来吧..加油!


转载 :http://blog.csdn.net/xhf55555/article/details/6896516

0 0
原创粉丝点击