![](/img/trans.png)
[英]java program have only one public class should main method only be part of that public class then any other class of that program?
[英]Limit the scope of a method to one other class only in oop
在員工與其經理之間的辦公室中,這是一個簡單的場景。 在現實世界中,經理可以管理許多員工,但為簡單起見,在這里考慮一位員工與其經理之間的情況
在這里,經理和員工都有名稱屬性
只有員工具有指定屬性
對於上述情況,我創建了此類圖
如下所示,使用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
類中,既可以自己訪問Employee
類,也可以訪問Manager
類,這意味着經理可以更改員工的指定,而員工也可以更改其指定,我想防止這種情況的發生,並且使經理是唯一的一個可以更改員工名稱的人。如何在代碼中實現它? 好吧,在這種情況下需要考慮一些事情。 即使將其視為現實世界實體很有意義,但讓一個對象更改另一個對象的狀態通常不是一個好的OO實踐。
話雖如此,如果您不希望任何其他類更改一個類的屬性,則應將該字段設為私有,並且完全不提供設置器。
至於名稱,除非是最終的,否則您不能真正阻止對象修改其屬性,但是經理也無法更改它。
我想您可以擁有一個Designation類,並使其成為僅管理員可以實例化的類。 但是即使那樣,員工也可以將其設置為null。
或者,您可以讓Designation類持有對一個或多個員工的引用,那么只有管理者才能訪問該Designation對象。
正如我所說的,我認為這是OO建模並不真正適合現實世界的時代之一。 類應負責其自身的狀態,並對任何狀態更改都擁有自己的一組規則。 其他任何班級都只能要求或要求更改。
希望能幫助到你!
好吧,我不知道您要查詢的域或上下文,但是名稱應是構造函數的一部分,而不是操作的參數。 有可能更改名稱的原因。 但是在現實世界中,對象是在創建時被命名的,並一直保留到最后。 私有的changeName
似乎毫無意義。
對於第二個項目符號,您需要添加一個約束,例如{ can only be invoked by Manager instances }
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.