一、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类之间的关系

三、高内聚低耦合

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

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

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