Herencia Múltiple

08/02/2005 - 10:26 por Mario | Informe spam
Hola a todos,

Ya se que no existe la herencia múltiple en C# y que teoricamente se puede
simular con implementación de interfaces, pero no entiendo la funcionalidad
de ésta última si en la clase final tengo que impementar todos los metodos
declarados de las clases interface.

ejemplo:
Tengo 3 clases:
A .- cJoystick (clase que lee los eventos del joystick)
B.- cTeclado (clase que lee los eventos del teclado)
C.- cMenu (Clase con una clase de menus al estilo de un MainMenu)

Mi objetivo es crear una clase que sea un Menu que se pueda recorrer a
partir de los eventos del Joytick y el Teclado.

Teoricamente como herencia múltiple sería:

A B
\/
C

pero debido a que no existe en c# deberemos implementar A ó B como
interfaces con la siguiente consecuencia de tener que implementar en C todos
los metodos declarados en la interface.

Exite una manera más elegante, funcional y modular para simular la herencia
múltiple?

Un saludo,
Mario

Preguntas similare

Leer las respuestas

#1 Miguel Ortiz Falcón
08/02/2005 - 11:26 | Informe spam
Bueno te voy a dar mi opinión. Desde que el problema es
que "debe haber una herencia multiple" ya sea simulada o
no, es que por ahí hay un problema de jerarquización de
clases. Pero bien, para mi no existe algo elegante o
modular en el uso de interfaces, simplemente se aplican
como se deben de aplicar, definiendo todos sus métodos.
No asi funcionalmente, lo funcional depende del código
que defina cada uno de sus métodos, y obviamente este
código depende del desarrollador, que es quien define su
funcionalidad en ese aspecto.

Por lo que veo en tu jerarquía de clases. No le veo razón
la "herencia" de Menu a partir de las otras dos, puesto
que a mi parecer no tienen nada que ver directamente,
como para ser necesario heredar. No así en su
interacción, lo que te puede hacer falta allí son unas
dos Interfaces ahora si, por ejemplo IPulsable,
IJoystickable (IJoystickable ?...que nombre, pero se me
ocurrio =) ) para poder interactuar entre las clases.

Entonces por ejemplo lees una tecla con tu clase Teclado,
y obviamente quiere decir que va a pasar algo en tu clase
Menu. Entonces lo que puedes hacer es a través de un
método "accion();" que pertenece a IPulsable (y que
para ese entonces ya lo implementaste en Menu)... lo
llamas. Es decir Pasa algo en Teclado, tratas a menu como
IPulsable y llamas a su método y sale...

Sabes, a ver si comentas para qué quieres todo esto?...a
mi punto de vista no es una buena práctica de
programación, quizás haya otra manera mejor, de hacer lo
que quieres hacer.

Saludos...

Miguel Ortiz Falcón


Hola a todos,

Ya se que no existe la herencia múltiple en C# y que


teoricamente se puede
simular con implementación de interfaces, pero no


entiendo la funcionalidad
de ésta última si en la clase final tengo que impementar


todos los metodos
declarados de las clases interface.

ejemplo:
Tengo 3 clases:
A .- cJoystick (clase que lee los eventos del joystick)
B.- cTeclado (clase que lee los eventos del teclado)
C.- cMenu (Clase con una clase de menus al estilo de


un MainMenu)

Mi objetivo es crear una clase que sea un Menu que se


pueda recorrer a
partir de los eventos del Joytick y el Teclado.

Teoricamente como herencia múltiple sería:

A B
\/
C

pero debido a que no existe en c# deberemos implementar


A ó B como
interfaces con la siguiente consecuencia de tener que


implementar en C todos
los metodos declarados en la interface.

Exite una manera más elegante, funcional y modular para


simular la herencia
múltiple?

Un saludo,
Mario



.

Respuesta Responder a este mensaje
#2 Mario
08/02/2005 - 12:23 | Informe spam
Gracias Miguel por responder.

La funcionalidad de ésto es a grandes rasgos un menú gráfico en los cuales
existen varias opciones en los menus. Similar a lo típico en un menu pero
con otras opciones:

Archivo -> Nuevo -> Abrir -> Guardar
Edicion -> Cortar -> Copiar etc...

Lógicamente con otros textos y en modo gráfico.
Dicho control se podrá recorrer con el ratón, con teclado (acceso rapido a
subopción) y desde el mini eje (de 4 coordenadas) del joystick (esto último
es una larga historia).

Según lo que me has comentado anteriormente, todas las métodos relativos a
capturar los eventos de Teclado y Joystick deben ir implementados en la
clase Menu, pero definidos en las clases interface Teclado y Joystick?

Gracias y un saludo.
Mario
Respuesta Responder a este mensaje
#3 Miguel Ortiz Falcón
08/02/2005 - 12:52 | Informe spam
Pues mira, nunca he capturado eventos de joystick. Pero
no sé a la vez convendría extender la funcionalidad del
Menu (Heredar de la clase) para agregarle ese evento no
crees? y ya se generaría de acuerdo a como estas
capturando esos eventos. De otra forma si, sería como
dices, o bien otra, estar llamando desde la clase
joystick un método publico de menu, para tomar acciones
al respecto. Pero definitivamente me quedo con extender
la funcionalidad del control.

Saludos

Miguel Ortiz Falcón



Gracias Miguel por responder.

La funcionalidad de ésto es a grandes rasgos un menú


gráfico en los cuales
existen varias opciones en los menus. Similar a lo


típico en un menu pero
con otras opciones:

Archivo -> Nuevo -> Abrir -> Guardar
Edicion -> Cortar -> Copiar etc...

Lógicamente con otros textos y en modo gráfico.
Dicho control se podrá recorrer con el ratón, con


teclado (acceso rapido a
subopción) y desde el mini eje (de 4 coordenadas) del


joystick (esto último
es una larga historia).

Según lo que me has comentado anteriormente, todas las


métodos relativos a
capturar los eventos de Teclado y Joystick deben ir


implementados en la
clase Menu, pero definidos en las clases interface


Teclado y Joystick?

Gracias y un saludo.
Mario


.

Respuesta Responder a este mensaje
#4 Vyacheslav Popov
08/02/2005 - 21:45 | Informe spam
Hola Miguel.

Supongo lo que quieres decir es algo al estilo:

public class cTeclado : cMenu
{
...
}
public class cJoystick : cTeclado
{
...
}

Saludos.
Popov

"Miguel Ortiz Falcón" escribió en el mensaje
news:06b301c50dd4$a68885c0$
Pues mira, nunca he capturado eventos de joystick. Pero
no sé a la vez convendría extender la funcionalidad del
Menu (Heredar de la clase) para agregarle ese evento no
crees? y ya se generaría de acuerdo a como estas
capturando esos eventos. De otra forma si, sería como
dices, o bien otra, estar llamando desde la clase
joystick un método publico de menu, para tomar acciones
al respecto. Pero definitivamente me quedo con extender
la funcionalidad del control.

Saludos

Miguel Ortiz Falcón



Gracias Miguel por responder.

La funcionalidad de ésto es a grandes rasgos un menú


gráfico en los cuales
existen varias opciones en los menus. Similar a lo


típico en un menu pero
con otras opciones:

Archivo -> Nuevo -> Abrir -> Guardar
Edicion -> Cortar -> Copiar etc...

Lógicamente con otros textos y en modo gráfico.
Dicho control se podrá recorrer con el ratón, con


teclado (acceso rapido a
subopción) y desde el mini eje (de 4 coordenadas) del


joystick (esto último
es una larga historia).

Según lo que me has comentado anteriormente, todas las


métodos relativos a
capturar los eventos de Teclado y Joystick deben ir


implementados en la
clase Menu, pero definidos en las clases interface


Teclado y Joystick?

Gracias y un saludo.
Mario


.

Respuesta Responder a este mensaje
#5 Miguel Ortiz Falcón
08/02/2005 - 22:04 | Informe spam
Bueno, me refería principalmente a extender la
funcionalidad de la clase Menu, heredando de ella.

Por qué ? Porque la clase menú ya responde a los eventos
de teclado, entonces de entrada ya se cubriría ese punto.
Solo sería necesario poder responder al joystick. Mario
de alguna manera ya procesa esos eventos por otro lado.
Lo que habría que hacer es llevar ese código dentro de
esta clase derivada con su respectivo evento, por ejemplo:

Delegado event evento;

// Aqui vendrían las instrucciones que detectan cuando
hubo evendo de joystick

y luego llamar al evento:
evento();

Algo así...

Saludos...

Miguel Ortiz Falcón



Hola Miguel.

Supongo lo que quieres decir es algo al estilo:

public class cTeclado : cMenu
{

}
public class cJoystick : cTeclado
{

}

Saludos.
Popov

"Miguel Ortiz Falcón" escribió


en el mensaje
news:06b301c50dd4$a68885c0$
Pues mira, nunca he capturado eventos de joystick. Pero
no sé a la vez convendría extender la funcionalidad del
Menu (Heredar de la clase) para agregarle ese evento no
crees? y ya se generaría de acuerdo a como estas
capturando esos eventos. De otra forma si, sería como
dices, o bien otra, estar llamando desde la clase
joystick un método publico de menu, para tomar acciones
al respecto. Pero definitivamente me quedo con extender
la funcionalidad del control.

Saludos

Miguel Ortiz Falcón



Gracias Miguel por responder.

La funcionalidad de ésto es a grandes rasgos un menú


gráfico en los cuales
existen varias opciones en los menus. Similar a lo


típico en un menu pero
con otras opciones:

Archivo -> Nuevo -> Abrir -> Guardar
Edicion -> Cortar -> Copiar etc...

Lógicamente con otros textos y en modo gráfico.
Dicho control se podrá recorrer con el ratón, con


teclado (acceso rapido a
subopción) y desde el mini eje (de 4 coordenadas) del


joystick (esto último
es una larga historia).

Según lo que me has comentado anteriormente, todas las


métodos relativos a
capturar los eventos de Teclado y Joystick deben ir


implementados en la
clase Menu, pero definidos en las clases interface


Teclado y Joystick?

Gracias y un saludo.
Mario


.





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida