类(Class) 封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运行时类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram) 使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。
public class Employee { private String name; private int age; private String email; public void modifyInfo() { ... } }
早UML类图中,类一般由三部分组成:
[可见性]名称:类型「=默认值]
[可见性]名称([参数列表])[:返回类型]
关联关系(Association):结构化的关系。表示一类对象与另一类对象之间有联系。
public class LoginForm { private JButton LoginButton; ... } public class JButton{ ... }
在默认情况下关联是双向的。
因此,Customer类和 Product类之间具有双向关联关系,如图所示。
public class Customer { private Product[] products; ... } public class Product { private Customer customer; ... }
顾客(Customer)拥有地址(Address)。
public class Customer { private Address address; ... } public class Address { ... }
一个结点类(Node)的成员又是结点Node类型的对象。
public class Node { private Node subNode; ... }
一个界面(Form)可以拥有零个或多个按钮(Btutton),但是一个按钮只能属于一个界面。
如图所示。
public class Form { private Button[] buttons; ... } public class Button { ... }
汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,如图所示。
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),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,如图所示。
public class Head { private Mouth mouth; public Head() { mouth = new Mouth(); } } public class Mouth { ... }
驾驶员开车。
在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法。
如图所示。
public class Driver { public void drive(Car car) { car.move(); } ... } public class Car { public void move() { ... } ... }
Student类和Teacher类都是Person类的子类
如图所示。
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() { ... } }
public interface Vehicle { public void move(); } public class Ship implements Vehicle { @Override public void move() { ... } } public class Car implements Vehicle { @Override public void move() { ... } }