仅在 oop 中将一个方法的范围限制为另一个 class
Limit the scope of a method to one other class only in oop
这是办公室里员工和他的经理之间的一个简单场景。
在现实世界中,经理可以管理很多员工,但为了简单起见
在这里考虑一名员工和他的经理之间的情况
这里经理和员工都有姓名属性
- 经理只能改名字
- 员工只能改名字
只有员工有指定属性
- 指定只能由经理更改
对于上述场景,我创建了这个 Class 图
使用 java 代码实现上述场景,如下所示
(请注意此代码为伪代码,并且不包含编排代码,语法可能有误)
class Manager{
private String name;
private Employee employee;
//assign name and create association link between employee
Manager(Employee employee,String managerName ){
this.employee = employee;
this.name = managerName;
}
//manager can change his name
private void changeName(String managerName){
this.name = managerName;
}
//only manager can change Employee designation
private void changeEmpDesignation(String empDesignation){
this.employee.changeDesignation(empDesignation);
}
}
/* --------------------------- */
class Employee{
private String name;
private String designation;
Employee(String name ,String designation ){
this.designation = designation;
this.name = name;
}
//only Employee can change his name
private void changeName(String empName){
this.name = empName;
}
//only manager can change Employee designation
public void changeDesignation(String empDesignation){
this.designation = empDesignation;
}
}
但是
- 在这里我将
Employee.changeName()
方法设为私有以防止经理更改员工姓名是否正确?
changeDesignation()
方法在 Employee
class 中既可以访问 Employee
class 也可以访问 Manager
class这表示
经理可以更改员工的指定,员工也可以更改 his/her 的指定,我想防止这种情况发生,让经理是唯一能够更改员工 designation.how 以在代码中实现它的人?
嗯,在这种情况下需要考虑一些事情。尽管如果您将其视为现实世界的实体,这很有意义,但让一个对象更改另一个对象的状态通常不是一个好的 OO 实践。
也就是说,如果您不希望任何其他 class 更改一个 class' 属性,您应该将字段设为私有并且不提供 setter完全没有。
至于指定,你不能真正阻止一个对象修改它的属性,除非它是最终的,但经理也不能改变它。
我想你可以有一个指定 class,并使其只有经理才能实例化它。但即便如此,员工也可以将其设置为空。
或者您可以让指定 class 保存对一个或多个员工的引用,然后只有经理可以访问指定对象。
正如我所说,我认为这是 OO 建模并不真正适合现实世界的时代之一。 类 应该对自己的状态负责,对任何状态的变化都有自己的一套规则。任何其他 class 应该只能询问或请求更改。
希望对您有所帮助!
好吧,我不知道域或在什么上下文中询问,但名称应该是构造函数的一部分,而不是操作的参数。有 "might" 个可以更改名称的原因。但在现实世界中,一个对象在创建时就被命名,并一直保留到最后。私人 changeName
似乎毫无意义。
对于第二个项目符号,您需要添加一个约束,例如 { can only be invoked by Manager instances }
。
这是办公室里员工和他的经理之间的一个简单场景。
在现实世界中,经理可以管理很多员工,但为了简单起见
在这里考虑一名员工和他的经理之间的情况
这里经理和员工都有姓名属性
- 经理只能改名字
- 员工只能改名字
只有员工有指定属性
- 指定只能由经理更改
对于上述场景,我创建了这个 Class 图
使用 java 代码实现上述场景,如下所示 (请注意此代码为伪代码,并且不包含编排代码,语法可能有误)
class Manager{
private String name;
private Employee employee;
//assign name and create association link between employee
Manager(Employee employee,String managerName ){
this.employee = employee;
this.name = managerName;
}
//manager can change his name
private void changeName(String managerName){
this.name = managerName;
}
//only manager can change Employee designation
private void changeEmpDesignation(String empDesignation){
this.employee.changeDesignation(empDesignation);
}
}
/* --------------------------- */
class Employee{
private String name;
private String designation;
Employee(String name ,String designation ){
this.designation = designation;
this.name = name;
}
//only Employee can change his name
private void changeName(String empName){
this.name = empName;
}
//only manager can change Employee designation
public void changeDesignation(String empDesignation){
this.designation = empDesignation;
}
}
但是
- 在这里我将
Employee.changeName()
方法设为私有以防止经理更改员工姓名是否正确? changeDesignation()
方法在Employee
class 中既可以访问Employee
class 也可以访问Manager
class这表示 经理可以更改员工的指定,员工也可以更改 his/her 的指定,我想防止这种情况发生,让经理是唯一能够更改员工 designation.how 以在代码中实现它的人?
嗯,在这种情况下需要考虑一些事情。尽管如果您将其视为现实世界的实体,这很有意义,但让一个对象更改另一个对象的状态通常不是一个好的 OO 实践。
也就是说,如果您不希望任何其他 class 更改一个 class' 属性,您应该将字段设为私有并且不提供 setter完全没有。
至于指定,你不能真正阻止一个对象修改它的属性,除非它是最终的,但经理也不能改变它。
我想你可以有一个指定 class,并使其只有经理才能实例化它。但即便如此,员工也可以将其设置为空。
或者您可以让指定 class 保存对一个或多个员工的引用,然后只有经理可以访问指定对象。
正如我所说,我认为这是 OO 建模并不真正适合现实世界的时代之一。 类 应该对自己的状态负责,对任何状态的变化都有自己的一套规则。任何其他 class 应该只能询问或请求更改。
希望对您有所帮助!
好吧,我不知道域或在什么上下文中询问,但名称应该是构造函数的一部分,而不是操作的参数。有 "might" 个可以更改名称的原因。但在现实世界中,一个对象在创建时就被命名,并一直保留到最后。私人 changeName
似乎毫无意义。
对于第二个项目符号,您需要添加一个约束,例如 { can only be invoked by Manager instances }
。