需要解释这个 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 没有经理,因为 MANAGER 是 null.
请注意图中出现 'static' 是不正常的,不符合规范,例如操作 changeManager 属性行是带下划线的,即是在 UML
中说 attribute/operation 是 static 的方式
isManager 的定义很简单:
public boolean isManager() { return this == MANAGER; }
注意可能 class 还没有经理,在这种情况下 MANAGER 是 null,并且调用 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 $
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 没有经理,因为 MANAGER 是 null.
请注意图中出现 'static' 是不正常的,不符合规范,例如操作 changeManager 属性行是带下划线的,即是在 UML
中说 attribute/operation 是 static 的方式isManager 的定义很简单:
public boolean isManager() { return this == MANAGER; }
注意可能 class 还没有经理,在这种情况下 MANAGER 是 null,并且调用 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 $