Sono un grande fan del controllo statico dei tipi. Ti impedisce di fare errori stupidi come questo:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Ma non ti impedisce di fare errori stupidi come questo:
Adult a = new Adult();
// obviously you've mixed up these fields, but type checker won't complain
a.setAge(150); // nobody's ever lived this old
a.setWeight(42); // a 42lb adult would have serious health issues
Il problema si presenta quando si utilizza lo stesso tipo per rappresentare ovviamente diversi tipi di informazioni. Pensavo che una buona soluzione a ciò sarebbe stata l'estensione della Integer
classe, solo per prevenire errori di logica aziendale, ma non aggiungere funzionalità. Per esempio:
class Age extends Integer{};
class Pounds extends Integer{};
class Adult{
...
public void setAge(Age age){..}
public void setWeight(Pounds pounds){...}
}
Adult a = new Adult();
a.setAge(new Age(42));
a.setWeight(new Pounds(150));
Questa è considerata una buona pratica? O ci sono problemi di ingegneria imprevisti lungo la strada con un design così restrittivo?
new Age(...)
oggetto non è possibile assegnarlo erroneamente a una variabile di tipo Weight
in nessun altro posto. Riduce il numero di luoghi in cui possono verificarsi errori.
a.SetAge( new Age(150) )
compilerai ancora?