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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Función que retorna objetos de "clases" extendidas de una abstracta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Función que retorna objetos de "clases" extendidas de una abstracta  (Leído 4,312 veces)
16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Función que retorna objetos de "clases" extendidas de una abstracta
« en: 13 Octubre 2010, 20:10 pm »

Hola amigos.

He estado haciendo uno de los ejercicios que mi profesor me ha mandado y resulta que al plantearme la lógica para resolver el problema, a mi me resulta lógico (no en todos los casos, pero en este si) hacer que una función según un valor que se le pasa o que lo tiene su clase, retorne un objeto de una clase distinta según ese valor. Eso java no lo permite ( y creo que muchos otros tampoco...) No se me ocurre por ahora una manera mas intuitiva para mi(o mejor dicho, personal, a mi estilo, que eso de intuitivo es algo que depende de cada uno :D) de resolver el problema que tengo, el cual si queréis expongo, pero por ahora os pongo el código de prueba, aislado, que muestra exactamente lo que intento.

A ver si se os ocurre algo en esta forma de pensar, que me ayude a solucionar el problema. Según un valor tengo que asignar en una referencia a objeto de clase abstracta un objeto de una clase extendida de esa misma abstracta, pero esta devuelta desde una función.

Código
  1. class Leer{
  2.    private int op;
  3.    private OpBinaria obj;
  4.    Leer(int op){
  5.        this.op = op;
  6.        obj = obtObjeto();
  7.    }
  8.    private OpBinaria obtObjeto(){
  9.        if(op == 1){
  10.            Suma suma = new Suma();
  11.            return suma; //Eclipse dice "NopeNope!" Tu dale OpBinaria :D
  12.        }
  13.    }
  14. }
  15.  
  16. abstract class OpBinaria{
  17.    public int x, y;
  18.    public abstract int op();
  19. }
  20.  
  21. class Suma extends OpBinaria {
  22.    public int op(){
  23.        return x + y;
  24.    }
  25. }
  26.  
  27. class Resta extends OpBinaria {
  28.    public int op(){
  29.        return x - y;
  30.    }
  31. }
  32.  


En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Función que retorna objetos de "clases" extendidas de una abstracta
« Respuesta #1 en: 13 Octubre 2010, 20:24 pm »

Cada vez que me paso por este foro aclaro lo mismo, no se programar en Java, así que si digo una burrada avisen :xD

Ahí estas devolviendo una instancia de clase de tipo suma, y dado que necesitas devolver una de tipo opBinaria, alcanzaría con que castees :D

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Función que retorna objetos de "clases" extendidas de una abstracta
« Respuesta #2 en: 13 Octubre 2010, 20:42 pm »

Como dice Nov, aunque no es un cast como tal, el termino correcto es Boxing, el cual consiste en "empacar" la referencia en una de sus clases bases, o simplemente en object.

Sería algo así:
Código
  1. private OpBinaria obtObjeto(){
  2.        if(op == 1){
  3.            Suma suma = new Suma();
  4.            return (OpBinaria )suma;
  5.        }
  6.    }
  7.  

Un saludo.
En línea

16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: Función que retorna objetos de "clases" extendidas de una abstracta
« Respuesta #3 en: 13 Octubre 2010, 20:58 pm »

Gracias!. Hay que ver que vengo del C y no ocurrirseme un casting, ("boxing" aquí, buen apunte :) )
Me tragué que no funcionaba también al probarlo por que ahí solo estaba evaluando una de las opciones, osea si op != 1 eso no retorna nada :D Y claro aun con el box/cast pues eclipse me dice que para mi padre si estaría bien :D
En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Función que retorna objetos de "clases" extendidas de una abstracta
« Respuesta #4 en: 14 Octubre 2010, 01:39 am »

Si, y también se puede hacer lo contrario, es decir, unboxing, que lo que haría en tu caso es sacar la clase Suma de OpBinaria: return (Suma)obj; obviamente siempre tienes que validar si esa referencia contiene boxeado un objeto Suma.

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Función que retorna el valor de retorno de otra función
Programación C/C++
naderST 7 5,125 Último mensaje 7 Diciembre 2011, 23:45 pm
por naderST
conseguir objetos "cercanos" en una tabla en memoria
Programación General
Kase 1 1,889 Último mensaje 4 Septiembre 2013, 17:04 pm
por Stakewinner00
Diferencias entre funcion que retorna y no retorna.
Programación C/C++
FKT 7 4,344 Último mensaje 21 Agosto 2015, 00:31 am
por FKT
[javascript] el metodo lenght me retorna "undefined" ?
Scripting
br7 2 2,593 Último mensaje 5 Marzo 2016, 18:16 pm
por br7
Busco paper lenguaje C orientado a "objetos"
Programación C/C++
n-utz 4 2,179 Último mensaje 8 Noviembre 2016, 20:00 pm
por Slava_TZD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines