Porque ya tOCA…



¡¡Lo prometido es deuda!!

Cierto es que vamos un poco (bastante) retrasadas con el blog…pero tuvimos problemas con nuestros ordenadores domésticos y hasta después de semana santa nos ha sido muy difícil ponernos al día. Esperemos coger el ritmo de la gente lo más rápidamente posible.

En este comentario no pondremos demasiado código, dado que ya la mayoría de vosotros tenéis echas estas prácticas y…las soluciones están colgadas, no creemos que fuera de gran ayuda. Nos limitaremos a recalcar lo que desde nuestro punto de vista fue más importante:

PRÁCTICA 2:

·         Como crear una carpeta desde la consola: hasta esta práctica era algo que desconocíamos, y que es tan simple como escribir:  C:>mkdir C:\TEMP\TSIOCA (En el caso de crear una carpeta llamada TSIOCA dentro del directorio TEMP).Suponemos que mkdir significa make dir, es decir, hacer dirección….si no es asi…es una forma fácil de recordarlo.

·         Como añadir el Classpath: es un código fácil, solo tienes que saber un poquito de inglés y todo te será más fácil de recordar :  C:\>set CLASSPATH=C:\TEMP\TSIOCA; %CLASSPATH%  con escribir set (pon) CLASSPATH=DIRECTORIO; %CLASSPATH% 

o       Si no reconoce javac: deberemos buscar la ruta de javac.exe y agregarla

    C:\> set PATH=C:\Archivos de Programa\java\jdk\bin;%PATH%

·       Método que permita generar valores aleatorios: nos parecía importante recalcar este método. Conviene no olvidar el Math.random() porque nunca sabes cuándo vas a tener que acudir a él, por ejemplo para el juego nosotras lo hemos tenido muyyy presente, quizás alguno de vosotros no lo uséis…pero teniendo en cuenta que en muchos juegos intervienen dados…utilizar este método es una forma sencilla de generar la tirada de un dado. Si alguien lo necesita y no sabe cómo hacerlo que se ponga en contacto con nosotras.

//genera un número aleatorio:

public class Aleatorio{

  public static void main (String args []){            

         double x=Math.random(); //crea una variable del tipo double y se le asigna un numero aleatorio de 0 a 1

         System.out.println(x);//imprime ese número aleatorio obtenido

  }

·         Aserciones y trazas de depuración: vamos a contaros un “secretillo”…en realidad en clase nos dijeron que esto no se usa demasiado a la hora de la verdad…no sabemos si no lo usaremos por nuestro bajo nivel o porque realmente no es útil…pero la verdad es que nosotras nos liamos un poco con esto pero se puede solucionar igualmente con excepciones, que es como hemos resuelto los ejercicios propuestos..:SCreemos que las aserciones no son muy útiles ya que cuando se produce un error, se finaliza la ejecución del programa y esto no siempre nos va a interesar.

En nuestro caso, siempre que aparecen errores usamos trazas de depuración; puesto que es mucho más fácil su utilización y vemos más claramente dónde falla el programa.

Llegamos al ejercicio 3, empezamos a leer y … cúal es nuestra sorpresa??? nos cuentan un poco la teoría sobre las excepciones!!!!y luego…EJERCICIO DE FICHEROS!!!!!!!!!!!!!!!!!Pero…no puede ser (pensamos)!!!!Seguimos sin saber cómo usarlos…por lo tanto el ejercicio 3…nada de nada.

·    Ejercicio 4!!!!! Seguimos con las excepciones: java.lang. ArithmeticException, java.lang.ArrayIndexOutOfBoundsException, java.lang.NumberFormatException… qué locura!!!! Decidimos mirarnos por nuestra cuenta un poco las excepciones (para intentar aclarar un poco las ideas) y lo que más nos sorprende es que podemos lanzar nuestras propias excepciones, extendiendo de la clase System.exception.

·         Cuidado con las referencias a null!!!: A veces pensamos que una variable puesta a null, es equivalente a 0, pero NO!! Si tenemos la variable. String var=null, y luego queremos averiguar su longitud con var.length()….dará error!! Null no tiene longitud…seria más parecido a vacío que a 0. Aunque parezca que pueda estar bien porque compile al ejecutar dará un error. 

·         Funciones ValueOf():Llegamos a la class ExcepciónApp y nos encontramos con “ respuesta=String.valueOf(cociente);” y decidimos buscar qué significaba; puesto que ni nos sonaba. ValueOf() es un método que se usa para la conversión de tipos de datos!!!!Podemos pasar cualquier tipo de dato básico a String!!!

·         Ahorcado: pff pff pfff….sinceramente….no nos salió, tuvimos que mirar las soluciones, creemos que de momento ejercicios cortitos y por separado no nos dan “demasiado” miedo…pero hacer un ahorcado!!!!así a primera vista…Solo la idea nos aturdió un poco…la dificultad la encontramos al empezar…porque una vez publicada la solución no hay grandes problemas, era el primer programa un poco serio que había que empezar desde el public class Ahoracado e implementar todo sin que nos dieran nada de código.   

PRÁCTICA 3:

Seguimos con el “estilo” de la practica anterior:

·         Atributo/Metodo Estático (Static) : Existe un tipo de atributo/método llamado estático que son compartidos por todos los objetos de la misma clase. Se les llaman atributos/métodos de clase. Su valor/código no modifica el estado de ningún objeto particular sino más bien de la clase de objetos como un todo. Para acceder al atributo a través de la clase: punto.contador, suponiendo que punto sea el nombre de la clase y contador el nombre del atributo estático.

·         Diferencia entre constructores y métodos: si os fijáis la sintaxis para hacer un método y un constructor es parecida:

o       public Punto(double x, double y)àconstructorà modificadorDeAcceso  Nombre(parámetros)

o       public double distanciaAlOrigen() àmétodo à modificadorDeAcceso TipoRetorno Nombre(parámetros)

  La diferencia es que un constructor nunca tiene Tipo de retorno. 

·         método toString(): al igual que destacábamos el math.ramdom(), el método toString () (aunque normalmente- y no se porqué- no nos gusta demasiado)se utiliza mucho, asique mejor entenderlo bien. Devuelve una cadena con la representación del objeto.

   public String toString() {    return “(“+x+”, “+y+”)”; 

Todo lo que quieres que devuelva ha de ir en el return, luego ya veremos lo que hacemos con el valor del String devuelto, porque no siempre interesa sacarlo por pantalla que es el uso que más le damos.  

·           Pasar por valor: cuando pasamos como parámetro en un método una copia del argumento o del parámetro se dice que se esta pasando por valor. Y ahora un poquito de código…  

·           Ejercicio 2: clase Atributo (clase método y constructor parecidas) 

public Atributo(String nombre, String tipo, int modificadores ) {
                                   this.nombre= nombre;
                                   this.tipo=tipo;
                                   this.modificadores= modificadores;
} 

 public String toString () {
  String a=”ATRIBUTO : NOMBRE= “+nombre+” TIPO= “+tipo+” MODIFICADOR ACCESO= “+  Modificador.toString(modificadores);
  return a;
  } 

·         Ejercicio 4: clase Clase. Teníamos que implementar lo siguiente:  

public Atributo[] getAtributos() {  return atributos; }

public Constructor[] getConstructores() {  return constructores; }

public Metodo[] getMetodos() {  return metodos; } 

public String toString() {
String a= “CLASE:”+ this.nombre;
 
 for (int i=0; i<atributos.length; i++){ a= a + atributos[i].toString() }
for (int j=0; j<metodos.length; j++){a= a + metodos[j].toString(); }
for (int t=0; t<constructores.length; t++){ a= a + constructores[t].toString();}
return a;}

 Explicamos el constructor:

Package java.lang.reflect :  Provides classes and interfaces for obtaining reflective information about classes and objects. (Viene a decir que este paquete sirve para obtener información sobre clases y objetos)

public Clase( Object o) {

        this.nombre = o.getClass().getName(); //obtiene el nombre de o, que será del tipo Clase

//OBTIENE EL NUMERO DE ATRIBUTOS CONSTRUCTORES Y METODOS QUE HABRÁ PARA PODER DETERMINAR LA LONGITUD DE LOS RESPECTIVO ARRAYS. 

 int numAtributos = o.getClass().getDeclaredFields().length;       

int numConstructores = o.getClass().getConstructors().length;           

int numMetodos = o.getClass().getDeclaredMethods().length;     

//CREA LOS ARRAYS DE ATRIBUTOS, CONSTRUCTORES Y METODOS DE LA LONG ANTES CALCULADA

        atributos = new Atributo[numAtributos];

        constructores = new Constructor[numConstructores];

        metodos = new Metodo[numMetodos];

//OBTIENE LAS CARACTERISTICAS (ATRIBUTOS DE LA CLASE ATRIBUTO) DE CADA ATRIBUTO(NOMBRE, TIPO Y MODIFICADOR)       

 for ( int i=0; i<numAtributos ; i++) {           

Field f = o.getClass().getDeclaredFields()[i];      

 atributos[i] = new Atributo(f.getName(),f.getType().getName(),f.getModifiers());  }

//OBTIENE LAS CARACTERISTICAS (ATRIBUTOS DE LA CLASE CONSTRUCTOR) DE CADA CONSTRUCTOR(NOMBRE Y MODIFICADOR)

        for ( int i=0; i<numConstructores ; i++) {    

        java.lang.reflect.Constructor c = o.getClass().getConstructors()[i];  

        constructores[i] = new Constructor(c.getName(),c.getModifiers());    }

//OBTIENE LAS CARACTERISTICAS (ATRIBUTOS DE LA CLASE METODO) DE CADA METODO(NOMBRE, TIPO RETORNO  Y MODIFICADOR)

        for ( int i=0; i<numMetodos ; i++) {    

        Method m =  o.getClass().getDeclaredMethods()[i];

metodos[i] = new Metodo(m.getName(), m.getModifiers(), m.getReturnType().getName());  }

   } 

·         Ejercicio 5. La clase AnalizadorObjeto: no lo supimos sacar y aun mirando la solución hay cosas que no llegamos a entender bien. Si alguien pudiera explicarnos a rasgos generales este apartado lo agradeceríamos…es que hemos estado buscando por diferentes blogs y no hemos encontrado la solución explicada.

dibujo.jpg

Advertisement

Comentarios

  1. Jose Jesus nos dice:

    “Más vale tarde que nunca”, dicen, y en este caso ha valido la pena la espera: Un muy buen post :-) La próxima vez quizá no sería necesario meter tanto código, pero por lo demás, genial, llendo a lo importante y resaltando cómo hacer las cosas finalmente.

    Publicado 3 years, 10 months ago


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.