Actualmente estoy pensando en una interfaz para una clase que estoy escribiendo. Esta clase contiene estilos para un carácter, por ejemplo, si el carácter está en negrita, cursiva, subrayado, etc. He estado debatiendo conmigo mismo durante dos días si debo usar getters / setters o nombres lógicos para los métodos que cambian los valores a estos estilos Si bien tiendo a preferir nombres lógicos, significa escribir código que no es tan eficiente ni lógico. Dejame darte un ejemplo.
Tengo una clase CharacterStyles
que tiene variables miembro bold
, italic
, underline
(y algunos otros, pero voy a dejar fuera de mantenerlo simple). La forma más fácil de permitir que otras partes del programa accedan a estas variables, sería escribir métodos getter / setter, para que pueda hacer styles.setBold(true)
y styles.setItalic(false)
.
Pero no me gusta esto. No solo porque mucha gente dice que los captadores / establecedores rompen la encapsulación (¿es realmente tan malo?), Sino principalmente porque no me parece lógico. Espero diseñar un personaje a través de un método, styles.format("bold", true)
o algo así, pero no a través de todos estos métodos.
Sin embargo, hay un problema. Como no puede acceder a una variable miembro del objeto por el contenido de una cadena en C ++, tendría que escribir un gran contenedor de declaración / cambio para todos los estilos, o tendría que almacenar los estilos en una matriz asociativa ( mapa).
No puedo entender cuál es la mejor manera. En un momento creo que debería escribir los captadores / establecedores, y al momento siguiente me inclino hacia el otro lado. Mi pregunta es: ¿qué harías? ¿Y por qué harías eso?
bold
set to true
y las otras variables indefinidas, los métodos getter para las otras variables deberían devolver el valor del estilo padre (que está almacenado en otra propiedad), mientras que el getter para la bold
propiedad debería regresar true
. Hay algunas otras cosas como un nombre y la forma en que se muestra en la interfaz también.