Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Polimorfismo en MVC?

Estas en el tema de Polimorfismo en MVC? en el foro de Java en Foros del Web. Hola Me surge una duda, estoy haciendo un programita con java y he usado MVC, hasta aquí todo perfecto. Mi duda surge en que me ...
  #1 (permalink)  
Antiguo 10/02/2014, 03:40
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Polimorfismo en MVC?

Hola

Me surge una duda, estoy haciendo un programita con java y he usado MVC, hasta aquí todo perfecto.

Mi duda surge en que me gustaría usar polimorfismo entre varias clases que extienden del Modelo, lo que no se si se puede hacer, ya que el Modelo debería ser abstracto y no puedo ponela como abstracta ya que sino no podría iniciar el Controlador

Alguna idea de si es posible hacer el polimorfismo?


Un saludo y gracias
  #2 (permalink)  
Antiguo 10/02/2014, 05:06
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Polimorfismo en MVC?

No acabo de entender dónde está el problema.

Si Modelo es una clase abstracta nunca la vas a instanciar, pero las clases que heredan de ella sí, y por ser descendientes de Modelo siempre aceptarán el polimorfismo con Modelo. Que una clase sea abstracta no significa obligatoriamente que sus métodos también lo sean.

Aparte también podrías usar interfaces para usar polimorfismo con los descendientes de Modelo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 10/02/2014, 05:38
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: Polimorfismo en MVC?

Hola

Me explico, este en mi main en el que no puedo poner la clase model en abstract

Código:
Model model = new Model();
View view = new View();
new Controller(view,model);
Si la pongo en abstract como debería adaptar el main?


Un saludo y gracias
  #4 (permalink)  
Antiguo 10/02/2014, 05:55
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Polimorfismo en MVC?

No sé para qué necesitas Model ni qué contiene, pero teniendo en cuenta que estás hablando de convertirla en abstracta...

Supón que tienes una clase HijoModel que extiende de Model, pues entonces puedes hacer

HijoModel hModel = new HijoModel();
View view = new View();
new Controller(view,hModel);

Eso es una forma de usar polimorfismo.

Me da la impresión de que no comprendes correctamente qué es el polimorfismo y cómo funciona la herencia.

http://codejavu.blogspot.de/2013/06/...o-en-java.html
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 10/02/2014, 06:00
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: Polimorfismo en MVC?

La clase model hace dos movimientos, Arriba y Abajo. Estos dos son dos clases que heredan de model, las 2 contienen el metodo start();

Ahora como lo tengo puesto, model no es abstracta y para saber cual de los dos es, hago un instance of para saber que start() ejecutar, el de Abajo o el de Arriba.

Mi idea era hacerlo con polimorfismo para no utilizar un instanceof


Soy consciente que no me explico bien, perdón

Un saludo y gracias
  #6 (permalink)  
Antiguo 10/02/2014, 06:22
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Polimorfismo en MVC?

Código Java:
Ver original
  1. public class Model {
  2.  
  3.     public static void main(String[] args) {
  4.  
  5.         Model m = new Model();
  6.        
  7.         m.ejecuta(new Model());
  8.         m.ejecuta(new Arriba());
  9.         m.ejecuta(new Abajo());
  10.         m.ejecuta((Model)new Arriba());
  11.  
  12.     }
  13.    
  14.     public void start(){
  15.         System.out.println("Nada");
  16.     }
  17.    
  18.     public void ejecuta (Model model){
  19.         model.start();
  20.     }
  21.  
  22. }
  23.  
  24. class Arriba extends Model{
  25.    
  26.     @Override
  27.     public void start(){
  28.         System.out.println("Arriba");
  29.     }
  30. }
  31.  
  32. class Abajo extends Model{
  33.    
  34.     @Override
  35.     public void start(){
  36.         System.out.println("Abajo");
  37.     }
  38.    
  39. }

Échale un ojo al polimorfismo y herencia, te vendrá bien.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 10/02/2014, 06:30
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: Polimorfismo en MVC?

Gracias por el código, pero no veo como se puede adaptar al mvc.

Me he leído herencia y polimorfismo y lo entiendo bien, pero cuando tengo que hacerlo en el patrón mvc... ya lo veo más complicado
  #8 (permalink)  
Antiguo 10/02/2014, 06:46
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Polimorfismo en MVC?

Imagínate que tienes una pantalla con un Canvas que va a recibir un panel con una estructura concreta para mostrar al usuario (un arbol con datos, dos arboles, una tabla, lo que sea).

Creas una clase CustomPanel con el metodo abstracto buildPanel(datos) donde "datos" es un DTO con la información que necesites, que indicará como se debe estructurar el contenido de ese panel.

Para cada panel diferente que vayas a enviar a ese Canvas debes extender de CustomPanel e implementar el buildPanel(datos) (así como otros métodos abstractos que se te ocurran en CustomPanel), y también podrá tener métodos y atributos propios.

Así el método que asigna el panel al Canvas sólo va a recibir un CustomPanel como parámetro (no tendrá q recibir X tipos de paneles diferentes, que son los que estarías usando mediante el polimorfismo).

Esto es un ejemplo de como se gestionaría el polimorfismo en la vista dentro de un patrón MVC.

Pueden darse infinidad de casos según tus necesidades y lo que convenga al proyecto, pero date cuenta que MVC no se va a gestionar exclusivamente mediante polimorfismo, sino que su uso será inherente a una necesidad concreta.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 10/02/2014, 09:02
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: Polimorfismo en MVC?

Cita:
Iniciado por Fuzzylog Ver Mensaje
Imagínate que tienes una pantalla con un Canvas que va a recibir un panel con una estructura concreta para mostrar al usuario (un arbol con datos, dos arboles, una tabla, lo que sea).

Creas una clase CustomPanel con el metodo abstracto buildPanel(datos) donde "datos" es un DTO con la información que necesites, que indicará como se debe estructurar el contenido de ese panel.

Para cada panel diferente que vayas a enviar a ese Canvas debes extender de CustomPanel e implementar el buildPanel(datos) (así como otros métodos abstractos que se te ocurran en CustomPanel), y también podrá tener métodos y atributos propios.

Así el método que asigna el panel al Canvas sólo va a recibir un CustomPanel como parámetro (no tendrá q recibir X tipos de paneles diferentes, que son los que estarías usando mediante el polimorfismo).

Esto es un ejemplo de como se gestionaría el polimorfismo en la vista dentro de un patrón MVC.

Pueden darse infinidad de casos según tus necesidades y lo que convenga al proyecto, pero date cuenta que MVC no se va a gestionar exclusivamente mediante polimorfismo, sino que su uso será inherente a una necesidad concreta.

Pero no se puede crear una clase no abstracta con un metido abstracto no?

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:55.