Hola, buenas tardes, a partir de lo conversado ayer en la clase de la tarde, me surgió una duda acerca de mi TP. Tengo una clase (llamemos clase 1) que tiene varios métodos (No muchos, pero se podría llegar a considerar que la clase tiene más de un comportamiento). Por lo tanto, mi idea era delegar estos comportamientos (Que no son responsabilidad pura de esta clase) en otra clase (llamemos clase 2). Sin embargo, para realizar esto, en varios de estos mensajes tendría que pasar como argumento a una de las variables de instancia de la clase 1 (Lo que podría ser considerado como estar violando la privacidad de esta clase 1). Entonces, mi duda sería: que diseño me conviene más (cuál está más orientado a objetos), el que tiene a la clase 1 con algunos comportamientos extra, o el que delega estos comportamientos en otra clase, pero enviándoles uno de los atributos de la clase 1 como argumento? Muchas gracias.
Osea, la duda sería básicamente: Mandarle un atributo de una clase 1 como argumento a un mensaje que entiende una clase interna 2, se considera como violación de privacidad de la clase 1?
Hola,
Habria que ver el caso particular, pero yendo a la pregunta general:
"Mandarle un atributo de una clase 1 como argumento a un mensaje que entiende una clase interna 2, se considera como violación de privacidad de la clase 1?"
La respuesta a eso es que no, eso no viola el encapsulamiento de la clase 1.
Yendo a un ejemplo concreto, ayer en clase llegamos a una clase "RangoHorizontal" que tenia dos atributos "desde hasta" (ubicacion inicial y final del rango).
Haciamos un calculo complicado en la clase, y dijimos que una forma mas orientada a objetos podria haber sido crear una entidad Ubicacion que modelara esas ubicaciones y luego pedirle a la ubicacion que nos den la lista de ubicaciones entre ellas.
Entonces, podriamos iterar asi desde RangoHorizontal:
[ desde ubicacionesHasta: hasta ] do: ....
En ese ejemplo "ubicacionesHasta" es un mensaje de "Ubicacion" (clase 2), que recibe como parametro el valor "hasta", atributo de instancia de RangoHorizontal (clase 1).
Eso no rompe el encapsulamiento de RangoHorizontal.
Saludos
Eugenio