Bennu Game Development

Foros en Español => Offtopic => Topic started by: Drumpi on January 29, 2011, 01:06:43 AM

Title: Dudas de Java
Post by: Drumpi on January 29, 2011, 01:06:43 AM
Hola a todos:

Pues nada, como sabeis (porque soy más pesado que un Jumbo en la superficie de Júpiter :D) estoy aprendiendo Java por mi cuenta.
No, no he dejado Bennu, sólo busco una manera de llenar el depósito cuando se vacía, y de paso, aprendo cosas nuevas :D
Y claro, como es normal, me surgen dudas, así que las voy a poner en este hilo a medida que me vayan surgiendo, para tenerlo todo recogidito y ordenado. Esto no quiere decir que si alguno de vosotros también tiene dudas, no las pueda poner aquí, al contrario, el hilo está abierto a todas las inquietudes acerca del lenguaje.

Pero no olvidemos que aun seguimos en el foro de programación de Bennu :D

Antes de plantear mi duda, un par de párrafos: uno informativo (lectura opcional) y otro de opinión (lectura no necesaria).
El curso que estoy siguiendo es el de la web www.javaya.com.ar, que es un manual muy sencillo para todos los niveles, quizás demasiado bajo, porque el que sepa algo de programación se va a aburrir como un espectador de call-tv, sobre todo por la tanda (muy necesaria, por cierto) de ejercicios.

(Opinión). Aun no he avanzado demasiado en el curso, pero empiezo a vislumbrar por qué los autodenominados "informáticos de verdad" odian Java, y es que en según qué aspectos, facilita mucho la vida. Por ejemplo, tiene funciones para leer palabras de forma independiente, o frases, o enteros... cosas que en lenguajes como C requieren unas cuantas líneas y un buen control del buffer de teclado. También, declarar un array es algo más complicado, pero se puede crear en cualquier momento con cualquier longitud (se puede especificar el tamaño con un valor que se le pase por teclado), cuando de otra forma tienes que aprender a manejar punteros sí o sí.

Bien, vamos con la duda. El caso es que estoy terminando con los capítulos sobre clases (aquí Splinter ha dejado de leer ;D) y no le veo demasiado problema, no entiendo por qué tanto odio, si poco más o menos es lo que se hace con los procesos de Bennu, o siendo más precisos, con los textos en Bennu.
Sin embargo, a la hora de declarar los atributos (variables locales a toda la clase), siempre se han declarado como "private", aunque sé que se pueden declarar "public":
private int variable;
Sin embargo, en un ejemplo se ha omitido la palabra private, quedando su declaración como:
int variable;
Y el compilador no se ha quejado ¿entonces se puede hacer así? ¿por defecto se declaran como "private" o como "public"?
Title: Re: Dudas de Java
Post by: Rein (K´)ah Al-Ghul on January 29, 2011, 02:53:37 AM
no tengo idea, de como se declaran si se omite "private", pero porque lo declaras como int en lugar de Integer, la ultima es una clase y viene con todos los beneficios de las mismas...
Title: Re: Dudas de Java
Post by: Noivern on January 29, 2011, 08:36:08 AM
Cuando no se declara modificador de acceso de una variable esta queda por defecto package-protected. Esto significa que la variable es pública para todas las clases pertenecientes al mismo package, pero para el resto del mundo, incluida las hijas son privadas y no pueden acceder. Es muy parecido al modificador protected, que aparte de esto si garantiza acceso a las clases hijas.

Fuente:
http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Hasta ahora pensaba que si no se declaraba era como si se pusiera protected, fail u.u

Por cierto, al menos yo, usalmente no uso Integer pero si int, es más el Integer casi siempre lo he tenido que utilizar para métodos puntuales que son estáticos como el Integer.ParseInt() por lo que no es necesario un objeto Integer para utilizarlo.

Vaya "locos" que son los informáticos de verdad que no les gusta algo que les facilita la vida xD
Title: Re: Dudas de Java
Post by: Yawin on January 29, 2011, 01:10:04 PM
No recuerdo mucho del java, porque sin ser informático de verdad lo odio; pero, creo que si no lo especificas, se declara como privada.
Title: Re: Dudas de Java
Post by: Noivern on January 29, 2011, 04:17:11 PM
Quote from: yawin on January 29, 2011, 01:10:04 PM
No recuerdo mucho del java, porque sin ser informático de verdad lo odio; pero, creo que si no lo especificas, se declara como privada.
falso :P
Title: Re: Dudas de Java
Post by: Drumpi on January 29, 2011, 08:14:22 PM
Muchas gracias por la ayuda.
Lo de public, private o protected, yo sólo conocía public y private, en parte por Benu, en parte por lo poquísimo que vimos de clases en la facultad (de forma teórica, de pasada y usando pseudo-lenguaje). Supongo que esto se verá un poco más adelante.
Igual pasa con Int e Integer: de momento (tutorial 20) los tipos que se han usado son int, float y String, supongo que para no marear al principio demasiado con la teoría, porque en C sí que lo vimos y vaya peñazo hasta que empezamos a ver el "hola mundo".

Respecto a los "informáticos de verdad", bueno, es una subespecie de informáticos que abunda en demasía en mi círculo de conocidos: suelen ser estudiantes de informática o recién licenciados, también son los primeros que se quejan sobre el "intrusismo laboral" y sólo programan lo que se les dice. Suelen tener conocimientos de HW justitos, lo suficiente para conocer los nuevos dispositivos comerciales, las placas que se venden y los periféricos más potentes del mercado :D :D :D
Title: Re: Dudas de Java
Post by: Yawin on January 29, 2011, 09:55:01 PM
Quote from: Noivern on January 29, 2011, 04:17:11 PM
Quote from: yawin on January 29, 2011, 01:10:04 PM
No recuerdo mucho del java, porque sin ser informático de verdad lo odio; pero, creo que si no lo especificas, se declara como privada.
falso :P

Como ya he dicho, apenas recuerdo nada de Java xD Me parece una aberración. Una burda  copia de C++, pero que tampoco se parece.
Title: Re: Dudas de Java
Post by: Noivern on January 29, 2011, 10:09:31 PM
Quote from: yawin on January 29, 2011, 09:55:01 PM
Quote from: Noivern on January 29, 2011, 04:17:11 PM
Quote from: yawin on January 29, 2011, 01:10:04 PM
No recuerdo mucho del java, porque sin ser informático de verdad lo odio; pero, creo que si no lo especificas, se declara como privada.
falso :P

Como ya he dicho, apenas recuerdo nada de Java xD Me parece una aberración. Una burda  copia de C++, pero que tampoco se parece.

Yo creo que no hay que cerrarse a nada, pues te puede ser una fuente de trabajo hoy en día. A mi me gusta java en general por lo relativamente simple de llegar a resultados. Lo que a veces me molesta es tener que dar mil vueltas en la API para encontrar como se utilizan algunos objetos, especialmente cuando algún método loco por ahí retorna una clase base abstracta. De todos modos me gustaría aprender algo de C++, pero hoy por hoy prefiero Android que es... oh sorpresa, sintaxis java xD (quizás que carajo irá a pasar con android y las demandas a google por "inspirarse al pie de la letra" de la tecnología java de SUN -fuck you oracle troll de pantentes :P - )

------

Con respecto a los tipos de variables, uhm creo que es un tanto especial ya que se mezclan los primitivos con las clases.
Primitivos serían los clasicos boolean, byte, short, int, long, float, double y char. Obviamente no tienen métodos asociados. TODO LO DEMÁS son clases.
Title: Re: Dudas de Java
Post by: Drumpi on January 30, 2011, 01:24:46 AM
Por cierto, me estoy planteando cuando termine echarle un vistazo a J2EE y J2ME ¿hay mucha diferencia o sabiendo Java normal ya me vale? ¿se puede usar java en las páginas web o se usa javascript (y cuales serían las diferencias).
Title: Re: Dudas de Java
Post by: Rein (K´)ah Al-Ghul on January 30, 2011, 01:49:03 AM
Quote from: Drumpi on January 30, 2011, 01:24:46 AM
Por cierto, me estoy planteando cuando termine echarle un vistazo a J2EE y J2ME ¿hay mucha diferencia o sabiendo Java normal ya me vale? ¿se puede usar java en las páginas web o se usa javascript (y cuales serían las diferencias).
ME, por ser version ser para moviles tiene menos clases, creo que menos tipos de datos/clases q ocupen su lugar...
por lo demas debe ser igual.

nunca me meti del todo con javascript, pero se que acompañan al archivo html, java en si, se encuentra mas debajo si hay que hacer algo con una base de datos por ejemplo
Title: Re: Dudas de Java
Post by: FreeYourMind on January 30, 2011, 01:53:28 AM
j2ee, enterprise edition, es java normal, el j2me, micro edition, es para moviles, y como calcularas esta adaptado a estos con menos recursos, pero al dia de hoy son terminos mas obsoletos que otra cosa, ya que los moviles ya no son lo que eran xDDD

Java sirve para hacer paginas tb, la logica en el lado del serivodr como conexión a BD, sprint, hibernate, etc...
Javascript, no es javam pero si un java retocado, y del lado del cliente, javascript no utiliza mucho la filosofia de objetos, aunque tambien puede usarlos (jsom).
Title: Re: Dudas de Java
Post by: Yawin on January 30, 2011, 11:34:18 AM
En la web puedes usar Java en forma de Javaapplets. Este es un applet que tuve que hacer en clase hace tiempo:

http://pensarescompartir.com/lahsoft/ajax/VisorFichero.html
Title: Re: Dudas de Java
Post by: Drumpi on January 31, 2011, 01:53:08 AM
Ah, guay, una cosa menos que estudiar :D
Nah, es que vi una oferta en la que pedían conocimientos de J2ME y me quedé así :O Y el otro día, realizando una copia de mis copias de seguridad (sí, también se hacen, sobre todo cuando los discos tienen ya sus añitos ;D) me encontré un PDF sobre el lenguaje, creado por un profesor de no se qué facultad de informática.

Más adelante espero poder renovar la web, añadiendo en la parte superior menús desplegables, contadores de descargas y visitas, y cosas así (quien sabe, lo mismo meto allí mis juegos para venderlos ;D). Y también un Blog con lo que me recomendasteis hace tiempo, que veo que la cosa se queda muy organizada, y puedo tener diversos hilos según temática: proyectos, juegos paperactivos, chorradas...
Title: Re: Dudas de Java
Post by: Noivern on January 31, 2011, 02:24:28 AM
Osea de lo que tienes que estudiar es más bien el comportamiento de Java. Como decía antes, cuando domines el comportamiento, pues pasarte a J2ME o J2EE es solo mirar las APIs que necesites para desarrollar.
Title: Re: Dudas de Java
Post by: Drumpi on February 01, 2011, 02:03:35 AM
Lo que sí que estoy viendo es que todo el lenguaje java se resume a usar objetos, uno tras otro, hasta para lo más simple. No me extraña que no les guste a los "informáticos de verdad", porque ellos sólo programan en C (ya que en C++ no se puede programar sin objetos :D).

Lo cierto es que en ese aspecto me recuerda a VHDL, ya que el lenguaje en si casi no existe, se limita a usar "arquitecturas" hasta para definir los tipos de datos.

Pero ya empezamos con las cosas raras: matrices irregulares, ¡toma ya!
Hombre, el concepto lo entiendo perfectamente, es sencillo (si consigues no liarte entre tanto corchete ;D), pero hay que reconocer que es, cuanto menos, un derechazo al rostro cuando te lo encuentras la primera vez.
Title: Re: Dudas de Java
Post by: Noivern on February 01, 2011, 02:09:12 AM
No sabía eso de las matrices irregulares, acabo de googlear y es como un arreglo de arreglos... y estos últimos de tamaño variable distintos entre si... en escasa experiencia, matrices las he usado en... a ver... ¿experimentos de aprendizaje? voy a puras colecciones ArrayList y HashMap, soy un informático de mentira xD
Title: Re: Dudas de Java
Post by: Drumpi on February 01, 2011, 02:27:35 AM
No, sólo dan un uso a la capacidad de poder asignar una cantidad de memoria indeterminada a priori a una variable. Es decir, un array no es más que asignar X espacios de memoria a una variable:

private int[] datos;
...
datos=new int[20];

Pues si a una posición de dicho array se le asigna otras Y posiciones de memoria, pues listo:

private int[][] datos;
...
datos=new int[20];
datos[0]=new int[3];
datos[1]=new int[5];
...

Así tenemos una primera fila con 3 posiciones, una segunda con 5... así hasta 20 filas.
Normalmente, en C y muchos lenguajes, esta memoria se reserva en tiempo de compilación, prácticamente, y se guardan X posiciones de memoria consecutivas para el array (X*Y para las matrices).
Pero Java asigna grupos de memoria. Por decirlo de forma sencilla, sólo guarda filas, y una matriz no es más que una fila de filas (es como tener una lista enlazada de listas enlazadas), y estas últimas no tienen que tener todas el mismo tamaño. Esto consumirá algo más de memoria y algo más de cálculos para hayar la posición, supongo que por eso el rendimiento cae respecto a C.

Lo de "programadores de verdad" no te lo tomes literalmente, es un mote que le he puesto a esta gente. Los podría haber llamado "los que presumen de saber programar sin tener ni idea de qué es un ordenador" perfectamente :D :D :D
Title: Re: Dudas de Java
Post by: Noivern on February 02, 2011, 02:24:56 AM
¿y te gustó el sistema?
Si es así, hechale una ojeada a los ArrayList y los Iterator :D
Title: Re: Dudas de Java
Post by: Drumpi on February 02, 2011, 08:38:39 PM
Ni me gusta ni me deja de gustar, porque de momento no le veo la utilidad práctica a la mitad de las cosas que veo ^^U
Por ejemplo, acabo de ver la herencia. No sé cómo será en C, pero en java, a un "objeto" (clase) se le definen unos atributos y una serie de funciones. Luego se crea otra que "depende" de la primera y añade nuevos atributos y funciones. En este caso ¿No es más fácil añadir dichas funciones a la primera clase y listo? tener dos objetos distintos con funciones del mismo nombre que hagan cosas distintas puede liar (por lo menos, el ejemplo que he hecho, una clase OPERACIONES con subclases SUMA y RESTA que añaden la función OPERAR, en un caso suma dos valores y en el otro los restan).

Pero bueno, tomo notas para cuando acabe el curso, porque veo que me voy a quedar en lo básico, que es lo que hace cualquier lenguaje.
Ahora he empezado lo divertido: trabajar con ventanas. Veo muchas funciones por ahí, a ver si hay alguna que elimine el fondo de la ventana y puedo hacer cosas entretenidas :D
Nah, de momento veo cada vez más posible hacer el compilador de Venturer en Java, por sencillo, no por otra cosa :P
Title: Re: Dudas de Java
Post by: Rein (K´)ah Al-Ghul on February 02, 2011, 09:38:07 PM
Lo mejor en java es usar todos objetos, aun reemplazando los tipos primitivos.
El tema ese de la herencia es que TODO ser un objeto, por lo tanto heredar de otro objeto, salve al todo poderoso Object el objeto original :P
La herencia multiple no existe en java, para añadir comportamiento se necesitan de las interfaces, que obligan a implementar metodos.
Title: Re: Dudas de Java
Post by: Yawin on February 02, 2011, 09:58:39 PM
Quote from: Drumpi on February 02, 2011, 08:38:39 PM
Ni me gusta ni me deja de gustar, porque de momento no le veo la utilidad práctica a la mitad de las cosas que veo ^^U
Por ejemplo, acabo de ver la herencia. No sé cómo será en C, pero en java, a un "objeto" (clase) se le definen unos atributos y una serie de funciones. Luego se crea otra que "depende" de la primera y añade nuevos atributos y funciones. En este caso ¿No es más fácil añadir dichas funciones a la primera clase y listo? tener dos objetos distintos con funciones del mismo nombre que hagan cosas distintas puede liar (por lo menos, el ejemplo que he hecho, una clase OPERACIONES con subclases SUMA y RESTA que añaden la función OPERAR, en un caso suma dos valores y en el otro los restan).

Pero bueno, tomo notas para cuando acabe el curso, porque veo que me voy a quedar en lo básico, que es lo que hace cualquier lenguaje.
Ahora he empezado lo divertido: trabajar con ventanas. Veo muchas funciones por ahí, a ver si hay alguna que elimine el fondo de la ventana y puedo hacer cosas entretenidas :D
Nah, de momento veo cada vez más posible hacer el compilador de Venturer en Java, por sencillo, no por otra cosa :P

La herencia es muy facil de entender su utilidad. Imagina que estás haciendo un programa para gestionar el almacén de la Fnac. Necesitas gestionar los productos. Darlos de alta etc... No puedes hacer un objeto genérico llamado producto, porque no todos los productos tiene los mismos datos. Los dvd's no tienen editorial, pero los libros no suelen llevar región. Para eso, creas una clase llamada producto, que tiene todo aquello que todos los productos tienen en común y luego cuando creas el objeto libro, haces que herede de la clase producto.

Imagina que dos años después al dueño de la fnac se le ocurre vender un producto nuevo, pues el programador que esté en ese momento, sólo tiene que crear un objeto nuevoproducto y heredar la clase producto que ya diseñaste tu.
Title: Re: Dudas de Java
Post by: Drumpi on February 13, 2011, 01:59:03 AM
Pos nada, ya he terminado el tutorial de www.javaya.com.ar (anótatelo fede, que se me olvidó parártelo ^^U). He tardado creo que tres semanas en hacer los 54 temas con un total de unos 150 proyectos simples, más o menos, entre ejemplos y ejercicios.
Y he aprendido lo mismo que me enseñaron en el primer año de facultad sobre C++ (o incluso algo más) ;D

La guinda la han puesto un par de ejercicios de manejo de árboles binarios ordenados, pero el que más me ha gustado ha sido el poder crear mi primer juego: el buscaminas ;D
Vaale, es un juego muy tonto y muy simple, pero es el ejemplo más complejo del temario y lo he hecho un poco "a mi estilo" y le he añadido algunas cosillas mías (tiempo de desarrollo, un día ^^U).

Me gustaría poder enseñároslo, pero una de esas "pequeñas" cosas que no te explica el tutorial es a obtener un fichero ejecutable de alguna forma ^^U Sé que el código está en un fichero .java, y lo que se genera en un fichero .class que no sé ni como manejar :P

En fin, he empezado otro tutorial más completo, en el que seguro que se explica eso y mucho más. Sólo espero que el estar basado en java 1.2 no sea un lastre.
Title: Re: Dudas de Java
Post by: Noivern on February 13, 2011, 03:31:27 AM
Mira, en el netbeans se puede generar el paquete binario distribuible con la opción "build main project" o con la "clean and build main project" y te deja tu archivo "nombreAplicacion.jar" en la carpeta dist del proyecto. Si incluiste librerías extra, se crea una carpeta con las librerias.

Uhm... en el eclipse en el menu project está la opción de build pero no sé como se comportará en proyectos java, no tengo ni idea que  carpetas genera. Al estar configurado para trabajar con el sdk de android el binario me lo crea automáticamente al compilar y lo deja en la carpeta bin del proyecto. Quizás es similar en java. Lo que es seguro, es que debes buscar tu archivo .jar en alguna carpeta del proyecto :P

Por cierto drumpi, he mirado a la rápida la última página del curso que hiciste, la que habla de listas. Interesante, pero lo veo muy C y no Java. Aclaro que soy un noob absoluto con punteros!!.
Por lo que vi, en ese apartado estan reinventando la rueda...

Mira esta clase tan maravillosa que hay en la API:
http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html

Te olvidas de los punteros con esa. Ya tiene todos los métodos que tenias que hacer a mano, puede ir cualquier objeto dentro y además si implementas en tus objetos algunas interfaces, "Comparable" creo que era, no lo recuerdo ahora, puedes utilizar ciertos métodos estáticos que están para utilizar con colecciones para ordenar automáticamente según tu criterio tus objetos. Además existen otros tipos de listas más eficientes como los HashMap que se utilizan con una key única para que te devuelva un objeto antes ingresado.

No puedo ser más específico puesto que lo utilicé hace tiempo en un reproductor de mp3 que hice en java utilizando unas librerias hechas en java para leer y reproducir un mp3 frame a frame; incluso tuve que modificarla y recompilarla para poder agregar un control de volumen ;D. Eso si, nunca lo terminé xD. Me faltó sincronizar los hilos para q cuando le das a pausa se pause inmediatamente y dar una interfaz más acabada pero es 100% funcional.


PD : ¿tienes algun equipo con android? D:
PD2: Si quieres cuelgo el reproductor de mp3 jojo :3
Title: Re: Dudas de Java
Post by: Drumpi on February 13, 2011, 04:05:44 PM
Como dije en su momento, es un tutorial para los que no tienen ni idea de programar, así que te enseñan todo lo que un programador necesita saber, punteros incluidos... aunque claro, en Java eso no existe como tal ^^U
De todas maneras me ha venido de miedo para repasar lo que sabía de C++, que hacía años que no lo tocaba.

Obviamente, ahora necesito uno más completo, y empollarme todas las librerías habidas y por haber, que es lo que acabo de empezar ahora.

Lo del binario no tengo ni idea, yo siempre le doy al boton de "build and run" y se me ejecuta, y bicheando por las carpetas he encontrado las dos que os digo. Tendré que revisar las opciones a ver qué encuentro, aunque tenía la esperanza de verlo en alguno de los dos tutoriales. Guglearé un poco.

Lo del tema de sonido me interesa, pero por el momento es demasiado avanzado para mi nivel actual. Es más, me gustaría hacer una para Bennu en C, pero aun tengo que repasar algunas cosillas en C y averiguar cómo trabajar con sonido en PC. Quiero crear filtros, efectos simples y aumentar las capacidades de reproducción de música modular, que de momento son poco menos que básicas (reproducir, pausar y parar).


Y no, no tengo nada Android. Tengo en el punto de mira un móvil Xperia X8, para el que aun me faltan unos cuantos puntos, así que mientras mato el tiempo con cursos, tutoriales y java clásico ;D
Title: Re: Dudas de Java
Post by: Drumpi on February 17, 2011, 12:50:39 AM
Le estoy dando vueltas a mi primer programa "serio" en Java, y tengo mis dudas de cómo llevarlo a cabo.

Os cuento, se trataría de un nuevo compilador para Venturer ¿Se podría hacer en Bennu? sí, pero con Java lo haría cinco veces más rápido (tranquilo, Splinter, el intérprete seguirá siendo en Bennu ;) ).
Bien, la idea es tener un area de texto en el que ir viendo el código, según se pulsen los botones y todo lo demás. Cada linea de código tendrá asociada una estructura de datos (una clase) en la que irá la linea de texto a mostrar en dicho recuadro.

El problema es que el area de texto trata su contenido como una única línea de texto. Cuando quiero convertir un nuevo nodo creado con un botón en una nueva linea de ese cuadro no hay problema (reconstruyo todo el texto en base a cada línea de la lista de nodos), pero ¿y si quiero crear la nueva línea en dicho cuadro de texto? ¿o editar alguna de ellas?
¿Debería volver a crear la lista de nodos en base a cada pulsación de un botón en dicho cuadro? ¿Hay una forma de hacerlo sólo cuando se pulse intro? eso va bien para líneas nuevas, pero no para editarlas.

Lo único que se me ocurre para hacerlo es que no se pueda escribir en el cuadro de texto, y que haya que pulsar un botón para extraer la línea de texto y editarla en una ventana distinta. Otra sería no usar un cuadro de texto y usar una lista de botones con barra de scroll.

Otra cosa que me atormenta es que cada nodo de la lista debería usar una clase distinta, una almacenaría datos sobre gráficos (FPG, graph, posición...), otra sobre música (canción, repeticiones...) y sólo se crear listas homogeneas, no se crear "punteros" a clases indefinidas, sólo se:

class Nodo {
int valor;
Nodo sig;
}

Nodo nuevo=new Nodo();
nuevo.sig=new Nodo():
etc...
Title: Re: Dudas de Java
Post by: Noivern on February 17, 2011, 03:14:25 AM
mmm crea la lista de tipo Object y luego debes comprobar de que tipo es el objeto extraido de la lista con el operador instanceof.

if (lista.obtenerObjeto() instanceof TuClase) {
  //logica
}

En la parte de la logica tienes que hacer un casting a TuClase. Mira aqui hay un par de ejemplos.
http://aprendiendojava.blogspot.com/2007/10/operador-instanceof.html
Title: Re: Dudas de Java
Post by: Drumpi on February 17, 2011, 02:07:18 PM
Supongo que te estas refiriendo al uso de las funciones de java.list.*, las cuales no conozco ^^U

Tengo que mirar cómo funciona eso, pero de momento estoy haciéndolo todo "a mano" :P
Title: Re: Dudas de Java
Post by: Noivern on February 17, 2011, 05:51:22 PM
nooo, me refería a tu propia lista, le inventé el nombre al metodo con el que tu extraes un objeto.
El instanceof es un operador.
Title: Re: Dudas de Java
Post by: Drumpi on February 17, 2011, 08:15:43 PM
Es que no lo entiendo. Vamos a ver, pongo un ejemplo: supongamos que tengo una clase que controla la lista de comandos como la que sigue:

public class ListaComandos {

    class Grafico {
        int x,y,z;
        int file, graph;
        String sComando;
        ??? sig;
    }
   
    class Sonido {
        int numero;
        int repeticiones;
        String sCoamndo;
        ??? sig;
    }
   
    private ??? raiz;
   
    (...)
}


Bien, entonces, dentro de esta clase tengo una serie de métodos que inicializa la lista, añade nodos, borra nodos, etc.
Pero claro, el problema es que el primer nodo puede ser de la clase Grafico, el segundo también de clase Gráfico, pero el tercero puede ser de clase Sonido, y por tanto no puedo poner los punteros raiz y sig como tipos Grafico o Sonido (como venía haciendo hasta ahora, que todos los nodos eran de la misma clase).


¿Es posible que haya entendido por lo poco que he leido que defina raiz como:

private Object raiz;

y de esa forma le pueda asignar cualquier tipo de clase, y luego usar getClass o algo similar para saber de qué tipo es el nodo y poder actuar en consecuencia? (cambiar coordenadas, leer número de repeticiones, etc...).
Title: Re: Dudas de Java
Post by: Rein (K´)ah Al-Ghul on February 17, 2011, 08:31:12 PM
Drumpi deberias usar ArrayList para "coleccionar" la lista que intentas hacer con los punteros (que no existen en java :P )
supongo q habria una super Clase llamada Recurso del cual heredan tanto grafico como sonido, asi q si el arrayList colecciona Recurso...

PD: no te convendria usar la Class Integer en lugar del tipo de dato primitivo int?
Title: Re: Dudas de Java
Post by: Noivern on February 17, 2011, 08:39:30 PM
Si, tu raiz debe ser capaz de almacenar cualquier objeto, es decir trabajar con Object. Cualquier cosa que metas dentro, en el método como paramentro de entrada o el retorno debe ser un Object; o bien sobrecargar un método que reciba los distintos tipos de clases y al final para guardar haces un casting a Object. Finalmente haces la comprobacion como dices con getClass o con la que te mencioné instanceof y aplicas la lógica.

Por cierto, te recomiendo ENCARECIDAMENTE que separes tus clases en archivos distintos y las agrupes en un package para que se puedan reutilizar más adelante y sea más simple la lectura del código. La verdad que cuando veo clases definidas dentro de clases me dan ganas de sacarme los ojos xD, la única excepcion es cuando hay que implementar algun listener donde si o si hay que definir la clase en el momento.

Por cierto si quieres trabajar con archivos, mira la clase File xD

Quote
Drumpi deberias usar ArrayList para "coleccionar" la lista que intentas hacer con los punteros (que no existen en java  )
supongo q habria una super Clase llamada Recurso del cual heredan tanto grafico como sonido, asi q si el arrayList colecciona Recurso...

PD: no te convendria usar la Class Integer en lugar del tipo de dato primitivo int?
Y lo mismo le vengo diciendo hace rato con la ArrayList xDDD
Title: Re: Dudas de Java
Post by: Fede on February 17, 2011, 09:31:07 PM
Menos mal que Splinter hizo el Bennu. :D

Dios, que cacao mental intentar seguiros.
Title: Re: Dudas de Java
Post by: Drumpi on February 18, 2011, 06:55:27 PM
Juas, Fede, tranqui, que yo todavía me estoy acostumbrando ^^U

Tranquilo, noivern, que de momento es lo que hago, cada clase en su fichero, salvo estos porque es como he aprendido a manejar listas enlazadas (básicamente son contenedores de datos).

Y cuando llegue a las arrayList, las usaré, dadme tiempo, que apenas estoy con la herencia básica en el nuevo tutorial (sí, la herencia es uno de los primeros temas). A menos que conozcais un tutorial de uso de las mismas, porque lo que he mirado en la web de sun es poco menos que críptico (vale, nombre de las funciones, pero ni una mala descripción ni manual).
Title: Re: Dudas de Java
Post by: Drumpi on March 07, 2011, 01:43:34 PM
Bueno, vuelvo a la carga.

Efectivamente, lo que necesito son las ArrayList, porque almacenan clases tipo object, o sea, de cualquier tipo :D
Pero para lo que yo quiero hacer ¿no sería mejor un LinkedList? ya que puedo meter elementos en medio de la lista, y porque estoy metiendo y sacando elementos constantemente ¿o aun así se usa el arrayList?.
Title: Re: Dudas de Java
Post by: DCelso on March 07, 2011, 05:50:39 PM
está mal el diseño, está claro que todos son object, pero no es lo correcto abusar de esto.
Tienes que crear una clase padre de la que hereden todas tus clases raras y que tengan en común los métodos y variables que quieras usar en el bucle.
luego puedes hacer un ArrayList<clase_padre> lista=new ArrayList(); o usar otra clase serializable como Vector.
y aqui ya puedes insertar tus clases raras con .add(miobjetodemiclasequeheredade_clase_padre); y usarlas como clases padre.

Si usas java 1.4, pues no puedes usar plantillas, tendrías que ahormar a clase_padre cada vez que extraigas un objeto de la lista.
Title: Re: Dudas de Java
Post by: Drumpi on March 08, 2011, 01:03:44 AM
Mi idea era poder hacer una lista de diversas clases, unas 40 distintas, ya que son los comandos que tengo, y cada uno es de su padre y de su madre.
Una de las cosas que tenía en mente es la que dices, tener una clase "comando" con un par de variables comunes, como son la String que se escribiría en la zona de código, o el int que indica qué comando es, y de ahí derivar clases como "cargar_musica" con un int, "todos_textos" con tres ints...
Lo cierto es que la versión actual la puedo reducir a cinco clases, ya que, actualmente, todos los comandos tienen de 1 a 5 parámetros, pero la idea es que en un futuro se puedan implementar comandos con un número indeterminado de parámetros (por ejemplo, una lista de números para crear una animación).

Además, estas clases no implementan ningún método, son simples contenedores de datos. Tenía que hacer otra clase que manejase la lista enlazada, pero si la LinkedList ya tiene dichos métodos, pues ni eso.

Por cierto ¿por qué todo el mundo me dice que implemente una ArrayList? ¿por qué no una LinkedList? ¿cuándo se usan las LinkedList?

Respecto a lo de plantillas, ni idea de lo que son, el manual que uso habla de java 1.1 y 1.2 y alguna referencia a librerías que se añadieron después como estándar.
Title: Re: Dudas de Java
Post by: DCelso on April 20, 2011, 02:40:56 PM
Drumpi, ya que te veo metido en JAVA, tengo una duda en JAVA grandísima y to facilona pero no encuentro una forma de hacerla de una manera limpia y rápida.
Tengo un array de bytes con la información de una imagen en modo 32 bits, es decir cada 4 bits representan un pixel, pues la duda es mostrar la imagen en pantalla usando swing.
imagínate algo sencillote, una imagen 2x2 con un byte[] que contienen 32 bytes, por ejemplo dos negros y dos blancos.
osea byte[] data = {255,255,255,255,255,255,255,255,255,0,0,0,255,0,0,0 }. y quiero meterlo en la imagen de un label.
jlabel1.seticon(imagen).

Pues resulta que hay una función createimiagen en la clase tookit de java pero no consigo ver su uso y no encuentro tutos para ayudarme.
Al final la forma cutre ha sido crear un bufferedimage y asignar pixel a pixel con setpixel(x,y, color), claro funcionar funciona pero hay que hacer el bucle por el ancho y el alto y en imágenes largas pues se tiraría la vida :D.
Quédate con el problema solo y a ver como se te ocurre a ti resolverlo, bueno tu o quien sea :D.
Title: Re: Dudas de Java
Post by: Drumpi on April 20, 2011, 05:15:52 PM
Pues con swing aún no me he metido, pero en teoría sería la forma de hacerlo, pixel a pixel (de ahí el loading de los juegos: la copia en memoria de los datos y la construcción de los gráficos), si no, tendrías que hayar el puntero a ambas zonas de memoria y buscar una función de copia de memoria (algo como memcpy o similar).

Si no, tengo entendido que java permite la carga de gráficos en png y gif, por lo que sería más sencillo tirar por ahí.

De todas maneras, tengo un manual de swing (swing.pdf) llamado "Swing y JFC (Java Foundation Classes)", hecho por la propia Sun, y traducido al español por Juan Antonio Palos (Ozito) que lo encontré por internet. Si no lo encuentras, te lo puedo mandar al correo que me digas, que son 2MB de pdf (son 204 páginas, por lo que tiene que venir completito, son más que mi actual curso de java :D).