Non ero sicuro di come formulare il titolo, ma c'è qualcosa che per me ha poco senso in OOP
Comprendo l'idea di incapsulamento, ovvero creare uno strato di protezione e astrazione, in modo che non ci sia accesso diretto a una determinata variabile.
Tuttavia, ci sono casi in cui l'incapsulamento non ha senso per me, permettimi di dimostrare di usare una semplice classe C #:
public class Person
{
public int Age { get; private set; } // makes sense, the setter is isolated
public string Name { get; private set; } // same story
public string ZipCode { get; set; } // doesn't make sense
public string Country { get; set; } // doesn't make sense either
public string City // also makes sense
{
get { /*some logic that gets the city based on zip code and country */ }
private set;
}
}
Il mio problema qui è che, secondo le buone pratiche OOP, le variabili senza regole speciali, devono anche avere accessor e mutatori separati, ma perché dovrebbero se tutto ciò che fai è impostato e ottenere dati da e verso di essi?
Nel caso di Age
e Name
ha senso incapsularlo, perché il setter è privato, non puoi mutarlo fuori dall'ambito della classe, allo stesso modo con il campo City
, che ha un getter speciale, che ottiene i dati in base a regole speciali.
Che differenza fa se avvolgo ZipCode
e Country
in una proprietà o no? Posso accedere completamente e mutare le variabili in entrambi i casi.
Qualcuno potrebbe chiarirlo?