Juan genio !!!

Muchas gracias x los links, habia googleado pero no habia llegado a esas
paginas...

Esta muy clara la explicacion de B. Eckel en "Thinking in C++"...para tener
en cuenta: SIEMPRE ante la duda buscar en Eckel ! =)

Tengo el Stroustrup, pero lo di vuelta de arriba abajo y no encontraba una
explicacion clara...

Ante todo, fe de erratas.
donde dije:
"Es decir, la herencia privada permite aprovechar la implementacion de la
clase base, pero sin presentar su implementacion."
quise decir:
"Es decir, la herencia privada permite aprovechar la implementacion de la
clase base, pero sin presentar su INTERFAZ."

Luego, lo q saco en limpio en base a lo q contaste y a lo q lei, es:

- La diferencia entre "herencia privada" y composicion es muy sutil. En
general se puede pensar en ambos patrones ante un problema de este tipo.

- "You may wonder what the purpose of *private* inheritance is, because the
alternative of creating a *private* object in the new class seems more
appropriate. *private* inheritance is included in the language for
completeness, but if for no other reason than to reduce confusion, you'll
usually want to use a *private* member rather than *private* inheritance"
(Bruce Eckel)
O sea, ante la duda, elegir composicion. Es menos "peligroso".

- La herencia privada permite exponer "parcialmente" la interfaz de la clase
base. Esto es una ventaja sobre la composicion.

- Al heredar en forma privada, se puede acceder a miembros protegidos de la
clase base. Esto es una ventaja sobre la composicion

- Al heredar en forma privada en vez de elegir composicion, se puede caer en
la herencia multiple (a veces fuente de problemas). Punto para la
composicion.

- La herencia privada permite que miembros de la clase derivada puedan
"castear" a la clase base. Esto la verdad no se me ocurre en que casos
podria servir... =S

- "Use composition when you can, private inheritance when you have to." (de
http://www.parashift.com/c++-faq-lite/private-inheritance.html)

- Un caso en donde la herencia privada tiene mucha ventaja sobre la
composicion es cuando en la clase base hay una funcion que llama a una
funcion miembro virtual pura, esperando que una clase derivada la
implemente. Y justamente nosotros queremos brindar la implementacion. (no se
entendio nada, no ? jaja).
Ver: http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.3

Tambien, agrego algunas consideraciones mas q estuve pensando:

- Esta el tema de respetar la semantica. En gral se usaria herencia para
decir "es-un", y composicion para decir "tiene-un".

- Podria tambien ser necesario usar herencia privada cuando tratamos con
clases que no son instanciables. En este caso no podria usarse la
composicion. Ojo, esto no lo pense mucho, no se me ocurre ningun
ejemplo...pero me suena a q por aca puede venir la cosa tambien... =/

En fin...si alguien quiere colaborar con algun comentario al respecto,
bienvenido !! ja

Muchas gracias, Juan !
Saludos
MA_Xx




2009/2/14 Juan De Vincenzo <[email protected]>

> Hola Max,
>
> Mira te cuento, yo estoy estudiando C++ por mi cuenta y tu preg se me
> hizo interesante asi que me puse a investigar y encontre bastante. Te
> resumo las conclusiones:
>
> En contra de la herencia privada:
> - La herencia privada te puede llevar innecesariamente a herencia multiple.
>
> A favor:
> - La herencia privada te permite que miembros de la clase base sean
> convertidos de la clase base a la clase que hereda. (suena confuso ya
> se, pero lo estoy traduciendo de una explicacion en ingles que incluye
> codigo de ejemplo y tuve que resumir)
>
> - La herencia privada te da acceso a los miembros protegidos de la clase
> base
>
> - La herencia privada te permite que la clase base anule funciones
> virtuales del objeto que hereda de ella.
>
> No se como andas con el ingles, pero de todos modos te paso links en
> donde encontre bastante info con ejemplos:
>
>
> http://www.eng.cam.ac.uk/help/tpl/languages/C++/Thinking_in_C++/tic0145.html
>
> http://en.wikipedia.org/wiki/Inheritance_(computer_science)<http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29>
>
> http://www.parashift.com/c++-faq-lite/private-inheritance.html
>
> http://www.cprogramming.com/tutorial/private.html
>
> http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.3
>
> Espero que te sirva. De todos modos seguro alguien mas te puede dar
> una explicacion mas clara ;).
>
> Saludos,
> Juan
>
> 2009/2/14 Maximiliano Milicich <[email protected]>:
> > Hola gente:
> > Estoy estudiando para dar el final de Taller prog 1 (Veiga).
> > Haciendo finales tomados, me encuentro con una pregunta q dice "para que
> > sirve la herencia privada ? Ejemplificar" (C++)
> >
> > Tratando de responder esta pregunta me surge una duda:
> > Que diferencia habria entre usar herencia privada vs usar composicion ?
> >
> > Es decir, la herencia privada permite aprovechar la implementacion de la
> > clase base, pero sin presentar su implementacion.
> > Asimismo, siendo herencia privada, el usuario de la clase derivada no
> puede
> > realizar el "upcast" a la clase base.
> >
> > Entonces, no es esto similar a usar la clase base como composicion ?
> > No se me ocurre algun ejemplo en donde la herencia privada sea mas
> > conveniente que componer... =/
> >
> > Muchas gracias a quien me quiera ayudar a despejar mi dilema.
> > Saludos !
> > MA_Xx
> >
> >
> > _______________________________________________
> > Lista de correo Programacion.
> > [email protected]
> > http://listas.fi.uba.ar/mailman/listinfo/programacion
> >
> >
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a