Ver Mensaje Individual
  #13  
Antiguo 05-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por cadetill
jejeje, me ha gustado esta encuesta Juan Antonio
Pos a mi también...

Cita:
Empezado por cadetill
Para los que han contestado que son "expertos" en OOP o piensan que tienen un buen nivel... aquí les dejo una preguntas, a ver que tan buen nivel tienen
(aviso: ésto está sacado de un ejercicio real de la universidad en la asignatura de OOP que se realiza en Java)
El ejercicio está bonito... lástima que no soy purista de la OOP, ni me gusta mucho el Java ese...
  1. java
    1. ¿Esta afirmación es totalmente cierta? No quedamos que no habia herencia?? ¿Qué manera hay para reaprovechar el máximo posible del código de las clases sin tener que partir de 0? Lo único que se me ocurre es declarar miembros de las clases que nos interesen, y en los nuevos métodos, invocar métodos de estos miembros. Obviamente la especialización desde esta perspectiva seria un asco.
    2. ¿si se tuviera que partir absolutamente de 0 al momento de implementar cada subclase, crees que el mecanismo de herencia pierde totalmente su sentido? claro que no! como bien lo apunto ya Al, sigue existiendo el polimorfismo
  2. Herencia múltiple
    1. ¿Es esto suficiente para que todo funcione? asi de rapidito puedo decirte que si...
    2. ¿Se tendría que buscar también entre los métodos y atributos privados? No. No conozco java lo suficiente, pero supongo que las subclases no tienen acceso a los atributos y métodos privados, con lo que se evita toda ambiguedad
  3. Métodos y clases abstractos
    1. Hay una gran diferencia entre declarar un método abstracto y declararlo vacio.
      • El método abstracto indica que la clase es "parcial" (o abstracta). Es decir, que las subclases deben tener una funcionalidad tal, que es desconocida al momento de implementar la clase ancestro.
      • Por el contrario, cuando se prevee que la subclase simplemente se especialice, pero que no es un comportamiento "requerido", el método puede declararse como vacio.
      Quizas sea mejor aclarar esto con un ejemplo.

      Supongamos el caso típico de TFiguraGeometrica en una aplicación de dibujo. Habrá un método Dibujar que es abstracto. TCuadrado, TTriangulo y TCirculo declaran cada uno su implementación del método, pero evidentemente deben declararlo. No tiene ningun sentido crear una instancia de la clase abstracta, y de hecho el compilador no debiera permitirlo (aunque me conformo con que delphi lo advierta en un warning).

      Por el contrario, supongamos el caso hipotético de TCD, que tiene un método vacio reproducir. Se derivan de esta las clases TAudioCD, TVideoCD y TDatosCD. Cada una reimplementan el método virtual reproducir. Sin embargo, sigue siendo posible tener un TCD en blanco... de manera que al invocar su método reproducir, simplemente no hace nada. (El ejemplo es bastante irreal... pero ilustra)
    2. Creo que la decisión de declarar un método como abstracto, o simplemente dejarlo vacio, depende del diseñador de la jerarquia, y es un punto importante que merece atención especial en cada caso.

Espero ansioso las respuestas correctas... y mi calificación..
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita