Título: Utilizar métodos sobreescritos o una estructura If Publicado por: Aikanáro Anário 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){ 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
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
Pero el problema es que cuando llame al método todos se van a ejecutar, porque todos tienen los mismo parámetros. Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: pianista 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 Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: Aikanáro Anário 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. Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: pianista 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 Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: Aikanáro Anário 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?
Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: pianista en 24 Septiembre 2011, 21:12 pm Vamos a ver, tu desde la central haces lo siguiente:
Código
y fuera, luego para calcular el coste harías: int total = llamada.calcula(); (por ejemplo) Saludos Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: Aikanáro Anário en 24 Septiembre 2011, 22:13 pm Código
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
Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: pianista 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
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 Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: Aikanáro Anário 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. Título: Re: Utilizar métodos sobreescritos o una estructura If Publicado por: pianista 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 |