Clases, Paquetes, CLASSPAHT, Compilar

…y la madre que los parió.

Cuidadin que aqui entran en juego cosas importantes y delicadas

CLASSPATH

La variable CLASSPATH, que está siendo uno de mis dolores de caveza, es la variable que indica a java donde estan tus clases. Cuando tu escribes “java ClaseAEjecutar” java busca en la variable CLASSPATH que tu hayas establecido en tu sistema y a partir de ahi busca la clase. para establecer la variable lo puedes hacer desde consola. Aunque te aconsejo que edites tu fichero /etc/profile y la establezcas ahí. De esa manera se cargará siempre en tu profile y será mas cómodo.

 # sudo vi /etc/profile

Y una vez dentro del fichero pones el equivalente en tu sitema a:

CLASSPATH="/home/juantxu/java/:./"
export CLASSPATH

Esto es para mi caso. Osea que mis clases estarán colgando del directorio /home/juantxu/javae y el directorio donde me encuentre en cada momento (”./”). Y con esto creo que hay bastante con el temita del classpath… espero.

Compilar

A la hora de compilar java es un poco asquerosito y complicadillo. Así que voy a intentar ser lo más claro posible. Primero hay que introducir ciertos conceptos relevantes.

Paquete

Un paquete es una agrupación de clases que tienen relación entre si (luego te lo explico mas detalladamente). Los paquetes se organizan en una estructura jerárquica igual a la estructura de directorios. De hecho una estructura de paquetes tiene una equivalencia directa en una estructura de directórios.

Por otra parte, dado que cada programador le pone a sus clases el nombre que le da la real gana, y que las clases habitan en el ordenador. Podria darse el caso que existieran dos clases con el mismo nombre. Ya que a la hora de ejecutar java busca en el CLASSPATH.

Para solventar ese problema (y otros mas) es para lo que existen los paquetes. Al incluir las clases en una estructura jerárquica de paquetes se resuelve este problema. Normalmente los paquetes empiezan con el nombre de la organización al reves. Por ejemplo en nuestro caso será net.juantxu.loQueSea De ese modo el nombre de la clase pasa a contener el del paquete y se solventan los problemas de nombres repetidos.

JAVAC

Javac es el comilador de java. Deberías compilar al menos una vez en tu vida con javac para saber como se hace. Aunque a la práctica, resulsta tan complicado que es más cómodo hacerlo con cualquiera de los entornos de trabajo que existen para ello (netbeans, eclipse, etc)

SYNTAXIS

javac -cp classpath/que/indique/donde/encontrar/todas/las/clases/necesarias  -d /directorio/donde/dejará/las/clases/compiladas /clase/a/compilar.java

Clases, paquetes y demas amistades

En java hay varios tipos de clases. Públicas, que todo el mundo puede acceder a ellas (public class TocameRoque{…}). Amistosas, que nadie puede acceder a ellas excepto las del mismo paquete ( sus colegitas) y privadas… Explico todo esto con un poco de detalle.

El tipo público no tiene ningun misterio… tu dice public class TocameRoque{ public tocameElCulo(..);} y todo el mundo tiene acceso a los miembros públicos de la clase. Todo el mundo le puede tocar el culo a esa clase.

El tipo Amistoso es… Antes hay que introducir el concepto de paquete. atentos Un paquete como su nombre indica es una agrupación de clases. Un grupo de amiguetes que (casi) siempre van juntos y que comparte entre ellos mucho mas que con los demás. Como los borrachos, las peñas, etc. Para decir que una clase pertenece a un paquete hay que definirlo al principio de todo.

// utils::juantxu::net => P.java
// atajo de print y println
// pruebas con packages
package net.juantxu.utils;
public class P{
  public static void rint(String s){ // imprime por pantalla una cadena
  System.out.print(s);
 }
 public static void rintln(String s){ // imprime por pantalla una cadena en una liena
  System.out.println(s);
 }
}

todas las clases que yo defina como pertenecientes al paquete net.juantxu.utils…

 1. Tendrán que estar en el directorio net/juantxu/utils apartir de cualquiera de las rutas del CLASSPATH (*)
 2. Pueden ser invocadas desde cualquier parte con la sentencia "import net.juantxu.utils.*;"

Pues como iba diciendo, todas las clases amistodas, osea todas aquellas en las que no se especifica que son públicas, son visibles para las de su mismo paquete. En el ejemplo de la utilidades. Si yo defino una clase sin ponerle el “public” delante, esa clase será visible por la clase P pero por ninguna mas. A esto hay que añadirle el concepto de “paquete por defecto”. El “paquete por defecto” es aquel compuesto por todas las clases que están en el mismo directorio. Ellas, aunque no les guste, forman parte de el “paquete por defecto” y son visibles entre ellas. Como tus compañeros de clase son visibles para ti y tienes que dejarles los apuntes para que ellos te los dejen a ti, pero a los de otro cole… ¡Ni agua!

Por último queda el concepto de método protegido… Yo lo definiría como “el método en la sombra”. En java existe el concepto de herencia. La palabra herencia no me acaba de gustar pero es la “oficial” así que la aceptaremos. La idea es que tu haces una clase, entonces dices… Cáspita! si pudiera reutilizar esa clase para hacer esto otro sería genial, tan sólo le tendría que añadir un retoquecito por aqui, una funcionalidad por allá y listo… En lenguaje actual… “si pudiera tuenar la clase….” ¡ESO ES LA HERENCIA!

Partiendo de una clase ya existente, creas otra que lo que hace es añadirle nuevas funcionalidades.

// RenaultCincoMaxiTuning.java
class RenaultCinco{ // clase original
  protected void acelerar(){
   System.out.println("acelerando a 120");
  }
}
public class RenaultCincoMaxiTuning extends RenaultCinco{
 public void turboNitro(){
  System.out.println("A tope! QUE PASA NEEEENG!");
 }
public static void main(String[] args){
 RenaultCincoMaxiTuning buga = new RenaultCincoMaxiTuning();
 buga.acelerar();
 buga.turboNitro();
 }
}

Bueno, una vez llegados a este punto ya te puedo explicar lo que es un método protegido “protected” es el métod acelerar de la clase RenaultCinco. Es amistosa con sus colegitas, por aquello del paquete por defecto pero a para cualquiera que herede de RenaultCinco podrá acceder a el. Es un método protegido protegida.

 
java/2.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki