个人网站制作,艺术网站模板,网站开发 mvc,装修公司 wordpress在建立对象模型时#xff0c;很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时#xff0c;对象A都有可能调用对象B的方法#xff0c;这是三种关系之间的相同之处#xff0c;除此之外#xff0c;它们有着不同的特征。 1#xff0e;依赖关…在建立对象模型时很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时对象A都有可能调用对象B的方法这是三种关系之间的相同之处除此之外它们有着不同的特征。 1依赖关系的特征 对于两个相对独立的系统当一个系统负责构造另一个系统的实例或者依赖另一个系统的服务时这两个系统之间主要体现为依赖关系例如生产零件的机器和零件机器负责构造零件对象。再例如充电电池和充电器充电电池通过充电器来充电。再例如自行车Bicycle和打气筒Pump自行车通过打气筒来充气。图1-39为Bicycle类与Pump类的类框图。 图1-39 Bicycle类与Pump类的依赖关系 Bicycle类和Pump类之间是依赖关系在Bicycle类中无需定义Pump类型的变量。Bicycle类的定义如下 public class Bicycle{ /** 给轮胎充气 */ public void expand(Pump pump){ pump.blow(); } } 在现时生活中通常不会为某一辆自行车配备专门的打气筒而是在需要充气的时候从附近某个修车棚里借个打气筒打气。在程序代码中表现为Bicycle类的expand()方法有个Pump类型的参数。以下程序代码表示某辆自行车先后到两个修车棚里充气 myBicycle.expand(pumpFromRepairShed1); //到第一个修车棚里充气 myBicycle.expand(pumpFromRepairShed2); //若干天后到第二个修车棚里充气 2关联关系的特征 对于两个相对独立的系统当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时这两个系统之间为关联关系。例如客户和订单每个订单对应特定的客户每个客户对应一些特定的订单再例如公司和员工每个公司对应一些特定的员工每个员工对应一特定的公司再例如自行车和主人每辆自行车属于特定的主人每个主人有特定的自行车图1-40显示了主人和自行车的关联关系。而充电电池和充电器之间就不存在固定的对应关系同样自行车和打气筒之间也不存在固定的对应关系。 图1-40 主人和自行车的关联关系 Person类与Bicycle类之间存在关联关系这意味着在Person类中需要定义一个Bicycle类型的成员变量。以下是Person类的定义 public class Person{ private Bicycle bicycle; //主人的自行车 public Bicycle getBicycle(){ return bicycle; } public void setBicycle(Bicycle bicycle){ this.bicyclebicycle; } /** 骑自行车去上班 */ public void goToWork(){ bicycle.run(); } } 在现时生活中当你骑自行车去上班时只要从家里推出自己的自行车就能上路了不象给自行车打气那样在需要打气时还要四处去找修车棚。因此在Person类的goToWork()方法中调用自身的bicycle对象的run()方法。假如goToWork()方法采用以下的定义方式 /** 骑自行车去上班 */ public void goToWork(Bicycle bicycle){ bicycle.run(); } 那就好比去上班前还要先四处去借一辆自行车然后才能去上班。 3聚集关系的特征 当系统A被加入到系统B中成为系统B的组成部分时系统B和系统A之间为聚集关系。例如自行车和它的响铃、龙头、轮胎、钢圈以及刹车装置就是聚集关系因为响铃是自行车的组成部分。而人和自行车不是聚集关系因为人不是由自行车组成的如果一定要研究人的组成那么他应该由头、躯干和四肢等组成。由此可见可以根据语义来区分关联关系和聚集关系。 聚集关系和关联关系的区别还表现在以下方面 1) 对于具有关联关系的两个对象多数情况下两者有独立的生命周期。比如自行车和他的主人当自行车不存在了它的主人依然存在反之亦然。但在个别情况下一方会制约另一方的生命周期。比如客户和订单当客户不存在它的订单也就失去存在的意义。 (2) 对于具有聚集关系尤其是强聚集关系的两个对象整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在它的生命周期依赖于整体类的对象的生命周期当整体消失部分也就随之消失。比如小王的自行车被偷了那么自行车的所有组件也不存在了除非小王事先碰巧把一些可拆卸的组件比如车铃和坐垫拆了下来。 不过在用程序代码来表示关联关系和聚集关系时两者比较相似。图1-41为自行车Bicycle与响铃Bell的聚集关系。 图1-41 自行车和响铃的聚集关系 以下例程1-6是Bicycle类的源程序。 例程1-6 Bicycle.java public class Bicycle{ private Bell bell; public Bell getBell(){ return bell; } public void setBell(Bell bell){ this.bellbell; } /** 发出铃声 */ public void alert(){ bell.ring(); } } 在Bicycle类中定义了Bell类型的成员变量Bicycle类利用自身的bell成员变量来发出铃声这和在Person类中定义了Bicycle类型的成员变量Person类利用自身的bicycle成员变量去上班很相似。 转载于:https://www.cnblogs.com/cxd4321/archive/2008/12/04/1347472.html