2011-03-05 9 views
9

Tengo dos clases que en un aspecto trabajan juntas. Ambos usan funcionalidad uno del otro que solo deberían usar ellos y no cualquier otra clase.C++: ¿Mala práctica para usar clases de amigos en lugar de escribir getters/setters?

  • ¿Es una mala práctica si hago esas dos clases de amigos para que puedan acceder directamente y manipular las variables miembro entre sí, sin usar ninguna función getter/setter?
+1

Lea esto sobre getters/setters: http://www.idinews.com/quasiClass.pdf. En dos oraciones: 1.) Son una abominación en OO. 2) Si los necesita, debe replantearse. – sbi

+0

Consulte http://www.parashift.com/c++faq-lite/friends.html#faq-14.2 – ildjarn

+0

@ildjarn ese enlace no funciona. –

Respuesta

10

No, en absoluto. Es una cosa común que efectivamente, tienes una clase, pero tiene que dividirse en dos para la vida y otras cosas de implementación. En este caso, las clases de amigos son definitivamente el camino a seguir.

Si cambiar la implementación de una clase significa que tendría que cambiar la implementación de la otra, entonces esto es definitivamente aplicable. Especialmente si necesita elementos de interfaz entre estos dos que no se apliquen a ser públicos.

Existen clases de amigos por una razón.

16

Tanto los getters como los setters y las clases friend reducen la encapsulación y aumentan el acoplamiento. Al menos, la amistad restringe la encapsulación reducida a las clases explícitamente especificadas que necesitan acceso adicional. El hecho de que las dos clases ahora estén estrechamente conectadas no tiene por qué ser algo malo, se pueden considerar como una sola unidad del diseño general.

Cuestiones relacionadas