Introducción a la Programación O.O.
Introducción a la Programación O.O.
AULA
MENTOR
[Link]
Nipo: 820-10-530-5
Autor:
Pilar Aranzazu Ocaña Diaz-Ufano y José
Miguel Ordax Cassá
UN I D AD ES D I D ÁCTI CAS:
1. I nt roducción
Autor:
Pilar Aranzazu Ocaña Diaz-Ufano y José
Miguel Ordax Cassá
I n t r odu cción
Te m a 1 .1
Í n dice de la u n ida d:
1. Hist oria
En est a unidad verem os el origen de la program ación Orient ada a Obj et os, y
cuales son sus principales caract eríst icas.
1 . H ist or ia
Una de las caract eríst icas para poder clasificar los lenguaj es de program ación es su
nivel de abst racción. Est e nivel puede ser expresado en base a la com plej idad del
problem a que se est á int ent ando resolver. Por ej em plo, el lenguaj e Ensam blador,
prim er lenguaj e de program ación, t iene un pequeño nivel de abst racción
relacionado t ot alm ent e con la m áquina en la que se est á ej ecut ando, por lo que el
nivel de abst racción que se aplicaba al ám bit o de la solución era m uy baj o.
Muchos de los lenguaj es que siguieron al Ensam blador, llam ados lenguaj es
im perat ivos, com o es el caso de Fort ran, Basic y C, fueron abst racciones de est e
prim er lenguaj e de program ación. El nivel de abst racción de est os lenguaj es es
m ucho m ás elevado que el del lenguaj e original, pero siguen est ando m uy
relacionados con la est ruct ura del ordenador en el que se ej ecut an, en lugar de la
est ruct ura del problem a a resolver y del m undo real. Debido a est a relación, los
program as desarrollados son difíciles de escribir y bast ant e cost osos de m ant ener.
El prim er lenguaj e considerado t ot alm ent e Orient ado a Obj et os y sobre el que se
basa Java, es Sm allt alk. Est e lenguaj e recoge las cinco principales caract eríst icas
que t ienen que t ener est os lenguaj es de program ación y que se verán m ás en
profundidad en la Unidad 1.2:
Todos los obj et os del m ism o t ipo pueden recibir los m ism os
m ensaj es.
1
MÓDULO 1
No hay que olvidar, que la Orient ación a Obj et os aplica t am bién al Análisis y Diseño
de las soluciones. El m ét odo m ás ut ilizado a día de hoy es el UML ( siglas de Unified
Modeling Language) sucesor de los m ét odos de Análisis y Diseño Orient ado a
Obj et os de finales de los 80 y com ienzo de los 90, t ales com o: Booch, Rum baugh
( OMT) y Jacobson.
UML es un m ét odo visual, basado en diagram as, que perm it e m odelar sist em as, en
base a Especificaciones, Arquit ect ura, Diseño y/ o I m plem ent ación.
2
Un ida d 1 .1 I n t r odu cción
2 . Ve n t a j a s de la Or ie n t a ción a Obj e t os
Mediant e la abst racción del m undo real, lo que se pret ende es definirlo t al y
com o es en base al problem a a resolver y ciñéndonos al ám bit o de la solución.
Nos perm it irá definir que ent idades com o t ales vam os a necesit ar que exist an
para solucionar nuest ro problem a y las relaciones ent re ellas, t ales com o
relaciones j erárquicas, relaciones de int eracción.
3
MÓDULO 1
El sist em a de abst racción del m undo real, perm it e cent rarnos por una part e
en cuales son las ent idades del dom inio, qué inform ación de t oda la posible es
la que ayuda a solvent ar nuest ro problem a, que t ipo de acciones u
operaciones son relevant es en est as ent idades, et c. para una vez que
t engam os t oda est a inform ación, ver las int errelaciones ent re t odos ellos y su
convivencia.
Est e t ipo de abst racción nos perm it e realizar un t ipo de program ación Bot t on-
Up ( de abaj o a arriba) , donde part iendo de piezas m ás pequeñas se va
conform ando el t odo.
Se puede llegar a com parar con el m ecanism o de cont rucción del Hardware,
que para la const rucción de un t odo, es necesario la ut ilización de piezas
pequeñas que se van ensam blando para conform ar las piezas m ás grandes,
que a su vez conform an el elem ent o Hardware final com o puede ser un
ordenador.
Los elem ent os fundam ent ales del m odelo de Obj et os, en el que se van a
basar el desarrollo de est os sist em as, y que se verán m ás en profundidad en
la Unidad 1.3 son:
4
Un ida d 1 .1 I n t r odu cción
2 .4 Pe r m it e e l de sa r r ollo it e r a t ivo.
5
MÓDULO 1
est a form a se consigue un prot ot ipado cont rolado: se crea un prot ot ipo al cual
se le añaden capacidades de form a increm ent al.
A cont inuación se m uest ra com o sería el ciclo it erat ivo de desarrollo. Por cada
conj unt o de casos de uso elegidos, se pasará por cada una de las fases,
perm it iendo t ener casos de usos finalizados m ient ras que ot ros est án
pendient es de iniciarse.
6
Un ida d 1 .1 I n t r odu cción
Las arquit ect uras Orient adas a Obj et os perm it en un m ej or aislam ient o de las
dependencias de la t opología en la que se ej ecut a la solución. De est a m anera
no nos t endrem os que preocupar en que t opología se va a ej ecut ar nuest ra
solución, ni en el caso de que la solución vaya a est ar dividida en dist int as
part es, las plat aform as de ej ecución de las m ism as. De est a m anera la
ent idad oficina, con la definición de sus dat os y de sus operaciones, será la
m ism a independient em ent e de que se ej ecut e en un PC, en un Servidor o en
un Mainfram e.
7
MÓDULO 1
La s pr in cipa le s ve nt a j a s son :
- Sum inist ra m odelos sim ilares a los del m undo real.
- Facilit a el desarrollo de sist em as com plej os.
- Facilit a la reut ilización.
- Perm it e el desarrollo it erat ivo de aplicaciones.
- Facilit a la int eroperabilidad de aplicaciones.
- Facilit a el desarrollo de sist em as com plej os.
M ÓD ULO A
Te m a 1 .2
Í n dice de la u n ida d:
1. Concept os básicos
2. Obj et o
3. Clase
Un ida d 1 .2 Con ce pt os bá sicos
En est a unidad verem os cuales son los concept os básicos en los que se apoya la
Orient ación a Obj et os, t ant o a nivel de Análisis y Diseño, com o en la Program ación.
1 . Con ce pt os bá sicos
Com o se ha com ent ado en la Unidad 1.1, los lenguaj es de program ación Orient ados
a Obj et os, se caract erizan por t ener su nivel de abst racción basado en el m undo
real. Así, el énfasis est á en la abst racción de dat os, y los problem as del m undo real
son represent ados por un conj unt o de obj et os de dat os para los que se adj unt a un
conj unt o correspondient e de operaciones.
Así, al igual que ot ros lenguaj es de program ación, int roducen un nuevo conj unt o de
t érm inos, o concept os básicos que son esenciales com prender, para poder realizar
cualquier análisis, diseño o desarrollo Orient ado a Obj et os:
Obj et o
At ribut o
Mét odo
I nt erfaz
Clase
A cont inuación verem os en m ás det alle cada uno de est os concept os básicos.
2 . Obj e t o
Hay m uchas definiciones que pueden darse de un obj et o, ent re las cuales se en-
cuent ran:
11
MÓDULO 1
Algo que puede com prenderse int elect ualm ent e. Por ej em plo,
una proceso de ordenación
Una ent idad Soft ware. Por ej em plo una list a de cosas.
Definiciones dadas por creadores de m et odologías Orient adas a Obj et os com o pue-
den ser:
Un obj et o es una ident idad con unos lím it es bien definidos que
encapsulan e st a do y com por t a m ie nt o. El est ado se represent a por
at ribut os y relaciones, el com port am ient o es represent ado por ope-
raciones y m ét odos. Obj ect Managem ent Group
Los t érm inos obj et o e inst ancia son usados indist int am ent e.
12
Un ida d 1 .2 Con ce pt os bá sicos
Todos los obj et os, t ienen int rínsecos las siguient es caract eríst icas, com o se
han vist o en alguna de definiciones del apart ado ant erior:
Ej e m plo: Para un reloj det erm inado, la ident idad o ident ificador podría ser
unReloj , con los at ribut os hora ( horas, m in, seg) , dia ( dia, m es, año) , m odelo y
num Serie y cuyos m ét odos u operaciones serían get Hora, get Dia, increm ent ar-
Hora, increm ent arDia, lim piarPant alla y t raducirFrecuencia.
2 .2 Est r u ct u r a de u n obj e t o
En base a las caract eríst icas del obj et o m encionadas ant eriorm ent e, t odo ob-
j et o est á form ado por at ribut os o est ruct ura encapsulada de los dat os y por
los m ét odos u operaciones perm it idas por dicho obj et o, ya sean visibles para
el usuario o no.
Select or ( get t er) : accede al est ado de un obj et o sin alt erarlo.
Por ej em plo get Hora( X)
13
MÓDULO 1
Const ruct or: crea un obj et o e inicializa su est ado. Por ej em plo
Reloj ( ) .
Dest ruct or: lim pia el est ado de un obj et o y lo dest ruye. Por
ej em plo ~ Reloj ( ) . No exist e en Java.
Ej e m plo: Para el obj et o unReloj m encionado ant eriorm ent e, la est ruct ura
sería la siguient e:
14
Un ida d 1 .2 Con ce pt os bá sicos
At r ibu t o: Es una caract eríst ica fundam ent al de cada obj et o y por lo t an-
t o com o verem os post eriorm ent e de una clase. Todos los at ribut os t ie-
nen algún valor, siendo est e una cant idad, una relación con ot ro obj et o
... Si el valor del at ribut o es un valor fij o para t odos los obj et os, se dice
que es un at ribut o est át ico
Cuando se habla del aspect o de los obj et os, no nos est am os refiriendo a los
concept os de buen o m al aspect o visual. Nos referim os a com o el obj et o se ve
int ernam ent e o aspect o int erno y com o ven al obj et o desde ot ros obj et os
t am bién llam ado aspect o ext erior.
15
MÓDULO 1
Est e aspect o ext erior, es llam ado t am bién in t e r fa z, siendo la part e visible y
accesible para el rest o de obj et os. Puede est ar form ado por uno o varios m é-
t odos. Tam bién se le define com o el prot ocolo de com unicación de un obj et o.
Es posible que exist a algún m ét odo que solo pert enezca al aspect o int erno pe-
ro no pert enezca al int erfaz. En est e caso, est os m ét odos no pueden ser lla-
m ados desde ot ros obj et os, sino que solam ent e pueden ser llam ados desde
m ét odos del propio obj et o.
Ej e m plo: Para el obj et o unReloj , el int erfaz est aría form ado por los m ét odos
get Hora, get Dia, increm ent arHora e increm ent arDia. Los m ét odos lim piarPan-
t alla y t raducirFrecuencia solam ent e pert enecen ( conj unt am ent e con los que
form an el int erfaz) al aspect o int erno. Así el m ét odo lim piarPant alla, es llam ado
por get Hora y get Dia ant es de m ost rar la inform ación pedida en el m ét odo
I n t e r fa z: Aspect o ext erior que es visible al rest o de obj et os. Puede es-
t ar form ado por uno o varios m ét odos.
16
Un ida d 1 .2 Con ce pt os bá sicos
3 . Cla se
Hast a ahora hem os vist o que define a un obj et o. Una de las definiciones m ás senci-
llas es algo del m undo real, t angible o visible.
Hem os vist o que los obj et os est án form ados por at ribut os y m ét odos. La definición
de est ruct ura y com port am ient o de un obj et o es a lo que se denom ina clase. Es por
t ant o un pat rón para la definición de at ribut os y m ét odos para un t ipo part icular de
obj et os.
Todos los obj et os de una clase dada son idént icos en est ruct ura y com port am ient o
pero son únicos ( aunque t engan los m ism os valores en sus at ribut os) .
I nst ancia es el t érm ino ut ilizado para referirse a un obj et o que pert enece a una cla-
se concret a.
Una clase, por t ant o es solam ent e la definición. Mient ras que un obj et o o inst ancia
es algo real con la est ruct ura y com port am ient o de la clase a la que pert enece.
La est ruct ura de una clase, por t ant o, viene det erm inada por un nom bre, los at ribu-
t os que cont iene y los m ét odos que realiza.
Ej e m plo: El obj et o unReloj , pert enece a la clase Reloj , cuyo nom bre es Re-
loj , cuyos at ribut os son dia, hora, m odelo y num Serie y cuyos m ét odos son
get Hora, get Dia, increm ent arHora, increm ent arDia, lim piarPant alla y t raducir-
17
MÓDULO 1
Frecuencia
Com o se puede ver en la im agen ant erior, en los diagram as UML, la definición de
una clase, se realiza m ediant e un rect ángulo, divido en t res part es y cont eniendo
en el siguient e orden: Nom bre, At ribut os y Mét odos.
Es im port ant e saber diferenciar que es una clase y que es un obj et o y en que
consist e cada una de ellas. Por ello, recapit ulam os t oda la inform ación m os-
t rada hast a el m om ent o.
Una clase es un pat rón para la definición del est ado y el com port am ient o de
un t ipo part icular de obj et os.
Todos los obj et os de una clase dada son idént icos en est ruct ura y com port a-
m ient o, pero t ienen ident idad única.
18
Un ida d 1 .2 Con ce pt os bá sicos
Así para la clase Reloj descrit a ant eriorm ent e, t endrem os los obj et os unReloj
( dia= ” 01- 03- 2010” , hora= ” 13: 01: 03” , m odelo= ” Rolex” , num Serie= ” 123456” )
y ot roReloj ( dia= ” 01- 03- 2010” , hora= ” 13: 01: 03” , m odelo= ” Swat ch” , num Se-
rie= ” Sab748” ) .
Pero si nos param os a pensar, ¿qué surge ant es? ¿La clase y por lo t ant o
cream os los obj et os del m undo real? O part iendo de los obj et os del m undo re-
al ¿podem os definir su est ruct ura y com port am ient o?.
La clasificación dent ro de la Orient ación a Obj et os, sobre t odo en las fases de
Análisis y Diseño, perm it e que los obj et os con la m ism a est ruct ura de dat os y
con el m ism o com port am ient o se agrupan para form ar una clase.
19
MÓDULO 1
Decidir cual es el concept o o concept os ( Clase, Obj et o, Mét odo, At ribut o) que
cuadran con las siguient es definiciones. Pensar la solución ant es de pasar al
siguient e cuadro:
1. El valor de m is at ribut os puede ser dist int o al de los de m i sem ej ant e: Ob-
jeto
2. Yo m e com port o com o una plant illa: Cla se
3. A m i m e gust a hacer cosas: Obj e t o, m é t odo
4. Yo puedo t ener m uchos m ét odos: Cla se , obj e t o
5. Yo represent o el est ado: At r ibu t o
6. Yo represent o el com port am ient o: M é t odo
7. Yo est oy en los obj et os: At r ibu t o, m é t odo
8. Yo vivo en m em oria: Obj e t o
9. Yo soy usado para crear inst ancias: Cla se
[Link] est ado puede cam biar: Obj e t o
[Link] declaro m ét odos: Cla se
[Link] puedo cam biar en ej ecución: Obj e t o, a t r ibu t o
20
Tít u lo de u n ida d didá ct ica
Pa r a digm a s de la OO
Te m a 1 .3
Í n dice de la u n ida d:
2. Abst racción
4. Relaciones
5. Polim orfism o
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
En est a unidad verem os cuales son los paradigm as en los que se apoya la Orient a-
ción a Obj et os, t ant o a nivel de Análisis y Diseño, com o en la Program ación.
Com o se ha com ent ado en la Unidad 1.1, los lenguaj es de program ación Orient ados
a Obj et os, se caract erizan por t ener su nivel de abst racción basado en el m undo
real. Así, el énfasis est á en la abst racción de dat os, y los problem as del m undo real
son represent ados por un conj unt o de obj et os de dat os para los que se adj unt a un
conj unt o correspondient e de operaciones.
Est a disciplina y por t ant o cualquier lenguaj e de Orient ación a Obj et os que pert e-
nezca a ella, debe de cum plir con los siguient es paradigm as ( aunque cada lenguaj e
t enga sus propias peculiaridades al respect o) :
Abst racción
Herencia
Polim orfism o
A cont inuación verem os en m ás det alle cada uno de est os paradigm as.
2 . Abst r a cción
25
MÓDULO 1
La clave de la program ación Orient ada a Obj et os est á en abst raer los m ét odos y los
dat os com unes a un conj unt o de obj et os y alm acenarlos en una clase. Así t odos los
obj et os de una clase, se diferenciaran solam ent e en el est ado, t eniendo t odos ellos
el m ism o com port am ient o.
Prim eram ent e hay que cent rarse en lo que es y lo que hace un obj et o ( at ribut os y
com port am ient o) , ant es de decidir cóm o debería ser im plem ent ado. Nos cent ram os
por t ant o en la definición, en lugar de la im plem ent ación.
Se t rat an los dos paradigm as de form a conj unt a, puest o que se ut ilizan norm al-
m ent e de form a sim ult ánea.
Encapsular, significa reunir a t odos los elem ent os que pueden considerarse pert e-
necient es a una m ism a ent idad, al m ism o nivel de abst racción.
Ocult am ient o, consist e en separar el aspect o ext erno del obj et o o int erfaz, al cual
pueden acceder ot ros obj et os, del aspect o int erno e im plem ent ación del m ism o,
26
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
que es inaccesible para los dem ás. Perm it e t rat ar a un obj et o com o una caj a ne-
gra, la cual solo es t rat ada por el rest o de obj et os por su el int erfaz.
Perm it e, por t ant o que se m odifique la im plem ent ación int erna de un obj et o sin
afect ar a los client es que lo ut ilizan. De est a m anera, m ient ras el int erfaz no varíe,
se puede m odificar la im plem ent ación o el aspect o int erno, sin que los obj et os con
los que int errelaciona se vean afect ados.
4 . Re la cion e s
Las clases no exist en de form a aislada sino que m uchas veces t ienen dependencias
ent re ellas. Est as dependencias es a lo que se llam a relación y exist en dist int os t i-
pos o grados, que se enum eran a cont inuación:
Est a relación t iene m ult iplicidad ( propiedad que expresa el núm ero de inst an-
cias de cada clase que part icipa en la relación) :
27
MÓDULO 1
Es una form a part icular de asociación que expresa un acoplam ient o m as fuer-
t e ent re obj et os.
I ndica que los obj et os de una clase cont ienen o est án form ados por obj et os de
ot ras clases, aunque no siem pre precisa una cont ención física, sino al m enos
lógica.
28
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
Por t ant o, un obj et o que represent a el ‘t odo’, est á asociado con un conj unt o
de obj et os que represent an sus com ponent es.
Ej e m plo de a gr e ga ción : Una cent ralit a puede cont ener llam adas. Per o
puede exist ir sin ellas.
Un obj et o no puede exist ir si no exist en los obj et os de los que est á com pues-
t o.
Ej e m plo de com posición : Un coche no puede exist ir, sin las part es que le
com ponen, en est e caso, las ruedas, la carrocería y el m ot or.
29
MÓDULO 1
4 .4 Re la ción de H e r e n cia
Las clases se disponen en una j erarquía, donde una clase hereda los at ribut os
y operaciones de las clases superiores en la j erarquía.
Una clase puede t ener sus propios at ribut os y operaciones adicionales a los
heredados y puede m odificar los at ribut os y operaciones heredadas si necesit a
cam biar su im plem ent ación.
30
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
Un m ensaj e es un com ando o pet ición que se le envía a ot ro obj et o, para que
realice una operación.
El obj et o llam ant e requiere el conocim ient o previo del int erfaz del obj et o re-
cept or, porque sino no t iene m anera de saber que pet iciones t iene disponibles
y los form at os del m ensaj e a enviar.
31
MÓDULO 1
5 . Polim or fism o
Perm it e im plem ent ar m últ iples form as de un m ism o m ét odo, dependiendo cada una
de ellas de la clase sobre la que se realice la im plem ent ación. Est a basado en el
concept o especialización de la herencia, donde cada clase hij a, sabe im plem ent ar
m ej or que el padre alguno o t odos sus m ét odos.
En el polim orfism o, una vez creados los obj et os, se abst raen a la clase padre que
proporciona el int erfaz, para que el obj et o llam ant e generalice su envío de m ensaj e
independient em ent e del t ipo de obj et o específico o clase hij a; solam ent e debe de
ser conscient e del int erfaz del m ism o, m ediant e la clase padre. Es en ej ecución,
cuando dependiendo realm ent e del t ipo de obj et o real, se ej ecut ará la im plem ent a-
ción concret a de cada obj et o.
32
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
Una m argarit a es un t ipo de flor.
Una rosa es un t ipo de flor.
Las rosas roj as y las rosas am arillas son t ipos de rosas.
Un pét alo es una part e de am bos t ipos de flores.
Los páj aros se com en a ciert as plagas com o los pulgones, que pueden
infect ar a ciert os t ipos de flores.
Del enunciado de la práct ica, se pueden det erm inar dist int as relaciones:
Exist e una clase Flor que cont iene Pét alos: Relación de com posición. Aunque
en el m undo real exist en flores sin pét alos ( sería una relación de agrega-
ción) en el ám bit o de nuest ro problem a, solo cont em plam os flores con ellos.
Las clases Rosa y Margarit a t ienen son Flores, por lo que t ienen una rela-
ción de herencia con Flor.
33
MÓDULO 1
Com o solución t am bién válida, se podría t ener una relación de herencia con
Rosa, las clases RosaAm arilla y RosaRoj a, pero de est a m anera, t eniendo un
at ribut o color perm it e una m ej or reut ilización en el caso de que pueda apa-
recer ot ra rosa de ot ro color.
A su vez, com o t ipos de Plaga que pueden asolar a nuest ras Flores son los
Pulgones , por lo que t iene una relación de herencia ent re Plaga y Pulgon y
una relación de asociación ent re Plaga y Flor. La Flor conoce a la Plaga pero
no a la inversa.
Com o los Paj aros se com en a las plagas, t ienen relación de asociación con
ellas, con cualquier t ipo, ya sea un Pulgon o en un fut uro una ArañaRoj a.
34
Un ida d 1 .3 Pa r a digm a s de la Or ie n t a ción a Obj e t os
En est a Unidad hem os est udiado los diferent es paradigm as de la program ación
Orient ada a Obj et os. Est os son:
Abst r a cción
En ca psu la ción y Ocult a m ie n t o
Re la cion e s
- asociación
- agregación
- com posición
- herencia
- m ensaj e
Polim or fism o
35
M ÓD ULO B
UN I D AD ES D I D ÁCTI CAS:
Te m a 2 .1
Í n dice de la u n ida d:
1. I nt roducción
En est a unidad verem os el origen del lenguaj e de program ación Java y cuales son
sus principales caract eríst icas.
1 . I n t r odu cción
Fue creado por Sun Microsyst em s en el año 1991 e inicialm ent e se denóm ino OAK y
se desarrolló principalm ent e orient ándolo a la program ación de m icrosist em as y
com ponent es elect rónicos.
Tras el cam bio de nom bre y m odificaciones de diseño, el lenguaj e Java fue presen-
t ado en sociedad en Enero de 1995 con una nueva orient ación: I nt ernet . Fue pre-
sent ado conj unt am ent e con un navegador Web denom inado Hot Java.
Tiene una sint axis m uy sim ilar a la de C+ + , pero t iene un m odelo de obj et os m as
sim ple y elim ina elem ent os de baj o nivel que suelen inducir a m uchos errores, co-
m o pueden ser la m anipulación direct a de punt eros o m em oria.
Ent re noviem bre de 2006 y m ayo de 2007, Sun Microsyst em s cedió la m ayor part e
de sus t ecnologías Java a GNU GPL, de t al form a que práct icam ent e t odo el Java de
Sun es ahora Soft ware libre.
La idea inicial del lenguaj e se basó en el paradigm a de Writ e Once, Run Anywhere
( Escribe una vez, ej ecut a en cualquier lugar) , proporcionando un lenguaj e indepen-
dient e de la plat aform a en la que se ej ecut e.
Java ha sufrido num erosos cam bios desde la versión inicial, JDK ( Java Depelopm ent
Kit o ent orno de desarrollo) 1.0, así com o un aum ent o increíble en el núm ero de
clases y paquet es que com ponen la bibliot eca est ándar. Est a bibliot eca est ándar se
ha vist o am pliada por num erosas bibliot ecas de caráct er específico, com o pueden
ser las bibliot ecas visuales, com unicaciones, et c.
43
MÓDULO 2
2 . Ca r a ct e r íst ica s de l le n gu a j e
A cont inuación enum eram os t odas las caract eríst icas de est e lenguaj e de progra-
m ación Orient ado a Obj et os, que adem ás de cum plir con los paradigm as de est a
disciplina de program ación ( Abst racción, Encapsulación y Ocult am ient o, Herencia,
Polim orfism o y Reut ilización) , posee las siguient es propiedades:
Sencillo
Dist ribuido
I nt erpret ado
Robust o
Seguro
Mult it hread
Dinám ico
A cont inuación verem os en m ás det alle cada una de las caract eríst icas m encio-
nadas.
2 .1 Se n cillo
44
Un ida d 2 .1 I n t r odu cción a Ja va . Ca r a ct e r íst ica s de l le n gu a j e
Posee una clase St ring, en vez del array de t ipo char[ ] finali-
zado con nulo.
Cuent a con una am plia bibliot eca de clases para com unicarse m ediant e los
prot ocolos de com unicaciones TCP/ I P: HTTP, FTP… abriendo socket s, est able-
ciendo y acept ando conexiones con servidores o client es rem ot os.
2 .3 I n t e r pr e t a do
Para que un program a Java puede ej ecut arse, t iene que ser com pilado pre-
viam ent e m ediant e un com pilador. Es la principal diferencia con el rest o de
lenguaj es int erpret ados. Necesit a ser válidado y com pilado en un paso previo
al de su ej ecución.
45
MÓDULO 2
Los byt ecodes son int erpret ados ( ej ecut ados) en cualquier ent orno donde
exist a un int érpret e de Java generando código m áquina. El int érpret e de Java
se llam a Máquina Virt ual Java o Java Virt ual Machine ( JVM) y est e si que es
dependient e de la plat aform a en la que se ej ecut a, exist iendo un inst alable
para la m ayoría de sist em as operat ivos y arquit ect uras com o verem os en la
Unidad 2.2.
A cont inuación se m uest ra cual sería el procedim ient o a seguir, para poder
ej ecut ar un program a j ava.
Est a caract eríst ica es la que posibilit a el propósit o inicial de Writ e Once, Run
Everywhere.
46
Un ida d 2 .1 I n t r odu cción a Ja va . Ca r a ct e r íst ica s de l le n gu a j e
2 .4 Robu st o
Un soft ware robust o es aquel que no se ‘int errum pe’ fácilm ent e a consecuen-
cia de fallos. Al ser previam ent e com pilado, t odos los errores sint áct icos son
det ect ados en est e fase y obligat oriam ent e t ienen que ser elim inados.
Un lenguaj e de est as caract eríst icas suele t ener m ás rest ricciones a la hora de
program ar y realiza num erosas com probaciones t ant o en com pilación com o
en ej ecución. Facilit a el m anej o de excepciones, para poder t rat ar los fallos en
ej ecución ( se verán en m ás det alle en la Unidad 3.5) .
2 .5 Se gu r o
Por su nat uraleza dist ribuida, donde por ej em plo, los applet s se baj an desde
cualquier punt o de la red y se ej ecut an en local, el t em a de la seguridad es
m uy crít ico. A nadie le gust aría ej ecut ar en su propio ordenador program as
que t uvieran t ot al acceso a su sist em a, donde por ej em plo, pudieran coger in-
form ación confidencial, t ales com o passwords o cuent as bancarias o incluso
poder form at ear el ordenador personal.
Todos los navegadores poseen una ‘sand box’ o ent orno de ej ecución cont ro-
lado donde no se perm it e realizar ninguna ej ecución fuera de ella ( com o pue-
de ser acceso al sist em a de ficheros) a m enos que se indiquen explícit am ent e
excepciones por part e del usuario que lo ej ecut a.
Est as excepciones pueden venir det erm inadas por t ecnologías de firm a digit al
para confiar en un det erm inado código Java y/ o m ediant e polít icas de seguri-
dad para cont rolar de una m anera m ás precisa que puede o no puede hacer
( por ej em plo leer ciert os ficheros, poder abrir socket s ...) .
2 .6 Ar qu it e ct u r a n e u t r a y por t a bilida d
Los byt ecodes, result ados de la com pilación de los program as j ava, son int er-
pret ados en cualquier plat aform a donde exist a una JVM, ya sea por ej em plo,
una plat aform a Windows, Unix, Mac, ent re ot ras.
47
MÓDULO 2
Por t ant o, el código byt ecode es independient e no solo de la plat aform a Soft -
ware en la que se ej ecut a, sino t am bién de la plat aform a Hardware.
La port abilidad ent re las plat aform as, se consigue, debido a que la JVM espe-
cifica el t am año de sus t ipos básicos, el com port am ient o de los operadores
arit m ét icos y el uso de est ándares com o UNI CODE, I EEE 754 et c… que per-
m it en represent ar cualquier caráct er m ediant e 2 byt es en lugar de uno solo,
com o ocurre con el ASCI I .
2 .7 Alt a s pr e st a cion e s
Exist en int érpret es JI T ( Just - in- t im e) que int erpret an el código en el m om ent o
de la ej ecución, generando código m áquina una sola vez y en las sucesivas
ej ecuciones reut iliza dicho código m áquina en lugar de volver a generar cada
vez que pasa la ej ecución por ahí.
A part ir de la JVM 1.2.2 se int roduj o un nuevo JI T llam ado Hot Spot .
48
Un ida d 2 .1 I n t r odu cción a Ja va . Ca r a ct e r íst ica s de l le n gu a j e
A pesar de t odo, exist e algún com pilador ‘real’ de Java ( perdem os la port abili-
dad y ganam os en rendim ient o) . Es decir, que se com pila ant es de su ej ecu-
ción, generando un ej ecut able ( no código int erpret able) at ado a dicha plat a-
form a. Est e t ipo de com pilador se encuent ran en desuso.
2 .8 M u lt it h r e a d
El t érm ino m ult it hread o m ult ihilo en cast ellano, se refiere a la ej ecución de
varias t areas a la vez en un m ism o proceso, lim it adas est rict am ent e en t iem -
po real por el núm ero de procesadores.
Ej e m plo: Mient ras que un t hread se encarga de int eract uar con el
usuario, y ot ro t hread realiza ciert os cálculos. Por ej em plo, es bast ant e frecuen-
t e la exist encia de un t hread que espera que un usuario lance una pet ición de
operación y en el m om ent o de la llegada se abra ot ro t hread par a ej ecut ar dicha
operación, m ient ras el t hread de com unicación con el usuario queda a la espera
de nuevas pet iciones. Así, si t res usuarios realicen t res pet iciones al m ism o
t iem po el núm ero t ot al de t hreads ser ían 4, uno por cada operación ej ecut ándo-
se m ás el t hread que sigue quedando a la espera de nuevas com unicaciones.
Cuando la ej ecución de cada operación t erm ine, el t hread corr espondient e t er-
m inará y desaparecer á.
Para poder realizar est a ej ecución sim ult anea de varias t areas, Java posee
una serie de clases que facilit an su ut ilización.
2 .9 D in á m ico
Para conseguir est o, Java em plea un m ét odo de int erfaces para evit ar est as
dependencias y recom pilaciones.
49
MÓDULO 2
clases vía program át ica, una clase denom inada X, y una vez encont rada que
la ej ecut e. Est e acceso se puede realizar t ant o a nivel de clase, com o a nivel
de m ét odo y at ribut o.
3 . La pla t a for m a Ja va
Com o hem os m encionado ant eriorm ent e, una plat aform a es t ant o el ent orno hard-
ware y/ o soft ware donde se ej ecut a un program a.
La plat aform a Java es una plat aform a solo soft ware que se ej ecut a sobre ot ra pla-
t aform a hardware/ soft ware.
50
Un ida d 2 .1 I n t r odu cción a Ja va . Ca r a ct e r íst ica s de l le n gu a j e
Java ME: Java Micro Edit ion. Orient ado a ent ornos con recur-
sos lim it ados com o t eléfonos m óviles, PDAs,
Java SE: Java St andard Edit ion. Orient ados a ent ornos de
gam a m edia y est aciones de t rabaj o, com o por ej em plo un usuario
m edio en un PC de escrit orio.
Java EE: Java Ent erprise Edit ion. Orient ados a ent ornos em -
presariales dist ribuidos o I nt ernet .
51
MÓDULO 2 PROGRAMACIÓN JAVA
Adem ás se han cat egorizado los dist int os t ipos de pla t a for m a s Ja va :
- Java ME
- Java SE
- Java EE
M ÓD ULO B
En t or n o de de sa r r ollo
Te m a 2 .2
Í n dice de la u n ida d:
En est a unidad verem os el ent orno de desarrollo de Java, denom inado JDK ( Java
Developm ent Kit ) y sus principales caract eríst icas.
1 . Ja va D e ve lopm e n t Kit
El JDK com o t ál, es un conj unt o de especificaciones que son im plem ent adas por
dist int os proveedores, t ales com o:
Sun, que t iene una JDK para las siguient es plat aform as: Win-
dows en sus dist int as versiones, Linux y Solaris ( Sun) . Descargable
de form a grat uit a de la siguient e URL
ht t p: / / j [Link] / j avase/ downloads
I BM, que t iene una JDK para las siguient es plat aform as: Win-
dows en sus dist int as versiones, Linux, AI X, OS/ 2, OS/ 400 y z/ OS.
Apple, que t iene una JDK para las siguient es plat aform as: Ma-
cint osh .
1 . 1 H ist or ia
La prim era versión del JDK fué el JDK 1.0.0 que se ret iró de circulación con la
aparición del JDK 1.1.0
El nom bre ha ido cam biando ent re JDK ( Java Developm ent Kit ) y SDK ( Soft -
ware Developm ent Kit ) , quedando de nuevo JDK com o nom bre act ual. Tam -
bién ha ido cam biando el sist em a de num eración, cam biando a 5.0 en lugar de
1.5.
A su vez, y a part ir de la versión 1.2, el nom bre " J2SE" ( Java 2 Plat form ,
St andard Edit ion) , reem plazó a JDK para dist inguir la plat aform a base de J2EE
( Java 2 Plat form , Ent erprise Edit ion) y J2ME ( Java 2 Plat form , Micro Edit ion) .
55
MÓDULO 2
A part ir de la versión 5 se ha quit ado el 2 del nom bre, quedando la nom encla-
t ura Java SE, Java EE y Java ME respect ivam ent e
Cada una de est as plat aform as, cont ienen t ant o una JDK ( o ent orno de desa-
rrollo y ej ecución) com o un JRE ( o Java Runt im e Environm ent , solam ent e ut i-
lizado en ej ecución) , t am bién llam ado JVM. En est e curso, solam ent e nos cen-
t rarem os en el JDK del Java SE.
Desde la versión 1.4 de J2SE, la evolución del lenguaj e de program ación Java
ha sido regulada por el JCP ( Java Com m unit y Process) , que ut iliza Java Speci-
ficat ion Request s ( JSRs) para proponer y especificar cam bios en la plat aform a
Java. El lenguaj e en sí m ism o est á descrit o en el Java Language Specificat ion
( JLS) , o Especificación del Lenguaj e Java. Los cam bios en los JLS son gest io-
nados en JSR 901.
Veam os a cont inuación un breve resum en de las versiones y los cam bios im -
port ant es que hubo en cada una de ellas:
56
Un ida d 2 .2 En t or n o de D e sa r r ollo
JavaSound API
57
MÓDULO 2
Logging API
JDK 5.0: Aparece el 30 de sept iem bre de 2004 con el nom bre
clave Tiger. Los cam bios m ás not ables fueron:
58
Un ida d 2 .2 En t or n o de D e sa r r ollo
59
MÓDULO 2
Ver la Unidad I nst alación del JDK y Eclipse para los det alles de la inst alación.
Hay dos variables de ent orno de gran relevancia para el JDK, PATH y CLASSPATH:
2 .1 Con t e n ido
A cont inuación se m uest ran que direct orios cont iene el JDK y para que se ut ili-
zan:
60
Un ida d 2 .2 En t or n o de D e sa r r ollo
2 .2 Com pon e n t e s
A cont inuación se m uest ran los com ponent es que conform an el JDK.
Exist e docum ent ación online acerca del JDK en la siguient e URL
ht t p: / / j [Link] / j avase/ 6/ docs/ api/ [Link] m l
3 . I D Es o En t or n o I n t e gr a do de D e sa r r ollo
En el capít ulo ant erior, hem os est ado viendo el JDK no visual. Pero exist en herra-
m ient as gráficas que sim plifican el desarrollo, com pilación y ej ecución de los pro-
61
MÓDULO 2
gram as Java ( al m enos en ent ornos de desarrollo) . Mencionam os a cont inuación las
m as im port ant es y las URLs de referencia:
[Link]
JBuilder: Es de Borland
PRÁCTI CA A: Requiere inst alar el JDK. Desde una sesión de DOS, ir a un direct orio
dist int o del de la inst alación del JDK y ej ecut ar los com andos j [Link] - version
62
Un ida d 2 .2 En t or n o de D e sa r r ollo
y j [Link]
En el caso de que no aparezcan correct am ent e la salida de los com andos m encio-
nados ant eriorm ent e, verificar el valor de la variable de ent orno PATH com probando
que cont iene el direct orio bin donde se haya inst alado el JDK.
PRÁCTI CA B: Requiere inst alar el JDK. Desarrollar un program a Java que m uest re
por pant alla el t ext o “ ¡Hola Mundo! ” con el JDK de Sun.
63
MÓDULO 2
En el caso de que no est é puest a la variable de ent orno PATH, abrir una sesión DOS
y aj ust ar la variable PATH para que el Sist em a Operat ivo sepa encont rar las herra-
m ient as del JDK. Para respet ar el valor que ya t uviese la variable PATH le añadim os
% PATH% .
Aj ust ar la variable CLASSPATH para que las herram ient as del JDK sepan encont rar
nuest ras clases Java. Tenem os dos opciones, o añadir el . ( punt o) y siem pre
ej ecut ar las herram ient as en el direct orio donde se encuent re el código, o añadir el
direct orio de t rabaj o y ej ecut ar las herram ient as donde queram os. Para respet ar el
valor que ya t uviese la variable CLASSPATH le añadim os % CLASSPATH% .
64
Un ida d 2 .2 En t or n o de D e sa r r ollo
Ahora arrancam os un edit or de t ext o ( por ej em plo Not epad) para escribir el código
fuent e de nuest ro program a que guardarem os en el fichero Pract ica1.j ava; el
nom bre del fichero debe ser exact am ent e igual ( incluyendo m ayúsculas y
m inúsculas) al de la clase Java que vam os a desarrollar.
65
MÓDULO 2
Com pilam os el program a Java con el com pilador “ j avac” . Al com pilador hay que
darle el nom bre del fichero incluyendo su ext ensión.
66
Un ida d 2 .2 En t or n o de D e sa r r ollo
Si no sale ningún m ensaj e significa que t odo ha ido bien y que ha creado el
byt ecode, es decir, Pract [Link]
Por últ im o, ej ecut am os el program a Java con la JVM “ j ava” . A la JVM hay que darle
el nom bre del fichero del byt ecode sin la ext ensión.
67
MÓDULO 2
PRÁCTI CA C: Requiere inst alar Eclipse. Desarrollar un program a Java que m ues-
t re por pant alla el t ext o “ ¡Hola Mundo! ” con Eclipse
Cerrar la vent ana de bienvenida si aparece ( est a vent ana aparece la prim era vez
que se arranca Eclipse) .
68
Un ida d 2 .2 En t or n o de D e sa r r ollo
69
MÓDULO 2
Verificar que la perspect iva Java est á abiert a, y sino cam biar a ella
70
Un ida d 2 .2 En t or n o de D e sa r r ollo
Crear una clase Java nueva llam ada Pract ica2 con el m ét odo m ain.
71
MÓDULO 2
Seleccionar Finish
Escribir el código dent ro del m ét odo m ain y salvar con Ct rl + S o File - > Save
72
Un ida d 2 .2 En t or n o de D e sa r r ollo
Por defect o, en eclipse, al salvar los cam bios realizados en un fichero, se realiza la
com pilación de las clases que est án en el worskpace.
En el caso de producirse algún error de com pilación, se pueden ver en la vist a Pro-
blem s
Seleccionando la clase Java, con el bot ón derecho del rat ón ej ecut arla com o Java
Applicat ion
73
MÓDULO 2
74
Tít u lo de u n ida d didá ct ica
Se han vist o t am bién el con t e n ido y com pon e n t e s que for m a n u n JD K y dos
variables m uy im port ant es a t ener en cuent a en ent ornos de desarrollo Java que
son PATH y CLASSPATH .
M ÓD ULO B
Sin t á x is
Te m a 2 .3
Í n dice de la u n ida d:
3. I dent ificadores
4. Variables
5. Tipos de dat os
7.
Un ida d 2 .3 Sin t a x is
En est a unidad t rat arem os en det alle la sint axis del lenguaj e de program ación Java.
Dicha sint axis es com probada por el com pilador y en caso de no ser correct a, est e
nos indicará los errores o avisos exist ent es. Por defect o, no se pueden ej ecut ar
program as Java con errores de com pilación, por lo que la sint axis del program a de-
be ser 100% correct a.
1 . Com e n t a r ios
Los com ent arios son líneas de código que no son ej ecut adas en t iem po de ej ecu-
ción, ni siquiera son incluidas en el byt e code com pilado. Est os com ent arios, perm i-
t en incluir explicaciones acerca de qué es lo que est á haciendo nuest ro código, do-
cum ent ación, inhabilit ar líneas de código que ya no son necesarias en runt im e, et c.
Exist en t res form as dist int as de escribir los com ent arios:
/ / com ent ario de una sola línea. Abarca desde el com ienzo del
com ent ario / / hast a el final de línea.
79
MÓDULO 2
Uno de los caract eres m ás im port ant es a t ener en cuent a en Java es el punt o y co-
ma o ;.
El punt o y com a define una sent encia Java o lo que es lo m ism o una línea sim ple de
código t erm inada en un punt o y com a. La línea sim ple de código puede o no est ar
físicam ent e form ada en una línea física.
80
Un ida d 2 .3 Sin t a x is
Suelen ut ilizarse conj unt am ent e con las sent encias de cont rol de fluj o ( ver punt o
8) , pero t am bién pueden ut ilizarse, por ej em plo, para m inim izar el ám bit o de cier-
t as variables, com o son las variables de bloque ( ver punt o 4.2) .
Java perm it e los espacios en blanco ent re elem ent os de código fuent e. Son ut iliza-
dos principalm ent e para separar cada uno de los elem ent os de la sint axis Java ( al
m enos un espacio en blanco com o m ínim o) y m ej orar el ent endim ient o del código
( el núm ero de espacios ut ilizado para est e propósit o es irrelevant e) .
81
MÓDULO 2
3 . I de n t ifica dor e s
Son los nom bres unívocos que se le dan a las clases, m ét odos y variables. Hay que
t ener present e las siguient es reglas:
82
Un ida d 2 .3 Sin t a x is
4 . Va r ia ble s
Una variable es un cont enedor de dat os ident ificado m ediant e un ident ificador o
nom bre. Dicho ident ificador se ut ilizará para referenciar el dat o que cont iene.
Toda variable debe llevar asociado un t ipo que describe el t ipo de dat o ( ver punt o
5) que guarda. Por t ant o, una variable t iene:
Un t ipo
Un ident ificador
Un dat o o valor.
83
MÓDULO 2
4 . 2 Ám bit o de la s va r ia ble s
El lugar de declaración de una variable est ablece su ám bit o. Los dist int os ám -
bit os exist ent es son:
84
Un ida d 2 .3 Sin t a x is
85
MÓDULO 2
86
Un ida d 2 .3 Sin t a x is
5 . Tipos de da t os.
Tipos Prim it ivos. Exist en ocho t ipos de dat os prim it ivos clasifi-
cados en cuat ro grupos diferent es:
Lógico: boolean.
Caráct er: char.
Núm eros ent eros: byt e, short , int y long.
Núm eros reales: double y float .
5 .1 Tipo de da t o lógico
La ‘keyword’ ut ilizada para definir un t ipo de dat o lógico es boolean. Sus posibles
valores son:
t rue: o verdadero
Se suelen ut ilizar en las sent encias de cont rol de fluj o del t ipo bifurcaciones del
t ipo if- t hen- else ( ver punt o 8) .
5 .2 Tipo de da t o ca r á ct e r
87
MÓDULO 2
Para las cadenas de caract eres exist e un t ipo com plej o: la clase St ring que se
verá en m ás det alle en la Unidad 2.6 Clases básicas.
Se suelen ut ilizar para el t rat am ient o de caract eres, ya sea com o caract eres in-
dividuales dent ro de un St ring, caract eres cont enidos en un fichero, et c.
5 .3 Tipo de da t os e n t e r os
Las ‘keyword’ ut ilizadas para definir un t ipo de dat o ent ero son byt e, short , int y
long. Sus t am años son:
88
Un ida d 2 .3 Sin t a x is
Se suelen ut ilizar en operaciones arim ét icas, en sent encias de cont rol de t ipo bu-
cle ( en concret o la sent encia for y el t ipo int ) , et c.
5 .4 Tipo de da t os r e a le s
Las ‘keyword’ ut ilizadas para definir un t ipo de dat o real son float y double. Sus
t am años son:
89
MÓDULO 2
Las ‘keyword’ es el nom bre de la clase del obj et o que va a cont ener la variable.
5 .6 Tipo de da t o e n u m e r a ción
Se t rat a de un t ipo de dat o com plej o algo especial que surge con la versión 5.0
de Java. I m plem ent a una clase que t iene un at ribut o que puede t om ar varios va-
lores y solo esos.
Se suelen ut ilizar para t ener una list a de posibles valores asociados a una varia-
ble y solam ent e dichos valores.
El siguient e ej em plo m uest ra el valor de variables de dist int os t ipos con sus va-
lores por defect o.
90
Un ida d 2 .3 Sin t a x is
El siguient e ej em plo m uest ra el valor de variables de dist int os t ipos con sus va-
lores asignados en la declaración
91
MÓDULO 2
Un t ipo de dat o núm erico puede llegar a convert irse a ot ro t ipo. Exist en cuat ro
ent ornos de conversión en Java:
Llam ada a m ét odos con parám et ros. Por ej em plo: f( long p) - >
f( 5) / / se llam a a un m ét odo con un int y se conviert e a un long
Una variable de t ipo prim it ivo cont iene el dat o direct am en-
t e:
Una variable de t ipo com plej o cont iene una referencia ( punt ero) a la zona de m e-
m oria donde est á el obj et o:
92
Un ida d 2 .3 Sin t a x is
7 . Ope r a dor e s
Los operadores realizan funciones sobre uno, dos o t res operandos ( op) . Por t ant o,
una prim era clasificación puede ser est a:
Operadores t ernarios: op ? op : op
Ej e m plo: cont ador > 2 ? t rue : false; / / es sim ilar a un if- t hen- else
de la siguient e m anera if ? Then : else ;
Los operadores siem pre devuelven un valor que depende del operador y del t ipo
de los operandos.
Arit m ét icos
Relacionales
Condicionales
De desplazam ient o
93
MÓDULO 2
Lógicos
De asignación
Ot ros
A sim ilit ud con el m undo m át em at ico, exist en los siguient es operadores arit m ét i-
cos binarios:
Los valores que devuelven est os operadores depende de los t ipos de los ope-
randos:
Tam bién exist en operadores arit m ét icos unarios ( act úan solo sobre un operan-
do) :
94
Un ida d 2 .3 Sin t a x is
95
MÓDULO 2
Todos est os operandos devuelven un boolean indicando si cum ple la com para-
ción.
Suelen com binarse con los operadores relacionales para crear expresiones m ás
com plej as, devolviendo un boolean. Java t iene los siguient es operadores
condicionales:
96
Un ida d 2 .3 Sin t a x is
> > : desplaza los bit s del prim er operando hacia la derecha
t ant as veces com o indique el segundo operando op1 > > op2 . Reali-
za la m ism a función que m ult iplicar por 2, t ant as veces se desplace.
< < : desplaza los bit s del prim er operando hacia la izquierda
t ant as veces com o indique el segundo operando op1 < < op2 . Reali-
za la m ism a función que dividir por 2, t ant as veces se desplace.
> > > : desplaza los bit s del prim er operando hacia la derecha
t ant as veces com o indique el segundo operando pero sin signo op1
> > > op2 . Realiza la m ism a función que m ult iplicar por 2, t ant as ve-
ces se desplace, pero sin t ener en cuent a la posición de signo.
97
MÓDULO 2
98
Un ida d 2 .3 Sin t a x is
~ : com plem ent o a nivel de bit del operando ( cam bia los ceros
por uno y viceversa) ~ op1
99
MÓDULO 2
/ = , % = , &= , | = , ^ = , < < = , > > = , > > > = : Sim ilar al ant erior,
para cada uno de los operadores indicados.
7 .7 Ot r os ope r a dor e s
?: : se t rat a de una abreviat ura de la est ruct ura if- t hen- else ( if
op1? t hen op2 : else op3) op1 ?op2 :op3
Sin las sent encias de cont rol de fluj o, el código Java se ej ecut aría linealm ent e des-
de la prim era línea hast a la últ im a.
100
Un ida d 2 .3 Sin t a x is
Gest ión de excepciones: t ry- cat ch- finally y t hrow. Las verem os
con m ás det alle en la Unidad 3.5 Manej o de excepciones.
La sent encia while se ut iliza para ej ecut ar cont inuam ent e un bloque de código
m ient ras que la condición del while sea cum pla ( es decir la evaluación de la
condición sea t rue o verdadera) .
while(expresión)
{
sentencias;
}
La sent encia do- while es parecida a la sent encia while pero asegura que com o
m ínim o el bloque de código se ej ecut a una vez.
do
{
sentencias;
}
while(expresión);
8 .2 Se n t e n cia for
La sent encia for facilit a la ej ecución de un bloque de código un núm ero det er-
m inado de veces, m ient ras la evaluación de la expresión de t erm inación se
cum pla o sea t rue.
Las variables definidas en la sent encia de inicialización son locales al bloque. Por
t ant o dej an de exist ir una vez se haya t erm inado el bucle.
101
MÓDULO 2
8 .3 Se n t e n cia for / in
Est a nueva sent encia que aparece en el Java SE 5.0 nos facilit a la it eración por
los elem ent os de cualquier t ipo de colección: arrays, list as, et c…
Las variables definidas en la sent encia de inicialización son locales al bloque. Por
t ant o dej an de exist ir una vez se haya t erm inado el bucle.
102
Un ida d 2 .3 Sin t a x is
La sent encia if- t hen- else perm it e elegir qué bloque de código ej ecut ar ent re dos
posibilidades dependiendo de la evaluación de la expresión. Si se cum ple ( t rue)
ej ecut a el prim er bloque o bloque del if. Sino se cum ple se ej ecut a el bloque del
else.
La sint axis del if sin else sería la siguient e:
if(expresión)
{
sentencias;
}
if(expresión)
{
sentencias;
}
else
{
sentencias;
}
Las sent encias if pueden est ar concat enadas. Su sint axis sería:
if(expresión)
{
sentencias;
}
else if (expresión2)
{
sentencias;
}else
{
sentencias;
}
103
MÓDULO 2
8 .5 Se n t e n cia sw it ch
La sent encia swit ch es un caso part icular de la sent encia if- t hen- else if- else.
Evalúa una expresión del t ipo int o que pueda ser convert ida a int de form a im -
plícit a ( com o puede ser un char) .
Así se evalúa la expresión int Expresión y va com parando cada uno de los case a
ver si cum ple la condición. En el caso de que la com paración sea t rue, se ej ecu-
t an las sent encias siguient es hast a que se encuent re la siguient e sent encia
break o llegue al final de la sent encia swit ch.
En el caso de que t odas las com paraciones sean false se ej ecut ará las sent en-
cias del default ( en el caso de exist ir, puest o que es opt at ivo) .
switch(intExpresión)
{
case intExpresión:
sentencias;
break;
……
……
default: // es optativo
sentencias;
}
104
Un ida d 2 .3 Sin t a x is
8 .6 Se n t e n cia de r u pt u r a
break: sirve para det ener la ej ecución t ant o de los bucles co-
m o de la sent encia swit ch. Por t ant o, salt a a la siguient e línea de có-
digo después del bucle o swit ch.
cont inue: sirve para det ener la ej ecución del bloque de código
de un bucle y volver a evaluar la condición de est e.
Not a: Las guías de program ación est ruct urada prohiben el uso de est as sent en-
cias o aconsej an un uso m uy lím it ado para facilit ar la legibilidad y m ant enim ien-
t o del código
105
MÓDULO 2
PRÁCTI CA A: I dent ificar que sent encias son correct as y cuáles no ( se irán ut ili-
zando las variables según se va avanzando en el ej ercicio) :
1. int x = 34.5;
2. boolean boo = x;
3. int g = 17;
4. int y = g;
5. y = y + 10;
6. short s;
7. s = y;
8. byt e b = 3;
9. byt e v = b;
10. short n = 12;
11. v = n;
12. byt e k = 128;
13. int p = 3 * g + y;
Solución:
1. int x = 34.5; - > int x = ( int ) 34.5; / / Posible con downcast ing
2. boolean boo = x; - > No hay solución
3. int g = 17;
4. int y = g;
5. y = y + 10;
6. short s;
7. s = y; - > s = ( short ) y; / / posible con downcast ing
8. byt e b = 3;
9. byt e v = b;
10. short n = 12;
11. v = n; - > v = ( byt e) n; / / posible con downcast ing
12. byt e k = 128; - > byt e k = ( byt e) 128; / / posible con downcast ing
13. int p = 3 * g + y;
PRÁCTI CA B: I dent ificar si est e código com pila bien. Si no com pila solucionarlo. Si
com pila decir cuál sería la salida.
106
Un ida d 2 .3 Sin t a x is
Solución:
El código com pila bien. Pero ent ra en un bucle infinit o. Habría que m odificarlo con
la línea roj a y saldría la palabra “ Hola” siet e veces por pant alla.
PRÁCTI CA C: I dent ificar si est e código com pila bien. Si no com pila solucionarlo.
Si com pila decir cuál sería la salida.
Solución:
Com pila y saldría la palabra “ Hola” dos veces por pant alla.
107
MÓDULO 2
Seleccionar para cada t rozo de código de la izquierda, la salida por pant alla al
ej ecut ar el program a ant erior con ese t rozo de código
Solución
108
Un ida d 2 .3 Sin t a x is
PRÁCTI CA E: Desarrollar un program a Java que m uest re por pant alla los núm eros
prim os del 1 al 1000 y t odos los años bisiest os ent re el año 2000 y el 3000.
En el caso de que no est é puest a la variable de ent orno PATH, abrir una sesión DOS
y aj ust ar la variable de ent orno PATH para que el Sist em a Operat ivo sepa encont rar
las herram ient as del JDK. Para respet ar el valor que ya t uviese la variable PATH le
añadim os % PATH% .
109
MÓDULO 2
Aj ust ar la variable de ent orno CLASSPATH para que las herram ient as del JDK sepan
encont rar nuest ras clases Java. Tenem os dos opciones, o añadir el . ( punt o) y
siem pre ej ecut ar las herram ient as en el direct orio donde se encuent re el código, o
añadir el direct orio de t rabaj o y ej ecut ar las herram ient as donde queram os. Para
respet ar el valor que ya t uviese la variable CLASSPATH le añadim os % CLASS-
110
Un ida d 2 .3 Sin t a x is
PATH% .
Ahora arrancam os un edit or de t ext o ( por ej em plo Not epad) para escribir el código
fuent e de nuest ro program a que guardarem os en el fichero Pract icaE.j ava; el
nom bre del fichero debe ser exact am ent e igual ( incluyendo m ayúsculas y
m inúsculas) al de la clase Java que vam os a desarrollar.
111
MÓDULO 2
112
Un ida d 2 .3 Sin t a x is
Com pilam os el program a Java con el com pilador “ j avac” . Al com pilador hay que
darle el nom bre del fichero incluyendo su ext ensión.
Si no sale ningún m ensaj e significa que t odo ha ido bien y que ha creado el byt eco-
de, es decir, Pract [Link]
Por últ im o, ej ecut am os el program a Java con la JVM “ j ava” . A la JVM hay que darle
el nom bre del fichero del byt ecode sin la ext ensión.
113
MÓDULO 2
Cerrar la vent ana de bienvenida si aparece ( est a vent ana aparece la prim era vez
que se arranca Eclipse) .
114
Un ida d 2 .3 Sin t a x is
115
MÓDULO 2
Verificar que la perspect iva Java est á abiert a, y sino cam biar a ella
116
Un ida d 2 .3 Sin t a x is
Crear una clase Java nueva llam ada Pract icaE con el m ét odo m ain.
117
MÓDULO 2
Seleccionar Finish
Escribir el código dent ro de la clase y salvar con Ct rl + S o File - > Save
118
Un ida d 2 .3 Sin t a x is
Por defect o, en eclipse, al salvar los cam bios realizados en un fichero, se realiza la
com pilación de las clases que est án en el worskpace.
En el caso de producirse algún error de com pilación, se pueden ver en la vist a Pro-
blem s
Seleccionando la clase Java, con el bot ón derecho del rat ón ej ecut arla com o Java
Applicat ion
119
MÓDULO 2
120
Un ida d 2 .3 Sin t a x is
En est a unidad hem os vist o la sint axis del código Java, aprendiendo a ut ilizar co-
m e n t a r ios, delim it ar una sent encia Java con el ; y el uso de los e spa cios e n
bla n co.
Se han definido los I de n t ifica dor e s, las Ke yw or ds, las Va r ia ble s y los ám bit os
donde se pueden ut ilizar:
At ribut os
Parám et ros de m ét odo.
Variables locales
Variables de bloque
Por últ im o se han det erm inado los dist int os t ipos de Sent encias de cont rol de fluj o,
que perm it en ej ecut ar el código de una m anera no secuencial:
Bu cle s: while, do- while, for y for/ in
Bifu r ca cion e s: if- t hen- else y swit ch- case
Ge st ión de e x ce pcione s: t ry- cat ch- finally y t hrow
D e r upt u r a : break, cont inue, label: y ret urn.
M ÓD ULO B
Te m a 2 .4
Í n dice de la u n ida d:
1. Clases
2. Obj et os
3. Relación de herencia
4. Polim orfism o
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
En est a unidad verem os los cuat ro paradigm as básicos en los que se apoya los len-
guaj es orient ados a obj et os y por t ant o el lenguaj e de program ación Java.
1 . Cla se s
Una clase represent a la abst racción de las operaciones y los dat os ( o at ribut os y
m ét odos) com unes a un conj unt o de obj et os, en relación a nuest ro m undo real.
La im plem ent ación de una clase Java debe ir en un fichero físico en form at o t ext o,
con la ext ensión * .j ava y nom bre idént ico a la clase im plem ent ada.
La keyword siem pre va precedida por un m odificador de acceso: public, prot ect ed,
privat e o default ( nada) que ya explicarem os m ás adelant e.
La im plem ent ación de la clase irá cont enida en un bloque { } j ust o después de la
declaración. La sint axis de la declaración de una clase es:
1 . 1 At r ibu t os y m é t odos
125
MÓDULO 2
La im plem ent ación del m ét odo irá cont enida en un bloque { } j ust o después
de la declaración.
Ej e m plo:
{
ret urn param 1 + param 2;
}
Se perm it e definir un núm ero indefinido de parám et ros del m ism o t ipo m e-
diant e: ... Lo que recibim os es un array del t ipo definido.
Ej e m plo:
Hay que t ener en cuent a que podem os recibir, cero, uno o varios valores en
dicho parám et ro y que t iene las siguient es rest ricciones:
126
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ej e m plo:
1 . 2 Con st r u ct or e s
Exist e un t ipo de m ét odo especial en Java llam ado const ruct or.
Se ut iliza para la const rucción ( inst anciación) de obj et os ( o inst ancias) a part ir
de esa clase.
En su im plem ent ación se suele dar valores a los at ribut os para ese obj et o para
asegurar que los at ribut os est én inicializados.
Ej e m plo:
127
MÓDULO 2
Si nuest ra clase no t iene const ruct ores, el com pilador añade por defect o uno
sin parám et ros; pero si hem os declarado alguno, el com pilador no añade na-
da.
1 . 3 Sobr e ca r ga de m é t odos
Se dice que un m ét odo est á sobrecargado cuando exist en dos m ét odos con el
m ism o nom bre y t ipo de ret orno pero con parám et ros dist int os.
De est a m anera podem os t ener en una clase varios const ruct ores.
Ej e m plo:
public MiClase( )
{
}
El nuevo t ipo de ret orno sea hij o del t ipo de ret orno del m ét o-
do original ( es decir, que herede de él direct a o indirect am ent e) .
1 . 4 Con ve n cion e s e n Ja va
Aunque no est á obligado por la sint axis, exist en una serie de convenciones
respect o a en la nom enclat ura de clases, m ét odos y at ribut os, que t odo pro-
gram ador de Java suele seguir para hacer m as legible el código.
128
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
129
MÓDULO 2
2 . Obj e t os
Los obj et os en Java no son m as que variables de t ipo com plej o, frent e a las de t ipo
prim it ivo.
130
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Com o vim os en la Unidad 2.3 Sint axis, una variable de t ipo prim it ivo cont iene
el dat o direct am en-
t e:
Mient ras que una variable de t ipo com plej o cont iene una referencia ( punt ero)
a la zona de m em oria donde est á el obj et o:
Ej e m plo:
131
MÓDULO 2
2 .2 M a n e j o de obj e t os
A sus m ét odos.
La sint axis para acceder a un m ét odo ( lo que en Orient ación a Obj et os se de-
nom inaba m ensaj e) es la siguient e:
132
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
133
MÓDULO 2
Las llam adas a m ét odos se pueden encadenar para evit ar t ener que crear va-
riables int erm edias ent re dist int as ej ecuciónes de m ét odos:
Equivaldría a:
Exist e un m ét odo especial en Java llam ado m ain cuya sint axis es la siguient e:
134
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
El parám et ro args es un array ( ver Unidad 3.1) donde perm it e pasarle argu-
m ent os al program a Java para su ej ecución, en caso de necesit arlos.
Si las clases represent an ent idades que part icipan en la resolución de un pro-
blem a. ¿En qué ent idad t iene sent ido incluir el m ét odo m ain?. En ninguna. Por
eso crearem os siem pre una clase a part e ( de ahi el denom inarla “ t ruco” ) , que
solo t enga el m ét odo m ain. Debido a que no est á relacionado con ninguna cla-
se en concret o, no se necesit a la creación de ningún obj et o para llam arla.
2 .4 D e st r uct or e s y Ga r ba ge Colle ct or
Los dest ruct ores son unos m ét odos encargados de elim inar los obj et os de
m em oria, aunque en Java no exist e est e t ipo de m ét odos ( si exist en en ot ros
lenguaj es de program ación com o C+ + ) .
Exist en t res m ot ivos por los que una variable dej a de referenciar a un obj et o:
135
MÓDULO 2
cir.
3 . Re la ción de h e r e n cia
Las clases se disponen en una j erarquía, donde una clase hereda los at ribut os y
m ét odos de las clases superiores en la j erarquía. Es decir, definim os una especie de
int erfaz ( API ) para un grupo de clases relacionados m ediant e la herencia.
Una clase puede t ener sus propios at ribut os y m ét odos adicionales a lo heredado.
Las clases por encim a en la j erarquía a una clase dada, se denom inan superclases
o clases padre.
Las clases por debaj o en la j erarquía a una clase dada, se denom inan subclases o
clases hij as.
136
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ej e m plo:
La im plem ent ación de la herencia se realiza m ediant e la keyword: ext ends. La sin-
t axis de la declaración de la herencia es la siguient e:
Ej e m plo:
Ej e m plo:
137
MÓDULO 2
3 .1 La cla se Obj e ct
138
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ej e m plo:
Est o significa que nuest ras clases siem pre van a cont ar con los at ribut os y m é-
t odos de la clase Obj ect por lo que es im port ant e conocerlos. Algunos de sus
m ét odos m ás ut ilizados son:
public boolean equals( Obj ect o) ; / / Com para dos obj et os y dice
si son iguales.
public void wait ( ) ; public void not ify( ) ; public void not ifyAll( ) ;
/ / Tienen que ver con el m anej o de t hreads.
Ej e m plo:
139
MÓDULO 2
3 .2 Ca st ing
El cast ing es una form a de realizar conversiones de t ipos. Hay dos t ipos de
cast ing:
Ej e m plo:
140
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Sobrescribir un m ét odo significa que una subclase reim plem ent a un m ét odo
heredado.
Para sobrescribir un m ét odo hay que respet ar t ot alm ent e la declaración del
m ét odo:
Los parám et ros y t ipo de ret orno han de ser los m ism os.
Ej e m plo:
141
MÓDULO 2
142
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
143
MÓDULO 2
La sobrecarga de un m ét odo significa t ener varias im plem ent aciones del m is-
m o m ét odo con parám et ros dist int os:
Habrá que t ener m uy en cuent a los parám et ros que se envían y las conversio-
nes por defect o para saber qué m ét odo se ej ecut a.
Ej e m plo:
144
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
3 .5 El u so de la h e r e n cia
Debem os usar herencia cuando hay una clase deun t ipo m as específico que
una superclase. Es decir, se t rat a de una especialización.
145
MÓDULO 2
Ej e m plo: Lobo es m as específico que Canino. Luego t iene sent ido que Lobo
herede de Canino.
Debem os usar herencia cuando t engam os un com port am ient o que se puede
reut ilizar ent re varias ot ras clases del m ism o t ipo genérico.
Ej e m plo: Las clases Cuadrado, Circulo y Triangulo t iene que calcular su área
y perím et ro luego t iene sent ido poner esa funcionalidad en una clase genérica
com o Figura.
No debem os usar herencia solo por el hecho de reut ilizar código. Nunca de-
bem os rom per las dos prim eras reglas.
Ej e m plo: Podem os t ener el com port am ient o cerrar en Puert a. Pero aunque
necesit em os ese m ism o com port am ient o en Coche no vam os a hacer que Coche
herede de Puert a. En t odo caso, coche t endrá un at ribut o del t ipo Puert a.
Ej e m plo: Refresco es una Bebida. La herencia puede t ener sent ido. Bebida
es un Refresco. ¿? No encaj a luego la herencia no t iene sent ido.
3 .6 su pe r y t h is
su pe r es una referencia al obj et o act ual pero apunt ando al padre. super se
ut iliza para acceder desde un obj et o a at ribut os y m ét odos ( incluyendo cons-
t ruct ores) del padre.
146
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
147
MÓDULO 2
148
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
4 . Polim or fism o
Consist e en que una vez se ha definido una superclase para un grupo de subclases,
cualquier inst ancia de esas subclases puede ser usada en el lugar de la superclase.
Est o significa que podem os referenciar un obj et o de una subclase m ediant e una re-
ferencia declarada com o una de sus superclases. Ver punt o 3.2 Cast ing para las
conversiones de t ipos.
149
MÓDULO 2
Por t ant o m ediant e el polim orfism o podem os asignar a una referencia de un t ipo
superior en la j erarquía de herencia, una inst ancia de un t ipo inferior ( que herede) .
Ahora bien, que la referencia sea de ot ro t ipo no significa que los m ét odos que se
ej ecut en sean dist int os. Siguen siendo los de la inst ancia.
150
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Con el polim orfism o podem os desarrollar código que no t iene que ser m odificado
por la int roducción en el program a de nuevas subclases o t ipos debido a:
151
MÓDULO 2
Rediseño
• Modificar MiList a para que m anej e el t ipo genérico Anim al y así nos
valga t ant o para Lobos com o pat a Gat os e incluso ot ros anim ales en
le fut uro. Nos decidim os por est e últ im o.
152
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
En Java encont rarem os m ult it ud de ej em plos que usen el Polim orm is-
m o con est e fin.
153
MÓDULO 2
4 .1 Cla se s a bst r a ct a s
A m enudo exist en clases que sirven para definir un t ipo genérico pero que no
t iene sent ido inst anciar ( crear obj et os de ella) . Por ej em plo, puede t ener sen-
t ido inst anciar un Circulo pero a lo m ej or no inst anciar una Figura, porqué…
¿qué figura es? ¿cuál es su área? ¿y su perím et ro?
Est as clases pueden est ar siendo usadas sim plem ent e para agrupar baj o un
m ism o t ipo a ot ras clases, o para cont ener código reut ilizable, o para forzar un
API a sus subclases…..
La clases se definen com o abst ract as m ediant e la keyword: abst ract . La sin-
t axis de la declaración de una clase abst ract a es la siguient e:
Ej e m plo:
Ej e m plo:
154
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
4 .2 M é t odos a bst r a ct os
Adem ás de clases abst ract as, t am bién podem os t ener m ét odos abst ract os.
Una clase abst ract a significaba que t enía que ser heredada. No podía ser ins-
t anciada.
Un m ét odo abst ract o significa que t iene que ser sobrescrit o. No est á im ple-
m ent ado.
Una clase con uno o varios m ét odos abst ract os t iene que ser declarada abs-
t ract a.
No obst ant e una clase abst ract a no t iene porque t ener m ét odos abst ract os.
Los m ét odos se definen com o abst ract os m ediant e la keyword: abst ract . La
sint axis de la declaración de una clase abst ract a es la siguient e:
155
MÓDULO 2
El obj et ivo de un m ét odo abst ract o es forzar una int erfaz ( API ) pero no una
im plem ent ación.
Ej e m plo:
156
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Aut om át icam ent e t odas las m ascot as t endrán los m ét odos necesarios. Pero
t am bién los t endrán las no m ascot as. Y seguro que hay que ret ocar cada m as-
cot a reescribiendo sus m ét odos porque t engan alguna peculiaridad.
Modificam os la prim era aproxim ación definiendo los m ét odos de las m ascot as
en la clase Anim al com o abst ract os de m anera que cada m ascot a los im ple-
m ent e.
157
MÓDULO 2
Así t odas las m ascot as heredan el int erfaz e im plem ent an su com port am ient o
dependiendo de la m ascot a en concret o. Pero no solo el rest o de anim ales
heredarán t am bién el int erfaz si no que t ienen que im plem ent arlo aunque sea
vacío.
158
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ot ra aproxim ación sería int roducir los nuevos m ét odos solo en las m ascot as.
Así ya no nos t enem os que preocupar de que haya clases que sin ser m asco-
t as t engan m ét odos de est as.
Sin em bargo est o im plica ot ro t ipo de problem as com o que los program adores
de m ascot as t endrán que ponerse de acuerdo en el int erfaz de est as y siem pre
llevarlo a raj a t abla puest o que ahora no se hereda y el com pilador no nos
ayuda con los posibles errores.
159
MÓDULO 2
La solución que parece ópt im a, sería t ener ot ra clase abst ract a llam ada Mas-
cot a con los m ét odos abst ract os de las m ascot as. Y que t odas las m ascot as
heredasen de ella.
Así, ya no nos t enem os que preocupar de que haya clases que sin ser m asco-
t as t engan m ét odos de est as.
Todas las m ascot as cum plirán forzosam ent e el API de las m ascot as y el com -
pilador nos ayudará a asegurarlo. Y t am bién t endrem os la posibilidad de usar
el polim orfism o con las m ascot as.
Pero eso significa que habrá clases que heredarán de dos clases a la vez y en
Java no exist e la herencia m últ iple.
160
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
5 . I n t e r fa ce s
Los int erfaces en Java nos solucionan en part e la no exist encia de la herencia m últ i-
ple; habilit ando así las posibilidades del polim orfism o en la herencia m últ iple sin los
problem as que est a conlleva.
Los int erfaces son un t ipo de clase especial que no im plem ent a ninguno de sus m é-
t odos. Todos son abst ract os. Por t ant o no se pueden inst anciar.
La declaración de un int erface Java se realiza m ediant e la keyword: int erface segui-
do de su nom bre. La sint axis de la declaración de un int erface es la siguient e:
Ej e m plo:
161
MÓDULO 2
{
}
Siguen siendo clases Java por lo que su código fuent e se guarda en un fichero t ext o
de ext ensión * .j ava y al com pilarlo se generará un * .class
Los m ét odos se definen com o abst ract os m ediant e la keyword: abst ract . La sint axis
de la declaración de un m ét odo abst ract o es la siguient e:
El obj et ivo de un m ét odo abst ract o es forzar una int erfaz ( API ) pero no una im ple-
m ent ación.
De los int erfaces t am bién se hereda, aunque se suele ut ilizar m ás el t érm ino im -
plem ent a por la keyword ut ilizada. Se realiza m ediant e la keyword: im plem ent s.
Ej e m plo:
Una clase puede heredar o im plem ent ar m últ iples int erfaces consiguiendo así la
herencia m últ iple. Y t am bién un int erface puede heredar de ot ros int erfaces
Una clase puede heredar de ot ra clase ( com o m áxim o de una) y a la vez heredar de
m últ iples int erfaces.
Si una clase que hereda de un int erface, no im plem ent a t odos los m ét odos de est e,
deberá ser definida com o abst ract a.
162
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ej e m plo:
Un int erface se t rat a com o un t ipo cualquiera. Por t ant o, cuando hablam os de poli-
m orfism o, significa que una inst ancia de una clase puede ser referenciada por un
t ipo int erface siem pre y cuando esa clase o una de sus superclases im plem ent e
163
MÓDULO 2
5 .1 I n t e r fa ce ve r su s Cla se s a bst r a ct a s
Las int erfaces se diferencian de las clases abst ract as principalm ent e en:
Una clase puede im plem ent ar n int erfaces pero solo una clase.
El obj et ivo de un m ét odo abst ract o es forzar una int erfaz ( API )
pero no una im plem ent ación.
A cont inuación se verán ciert as direct rices de cuando ut ilizar se pueden ut ilizar
las Clases, Subclases, Clases abst ract as e I nt erfaces:
164
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
165
MÓDULO 2
Solución:
Solución:
Est aba m al. Se est aba llam ando a un m ét odo inexist ent e.
166
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Solución:
Est aba m al. El obj et o m iRect no est á inicializado, por t ant o vale null. Con null no
podem os hablarnos.
167
MÓDULO 2
Solución:
168
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Tenga dos at ribut os privat e de t ipo double.
Tenga un const ruct or con dos parám et ros de t ipo double que inicialice los
dos at ribut os.
Tenga un const ruct or por defect o ( sin parám et ros) que inicialice los dos at ri-
but os al valor que se quiera.
Tenga un get t er para cada uno de los at ribut os.
Tenga un m ét odo calcularDist anciaDesde que recibe un parám et ro de t ipo
Punt o y que devuelve un double.
Tenga dos at ribut os privat e de t ipo Punt o y double.
Tenga un const ruct or con dos parám et ros de t ipo Punt o y double que iniciali-
ce los dos at ribut os.
Tenga un const ruct or por defect o ( sin parám et ros) que inicialice los dos at ri-
but os al valor que se quiera.
Tenga un const ruct or con t res parám et ros de t ipo double que inicialice los
dos at ribut os.
Tenga un get t er para cada uno de los at ribut os.
Tenga un m ét odo calcularDist anciaDesde que recibe un parám et ro de t ipo
Punt o y que devuelve un double.
Tenga un m ét odo calcularArea que no recibe ningún parám et ro y devuelve
un double.
Tenga un m ét odo calcularPerim et ro que no recibe ningún parám et ro y de-
vuelve un double.
Tenga t res at ribut os privat e de t ipo Punt o.
Tenga un const ruct or con t res parám et ros de t ipo Punt o que inicialice los dos
at ribut os.
Tenga un const ruct or por defect o ( sin parám et ros) que inicialice los t res
at ribut os al valor que se quiera.
Tenga un const ruct or con seis parám et ros de t ipo double que inicialice los
t res at ribut os.
Tenga un get t er para cada uno de los at ribut os.
Tenga un m ét odo calcularDist anciaDesde que recibe un parám et ro de t ipo
Punt o y que devuelve un double.
Tenga un m ét odo calcularArea que no recibe ningún parám et ro y devuelve
un double.
Tenga un m ét odo calcularPerim et ro que no recibe ningún parám et ro y de-
vuelve un double.
Desarrollar una clase llam ada Pract ica5a que en su m ét odo m ain:
Cree e inicialice dos obj et os de la clase Punt o y m uest re la dist ancia ent re
am bos.
Cree un obj et o de la clase Circulo y m uest re su área, perím et ro y dist ancia a
uno de los dos punt os creados al com ienzo.
Cree un obj et o de la clase Triangulo y m uest re su área, perím et ro y dist an-
cia a un nuevo punt o.
Not a 1: No serem os rigurosos con las m at em át icas y supondrem os que los t riángu-
los siem pre son rect ángulos.
169
MÓDULO 2
Not a 2: Para calcular la raíz cuadrada de un núm ero usarem os Mat [Link] ( ¿?) siendo
¿? el núm ero.
En el caso de que no est é puest a la variable de ent orno PATH, abrir una sesión DOS
y aj ust ar la variable de ent orno PATH para que el Sist em a Operat ivo sepa encont rar
las herram ient as del JDK. Para respet ar el valor que ya t uviese la variable PATH le
añadim os % PATH% .
Aj ust ar la variable de ent orno CLASSPATH para que las herram ient as del JDK sepan
encont rar nuest ras clases Java. Tenem os dos opciones, o añadir el . ( punt o) y
siem pre ej ecut ar las herram ient as en el direct orio donde se encuent re el código, o
170
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
añadir el direct orio de t rabaj o y ej ecut ar las herram ient as donde queram os. Para
respet ar el valor que ya t uviese la variable CLASSPATH le añadim os % CLASS-
PATH%
Ahora arrancam os un edit or de t ext o ( por ej em plo Not epad) para escribir el código
fuent e de cada uno de nuest ras clases j ava; el nom bre del fichero debe ser
exact am ent e igual ( incluyendo m ayúsculas y m inúsculas) al de la clase Java que
vam os a desarrollar.
Em pezam os con Punt o.j ava
171
MÓDULO 2
Los at ribut os les aplicam os el m odificador de acceso privat e ( los verem os en det alle
en la Unidad 2.5)
Com pilam os el program a Java con el com pilador “ j avac” . Al com pilador hay que
darle el nom bre del fichero incluyendo su ext ensión.
172
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Cream os con el not epad las siguient es clases y las com pilam os al igual que hem os
hecho con el Punt o.j ava : Circulo.j ava y Triangulo.j ava
173
MÓDULO 2
174
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Por últ im o crearem os nuest ra clase “ t ruco” con el m ét odo m ain que guardarem os
en el fichero Pract icaE.j ava
175
MÓDULO 2
Salvam os los cam bios y com pilam os la clase con j avac. Debem os de t ener los byt e-
code de t odas las clases
176
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Ahora si que podem os ej ecut ar el program a llam ando a la clase Pract icaE m ediant e
el ej ecut able j ava.
177
MÓDULO 2
Verificar que la perspect iva Java est á abiert a, y sino cam biar a ella
178
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
179
MÓDULO 2
Crear una clase Java nueva llam ada Punt o sin el m ét odo m ain
180
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Seleccionar Finish
Escribir el código dent ro del bloque de la clase y salvar con Ct rl + S o File - > Save
181
MÓDULO 2
182
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Crear una clase Java nueva llam ada Pract icaE con el m ét odo m ain.
183
MÓDULO 2
184
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
Seleccionando la clase Java Pract icaE, con el bot ón derecho del rat ón ej ecut arla
com o Java Applicat ion
185
MÓDULO 2
186
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o
En est a unidad hem os vist o los cuat ro paradigm as básicos en los que se apoya los
lenguaj es orient ados a obj et os y por t ant o el lenguaj e de program ación Java.
Cla se s, donde su im plem ent ación const a norm alm ent e de una serie de
a t r ibu t os y m é t odos.
- Exist en ciert os m ét odos especiales llam ados Con s-
t r u ct or e s, que perm it en crear obj et os.
- Se pueden sobr e ca r ga r los m é t odos, t eniendo el
m ism o nom bre de m ét odo y dist int os parám et ros.
Obj e t os, que son inst ancias de una clase det erm inada. Para poder acce-
der a sus at ribut os y m ét odos se ut iliza el operador punt o.
- El m ét odo m a in se ut iliza direct am ent e sin la crea-
ción de un obj et o, para em pezar la ej ecución de un
program a Java.
- La elim inación de los obj et os en m em oria se ut iliza
via el Ga r ba ge Colle ct or .
La r e la ción de he r e ncia , se basa en la exist encia de relaciones de ge-
neralización/ especialización ent re clases.
PA-
M ÓD ULO B
Ot r os con ce pt os
Te m a 2 .5
Í n dice de la u n ida d:
1. Paquet es
2. Modificadores de acceso
4. final
7. I nst anceof
Un ida d 2 .5 Ot r os con ce pt os
En las unidades ant eriores se ha vist o la sint axis de Java, y paradigm as básicos de
la program ación orient ada a obj et os. Exist en ot ros concept os, a nivel organizat ivo
de las clases y de acceso de las clases y obj et os que son los que verem os en est a
Unidad.
1 . Pa qu e t e s
Los paquet es Java son una caract eríst ica m ás del lenguaj e que nos perm it e
organizar el código en grupos.
Adicionalm ent e, ayudan a evit ar colisiones en los nom bres de las clases. De m anera
que en un program a que va a usar un fram ework ( conj unt o de clases con un propó-
sit o en concret o) de un t ercero, t enga un 99% de seguridad de que no t iene ningu-
na clase con el m ism o nom bre, que las del fram ework.
Para especificar el paquet e al que pert enece una clase se ut iliza la keyword: pa c-
k a ge . La sint axis de la declaración de un paquet e es la siguient e:
pa ck a ge nom br e _ de l_ pa que t e ;
El nom bre de una clase no se lim it a solam ent e al ident ificador ut ilizado en la defini-
ción, sino a la sum a del paquet e al que pert enece m ás el del ident ificador: N om br e
de pa qu e t e + I de n t ifica dor de la Cla se
Ej e m plo: La clase Circulo del paquet e es.j [Link].m ent [Link] es la clase
es.j [Link].m ent [Link]. La clase Circulo del paquet e [Link] es la
clase [Link]
Por t ant o, al ir a ut ilizar una clase debem os conocer siem pre el paquet e al que per-
t enece para poder referenciarla porque si no el com pilador no va a saber encont rar-
la.
Toda clase Java pert enece a un paquet e. Si no se especifica nada, pert enece al ‘pa-
quet e por defect o’ ( que es un paquet e raíz sin nom bre o nada, pero no est á reco-
m endado su uso) . En el caso de especificarlo, la sent encia package t iene que ser la
prim era línea del fichero con el código fuent e de la clase.
191
MÓDULO 2
Exist e una convención acept ada por t odos los desarrolladores en cuant o a la no-
m enclat ura de los paquet es Java:
Todas las palabras que com ponen el nom bre del paquet e van
en m inúsculas.
[Link] icas.t em a1
Para poder ut ilizar una clase en nuest ro código t enem os que escribir su nom bre
com plet o cada vez que la ut ilicem os: paquet e + clase. Para m ej orar la legibilidad
del código, exist e ot ro m ecanism o para facilit ar la codificación y facilit ar la vida al
desarrollador que es el uso de la keyword: im por t . La sint axis de la declaración de
la sent encia es la siguient e:
Las sent encias im port se ubican ent re la sent encia package y la definición de la cla-
se.
Las clases im port adas de est a m anera pueden ser referenciadas en el código direc-
t am ent e por su nom bre de clase sin necesidad de escribir el paquet e al que pert e-
necen.
Un im port genérico ( es decir, con el * ) im port a solo las clases de ese paquet e, pero
no de los subpaquet es.
Ej e m plo: Si se ut iliza el im port es.j [Link].* im port ará las clases del pa-
quet e es.j [Link] pero no las clases de paquet es que est én en nom enclat ura
192
Un ida d 2 .5 Ot r os con ce pt os
Por t ant o para ut ilizar una clase t enem os t res alt ernat ivas:
Al igual que las clases Java t ienen un reflej o en el Sist em a de Archivos ( una clase
Java equivale a un fichero t ext o de ext ensión * .j ava) , lo m ism o ocurre con los pa-
quet es Java.
Los paquet es Java equivalen a direct orios. Es decir, cada m iem bro del paquet e ( se-
parado por punt os) se t raduce a un direct orio en el Sist em a de Archivos.
Ej e m plo:
Para com pilar una clase que pert enece a un paquet e t enem os dist int as opciones:
193
MÓDULO 2
Desde c: \ t rabaj o\ es\ j ava\ aula\ m ent or\ figuras ej ecut am os:
j avac Circulo.j ava
A cont inuación m ost ram os dist int os ej em plos de ut ilización de clases t eniendo en
cuent a los paquet es a los que pert enecen:
Ej e m plo: Am bas clases est án en el paquet e por defect o y por t ant o se en-
cuent ran.
Ej e m plo: Las clases est án en paquet es dist int os y no se ut ilizan las clases
con el nom bre com plet o ni con la sent encia im port
194
Un ida d 2 .5 Ot r os con ce pt os
Ej e m plo: Las clases est án en paquet es dist int os y se ut ilizan las clases con el
nom bre com plet o
195
MÓDULO 2
Ej e m plo: Las clases est án en paquet es dist int os y se ut ilizan las clases con la
sent encia im port
Ej e m plo: Las clases est án en paquet es dist int os y se ut ilizan las clases con la
sent encia im port genérica
196
Un ida d 2 .5 Ot r os con ce pt os
197
MÓDULO 2
¿Cóm o com pilaban t odas nuest ras práct icas si no conocíam os los paquet es
Java ( y por t ant o la keyword im port ) ? La respuest as es porque el com pilador,
por defect o, siem pre añade la siguient e línea a nuest ro código:
¿Qué ocurre al usar una clase cuyo nom bre exist e a la vez en dos paquet es
que hem os im port ado? ¿Cuál de las dos clases es la que se debe ut ilizar?
En esos casos, hay que im port ar o referirse a la clase conflict iva m ediant e su
ident ificador com plet o: paquet e + clase.
Ej e m plo: Necesit am os ut ilizar dos clases con el m ism o nom bre que est án en
paquet es dist int os. Ut ilizam os solam ent e la sent encia im port genérico
198
Un ida d 2 .5 Ot r os con ce pt os
Ej e m plo: Necesit am os ut ilizar dos clases con el m ism o nom bre que est án en
paquet es dist int os. Ut ilizam os la sent encia im port genérico y en la clase conflic-
t iva ut ilizam os el nom bre com plet o.
Ej e m plo: Necesit am os ut ilizar dos clases con el m ism o nom bre que est án en
paquet es dist int os. Ut ilizam os la sent encia im port genérico e im port específico.
199
MÓDULO 2
Ej e m plo: Necesit am os ut ilizar dos clases con el m ism o nom bre que est án en
paquet es dist int os. Ut ilizam os la sent encia im port específico.
200
Un ida d 2 .5 Ot r os con ce pt os
Hem os vist o que exist e el llam ado ‘paquet e por defect o’ al que pert enecen
t odas aquellas clases que no indican de form a explícit a un paquet e
det erm inado en su código.
Desde la versión 1.4.x, el com pilador no perm it e im port ar desde una clase que
pert enece a un paquet e explícit o, una clase que pert enece al ‘paquet e por
defect o’.
Cuando consult am os el API , por ej em plo, via online en la docum ent ación de
SUN ht t p: / / j [Link] / j avase/ 6/ docs/ api/ [Link] m l, podem os apreciar la
cat egorización de los paquet es y las clases que pert enecen a cada uno de
ellos.
Hast a ahora hem os vist o que podem os ut ilizar cualquier clase, m ét odo y at ribut o
desde cualquier punt o de nuest ro código sin ningún t ipo de problem a. Pero el
lenguaj e de program ación Java, nos perm it e poder delim it ar quién o desde donde
se puede acceder a una clase, a un m ét odo o a un at ribut o.
Exist en cuat ro t ipos de m odificadores de acceso y por t ant o, cuat ro keywords. Las
hem os ordenados de m enor a m ayor rest ricción.
201
MÓDULO 2
La siguient e t abla m uest ra a qué se puede acceder desde una clase dada:
202
Un ida d 2 .5 Ot r os con ce pt os
203
MÓDULO 2
clases
3 . M é t odos e st á t icos
Exist en casos en los que nos encont ram os con clases cuyos m ét odos no dependen
en absolut o de los at ribut o de la clase, y en t odo caso de los parám et ros de los
m ét odos. Por ej em plo, la clase j [Link] h:
Son m ét odos que parece no pert enecer a una ent idad concret a. Son genéricos,
globales, independient es de cualquier est ado del obj et o.
¿Tiene sent ido inst anciar un obj et o para ej ecut ar algo que no depende de nada de
dicho obj et o?
204
Un ida d 2 .5 Ot r os con ce pt os
La respuest a es no. Y para ello cont am os en Java con los m ét odos est át icos. Est án
asociados a una clase solam ent e desde un punt o de vist a organizat ivo.
Para definir un m ét odo est át ico ut ilizam os la keyword: st a t ic. La sint axis de la
declaración es la siguient e:
Ej e m plo:
Para ej ecut ar por t ant o un m ét odo est át ico no hace falt a inst anciar un obj et o de la
clase. Se puede ej ecut ar el m ét odo direct am ent e sobre la clase.
Una clase puede perfect am ent e m ezclar m ét odos est át icos con m ét odos
convencionales. Un ej em plo clásico es el m ét odo m ain:
Hay ciert as reglas que hay que t ener en cuent a en el uso de m ét odos est át icos:
205
MÓDULO 2
206
Un ida d 2 .5 Ot r os con ce pt os
3 .1 At r ibu t os e st á t icos
Los at ribut os est át icos ( o variables est át icas) son at ribut os cuyo valor es com -
part ido por t odos los obj et os de una clase.
Para definir un at ribut o est át ico ut ilizam os la keyword: st a t ic. La sint axis de
la declaración es la siguient e:
Hay que t rat arlos con cuidado puest o que son fuent e de problem as difíciles de
det ect ar. Com o t odos los obj et os de una m ism a clase com part e el m ism o at ri-
but o est át ico, si un obj et o ‘a’ m odifica el valor del at ribut o, cuando el obj et o
‘b’ vaya a usar dicho at ribut o, lo usa con un valor m odificado.
Recordem os que sin em bargo los at ribut os convencionales ( de inst ancia) son
propios de cada obj et o.
Los at ribut os est át icos son cargados en m em oria cuando se carga la clase.
Siem pre ant es de que:
Para usar un at ribut o est át ico no hace falt a inst anciar un obj et o de la clase.
Ej e m plo: Syst em .out .print ln( “ Hola” ) ; / / out es un at ribut o est át ico
de la clase j [Link] em .
Ej e m plo:
207
MÓDULO 2
Los bloques de código est át ico son t rozos de código que se ej ecut an al cargar
una clase en m em oria ( no al inst anciar obj et os de esa clase) .
st a t ic { …. }
Ej e m plo:
208
Un ida d 2 .5 Ot r os con ce pt os
4 . fin a l
Clases
At ribut os
Mét odos
4 .1 Cla se s fin a le s
Definiendo una clase com o final conseguim os que ninguna ot ra clase pueda
heredar de ella.
Para definir una clase final ut ilizam os la keyword: fina l. La sint axis de la de-
claración es la siguient e:
209
MÓDULO 2
Ej e m plo:
4 .2 M é t odos fin a le s
Para definir un m ét odo com o final ut ilizam os la keyword: fina l. La sint axis de
la declaración es la siguient e:
Ej e m plo:
Ej e m plo:
210
Un ida d 2 .5 Ot r os con ce pt os
4 .2 At r ibu t os fin a le s
Definiendo un at ribut o com o final conseguim os const ant es. Es decir, una vez
inicializados no se puede cam biar su valor.
Para definir un at ribut o com o final ut ilizam os la keyword: fina l. La sint axis de
la declaración es la siguient e:
Ej e m plo:
Ej e m plo:
211
MÓDULO 2
Las const ant es en Java se suelen definir m ediant e la com binación de las key-
word: st a t ic y fina l. La sint axis de la declaración es la siguient e:
Por convención, a la hora de program ar, las const ant es se suelen llam ar con
t odas las let ras en m ayúsculas.
212
Un ida d 2 .5 Ot r os con ce pt os
En ocasiones cuando se crea una clase solo con const ant es, se suele hacer
m ediant e un int erface, debido a que no es necesario t ener ningún m ét odo de-
finido ni im plem ent ado.
4 .4 St a t ic im por t s
Java SE 5.0 añadío una novedad al respect o, perm it iendo la im port ación de
at ribut os y m ét odos est át icos, de m anera que no haya que nom brar a la clase
para su acceso.
Ej e m plo:
213
MÓDULO 2
En C se decidía m ediant e la gest ión de punt eros con los operadores: * y &
En Java sin em bargo no hay decisión posible: t odo se pasa por valor. Si se m odifica
el valor de la variable recibida, no se m odifica la variable original..
Ej e m plo:
Ej e m plo:
214
Un ida d 2 .5 Ot r os con ce pt os
Ej e m plo: Realm ent e no se cam bian las referencias sino los at ribut os int ernos
de esas referencias.
215
MÓDULO 2
El com pilador realiza cosas por defect o de form a aut om át ica ( sin que est én des-
arrolladas de form a explícit a en nuest ro código) . Las enum eram os a cont inuación:
im port j [Link].* ;
216
Un ida d 2 .5 Ot r os con ce pt os
Las clases que no definan ningún const ruct or cont ienen im plí-
cit am ent e uno sin parám et ros:
public MiClase( )
{
super( ) ;
}
Todos los m ét odos de un int erfaz son definidos com o abst ract
de form a im plícit a:
217
MÓDULO 2
6 . I n st a n ce of
Se t rat a de un operador especial del lenguaj e Java represent ado por la keyword:
in st a n ce of. La sint axis de la declaración es la siguient e:
obj e t o in st a n ce of cla se
Ej e m plo: num inst anceof I nt eger ó num inst anceof j [Link] [Link] e
Est e operador perm it e com probar si un obj et o es inst ancia de una clase o no. De-
vuelve un boolean por lo que puede ut ilizarse en expresiones lógicas ( condiciones) .
Básicam ent e lo que hace es com probar si un cast ing concret o se puede realizar o
no.
Ej e m plo:
218
Un ida d 2 .5 Ot r os con ce pt os
Solución:
219
MÓDULO 2
Solución:
Solución:
220
Un ida d 2 .5 Ot r os con ce pt os
Al m ism o t iem po, t endrem os un int erfaz con los punt os de fuerza de cada una de
las criat uras definidas com o const ant es en el paquet e
es.j [Link].m ent [Link] [Link] il. De est a m anera un sim ple cam bio en el int erfaz
act ualiza t odo el j uego.
La clase Pract icaD que se encuent ra en el paquet e es.j [Link].m ent [Link] icad
t iene un m ét odo m ain en el que se crean una serie de criat uras y se m uest ran por
pant alla.
Aunque en est a prim era fase del desarrollo del j uego no ut ilicem os las criat uras,
realizar un diseño lo m as genérico, reut ilizable y fácil de m ant ener que se pueda.
En el caso de que no est é puest a la variable de ent orno PATH, abrir una sesión DOS
y aj ust ar la variable de ent orno PATH para que el Sist em a Operat ivo sepa encont rar
las herram ient as del JDK. Para respet ar el valor que ya t uviese la variable PATH le
añadim os % PATH% .
221
MÓDULO 2
Aj ust ar la variable de ent orno CLASSPATH para que las herram ient as del JDK sepan
encont rar nuest ras clases Java. Tenem os dos opciones, o añadir el . ( punt o) y
siem pre ej ecut ar las herram ient as en el direct orio donde se encuent re el código, o
añadir el direct orio de t rabaj o y ej ecut ar las herram ient as donde queram os. Para
respet ar el valor que ya t uviese la variable CLASSPATH le añadim os % CLASS-
PATH%
222
Un ida d 2 .5 Ot r os con ce pt os
Cream os los direct orios donde van a est ar nuest ras clases
es\ j ava\ aula\ m ent or\ \ pract icad\ criat uras y es\ j ava\ aula\ m ent or\ pract icad\ ut il
Desde el direct orio es\ j ava\ aula\ m ent or\ pract icad\ criat uras, con un edit or de t ext o
( por ej em plo Not epad) vam os a escribir el código fuent e de cada una de nuest ras
clases j ava; el nom bre del fichero debe ser exact am ent e igual ( incluyendo
m ayúsculas y m inúsculas) al de la clase Java que vam os a desarrollar.
Em pezam os con Criat ura.j ava
223
MÓDULO 2
224
Un ida d 2 .5 Ot r os con ce pt os
225
MÓDULO 2
Desde el direct orio es\ j ava\ aula\ m ent or\ pract icad\ ut il, escribim os el int erface Cons-
t ant es.j ava
Desde el direct orio es\ j ava\ aula\ m ent or\ pract icad, escribim os la clase Pract i-
caD.j ava que va a cont ener el m ét odo m ain.
226
Un ida d 2 .5 Ot r os con ce pt os
Com pilam os el program a Java con el com pilador “ j avac” . Al com pilador hay que
darle el nom bre del fichero incluyendo su ext ensión.
Podem os hacerlo desde cada uno de los direct orios donde est án las clases, indican-
do solam ent e el nom bre de la clase sin paquet e ( por ej em plo j avac Troll.j ava) o
desde el direct orio t rabaj o, indicando el nom bre com plet o de la clase ( por ej em plo
j avac es\ j ava\ aula\ m ent or\ pract icad\ criat uras\ Troll.j ava) .
Para poder com pilar las clases, es necesario que las clases que ut ilizan sean com pi-
ladas previam ent e.
Vem os com o han quedado las clases com piladas en cada uno de los direct orios
227
MÓDULO 2
228
Un ida d 2 .5 Ot r os con ce pt os
Verificar que la perspect iva Java est á abiert a, y sino cam biar a ella
229
MÓDULO 2
230
Un ida d 2 .5 Ot r os con ce pt os
Crear un int erface Java nuevo llam ado Criat ura, especificando el paquet e
es.j [Link].m ent [Link] [Link] uras.
231
MÓDULO 2
Seleccionar Finish
Escribir el código dent ro del bloque del int erface y salvar con Ct rl + S o File - > Sa-
ve
232
Un ida d 2 .5 Ot r os con ce pt os
Crear las siguient es clases Troll , Enano, Elfo ( sin m ét odo m ain) dent ro del m ism o
paquet e. Para no t ener que volver a escribir el nom bre del paquet e, podem os se-
leccionarlo vía el bot ón derecho del rat ón y luego seleccionar el crear una nueva
clase.
233
MÓDULO 2
234
Un ida d 2 .5 Ot r os con ce pt os
En Eclipse, cuando se salvan los cam bios, se com pila el código, por lo que no hace
falt a realizar est e paso.
Crear el int erface Const ant es en el paquet e es.j [Link].m ent [Link] [Link] il.
235
MÓDULO 2
Por últ im o, cream os la clase que va a cont ener el m ain Pract icaD, en el paquet e j a-
va es.j [Link].m ent [Link] icad
236
Un ida d 2 .5 Ot r os con ce pt os
Seleccionando la clase Java Pract icaD, con el bot ón derecho del rat ón ej ecut arla
com o Java Applicat ion
237
MÓDULO 2
238
Un ida d 2 .5 Ot r os con ce pt os
En est a unidad hem os vist o dist int os concept os que nos perm it en organizar nues-
t ro código y m odificar el acceso a nuest ras clases, m ét odos y at ribut os.
Pa que t e s: son una caract eríst ica del lenguaj e que nos perm it e organizar
el código en grupos. Físicam ent e, cada uno de los subgrupos del paquet e
se conviert en en un direct orio del sist em a operat ivo.
M odifica dor e s de a cce so: son una caract eríst ica del lenguaj e que nos
posibilit a delim it ar quién o desde donde se puede acceder a una clase, a
un m ét odo o a un at ribut o. Exist en cuat ro delim it adores:
- public: puede acceder t odo el m undo.
- prot ect ed: Solam ent e se pueden acceder desde el m ism o
paquet e o subclases de ot ros paquet es.
- : Solam ent e se pueden acceder desde el m ism o paquet e.
- privat e: Solam ent e se puede acceder desde la m ism a clase.
Adicionalm ent e hem os vist o ot ros keyword que m odifican el com port am ient o de
clases, at ribut os y m ét odos
M é t odos e st á t icos: son m ét odos que son dependient es de la clase a la
que pert enecen y no a una inst ancia de una clase.
At r ibu t os e st á t icos: son at ribut os de clase y son com part idos por t odas
las inst ancias de la clase a la que pert enecen.
Bloque s e st á t icos: son bloques de código que se ej ecut an una sola vez
cuando la clase es cargada en m em oria.
UN I D AD ES D I D ÁCTI CAS:
Mat h, I nt eger, ….
Cla se s bá sica s
Te m a 3 .1
Í n dice de la u n ida d:
4. Clase j [Link] em
5. Clase j [Link] h
6. Ot ras clases
En el paquete [Link], importado por defecto por el compilador en las clases Ja-
va, existen ciertas clases muy utilizadas a la hora de desarrollar un programa. Es
por este motivo, que es importante que se conozcan.
Otros constructores:
[Link]
uctor_detail
Implementa una serie de métodos muy útiles para el manejo de las cadenas de ca-
racteres. Por ejemplo:
245
MÓDULO 3
Ot r os m é t odos:
[Link]
d_detail
Ej e m plo:
246
Un ida d 3 .1 Cla se s bá sica s
Ej e m plo:
Hay un concepto muy importante relacionado con el uso de Strings: son inmuta-
bles. Es decir, jamás se modifica el valor de un String si no que se crean nuevos
objetos. En la ejecución del siguiente código
String s = "0";
for(int i=1; i <10; i++)
s = s + i;
247
MÓDULO 3
No existe un solo objeto de tipo String al que se le ha ido cambiando su valor inter-
no (atributos), sino que se han creado 10 objetos distintos.
Pero aún hay más… la JVM reserva un espacio en memoria llamado String Pool
donde va guardando todos los String. Y el Garbage Collector jamás los elimina.
Cada vez que se crea un objeto nuevo del tipo String, la JVM mira antes si ese
String ya existe, y si es así lo reutiliza.
Por este motivo, el uso de String es un tema no tan trivial como pudiera parecer.
Un uso indebido puede provocar problemas de rendimiento.
StringBuffer es otra clase relacionada con las cadenas de caracteres. Pero en este
caso no son inmutables.
Otros constructores:
[Link]
constructor_detail
248
Un ida d 3 .1 Cla se s bá sica s
249
MÓDULO 3
Ot r os m é t odos:
[Link]
method_detail
Ej e m plo:
Ej e m plo:
250
Un ida d 3 .1 Cla se s bá sica s
El uso más habitual es la creación de Strings cuyo valor se calcula de forma dinámi-
ca. Al no ser inmutable, permite la creación del String final sin otros objetos inter-
medios que consumirán memoria de forma innecesaria. En la ejecución del siguien-
te código
251
MÓDULO 3
Ej e m plo:
Se trata de una clase con utilidades genéricas del sistema. Todos sus atributos y
métodos son estáticos.
252
Un ida d 3 .1 Cla se s bá sica s
Ot r os m é t odos:
[Link]
od_detail
Ej e m plo:
253
MÓDULO 3
Se trata de una clase con utilidades matemáticas. Todos sus atributos y métodos
son estáticos.
254
Un ida d 3 .1 Cla se s bá sica s
Ot r os m é t odos:
[Link]
_detail
Ej e m plo:
255
MÓDULO 3
6 . Ot r a s cla se s
256
Un ida d 3 .1 Cla se s bá sica s
Hay ocasiones en las que necesitaríamos usar un tipo primitivo como un objeto (ti-
po complejo). Por ejemplo, cuando queremos guardar números en una colección
que solo admite [Link].
En el paquete [Link].* existe un wrapper para cada tipo primitivo (no siempre
coincide el nombre):
257
MÓDULO 3
Ej e m plo:
Es el wrapper del tipo primitivo boolean. Sus métodos más importantes son:
258
Un ida d 3 .1 Cla se s bá sica s
Es el wrapper del tipo primitivo char. Sus métodos más importantes son:
Es el wrapper del tipo primitivo byt e. Sus métodos más importantes son:
259
MÓDULO 3
Es el wrapper del tipo primitivo short. Sus métodos más importantes son:
pu blic st a t ic sh or t pa r se Sh or t ( St r in g s) ; Convierte el
String s en un short.
260
Un ida d 3 .1 Cla se s bá sica s
Es el wrapper del tipo primitivo int. Sus métodos más importantes son:
Es el wrapper del tipo primitivo long. Sus métodos más importantes son:
261
MÓDULO 3
Es el wrapper del tipo primitivo float. Sus métodos más importantes son:
262
Un ida d 3 .1 Cla se s bá sica s
Es el wrapper del tipo primitivo double. Sus métodos más importantes son:
263
MÓDULO 3
7 .9 Au t obox in g/ Au t o- u n box in g
Java SE 5.0 añade una novedad al respecto de los wrappers de tipo básico,
permitiendo que las conversiones entre tipos primitivos y sus wrappers se
hagan de forma automática.
264
Un ida d 3 .1 Cla se s bá sica s
Integer i = 1;
int b = a;
Integer a = 5; int b = 6;
if(a == b)
[Link](“Iguales”);
Ante esta nueva funcionalidad, nos podemos preguntar ¿qué pasa con la so-
brecarga de métodos?
265
MÓDULO 3
int a = 5;
[Link](a);
La cadena invertida.
En el caso de que no esté puesta la variable de entorno PATH, abrir una sesión DOS
y ajustar la variable de entorno PATH para que el Sistema Operativo sepa encontrar
las herramientas del JDK. Para respetar el valor que ya tuviese la variable PATH le
añadimos %PATH%.
266
Un ida d 3 .1 Cla se s bá sica s
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o añadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el código, o
añadir el directorio de trabajo y ejecutar las herramientas donde queramos. Para
respetar el valor que ya tuviese la variable CLASSPATH le añadimos %CLASS-
PATH%
267
MÓDULO 3
268
Un ida d 3 .1 Cla se s bá sica s
Para poder coger un parámetro pasado en la ejecución del programa, incluir las
siguientes líneas después del main. Veremos el tratamiento de los arrays en la
Unidad 3.1
if (args == null || [Link] != 1){
[Link]("Numero de parametros incorrectos");
[Link](1);
}
String s = args[0];
269
MÓDULO 3
270
Un ida d 3 .1 Cla se s bá sica s
271
MÓDULO 3
272
Un ida d 3 .1 Cla se s bá sica s
273
MÓDULO 3
274
Un ida d 3 .1 Cla se s bá sica s
275
MÓDULO 3
276
Un ida d 3 .1 Cla se s bá sica s
El valor de la hipotenusa.
Adicionalmente, habrá que mostrar el tiempo que tarda en ejecutarse este método.
277
MÓDULO 3
278
Un ida d 3 .1 Cla se s bá sica s
279
MÓDULO 3
280
Un ida d 3 .1 Cla se s bá sica s
281
TÍTULO DE MÓDULO O BLOQUE
En esta unidad se han visto una relación de clases básicas e imprescindibles de co-
nocer a la hora de la programación en Java.
j a va .la n [Link] r in g: utilizada para el tratamiento de cadenas de caracteres
o String. Se utiliza sobre todo para cadenas de caracteres inmutables
Además se han estudidado las clases wrappers de los tipos primitivos, como son:
j a va .la n [Link] a n
j a va .la [Link] r a ct e r
j a va .la n [Link] e
j a va .la n [Link] or t
j a va .la n g.I n t e ge r
j a va .la n [Link] g
j a va .la n [Link] t
j a va .la n g.D ou ble
M ÓD ULO C
Est r u ct u r a s de da t os. Ar r a ys y
cole ccion e s
Te m a 3 .2
Í n dice de la u n ida d:
1. Arrays
2. Colecciones
En Unidades ant eriores hem os est udiado los t ipos de dat os, t ant o prim it ivos com o
com plej os. Hem os vist o com o t rabaj ar con dat os de am bos dos t ipos, pero siem pre
de una m anera unit aria. En est a Unidad verem os com o t rabaj ar con los conj unt os
de dat os, com o una sola variable u obj et o.
1 . Ar r a ys
Un array es una est ruct ura de dat os que perm it e albergar varios elem ent os del
m ism o t ipo.
La longit ud de un array se est ablece durant e su creación y una vez est ablecida la
longit ud de un array, ya no se puede m odificar, por lo que se puede considerar que
t iene una longit ud fij a.
Los arrays pueden albergar t ant o t ipos prim it ivos com o t ipos com plej os y para po-
der ut ilizarlos, hay que inicializarlos. Un array sin inicializar, por defect o vale n u ll.
285
MODULO 3
Una vez hayam os creado un array, t odas sus posiciones son inicializadas al valor
por defect o del t ipo de variable que albergue.
Es decir, 0 o 0.0 si se t rat aba de un núm ero, false si se t rat aba de un boolean y null
si se t rat aba de un t ipo com plej o.
Exist e una form a de crear un array inicializando t odas sus posiciones a un valor de-
t erm inado, igualándolo a un list ado de elem ent os separados por com as ent re { } .
El t am año del array será el núm ero de elem ent os del list ado.
Para el acceso al elem ent o de un array se ut iliza en nom bre del array seguido de
unos [ ] con la posición a la que querem os acceder, siendo siem pre el índice de un
array de t ipo int . Hay que t ener en cuent a que la prim era posición de un array es la
0.
286
Un ida d 3 .2 Est r u ct u r a de da t os
Ni insert ar posiciones.
El borrado será algo lógico, com o igualar a null, a - 1, et c….. las posiciones que no
se quieran o se necesit en ut ilizar, dependiendo de la lógica que necesit e el progra-
m a o de la propia elección del program ador.
287
MODULO 3
Es im posible acceder a una posición fuera del array en t iem po de ej ecución. Llega-
do el caso se lanzará una excepción del t ipo Ar r a yI nde x Ou t OfBoun dEx ce pt ion
( se verán en m ás det alle en la Unidad 3.5) .
/ / I nserción.
saludos[ 0] = new St ring( " Hola" ) ;
saludos[ 1] = new St ring( " Adios" ) ;
saludos[ 2] = new St ring( " Hello" ) ;
saludos[ 3] = new St ring( " GoodBye" ) ;
/ / Ext racción.
St ring t m p = saludos[ 2] ;
/ / Borrado.
saludos[ 2] = null;
saludos[ 3] = null;
/ / Recorrido.
for( int i= 0; i< [Link] h; i+ + )
Syst em .out .print ln( saludos[ i] ) ;
/ / Búsqueda.
boolean sw = false;
for( int i= 0; i< [Link] h; i+ + )
{
if( saludos[ i] ! = null && saludos[ i] .equals( " Adios" ) )
{
Syst em .out .print ln( "Adios ha sido encont rado en la posición: "
+ i) ;
sw = t rue;
break;
}
}
}
}
288
Un ida d 3 .2 Est r u ct u r a de da t os
1 . 1 Se n t e n cia for / in
Est a nueva sent encia del Java SE 5.0 nos facilit a la it eración por los elem ent os
de cualquier t ipo de colección: arrays, list as, et c…
1 . 2 Ar r a ys m u lt idim e n sion a le s
Y si est uviéram os hablando de t res dim ensiones ent onces t endríam os un array
de arrays de arrays, aunque son bast ant e m enos ut ilizados.
289
MODULO 3
Pero podem os t ener arrays bidim ensionales no cuadradas. Es decir, que la se-
gunda dim ensión t enga longit ud diferent e para cada posición de la prim era
dim ensión.
Ej e m plo:
Al igual que ocurriera en los arrays de una dim ensión, los arrays bidim ensio-
nales t am bién se pueden inicializar en la creación con un list ado de valores.
290
Un ida d 3 .2 Est r u ct u r a de da t os
/ / Rellenar la m at riz
for( int i= 0; i< m at [Link] h; i+ + )
{
m at riz[ i] = new int [ 5] ;
for( int j = 0; j < m at riz[ i] .lengt h; j + + )
m at riz[ i] [ j ] = i + j ;
}
291
MODULO 3
1 . 3 El m é t odo m a in u sa Ar r a ys
El m ét odo m ain recibe un array de St rings que cont ine los argum ent os envia-
dos en el arranque de la aplicación. La sint axis del m ét odo m ain es la siguien-
t e, y com o podem os apreciar args es un array de elem ent os de t ipo St ring:
Ej e m plo:
292
Un ida d 3 .2 Est r u ct u r a de da t os
2 . Cole ccion e s
Una colección es sim plem ent e un obj et o que agrupa varios elem ent os en uno solo.
Se ut ilizan para guardar y m anipular dat os así com o t ransm it ir inform ación ent re
m ét odos.
A cont inuación se m uest ra la organización j erárquica de est e fram ework y una for-
m a rápida de saber cual podría ser la elegida a ut ilizar en cada caso. En el caso de
los Collect ion, hay una clara diferenciación en cuant o si perm it e duplicados acce-
diendo por índice j [Link] [Link] , o sin duplicados sin posibilidad de acceso vía índice,
j [Link] [Link]
293
MODULO 3
En el caso de los Map, se ut ilizan siem pre que necesit em os t rabaj ar con parej as de
dat os clave/ valor.
Exist irán especializaciones que perm it an elem ent os duplicados o no, que perm it an
ordenar los elem ent os o no, et c.
Est as int erfaces cont iene la definición de t odos los m ét odos genéricos que deben
im plem ent ar las colecciones.
2 .1 j a va .u t [Link] ct ion
294
Un ida d 3 .2 Est r u ct u r a de da t os
295
MODULO 3
Hay que t ener siem pre en cuent a que las colecciones no perm it en el uso de t i-
pos prim it ivos. Por t ant o, siem pre que necesit em os t rabaj ar con ellos habrá
que hacer uso de los Wrappers de Tipos Prim it ivos.
2 .2 j a va .u t il.I t e r a t or
El int erfaz I t erat or represent a un com ponent e que perm it e it erar o recorrer
los elem ent os de una colección.
Todas las colecciones ofrecen una im plem ent ación de I t erat or por m edio del
m ét odo:
pu blic I t e r a t or it e r a t or ( ) ;
En el SDK 1.1.x exist ía ot ro int erfaz, j a va .ut [Link] u m e r a t ion , pero ya ha de-
j ado de ut ilizarse.
2 .2 j a va .u t [Link] t
El int erfaz Set hereda del int erfaz Collect ion. Pero no añade la definición de
ningún m ét odo nuevo.
Represent a colecciones que no perm it en t ener elem ent os duplicados. Para sa-
ber si un elem ent o est á duplicado, hace uso del m ét odo:
296
Un ida d 3 .2 Est r u ct u r a de da t os
while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}
297
MODULO 3
while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}
298
Un ida d 3 .2 Est r u ct u r a de da t os
while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}
2 .3 j a va .u t [Link]
El int erfaz List hereda del int erfaz Collect ion. Represent a colecciones con ele-
m ent os en secuencia. Es decir, con orden.
299
MODULO 3
Los m ét odos que añade est e int erfaz, para acceso posicional son:
Los m ét odos que añade est e int erfaz para operaciones de búsqueda son:
Los m ét odos que añade est e int erfaz para obt ener subcolecciones son:
A cont inuación se enum eran las dist int as im plem ent aciones de est e int erfaz:
300
Un ida d 3 .2 Est r u ct u r a de da t os
while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}
301
MODULO 3
while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}
302
Un ida d 3 .2 Est r u ct u r a de da t os
303
MODULO 3
2 .4 j a va .u t il.M a p
El int erfaz Map no hereda del int erfaz Collect ion. Represent a colecciones con
parej as de elem ent os: clave y valor.
pu blic in t h a shCode ( ) ;
304
Un ida d 3 .2 Est r u ct u r a de da t os
A cont inuación enum eram os las dist int as im plem ent aciones de est e int erfaz:
Syst em .out .print ln( " Aleat orio 03: " + [Link] ( " 03" ) ) ;
Syst em .out .print ln( " Aleat orio 01: " + [Link] ( " 01" ) ) ;
Set s = [Link] ( ) ;
I t erat or it = [Link] erat or( ) ;
while( it .hasNext ( ) )
{
St ring aux = ( St ring) it .next ( ) ;
305
MODULO 3
Syst em .out .print ln( " Aleat orio 03: " + [Link] ( " 03" ) ) ;
Syst em .out .print ln( " Aleat orio 01: " + [Link] ( " 01" ) ) ;
Set s = [Link] ( ) ;
I t erat or it = [Link] erat or( ) ;
while( it .hasNext ( ) )
{
St ring aux = ( St ring) it .next ( ) ;
Syst em .out .print ln( aux + " : " + [Link] ( aux) ) ;
}
}
}
306
Un ida d 3 .2 Est r u ct u r a de da t os
Syst em .out .print ln( " Aleat orio 03: " + [Link] ( " 03" ) ) ;
Syst em .out .print ln( " Aleat orio 01: " + [Link] ( " 01" ) ) ;
Set s = [Link] ( ) ;
I t erat or it = [Link] erat or( ) ;
while( it .hasNext ( ) )
{
St ring aux = ( St ring) it .next ( ) ;
Syst em .out .print ln( aux + " : " + [Link] ( aux) ) ;
}
}
}
307
MODULO 3
Syst em .out .print ln( " Aleat orio 03: " + [Link] ( " 03" ) ) ;
Syst em .out .print ln( " Aleat orio 01: " + [Link] ( " 01" ) ) ;
Set s = [Link] ( ) ;
I t erat or it = [Link] erat or( ) ;
while( it .hasNext ( ) )
{
St ring aux = ( St ring) it .next ( ) ;
Syst em .out .print ln( aux + " : " + [Link] ( aux) ) ;
}
}
}
308
Un ida d 3 .2 Est r u ct u r a de da t os
2 .5 Ge n e r ics
Se t rat a de una de las grandes novedades que int roduj o Java SE 5.0
Perm it e t ipar el cont enido de las colecciones, de m anera que se rest ringe el
t ipo ut ilizado y se elim ina el uso m asivo de cast ings.
Para definir el t ipo del cont enido de una colección se ut iliza < t ipo> :
t ipo_ cole ccion < t ipo_ con t e nido> ide n t ifica dor = n u ll;
ide n t ifica dor = n e w t ipo_ cole ccion < t ipo_ con t e n ido> ( ) ;
309
MODULO 3
Siem pre que creem os nuest ras propias claves para el uso de los Map, debem os so-
breescribir los m ét odos equals( ) y hashCode( ) .
El m ot ivo es que los Map ut ilizan est os dos m ét odos para llevar a cabo t ant o las
inserciones com o las ext racciones de valores.
Para ent ender m ej or el uso de est os dos m ét odos por part e de los Map, veam os un
poco m ás en det alle la est ruct ura int erna de est e t ipo de colección.
Un Map int ernam ent e cont iene una secuencia de com part im ent os ( bucket s) donde
se van alm acenando t odos los valores ( clave/ valor) .
Para decidir en qué com part im ent o se alm acena un valor, se llam a al m ét odo hash-
Code( ) del obj et o ut ilizado com o clave.
Pero pueden ocurrir colisiones, es decir, que un com part im ent o ya est é ut ilizado por
una parej a clave/ valor. Est o puede ser debido a que:
310
Un ida d 3 .2 Est r u ct u r a de da t os
I m aginem os que hacem os un get del Map y el com part im ent o correspondient e t iene
colisiones. ¿Qué valor nos devuelve?
Lo sabe m ediant e el uso del m ét odo equals( ) de la clave. Va it erando por t odas las
claves de ese com part im ent o para encont rar la que se ha pedido.
I m aginem os que hacem os un put en el Map con una clave ya exist ent e. ¿Cóm o sa-
be que ya exist e y que hay que m achacar el valor ant erior?
Lo sabe m ediant e el uso del m ét odo equals( ) de la clave. I t era para com probar si
ya exist e.
La im plem ent ación del m ét odo equals( ) debe cum plir las siguient es norm as:
311
MODULO 3
La im plem ent ación del m ét odo hashCode( ) debe cum plir las siguient es norm as:
La im plem ent ación del m ét odo hashCode( ) no es una t area t an t rivial. No obst ant e,
aquí proponem os dos sugerencias bast ant e sencillas:
312
Un ida d 3 .2 Est r u ct u r a de da t os
Por ej em plo, ¿cóm o funcionan los m ét odos cont ains( ) , add( ) y rem ove( ) de las co-
lecciones?
Para saber si un obj et o est á cont enido en una colección se va llam ando al m ét odo
equals( ) de t odos los obj et os de la colección. Para borrarlo de una colección, se le
busca de igual form a. Y para añadirlo en un Set que no perm it e duplicados, lo m is-
m o.
313
MODULO 3
A cont inuación m ost rarem os un resum en de las caract eríst icas vist as en est a Uni-
dad t ant o de los Arrays com o de las Colecciones, que nos perm it irán poder discernir
cuando ut ilizar un t ipo u ot ro.
Puede alm acenar t ant o t ipos prim it ivos com o t ipos com ple-
j os.
314
Un ida d 3 .2 Est r u ct u r a de da t os
En el garaj e se cam bian las ruedas t ant o de coches com o de m ot os. El precio del
cam bio de una rueda se fij a al abrir el garaj e, al igual que la capacidad m áxim a de
vehículos, ya sean m ot os o coches. Si no hubiese hueco para regist rar un vehículo
nuevo, habrá que t ener cont em plado un sist em a de aviso para quien est é dej ando
su vehículo.
El sist em a de gest ión del garaj e requiere un m ecanism o para ingresar y ret irar los
vehículos, conocer el núm ero t ot al de vehículos recibidos en ese m om ent o, el precio
que supondría cam biar t odas las ruedas de t odos los vehículos, y el kilom et raj e
m edio de t odos ellos.
La inform ación que m anej arem os de los coches ent re ot ras cosas es la m arca y el
núm ero de puert as. Mient ras que de las m ot os será la m arca y la cilindrada.
La clase Pract icaA t iene un m ét odo m ain en el que se crea un Garaj e, una serie de
vehículos que se irán recibiendo en el garaj e y por últ im o se im prim irá por pant alla
t oda la inform ación general del garaj e así com o la inform ación de cada vehículo.
En el caso de que no est é puest a la variable de ent orno PATH, abrir una sesión DOS
y aj ust ar la variable de ent orno PATH para que el Sist em a Operat ivo sepa encont rar
las herram ient as del JDK. Para respet ar el valor que ya t uviese la variable PATH le
añadim os % PATH% .
315
MODULO 3
Aj ust ar la variable de ent orno CLASSPATH para que las herram ient as del JDK sepan
encont rar nuest ras clases Java. Tenem os dos opciones, o añadir el . ( punt o) y
siem pre ej ecut ar las herram ient as en el direct orio donde se encuent re el código, o
añadir el direct orio de t rabaj o y ej ecut ar las herram ient as donde queram os. Para
respet ar el valor que ya t uviese la variable CLASSPATH le añadim os % CLASS-
PATH%
316
Un ida d 3 .2 Est r u ct u r a de da t os
Cream os los direct orios donde van a est ar nuest ras clases
es\ j ava\ aula\ m ent or\ \ pract icas31 y es\ j ava\ aula\ m ent or\ \ pract icas31\ vehiculos
Desde el direct orio es\ j ava\ aula\ m ent or\ pract icas31\ vehiculos, con un edit or de
t ext o ( por ej em plo Not epad) vam os a escribir el código fuent e de nuest ras clases
j ava; el nom bre del fichero de la clase debe ser exact am ent e igual ( incluyendo m a-
yúsculas y m inúsculas) al de la clase Java que vam os a desarrollar.
Em pezam os con la clase Vehiculo.j ava
317
MODULO 3
Seguim os con la clase Coche que im plem ent a el int erface Vehiculo
318
Un ida d 3 .2 Est r u ct u r a de da t os
Ahora t oca el t urno a la clase Mot o que t am bién im plem ent a el int erface Vehiculo
319
MODULO 3
Por últ im o la clase Pract icaA, que cont iene el m ét odo m ain podría quedar com o si-
gue:
320
Un ida d 3 .2 Est r u ct u r a de da t os
321
MODULO 3
322
Un ida d 3 .2 Est r u ct u r a de da t os
Verificar que la perspect iva Java est á abiert a, y sino cam biar a
ella
Crear un int erface Java nuevo llam ado Vehiculo, especificando el paquet e
es.j [Link].m ent [Link] [Link]
323
MODULO 3
A cont inuación cream os la clase Coche, en el m ism o paquet e que el int erface Vehi-
culo e indicam os que vam os a im plem ent ar dicho int erface
324
Un ida d 3 .2 Est r u ct u r a de da t os
325
MODULO 3
Cream os la clase Garaj e en el paquet e es.j [Link].m ent [Link] icas31, que es la
que va a cont ener a los dist int os vehiculos
326
Un ida d 3 .2 Est r u ct u r a de da t os
327
MODULO 3
Finalizam os creando la clase Pract icaA, m arcando que nos cree el m ét odo m ain
328
Un ida d 3 .2 Est r u ct u r a de da t os
Verificar que t odas las clases est án grabadas. Para ello ut ilizar Ct rl + S en cada cla-
se o en File - > Save All
Para ej ecut ar la aplicación, seleccionar encim a de la clase Pract icaA con el bot ón
derecho del rat ón Run As - > Java Applicat ion
329
MODULO 3
330
Un ida d 3 .2 Est r u ct u r a de da t os
Tendrem os un archivador donde irem os guardando t odas las fichas de los pacien-
t es. Las fichas cont ienen la siguient e inform ación: nom bre, apellidos y edad.
Todas las fichas que vayam os creando, se podrán guardar o elim inar del archiva-
dor. Al archivador t am bién le podrem os pedir un list ado. Est e list ado consist irá en
im prim ir por pant alla el núm ero de fichas guardadas, así com o el cont enido de las
fichas.
Todas las clases se guardarán en el paquet e es.j [Link].m ent [Link] icas31.
La clase Pract icaB t iene un m ét odo m ain en el que se crea un archivador, dos o
t res fichas que se guardarán en el archivador, se list ará el cont enido, se elim inará
alguna ficha y se volverá a list ar su cont enido.
Reut ilizarem os los direct orios, paquet es .... realizados en la Pract icaA.
En el direct orio es\ j ava\ aula\ m ent or\ pract icas31\ , m ediant e el not epad, cream os la
clase Ficha
331
MODULO 3
A cont inuación nos cream os la clase Archivador, que es la que va a cont ener a las
fichas
332
Un ida d 3 .2 Est r u ct u r a de da t os
333
MODULO 3
Ahora realizarem os la m ism a práct ica con Eclipse. Arrancar Eclipse, ej ecut ando
c: \ eclipse3.5.2\ [Link]
334
Un ida d 3 .2 Est r u ct u r a de da t os
335
MODULO 3 JAVA AVANZADO
En est a Unidad hem os vist o com o t rabaj ar con los conj unt os de dat os, com o una so-
la variable u obj et o. Los dos grandes grupos que perm it en t rat ar con conj unt os de
dat os son:
Ar r a ys:
- Tienen un t am año est át ico
- Su t am año se conoce m ediant e el at ribut o lengt h.
- Puede alm acenar t ant o t ipos prim it ivos com o t ipos
com plej os.
- Solo pueden albergar elem ent os de un t ipo.
Cole ccion e s:
- Tienen un t am año dinám ico
- Su t am año se conoce m ediant e m ét odo size( ) .
- Puede alm acenar solo t ipo com plej os, ya sean del
m ism o o dist int o t ipo.
j a va .u t il.M a p que t rabaj a con elem ent os del t ipo clave/ valor. Se clasifican
a su vez en:
- j [Link] [Link]: Ofrece un t iem po de
acceso ópt im o cuando dicho acceso es
aleat orio.
- j [Link] [Link] able: Es la versión sincro-
nizada de HashMap.