十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
依赖关系:
创新互联专注于方山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供方山营销型网站建设,方山网站制作、方山网页设计、方山网站官网定制、微信小程序定制开发服务,打造方山网络公司原创品牌,更为您提供方山网站排名全网营销落地服务。
类A依赖类B的意思是,如果A的对象要完成某一操作,必须使用B的对象的某些操作来帮忙,才能完成。简言之,B作为A的某个方法的方法参数存在。如下:
class A{
public void f(B b){
}
}
Class B{
}
//A为一个圆柱体类,要求A实例的体积
public class A{
public static void main (String[] args){
double zArea=0;
B b=new B(); //底面积及为一个圆(B类)的面积
double height = 1.6;
//调用B类实例的getArea()方法,形成依赖关系
zArea=b.getArea(4)*height; //半径r=4,高height=1.6
}
}
//圆类B
class B{
public double getArea(int r){
double area=0;
area=3.14159*r*r;
return area;
}
}
1、依赖关系,uml图示为虚线加箭头 A------B, 是一种使用的关系, 即一个类的实现需要另一个类的协助。比用常常写的工具类就是可以被 其他类使用的
代码示例: 为订单生成订单号码的服务类,使用Math类产生随机数
这个时候 OrderService类依赖Math类
OrderService ------ Math
public class OrderService{
public String getOrderNum(){
return Math.random()*1000+"";
}
}
2、关联关系,分为聚合、组合、及一般关联 。
组合关系 A◆———B 部分和整体之间具有相同的生命周期,当整体消亡后,部分也将消亡。举例 人体结构中 人体和大脑之间是一种组合关系, 人体亡了大脑也会死 例子有点沉重哈,但是好理解
代码示例
Body ◆———Brain
public class Body{
private Brain brain;
public Body(){
this.brain = new Brain();
}
public void think(){
brain.think();
}
}
聚合关系 A◇———B 部分与整体之间并没有相同的生命周期,整体消亡后部分可以独立存在。 比如汽车和轮胎, 汽车销毁了 轮胎可以作为配件 运用到其他汽车上,所以是一种聚合关系。
代码示例:
Car ◆———Tyre
public class Car{
private Tyre tyre;
public Car(Tyre tyre){
this.tyre= tyre;
}
public void run(){
tyre.run();
}
}
一般关联:是一种结构化的关系,指一种对象和另一种对象有联系,给定关联的两个类,可以从其中的一个类的对象访问到另一个类的相关对象。
解释上很拗口 不如组合 聚合来的清晰明了。可以和依赖关系作个对比,依赖实际上就是 主类依赖其他类的方法 完成部分逻辑,比如工具类的调用等, 但是两个类之间没有任何联系。 而关联关系 是存在某种联系的 比如学校和老师,老师和学生,学生和课本 等等, 两个对象之间是存在某种联系的。
java示例:
Student ———— Teacher
public class Student{
private Teacher englishTeacher;
public String myEnglishTeacherName(){
return englishTeacher.getName();
}
}
上面的关联关系,只是描述了 对象和对象之间的联系,并没有指明关联的数量。 比如一个学生是关联多个老师的(语文老师、数学老师 etc) ,那么这种关联是一种1对多的关联 等等,先理解基本的然后再深入比较好
从类的代码表达来看, 关联关系(组合、聚合、一般关联关系) 都是一个类作为另一个类的成员变量来表示, 依赖关系大部分是 一个类作为另一个类的方法参数,或者直接调用被依赖类的静态方法, 或者直接实例化被依赖类然后调用其方法 等。
理解好了 依赖和关联 包括集成 实现 等关系及 UML图示后, 对于 代码的设计将会有很大帮助
措施一:改写类的实例方法
通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的代码重用机制。换句话说,如果不继承整个类的所有方法和数据成员,我们无法重用该类里面的单个方法。继承总是带来一些多余的方法和数据成员,它们总是使得重用类里面某个方法的代码复杂化。另外,派生类对父类的依赖关系也使得代码进一步复杂化:对父类的改动可能影响子类;修改父类或者子类中的任意一个类时,我们很难记得哪一个方法被子类覆盖、哪一个方法没有被子类覆盖;最后,子类中的覆盖方法是否要调用父类中的对应方法有时并不显而易见。
任何方法,只要它执行的是某个单一概念的任务,就其本身而言,它就应该是首选的可重用代码。为了重用这种代码,我们必须回归到面向过程的编程模式,把类的实例方法移出成为全局性的过程。为了提高这种过程的可重用性,过程代码应该象静态工具方法一样编写:它只能使用自己的输入参数,只能调用其他全局性的过程,不能使用任何非局部的变量。这种对外部依赖关系的限制简化了过程的应用,使得过程能够方便地用于任何地方。当然,由于这种组织方式总是使得代码具有更清晰的结构,即使是不考虑重用性的代码也同样能够从中获益。
//依赖最常见的是参数关系,如:
public class B{
/***B中的一个方法**/
public void testMethod(A a){
//此时B和A是依赖关系
}
}
//聚合关系通常表现为部分与整体的关系,如:
public class B{
/***B中的一个属性**/
A a;
}
//泛化关系通常表现为继承关系,如:
public class B extends A{
}
这个好写,People类中有几个属性,姓名,年龄,等 还有比如说人所使用的交通工具,那就得依赖Car类,继承其全部的属性和方法,人也得有住处的吧,那就有House类,继承House类的全部属性和方法,如果有人想问一个人你开的什么样的车,车的配置是什么的,这样就一目了然了,还有住房也是同样的道理,写三个类,然后在Person类中extends House,Car