Esiste un metodo di classe (metodo statico) in cui creo e costruisco alcuni oggetti. E per riempire quell'oggetto, lo creo come oggetto mutevole.
Il mio oggetto mutabile è una sottoclasse di oggetto immutabile. Quindi posso restituirlo come tipo di super classe.
Tale oggetto è appena creato nel metodo di classe e restituisce. Non fa parte dello stato dell'oggetto o della classe.
Devo restituire l'oggetto mutabile o la copia immutabile? (quale soluzione sarà corretta nel concetto di incapsulamento )
Ad esempio c'è qualche pseudo codice:
// MutableArray is subclass of Array
MutableArray : Array;
// Another class
static (Array *)getEngineers {
Array *employees = Array.arrayWithContentsOfResource("employees.txt");
MutableArray *engineers = new MutableArray;
for (Employee *employee in employees) {
if (employee.profession == "Engineer") {
engineers.addObject(employee)
}
}
return engineers; // should I return Array.arrayWithArray(engineers) instead of engineers ?
}
Aggiornamento:
Voglio dire, se ho un array mutabile che è un membro dell'oggetto, allora ha senso restituire una copia immutabile nel metodo getter (per fornire controllo di accesso e incapsulamento). Ma se ho un metodo come nell'esempio. Ho bisogno solo di oggetti immutabili da usare. Ma la creazione di una copia immutabile di array è operazioni aggiuntive. Ha senso renderlo immutabile?