Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1088474
  • 博文数量: 121
  • 博客积分: 10085
  • 博客等级: 上将
  • 技术积分: 3415
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-18 10:48
文章分类

全部博文(121)

文章存档

2013年(1)

2012年(2)

2011年(2)

2010年(10)

2009年(43)

2008年(63)

我的朋友

分类: 项目管理

2008-05-19 19:13:22

一.abstract class 与interface的区别:
 
  1.一个类只能继承一个abstract class 但可以继承多个interface.
  2.abstract class中的操作可以有默认的方法,但interface不可以.
  3.abstract class与其子类是"is-a"的关系.但interface与其实现类是"like-a"的关系.
二.关于mixin class
  给其它类提供可选择的接口或功能的类.它与抽象类一材料厂不能实例化,mixin class 类要求多继承.
//The Interfaces
interface MProvides
{	void func();
}
 
interface MRequires
{	int getValue();
}
 
//The Mixin
 
class Mixin implements MProvides
{	public Mixin(MRequires parent) { this.parent = parent; }

	public void func() { System.out.println("The value is: " + parent.getValue()); }

	private final MRequires parent;
}
 
//The Class Used as the Base
 
Class Parent
{	public P(int value ) { this.val = value; }
	public int getValue() { return this.val; }
	
	public toString() { return "" + this.val; }
	private int val;
}
 
//The Result of Mixing
 
class Child extends Parent implements MRequires, MProvides
{
public Child(int value)
	{	super(value); 
		this.mixin = new Mixin(this);
	}

	public void func(){ mixin.func(); }

	private final MProvides mixin;

}
 
三.Aggregation,Composition,Acquaintance,Association,Dependence,Reference的关系:
1.Aggregation:一个对象拥有另一个对象,仅强调"拥有",就如创建一个公司时可以拥有一些雇员但不
是必须的,公司破产了,不存在了,但雇员还是存在的.
 
  
 
2.Composition:批一个对象是另一个对象的一部分,强调"不可分割",两个对象有相同的生命周期.就如创建一个人的时候,不可以丢掉一个人的心脏,人死了,心脏也就消失了.
 
聚合与组合的代码表现形式是一样的,都可以表现为以下的形式,它们仅仅具有语义上的区别:
1public class Computer{    
 2    private CPU cpu;    
 3    public CPU getCPU(){    
 4        return cpu;    
 5    }
    
 6    public void setCPU(CPU cpu){    
 7        this.cpu=cpu;    
 8    }
    
 9    //开启电脑    
10    public void start(){    
11        //cpu运作    
12        cpu.run();    
13    }
    
14}
  
15
 
 
3.Dependence:是批一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务.具有某种偶然性。比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。或者是class A 的某个方法创造了 class B 的实例抑或对class B静态方法的调用。如果A依赖于B,那意味着B的变化可能要求A也发生变化;
 
 
1public class Person{    
2    /** 划船 */   
3    public void oarage (Boat boat){    
4        boat.oarage();    
5 }
    
6}
 
7
4.Association:是指一个结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(既使用它)
 1 public class Company{    
 2    private Employee employee;    
 3    public Employee getEmployee(){    
 4        return employee;    
 5    }
    
 6    public void setEmployee(Employee employee){    
 7        this.employee=employee;    
 8    }
    
 9    //公司运作    
10    public void run(){    
11        employee.startWorking();    
12    }
    
13}
  
14
 
5.Acquaintance:既可能是Association也可能是Dependence.
 
6.Reference:指那些指向对象的类属性.实现Aggregation,Composition,Association时无可避免的要用引用,但实现Dependence是却不一定用到
 
7.之间的关系:关联和依赖是同级的,组合是一种聚合,聚合是一种关联,引用则是相对独立的.  聚合与组合其实都是关联的特例,都是整体和部分的关系。他们的区别在于聚合的两个对象之间是可分离的,他们具有各自的生命周期。而组合往往表现为一种唇齿相依的关系。"关联本身即是一种依赖"当某个类被当作参数传递并且被当作结果返回的时候,或者被当作某个方法内的临时变量使用的时候,可以运用依赖关系,使用关联来表示一个拥有关系,而不是整体-部分关系。使用聚合来表示一个动态的整体-部分关系,而是用组合来表示一个静态的整体-部分关系。,"依赖是一种弱关联”。依赖和关联都是说一个类用到了另一个类。其区别在于一个是使用,一个是拥有。
阅读(1317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~