Nell'esempio seguente, ho una classe Person e una classe B che contiene un riferimento a una Persona.
La persona ha un metodo pubblico foo1 che può alterarne lo stato (è un oggetto mutevole).
Supponi che i clienti di classe B vogliano conoscere lo stipendio, il nome e l'indirizzo email dell'oggetto di persona. Devo riscrivere i getter dalla classe Person in classe B (senza fornire un metodo getPerson)? O forse getPerson è sufficiente, in quanto le persone saranno in grado di chiamare getSalary, getEmail e getName su di esso?
Sapendo che la persona è mutabile, dovremmo chiedere se vogliamo che i clienti di B modifichino quella persona chiamando foo1. Potremmo decidere di riscrivere i getters di Person in B o restituire un clone di tale oggetto Person, in modo che Person in B non venga modificato.
Che dire di un esempio più semplice, se Persona fosse immutabile (non ci sarebbe alcun metodo foo1 in questo caso)? In B, dovrei avere getPerson (che restituisce un clone, nel caso in cui Person diventasse mutabile in un secondo momento), o riscrivere tutti i getter di Person?
class Person{
private String name;
private int salary;
private String email;
//other private fields
public void foo1(){
//modify some fields here
}
public int getSalary(){
return salary;
}
public String getName(){
return name;
}
public String getEmail(){
return email;
}
}
class B{
private Person person;
public Person getPerson(){
return person;
}
}