PRÁCTICA 10

PRÁCTICA 10

El día que tocaba la práctica 10 nos dedicamos a avanzar un poquito el juego, porque el profesor consideró que está práctica era demasiado!

Así que, estuvimos viendo las dudas y cacharreando un poco con los eventos, los botones, etc.

De todas formas, nosotras nos hemos mirado un pokillo la práctica 10 y hemos sacado algunas conclusiones.

- En el ejericio 1 te intentan hacer ver que tu CPU cuando está en fase de ejecución de un proceso, ningún otro proceso está ejecutándose. Cualquier tarea tiene que esperar. Es decir, que la CPU tiene un sistema operativo monoproceso (Windows).

- En el ejercicio 2, nos hablan de los threads o hilos de ejecución, que es un tipo de proceso especial que comparte la memoria.

( Para lanzar un nuevo thread desde un programa se crea un nuevo objeto de la clase java.lang.Thread y se invoca a su método Thread.start()).

- En el ejercicio 3 explican los peligros de los hilos. Cuando dos o más threads intentan acceder al mismo recurso lo hacen por turnos, el problema es que no lo hacen en un orden determinado, por ello hay que sincronizar el acceso. Así surgen las condiciones de carrera.

Sabemos que este comentario no dice gran cosa, tan solo son unos conceptillos, es que los exámenes seacercan y la entrega del juego esta aquí YA! Bueno, al menos miramos las prácticas poco a poco.

Práctica 9

¿Qué es una interfaz gráfica? Lo que comunica el ordenador con el usuario.

¿Cuándo es útil y cuando no es útil un interfaz gráfico?

El interfaz gráfico sirve para que el usuario esté informado de lo que está haciendo el ordenador en un determinado momento.

 

Ejercicio 1:

 

-         Los primeros apartados sirven para ver como funciona el código.

-         5. En este apartado solo cambiamos el tamaño:

frame.setSize(100,50);

Cambiamos este tamaño por:

frame.setSize(400,200);

 

-         6. Tenemos que poner el fondo de la etiqueta de color azul:

 

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
 
class HelloWorldGUI {
    public static void main(String args[]) {
        JFrame frame = new JFrame("HelloWorldGUI window title");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        JPanel contentPane = (JPanel) frame.getContentPane();
        JLabel label = new JLabel("Hello World!");
        label.set.Background(Color.BLUE);
        label.setOpaque(true);
 
        contentPane.add(label);
 
        frame.setSize(100,50);
        frame.setVisible(true);
    }
}

 

 

Ejercicio 2

 

-         2. Tenemos que hacer que la ventana no se cierre, para ello ponemos la siguiente línea:

 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

 

-         3. Para que no utilice ninguna decoración del manejador de ventana, tenemos que poner:

frame.setUndecorated(true)

 

De momento no hemos quedado aquí!! Porque las dos horas no nos dieron para más… Intentaremos trabajar en ello, pero ahora ya no hay mucho tiempo! :S

Práctica 8

Tablas Hash:

Es una especie de tabla en la que podemos insertar y sacar objetos. Cogemos un objeto de un determinado nombre, ese nombre es Hash(= resumen).

Comparamos el array con la cola y con la tabla. El tiempo para buscar algo en un array es nt/2 siendo n el número de casillas ocupadas. El tiempo de inserción en una lista y en un array es cte. En la lista creamos el objeto pero lo colocamos el primero. El tiempo que tardo en buscar a una persona en una lista es (n+1)/2 ( aunque se podría quitar el +1 porque es una cte). En la cola lo que tarda en insertar es siempre lo mismo, es cte. En la pila, es cte y >n. En la tablas hash el tiempo de búsqueda es siempre cte por eso es más efectiva, porque no depende del numero de elementos que contenga.  

Los dos métodos fundamentales de estas tablas son: insertar y extraer. Tengo un array de listas enlazadas. Cada array representa una característica de lo que metes.

 

Recursividad:

Un método es recursivo cuando un método se llama a sí mismo. Usándola en los ejemplos de Fibonacci y factorial no es útil. No debemos usarlo porque no es práctica.

 

 

El código comentado:

public class Recursividad { // Factorial de un numero.

public long factorial(long num){

 

if (num==1) return1;

 else return num * factorial(num-1);
}
 public void p1(int a) // el método p1 pide un entero, si es mayor que 0 lo saca por pantalla y luego le resta 1 vuelve a comprobar si es mayor que 0, hasta que no lo es y pone “FIN”.
{

 

if (a>0) {
System.out.println(a);
p1(a-1);
}
else
System.out.println(“FIN”);
public void p2(int a, int b) // pide dos enteros(a,b), si el primero es mayor que 0 le resta uno al primero (a-1)y suma el segundo y el primero(b+a),si a no es mayor que 0 imprime b.
{
if (a>0) {
p2(a-1,b+a);
}
else
System.out.println(b);
}
// Método recursivo que suma los elementos de un array de enteros.
public long suma(long [] tabla, int posActual, int tamaño) // no lo entendemos muy bien, porque si la posición actual es el último elemento no sabemos como le puede sumar el siguiente.
{
// Condición de salida en el último elemento

 

if (posActual == tamaño -1 )
return tabla[posActual];
else
return tabla[posActual] + suma(tabla, posActual+1, tamaño);
}
// Obtener el inverso de un número dado:
// El inverso de 254 es 452
// 254 mod 10 = 4 (lo saco)
// 254 div 10 = 25
// 25 mod 10 = 5 (lo saco)
// 25 div 10 = 2
// 2 mod 10 = 2 (lo saco)
public void inverso(int n) // pide un número, lo divide entre 10, el resto es el primer número que buscamos, y el cociente lo dividimos entre 10, el resto es el segundo número y el cociente lo dividimos otra vez entre 10 hasta que el cociente sea menor que 10, que será el resto y el último número que buscamos.
{
System.out.print(n % 10);
if(n>=10)
inverso(n/10);
}
// Función de Fibonacci
// Fib(1) = 1
// Fib(2) = 1
// Fib(3) = Fib(2) + Fib (1)
// Fib(4) = Fib(3) + Fib (2)

 

public long fibonacci(long num) // pides un número, si es igual a 1 o igual a 2 devuelve 1, si no suma el (num-2) + (num-1).
{
if ((num == 1) || (num == 2))
return 1;
else return
fibonacci(num-2) + fibonacci(num-1);}
// Probando recursividad
public static void main(String []args){

Recursividad r =

new Recursividad();
System.out.println(“El factorial de 10 es: “+ r.factorial(10)); 
// Qué hace el método p1: 4,3,2,1 FIN
r.p1(4);
// ¿Cuál es el resultado de llamar a p2 así?
r.p2(3,0);
// Suma recursiva en un array
long [] tabla = {1,2,3,4,5,6,7,8,9,10};
System.out.println(“La suma de los elementos del array es: “+ r.suma(tabla, 0, tabla.length)); 
// Fibonacci
System.out.println(“Fibonacci de 10: “+ r.fibonacci(10)); 
// Inverso
System.out.print(“El inverso de 254 es: “);
r.inverso(254);
System.out.println(); 
}
// main

}

// Recursividad.

 

Práctica 7

La práctica 7 consiste en reutilizar el código de la práctica anterior, en la que creamos una cola estática, para hacer una memoria dinámica.

Los métodos que debemos reutilizar son:

 

 void encolar(Object o)

Object desencolar()

boolean estaVacia ()

 

En cola estática el tiempo que tarda en acceder a la información depende de la cantidad de datos que contenga. Cuando guardamos muchos datos esto supone un inconveniente y por ello empleamos la cola dinámica, que ofrece ciertas ventajas:

 

-         Tamaño infinito.

-         No ocupan más memoria de la que necesitan (solo ocupan el tamaño de los objetos mas un pequeño incremento por cada uno).

Todo esto es lo que pedían en el ejercicio 1, que hemos intentado, pero hemos tenido problemas al estructurar las diferentes clases (para qué sirve cada una). Además el enunciado de la práctica es poco detallado.

 

Bueno probaremos con la siguiente práctica a ver que tal!!! :S

 

 

IMPRESIONES SOBRE EL JUEGO

Hola!!!!! este post trata sobre nuestro juego: EL MEMORY.

Esta semana es la primera entrega! Estamos un poco desesperadillas! pero dicen que tampoco es que tenga que funcionar, tan solo es para ver como lo llevamos. Nuestro principal problema es la interfaz gráfica! no la hemos dado todavía, por ello hemos estado intentando indagar para hacer la ventana, los botones…

La verdad es que con el tutorial que hay en la página de oca hemos conseguido hacer la ventana, pero los botones se nos siguen resistiendo. ¿Alguien sabe donde podemos encontrar cómo hacer una parrilla de botones?

Con lo fácil que parece el memory cuando juegas y lo quebraderos de cabeza que da cuando lo programas!

Bueno chic@s mucha suerte con vuestros juegos ! :)

PRÁCTICA 6

Práctica 6

 

Sabemos que esta práctica se centra en los conceptos de pilas y colas, pero no sabemos como relacionar el comportamiento del tetris con ellos, porque los elementos no se sacan ni empezando por el primero ni empezando por el último, de hecho no se sacan ni elementos enteros, sino partes de ellos (las partes que forman una fila).

 

Exactamente qué es lo que nos están pidiendo programar. Cuál es el comportamiento deseado que debemos implementar.

Nos están pidiendo programar una interfaz gráfica con unas piezas que iremos ordenando en una pila  que solo podremos llenar hasta el momento que tenga todas las posiciones ocupadas.

2. Que estructuras de datos vamos a utilizar.

Utilizaremos las pilas y las colas (datos estáticos basados en arrays) que serán los que contengan las  piezas del juego sobre las que podremos actuar modificando por ejemplo su colocación y forma y que se irán generando de forma aleatoria y de las que iremos modelando el comportamiento con la clase Pieza.

  1. ¿Podemos utilizar la orientación a objetos?

Si que podemos utilizar la orientación a objetos ya que las piezas van a ser objetos de nuestra clase tetris .

Si alguien puede guiarnos y decirnos como plantear el tetris se lo agradeceríamos!

Vamos a leer los demás blogs e intentar deducir algo más de esta práctica!

 

PRÁCTICA 5

PRÁCTICA 5

 

Esta práctica se basa en los conceptos de polimorfismo, interfaz y GUI.

El polimorfismo es que un objeto puede decidir a que método llamar en función de la jerarquía de clases. Dentro de éste podemos hablar de sobrecarga y sobreescritura.

La sobrecarga es que varios métodos pueden llamarse igual, pero tienen distintos parámetros. Y la sobreescritura, es cuando creamos un método en la clase base y lo implementamos de forma diferente en cada una de las clases derivadas.

Por otro lado, la interfaz sirve para definir un  comportamiento que deben seguir los objetos que la implementen. 

Por último, GUI,  Interfaz Gráfica de Usuario, que  como su propio nombre indica en una aplicación gráfica, con esto por fin podremos ver algo más al programar, no solo asteriscos o palabras.

 

Una vez aclarados los conceptos básicos, hablaremos de la práctica en si.

 

Son solo 3 ejercicios, pero parecen muchos más. El primero es bastante sencillo, tan solo hay que sobrescribir el metodo toString de varias clases.

En el ejericio dos, hay dos apartados: el primero es bastante sencillo, hay que poner “implements” en la clase Clase. Pero el segundo ya se complica, porque nos pide implementar el siguiente método:

 

      public void guarda( java.io.FileWriter out )  throws Exception { ….. }

 

Al verlo, no sabíamos ni que hacía, pero tras un tiempo pensando y buscando soluciones llegamos a una conclusión: guardara en un archivo la información que le llega al método.

Permite que un archivo que se abre para escribir por un solo FileWriter (u otro archivo de la escritura-objeto) a la vez. In such situations the constructors in this class will fail if the file involved is already open. En tales situaciones los constructores en esta clase fallan si los archivos abiertos están involucrados.

FileWriter is meant for writing streams of characters.FileWriter es para escribir secuencias de caracteres. For writing streams of raw bytes, consider using a FileOutputStream .  

 Y por fin llegamos al ejercicio 3, que es bastante largo y complicado.

En el nos hablan de la GUI. El objetivo es implementar una aplicación gráfica que nos permita dibujar por pantalla una GUI. Al final tendríamos que conseguir dibujar una ventana con tres componentes gráficos: un menú y dos botones.

En las explicaciones hemos leído que la arquitectura de las aplicaciones gráficas se basa en el uso de la jerarquía de clases del paquete java.awt (conocido como AWT y su evolución Swing).

 

Para pintar los componentes que nos piden nos proporcionan un método:

 

public void paint( Graphics g );

 

También nos proporcionan un enlace para ver los métodos que podremos necesitar de la clase java.awt.

 

En dicho ejercicio hay varios apartados y en cada uno nos explican brevemente los métodos que debemos implementar para lograr dicha aplicación.

Pero es algo tan desconocido para nosotras que hemos sido incapaces de lograr el objetivo. No se si les habrá pasado a muchos, pero en la clase práctica nos dio tiempo solo ha hacer los dos primeros ejercicios y el tercero lo vimos otro día y nos pareció muy complicado para los conocimientos que tenemos. Así que intentaremos sacarlo de alguna forma, pero si a alguien le resultó más sencillo y logró hacerlo, por favor que nos lo diga, ponedlo en el blog que seguro que ayudáis a mucha gente ;)

 

 

PRÁCTICA 4

PRÁCTICA 4

 

Ejercicio1

 

- Cuestión: ¿Qué pasaría si se cambiara protected por private en nuestra jerarquía de clases?

-         Que no podríamos acceder desde otras clases.

 

- En el ejercicio 1 solo había que implementar el constructor y el método toString. En éste método había que llamar así: Modificador.toString(modificadores); al toString de la clase Modificador.

 

Ejercicio 2

 

- Cuestión: ¿Cual es la palabra reservada de Java que se usa para hacer referencia a la clase base desde una clase derivada?

 

-         Extends.

 

- Al implementar el metodo toString:

 

public String toString() {
  
   String cad = “”;

    cad += “ATRIBUTO”;
       cad += “NOMBRE = ” + nombre+”, MODIFICADOR = “+ Modificador.toString(modificadores);
        cad += ” TIPO =”+tipo;
           
        return cad;
    
       }

 

 

 

Ejercicio 3

 

 

cad += “METODO”;
            cad += “NOMBRE = ” + nombre+”, MODIFICADOR = “+ Modificador.toString(modificadores);
            cad += ” TIPO RETORNO = “+tipoRetorno;
            if ( parametros != null ){
                for (int i=0; i<parametros.length; i++)
                    cad +=” PARAMETRO(“+i+”) TIPO= “+parametros[i].tipo;
            }

 

 

 

 

 

 

 

 

 

 

Ejercicio 4

 

  - El mismo toString del ejercicio3.

 

 

Ejercicio 5

 

Se importan tres paquetes:

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.io.*;

 

Los dos primeros es la primera vez que nos aparecen, entonces hemos buscado para que sirven:

 

-         java.lang.reflect à  Proporciona clases e interfaces para la obtención de información sobre reflexiva clases y objetos.

 

 

Móvil

A Field provides information about, and dynamic access to, a single field of a class or an interface. A Field proporciona información acerca de, y el acceso a la dinámica, de un único campo de una clase o de una interfaz.

Method Método

A Method provides information about, and access to, a single method on a class or interface. Un método proporciona información acerca de, y el acceso a, de un único método de una clase o interfaz.

 

Ejercicio 6

 

No hay que hacer nada solo ver que es igual la clase AnalizadorObjeto que en la práctica 3.

 

Ejercicio 7

 

import java.io.*;

 

public class PruebaObjetos {

   

    public static void main( String args[] ) throws Exception {

      // creamos los objetos que nos piden.

 

            ClasePrueba o1 = new ClasePrueba();

            OtraClasePrueba o2 = new OtraClasePrueba();

 

        AnalizadorObjeto analizadorObjeto1 = new AnalizadorObjeto(o1);

        AnalizadorObjeto analizadorObjeto2 = new AnalizadorObjeto(o2, “alias1″);

       

        System.out.println(” INFORMACIÓN DE OBJETOS EN EJECUCIÓN:”);                

System.out.println(“***********************”);

//así imrpimimos lo relativo a cada objeto y para imprimir toda la información, llamamos al método toString.       

System.out.println(” La meta-información ‘en tiempo de ejecución’ del OBJETO “ +o1.toString()+” es: “+analizadorObjeto1.toString());

        System.out.println(“***********************”);

        System.out.println(” La meta-información ‘en tiempo de ejecución’ del OBJETO “+o2.toString()+” es: “+analizadorObjeto2.toString());

        System.out.println(“***********************”);

       

        System.out.println(” NUMERO TOTAL DE OBJETOS ANALIZADOS: “+

AnalizadorObjeto.contador);

        System.out.println(“***********************”);

  }

   

PRÁCTICA 3

Hola!! tras las vacaciones de Semana Santa (que han sido muy cortas), volvemos a escribir!

Hoy hablaremos de la práctica 3, vamos un poco retrasadas, pero intentaremos ponernos al dia poco a poco.

Los primeros apartados de esta práctica nos han parecido relativamente sencillos, pero a partir del ejercicio 4 hemos empezado a tener problemillas, entonces no la hemos podido terminar.

En el ejericio 4, nuestra duda es que no sabemos de que te pide hacer el toString, y tampoco sabríamos hacerlo de un array.

En el ejercicio 5, no sabemos hacer el contructor, porque no sabemos trabajar con un objeto de la clase Object.

Por último, el ejericio 6, no nos parece difícil, pero como no tenemos las otras clases completadas, pues no podemos hacerlo.

Miraremos vuestros blogs para ver si solucionamos alguna de nuestras dudas, de todas formas si sabeis algo decirnoslo,ok?

Fin de la práctica 2!!!

 Por fin podemos poner más cosas sobre la práctica 2!Nos quedamos en la clase LogTrace, ya la hemos completado. Al modificar la clase ErrorDivision (generando valores aleatorios), hemos visto que utiliza el System.err.println(“texto”) para explicar la función de las trazas de depuración. Lo entendemos, pero queríamos saber si se podría poner System.out.println(“texto”), o para indicar la función de las trazas solo se puede utilizar el primero. En el ejercicio 3, no hemos sabido hacer la clase Cp, hemos mirado las soluciones y hemos visto que capturan esta excepción: 

catch (java.io.FileNotFoundException fn) {       

System.err.println(“Error al abrir archivos para copiar”);          System.err.println(“TRAZA DE ERROR: “);         

fn.printStackTrace();         

System.exit(1); 

Y es la primera vez que nos sale, entonces la hemos mirado en el API y hemos visto de que clase procede y como se utiliza.java.lang.Object                                              

          java.lang.Throwable          

                  java.lang.Exception

                    java.lang.ClassNotFoundException 

ClassNotFoundException()
          Constructs a
ClassNotFoundException with no detail message.

ClassNotFoundException(String s)
          Constructs a
ClassNotFoundException with the specified detail message.
ClassNotFoundException(String s, Throwable ex)
          Constructs a
ClassNotFoundException with the specified detail message and optional exception that was raised while loading the class.

  

EJERCICIO 4

 La excepción que surge al salirse del array es java.lang.Exception. Por otro lado la que surge cuando apunta a null es java.Null.Pointer.Exception. La mejor forma para controlarlas es el try/catch. 

EJERICIO 5 

Hemos mirado las soluciones, pero nosotras plantearíamos el juego de otra forma. Ya que no entendemos como se puede acceder a una palabra aleatoria de un fichero. Nosotras guardaríamos un número de palabras en un array y accederíamos aleatoriamente a ellas.Como podéis imaginar no nos ha dado tiempo a terminar el juego, ¿a alguien le ha dado tiempo a hacer los demás ejercicios de la práctica 2 mas el juego del ahorcado, en 2 HORAS?  Sabemos que nosotras no somos las más rápidas, pero no creemos que nadie pueda hacerlo. ¿Nos equivocamos?  

« Entradas más antiguas

Seguir

Get every new post delivered to your Inbox.