Sei sulla pagina 1di 9

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE CÓMPUTO

PROGRAMACION ORIENTADA A OBJETOS II

PRACTICA 2

CLASSPATH

ALUMNO: BEJARANO CASTRO ARMANDO

PROFESOR: M. en C. YAXKIN FLORES MENDOZA


Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Práctica No. 2.
Classpath.

Objetivo:
Aprender a establecer el classpath para poder compilar una aplicación Java en
donde la clase principal y las clases secundarias están en archivos y ubicaciones distintas.

Palabras clave:
Clases, Compilación, Classpath.

Introducción:
Las clases en Java están organizadas en paquetes, los cuales están organizados en
directorios en el sistema de archivos. Pero, a diferencia del sistema de archivos, cuando tu
especificas un nombre de paquete, especificas, completamente, el nombre del paquete y
nunca una parte de él. Por ejemplo, el nombre del paquete para la clase java.awt.Button
siempre es java.awt.

Por ejemplo, supongamos que deseamos que Java en tiempo de ejecución encuentre
una clase llamada Cool.class en el paquete utility.myapp. Si la ruta a ese directorio es
C;\java\MyClasses\utility\myapp se tiene que establecer la ruta de la(s)
clase(s) (classpath) para que contenga el directorio C:\java\MyClasses.

Para ejecutar esa aplicación, tendrás que usar el siguiente comando de la


máquina virtual de Java (JVM):

C:> java –classpath C:\java\MyClasses utility.myapp.Cool

Cuando se ejecuta la aplicación, la máquina virtual de Java usa los valores de


ruta de la(s) clase(s) para buscar cualquier otra clase definida en el paquete
utility.myapp usada por la clase Cool.

Práctica 2. Classpath. Pág. 2


Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Note que el nombre completo del paquete es especificado en el comando. No es


posible, por ejemplo, establecer la ruta de la(s) clase(s) para que tenga la ruta
C:\java\MyClasses\utility y usar el comando Java myapp.Cool. La clase no
sería encontrada.
Uno se puede preguntar que define el nombre del paquete para una clase. La
respuesta es que el nombre del paquete es parte de la clase y no puede ser modificada,
excepto al recompilar la clase.
Note que una consecuencia interesante del mecanismo de especificación de paquetes
es que los archivos que son parte de un mismo paquete pueden existir en diferentes
directorios. El nombre del paquete será el mismo para cada clase, pero la ruta a cada archivo
puede comenzar desde un directorio diferente en la ruta de la(s) clase(s).1

Desarrollo:
Cree una aplicación que calcule la edad de una persona sabiendo su fecha de
nacimiento y la fecha actual. La clase principal llamada edad.java, la cual se encontrará en
un directorio llamado edad, pedirá al usuario la fecha de nacimiento y calculará la edad de la
persona en cuestión. Por otra parte, en un directorio llamado llamado fecha, se encontrará
una clase llamada fecha.java la cual se encargará de obtener la fecha actual, que será
usada en la clase principal. Así se ordenarán los directorios:

1
Tomado de la documentación de Classpath para Java 1.3
Práctica 2. Classpath. Pág. 3
Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Recomendaciones:
1. Programe las clases en archivos Java separados, pero en el mismo directorio. Ejecute la
aplicación para comprobar el funcionamiento y observar la salida.
2. Conociendo la salida esperada para la aplicación, proceda a separar las clases y realizar
las modificaciones pertinentes.

Preguntas:
1. ¿Qué modificaciones requirió realizar en el código fuente para que la aplicación
funcionará?
R: Solo separe las clases en diferentes archivos, y la compilación se hace haciendo
referencia a la carpeta así como la modificación de classpath para que la compilación fuera
posible. Y en el código especifique los package según la carpeta en la que estuvieran
contenidas las clases e importando la clase secundaria en la primaria.
2. ¿Cuáles con las dos formas que existe para modificar el classpath?.
R: Con el comando set classpath=<ruta>;<otra ruta>;….;<mas rutas>
3. Almacene la clase secundaria en un archivo JAR (la forma de realizarlo se puede
encontrar en la documentación de Java) y describa las forma de compilar la aplicación para
obtener los mismos resultados.
R: Para meter las clases en un archivo jar, primero deben compilarse:

Javac –cp <dirección del archivo de la clase secundaria> <archivo de la clase primaria>

después crear un archivo txt el cual debe contener lo siguiente.

Main-Class: <la clase>

Despues se ejecuta el generador de jar:

Jar cmf <archivo.txt> <archivo.jar> <archivos o direcciones a meter>

Como mi programa esta en consola, el ejecutable se corre con:

Práctica 2. Classpath. Pág. 4


Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Java –jar <archivo.jar>

4. ¿Cuáles son los beneficios que el formato de archivos JAR proporciona?


R: Al tener las clases en un jar, es mas fácil de ejecutar un programa, asimismo
aseguramos que las clases estén ordenadas, y por lo que pude ver, en un jar se puede meter
cualquier tipo de cosa, así que yo creo que es conveniente como para meter documentación e
incluso el código fuente. Y sobre todo, la tan mencionada portabilidad y sobre todo la
ejecución del programa por cualquier persona ajena a la programación.

Codigo Fuente:

//fecha.java clase secundaria

package fecha;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
public class fecha{
BufferedReader entrada = new BufferedReader(new
InputStreamReader(System.in));
String in;
int dia,mes,anio,diac,mesc,anioc,diar,mesr,anior;
public fecha(Date actual) throws IOException{
actual=new Date();
diac=actual.getDate();
mesc=actual.getMonth();
anioc=actual.getYear();
System.out.println("fecha actual: "+actual);
System.out.println("Ingrese el Dia de nacimiento: "+diac);
in = entrada.readLine();
dia = Integer.parseInt(in);
Práctica 2. Classpath. Pág. 5
Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

System.out.println("Ingrese el Mes de nacimiento: "+mesc);


in = entrada.readLine();
mes = Integer.parseInt(in);
System.out.println("Ingrese el año de nacimiento: "+anioc);
in = entrada.readLine();
anio = Integer.parseInt(in);
anior=anioc-anio;
if(mes>mesc){
anior--;
mesr=mesc-mes+12;
}
else
mesr=mes-mesc;
if(dia>diac){
mesr--;
diar=diac-dia+30;
}
else
diar=diac-dia;
System.out.println("dia: "+diar+" mes: "+mesr+" anio:
"+anior);
}
}

//edad.java clase principal

package edad;
import fecha.*;
import java.io.IOException;
import java.util.Date;

public class edad{


Práctica 2. Classpath. Pág. 6
Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

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


new fecha(new Date());
}
}

Impresiones de pantalla
En la primera imagen se puede ver a grandes rasgos que los archivos java están en distintas
carpetas.

En la siguiente imagen se ven todos los comandos que anteriormente se han especificado, asi
como la ejecución del programa.

Práctica 2. Classpath. Pág. 7


Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Conclusiones:
El classpath es la forma en que java sabe dónde se encuentran las clases para así poder
compilarlas, es necesario especificar dicha ruta en el caso de compilar una clase que depende
de otra y se encuentran (las clases) en diferentes direcciones o archivos.

Los archivos jar son contenedores similares a los que se utilizar en Unix (como tar, dev…) o
los archivos comprimidos (como zip, rar…). Estos archivos hacen que las clases (y todo lo que
se le quiera agregar dentro del contenedor) este ordenado, de esta forma se asegura que sea
portable y lo más interesante es que el contenedor jar es ejecutable (para aplicaciones
graficas solo basta con un par de clics y para consola, solo basta con el comando java –jar
<archivo.jar>) para cualquier plataforma que cuente con la maquina virtual de java.

Duración:
Una sesión de laboratorio.

Práctica 2. Classpath. Pág. 8


Instituto Politécnico Nacional.
Escuela Superior de Cómputo
Departamento de Programación y Desarrollo de Sistemas.
Academia de Algoritmia y Programación.
Programación Orientada a Objetos II.
M. en C. Yaxkin Flores Mendoza
M. en C. Axel Ernesto Moreno Cervantes

Fechas:
Desarrollo de la práctica en laboratorio:
__________22 de Febrero de 2010______________________.
Entrega del reporte:
___________1 de Marzo de 2010_______________________.

Práctica 2. Classpath. Pág. 9

Potrebbero piacerti anche