Autor |
Mensaje |
Uciel
Nivel 6
Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Hola, tengo una duda sobre algo que quiero implementar.
Supongan que tengo una clase madre (A) de la cual heredan varias clases hijas (W, X, Y y Z).
Ahora bien, yo tengo unas lineas de codigo que se repiten (es decir, son identicas, por ej. una validación sobre algo y si ese algo ocurre entonces lanzar error). El asunto es que estas lineas que se repiten solo las necesito para las clases W, X e Y (en esas clases es donde tengo que repetir el codigo). Es decir, Z no tiene que tener esa linea de codigo. La pregunta es:
¿si tenes una línea de código replicada en diferentes clases "hermanas", cuál es la solución?
En principio se me ocurrio definir un metodo que incluya esa lineas en la clase madre y luego desde las hijas llamarla con "super elNombreDelMetodo". Pero si hago esto, la clase Z estaria heredando un metodo que nunca va a usar . Asi que no se que hacer.
Alguna ayudita por favor
|
|
|
|
|
|
|
|
|
DiegoSLTS
Nivel 6
Edad: 37
Registrado: 14 Ago 2006
Mensajes: 219
Ubicación: Bernal, Quilmes
Carrera: Informática y Sistemas
|
|
Podés hacer que A tenga dos clases hijas nomás, B y Z. En B ponés el código en común y esa la extendés para crear W, X e Y.
O sea, si W, X e Y tienen algo en común capaz existe una abstracción para eso.
Si es muy poco código igual tendrías que ver si se justifica...
Otra es poner el código que usan W, X e Y en la clase A como definición "estandard" de ese método, y en Z redefinirlo como lo necesites.
Y sino la otra (ya queda medio feo, pero si priorizás no repetir código puede servirte) es definir ese código en una función separada, en otra clase fuera de la jerarquía en algún método estático, y llamarla dentro de W, X e Y en la reeimplementación del método que es igual solo para esas 3.
|
|
|
|
_________________ No tengo firma...
.... un momento... SI TENGO!
|
|
|
|
|
Uciel
Nivel 6
Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
son todas muy buenas ideas
Cuando pones:
"Si es muy poco código igual tendrías que ver si se justifica... "
en realidad es una linea de codigo nomas, pero digamos que SI se justifica porque ya me corrigieron que esta mal como lo hice.
Entonces: ¿cual me recomendas? ¿cual usarias?
|
|
|
|
|
|
|
|
|
DiegoSLTS
Nivel 6
Edad: 37
Registrado: 14 Ago 2006
Mensajes: 219
Ubicación: Bernal, Quilmes
Carrera: Informática y Sistemas
|
|
Antes que nada, tengo entendido que usan Pharo ahora y no conozco el lenguaje, te respondo usando ejemplos medio genéricos para trabajar con POO, fijate si encontrás algo equivalente .
No puedo elegir una así nomás, depende del código. ¿Que hace esa linea?
Si es por ejemplo evaluar una cuenta, capaz podés hacer lo último que te sugerí. Sería como tener tu propia clase "Math" con métodos estáticos (como las de Java + C++, que hacés Math.pow(a,b) y te devuelve "a a la b"). Eso solamente si esa linea es algo que vayas a usar en mas lados!
Ahora, si la linea es un simple llamado a una función no arreglás mucho haciendo lo que dije recién, porque estarías reemplazando un llamado por otro nada mas. ¿En la clase A el método no tiene ninguna definición? ¿Esa linea tiene sentido en A? Si tiene sentido ponela en A, y la redefinís en Z.
Si no tiene sentido fijate que significa esa linea para las clases w, x e Y y hace la clase B como te comentaba antes.
|
|
|
|
_________________ No tengo firma...
.... un momento... SI TENGO!
|
|
|
|
|
Uciel
Nivel 6
Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Si si, estamos usando Pharo.
En fin, le comente a uno de los ayudantes y me dijo que la "opcion" correcta era:
"poner el código que usan W, X e Y en la clase A como definición "estandard" de ese método, y en Z redefinirlo como lo necesites."
Asi que eso es lo que hare!!
Gracias por la ayuda DiegoSLTS
Saludos
|
|
|
|
|
|
|
|
|
|
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|