likes
comments
collection
share

Java类之间的关系

作者站长头像
站长
· 阅读数 7

一、UML类图的表示方式

在UML中,类使用包括类名、属性和操作且带有分割线的矩形来表示。

(1)类名:是一个字符串。

(2)属性:指类的成员变量。UML表示格式:[可见性]属性名:类型[=默认值] 例如-name:String

(3)操作:是类的成员方法。UML表示格式:[可见性]名称(参数列表)[:返回类型] 例如:+display():void

可见性表示该属性对类外的元素是否可见,包括公有(public)、私有(private)、受保护(protected)和缺省四种,在类图中分别用符号+、-、#、~表示。

银行账户类的UML表示:

Java类之间的关系

二、类之间的关系

类与类之间主要有6种关系,耦合度从弱到强排列依次是:依赖、关联、聚合、组合、继承、实现。

1、依赖关系

依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。是use-a的关系。

依赖关系体现在,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法。方法执行完毕,就没有关系。

class Cat {
    public static void eat(){
        System.out.println("猫在吃喵粮");
    }
}
class User {
    //使用形参方式发生依赖关系
    public void user1(Cat cat){
        cat.eat();
    }
    //使用局部变量发生依赖关系
    public void user2(){
        Cat cat = new Cat();
        cat.eat();
    }
    //使用静态变量发生依赖关系
    public void user3(){
        Cat.eat();
    }
}

在UML类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。

Java类之间的关系

2、关联关系

关联关系是对象之间的一种引用关系,用于表示一个类对象与另一个类对象之间的联系,如老师和学生、师傅和徒弟、客户和订单等。

在代码中,通常将一个类的对象作为另一个类的成员变量来实现关联关系。在整个对象的生命周期,一直有关系。

public class Customer {  
    public Address address;  
    public void setAddress (Address address){        
        this.address= address;  
    }  
    public Address getAddress (){          
        return address;  
    }  
}  

在UML类图中,双向的关联用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。

Java类之间的关系

关联、聚合和组合关系仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等,它们在编程语言中的体现却是基本相同的。

3、聚合关系

聚合关系是关联关系的一种特例,是强关联关系,是整体和部分之间的关系,即has-a的关系。

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如汽车由引擎、轮胎以及其它零件组成,如果汽车毁了,它的引擎和轮胎还可以安装在别的汽车上。

public class Team {  
    public Person person;  
    public Team(Person person){  
        this.person = person;  
    }  
}  
//Team 由 Person 组成,其生命周期不同,整体不存在了,部分依然存在,当前Team解散了,人还在,还可以加入别的组。

在UML类图中,聚合关系用带空心菱形的实线来表示,菱形指向整体。

Java类之间的关系

4、组合关系

组合关系是关联关系的一种,表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是contains-a 关系。

在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如头和嘴,人和人的大脑的关系。

public class Person {  
    public Head head;  
    public Body body;  
    public Arm arm; 
    public Leg leg; 
    public Person(){  
        head = new Head();  
        body = new Body(); 
        arm=new Arm();
        leg=new Leg();
    }  
}  
//head,body,Arm和Leg等组合成People,其生命周期相同,如果整体不存在了,部分也将消亡。

在UML类图中,组合关系用带实心的菱形的实线来表示,菱形指向整体。

Java类之间的关系

5、继承关系

继承关系是对象之间耦合度最大的一种关系。继承关系指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,是is-a 的关系。

在UML类图中,继承关系用带空心三角箭头的实线来表示,箭头从子类指向父类,子接口指向父接口。

Java类之间的关系

6、实现关系

实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口中所声明的所有的抽象操作。

interface UserService{}
public class UserServiceImpl implements UserService{}

在UML类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。

Java类之间的关系

三、高内聚低耦合

注:现在的软件结构设计,要求高内聚低耦合。 高内聚低耦合,是判断软件设计好坏的标准,主要用于程序的面向对象的设计。

耦合:就是模块之间的互相依赖程度。模块之间的耦合度越低,意味着它们的独立性越高,修改一个模块不会影响到其他模块。少使用继承和全局变量。

内聚:一个模块内的元素是否紧密相关,即模块的功能。高内聚就是模块的功能要尽可能简洁,最好一个模块只完成一个功能。

转载自:https://juejin.cn/post/7267813373592158268
评论
请登录