面向对象<类的三大关系>

1.关联

关联是类与类之间的最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系比如汽车和学生,人和其手臂,班级和学生。

a.双向关联
如一个顾客购买商品并且拥有商品,卖出的商品属于某一个用户,UML中用直线表示:


class Customer {
    private Product[] product;
}

class Product {
    private Customer dCustomer;
}

b.单向关联
比如顾客拥有一个地址,UML中使用单向箭头表示:


class Customer {
    private Address adddress;
}

class Address {
    // ....
}

c.自关联

比如一个链表的节点类,UML中单箭头指向自身:


class Node {
    Node next;
}

d.多重性关联
如一个表单可以拥有零个或者多个按钮,UML中用单箭头线段表示(线段上写的是数量对应关系,比如一对多):

class Form {
    Button[] buttons;
}

class Button {

}

e.聚合关系
聚合关系表示的是整体与部分的关系,在聚合关系中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在(也就是成员对象的声明周期不依赖与整体的声明周期),在UML中空心的菱形的线段表示,例如发动机是汽车组成部分,但是汽车发动机可以独立存在:


class Car {
    Engine engine;

    public Car(Engine engine) {
        // TODO Auto-generated constructor stub
        this.engine = engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}

class Engine {

}

f.组合关系
组合关系也表示类之间整体和部分的关系,但是在组合关系中整体和部分对象可以控制的生命周期(也就是部分的声明周期必须依赖整体的生命周期),就像人和其头部的关系,在UML中用带有实心菱形的线段表示:


class Head {
    Mouth mouth;

    public Head() {
        // TODO Auto-generated constructor stub
        mouth = new Mouth();
    }
}

class Mouth {

}

2.依赖关系

依赖关系是一种使用关系,特定的事物的改变可能会影响到使用该事物的其他事物。大多数情况下依赖关系体现在一个类的某个方法使用另一个类的实例作为参数

a.将一个类的对象作为另一个类的方法的参数

class Driver {
    public void driver(Car car) {
        car.move();
    }
}

class Car {

    public void move() {
        // TODO Auto-generated method stub

    }

}

b.在一个类的方法中将另外一个类的对象作为其局部变量


class Driver {
    public void driver() {
        Car car = new Car();
        car.move();
    }
}

class Car {

    public void move() {
        // TODO Auto-generated method stub

    }

}

c.在一个类的方法中调用另外一个类的静态方法


class Driver {
    public String LogoOfCar() {
        return Car.getLogo();
    }
}

class Car {
    static String logo = "BMW";

    public static String getLogo() {
        return logo;
    }

}

3.泛化关系

泛化关系又称继承关系,用于描述父类和子类之间的关系,父类又称做基类或者超类,子类又称派生类。在UML中,继承关系用带有三角形的直线表示。


class X  {

    public X() {
        System.out.print("X");
    }
}


class Z extends X {

    public Z() {
        System.out.print("Z");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值