Вы находитесь на странице: 1из 9

Sesin 1: INTERFACES Y PAQUETES CON J2EE SERVER

I. OBJETIVOS
Definir Interfaces y Paquetes.
Demostrar la utilidad de Interfaces y Paquetes.
II. MARCO TEORICO
INTERFACE
Un interface se podra ver como un contrato donde se menciona qu puede hacer la clase, sin
decir nada sobre cmo lo har. s una coleccin de definiciones de mtodos !sin
implementaciones" y de valores constantes.
#os interfaces se utili$an para definir un protocolo de comportamiento que puede ser
implementado por cualquier clase del rbol de clases.
#os interfaces son %tiles para&
capturar similitudes entre clases no relacionadas sin for$ar una
relacin entre ellas.
declarar mtodos que una o varias clases necesitan implementar.
revelar el interface de pro'ramacin de un ob(eto sin revelar sus
clases !los ob(etos de este tipo son llamados ob(etos annimos y pueden ser %tiles
cuando compartas un paquete de clases con otros desarrolladores".
LA DECLARACIN DE INTERFACE
)omo mnimo, una declaracin de interface contiene la palabra clave ine!"#$e y el nombre del
interface que se va a crear&
interface )ontable *
. . .
+
Una declaracin de interface puede tener otros dos componentes& el especificador de acceso
%&'(i$ y una lista de ,superinterfaces,. Un interface puede e-tender otros interfaces como una
clase puede e-tender o subclasificar otra clase. .in embar'o, mientras que una clase slo
puede e-tender una superclase, los interfaces pueden e-tender de cualquier n%mero de
interfaces. /s, una declaracin completa de interface se parecera a esto&
0public1 interface N)*'!e+eIne!"#$e 0e-tends (is#+eS&%e!Ine!"#$es1 *
. . .
+
l especificador de acceso %&'(i$ indica que el interface puede ser utili$ado por todas las
clases en cualquier paquete. .i el interface no se especifica como p%blico, slo ser accesible
para las clases definidas en el mismo paquete que el interface.
#a clausula e,en+s es similar a la utili$ada en la declaracin de una clase, sin embar'o, un
interface puede e-tender varios interfaces !mientras una clase slo puede e-tender una", y un
P!-$i$#
1
interface no puede e-tender clases. sta lista de superinterfaces es una lista delimitada por
comas de todos los interfaces e-tendidos por el nuevo interface.
EL CUERPO DEL INTERFACE
l cuerpo del interface contiene las declaraciones de mtodos para los mtodos definidos en el
interface.
ste cdi'o define un nuevo interface llamado coleccin que contiene un valor constante y tres
declaraciones de mtodos&
interface coleccion {
int MAXIMO = 500;
void aadir(Object obj);
void borrar(Object obj);
Object buscar(Object obj);
int contadorActual();
}
l interface anterior puede ser implementado por cualquier clase que represente una coleccin
de ob(etos como pueden ser pilas, vectores, enlaces, etc...
2bserve que cada declaracin de mtodo est se'uida por un punto y coma !3" porque un
interface no proporciona implementacin para los mtodos declarados dentro de l.
IMPLEMENTAR UN INTERFACE
Para utili$ar un interface se debe escribir una clase que lo implemente. Una clase declara todos
los interfaces que implementa en su declaracin de clase. Para declarar que una clase
implementa uno o ms interfaces, se utili$a la palabra clave i*%(e*ens se'uida por una lista
delimitada por comas con los interfaces implementados por la clase.
class PilaIO implements coleccion {
! ! !
void aadir(Object obj) {
! ! !
}
void borrar(Object obj) {
! ! !
}
Object buscar(Object obj) {
! ! !
}
int contadorActual() {
! ! !
}
}
4odos los mtodos de un interface son abstractos y p%blicos. 5o es necesario especificarlo. Un
mtodo de interface no debe ser esttico, ni final, ni de tipo strictfp, ni nativo.
4odas las variables definidas en un interface deben ser p%blicas, estticas y finales, en otras
palabras, un interface puede declarar solo constantes, no variables de instancia.
#os interfaces son implcitamente abstractos. l modificador p%blico ser requerido si queremos
que el interface ten'a acceso p%blico en ve$ del acceso por defecto.
Un interface puede e-tender una o ms interfaces y no puede e-tender otra cosa que no sea otros
interfaces. Un interface no puede implementar otra interface o una clase.
Por e(emplo, las si'uientes 6 declaraciones de mtodos, si se declaran dentro de sus propios
interfaces, son le'ales e idnticos&
void bounce();
"ublic void bounce();
abstract void bounce();
"ublic abstract void bounce();
abstract "ublic void bounce();
#as si'uientes declaraciones de mtodos de interface no compilarn&
#inal void bounce(); $$ %&todos #inales ' abstractos no "ueden ser usados nunca juntos(
$$ ' los abstractos son los i%"l)citos en este caso
static void bounce(); $$ los inter#aces de#inen %&todos de instancia!
"rivate void bounce(); $$ %&todos de inter#ace son sie%"re "*blicos!
"rotected void bounce(); $$ la %is%a e+"licaci,n anterior!
DECLARANDO CONSTANTES EN UN INTERFACE
/l declarar constantes en un interface, se 'aranti$a que cualquier clase que implemente la
interface tendr acceso a la misma constante.
#a re'la de oro es que una constante de un interface debe ser siempre p%blica, esttica y final.
7eamos este e(emplo&
inter#ace oo {
int -A. = /0;
void 1o();
}
class 2a" i%"le%ents oo {
"ublic void 1o() {
-A. = 03;
}
}
5o se puede cambiar el valor a una constante. Una ve$ que su valor ha sido asi'nado en la
declaracin del interface, el valor nunca podr modificarse. ntonces la instruccin 8/9 : ;< no
compilar.
Por e(emplo, las si'uientes declaraciones de constantes en un interface son idnticos&
"ublic int +=4; $$ "arece no est5tico ' no #inal( "ero no lo es
int + = 4; $$ "arece de ti"o "or de#ecto( no #inal( no est5tico( "ero no lo es
static int +=4; $$ no se %uestra #inal ni "*blico
#inal int +=4; $$ no se %uestra est5tico ni "6blico
"ublic static int +=4; $$ no se %uestra #inal
"ublic #inal int +=4; $$ no se %uestra est5tico
static #inal int +=4; $$ no se %uestra "*blico
"ublic static #inal int +=4; $$ &sto es lo 7ue es i%"l)cita%ente
PAQUETES
=ava or'ani$a las clases dentro de paquetes, y usa la instruccin i*%)! para dar a los
pro'ramadores una forma consistente de mane(ar y acceder a las clases que necesitan.
#os paquetes son 'rupos relacionados de clases e interfaces y proporcionan un mecanismo
conveniente para mane(ar un 'ran (ue'o de clases e interfaces y evitar los conflictos de
nombres. /dems de los paquetes de =ava puede crear tus propios paquetes y poner en ellos
definiciones de clases y de interfaces utili$ando la sentencia %#$.#/e.
.e declara un paquete utili$ando la sentencia pac>a'e&
%#$.#/e /!#%0i$s1
interface Dra''able *
. . .
+
class )ircle *
. . .
+
class 9ectan'le *
. . .
+
#a primera lnea del cdi'o anterior crea un paquete llamado /!#%0i$s. 4odas las clases e
interfaces definidas en el fichero que contiene esta sentencia son miembros del paquete. Por lo
tanto, Dra''able, )ircle y 9ectan'le son miembros del paquete 'raphics.
#as instrucciones i*%)! y %#$.#/e se aplican a todas las clases dentro de un archivo de
cdi'o. 2sea que no hay forma de declarar m%ltiples clases en un archivo y tenerlas en
diferentes paquetes, o usar diferentes imports.
CLASSPAT2
CLASSPAT2 es una lista de directorios que indica al sistema donde ha instalado varias clases
e interfaces compiladas =ava. )uando busque una clase, el intrprete =ava busca un directorio
en su )#/..P/4? cuyo nombre coincida con el nombre del paquete del que la clase es
miembro. #os ficheros !class para todas las clases e interfaces definidas en un paquete deben
estar en ese directorio de paquete.
ENCONTRANDO UN PAQUETE
)uando se colocan las clases dentro de paquetes y lue'o se usa classpaths para encontrar
estas clases, las cosas se vuelven un poco complicadas. 7eamos el si'uiente cdi'o&
"ac8a1e co%!#oo;
"ublic class M'9lass {"ublic void :i() { } }
stamos diciendo que @y)lass es un miembro del paquete com.foo. sto si'nifica que el
nombre calificado completo de la clase ahora es com.foo.@y)lass. Una ve$ que una clase est
en un paquete, su nombre es atmico, no podr ser dividido nunca, ni en una linea de comando,
ni en una instruccin import.
/hora veamos como se usa com.foo.@y)lass en otra clase, en otro archivo&
i%"ort co%!#oo!M'9lass; $$ a%bos i%"orts #uncionar5n
i%"ort co%!#oo!;;
"ublic class anot:er {
void 1o() {
M'9lass %4 = ne< M'9lass(); $$ no%bre alias
co%!#oo!M'9lass %0 = ne< co%!#oo!M'9lass(); $$ no%bre co%"leto
%4!:i();
%0!:i();
}
}
#a instruccin import es como un alias para el nombre completo de la clase. Una ve$ que lo
defines, puedes usarlo en el cdi'o.
/hora veamos cmo funciona en con(unto con los classpaths y las lneas de comando. l
nombre completo de una clase hace referencia a una estructura de directorio. Por e(emplo,
referente al actual estructura de directorio, la clase cuyo cdi'o es
"ac8a1e co%!#oo;
"ublic class M'9lass {"ublic void :i() { } }
debera estar ubicado aqu&
comAfooA@y)lass.class
7eamos otro e(emplo&
i%"ort co%!<ic8edl's%art!=tils;
class >est9lass {
void do?tu##() {
=tils u = ne< =tils(); $$ no%bre si%"le
u!doX(@ar14A(Aar10A);
co%!<ic8edl's%art!Bate(); $$ no%bre co%"leto
d!1etMont:(@OctA);
}
}
5o tenemos que escribir su nombre completo dentro de la clase pues hemos usado la clausula
import. /l tiempo de compilar o e(ecutar 4est)lass, el classpath tendr que incluir un directorio
con los si'uientes atributos&
un subdirectorio llamado $)* !que lo llamaremos directorio rai$"
un subdirectorio en com llamado 3i$.e+(4s*#!
dos archivos en Bic>edlysmart llamados Ui(s.$(#ss y D#e.$(#ss
Cinalmente el directorio que tiene todos estos atributos tiene que ser accesible !via classpath"
en una de las si'uientes formas&
D. l camino al directorio debe ser absoluto, en otras palabras, desde la ra$ del sistema !no
del paquete".
#a instruccin podra ser Ecp Adir/&Adir/Adir8 si consideramos un rbol de directorios Adir/Adir8
;. l camino al directorio tiene que ser correcto relativo desde el actual directorio.
#a instruccin podra ser Ecp dir8&dir8Adir) si consideramos un rbol de directiorios
Adir/Adir8Adir) y si el directorio actual es dir8.
CREANDO ARC2IVOS JAR
Una ve$ que tienes probada y construida tu aplicacin, probablemente querrs empaquetarla en
un solo archivo para facilitarte su distribucin e instalacin. Un mecanismo que =ava provee
son los archivos (ar !(ava archive". Fstos son usados para comprimir y archivar datos. 7eamos
una aplicacin con clases en diferentes paquetes&
test
=se?tu##!java
<s
(crear M'Car!jar a7u))
%'A""
utils
Bates!class ("ac8a1e %'A""!utils;)
en1ine
rete!class ("ac8a1e %'A""!en1ine;)
%in%a+!class ("ac8a1e %'A""!en1ine;)
Puedes crear un archivo simple (ar que conten'a todos los archivos en @y/pp, y as mantener
la estructura de directorios de my/pp. Una ve$ que este (ar es creado, puede ser llevado a
cualquier lu'ar, a cualquier mquina y, todas las clases en el archivo (ar podrn ser accesibles,
via classpath, por (ava y (avac sin siquiera desempaquetar el archivo (ar.
.upon'amos que el directorio actual es Bs, para crear el archivos (ar debemos especificar&
cd <s
jar Dc# M'Car!jar %'A""
l comando (ar crear el archivo (ar llamado @y=ar.(ar y que contendr el directorio my/pp y
todos sus subdirectorios y archivos. .e puede observar el contenido de un archivo (ar as&
jar Dt# M'Car!jar
que producir&
ME>ADIF$
ME>ADIF$MAFIE?>!M
%'A""$
%'A""$!B?G?tore
%'A""$utils$
%'A""$utils$Bates!class
%'A""$en1ine$
%'A""$en1ine$rete!class
%'A""$en1ine$%in%a+!class
.i deseamos compilar Use.tuff.(ava en el directorio test y resulta que Use.tuff.(ava necesita
acceder a una clase contenida en my/pp.(ar, haremos lo si'uiente&
cd test
javac Dclass"at: <s$%'A""!jar =se?tu##!java
.in embar'o si quisieramos usar una clase en un paquete !a diferencia de usar un archivo (ar",
por e(emplo si Use.tuff.(ava necesita usar las clases en el paquete my/pp.utils, y la clase no
est en un (ar, se hara lo si'uiente&
cd test
javac Dclass"at: <s =se?tu##!java
E5e*%() 1
i*%)! 5#6#.i).P!in7!ie!1
%&'(i$ $(#ss C#(('#$.Tes 8
%&'(i$ s#i$ 6)i+ *#in9S!in/ #!/s:;< 8
L))%in/C(ien $(ien = ne3 L))%in/C(ien9<1
ne3 Mess#/eSe!6e! 9>? 1@@? $(ien<1 AA $!e#e # ne3 se!6e!
$(ien.!&n9<1 AA !&n 0e $(ien
B
B
$(#ss L))%in/C(ien i*%(e*ens Mess#/eP!in#'(e 8
in $)&ne! = @1
P!in7!ie! )& = ne3 P!in7!ie! 9S4se*.)&? !&e<1
6)i+ !&n9< 8
30i(e 9$)&ne!CC D 2@@@@@@< 8
in +&**4 = $)&ne! E $)&ne! A 9$)&ne! C 1<1
B
B
%&'(i$ 6)i+ %!inMess#/e9< 8
)&.%!in(n9FT0e $)&ne! 6#(&e is n)3: F C $)&ne!<1
B
B
$(#ss Mess#/eSe!6e! e,en+s T0!e#+ 8
in i*es1
in ine!6#(1
Mess#/eP!in#'(e )'5e$1
Mess#/eSe!6e! 9in i*es? in ine!6#(? Mess#/eP!in#'(e )'5e$< 8
0is.i*es = i*es1
0is.ine!6#( = ine!6#(1
0is.)'5e$ = )'5e$1
0is.seP!i)!i4 9T0!e#+.NORMGPRIORITY C 2<1 AA (e se!6e! /e 0i/0e! %!i)!i4
0is.s#!9<1 AA s#! !&nnin/ 0e ne3 0!e#+
B
%&'(i$ 6)i+ !&n9< 8
AA !e%e# s(ee%H%!inMess#/e se6e!#( i*es
")! 9in i = @1 i D i*es1 iCC< 8
!4 8 AA !4H$#$0 is ")! e,$e%i)n 0#n+(in/
s(ee% 9ine!6#(<1
B $#$0 9Ine!!&%e+E,$e%i)n e< 8B
)'5e$.%!inMess#/e9<1
B
B
B
ine!"#$e Mess#/eP!in#'(e 8
6)i+ %!inMess#/e9<1
B
C)*%i(#!
9HI?iste%asBistribuidosIPract4Jjavac 9allbac8>est!java
Res&(#+)s
9HI?iste%asBistribuidosIPract4Jjava 9allbac8>est
>:e counter value is no<H 0000004
>:e counter value is no<H 0000004
>:e counter value is no<H 0000004
>:e counter value is no<H 0000004
>:e counter value is no<H 0000004
E5e*%() 2
O%e!#$i)nesIne!"#$e.5#6#
pac>a'e Paquete2peraciones3
import (ava.rmi.G3
import (ava-.sBin'.G3
public interface 2peracionesInterface
*
public int .umar!int -, int y"3
public int 9estar!int -, int y"3

+
O%e!#$i)nesI*%(.5#6#
pac>a'e Paquete2peraciones3
import (ava-.sBin'.G3
import (ava.io.PrintHriter3
public class 2peracionesImpl implements 2peracionesInterface
*
public void 2peracionesImpl!"
*
+
public int .umar!int -, int y"
*
return !-Iy"3
+
public int 9estar!int -, int y"
*
return !-Ey"3
+
+
%!in$i%#(.5#6#
pac>a'e Paquete2peraciones3
import (ava.rmi.G3
import (ava-.sBin'.G3
import Paquete2peraciones.G3
class principal
*
public static void main!.trin' ar'01"
*
2peracionesImpl op:neB 2peracionesImpl!"3
AA2peracionesInterface op:neB 2peracionesInterface!"3
.ystem.out.println!,suma& , I op..umar!J,K""3
+
+
)&L.istemasDistribuidosLPractDMset
)#/..P/4?:c&L.istemasDistribuidosLPractD3c&L.istemasDistribuidosLPractDLPaquete2peraciones
Res&(#+)s
)&L.istemasDistribuidosLPractDM(avac Paquete2peracionesA2peracionesInterface.(ava
)&L.istemasDistribuidosLPractDM(avac Paquete2peracionesA2peracionesImpl.(ava
)&L.istemasDistribuidosLPractDM(avac Paquete2peracionesAprincipal.(ava
)&L.istemasDistribuidosLPractDM(ava Paquete2peracionesAprincipal
suma& D;
)&L.istemasDistribuidosLPractDM
III. ACTIVIDADES
D. n un centro mdico se tiene&
2)s%i#( P#$iene Pe!s)n#(
5ombre. IdPaciente D5I
Direccin. D5I Direccin
4elefono. 5ombre/pellido. 4elfono.
Ca-. Direccin )ar'o.
4elfono.
Desarrolle la Interfa$ para ?ospital, Paciente, Personal.
Implemente las Interfaces y sus mtodos.
/'rupe todo en un paquete de nombre 2)s%i#(
Nenerar el archivo 2)s%i#(.5#! para poder distribuirlo a los usuarios finales.

Вам также может понравиться