Atualmente, estou pensando em uma interface para uma classe que estou escrevendo. Esta classe contém estilos para um caractere, por exemplo, se o caractere está em negrito, itálico, sublinhado, etc. Estou discutindo há dois dias se devo usar getters / setters ou nomes lógicos para os métodos que alteram os valores para esses estilos. Embora eu prefira nomes lógicos, significa escrever código que não é tão eficiente e nem tão lógico. Deixe-me lhe dar um exemplo.
Eu tenho uma classe CharacterStyles
que tem variáveis de membro bold
, italic
, underline
(e alguns outros, mas vou deixá-los fora para mantê-lo simples). A maneira mais fácil de permitir que outras partes do programa acessem essas variáveis seria escrever métodos getter / setter, para que você possa fazer styles.setBold(true)
e styles.setItalic(false)
.
Mas eu não gosto disso. Não apenas porque muitas pessoas dizem que os getters / setters quebram o encapsulamento (é realmente tão ruim assim?), Mas principalmente porque não me parece lógico. Espero estilizar um personagem através de um método, styles.format("bold", true)
ou algo assim, mas não através de todos esses métodos.
Há um problema, entretanto. Como você não pode acessar uma variável de membro do objeto pelo conteúdo de uma string em C ++, eu precisaria escrever um grande contêiner if-statement / switch para todos os estilos ou teria que armazenar os estilos em uma matriz associativa ( mapa).
Não consigo descobrir qual é o melhor caminho. Em um momento, acho que devo escrever os leitores, e no momento seguinte me inclino para o outro lado. Minha pergunta é: o que você faria? E por que você faria isso?
bold
definido como true
e as outras variáveis indefinidas, os métodos getter para as outras variáveis deverão retornar o valor do estilo pai (que está armazenado em outra propriedade), enquanto o getter da bold
propriedade deverá retornar true
. Existem outras coisas como um nome e a maneira como ele é exibido na interface também.