免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1547 | 回复: 0
打印 上一主题 下一主题

类与类关系的UML图与代码表现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-06 08:45 |只看该作者 |倒序浏览
键字: OO  
      UML,泛化,依赖,关联,聚合        
   
  
      
   
   
   
   
     
      
      
         
类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)泛化(Generalization)
(2)关联(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)

UML图与应用代码例子:
[color="#ff9900"]1.泛化(Generalization)
[color="#339966"][泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]
[color="#ff0000"]父类 父类实例=new [color="#ff0000"]子类()
[UML图](图1.1)

[color="#339966"]图1.1 Animal类与Tiger类,Dog类的泛化关系

[color="#339966"][代码表现]


class Animal{}    class Tiger extends Animal{}    public class Test    {        public void test()        {            Animal a=new Tiger();        }    }   
[color="#3366ff"]2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在[color="#ff0000"]局部变量,[color="#ff0000"]方法的参数,以及对[color="#ff0000"]静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[color="#339966"][UML表现](图1.2)



[color="#339966"]图1.2 Person类与Screwdriver类的依赖关系

[代码表现]


public class Person{        /** 拧螺丝 */       public void screw(Screwdriver screwdriver){            screwdriver.screw();        }    }   
[color="#3366ff"]3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用[color="#ff0000"]实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)

[color="#339966"]图1.3 公司和员工的关联关系


[color="#339966"][代码表现]


public class Company{        private Employee employee;        public Employee getEmployee(){            return employee;        }        public void setEmployee(Employee employee){            this.employee=employee;        }        //公司运作        public void run(){            employee.startWorking();        }    }   
[color="#3366ff"](4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是[color="#ff0000"]整体与[color="#ff0000"]部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过[color="#ff0000"]实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从[color="#ff0000"]语义上才能[color="#ff0000"]更好的区分两者的区别。
[color="#339966"][关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的
对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)
拆了下来。
[color="#339966"][UML图](图1.4)


[color="#339966"]图1.3 [color="#000000"]电脑和组件的聚合关系
[color="#339966"][代码表现]


public class Computer{        private CPU cpu;        public CPU getCPU(){            return cpu;        }        public void setCPU(CPU cpu){            this.cpu=cpu;        }        //开启电脑        public void start(){            //cpu运作            cpu.run();        }    }   
[参考资料]
1.《Java与模式》(阎宏 编著) 第2章 统一建模语言UML简介

               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8862/showart_271896.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP