微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UML类图——重要

A.2 类与类的UML表示

       类(Class) 封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。

  • 在系统中每个类都具有一定的职责
    • 职责:类要完成什么样的功能,要承担什么样的义务。
  • 一个类可以有多种职责,设计得好的类通常有且仅有一种职责。
  • 在定义类的时候将类的职责分解成为类的属性和操作(即方法)。
    • 类的属性即类的数据职责。
    • 类的操作即类的行为职责。

设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
       在软件系统运行时类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)
       类图(Class Diagram) 使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

类的UML图示

image

public class Employee {
    private String name;
    private int age;
    private String email;

    public void modifyInfo() {
        ...
    }
}

早UML类图中,类一般由三部分组成:

  1. 类名
  2. 类的属性:类的性质。
    [可见性]名称:类型「=认值]
    
    • 可见性:
      • 公有(public):+
      • 私有(private):-
      • 受保护(protected):#
      • 包内可见(defalut):*
    • 名称属性名,驼峰命名法(Camel Case)
    • 类型:
    • 认值:可选项,属性的初始值。
  3. 类的操作:类的任意一个实例对象都可以使用的行为。
    [可见性]名称([参数列表])[:返回类型]
    

A.3 类之间的关系(重要)

image

关联关系

关联关系(Association)结构化的关系。表示一类对象与另一类对象之间有联系。

image

public class LoginForm {
    private JButton LoginButton;
    ...
}

public class JButton{
    ...
}

双向关联

认情况下关联是双向的。

  • 顾客(Customer)购买商品(Product)并拥有商品;
  • 反之,卖出的商品总有某个顾客与之相关联。

因此,Customer类和 Product类之间具有双向关联关系,如图所示。

image

public class Customer {
    private Product[] products;
    ...
}

public class Product {
    private Customer customer;
    ...
}

单向关联

顾客(Customer)拥有地址(Address)。

image

public class Customer {
    private Address address;
    ...
}

public class Address {
    ...
}

自关联

一个结点类(Node)的成员又是结点Node类型的对象。

image

public class Node {
    private Node subNode;
    ...
}

多重性关联

image


一个界面(Form)可以拥有零个或多个按钮(Btutton),但是一个按钮只能属于一个界面。

  • 一个Form类的对象可以与零个或多个Button类的对象相关联
  • 一个Butto类的对象只能与一个Form类的对象关联

如图所示。

image

public class Form {
    private Button[] buttons;
    ...
}

public class Button {
    ...
}

聚合关系

汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,如图所示。

image

public class Car {
    private Engine engine;

    //构造注入
    public Car(Engine engine) {
        this.engine = engine;
    }

    //设值注入
    public void setEngine(Engine engine) {
        this.engine = engine
    }
    ...
}

public class Engine {
    ...
}

组合关系

人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,如图所示。

image

public class Head {
    private Mouth mouth;

    public Head() {
        mouth = new Mouth();
    }
}

public class Mouth {
    ...
}

依赖关系

驾驶员开车。
在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法

  • 驾驶员的drive()方法依赖车的move()方法
    • 类Driver依赖类Car

如图所示。

image

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

public class Car {
    public void move() {
        ...
    }
    ...
}
  1. 最常用,将一个类的对象作为另一个类中方法的参数;
  2. 一个类的方法中将另一个类作为局部变量,使用方法
  3. 一个类的方法调用一个类的静态方法

泛化关系

Student类和Teacher类都是Person类的子类

  • Person类
    • 姓名(name)
    • 年龄(age)
    • 行走move()
    • 说话say()
  • Student类
    • 姓名(name)
    • 年龄(age)
    • 学号(studentNo)
    • 学习study()
  • Teacher类
    • 姓名(name)
    • 年龄(age)
    • 教师编号(teacherNo)
    • 教学teach()

如图所示。

image

public class Person {
    protected String name;
    protected int age;

    public void move() {
        ...
    }

    public void say() {
        ...
    }
}

public class Student extends Person {
    private String studentNo;

    public void study() {
        ...
    }
}

public class Teacher extends Person {
    private String teacherNO;

    public void teach() {
        ...
    }
}

接口与实现的关系

  • 接口之间也可以有与类之间关系类似的继承和依赖关系;
  • 接口和类之间还存在一种实现关系。

    image

image

public interface Vehicle {
    public void move();
}

public class Ship implements Vehicle {

    @Override
    public void move() {
        ...
    }
}

public class Car implements Vehicle {

    @Override
    public void move() {
        ...
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐