Originariamente inviato da Caiodark
Dovrebbe essere il tipo a garantire il controllo del range, mi spiego dopo...
Questo accade se il tipo usato per rappresentare il concetto di dominio è un generico tipo int o Integer in luogo (p.e.) di una classe Minutes. La classe Minutes dovrebbe essere una classe concreta che implementi il concetto di minuti così come il dominio del problema richiede (p.e. un range di interi da 0 a 59).
Solitamente invece si tende a dichiarare le proprietà di tipo primitivo, soprattutto per le variabili che incapsulino il concetto di quantità, perché usare classi concrete in Java è più scomodo che non usare i tipi predefiniti (occorre ridefinire i concetti p.e. di somma, non sarebbe possibile utilizzare gli operatori del linguaggio come +).
Ma facendo questo si rinuncia all'information hiding perché si espongono dettagli implementativi (p.e. che i minuti sono salvati in integer) e abbiamo un programma meno manutenibile.
Immagina se un domani ci venisse chiesto di cambiare il concetto di minuto gestendo anche i secondi come parte decimale, si sarebbe costretti ad utilizzare i float e a modificare tutti i metodi che chiedano dei minuti come parametri.
Invece gestendo una classe concreta sarebbe l'unica che dovrebbe essere modificata da una simile richiesta.
La classe, secondo il principio di information hiding, dovrebbe essere una sorta di black box.
Metodi e proprietà private dovrebbero rimanere tali affinché sia la classe stessa a gestire il proprio stato.
I metodi getter e setter invece fanno sì che la classe non abbia piena responsabilità del proprio stato e sia costretta a proteggersi da se stessa.
Non è un caso che le classi più ricche di metodi getter e setter siano le classi entità che non hanno praticamente alcuna intelligenza.