Attualmente sto pensando a un'interfaccia per una classe che sto scrivendo. Questa classe contiene stili per un personaggio, ad esempio se il carattere è grassetto, corsivo, sottolineato, ecc. Ho discusso con me stesso per due giorni se dovrei usare getter / setter o nomi logici per i metodi che cambiano i valori in questi stili. Mentre tendo a preferire i nomi logici, significa scrivere codice che non sia così efficiente e non così logico. Lasciate che vi faccia un esempio.
Ho una classe CharacterStyles
che ha variabili membro bold
, italic
, underline
(e alcuni altri, ma io li lascio fuori per mantenere le cose semplici). Il modo più semplice per consentire ad altre parti del programma di accedere a queste variabili sarebbe quello di scrivere metodi getter / setter, in modo che tu possa fare styles.setBold(true)
e styles.setItalic(false)
.
Ma questo non mi piace. Non solo perché molte persone dicono che i getter / setter rompono l'incapsulamento (è davvero così male?), Ma soprattutto perché non mi sembra logico. Mi aspetto di modellare un personaggio con un metodo styles.format("bold", true)
o qualcosa del genere, ma non con tutti questi metodi.
C'è un problema però. Dal momento che non è possibile accedere a una variabile membro oggetto dal contenuto di una stringa in C ++, dovrei o scrivere un grande contenitore if-statement / switch per tutti gli stili, oppure dovrei memorizzare gli stili in un array associativo ( carta geografica).
Non riesco a capire quale sia il modo migliore. Un momento penso che dovrei scrivere i getter / setter, e il momento successivo mi sposto verso l'altro modo. La mia domanda è: cosa faresti? E perché dovresti farlo?
bold
set to true
e le altre variabili non definite, i metodi getter per le altre variabili dovrebbero restituire il valore dello stile parent (che è memorizzato in un'altra proprietà), mentre il getter per la bold
proprietà dovrebbe restituire true
. Ci sono altre cose come un nome e il modo in cui viene visualizzato nell'interfaccia.