Iniziamo con spiegare cos’è l’Incapsulamento e specificando che non è disponibile per Kotlin, ma ci aiuterà a capire l’uso di Setter e Getter
L’incapsulamento è uno dei principi fondamentali della programmazione orientata agli oggetti (OOP). Si basa sull’idea di nascondere i dettagli interni di un oggetto e fornire un’interfaccia controllata per interagire con esso.
🔹 Concetti chiave dell’incapsulamento
- Nascondere i dettagli interni
- Gli attributi di una classe vengono dichiarati privati (private) per impedire l’accesso diretto dall’esterno.
- In questo modo, si evita che altre parti del codice possano modificarli in modo inappropriato.
- Fornire metodi di accesso controllati
- Si utilizzano getter e setter per leggere e modificare i valori in modo sicuro.
- In Kotlin, si possono usare proprietà con
getesetpersonalizzati.
- Migliorare la manutenibilità e la sicurezza
- Il codice diventa più modulare e facile da gestire.
- Se si vuole modificare il comportamento di un attributo, si può farlo nei metodi setter/getter senza influenzare il resto del programma.
Approfondiamo i metodi Set e Get
In Kotlin, getter e setter sono dei metodi speciali usati per leggere e modificare il valore di una proprietà di una classe. Questa operazione (per quanto banale) non è sempre possibile di seguito un elenco dei casi in cui non si puo modificare direttamente la proprietà di una classe
- Quando vuoi modificate una variabile dichiarata
private - Quando NON usi
valovarnei parametri del costruttore (quando la definisci senza usando la nomenclatura _param) - Quando vuoi eseguire codice durante la lettura o la scrittura (è il caso piu comune, magari vuoi modificare una parametro ma devi prima effettuare delle verifiche )
- Quando dichiari una proprietà con
varoval, Kotlin crea automaticamente i metodigeteset:valcrea solo un getter (è immutabile, quindi non ha setter).varcrea sia getter che setter.
class Persona {
var nome: String = "Mario"
// crea: getNome(), setNome(value)
}
In generale i vantaggi sono:
- Sono importanti per la manutenzione del codice, sicurezza e stabilità
- Kotlin implementa in maniera nativa l’incapsulamento, e questi metodi ti consentono di aggirare l’incapusulamento
Si può procedere in due modi differenti, il primo è quello dei Set e Get, il secondo invece è quello di creare una variabile pubblica che espone la variabile dichiarata privata.
il primo:

Per il secondo metodo, puoi utilizzare una proprietà con visibilità internal, protected, o public che espone la variabile private in modo controllato.(in pratica utilizzi un’altra variabile pubblica alla quale associ quella privata con set e get)

Attenzione quelli visti nel primo caso sono l’utilizzo di getter e setter pubblici mediante la definizioni di funzioni (come si fa in java) lo stesso risultato lo si può ottenere con i set e get in Kotlin Style e cioè:
class MyClass {
var myPrivateVariable: Int = 0
get() {
// Puoi aggiungere logica qui se vuoi
return field
}
set(value) {
// Puoi fare controlli qui
field = value
}
}
class AnotherClass {
fun accessPrivateVariable(myClass: MyClass) {
val value = myClass.myPrivateVariable
println("Valore della variabile: $value")
}
}
Di seguito l’esempio del corso che restituisce 40 e che cmq è ancora diverso dai primi due casi:
class Person2(var name: String, age_param: Int, var height: Int) {
class Person2(var name: String, age_param: Int, var height: Int) {
var age = age_param
set(value) {
if (value > 0)
field = value
else
println("Something went wrong")
}
get() {
return field +20
}
init {
if (age_param <= 0)
println("Something went wrong")
}
fun printData() {
println("name : $name, age : $age, height : $height")
}
}
fun main() {
val myFriend = Person2("Marco", 20, 180)
myFriend.age = 20
println(myFriend.age)
//myFriend.printData()
val myGirlfriend = Person2("Anna", 40, 160)
//myGirlfriend.printData()
}
Torna alla Lezione 1 Kotlin: Cosa sono le Classi