需要解释这个 UML 模型

Need explanation of this UML model

请解释 "MANAGER static employee" 是什么意思。 除了 changeManager,我什么都做了,我该如何实现它?

 public  Employee(){
    this.id=-1;
    this.year=-1;
    salary=-1; 
    name="NA";
    department="NA";

}
public  Employee(int id ,String name ,String depatment, int year,double salary){
    Employee Employee=new Employee();

    Employee.setid(id); Employee.setname(name); Employee.setdepartment(depatment); Employee.setyear(year); Employee.setsalary(salary);
}

与Java一样,UML中的static属性是class本身的属性,而不是实例的属性,这意味着有所有实例中只有 一个 经理 'shared'。当然它的类型是 Employee,所以在 Java 中:

private static Employee MANAGER;

默认情况下 class 没有经理,因为 MANAGERnull.

请注意图中出现 'static' 是不正常的,不符合规范,例如操作 changeManager 属性行是带下划线的,即是在 UML

中说 attribute/operation 是 static 的方式

isManager 的定义很简单:

public boolean isManager() { return this == MANAGER; }

注意可能 class 还没有经理,在这种情况下 MANAGERnull,并且调用 isManager(null) 是检查 class 是否有经理

的方法

changeManager 的定义也很简单:

public static void changeManager(Employee newManager) { MANAGER = newManager; }

请注意,允许没有管理器使用 null

调用该操作

示例 methods/attributes :

Employee.java

class Employee {
  private String name;
  private int id;

  private static Employee MANAGER;

  public Employee(String n, int i) {
    name = n;
    id = i;
  }

  public boolean isManager() {
    return this == MANAGER;
  }

  public static void changeManager(Employee e) {
    MANAGER = e;
  }
}

Main.java

class Main {
  public static void main(String[] args) {
    Employee e1 = new Employee("e1", 1);
    Employee e2 = new Employee("e2", 2);

    System.out.print("e1.isManager() = ");
    System.out.println(e1.isManager());

    System.out.print("e2.isManager() = ");
    System.out.println(e2.isManager());

    System.out.println("do 'Employee.changeManager(e1)'");
    Employee.changeManager(e1);

    System.out.print("e1.isManager() = ");
    System.out.println(e1.isManager());

    System.out.print("e2.isManager() = ");
    System.out.println(e2.isManager());

    System.out.println("do 'Employee.changeManager(e2)'");
    Employee.changeManager(e2);

    System.out.print("e1.isManager() = ");
    System.out.println(e1.isManager());

    System.out.print("e2.isManager() = ");
    System.out.println(e2.isManager());

    System.out.println("do 'Employee.changeManager(null)'");
    Employee.changeManager(null);

    System.out.print("e1.isManager() = ");
    System.out.println(e1.isManager());

    System.out.print("e2.isManager() = ");
    System.out.println(e2.isManager());
  }
}

编译、执行:

pi@raspberrypi:/tmp $ javac Main.java Employee.java 
pi@raspberrypi:/tmp $ java Main
e1.isManager() = false
e2.isManager() = false
do 'Employee.changeManager(e1)'
e1.isManager() = true
e2.isManager() = false
do 'Employee.changeManager(e2)'
e1.isManager() = false
e2.isManager() = true
do 'Employee.changeManager(null)'
e1.isManager() = false
e2.isManager() = false
pi@raspberrypi:/tmp $