??xml version="1.0" encoding="utf-8" standalone="yes"?>
2.从用的频率来看Q关联(包括聚合和组合)关系是用最为广泛的Q其ơ是依赖和?
3.兌和依赖的区别Q?
A:从类之间关系的强q度来分,兌表示cM间的很强的关p;依赖表示cM间的较弱的关p;
B:从类之间关系的时间角度来分,兌表示cM间的“持久”关系Q这U关pM般表CZU重要的业务之间的关p,需要保存的Q或者说需?#8220;持久?#8221;的,或者说需要保存到数据库中的。比如学生管理系l中的StudentcdClassQ班U)c,一个Student对象属于哪个Class是一个重要的业务关系Q如果这U关pM保存Q系l就无法理。另外,依赖表示cM间的是一U?#8220;临时、短?#8221;关系Q这U关pL不需要保存的Q比如StudentcdStuEditScreenQ学生登录界面)cM间就是一U依赖关p,StuEditScreencM赖Studentc,依赖Student对象的信息来昄~辑学生信息?
C:设计cM间的关系是遵循的原则Q首先判断类之间是否是一U?#8220;兌”关系Q若不是再判断是否是“依赖关系”Q一般情况下若不是关联,是依赖关系
D:依赖一般情况下是以下几U情况之一Qa、ClassA中某个方法的参数cd是ClassBQ这U情冉|合Qb、ClassA中某个方法的参数cd是ClassB的一个属性;q种情况成ؓ紧耦合Qc、ClassA中某个方法的实现实例化ClassBQd、ClassA中某个方法的q回值的cd是ClassBQ如果出C上述四种情况之一Q两个类很有可能是“依赖”关系?
E:依赖关系QDependencyQ:是类与类之间的连接,依赖L单向的。依赖关pM表一个类依赖于另一个类的定义。下面的例子中class A 依赖与class B、C、D?br />
F:兌是一U结构关p,说明一个事物的对象与另一个事物的对象相联pR给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象?br />
兌可以有方向,卛_航。一般不作说明的时候,D是双向的Q不需要在U上标出头。大部分情况下导航是单向的,可以加一个箭头表C。关联在代码中一般表CZؓ属性(成员变量Q,例如下面例子?class A与B兌
public class A{
private B b;
}
如果B也关联到AQ那么它们就是双向的兌?br />
public class B{
private A a;
}
G:聚合关系(Aggregation)Q是兌关系的一U,是强的关联关pR聚合是整体与个体之间的关系。如汽RcM引挚c,轮胎cM间的关系是整体与个体的关系?
与关联关pMP聚合关系也是通过实例变量来实现的?/p>
***兌关系所涉及的两个类是处于同一层次上的Q而在聚合关系中,两个cd在不q等的层ơ上的,一个代表整体,一个代表部分。(兌与聚合仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。)
H:l成关系(Composition)Q是兌关系的一U,是比聚合关系强的关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期Q合成关pL不能׃n的?
代表整体的对象需要负责保持对象的存活Q在一些情况下负责代表部分的对象湮灭掉。代表整体的对象可以代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换a之,
*******代表部分的对象在每一个时d能与一个对象发生合成关p,由后者排它的负责其生命周期?br />
1?泛化(Generalization)
很简单,是我们常说的ѝ是说子c获得父cȝ功能的同Ӟq可以扩展自q功能?如图:
Java代码中表CؓQextends ?implements
2?依赖(Dependency)
两个相对独立的咚?A和B)Q当A负责构造BӞA与B形成依赖关系Q即A使用B。如图:
<v:shape id="_x0000_i1026" style="WIDTH: 378pt; HEIGHT: 81.75pt" type="#_x0000_t75"><v:imagedata o:title="Dependency" src="file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz"></v:imagedata></v:shape>
Java代码中:表现为局部变量,Ҏ的参敎ͼ以及寚w态方法的调用
3?兌(Association )
两个相对独立的咚?A和B)Q当A对象持有B对象的时候,形成兌关系?
关于分ؓ有两U特D的形式Q聚合(AggregationQ和l合QCompositionQ,聚合和组合只有概念上的区别,在Java中的代码实现上没有区别?
聚合Q指的是整体与部分的关系Q如图:
l合Q表C类之间整体和部分的关系Q但是组合关pM部分和整体具有统一的生存期,x体对象不存在Q部分对象也不存在Q如图:
Java代码中:表现为成员变量?/strong>
4?ȝ
在Java中,应该量优先使用l合Q而不是承,因ؓl承会得类关系q于复杂化,破坏了封装性,使用l合一样可以获得已有类的功能,而且会新类更加E_?
实际上,从依?-----〉聚?-------〉组合,cMcM间的关系更加紧密Q互怹间的影响来大Q其实我们^常比较少d分这些关p,而且事实上这东西的定义不太好理解Q所以肯定会D认识上的偏差Q所以我们用这些东西的时候,量靠近大家都认同的做法Q这样容易让别h理解?
首先l一个我在CSDN里查到的我们常用的例子,q个基本上天天都会用Q但是从来没仔细的考虑q中间的含义Q惭愧?br />
规则和限?br /> 1、泛型的cd参数只能是类cdQ包括自定义c)Q不能是单类型?br /> 2、同一U泛型可以对应多个版本(因ؓ参数cd是不定的)Q不同版本的泛型cd例是不兼容的?br /> 3、泛型的cd参数可以有多个?br /> 4、泛型的参数cd可以使用extends语句Q例?lt;T extends superclass>。习惯上UCؓ“有界类型”?br /> 5、泛型的参数cdq可以是通配W类型。例如Class<?> classType = Class.forName(java.lang.String);