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 CharacterStylesche 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?
boldset to truee 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 boldproprietà dovrebbe restituire true. Ci sono altre cose come un nome e il modo in cui viene visualizzato nell'interfaccia.