elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Utilizar métodos sobreescritos o una estructura If
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Utilizar métodos sobreescritos o una estructura If  (Leído 4,934 veces)
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Utilizar métodos sobreescritos o una estructura If
« en: 24 Septiembre 2011, 20:03 pm »

La idea del tema es aplicar el polimorfismo, así que me respondo yo solo. Los métodos sobreescritos son los que debería usar, pero es que con un if es mucho más fácil y no veo ningún inconveniente.

Tengo que hacer un Control de Llamadas. Las llamadas provinciales tienen un costo dependiendo de la franja horaria donde se realicen (1, 2 ó 3).

Entonces tengo que hacer un método CalcularPrecio() en él que fácilmente pondría un estructura if.
Código:
If(franjaHoraria == 1){
...
}
else if (franjaHoraria == 2){
....
}
etc.

El problema viene al hacerlo con métodos sobre-cargados, tengo la idea, pero no sé si es la forma correcta.

Una forma sería (que no se hace xD) sería si se pudiera evaluar un parámetro de un método. Quería así.
Código
  1. public double CalcularPrecio(double duracion, int franjaHoraria==1){
  2. this.duracion = duracion;
  3. this.franjaHoraria = franjaHoraria;
  4. precio = Valor_llamada_franja1 * duracion;
  5. }

Pero me da error.

La otra que se me ocurre es poner el if dentro del método, pero no estoy seguro si esta es la forma correcta de implentar el polimorfismo.
Así:
Código
  1. public double CalcularPrecio(double duracion, int franjaHoraria){
  2.  this.franjaHoraria = franjaHoraria;
  3.  this.duracion = duracion;
  4.  if(franjaHoraria == 1){
  5.    //calcular el precio para franaja horaria es 1
  6.  }
  7. }
  8. public double CalcularPrecio(double duracion, int franjaHoraria){
  9.  this.franjaHoraria = franjaHoraria;
  10.  this.duracion = duracion;
  11.  if(franjaHoraria == 2){
  12.    //calcular el precio para franaja horaria es 2
  13.  }
  14. }
  15. etc...
  16.  
  17.  

Pero el problema es que cuando llame al método todos se van a ejecutar, porque todos tienen los mismo parámetros.


« Última modificación: 24 Septiembre 2011, 20:07 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pianista
Colaborador
***
Desconectado Desconectado

Mensajes: 5.654


Hacking Wireless Live!


Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #1 en: 24 Septiembre 2011, 20:11 pm »

Una manera elegante de hacer esto, si además del coste cambiará por ejemplo el método de tarificación sería montar un patrón estrategia.

http://es.wikipedia.org/wiki/Strategy_(patr%C3%B3n_de_dise%C3%B1o)

El polimorfismo es lo que usa ese patrón, tu tienes varios algoritmos implementados de diferente manera en cada clase que hereda de la abstracta por poner un ejemplo, o de la interfaz, y así no tienes que estar mirando el tipo.

Lo de los ifs efectivamente es cargarse el polimorfismo.

Saludos


En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #2 en: 24 Septiembre 2011, 20:42 pm »

O sea crear 3 clases: FranjaHoraria1, FranjaHoraria2 y FranjaHoraria3 que hereden de la clase LlamadaProvincia?

Cuando vaya a hacer una llamada será predeterminada, o sea, las instancias de la clase LlamadaProvincia van a tener los parámetros que yo elija. Por ejemplo hago una llamada a una provincia y le paso el parámetro de cuanto duro, el número de origen y destino.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pianista
Colaborador
***
Desconectado Desconectado

Mensajes: 5.654


Hacking Wireless Live!


Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #3 en: 24 Septiembre 2011, 20:52 pm »

Si eso es.

Cuando tu hagas una llamada, dependiendo de la hora creas una instancia del tipo de llamada correspondiente.

Entonces luego solo tienes que invocar al método calcular de la clase y te devolverá lo que te ha costado la llamada.

Saludos
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #4 en: 24 Septiembre 2011, 21:02 pm »

Entonces desde la clase Central (que es donde se hacen y registran las llamadas) debo crear 4 constructores. Uno para las locales, otras para la de las franjas 1, para la 2 y para la 3?
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pianista
Colaborador
***
Desconectado Desconectado

Mensajes: 5.654


Hacking Wireless Live!


Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #5 en: 24 Septiembre 2011, 21:12 pm »

Vamos a ver, tu desde la central haces lo siguiente:

Código
  1. LLamada llamada; (Llamada es la clase abstracta de la que heredan las otras, incluso a lo mejor podría ser una interfaz, depende del contexto)
  2.  
  3. if(type==local){
  4. llamada = new LlamadaLocal();
  5. }
  6.  
  7. if(time==franja1){
  8. llamada = new LLamadaFranja1();
  9. }
  10.  
  11. if(time == franja2){
  12. llamada = new LlamadaFranja2();
  13. }
  14.  
  15. if(time==franja3){
  16. llamada = new LlamadaFranja3();
  17. }

y fuera, luego para calcular el coste harías:

int total = llamada.calcula(); (por ejemplo)

Saludos
« Última modificación: 27 Septiembre 2011, 14:46 pm por Debci » En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #6 en: 24 Septiembre 2011, 22:13 pm »

Código
  1. public void RegistrarLlamadas(LlamadaLocal llamada){
  2. llamada = new LlamadaLocal(double duracion, String numOrigen, String numDestino);
  3. }

Me da error:
Multiple markers at this line
   - The constructor LlamadaLocal() is undefined
   - Syntax error on token ")", delete this token
   - Syntax error, insert ")" to complete
    ClassInstanceCreationExpression
   - Syntax error, insert ";" to complete BlockStatements
   - Syntax error on token ",", ; expected
   - Syntax error on token ",", ; expected

En la clase LlamadaLocal tengo el constructor
Código
  1. public LlamadaLocal(double duracion, String numOrigen, String numDestino){
  2. super(duracion, numOrigen, numDestino);
  3. this.ID = "Local";
  4. this.precio = 0;
  5. }
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pianista
Colaborador
***
Desconectado Desconectado

Mensajes: 5.654


Hacking Wireless Live!


Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #7 en: 24 Septiembre 2011, 22:33 pm »

Vamos a ver, primero te da esos errores porque no tiene sentido lo que haces.

Cuando haces llamada = new LlamadaLocal()

Tienes que pasarle los parametros (variables o valores a pelo), pero no poner double duracion,String numOrigen,String numDestino);, no se si me explico.

por ejemplo:

Código
  1.  
  2. double time = 1.6;
  3. String num1 = "666666666";
  4. String num2="667777777";
  5.  
  6. llamada = new LlamadaLocal(time,num1,num2);
  7.  
  8.  

Por cierto tiene más sentido que a un método registrarLlamada le pases la superclase de la que heredan todos los tipos de llamada, que tienes. (podría llamarse Llamada a secas).

Saludos
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #8 en: 24 Septiembre 2011, 22:47 pm »

Muchas gracias.

La verdad es que me siento perdido con java y la POO, tengo que ponerme a leer más material.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pianista
Colaborador
***
Desconectado Desconectado

Mensajes: 5.654


Hacking Wireless Live!


Ver Perfil WWW
Re: Utilizar métodos sobreescritos o una estructura If
« Respuesta #9 en: 25 Septiembre 2011, 16:28 pm »

Java al ser de alto nivel es un lenguaje bastante sencillo para empezar, pero si te recomiendo que leas libros que hablen un poco sobre lo que son las clases, la herencia, el polimorfismo y tal.

El de bertrand meyer usa eiffel, pero a lo mejor te puede servir para tener las nociones. Luego al final se aplican independientemente del lenguaje.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Metodos numericos
Programación Visual Basic
teamatrix129me 0 1,678 Último mensaje 4 Agosto 2005, 17:49 pm
por teamatrix129me
Ayuda con metodos de un archivo (estructura de datos)
Programación General
crifesma 0 1,842 Último mensaje 3 Junio 2011, 03:02 am
por crifesma
sobrecarga de metodos, se puede aplicar en metodos abstract o interfaces?
Desarrollo Web
jhonatanAsm 0 2,945 Último mensaje 16 Agosto 2011, 00:22 am
por jhonatanAsm
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines