gracias Gonzalo x el aporte !!

Saludos
MA_Xx

On Fri, Feb 20, 2009 at 8:22 AM, Gonzalo Merayo <[email protected]> wrote:

> Les agrego un par de top-posts que no vi en el thread:
>
>   Al heredar en forma privada no se puede usar el objeto
> polimorficamente (ie: si heredo privado de list no puedo meter el
> objeto en un list& o list*). El caso tipico es heredar de la stl que
> no tiene destructor virtual, si no lo hago de este modo alguien podria
> crear un list* con mi objeto y al ejecutar delete se llama el
> destructor de la lista pero no el de mi objeto.
>
>   Usar herencia privada en lugar de composicion garantiza que el
> objeto padre se construye, sino queda a que lo tengamos presente en
> todos los constructores. Esto solo es problema si la composicion la
> hacemos con un puntero, para miembros o referencias no es problema.
>
>   Usar herencia privada es un infinitesimal mas optimo en uso de
> memoria ya que nos ahorramos el puntero al objeto que seria padre.
> (Esto solo lo use programando para celulares donde cada byte cuenta).
> Tambien se ahorra una indireccion(this->a vs this->miembro->a), pero
> esta optimizacion nunca la use.
>
> Saludos
>
> On Sat, Feb 14, 2009 at 1:04 PM, Juan De Vincenzo
> <[email protected]> wrote:
> > Max,
> >
> > Me alegro que te haya sido de utilidad. =)
> >
> > Es mas, gracias a vos por preguntar, habia tenido una noche muy mala
> > (despues de una semana tambien bastante mala) y tu pregunta me ayudo a
> > poner la cabeza en otra cosa.
> >
> > Pablo,
> >
> > Yo tampoco soy ningun especialista en C++, y por lo que vi es tal cual
> > vos decis, la herencia privada no es del todo buena, pero dada la
> > naturaleza de la programacion, como dice Bruce Eckel, esta para
> > "completar" el lenguaje, para llenar un pequeno vacio y en algun caso,
> > por mas extrano que sea, debe servir.
> >
> > Hay casos en los que hasta el infame Goto es necesario. =P
> >
> > Un abrazo para los dos!
> > Juan
> >
> > 2009/2/14 Pablo Martín Viva <[email protected]>:
> >> A ver hay algunas cosas que quiero decir, no soy experto en C++ ni mucho
> >> menos, pero me parece que hasta el momento no vi un unico caso en el
> cual me
> >> he topado con tener que realizar una herencia privada, generalmente uno
> >> hereda para tener en la clase derivada la misma interfaz e
> implementacion
> >> que en la clase base, para luego agregar nueva funcionalidad a esta...
> Pero
> >> con la herencia privada estamos privandonos de ese hecho, es decir
> heredamos
> >> la implementacion pero no la interfaz, y creo que todo eso se puede
> lograr
> >> con composicion...
> >>
> >> Por ejemplo si componemos un objeto A con otro objeto B, desde A podemos
> >> acceder igualmente a los atributo so miembros privados y / o protegidos
> >> haciendo uso de clases friend, y con eso nos evitamos tener que hacer
> >> herencia privada y todo el lio que eso incluye, te evita llevar tu
> codigo a
> >> herencia multiple y cosas mas complicadas...
> >>
> >> Si queremos que la clase base anule un metodo virtual de la clase
> heredada
> >> es mucho mas facil declarar al metodo como no virtual y listo...
> >>
> >> En mi opinion todo lo que te permite hacer la herencia privada se puede
> >> lograr por otros medios mas simples...
> >>
> >> Por otro lado yo creo que estar heredando todo el tiempo es malo, hay un
> mal
> >> diseño desde el comienzo....
> >> Saludos
> >> Pablo
> >>
> >> El 14 de febrero de 2009 4:49, Maximiliano Milicich
> >> <[email protected]> escribió:
> >>>
> >>> 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
> >>>
> >>
> >>
> >>
> >> --
> >> Si yo tengo una manzana y tú tienes una manzana, luego de
> intercambiarlas
> >> ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea,
> luego
> >> de intercambiarlas ambos tenemos dos ideas.
> >>
> >> Apoyando a la comunidad Open Source.
> >>
> >> Facebook prifile:
> >> http://www.facebook.com/profile.php?id=1244601012
> >> Orkut prifile:
> >> http://www.orkut.com/Profile.aspx?uid=12594853021246287134
> >>
> >> _______________________________________________
> >> 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
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a