programmazionejava1 ha scritto:
Allora si utilizza get e set solo per proteggere i dati e non renderli visibili e cambiarli?
Se il campo è accessibile direttamente dall'esterno, allora il codice per l'accesso al campo sarebbe sparpagliato ovunque in qualunque altra classe. E la tua classe (dove c'è il campo) NON ne avrebbe il "controllo".
Vorrebbe dire quindi che non puoi imporre dei vincoli (es. un String non può essere null, un numero non può essere negativo, ecc...).
E se il campo è accessibile diventa parte della API "pubblica" della classe. Il campo non lo potrai più toccare come nome e tipo perché si "spaccherebbero" potenzialmente molte altre classi. Anche dal punto di vista del multi-threading, non potresti facilmente gestire la sincronizzazione tra thread.
Se invece il campo lo nascondi ed offri l'accesso solo tramite dei metodi, allora:
- il campo lo puoi eventualmente rinominare o cambiargli tipo, potendo magari (possibilmente) mantenere i metodi accessori come sono.
- puoi applicare vincoli o logiche specifiche.
- puoi gestire la sincronizzazione tra thread più facilmente.
E aggiungo, ci sono moltissimi framework che si basano sulle "proprietà" (e non sui campi) dedotte secondo le specifiche JavaBeans, ovvero che esiste una proprietà es. "testo" di tipo String se c'è un
String getTesto() e un
void setTesto(String) .