Esiste un principio OOP generale secondo cui i metodi dovrebbero restituire variabili locali piuttosto che impostare campi oggetto.
Ad esempio, supponiamo di avere la seguente parte di codice (esempio in Java):
public class Number {
public int myNum;
}
public class Horrible {
public static void areYouSerious(Number num){
num.myNum = 47;
}
}
public class Test {
public int num = new Number();
public void doHorribleThings(){
Horrible.areYouSerious(num);
}
public static void main(String[] args){
Test test = new Test();
test.doHorribleThings();
}
}
Ovviamente questo stile di programmazione può andare di traverso molto rapidamente e diventa un enorme mal di testa per chiunque tenti di mantenerlo. Un modo più corretto per farlo sarebbe il seguente:
public class Number {
public int myNum;
}
public class NotAsBad {
public static int getDefaultVal(){
return 47;
}
}
public class Test {
public int num = new Number();
public void doHorribleThings(){
num.myNum = NotAsBad.getDefaultVal();
}
public static void main(String[] args){
Test test = new Test();
test.doHorribleThings();
}
}
Il primo esempio sta modificando un riferimento passato, mentre il secondo sta generalizzando la funzione di impostazione statica, facendogli restituire un valore che può essere usato per impostare il campo dell'oggetto.
Esiste un nome per il principio secondo cui il secondo metodo dovrebbe essere preferito al primo? Una sorta di principio di "modularità"?
Proprio come encapsulation
è il termine per limitare la manipolazione delle variabili, vorrei un termine per limitare l'ambito degli effetti di alcune funzionalità.
Se non c'è un termine esistente, lo chiamerò localizzazione delle conseguenze .