0% encontró este documento útil (0 votos)
7 vistas343 páginas

Introducción a la Programación O.O.

El documento presenta una introducción a la programación orientada a objetos en Java, abordando su historia, características y ventajas. Se destacan conceptos fundamentales como abstracción, encapsulamiento, herencia y polimorfismo, así como la importancia del UML en el análisis y diseño de sistemas. Además, se enfatiza la reducción de complejidad y la reutilización de código como beneficios clave de esta metodología.

Cargado por

Elkin Becerra
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas343 páginas

Introducción a la Programación O.O.

El documento presenta una introducción a la programación orientada a objetos en Java, abordando su historia, características y ventajas. Se destacan conceptos fundamentales como abstracción, encapsulamiento, herencia y polimorfismo, así como la importancia del UML en el análisis y diseño de sistemas. Además, se enfatiza la reducción de complejidad y la reutilización de código como beneficios clave de esta metodología.

Cargado por

Elkin Becerra
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Programación en Java inicial

AULA
MENTOR
[Link]
Nipo: 820-10-530-5

Autor:
Pilar Aranzazu Ocaña Diaz-Ufano y José
Miguel Ordax Cassá

Edición y maquetación de contenidos:


Susana Pérez Marín

Diseño gráfico e ilustración de portada:


María Guija Medina
M ÓD ULO A

UN I D AD ES D I D ÁCTI CAS:

1. I nt roducción

2. Concept os básicos. Obj et o, at ribut o, m ét odo,

int erfaz, clase

3. Paradigm as de la Orient ación a Obj et os:

Abst racción, encapsulación, ocult am ient o,

herencia y polim orfism o.


Nipo: 820-10-530-5

Autor:
Pilar Aranzazu Ocaña Diaz-Ufano y José
Miguel Ordax Cassá

Edición y maquetación de contenidos:


Susana Pérez Marín

Diseño gráfico e ilustración de portada:


María Guija Medina
M ÓD ULO A

I n t r odu cción

Te m a 1 .1

Í n dice de la u n ida d:

1. Hist oria

2. Vent aj as de la Orient ación a Obj et os


Un ida d 1 .1 I n t r odu cción

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.

Así, acercando el m odelo de abst racción al problem a a resolver y no a la m áquina


física, aparecieron en los años 60 los prim eros lenguaj es Orient ados a Obj et os,
t am bién denom inados O.O., t ales com o LI SP ( t odos los problem as se reducen a
list as) , APL ( t odos los problem as se reducen a algorit m os) y PROLOG ( t odos los
problem as se reducen a cadenas de decision) .

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:

 Todo puede ser represent ado com o un obj et o, siendo capaz de


alm acenar ciert a inform ación y realizar operaciones sobre ella.

 Un program a es un conj unt o de obj et os colaborando ent re sí,


indicando que es lo que hay que hacer m ediant e el envío de
m ensaj es.

 Cada obj et o est a cont ruido en base a ot ros obj et os,


perm it iendo alcanzar grados m ayores de com plej idad.

 Cada obj et o pert enece a un t ipo, denom inado clase.

 Todos los obj et os del m ism o t ipo pueden recibir los m ism os
m ensaj es.

1
MÓDULO 1

A cont inuación, se m uest ra la evolución de los lenguaj es Orient ados a Obj et os


hast a la aparición del lenguaj e Java, obj et o de nuest ro est udio.

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

Habiendo vist o la evolución de los lenguaj es de program ación en base a su nivel de


abst racción, el principal obj et ivo de los lenguaj es Orient ados a Obj et os fue reducir
la com plej idad del desarrollo y m ant enim ient o del Soft ware. Así las principales
vent aj as de est os lenguaj es 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.

2 .1 Sim ilit u d con e l m u n do r e a l

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.

 Ej e m plo: Tenem os que desarrollar un program a para una t ienda de


anim ales donde solo van a t rat ar m am íferos y solo ciert os t ipos de m am íferos.
Por lo t ant o, los peces, las aves ... quedan fuera del ám bit o de nuest ro m undo
real.

3
MÓDULO 1

2 .2 Fa cilit a e l de sa r r ollo de sist e m a s com ple j os.

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:

 Abst racción. Capacidad de definir los dat os y operaciones que


se necesit an, de las ent idades de nuest ro m undo real.

4
Un ida d 1 .1 I n t r odu cción

 Encapsulam ient o. Perm it e ocult ar que és lo que proporciona


una ent idad, sin necesidad de conocer com o lo proporciona.

 Modularidad. División de las soluciones en com ponent es m ás


pequeños o m ódulos independient es que se int egran ent re sí. Una
solución com plej a desarrollada en un solo m ódulo es im posible de
abarcar por un solo lect or, debido al núm ero de cam inos de cont rol,
variables ...

 Herencia. Relación de j erarquía ent re las ent idades, en cuant o


a funcionalidad.

2 .3 Fa cilit a la r e u t iliza ción

La reut ilización de código es una de las grandes vent aj as de los lenguaj es


Orient ados a Obj et os. ¿Cuáles son las caract eríst icas que perm it en obt ener
dicha vent aj a? Se consigue m ediant e la herencia ( relaciones j eráquicas de
ent idades) , com posición ( creación de ent idades en base a ot ras) y
param et rización ( reut ilización de operaciones en función de los parám et ros
que se les pasan a dichas operaciones) .

La Orient ación a Obj et os soport a la reut ilización basada en la ut ilización de


librerías de com ponent es ( agrupación de ent idades con un significado
relacionado) , pat rones de diseño ( soluciones dadas a problem as ya
exist ent es) y arquit ect uras soft ware ( t am bién conocidas con el nom bre de
fram ework) .

2 .4 Pe r m it e e l de sa r r ollo it e r a t ivo.

El desarrollo it erat ivo, perm it e ir paso a paso en el ciclo de desarrollo. No se


pret ende em pezar desde 0 y t erm inar el 100% del desarrollo en una sola
et apa.

Con el desarrollo it erat ivo, se van definiendo et apas e hit os a conseguir,


consiguiendo fases de pruebas y aprobación de lo desarrollado hast a el
m om ent o en fases m ucho m as t em pranas que en el desarrollo t radicional. De

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.

El client e puede ir probando versiones m ucho ant es que en el desarrollo


t radicional. De est a m anera se com prueba que la solución dada al problem a a
resolver es realm ent e lo que se est á esperando y no t enem os que esperar a la
finalización del desarrollo, para verificar que la solución final sat isface el
problem a a resolver en su t ot alidad.

Act ualm ent e, el desarrollo it erat ivo, se basa en la ut ilización de ‘Casos de


Uso’, uno de los diagram as definidos por UML. Describen una visión ext erna
del com port am ient o del Sist em a desde el punt o de vist a del usuario,
const it uyendo un m odelo de lo que el Sist em a hará sin t ener en cuent a el
cóm o lo hará.

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

2 .5 Fa cilit a la in t e r ope r a bilida d

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.

Es una diferencia a t ener en cuent a, con respect o a C+ + que sí que necesit a


saber en que t opología se va a ej ecut ar.

7
MÓDULO 1

 Los le ngua j e s or ie n t a dos a obj e t os, m ide n su n ive l de a bst r a cción


con r e spe ct o a la de fin ición de l m u ndo r e a l.

 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

Con ce pt os bá sicos. Obj e t o, a t r ibu t o,


m é t odo, in t e r fa z, cla se

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:

 Es cualquier cosa que vem os a nuest ro alrededor, algo t angi-


ble y/ o visible, anim ado o inanim ado. Por ej em plo, un cam ión, un
perro, una cuent a bancaria ...

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 se caract eriza por un núm ero de ope r a cion e s y un


e st a do que recuerda el efect o de est as operaciones. I var Jacobson

 Un obj et o t iene un e st a do, com por t a m ie n t o e ide n t ida d; la


est ruct ura y com port am ient o de obj et os sim ilares se definen en sus
clases com unes. Grady Booch

 Un obj et o es una ent idad que t iene un e st a do ( cuya represen-


t ación est á ocult a) y un conj unt o definido de ope r a cione s que ope-
ran sobre ese est ado. I an Som m erville

 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

2 .1 Ca r a ct e r íst ica s de u n obj e t o

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:

 I dent idad. Es un ident ificador unívoco para cada uno de los


obj et os. En el caso de que los valores de los at ribut os fueran los
m ism os, es la única m anera de poder det erm inar cada uno de los ob-
j et os. Así si t enem os dos cuent as corrient es con el m ism o t it ular, y el
m ism o im port e, la única form a de diferenciarlas es vía dicha ident i-
dad.

 Com port am ient o. Conj unt o de operaciones o m ét odos que


proporcionan servicios a ot ros obj et os que solicit an dichos servicios
cuando necesit an que se realice una ciert a operat iva.

 Est ado. Conj unt o de propiedades o at ribut os que recuerdan el


efect o de las operaciones.

 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.

Los m ét odos pueden clasificarse de la siguient e m anera:

 Modificador ( set t er) : alt era el est ado de un obj et o. Por ej em -


plo, set Hora( )

 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

 I t erador: perm it e acceder a t odas los elem ent os de un obj et o.


Solo disponible para colecciones de obj et os.

 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.

 Propósit o general: la lógica del program a. Por ej em plo, lim -


piarPant alla( ) , increm ent arDia( ) .

Gráficam ent e, se puede visualizar la est ruct ura de un obj et o de la siguient e m a-


nera:

 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

M é t odo: Es una acción que se realiza sobre un obj et o para consult ar o


m odificar su est ado.

2 .3 El a spe ct o de los obj e t os.

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.

3 .1 Cla se s ve r su s Obj e t os.

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.

Un obj et o pert enece a una clase en part icular.

Los obj et os son creados y dest ruidos en t iem po de ej ecución. Residen en el


espacio de m em oria.

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?.

Para solvent ar est a problem át ica, aparece el concept o de Clasificación. La cla-


sificación es el m edio por el que ordenam os el conocim ient o, ya que funda-
m ent alm ent e es un problem a de búsqueda de sim ilit udes. Al clasificar busca-
m os grupos de cosas que t engan una m ism a est ruct ura o exhiban un com por-
t am ient o com ún.

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:


2. Yo m e com port o com o una plant illa:
3. A m i m e gust a hacer cosas:
4. Yo puedo t ener m uchos m ét odos:
5. Yo represent o el est ado:
6. Yo represent o el com port am ient o:
7. Yo est oy en los obj et os:
8. Yo vivo en m em oria:
9. Yo soy usado para crear inst ancias:
10. Mi est ado puede cam biar:
11. Yo declaro m ét odos:
12. Yo puedo cam biar en ej ecución:

Las soluciones a las pregunt as ant eriores son:

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

 En e st a Unida d h e m os vist o los con ce pt os bá sicos e n los qu e se


a poya la Or ie n t a ción a obj e t os:
- Obj et o.
- At ribut o.
- Mét odo.
- I nt erfaz.
- Clase
M ÓD ULO A

Pa r a digm a s de la OO

Te m a 1 .3

Í n dice de la u n ida d:

1. Paradigm as de la Orient ación a Obj et os

2. Abst racción

3. Encapsulación y ocult am ient o

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.

1 . Pa r a digm a s de la Or ie n t a ción a Obj e t os.

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.

El paradigm a de la Orient ación a Obj et o es una disciplina de ingeniería de desarro-


llo y m odelado de Soft ware que perm it e const ruir m ás fácilm ent e sist em as com ple-
j os a part ir de los com ponent es individuales vist os en la Unidad 1.2, t ales com o ob-
j et os, clases, at ribut os, m ét odos e int erfaces, t odos ellos ut ilizados para const ruir
un program a.

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

 Encapsulación y Ocult am ient o

 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

Consist e en la generalización concept ual de los at ribut os y com port am ient o de un


det erm inado conj unt o de obj et os.

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.

 Ej e m plo de a bst r a cción : En nuest ro m undo real, t enem os los siguient es


obj et os, m iGat o, m iPerro, m iLeon, m iTigre y m iLobo. Si abst raem os los at ribu-
t os com unes que querem os t ener cont em plados en el ám bit o de nuest ra solu-
ción, encont ram os que en t odos ellos, querem os t ener una fot o, que t ipo de ali-
m ent ación, donde habit an y su t am año, y com o com port am ient o, querem os sa-
ber com o hacen ruido, com o com en, com o duerm en y com o rugen. Así de una
realidad, hem os abst raído est ado y com port am ient o y hem os definido la clase
Anim al.

3 . En ca psu la ción y Ocu lt a m ie n t o

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:

 Asociación: Relación sim ple.

 Agregación: Cont enido en ...

 Com posición: Obligat oriedad. Uno no puede exist ir sin el ot ro.

 Herencia: Relación Jerárquica. Son del t ipo de

 Relaciones dinám icas: Mensaj es.

4 .1 Re la ción de Asocia ción

Represent a la dependencia m ás general ent re clases, siendo una dependencia


de t ipo sem ánt ico. Por defect o es bidireccional, aunque se puede rest ringir a
una sola direcció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) :

 0..1 : cero o uno

 1 : uno y solo uno

 0..* o * : cero o m uchos

27
MÓDULO 1

 1..* : uno o m uchos

En los diagram as UML, la linea rect a se ut iliza para


represent ar la asociación bidireccional y la flecha ( linea discont inua o cont i-
nua) cuando es unidireccional.

 Ej e m plo de a socia ción u n idir e ccion a l: Un pedido puedo acceder a un


product o, pero desde un product o no puedo acceder a un pedido. Ot ro ej em plo,
sería m iProgram a puede acceder a un product o, pero un product o no puede ac-
ceder a m iProgram a.

 Ej e m plo de a socia ción bidir e ccion a l: Un client e puede acceder a un pedi-


do, y un pedido puede acceder a un client e.

4 .2 Re la ción de Agr e ga ción

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.

En los diagram as UML, el rom bo blanco se ut iliza para repre-


sent ar la agregación.

 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.

4 .3 Re la ción de Com posición

Se t rat a de una relación de agregación fuert e.

Un obj et o no puede exist ir si no exist en los obj et os de los que est á com pues-
t o.

En los diagram as UML, el rom bo negro se ut iliza para repre-


sent ar la com posición.

 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

Se basa en la exist encia de relaciones de generalización/ especialización ent re


clases.

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.

En los diagram as UML, la flecha cerrada blanca se ut iliza para represen-


t ar la herencia.

 Ej e m plo de h e r e n cia : En nuest ro m undo real, est am os m odelizando a los


anim ales. Todos ellos, deben de hacer Ruido, com er, dorm ir y rugir. Cada una de
las especializaciones, t ant o los Felinos com o los Caninos saben com o rugir. A su
vez, cada una de las especializaciones saben com o com er, y com o hacerRuido.
Todos ellos, realizan la operación de dorm ir de la m ism a m anera que se ha de-
t erm inado en la clase Anim al.

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

4 .5 Re la ción din á m ica : M e n sa j e

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.

Est a relación se indica que es dinám ica ya que se observa en ej ecución, no en


el diseño ( en diseño solo se observan las int erfaces y las relaciones) . En una
clase, por t ant o no se define, ningún t ipo de m ensaj e. Es en ej ecución, donde
se aprecia los m ensaj es que un obj et o llam ant e envía a uno recept or para que
m odifique su est ado o cam bie su com port am ient o.

 Ej e m plo de m e n sa j e : El m ensaj e en est e ej em plo es la llam ada desde una-


Persona al obj et o unReloj , para que le de la hora m ediant e el m ét odo get Hora.
Para ello, el obj et o unaPersona t iene que conocer el int erfaz de unReloj , para
saber que m ét odo es el que t iene que llam ar, si t iene que pasarle parám et ros,
de que t ipos y si le va a devolver alguna inform ación y una vez m ás, de que t i-
po.

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.

Est o posibilit a desencadenar im plem ent aciones de operaciones diferent es com o


respuest a a un m ism o m ensaj e, en función del obj et o que lo reciba.

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.

 Ej e m plo de polim or m ism o: En el ej em plo, el Mat em át ico, solo va a t ener


relación con Figura para calcularArea y calcularPerim et ro. Pero realm ent e es ca-
da una de las figuras, la que sabe com o t iene que calcularArea o calcularPeri-
m et ro. Por eso, cada una de ellas, Cuadrado, Triangulo y Circulo van a im ple-
m ent ar cada uno de los m ét odos de una m anera m as especializada que el padre

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

Const ruir un Diagram a de Clases UML a part ir de las siguient es observacio-


nes:



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:

1. I nt roducción a Java. Caract eríst icas del lenguaj e

2. Ent orno de desarrollo

3. Sint áxis. I dent ificadores, keywords, variables,

t ipos de dat os, operadores, t ipos de sent encias

4. Clases, obj et os, herencia, polim orfism o

5. Ot ros concept os. Paquet es, m odificadores de

acceso, st at ic, final, const ant es


M ÓD ULO B

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

Te m a 2 .1

Í n dice de la u n ida d:

1. I nt roducción

2. Caract eríst icas del lenguaj e

3. La plat aform a Java


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

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

 Arquit ect ura neut ra y port abilidad

 Alt as prest aciones

 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

Los creadores de Java se basaron en el lenguaj e de program ación C+ + , pero


elim inaron la m ayoría de sus com plej idades, para facilit ar su aprendizaj e, su lec-
t ura y el m ant enim ient o de los program as. A cont inuación se list an algunas de
las com plej idades que se elim inaron:

 No soport a t ipos de dat os: st ruct , union, y punt ero

 No soport a t ypedef ni # define

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

 No perm it e la sobrecarga de operadores.

 No soport a la herencia m últ iple.

 No soport a dest ruct ores.

 Posee una clase St ring, en vez del array de t ipo char[ ] finali-
zado con nulo.

 Cuent a con un sist em a aut om át ico para asignar y liberar


m em oria: el Garbage Collect or. Uno de los grandes problem as de
C+ + es la reserva y liberación de la m em oria de form a program át ica,
provocando indeseados m em ory leaks.

2 .2 D ist r ibu ido

Est á concebido para t rabaj ar en un ent orno conect ado en red.

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.

Perm it e m anipular con gran facilidad recursos vía URL.

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.

El com pilador de Java t raduce el código fuent e o program a j ava a un código


int erm edio ( byt ecode) o código m áquina sim ilar a las inst rucciones de ensam -
blador pero independient e de la m áquina física en la que se ej ecut a.

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) .

El t rat am ient o aut om át ico de la m em oria im pide poder sobrescribirla y co-


rrom per o m odificar ot ros dat os m ediant e punt eros.

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

Son independient es de que su ej ecución se realicen en est aciones de t rabaj o,


o en servidores, o en arquit ect uras físicas con el m ism o sist em a operat ivo o
sist em as het ereogéneos.

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

El código C+ + , a m enudo requiere una recom pilación y lincado com plet a si


cam bia una clase.

Java ut iliza una fase de linkado o ut ilización de clases en t iem po de ej ecución


en m odo dinám ico. Así las clases solo son ut ilizadas cuando son necesit adas.
Perm it e ut ilizar nuevas clases baj o dem anda, procedent es de fuent es diver-
sas, inclusive int ernet .

Para conseguir est o, Java em plea un m ét odo de int erfaces para evit ar est as
dependencias y recom pilaciones.

Adem ás, Java perm it e la indirección. Es decir, en lugar de indicarle de form a


direct a que ut ilice la clase X, se le puede indicar que busque ent re t odas las

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.

 Ej e m plo: Ej em plos de est as plat aform as son:

1. Plat aform as I nt el, RI SC, SPARC…

2. Plat aform as Win32, Linux, AI X, Solaris, HP- UX, z/ OS…

3. Plat aform as I BM, Sun, HP, Microsoft …

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.

Tiene dos com ponent es diferenciables:

 La m áquina virt ual Java ( JVM) o int érpret e de Java.

 La I nt erfaz de Program ación de Aplicaciones ( API ) . El API Ja-


va es un conj unt o de clases ya desarrolladas que ofrecen un gran
abanico de posibilidades al program ador. El conj unt o de las API s son
cont rolados por el grupo JCP ( Java Com ponent Process)

Exist en dist int as ediciones de la plat aform a Java:

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

En est a unidad se ha vist o el or ige n de l le n gu a j e de pr ogr a m a ción Ja va y la s


ca r a ct e r íst ica s que lo confor m a n:
- Orient ado a Obj et os
- Seguro
- Dist ribuido
- I nt erpret ado
- Robust o
- Seguro
- Arquit ect ura neut ra y port abilidad
- Alt as prest aciones
- Mult it hread
- Dinám ico

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:

1. Java Developm ent Kit

2. Cont enido y com ponent es del JDK

3. I DE o Ent orno int egrado de desarrollo


Un ida d 2 .2 En t or n o de D e sa r r ollo

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

Es el ent orno de desarrollo de referencia para program as desarrollados del lenguaj e


de program ación Java.

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:

 JDK 1.0: Aparece el 23 de Enero de 1996.

 JDK 1.1: Aparece el 19 de Febrero de 1997. Los cam bios que


incluye son:

56
Un ida d 2 .2 En t or n o de D e sa r r ollo

 Una reest ruct uración am plia del m odelo de event os


AWT ( Abst ract Windowing Toolkit ) .

 Clases int ernas ( inner clases) , JavaBeans, JDBC ( Java


Dat abase Connect ivit y) para la int egración con bases de
dat os, RMI ( Rem ot e Met hod I nvocat ion)

 SDK 1.2 : Aparece el 8 de diciem bre de 1998, con el nom bre en


clave Playground. Est a y las siguient es versiones fueron recogidas
baj o la denom inación Ja va 2 . Ot ras m ej oras añadidas incluían :

 La palabra reservada ( o keyword) st rict fp,

 Reflexión en la program ación ( Reflect ion API )

 La API gráfica, Swing, fue int egrada en las clases bási-


cas

 La m áquina virt ual ( JVM) de Sun fue equipada con un


com pilador JI T ( Just in Tim e) por prim era vez

 El Java Plug- in para ej ecución de Java en los navegado-


res.

 Java I DL, una im plem ent ación de I DL ( Lenguaj e de


Descripción de I nt erfaz) para la int eroperabilidad con
CORBA

 Colecciones ( Collect ions)

 SDK 1.3: Aparece el 8 de m ayo de 2000 con el nom bre clave


Kest rel. Los cam bios m ás not ables fueron:

 La inclusión de la m áquina virt ual de Hot Spot JVM ( la


JVM de Hot Spot fue lanzada inicialm ent e en abril de 1999,
para la JVM de J2SE 1.2)

 RMI fue cam biado para que se basara en CORBA

 JavaSound API

57
MÓDULO 2

 Se incluyó el Java Nam ing and Direct ory I nt erface


( JNDI ) en el paquet e de bibliot ecas principales ( ant erior-
m ent e disponible com o una ext ensión)

 Java Plat form Debugger Archit ect ure ( JPDA)

 SDK 1.4: Aparece el 6 de febrero de 2002 con el nom bre en


clave Merlin. Est e fue el prim er lanzam ient o de la plat aform a Java
desarrollado baj o el JCP com o JSR 59. Los cam bios m ás not ables
fueron:

 Palabra reservada o keyworkd assert

 Expresiones regulares m odeladas al est ilo de las expre-


siones regulares Perl

 Encadenación de excepciones Perm it e a una excepción


encapsular la excepción de baj o nivel original.

 Non- blocking NI O ( New I nput / Out put )

 Logging API

 API I / O para la lect ura y escrit ura de im ágenes en for-


m at os com o JPEG o PNG

 Parser XML int egrado y procesador XSLT ( JAXP)

 Seguridad int egrada y ext ensiones cript ográficas ( JCE,


JSSE, JAAS)

 Java Web St art incluido ( El prim er lanzam ient o ocurrió


en m arzo de 2001 para J2SE 1.3)

 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:

 Plant illas ( generics) que proporcionan conversion de t i-


pos ( t ype safet y) en t iem po de com pilación para coleccio-

58
Un ida d 2 .2 En t or n o de D e sa r r ollo

nes y elim ina la necesidad de la m ayoría de conversion de


t ipos ( t ype cast ing) .

 Met adat os, t am bién llam ados anot aciones, perm it e a


est ruct uras del lenguaj e com o las clases o los m ét odos,
ser et iquet ados con dat os adicionales, que puedan ser
procesados post eriorm ent e por ut ilidades de proceso de
m et adat os.

 Aut oboxing/ unboxing o conversiones aut om át icas ent re


t ipos prim it ivos ( com o los int ) y clases de wrapper para
t ipos prim it ivos ( com o los I nt eger) .

 Enum eraciones; la palabra reservada enum crea una


t ypesafe, list a ordenada de valores ( com o [Link],
[Link], et c.) . Ant eriorm ent e, est o solo podía ser lle-
vado a cabo por const ant es ent eras o clases const ruidas
m anualm ent e.

 Varargs o núm ero de argum ent os variable. El últ im o


parám et ro de un m ét odo puede ser declarado con el nom -
bre del t ipo seguido por t res punt os ( por ej em plo: void
drawt ext ( St ring... lines) ) . En la llam ada al m ét odo, puede
usarse cualquier núm ero de parám et ros de ese t ipo, que
serán alm acenados en un array para pasarlos al m ét odo.

 Bucle for m ej orado. La sint axis para el bucle for se ha


ext endido con una sint axis especial para it erar sobre cada
m iem bro de un array o sobre cualquier clase que im ple-
m ent e el int erfaz I t erable, com o la clase est ándar Collec-
t ion

 JDK 6.0: Aparece el 11 de diciem bre de 2006 con el nom bre


clave Must ang. Los cam bios m ás im port ant es int roducidos en est a
versión son:

 I ncluye un nuevo m arco de t rabaj o y API s que hacen


posible la com binación de Java con lenguaj es dinám icos
com o PHP, Pyt hon, Ruby y JavaScript .

59
MÓDULO 2

 I ncluye el m ot or Rhino, de Mozilla, una im plem ent ación


de Javascript en Java.

 I ncluye un client e com plet o de Servicios Web y soport a


las últ im as especificaciones para Servicios Web, com o
JAX- WS 2.0, JAXB 2.0, STAX y JAXP.

 Mej oras en la int erfaz gráfica y en el rendim ient o.

 I ncluye JavaDB ( el conocido Derby de Apache) .

2 .Con t e n ido y com pon e n t e s de l JD K

Ant es de em pezar a t rabaj ar con un I DE ( o Ent orno I nt egrado de Desarrollo) que


facilit a el desarrollo y ej ecución de los program as Java, vam os a t rabaj ar con el JDK
direct am ent e, para poder afianzar ciert os concept os im prescindibles.

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:

 PATH: Variable de ent orno del Sist em a Operat ivo en la que se


list an los direct orios donde se encuent ran los ej ecut ables de los pro-
gram as inst alados en una m áquina. En el caso del JDK, se encuen-
t ran en el direct orio bin de la inst alación.

 CLASSPATH: Variable de ent orno del Sist em a Operat ivo en la


que se le indican donde se van a encont rar las clases Java para la
com pilación y ej ecución de los program as. Est a variable solo será ne-
cesaria en la ej ecución de los program as Java. Desde el JDK 1.4.0 si
no hay variable CLASSPATH definida, el JDK asum e el . ( punt o) , es
decir, el direct orio desde donde ej ecut em os las herram ient as com o
punt o de part ida para buscar.

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

 / bin: las herram ient as y ut ilidades del JDK ( ej ecut ables) .

 / db: gest or de base de dat os ( nuevo de la versión 6.0) .

 / lib: las librerías del JDK, ut ilidadas por él m ism o.

 / include: los archivos C/ C+ + ut ilizados para const ruir la JVM.

 / dem o: una variedad de ej em plos escrit os en Java.

 / j re: la JVM sin herram ient as de desarrollo

 / [Link]: el código fuent e de las API s Java.

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.

 j [Link]: Com pilador de Java.

 j [Link]: I nt érpret e de Java ( JVM) .

 applet [Link]: I nt érpret e de applet s Java.

 j [Link]: Depurador de Java.

 j [Link]: Generador de docum ent ación.

 j [Link]: I nt egrador de C y C+ + ( JNI ) .

 j [Link]: Desensam blador.

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:

 Eclipse: Es Open Source. Es la herram ient a gráfica que ut iliza-


rem os durant e el curso. ht t p: / / [Link] ( ver la Unidad I nst a-

lación del JDK y Eclipse para su inst alación)

 Rat ional Applicat ion Developer: Es de I BM


ht t p: / / [Link] .com / soft ware/ awdt ools/ developer/ applicat ion y est á

const ruido sobre Eclipse.

 Net Beans I DE: Es Open Source. [Link]

 Sun Java St udio Creat or: Es de Sun

[Link]

 JBuilder: Es de Borland

ht t p: / / [Link] / product s/ j builder

 I nt elliJ I DEA: Es de j et Brains [Link]

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% .

Cream os un direct orio de t rabaj o donde guardar el program a Java.

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.

Y acept am os la creación de un fichero nuevo.

65
MÓDULO 2

Escribim os el código y salvam os los cam bios. Cerram os el Not epad.

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

Arrancar Eclipse, ej ecut ando c: \ eclipse3.5.2\ [Link]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

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

Crear un proyect o nuevo de nom bre Pract ica2.

Darle el nom bre y seleccionar Finish.

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

Y verem os com o se abre una consola con el result ado.

74
Tít u lo de u n ida d didá ct ica

En est e unidad hem os vist o la h ist or ia de l JD K desde su com ienzo hast a el m o-


m ent o act ual, viendo las dist int as posiblidades de desarrollo, vía el JDK direct a-
m ent e ( ent orno no gráfico) o vía los ent ornos gráficos o I DEs, t ales com o Eclipse,
Rat ional Applicat ion Developm ent ...

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:

1. Com ent arios

2. Punt os y com a, bloques y espacios en blanco

3. I dent ificadores

4. Variables

5. Tipos de dat os

6. Variables prim it ivas versus com plej as

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.

 /* * / Com ent ario de una o m ás líneas. Abarca desde el co-


m ienzo del com ent ario / * hast a el final del m ism o * /

 /* * * / Com ent ario de docum ent ación, ut ilizado por la


herram ient a j [Link]. Abarca desde el com ienzo del com ent ario
/ * * hast a el final del m ism o * / .

 Ej e m plo: A cont inuación se m uest ra un ej em plo con los dist int os t i-


pos de com ent arios m encionados ant er iorm ent e.

79
MÓDULO 2

2 . Pu n t os y com a , bloqu e s y e spa cios e n bla n co

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.

 Ej e m plo: A cont inuación se m uest ra un ej em plo con los dist int os t i-


pos de líneas sim ples de código m encionados ant eriorm ent e.

80
Un ida d 2 .3 Sin t a x is

Ot ro concept o im port ant e a t ener en cuent a en Java es el de bloque de código. Un


bloque es un conj unt o de sent encias ( de 0 a n) agrupadas ent re llaves ( { } ) . Los
bloques pueden est ar anidados.

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) .

 Ej e m plo: A cont inuación se m uest ra un ej em plo de bloques de códi-


go con una o varias sent encias y anidam ient os de bloques

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) .

 Ej e m plo: A cont inuación se m uest ran ej em plos donde los espacios


se ut ilizan com o separadores de elem ent os de la sint axis ( ent re int e i, y en-
t re int y j ent re ot ros) y com o m ej oras para el ent endim ient o del código:

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:

 El ident ificador debe em pezar por una let ra, subrayado ( _) o


dólar ( $) .

 Después del prim er caráct er se pueden usar núm eros.

 Java dist ingue ent re m ayúsculas y m inúsculas ( es “ case sensi-


t ive” ) . Los ident ificadores VARI ABLE y variable son dos ident ificado-
res dist int os.

 Nunca pueden coincidir con una ‘keyword’ o palabra reservada


del lenguaj e. A cont inuación se m uest ra un list ado de las keyword
m as ut ilizadas en Java y que por t ant o t ienen un significado especial
para el lenguaj e

82
Un ida d 2 .3 Sin t a x is

 Ej e m plo: Los siguient es ident ificadores son válidos: variable, $va-


riable2, CONSTANTE, nom bre_usuario, nom breUsuario, _variable_sist em a

 Ej e m plo: Los siguient es ident ificadores no son válidos: 1variable,


int , # variable, variable% Final

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.

4 . 1 D e cla r a ción de va r ia ble s

83
MÓDULO 2

La declaración es la sent encia m ediant e la cual se define una variable, asig-


nándola un t ipo y un ident ificador. El form at o es t ipo ide n t ifica dor ;

 Ej e m plo: int cont ador; / / t endrá el valor por defect o 0

Adicionalm ent e se le puede asignar un valor inicial m ediant e una asignación.


El form at o es t ipo ide n t ifica dor = va lor ;

 Ej e m plo: int cont ador = 10;

En el caso de que no se le asigna un valor, se inicializará con el valor por de-


fect o para ese t ipo ( verem os los dist int os t ipos y sus valores por defect o en el
punt o 5 Tipos de Dat os) .

4 . 2 Ám bit o de la s va r ia ble s

El ám bit o de una variable es la zona de código donde se puede referenciar di-


cha variable a t ravés de su ident ificador.

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:

 At ribut os ( o variables m iem bro de una clase) . Se pueden ut ili-


zar solam ent e asociados a la clase a la que pert enecen.

 Parám et ros de m ét odo. Se pueden ut ilizar solam ent e en el


m ét odo del cual son parám et ros.

 Variables locales: ( o de m ét odo) siem pre hay que inicializar-


las. Solam ent e puede accederse a ellas, dent ro del m ét odo donde
han sido declaradas.

 Variables de bloque: siem pre hay que inicializarlas. Solam ent e


puede accederse a ellas, dent ro del bloque donde han sido declara-
das.

84
Un ida d 2 .3 Sin t a x is

En el caso de que se declaren variables con el m ism o ident ificador en ám bit os


dist int os ( en el m ism o no se puede) , t ienen preferencia las del ám bit o m ás in-
t erno. Las variables de bloque t ienen preferencia frent e a las locales; est as t ie-
nen preferencia frent e a los parám et ros y por últ im o las de m enor preferencia
son los at ribut os.

 Ej e m plo: El siguient e ej em plo m uest ra el error de com pilación al in-


t ent ar referenciar una variable fuera de su ám bit o.

85
MÓDULO 2

 Ej e m plo: El siguient e ej em plo m uest ra cual es la variable ut ilizada,


según el ám bit o en el que est á declarada.

86
Un ida d 2 .3 Sin t a x is

5 . Tipos de da t os.

En Java exist en dos t ipos de dat os genéricos:

 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 .

 Tipos Com plej os o clases. Exist e un caso especial que es el de


enum eración: enum que aparece en Java JSE 5.0

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

 false: o falso. Es el valor por defect o.

 Ej e m plos: boolean swit ch1 = t rue;

boolean swit ch2; / / Su valor es false.

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

La ‘keyword’ ut ilizada para definir un t ipo de dat o caráct er es char y represent a


un caráct er UNI CODE, siendo su t am año de: 16 bit s ( 2 byt es) . Desde la versión
5.0 Java soport a UNI CODE 4.0 que define algunos caract eres que no caben en
16 bit s por lo que se necesit a un int para represent arlos ( o dos char dent ro de
un St ring) .

Sus posibles valores son:

 Un caráct er ent re com illas sim ples: ‘a’.

87
MÓDULO 2

 Un caráct er especial con \ por delant e: ‘\ n’, ‘\ t ’, et c.

 Un código UNI CODE: ‘\ uxxxx’ ( donde xxxx es un valor en


hexadecim al) .

 El valor por defect o es ‘\ u0000’ - > null. Not a: No es un espa-


cio en blanco.

 Ej e m plos: char let ra1 = ‘a’;

char let ra2 = ‘\ n’;

char let ra3 = ‘\ u0041’;

char let ra4; / / su valor es null

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:

 byt e: 8 bit s ( 1 byt e) , por t ant o el rango de valores es de - 128


a 127.

 short : 16 bit s ( 2 byt es) , por t ant o el rango de valores es de -


32768 a 32767

 int : 32 bit s ( 4 byt es) , por t ant o el rango de valores es de -


2147483468 a 2147483467

 long: 64 bit s ( 8 byt es) , por t ant o el rango de valores es de -


enorm e a enorm e

Sus posibles valores son:

88
Un ida d 2 .3 Sin t a x is

 Un valor decim al ent ero: 2 ( por defect o para t ipo int ) o 2L


( para t ipo long) .

 Un valor oct al: 077 ( com enzando por cero) .

 Un valor hexadecim al: 0xBAAC

 El valor por defect o es 0.

 Ej e m plos: byt e unByt e = 12;

short unShort ; / / t iene el valor 0

short unShort ; / / t iene el valor 0

int unI nt = - 199;

int ot roI nt = 065;

long unLong = 2; ( o long unLong = 2L; )

long ot roLong = 0xABCD;

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:

 float : 32 bit s ( 4 byt es) . Su precisión varía según la plat afor-


m a.

 double: 64 bit s ( 8 byt es) . Su precisión t am bién varía según la


plat aform a.

Sus posibles valores son:

 Un valor decim al ent ero: 2 ( por defect o para t ipo int ) .

 Un valor decim al real: 0.17 o 6.02E23 ( por defect o double) .

 Un valor decim al real: 0.17F o 0.17D ( redundant e) .

89
MÓDULO 2

 El valor por defect o es 0.0 ( cero) .

 Ej e m plos: float unFloat = 0.17F;

double unDouble; / / su valor es 0.0

double ot roDouble = - 12.01E30;

Se suelen ut ilizar en operaciones arim ét icas, et c.

5 .5 Tipo de da t o com ple j o

Las ‘keyword’ es el nom bre de la clase del obj et o que va a cont ener la variable.

Sus posibles valores son:

 Referencias a obj et os ( o inst ancias) en m em oria.

 El valor por defect o es null

 Ej e m plos: St ring unSt ring = new St ring( “ Hola” ) ;

St ring ot roSt ring; / / su valor es null

Se suelen ut ilizar para cont ener obj et os de nuest ro m undo real.

5 .6 Tipo de da t o e n u m e r a ción

La ‘keyword’ ut ilizada para definir un t ipo de dat o enum eración es enum .

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.

 Ej e m plo: enum Sem aforo { VERDE, AMBAR, ROJO }

Se suelen ut ilizar para t ener una list a de posibles valores asociados a una varia-
ble y solam ent e dichos valores.

5 .7 Ej e m plos de va r ia ble s con dist in t os t ipos de da t os

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

5 .8 Con ve r sion e s e n t r e t ipos

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:

 Prom oción arit m ét ica. Por ej em plo: de short a int y est e a


float .

 Asignación. Por ej em plo: long l = 42; / / un int se conviert e en


long

 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

 Cast ing. Por ej em plo: int i = ( int ) 42L / / un long se conviert e en


int . Ver la explicación de downcast ing.

Las conversiones im plícit as se resuelven en t iem po de com pilación. El upcast ing


( de un t ipo m ás pequeño convert irlo a uno m ás grande) se realiza im plícit am en-
t e.

El downcast ing ( de un t ipo m ás grande convert irlo a uno m ás pequeño) se reali-


zan explícit am ent e ( hay que indicar a que t ipo se quiere convert ir) y se resuelve
en t iem po de ej ecución. Not a: puede perderse inform ación, por lo que se obliga
a que sean realizados explícit am ent e.

6 . Va r ia ble s pr im it iva s ve r su s com ple j a s

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 unarios: pueden ser de t ipo prefij os o post fij os.


op ope r a dor u ope r a dor op.

 Ej e m plo: cont ador+ + ; / / operador post fij o de sum ar 1 a la propia


variable cont ador. La variable se queda con el valor sum ado

 Operadores binarios: ope r a dor op ope r a dor

 Ej e m plo: cont ador + 2; / / operador de sum ar un núm ero a una va-


riable. La variable en si m ism a no se queda con la sum 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.

Ot ra posible clasificación es por la nat uraleza del operador:

 Arit m ét icos

 Relacionales

 Condicionales

 De desplazam ient o

93
MÓDULO 2

 Lógicos

 De asignación

 Ot ros

7 .1 Ope r a dor e s a r it m é t icos

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:

 + : sum a dos operandos op1 + op2 . Hay que t ener cuidado


con las variables de t ipo St ring, porque en est e caso concat ena los
valores.

 - : rest a dos operandos op1 – op2

 * : m ult iplica dos operandos op1 * op2

 / : divide dos operandos op1 / op2

 % : calcula el rest o de la división op1 % op2

Los valores que devuelven est os operadores depende de los t ipos de los ope-
randos:

 int : cuando ninguno de los operandos es float , double o long.


En el caso del operador % siem pre devuelve un int .

 long: cuando ninguno de los operandos es float o double y hay


al m enos uno que es long.

 float : cuando ninguno de los operandos es double y hay al


m enos uno que es float .

 double: cuando al m enos hay uno de los operandos es double.

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

 + op: conviert en al operando en int en caso de que fuese byt e,


short o char.

 - op: cam bia el signo al operando.

 + + op: increm ent a al operando en 1 ( evaluando el operando


después de increm ent arse) .

 op+ + : increm ent a el operando en 1 ( evaluando el operando


ant es de increm ent arse) .

 - - op: decrem ent a el operando en 1 ( evaluando el operando


después de decrem ent arse) .

 op- - : decrem ent a el operando en 1 ( evaluando el operando


ant es de decrem ent arse) .

 Ej e m plo: En el ej em plo siguient e se m uest ran los operador es aut oin-


crem ent ales, diferenciando si se evalúa el valor de la variable ant es o des-
pués del increm ent o.

7 .2 Ope r a dor e s r e la cion a le s

Java t iene los siguient es operadores relacionales:

95
MÓDULO 2

 > : com para si un operando es m ayor que ot ro op1 > op2

 <: com para si un operando es m enor que ot ro op1 < op2

 ==: com para si un operando es igual que ot ro op1 = = op2 .


Cuidado con no confundir con el operador de asignación =

 ! = : com para si un operando es dist int o que ot ro op1 != op2

 > = : com para si un operando es m ayor o igual que ot ro op1


> = op2

 < = : com para si un operando es m enor o igual que ot ro op1


< = op2

Todos est os operandos devuelven un boolean indicando si cum ple la com para-
ción.

 Ej e m plo: if ( 5 < 7) { ... } / / La condición se ej ecut ará al devolver el


operador < un t rue o verdadero.

7 .3 Ope r a dor e s con dicion a le s

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:

 &&: AND lógico. Com prueba si am bos operandos son verdade-


ros op1 & & op2

 | | : OR lógico. Com prueba si uno de los dos operandos es ver-


dadero op1 | | op2

 ! : NOT lógico. Niega al operadondo !op

 Ej e m plo: if ( 5 < 7 && 4 < 8) { ... } / / La condición se ej ecut ará al


devolver el prim er operador < un t rue y el segundo operador < un t rue.

7 .4 Ope r a dor e s de de spla za m ie n t o

Java t iene los siguient es operadores de desplazam ient o:

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.

 Ej e m plo: En los siguient es ej em plos se m uest ran los operador es de


desplazam ient o

97
MÓDULO 2

7 .5 Ope r a dor e s lógicos

Java t iene los siguient es operadores lógicos:

 &: AND lógico a nivel de bit de los operandos ( el result ado es


uno si los bit s de am bos operandos son uno) op1 & op2 . Cuidado
con no confundir con el operador lógico &&

 | : OR lógico a nivel de bit de los operandos ( el result ado es


uno si alguno de los bit s de los operandos es uno) op1 | op2 . Cui-
dado con no confundir con el operador lógico | |

98
Un ida d 2 .3 Sin t a x is

 ^ : XOR lógico a nivel de bit de los operandos ( el result ado es


uno si alguno de los bit s de los operandos es uno, pero no los dos a
la vez) op1 ^ op2

 ~ : com plem ent o a nivel de bit del operando ( cam bia los ceros
por uno y viceversa) ~ op1

7 .6 Ope r a dor e s de a sign a ción

Java t iene los siguient es operadores de asignación:

 = : guarda el valor del segundo operando en el prim ero op1 =


op2

 + = : guarda la sum a de los dos operandos en el prim ero op1


+ = op2

 - = : guarda la rest a de los dos operandos en el prim ero op1 -


= op2

99
MÓDULO 2

 * = : guarda la m ult iplicación de los dos operandos en el pri-


m ero op1 * = op2

 / = , % = , &= , | = , ^ = , < < = , > > = , > > > = : Sim ilar al ant erior,
para cada uno de los operadores indicados.

7 .7 Ot r os ope r a dor e s

Exist en ot ros operadores en Java com o son:

 ?: : 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

 [ ] : ut ilizado para declarar, crear y acceder a arrays ( se verán


en la Unidad 3.1) .

 . : ut ilizado para acceder a los at ribut os y m ét odos de los ob-


j et os ( se verán en la Unidad 2.4) .

 ( parám et ros) : ut ilizado para pasar parám et ros a un m ét odo.

 ( t ipo) : ut ilizado para realizar cast ings ( conversiones de t ipo) .

 new : ut ilizado para crear obj et os nuevos ( se verá en la Uni-


dad 2.4) .

 inst anceof : ut ilizado para chequear si el prim er operando es


una inst ancia del t ipo indicado en el segundo operando.

8 . Se n t e n cia s de con t r ol de flu j o

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.

Exist en cuat ro t ipos de sent encias de cont rol de fluj o:

 Bucles: while, do- while, for y for/ in

100
Un ida d 2 .3 Sin t a x is

 Bifurcaciones: if- t hen- else y swit ch- case.

 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.

 De rupt ura: break, cont inue, label: y ret urn.

8 .1 Se n t e n cia s w h ile y do- w h ile

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.

for(inicialización; terminación; incremento)


{
sentencias;
}

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.

 Ej e m plo: se m uest ra un ej em plo de las sent encias de cont rol de t ipo


bucles vist as hast a el m om ent o

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…

for(inicialización: colección) Nota: Se usa “:” en vez de “;”.


{
sentencias;
}

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.

 Ej e m plo: se m uest ra un ej em plo de la sent encia de cont rol for/ in

public void list ar( int [ ] param )


{
for( int i: param )
Syst em .out .print ln( i) ;
}
Básicam ent e, se t rat a de una sim plificación a la hora de codificar. Es decir, al fi-
nal, el com pilador conviert e el código en una sent encia for convencional com o la
siguient e:

102
Un ida d 2 .3 Sin t a x is

public void list ar( int [ ] param )


{
int i = 0;
for( int j = 0; j < param .lengt h; j + + )
i = param [ j ] ;
Syst em .out .print ln( i) ;
}

8 .4 Se n t e n cia if– t h e n - e lse

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;
}

La sent encia if- t hen- else sería

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;
}

 Ej e m plo: se m uest ra un ej em plo de la sent encia de cont rol if anida-


das

103
MÓDULO 2

public void evaluar( int param )


{
if ( param < 5)
{
/ / ej ecut am os algo
} else if ( param > = 5 && param < 10) {
/ / ej ecut am os algo
} else {
/ / ej ecut am os algo
}
}

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;
}

 Ej e m plo: se m uest ra un ej em plo de la sent encia de cont rol swit ch

public void list ar( int param )


{
swit ch( param ) {
case 1:
/ / ej ecut ar algo
break;
case 2:
/ / ej ecut ar algo
break;
default :
/ / ej ecut ar algo
break;
}

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

Java proporciona las siguient es sent encias de rupt ura de ej ecución:

 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.

 ret urn: sirve para finalizar la ej ecución de un m ét odo ( y devol-


ver un valor en el caso de ser necesario) .

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.

public class Tem p


{
public st at ic void m ain( St ring[ ] args)
{
int x = 1;

106
Un ida d 2 .3 Sin t a x is

while( x< 10)


{
if( x> 3)
{
Syst em .out .print ln( " Hola" ) ;
}
}
}
}

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.

public class Tem p


{
public st at ic void m ain( St ring[ ] args)
{
int x = 1;
while( x< 10)
{
x = x + 1;
if( x> 3)
{
Syst em .out .print ln( " Hola" ) ;
}
}
}
}

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.

public class Tem p


{
public st at ic void m ain( St ring[ ] args)
{
int x = 5;
while( x> 1)
{
x = x - 1;
if( x< 3)
{
Syst em .out .print ln( " Hola" ) ;
}
}
}
}

Solución:
Com pila y saldría la palabra “ Hola” dos veces por pant alla.

107
MÓDULO 2

PRÁCTI CA D : Al siguient e program a Java le falt a un t rozo de código

public class Tem p


{
public st at ic void m ain( St ring[ ] args)
{
int x = 0;
int y = 0;
while( x< 5)
{
/ / TROZO DE CODI GO A SUSTI TUI R
Syst em .out .print ( x + “ ” + y + “ “ ) ;
x = x + 1;
}
}
}

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.

Vam os a realizar la práct ica con el con el JDK de Sun.

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

Cream os un direct orio de t rabaj o donde guardar el program a Java.

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.

Y acept am os la creación de un fichero nuevo.

111
MÓDULO 2

Escribim os el código y salvam os los cam bios. Cerram os el Not epad.


En la Unidad 2.4 verem os el concept o de clase y m ét odo m ain. Mient ras t ant o,
nuest ro código est ará incluido ent re las línea de código
pu blic cla ss Pract icaE
{
pu blic st a t ic void m ain( St ring[ ] args)
{
}
}

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

Ahora realizarem os la m ism a pract ica con Eclipse

Arrancar Eclipse, ej ecut ando c: \ eclipse3.5.2\ [Link]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

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

Crear un proyect o nuevo de nom bre Pract icaE

Darle el nom bre y seleccionar Finish.

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

Y verem os com o se abre una consola con el result ado.

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

Se han vist o los dist int os Tipos de da t os:


 t ipos pr im it ivos:
Lógico: boolean
Ca r á ct e r : char.
N ú m e r os e n t e r os: byt e, short , int y long.
N ú m e r os r e a le s: double y float .

 t ipos com ple j os o cla se s: viendo el t ipo especial enum

Se han vist o adem ás los dist int os t ipos de Ope r a dor e s:


Ar it m é t icos
Re la cion a le s
Condiciona le s
D e de spla za m ie n t o
Lógicos
D e a sign a ción .
Ot r os

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

Cla se s, obj e t os, h e r e n cia y


polim or fism o

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.

 Ej e m plo: La clase MiClase debe ir en un fichero: MiClase.j ava

La declaración de una clase Java se realiza m ediant e la keyword: class seguida de


su nom bre.

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:

m odifica dor _ a cce so cla ss n om br e _ cla se


{
}

 Ej e m plo: public class MiClase


{
}

1 . 1 At r ibu t os y m é t odos

La im plem ent ación de una clase consist e en una serie de:

 At ribut os o dat os.

 Mét odos u operaciones.

125
MÓDULO 2

La sint axis de la declaración de un at ribut o es la siguient e:

m odifica dor _ a cce so t ipo n om br e ; / / sin in icia liza ción


m odifica dor _ a cce so t ipo n om br e = va lor _ in icia l;

 Ej e m plo: privat e boolean sw = t rue;

privat e int i; / / sin inicializar. Su valor por defect o es 0

La sint axis de la declaración de un m ét odo es la siguient e:

m odifica dor _ a cce so t ipo_ r e t or n o nom br e ( [ t ipo pa r a m e t r o,..] )


{
}

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:

public int sum a( int param 1, int param 2)

{
ret urn param 1 + param 2;
}

Java SE 5.0 añade una novedad a la definición de un m ét odo m ediant e la ca-


ract eríst ica: varargs.

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:

public int sum a( int … param s)


{
int acum = 0;
for( int num : param s) { / / He usado t am bién el nuevo for/ in
acum = acum + num ;
}
ret urn acum ;
}

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

 Solo puede usarse una vez por m ét odo.

 Siem pre debe ser el últ im o parám et ro de t odos en la defini-


ción.

 Ej e m plo:

public int m et odo( St ring param 1, int param 2, int … param s)


{
}
/ / en est e ej em plo, siem pre se recibirá param 1 y param 2, m ient ras
que param s será una arr ay de un t am año indet erm inado hast a su
ej ecución.

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.

Su declaración es idént ica a la de los m ét odos convencionales con dos salve-


dades:

 No t ienen t ipo de ret orno.

 Se t iene que llam ar igual que la clase.

La sint axis de la declaración de un const ruct or es la siguient e:

m odifica dor _ a cce so nom br e ( [ t ipo pa r a m e t r o,..] )


{
}

 Ej e m plo:

public MiClase( int param 1, boolean param 2)


{

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( )
{
}

public MiClase( int param 1, boolean param 2)


{
}

Java SE 5.0 añade una novedad al respect o. Se perm it e la sobrecarga de m é-


t odos cam biando t am bién el t ipo de ret orno, pero siem pre que:

 El m ét odo que se est á sobrecargando sea de una clase padre


( de la que heredam os direct a o indirect am ent e) .

 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) .

Por t ant o, no es válido para t ipos prim it ivos.

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

 El nom bre de las clases com enzará con m ayúsculas

 Ej e m plo: MiClase, St ring, Circulo, Cuent a, Cuent aCorrient e

 El nom bre de los at ribut os com enzará con m inúsculas

 Ej e m plo: cont ador, sw, i, segundoCont ador

 El nom bre de los m ét odos com enzará con m inúsculas ( a ex-


cepción de los const ruct ores)

 Ej e m plo: ingresar, m iMet odo, sum ar

 Ej e m plo: a cont inuación se m uest ra un ej em plo de una clase

com plet a, con sus m ét odos y at ribut os

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.

El t ipo de un obj et o es la clase de la que se ha inst anciado o creado.

La declaración de un obj et o es idént ica a la declaración de una variable de t ipo pri-


m it ivo:

t ipo ide nt ifica dor ;

 Ej e m plo: Cuent a m iCuent a;

El valor por defect o de un obj et o sin inicializar es: null.

La inicialización de un obj et o si que es algo dist int a a la inicialización de las varia-


bles de t ipo prim it ivo:

 Se ut iliza el operador new.

130
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

 Se llam a a un const ruct or de la clase de la que querem os ins-


t anciar.

La sint axis de la inicialización sería la siguient e:

t ipo ide nt ifica dor = n e w t ipo( [ pa r a m e t r o,…] ) ;

 Ej e m plo: Cuent a m iCuent a = new Cuent a( 1200.75) ;

2 .1 Va r ia ble s pr im it iva s ve r su s va r ia ble s com ple j a s

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

El t rabaj o con un obj et o consist e en acceder:

 A sus at ribut os.

 A sus m ét odos.

En am bos casos ut ilizarem os el operador . ( punt o) .

La sint axis para acceder a un at ribut o de un obj et o es la siguient e:

obj e t o.a t r ibu t o

 Ej e m plo: m iCuent [Link] = 0;

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:

obj e t o.m e t odo( [ pa r a m e t r o,..] )

132
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: m iCuent [Link] egro( 13.7) ;

La posibilidad de acceso a un at ribut o o a un m ét odo de un obj et o dependerá


del m odificador de acceso que exist a en su definición.

 Ej e m plo: part iendo de la siguient e definición de la clase cuent a

Podem os t ener el siguient e código que ut iliza la clase Cuent a:

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:

St ring s1 = new St ring( “ abc" ) ;


char c = s1.t oUpperCase( ) .charAt ( 0) ;

Equivaldría a:

St ring s1 = new St ring( “ abc" ) ;


St ring s2 = s1.t oUpperCase( ) ;
char c = [Link] ( 0) ;

2 .3 El m é t odo m a in y la cla se “t r u co”

Exist e un m ét odo especial en Java llam ado m ain cuya sint axis es la siguient e:

pu blic st a t ic void m a in ( St r in g[ ] a r gs)

Es el m ét odo donde com ienza la ej ecución de un program a Java. Por lo t ant o


es el m ét odo ej ecut ado cuando desde la JDK de Sun ej ecut am os j ava Nom -
breDeClase o desde Eclipse ej ecut am os Run as Java Applicat ion.

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+ + ) .

En Java lo que exist e es un proceso aut om át ico que se ej ecut a en la JVM a la


vez que nuest ra aplicación y que se encarga de buscar t odos aquellos obj et os
en m em oria no ut ilizados y lim piarlos. Est e proceso se llam a Garbage Collec-
t or.

¿Cóm o sabe el Garbage Collect or que un obj et o ya no est á siendo ut ilizado


por la aplicación y que por t ant o puede ser elim inado? Porque no est á referen-
ciado por ninguna variable.

Exist en t res m ot ivos por los que una variable dej a de referenciar a un obj et o:

 Se iguala a null. Dej a de referenciar a un obj et o.

 Se iguala a ot ro obj et o. Por lo que el obj et o al que referencia-


ba puede ser elim inado.

 Se t erm ina su ám bit o. Por lo que la variable dej a de t ener va-


lidez.

 Ej e m plo: En cuant o pun es igualado a null, dej a de referenciar al ob-


j et o creado vía new. Pero ¡oj o! , el obj et o al que referenciaba pun no se pue-
de lim piar porque sigue referenciado por cent ro desde un at ribut o del obj et o
referenciado por

135
MÓDULO 2

cir.

3 . Re la ción de h e r e n cia

Se basa en la exist encia de relaciones de generalización/ especialización ent re cla-


ses.

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.

Una clase puede m odificar los at ribut os y m ét odos heredados.

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

Una clase puede ser superclase y subclase al m ism o t iem po.

Exist en dist int os t ipos de herencia:

 Sim ple. Solo puede heredar de una clase.

 Múlt iple ( no soport ada en Java)

 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:

m odifica dor _ a cce so cla ss n om _ cla se e x t e n ds n om _ cla se


{
}

 Ej e m plo:

public class MiClase ext ends Ot raClase


{
}

 Ej e m plo:

137
MÓDULO 2

3 .1 La cla se Obj e ct

En Java t odas las clases heredan de ot ra clase:

 Si lo especificam os en el código con la keyword ext ends, nues-


t ra clase heredará de la clase especificada.

138
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

 Si no lo especificam os en el código, el com pilador hace que


nuest ra clase herede de la clase Obj ect ( raíz de la j erarquía de clases
en Java) .

 Ej e m plo:

public class MiClase ext ends Obj ect


{
/ / Es redundant e escribirlo puest o que el
/ / com pilador lo hará por nosot ros.
}

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 St ring t oSt ring( ) ; / / Devuelve la represent ación lit eral de


un obj et o.

 public Class get Class( ) ; / / Devuelve la clase de la cual es ins-


t ancia el obj et o.

 public int hashCode( ) ; / / Devuelve un ident ificador unívoco


después de aplicarle un algorit m o hash.

 public Obj ect clone( ) ; / / Devuelve una copia del obj et o.

 public void finalize( ) ; / / Un m ét odo llam ado por el Garbage Co-


llect or.

 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:

 UpCast ing: conversión de un t ipo en ot ro superior en la j erar-


quía de clases. No hace falt a especificarlo.

 DownCast ing: conversión de un t ipo en ot ro inferior en la j e-


rarquía de clases.

Se especifica precediendo al obj et o a convert ir con el nuevo t ipo ent re parén-


t esis.

 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

3 .3 Sobr e scr ibir u n m é t odo

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:

 El nom bre ha de ser el m ism o.

 Los parám et ros y t ipo de ret orno han de ser los m ism os.

 El m odificador de acceso no puede ser m ás rest rict ivo.

Al ej ecut ar un m ét odo, se busca su im plem ent ación de abaj o hacia arriba en la


j erarquía de clases.

 Ej e m plo:

141
MÓDULO 2

 Ej e m plo: de sobrescribir un m ét odo

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

3 .4 Sobr e ca r ga r ve r su s Sobr e scr ibir

Sobrecargar un m ét odo es un concept o dist int o a sobrescribir un m ét odo.

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:

 El nom bre ha de ser el m ism o.

 El t ipo de ret orno ha de ser el m ism o.

 Los parám et ros t ienen que ser dist int os.

 El m odificador de acceso puede ser dist int o.

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: Verem os la sobrecarga de un m ét odo que recibe un float y un dou-


ble:

public void m iMet odo( float param ) { }


m iObj et o.m iMet odo( 1.3) ; / / llam ará sin problem as al m ét odo ant erior

Sobrecargam os el m ét odo para que reciba un double.


public void m iMet odo( double param ) { }
m iObj et o.m iMet odo( 1.3) ; / / ya no llam a al m ét odo con float .

Recordem os que un núm ero real por defect o es double.


Para seguir llam ando al m ét odo con float debem os especificarlo im -
plícit am ent e:
m iObj et o.m iMet odo( 1.3F) ; o m iObj et o.m iMet odo( ( float ) 1.3) ;

 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.

No debem os usar herencia cuando no se cum pla la regla: Es- un ( I s- 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 y t h is son dos keywords de Java.

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.

Cuando el at ribut o o m ét odo al que accedem os no ha sido sobrescrit o en la


subclase, el uso de super es redundant e. Los const ruct ores de las subclases
incluyen una llam ada a super( ) si no exist e un super o un t his.

 Ej e m plo: Ej em plo de acceso a un at ribut o.

146
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: Ej em plo de acceso a un const ruct or

 Ej e m plo: Ej em plo de acceso a un m ét odo

147
MÓDULO 2

t h is es una referencia al obj et o act ual.

t his se ut iliza para acceder desde un obj et o a at ribut os y m ét odos ( incluyendo


const ruct ores) del propio obj et o.

Exist en dos ocasiones en las que su uso no es redundant e:

 Acceso a un const ruct or desde ot ro const ruct or.

 Acceso a un at ribut o desde un m ét odo donde hay definida una


variable local con el m ism o nom bre que el at ribut o.

 Ej e m plo: Ej em plo de acceso a un at ribut o

 Ej e m plo: Ej em plo de acceso a un const ruct or

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

Es ot ro de los paradigm as de la Orient ación a Obj et os.

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.

 Ej e m plo: Obj ect o = new St ring( “ Hola” ) ;

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.

Algunos usos habit uales del polim orfism o en Java son:

 I m plem ent ación de colecciones genéricas.

 I m plem ent ación de m ét odos genéricos.

 Ej e m plo: Ej em plo de colección genérica.

150
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

Not a: Los arr ays se verán m as en det alle en la Unidad 3.1

 Ej e m plo: Ej em plo de m ét odo genérico.

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:

 Cam bio en las especificaciones.

151
MÓDULO 2

 Rediseño

 Ej e m plo: la clase Mat em at ico seguirá funcionando aunque desarrolle-

m os nuevas figuras com o Cuadrado, Am eba, et c…. siem pre y cuando


hereden de la superclase Figura.

 Ej e m plo: Supongam os que necesit am os im plem ent ar una clase para

alm acenar dos lobos en nuest ro proyect o

Ahora nos diden que en el m ism o proyect o t am bién necesit am os alm a-


cenar dos gat os. Tenem os dist int as alt ernat ivas:

• Crear una clase nueva MiList a2

• Añadir a MiList a dos at ribut os nuevos del t opo Gat o y ot ro m ét odo


add( ) que reciba un Gat 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

Hablando con un com pañero de ot ro proyect o, nos com ent a que en su


proyect o necesit a im plem ent ar una clas par alm acenar dos Triángulos.

Le podríam os pasar nuest ra clase si la hubiéram os hecho m ás genéri-


ca. ¿No heredaba en Java t odo de la clase Obj ect ?

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:

m odifica dor _ a cce so a bst r a ct cla ss n om _ cla se


{
}

 Ej e m plo:

public abst ract class MiClase


{
}

 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:

m odif_ a cce so a bst r a ct t ipo_ r e t or n o n om br e ( [ t ipo pa r a m ,…] ) ;

155
MÓDULO 2

 Ej e m plo: public abst ract void m iMet odo( ) ;

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:

4 .3 Ej e m plo pr á ct ico de Polim or fism o

Part im os del diseño de anim ales vist o ant eriorm ent e.

156
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

¿Qué ocurre si querem os reusar el diseño para un aplicat ivo de Tienda de


Mascot as? Una prim era aproxim ación sería añadir a la clase Anim al t odos los
m ét odos específicos de una m ascot a com o son j ugar, vacunar.

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.

Ot ro inconvenient e m uy im port ant e es que no t enem os posibilidad de usar el


polim orfism o con las m ascot as.

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:

m odifica dor _ a cce so in t e r fa ce nom br e _ in t e r fa ce


{
}

 Ej e m plo:

public int erface MiI nt erface

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:

m odif_ a cce so a bst r a ct t ipo_ r e t or n o n om br e ( [ t ipo pa r a m ,…] ) ;

 Ej e m plo: public abst ract void m iMet odo( ) ;

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.

La sint axis de la declaración de la herencia de un int erface es la siguient e:

m odif_ a cce so cla ss nom _ cla se im ple m e n t s n om _ in t e r fa ce [ ,n om _ int ….]


{
}

 Ej e m plo:

public class MiClase im plem ent s MiI nt erface


{
}

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.

Un int erface puede t am bién definir const ant es.

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

dicho int erface.

 Ej e m plo: Est e sería el diseño final de la t ienda de m ascot as

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:

 Un int erface no puede im plem ent ar ningún m ét odo.

 Una clase puede im plem ent ar n int erfaces pero solo una clase.

 Un int erface no form a part e de la j erarquía de clases. Clases


dispares pueden im plem ent ar el m ism o int erface.

 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.

5 .2 Cla se s, Su bcla se s, Cla se s a bst r a ct a s e I n t e r fa ce s

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

 Harem os una clase que no herede de nadie cuando la clase no


pase la prueba de Es- Un. Verem os por ej em plo, si un Circulo Es- Una
Figura ( por lo que heredará de Figura) , pero que Figura no es un Cir-
culo, ni un Triangulo .... por lo que no heredará de nadie.

 Harem os una subclase cuando necesit em os hacer una especia-


lización de la superclase m ediant e sobreescrit ura o añadiendo nuevos
m ét odos.

 Harem os una clase abst ract a cuando queram os definir un gru-


po genérico de clases y adem ás t engam os algunos m ét odos im ple-
m ent ados que reut ilizar. Tam bién cuando no queram os que nadie
inst ancie dicha clase.

 Harem os un int erface cuando queram os definir un grupo gené-


rico de clases y no t engam os m ét odos im plem ent ados que reut ilizar.
O cuando nos veam os forzados por la falt a de herencia m últ iple en
Java.

PRÁCTI CA A: I dent ificar si hay algo m al en el siguient e código:

165
MÓDULO 2

Solución:

Est aba m al. No habíam os creado el obj et o r.

PRÁCTI CA B: I dent ificar si hay algo m al en est e código:

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

PRÁCTI CA C: I dent ificar si hay algo m al en est e código,suponiendo que la clase


Rect angulo exist e.

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

PRÁCTI CA D : Basándonos en el siguient e ej em plo

Cont est a a las siguient es pregunt as:

1. ¿Cuánt os at ribut os t iene la clase Ciruj ano?: __.


2. ¿Cuánt os at ribut os t iene la clase MedicoDeCabecera?: __.
3. ¿Cuánt os m ét odos t iene la clase Medico?: __.
4. ¿Cuánt os m ét odos t iene la clase Ciruj ano?: __.
5. ¿Cuánt os m ét odos t iene la clase MedicoDeCabecera?: __.
6. ¿Puede un MedicoDeCabecera t rat ar pacient es?: ___.
7. ¿Puede un MedicoDeCabecera hacer incisiones?: ___.

Solución:

1. ¿Cuánt os at ribut os t iene la clase Ciruj ano?: _1 _.


2. ¿Cuánt os at ribut os t iene la clase MedicoDeCabecera?: _2 _.
3. ¿Cuánt os m ét odos t iene la clase Medico?: _1 _.
4. ¿Cuánt os m ét odos t iene la clase Ciruj ano?: _2 _.
5. ¿Cuánt os m ét odos t iene la clase MedicoDeCabecera?: _2 _.
6. ¿Puede un MedicoDeCabecera t rat ar pacient es?: _SI __.
7. ¿Puede un MedicoDeCabecera hacer incisiones?: _N O__.

PRÁCTI CA E: Desarrollar el siguient e program a t ant o en la JDK de Sun com o en


Eclipse. Hay que t ener en cuent a que hay que desarrollar los siguient es elem ent os:

168
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

Desarrollar una clase llam ada Punt o que:



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.

Desarrollar una clase llam ada Circulo que:



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.

Desarrollar una clase llam ada Triangulo que:



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.

Solución con la JDK De Sun

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% .

Cream os un direct orio de t rabaj o donde guardar el program a Java.

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

Y acept am os la creación de un fichero nuevo.

171
MÓDULO 2

Escribim os el código y salvam os los cam bios. Cerram os el Not epad.

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

Todavía no podem os ej ecut ar ningún program a Java, porque no t enem os un m ét o-


do m ain al que llam ar y nos falt an por desarrollar m ás clases.

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.

La salida por consola queda com o sigue:

Ahora realizarem os la m ism a pract ica con Eclipse

Arrancar Eclipse, ej ecut ando c: \ eclipse3.5.2\ [Link]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

177
MÓDULO 2

Aparecerá la pant alla para em pezar a t rabaj ar.

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

Crear un proyect o nuevo de nom bre Pract icaE

Darle el nom bre y seleccionar Finish.

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

Hacer lo m ism o para las clases Circulo y Triangulo.

182
Un ida d 2 .4 Cla se s Obj e t os H e r e n cia y Polim or fism o

Cont inuación de la im plem ent ación de la clase Triangulo

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

Y verem os com o se abre una consola con el result ado.

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.

- Todas las clases por defect o heredan de la clase


Obj e ct
- Se puede generalizar o especializar ent re las su-
perclases y subclases m ediant e los ca st ing.
- Se pueden reim plem ent ar m ét odos heredados m e-
diant e la sobr e scr it u r a de m é t odos.

 La r e la ción de 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.
- Ut ilización de cla se s a bst r a ct a s, o genéricas que
no pueden ser inst anciadas.
- Si se ut ilizan m é t odos a bst r a ct os, la clase debe
ser ident ificada com o abst ract a, y alguna de las
subclases t iene que im plem ent ar dichos m ét odos.

 Los I n t e r fa ce s, que proporcionan el API que cualquier clase que im ple-


m ent e dicho int erface debe de desarrollar.

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

3. Mét odos est át icos

4. final

5. Paso por valor o por referencia

6. Cosas que ocurren por defect o

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 ;

 Ej e m plo: es.j [Link].m ent [Link];

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.

 Se suele ut ilizar el nom bre de dom inio de la em presa,


organización o inst it ución invert ido para int ent ar asegurar nom bres
unívocos y evit ar colisiones.

 Ej e m plos: com .ibm .t est

es.m iem [Link] ilidades

[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:

im por t n om br e _ de l_ pa qu e t e .nom br e _ de _ la _ cla se ;


im por t n om br e _ de l_ pa qu e t e .* ;

 Ej e m plos: es.j [Link].m ent [Link];

es.j [Link].m ent [Link].* ;

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 debaj o de est e, com o es el caso de la clase


es.j [Link].m ent [Link]

Por t ant o para ut ilizar una clase t enem os t res alt ernat ivas:

 Ut ilizar su nom bre com plet o: paquet e + clase ( unidos


m ediant e el punt o)

 I m port ar la clase: im port paquet e + clase ( unidos m ediant e el


punt o)

 I m port ar el paquet e com plet o: im port paquet e + * ( unidos


m ediant e el punt o)

Un im port no im plica la inclusión de código com o ocurre en un # include de C+ + .


Sim plem ent e son vías de acceso para buscar el código. El código se va cargando
según se necesit a.

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:

package es.j [Link].m ent [Link];


public class Circulo { ...}

Para com pilar una clase que pert enece a un paquet e t enem os dist int as opciones:

 Desde c: \ t rabaj o ej ecut am os: j avac


es\ j ava\ aula\ m ent or\ figuras\ Circulo.j ava

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

Para ej ecut ar una clase solo t enem os una opción posible:

 Desde cualquier punt o del sist em a ej ecut am os: j ava


es.j [Link].m ent [Link].j ava. Not a: el direct orio
c: \ t rabaj o debe est ar en el CLASSPATH ( o si est am os en el direct orio
c: \ t rabaj o, con que est uviera el . en el CLASSPATH t am bién sería
suficient e)

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

 Ej e m plo: Las clases est án en el m ism o paquet e

1 . 1 Ca r a ct e r íst ica s de los Pa qu e t e s Ja va

197
MÓDULO 2

Las clases básicas Syst em , St ring, Mat h, et c… pert enecen al paquet e


j [Link].* . ( las verem os con m ás det alle en la Unidad 2.6) .

¿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:

im por t j a va .la ng.* ;

Aunque no es frecuent e, es posible que provoquem os am bigüedades en el uso


de los im port s, y por t ant o errores de com pilación.

¿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’.

Est o no t endría que ser un problem a en la m ayoría de los casos porque


siem pre deberíam os ubicar las clase en paquet es Java de form a explícit a.

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.

2 . M odifica dor e s de a cce so

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

 public - > Público

 prot ect ed - > Prot egido.

 - > Paquet e, ident ificado por la ausencia de keyword.

 privat e - > Privado.

La siguient e t abla m uest ra a qué se puede acceder desde una clase dada:

Los m odificadores de acceso se ut ilizan en las definiciones de:

 Clases e int erfaces: solo se puede ut ilizar public y package ( o


paquet e en cast ellano)

 At ribut os: se perm it en cualquiera de los cuat ro.

 Mét odos: se perm it en cualquiera de los cuat ro.

 Ej e m plo: Ej em plo de m odificadores de acceso con at ribut os.

202
Un ida d 2 .5 Ot r os con ce pt os

 Ej e m plo: Ej em plo de m odificadores de acceso con m ét odos.

 Ej e m plo: Ej em plo del m odificador de acceso paquet e ut ilizado con

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:

 Su m ét odo round recibe un núm ero decim al y lo devuelve


redondeado.

 Su m ét odo sqrt recibe un núm ero y devuelve su raiz cuadrada.

 Su m ét odo m in recibe dos núm eros y devuelve el m enor.

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:

m odifi_ a cce so st a t ic t ipo_ r e t or no nom br e ( [ t ipo pa r a m e t r o,..] )


{
}

 Ej e m plo:

public st at ic void m iMet odo( )


{
}

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.

 Ej e m plo: int a = Mat h.m in( 10,17) ;

Mient ras que los m ét odos convencionales requieren de un obj et o:


St ring s = new St ring( “ Hola” ) ;
int a = [Link]( ‘a’) ;

No se puede realizar la siguient e llam ada


int a = St [Link]( ‘a’) ;

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:

pu blic st a t ic void m a in ( St r in g[ ] a r gs) { … }

Hay ciert as reglas que hay que t ener en cuent a en el uso de m ét odos est át icos:

 Un m ét odo est át ico j am ás puede acceder a un at ribut o de


inst ancia ( no est át ico) .

 Un m ét odo est át ico j am ás puede acceder a un m ét odo de


inst ancia ( no est át ico) .

 Pero desde un m ét odo convencional si que se puede acceder a


at ribut os y m ét odos est át icos.

205
MÓDULO 2

 Ej e m plo: Ut ilización de at ribut os desde un m ét odo est át ico

 Ej e m plo: Ut ilización de m ét odos est át icos desde un m ét odo est át ico

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:

m odifi_ a cce so st a t ic t ipo n om br e [ = va lor _ in icia l] ;

 Ej e m plo: public st at ic int cont ador = 0;

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:

 Se pueda inst anciar un obj et o de dicha clase.

 Se pueda ej ecut ar un m ét odo est át ico de dicha clase.

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

3 .2 Bloqu e s de código e st á t icos

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) .

Para definir un bloque de código est át ico ut ilizam os la keyword: st a t ic. La


sint axis de la declaración es la siguient e:

st a t ic { …. }

 Ej e m plo: st at ic { Syst em .out .print ln( “ Hola” ) ; }

 Ej e m plo:

208
Un ida d 2 .5 Ot r os con ce pt os

4 . fin a l

fina l es una keyword que m odifica el funcionam ient o de:

 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

m odifica dor _ a cce so fina l cla ss n om br e _ cla se


{
}

 Ej e m plo:

public final class MiClase


{
}

 Ej e m plo: Herencia de una clase final

4 .2 M é t odos fin a le s

Definiendo un m ét odo com o final conseguim os que ninguna ot ra clase pueda


sobrescribirlo.

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:

m odif_ a cce so fina l t ipo_ r e t or no n om br e ( [ t ipo pa r a m ,..] )


{
}

 Ej e m plo:

public final int sum a( int param 1, int param 2)


{
ret urn param 1 + param 2;
}

 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:

m odifica dor _ a cce so fina l t ipo nom br e [ = va lor _ in icia l] ;

 Ej e m plo:

prot ect ed final boolean sw = t rue;


public final int i;

 Ej e m plo:

211
MÓDULO 2

4 .3 D e fin ición de con st a n t e s

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:

m odifica dor _ a cce so st a t ic fina l t ipo n om br e = va lor ;

 Ej e m plo: public st at ic final double PI = 3.141592653589;

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.

 Ej e m plo: Const ant es ya exist ent es en las clases básicas:

j [Link] [Link] : el núm ero PI .

j [Link] h.E: el núm ero E.

j [Link] ant [Link]: cent rado.

j [Link] .event .KeyEvent .VK_ENTER: t ecla de int ro.

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.

La sint axis de la declaración es la siguient e:

im por t st a t ic n om br e de lpa qu e t e .n om br e de la cla se .m ie m br o;


im por t st a t ic n om br e de lpa qu e t e .n om br e de la cla se .* ;

 Ej e m plo: im port st at ic j [Link] em .out ;

 Ej e m plo:

213
MÓDULO 2

4 . Pa so por va lor o por r e fe r e n cia

En program ación exist en dos form as de pasar parám et ros:

 Por valor ( o copia) : se realiza una copia del parám et ro.

 Por referencia: se pasa una referencia al parám et ro.

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

5 . Cosa s qu e ocu r r e n por de fe ct o

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:

 Las clases que no im port an explícit am ent e el paquet e j a-


[Link].* lo hacen de form a im plícit a:

im port j [Link].* ;

 Las clases que no heredan explícit am ent e de ot ra clase, here-


dan im plícit am ent e de j [Link] ect :

public class MiClase ext ends Obj ect

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( ) ;
}

 Los const ruct ores que no llam en a ot ro const ruct or de la m is-


m a clase o del padre, cont ienen una llam ada im plícit a al del padr e
sin parám et ros:

public MiClase( int param )


{
super( ) ;
t [Link] = param ;
}

 Siem pre que se haga referencia un at ribut o o m ét odo de la


propia clase, im plícit am ent e se añade t his:

t his.m iMet odo( ) ;

 Todos los m ét odos de un int erfaz son definidos com o abst ract
de form a im plícit a:

public abst ract int m iMet odo( ) ;

 Todos los at ribut os son inicializados a su valor por defect o si


no se inicializan de form a explícit a. Cuidado, que no ocurre lo m ism o
con las variables locales.

 Si no se especifica ningún package, la clase pert enece al pac-


kage por defect o.

 Si no se especifica ningún m odificador de acceso al definir una


clase, at ribut o o m ét odo, se le aplica el m odificador package.

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

PRÁCTI CA A: ¿Cuál de est os program as com pila sin errores?

Solución:

PRÁCTI CA B: ¿Cuál de est os program as com pila sin errores?

219
MÓDULO 2

Solución:

PRÁCTI CA C: ¿Cuál de est os program as com pila sin errores?

Solución:

220
Un ida d 2 .5 Ot r os con ce pt os

PRÁCTI CA D : Desarrollar, t ant o en la JDK de Sun com o en Eclipse, el com ienzo de


un j uego de rol donde t engam os dist int as criat uras: Elfos, Trolls y Enanos. I nvent ad
una serie de at ribut os ( ent re ellos la fuerza) , const ruct ores y m ét odos para t odos
ellos. Deberán est ar en el paquet e es.j [Link].m ent [Link] [Link] uras.

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.

Solución con la JDK De Sun

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

Cream os un direct orio de t rabaj o donde guardar el program a Java.

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

Y acept am os la creación de un fichero nuevo.

Escribim os el código y salvam os los cam bios. Cerram os el Not epad.

Hacem os el m ism o proceso para la clase Troll.j ava

224
Un ida d 2 .5 Ot r os con ce pt os

Para la clase Enano.j ava

Y para la clase Elfo.j ava

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.

A cont inuación m ost ram os un posible orden de com pilación:

Vem os com o han quedado las clases com piladas en cada uno de los direct orios

227
MÓDULO 2

Ej ecut am os la clase Pract icaD y vem os lo que sale por la consola

Ahora realizarem os la m ism a práct ica con Eclipse

Arrancar Eclipse, ej ecut ando c: \ eclipse3.5.2\ [Link]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

228
Un ida d 2 .5 Ot r os con ce pt os

Aparecerá la pant alla para em pezar a t rabaj ar.

Verificar que la perspect iva Java est á abiert a, y sino cam biar a ella

229
MÓDULO 2

Crear un proyect o nuevo de nom bre Pract icaD

Darle el nom bre y seleccionar Finish.

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

Vem os la salida por la consola

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.

 Cla se s fin a le s: son clases de la que nadie m ás puede heredar.


MÓDULO 2 PROGRAMACIÓN JAVA

 M é t odos fin a le s: son m ét odos que no pueden ser sobreescrit os.


 At r ibu t os fin a le s: son at ribut os que una vez definidos no se puede cam biar su
valor. Si se ut ilizan conj unt am ent e con la keyword st a t ic, se conviert en en cons-
t ant es a nivel de clase.
M ÓD ULO C

UN I D AD ES D I D ÁCTI CAS:

1. Clases básicas. St ring, St ringBuffer, Syst em ,

Mat h, I nt eger, ….

2. Est ruct uras de dat os. Arrays y colecciones


M ÓD ULO C

Cla se s bá sica s

Te m a 3 .1

Í n dice de la u n ida d:

1. Clase j [Link] ring

2. Clase j [Link] ringBuffer

3. Clase j [Link] ringBuilder

4. Clase j [Link] em

5. Clase j [Link] h

6. Ot ras clases

7. Wrapper de t ipos prim it ivos


Un ida d 3 .1 Cla se s bá sica s

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.

1 . Cla se j a va .la n [Link] r in g

A diferencia de C++, en Java se usa la clase String para el manejo de cadenas de


caracteres. Existen distintas formas de crear un String:

 Mediante su constructor por defecto.

 Ej e m plo: String s = n e w String(); // Se inicializa a “” (y no a “ “).

 Mediante su constructor con una cadena de caracteres.

 Ej e m plo: String s = new String(“Hola”);

 Mediante la asignación de una cadena de caracteres.

Ej e m plo: String s = “Hola”; // Es la única excepción al uso del new.

 Otros constructores:
[Link]
uctor_detail

Es importante tener en cuenta que para la clase String, la primera posición de la


cadena de caracteres es la cero (y no la uno).

Implementa una serie de métodos muy útiles para el manejo de las cadenas de ca-
racteres. Por ejemplo:

 pu blic cha r ch a r At ( in t in de x ) ; Devuelve el carácter que se


encuentra en la posición index.

 pu blic St r in g con ca t ( St r in g st r ) ; Devuelve la cadena con


str añadido al final del objeto String que realiza la llamada (es igual
que con el operador +).

 pu blic in t in de x Of( int ch ) ; Devuelve la primera ocurrencia


de ch (devuelve -1 si no está).

245
MÓDULO 3

 pu blic in t com pa r e To( St r ing st r ) ; Compara la cadena con


str. Devuelve 0 si son iguales, < 1 si es menor o > 1 si es mayor (la
comparación se realiza siguiendo el abecedario).

 pu blic St r in g r e pla ce ( cha r oldCha r , ch a r n e w Ch a r ) ;


Cambia todas las ocurrencias de oldChar por newChar y devuelve el
String cambiado.

 pu blic in t la st I nde x Of( St r ing st r ) ; Devuelve la última ocu-


rrencia de str (devuelve -1 si no se encuentra).

 pu blic in t le n gt h( ) ; Devuelve la longitud de la cadena de ca-


racteres.

 pu blic St r in g subst r in g( int be gin I n de x ) ; Devuelve la ca-


dena desde la posición beginIndex hasta el final.

 pu blic St r in g subst r in g( int be gin I nde x , in t e ndI nde x ) ;


Devuelve la cadena desde la posición beginIndex hasta endIndex –
1.

 pu blic St r in g t oLow e r Ca se ( ) ; Devuelve la cadena en minús-


culas.

 pu blic St r in g t oUppe r Ca se ( ) ; Devuelve la cadena en ma-


yúsculas.

 pu blic St r in g t r im ( ) ; Devuelve la cadena sin espacios en


blanco ni por delante ni por detrás.

 pu blic st a t ic St r in g va lu e Of( dou ble d) ; Devuelve la cadena


de caracteres que representa d. Este método está sobrecargado va-
rias veces recibiendo como parámetro otros tipos primitivos (char,
int, float, long…).

 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

La clase String, sobreescribe el método equals() de la clase [Link] (re-


cordemos que método el equals de Object comparaba las posiciones de memoria, y
no el contenido de los objetos). De esta forma, podemos saber si dos objetos String
distintos, representan la misma cadena de caracteres o no.

 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.

2 . Cla se j a va .la n [Link] r in gBu ffe r

StringBuffer es otra clase relacionada con las cadenas de caracteres. Pero en este
caso no son inmutables.

Existen distintas formas de crear un StringBuffer:

 Mediante su constructor por defecto.

 Ej e m plo: StringBuffer s = n e w StringBuffer(); // Se inicializa a “”


(y no a “ “).

 Mediante su constructor con una cadena de caracteres.

 Ej e m plo: StringBuffer s = new StringBuffer(“Hola”);

 Mediante su constructor con un parámetro de tipo int.

Ej e m plo: StringBuffer s = new StringBuffer(3); // Tiene una capaci-


dad inicial para 3 caracteres

 Otros constructores:
[Link]
constructor_detail

248
Un ida d 3 .1 Cla se s bá sica s

Para la clase StringBuffer, la primera posición de la cadena de caracteres es la cero


(y no la uno).

Algunos de sus métodos más importantes son:

 pu blic St r in gBuffe r a ppe n d( ch a r c) ; Añade el carácter c al


valor del StringBuffer. Este método está sobrecargado varias veces
recibiendo como parámetro otros tipos: String, Object, int, float,
long… Modifica el propio objeto que realiza la llamada.

 pu blic cha r ch a r At ( in t in de x ) ; Devuelve el carácter que se


encuentra en la posición index.

 pu blic in t in de x Of( int ch ) ; Devuelve la primera ocurrencia


de ch (devuelve -1 si no está).

 pu blic in t le n gt h( ) ; Devuelve la longitud de la cadena de ca-


racteres.

 pu blic in t ca pa cit y( ) ; Devuelve el número de caracteres que


puede contener sin necesidad de alocar o pedir más memoria.

 pu blic St r in g t oSt r ing( ) ; Devuelve un String representado


por el StringBuffer.

 pu blic St r in g subst r in g( in t be gin I nde x ) ; Devuelve un


String desde la posición beginIndex hasta el final.

 pu blic St r in gBuffe r r e ve r se ( ) ; Devuelve la cadena invertida


en orden. Modifica el propio objeto.

 pu blic void se t Cha r At ( in t inde x , cha r ch ) ; Reemplaza el


carácter de la posición index por ch.

 pu blic St r in gBuffe r r e pla ce ( in t st a r t , in t e n d, St r in g st r ) ;


Reemplaza la cadena entre las posiciones start y end con str. Modifi-
ca el propio objeto que hace la llamada.

249
MÓDULO 3

 pu blic St r in gBuffe r in se r t ( in t offse t , ch a r c) ; Inserta c en


la posición offset de la cadena. Este método está sobrecargado varias
veces recibiendo como parámetro a insertar otros tipos: int, float,
long… Modifica el propio objeto que hace la llamada.

 pu blic St r in gBuffe r de le t e ( in t st a r t , in t e n d) ; Elimina los


caracteres entre las posiciones start y end.

 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

StringBuffer tmp = new StringBuffer(10);


for(int i=0; i <10; i++)
[Link](i);
String s = [Link]();

Solo se han creado 2 objetos en memoria: un StringBuffer (el GC puede limpiarlo) y


un String.

3 . Cla se j a va .la n [Link] r in gBu ilde r

Java SE 5.0 añade la clase StringBuilder al tratamiento de cadenas de caracteres.

Su funcionalidad (constructores y métodos) es idéntica a la de StringBuffer. La úni-


ca diferencia es que sus métodos no están sincronizados (veremos qué significa es-
to en la Unidad 3.7 Threads).

251
MÓDULO 3

En ejecuciones paralelas tiene mejor rendimiento que StringBuffer. Se puede en-


contrar una información más detallada en
[Link]

 Ej e m plo:

4 . Cla se j a va .la n [Link] e m

Se trata de una clase con utilidades genéricas del sistema. Todos sus atributos y
métodos son estáticos.

Tiene tres atributos muy utilizados:

 pu blic st a t ic fin a l Pr in t St r e a m ou t ; Representa por defecto


al stream de salida en pantalla.

 pu blic st a t ic fin a l I npu t St r e a m in ; Representa por defecto


al stream de entrada del teclado.

 pu blic st a t ic fina l Pr in t St r e a m e r r ; Representa por defecto


al stream de salida de errores.

252
Un ida d 3 .1 Cla se s bá sica s

Para más información


[Link]

Y entre sus métodos más utilizados se encuentran:

 pu blic st a t ic lon g cu r r e n t Tim e M illis( ) ; Devuelve la diferen-


cia de entre la hora actual y la medianoche del 1 de enero de 1970
en milisegundos.

 pu blic st a t ic long na n oTim e ( ) ; Devuelve la hora actual en


nanosegundos. Es novedad del JSE 5.0

 pu blic st a t ic void e x it ( in t st a t us) ; Termina la ejecución de


la JVM devolviendo status como código de retorno (cero significa que
todo ha ido bien).

 pu blic st a t ic void gc( ) ; Pide a la JVM que ejecute el Garbage


Collector. Se trata de un método muy peligroso. Utilizado sin cuidado
puede afectar muy negativamente al rendimiento.

 pu blic st a t ic St r ing ge t Pr ope r t y( St r in g k e y) ; Devuelve el


valor de la propiedad del sistema key, o null si no existiese.

 pu blic st a t ic Pr ope r t ie s ge t Pr ope r t ie s( ) ; Devuelve una


instancia de [Link] encapsulando todas las propiedades
del sistema.

 pu blic st a t ic void loa dLibr a r y( St r ing libna m e ) ; Carga la


librería nativa libname. Se utiliza con la programación JNI (Java Na-
tive Interface).

 Ot r os m é t odos:
[Link]
od_detail

 Ej e m plo:

253
MÓDULO 3

5 . Cla se j a va .la ng.M a t h

Se trata de una clase con utilidades matemáticas. Todos sus atributos y métodos
son estáticos.

Tiene dos atributos (constantes) muy utilizados:

 pu blic st a t ic fina l dou ble E; Es el número e, utilizado en los


logaritmos neperianos.

 pu blic st a t ic fin a l dou ble PI ; Es el número π, utilizado en


trigonometría.

Para obtener más información:


[Link]

Alguno de sus métodos más importantes son:

 pu blic st a t ic double a bs( double a ) ; Devuelve el valor abso-


luto de a. Este método se encuentra sobrecargado recibiendo otros
tipos: int, long…

 pu blic st a t ic dou ble log1 0 ( double a ) ; Devuelve el logarit-


mo base 10 de a.

254
Un ida d 3 .1 Cla se s bá sica s

 pu blic st a t ic in t m a x ( in t a , in t b) ; Devuelve el número ma-


yor comparando a y b. Este método se encuentra sobrecargado reci-
biendo otros tipos: long, float…

 pu blic st a t ic in t m in( in t a , in t b) ; Devuelve el número me-


nor comparando a y b. Este método se encuentra sobrecargado reci-
biendo otros tipos: long, float…

 pu blic st a t ic double pow ( dou ble a , double b) ; Calcula po-


tencias de base a y exponente b.

 pu blic st a t ic dou ble r a n dom ( ) ; Devuelve un número aleato-


rio entre 0.0 y 1.0 (0.0 está incluido pero no así el 1.0).

 pu blic st a t ic lon g r oun d( double a ) ; Redondea a al número


entero más cercano. Este método se encuentra sobrecargado con
otros tipos: float.

 pu blic st a t ic double sqr t ( double a ) ; Calcula la raíz cuadra-


da de a.

 Ot r os m é t odos:
[Link]
_detail

 Ej e m plo:

255
MÓDULO 3

6 . Ot r a s cla se s

A continuación se enumeran otras clases importantes a tener en cuenta pertene-


cientes a otros paquetes

 Para manejar fechas: j a va .u t il.D a t e y j a va .ut [Link] le n da r

 Para formatear fechas y números: j a va .t e x t .D a t e For m a t y


j a va .t e x t .N u m be r For m a t

 Para dividir una cadena de caracteres en tokens (o trozos de


cadena separados por un identificador): j a va .ut [Link] r ingTok e nize r

 Para trabajar con expresiones regulares: ja-


va .u t il.r e ge x .Pa t t e r n y j a va .u t il.r e ge x .M a t ch e r

 Más información: [Link]

256
Un ida d 3 .1 Cla se s bá sica s

7 . W r a ppe r de t ipos pr im it ivos

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):

 Boole a n : para el tipo primitivo boolean

 Ch a r a ct e r : para el tipo primitivo char

 Byt e , Shor t , I n t e ge r , Long: para los tipos primitivos byte,


short, int y long respectivamente.

 Floa t , D ouble : para los tipos primitivos float y double respec-


tivamente

Como norma a seguir, suelen tener los siguientes métodos:

 Constructores que reciben un String o el tipo primitivo que re-


presentan:

 Ej e m plo: Integer a = new Integer(3);

 Convertidores de tipo String a su tipo complejo (wrapper) me-


diante el método valueOf

 Ej e m plo: Integer b = [Link](“3”);

 Convertidores de tipo String al tipo primitivo que representan


mediante el método parseXXX

 Ej e m plo: int c = [Link](“3”);

 Convertidores de tipo primitivo a String mediante el método


toString

 Ej e m plo: String d = [Link](c);

257
MÓDULO 3

 Extractores del tipo primitivo que representan mediante el mé-


todo XXXValue

 Ej e m plo: int e = [Link]();

Todos los wrappers sobreescriben el método equals de la clase [Link]. De


esta forma, podemos saber si dos objetos distintos de un mismo tipo de wrapper,
representan el mismo valor primitivo o no.

 Ej e m plo:

7 .1 Cla se j a va .la n [Link] a n

Es el wrapper del tipo primitivo boolean. Sus métodos más importantes son:

 pu blic Boole a n( boole a n va lu e ) ; Constructor de un Boolean


con el boolean value.

 pu blic Boole a n( St r ing s) ; Constructor de un Boolean con el


String s. Si s no vale “true” entonces siempre cogerá el valor false.

 pu blic st a t ic Boole a n va lue Of( St r in g s) ; Convierte el


String s en un Boolean. Si s no vale “true” entonces siempre devuel-
ve un Boolean con false.

 pu blic st a t ic boole a n pa r se Boole a n( St r in g s) ; Convierte el


String s en un boolean. Si s no vale “true” entonces siempre devuel-
ve false.

 pu blic st a t ic St r in g t oSt r ing( boole a n b) ; Convierte el


boolean b en un String.

258
Un ida d 3 .1 Cla se s bá sica s

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic boole a n boole a nVa lu e ( ) ; Extrae el boolean que re-


presenta.

 Más in for m a ción y m é t odos:


[Link]

7 .2 Cla se j a va .la [Link] a r a ct e r

Es el wrapper del tipo primitivo char. Sus métodos más importantes son:

 pu blic Ch a r a ct e r ( cha r va lu e ) ; Constructor de un Character


con el char value.

 pu blic st a t ic St r ing t oSt r in g( cha r c) ; Convierte el char c en


un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic cha r ch a r Va lue ( ) ; Extrae el char que representa.

 M á s infor m a ción y m é t odos:


[Link]

7 .3 Cla se j a va .la n [Link] e

Es el wrapper del tipo primitivo byt e. Sus métodos más importantes son:

 pu blic Byt e ( byt e va lu e ) ; Constructor de un Byte con el byte


value.

 pu blic Byt e ( St r in g s) ; Constructor de un Byte con el String


s.

259
MÓDULO 3

 pu blic st a t ic Byt e va lu e Of( St r ing s) ; Convierte el String s


en un Byte.

 pu blic st a t ic byt e pa r se Byt e ( St r in g s) ; Convierte el String


s en un byte.

 pu blic st a t ic St r in g t oSt r in g( byt e b) ; Convierte el byte b


en un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic byt e byt e Va lue ( ) ; Extrae el byte que representa.

 M á s infor m a ción y m é t odos:


[Link]

7 .4 Cla se j a va .la n [Link] or t

Es el wrapper del tipo primitivo short. Sus métodos más importantes son:

 pu blic Shor t ( shor t va lu e ) ; Constructor de un Short con el


short value.

 pu blic Shor t ( St r in g s) ; Constructor de un Short con el String


s.

 pu blic st a t ic Sh or t va lu e Of( St r in g s) ; Convierte el String s


en un Short.

 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.

 pu blic st a t ic St r ing t oSt r in g( shor t s) ; Convierte el short s


en un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic sh or t sh or t Va lu e ( ) ; Extrae el short que representa.

260
Un ida d 3 .1 Cla se s bá sica s

 M á s infor m a ción y m é t odos:


[Link]

7 .5 Cla se j a va .la n g.I n t e ge r

Es el wrapper del tipo primitivo int. Sus métodos más importantes son:

 pu blic I n t e ge r ( in t va lu e ) ; Constructor de un Integer con el


int value.

 pu blic I n t e ge r ( St r ing s) ; Constructor de un Integer con el


String s.

 pu blic st a t ic I n t e ge r va lu e Of( St r in g s) ; Convierte el String


s en un Integer.

 pu blic st a t ic in t pa r se I n t ( St r ing s) ; Convierte el String s


en un int.

 pu blic st a t ic St r in g t oSt r in g( int i) ; Convierte el int i en un


String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic in t in t Va lu e ( ) ; Extrae el int que representa.

 M á s infor m a ción y m é t odos:


[Link]

7 .6 Cla se j a va .la n [Link] g

Es el wrapper del tipo primitivo long. Sus métodos más importantes son:

261
MÓDULO 3

 pu blic Long( lon g va lu e ) ; Constructor de un Long con el long


value.

 pu blic Long( St r ing s) ; Constructor de un Long con el String


s.

 pu blic st a t ic Lon g va lu e Of( St r in g s) ; Convierte el String s


en un Long.

 pu blic st a t ic Lon g va lu e Of( St r in g s) ; Convierte el String s


en un Long.

 pu blic st a t ic St r in g t oSt r in g( lon g l) ; Convierte el long l en


un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic long longVa lue ( ) ; Extrae el long que representa.

 M á s infor m a ción y m é t odos:


[Link]

7 .7 Cla se j a va .la n [Link] t

Es el wrapper del tipo primitivo float. Sus métodos más importantes son:

 pu blic Floa t ( floa t va lu e ) ; Constructor de un Float con el


float value.

 pu blic Floa t ( St r in g s) ; Constructor de un Float con el String


s.

 pu blic st a t ic Floa t va lu e Of( St r in g s) ; Convierte el String s


en un Float.

 pu blic st a t ic floa t pa r se Floa t ( St r in g s) ; Convierte el String


s en un float.

262
Un ida d 3 .1 Cla se s bá sica s

 pu blic st a t ic St r in g t oSt r in g( floa t f) ; Convierte el float f en


un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic floa t floa t Va lue ( ) ; Extrae el float que representa.

 M á s infor m a ción y m é t odos:


[Link]

7 .8 Cla se j a va .la n g.D ou ble

Es el wrapper del tipo primitivo double. Sus métodos más importantes son:

 pu blic D ouble ( dou ble va lu e ) ; Constructor de un Double con


el double value.

 pu blic D ou ble ( St r ing s) ; Constructor de un Double con el


String s.

 pu blic st a t ic D ou ble va lu e Of( St r in g s) ; Convierte el String


s en un Double.

 pu blic st a t ic double pa r se D ouble ( St r in g s) ; Convierte el


String s en un double.

 pu blic st a t ic St r in g t oSt r in g( dou ble d) ; Convierte el dou-


ble d en un String.

 pu blic St r in g t oSt r ing( ) ; Devuelve su representación String


(sobrescribe el método toString() de [Link]).

 pu blic dou ble double Va lu e ( ) ; Extrae el double que


representa.

263
MÓDULO 3

 M á s infor m a ción y m é t odos:


[Link]

7 .8 Ej e m plo con los w r a ppe r s

A continuación mostramos un ejemplo de los wrappers de los tipos básicos.

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.

Antes, para crear un wrapper a partir de un tipo primitivo se utilizaba su cons-


tructor:

264
Un ida d 3 .1 Cla se s bá sica s

Integer i = new Integer(1);

Sin embargo ahora se puede hacer directamente:

Integer i = 1;

El compilador se encarga de realizar la conversión de forma automática (auto-


boxing).

De igual forma, antes para extraer un tipo primitivo de su wrapper utilizába-


mos el siguiente método:

Integer a = new Integer(1); int b = [Link]();

Sin embargo ahora se puede hacer directamente:

int b = a;

El compilador se encarga de realizar la extracción de forma automática (auto-


unboxing).

Esto nos permite también operar con los wrappers:

Integer a = 10; Integer b = 3; int c = a + b;

También se permiten las comparaciones:

Integer a = 5; int b = 6;
if(a == b)
[Link](“Iguales”);

El wrapper Boolean también se ve favorecido por esta nueva funcionalidad.


Antes no podía participar en condiciones, pero ahora si:

Boolean a = true; boolean b = false;


Boolean c = a && b;

Ante esta nueva funcionalidad, nos podemos preguntar ¿qué pasa con la so-
brecarga de métodos?

public void metodo(double param) { };


public void metodo(Integer param) { };

265
MÓDULO 3

int a = 5;
[Link](a);

Para evitar diferencias en la funcionalidad de una aplicación al migrar de ver-


siones anteriores, primero se busca el método a ejecutar sin tener en cuenta
el autoboxing y auto-unboxing. Si no se encuentra ninguno, entonces de bus-
ca teniendo en cuenta el autoboxing y auto-unboxing. Se llamaría por tanto a:
public void metodo(double param) { };

PRÁCTI CA A: Desarrollar, tanto en la JDK de Sun como en Eclipse, una clase a la


que se le pase un parámetro de tipo String (sin blancos de separación) y muestre:

 la cadena de caracteres en mayúsculas.

 la cadena de caracteres en minúsculas.

 los dos primeros caracteres de la cadena (solo en caso de que la longitud de


esta sea de dos o más caracteres).

 los dos últimos caracteres de la cadena (solo en caso de que la longitud de


esta sea de dos o más caracteres).

 el número de ocurrencias en la cadena del último carácter.

 la cadena con todas las ocurrencias del primer carácter en mayúsculas.

 la cadena con tres asteriscos por delante y por detrás.

 La cadena invertida.

Solución con la JDK De Sun

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

Creamos un directorio de trabajo donde guardar el programa Java.

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

Creamos el directorio donde va a estar nuestra clase


es\java\aula\mentor\\practicas26

Desde el directorio es\java\aula\mentor\practica26, con un editor de texto (por


ejemplo Notepad) vamos a escribir el código fuente de nuestra clases java; el
nombre del fichero [Link] debe ser exactamente igual (incluyendo
mayúsculas y minúsculas) al de la clase Java que vamos a desarrollar.

268
Un ida d 3 .1 Cla se s bá sica s

Y aceptamos la creación de un fichero nuevo.

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];

Nuestra clase quedaría de la manera siguiente:

269
MÓDULO 3

Compilamos nuestra clase

Ejecutamos la clase, pasándole un parámetro en la ejecución:

270
Un ida d 3 .1 Cla se s bá sica s

Ahora realizaremos la misma práctica con Eclipse

Arrancar Eclipse, ejecutando c:\eclipse3.5.2\[Link]

Seleccionar la ubicación del “workspace” (o área de trabajo).

Aparecerá la pantalla para empezar a trabajar.

271
MÓDULO 3

Verificar que la perspectiva Java está abierta, y sino cambiar a ella

Crear un proyecto nuevo de nombre Practicas26

272
Un ida d 3 .1 Cla se s bá sica s

Darle el nombre y seleccionar Finish.

Crear una clase Java nueva llamado PracticaA, especificando el paquete


[Link].practicas26

273
MÓDULO 3

El código dentro del método main, quedaría como sigue:

274
Un ida d 3 .1 Cla se s bá sica s

Salvar los cambios con Ctrl + S o File -> Save

Para ejecutar la clase, pasándole un parámetro, seleccionamos la clase Java Practi-


caA, con el botón derecho del ratón ejecutarla como Run Configurations

275
MÓDULO 3

Indicar el parámetro en la pestaña Arguments

276
Un ida d 3 .1 Cla se s bá sica s

Y seleccionar el botón Run.

PRÁCTI CA B: Desarrollar, tanto en la JDK de Sun como en Eclipse, una clase a la


que se le pasen dos parámetros de tipo String y que serán convertidos a dos núme-
ros decimales (double); estos números decimales serán los dos catetos de un trián-
gulo rectángulo.

Deberá tener un método que muestre:

 El mayor y menor de los catetos.

 El valor de la hipotenusa.

Adicionalmente, habrá que mostrar el tiempo que tarda en ejecutarse este método.

277
MÓDULO 3

Solución con la JDK De Sun

En el directorio es\java\aula\mentor\practicas26, creamos una clase nueva llamada


[Link] con un editor de texto como notepad.

Para el paso de parámetros en ejecución, incluiremos las siguientes líneas en el


método máin.

if (args == null || [Link] != 2){


[Link]("Numero de parametros incorrectos");
[Link](1);
}

String s1 = args[0]; // tenemos en primer parámetro de tipo String


String s2 = args[1]; // tenemos en segundo parámetro de tipo String

Nuestra clase quedaría como sigue:

compilamos la clase y ejecutamos pasándole los parámetros

278
Un ida d 3 .1 Cla se s bá sica s

Ahora realizaremos la misma práctica con Eclipse

Nos creamos una nueva clase en el paquete [Link].practicas26, lla-


mada PracticaB

Desarrollamos el código de la clase

279
MÓDULO 3

Y ejecutamos mediante Run Configurations, verificando que en el Main class apare-


ce la clase PracticaB (en el caso de no aparecer cambiar el nombre o buscarla me-
diante el botón Search)

pasándole como argumentos 12.2 y 2.4

280
Un ida d 3 .1 Cla se s bá sica s

Seleccionamos el botón Run, obteniendo la siguiente salida:

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

 Para el tratamiento de cadenas de caracteres que cambian de valor se


utilizan las clases
- j a va .la n [Link] r in gBu ffe r (sincronizada)
- j a va .la n [Link] r ingBu ilde r (no sincronizada)

 j a va .la n [Link] e m : se trata de una clase con utilidades genéricas del


sistema.

 j a va .la n g.M a t h : e trata de una clase con utilidades matemáticas.

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

3. I m port ancia de los m ét odos equals( ) y hashCode( )

4. Arrays vs. Colecciones


Un ida d 3 .2 Est r u ct u r a de da t os

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.

Un elem ent o de un array, es el valor de una de sus posiciones, y se ident ifica m e-


diant e un índice.

Un array en Java, es un t ipo de clase especial que hereda im plícit am ent e de j a-


[Link] ect .

La declaración de un array se realiza m ediant e el t ipo de dat os que va a albergar y


los corchet es [ ] . La sint axis de la declaración de un array es la siguient e:

m odifica dor _ a cce so t ipo[ ] n om br e [ = va lor _ in icia l] ;

 Ej e m plos: privat e int [ ] num eros;

privat e St ring[ ] cadenas;

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.

La creación de un array se realiza m ediant e la keyword: n e w , com o con cualquier


ot ra clase, t ant o para t ipos prim it ivos com o para t ipos com plej os. La sint axis de la
creación de un array es:

m odifica dor _ a cce so t ipo[ ] n om br e = n e w t ipo[ lon git u d] ;

285
MODULO 3

 Ej e m plos: privat e int [ ] num eros = new int [ 5] ;

privat e St ring[ ] cadenas = new St ring[ 4] ;

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.

 Ej e m plos: privat e int [ ] num eros = { 1,2,3,4,5} ;

privat e St ring[ ] cadenas = { “ hola” ,” adios” } ;

privat e I nt eger[ ] int s = { new I nt eger( 12) , new I nt eger( 98) } ;

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.

 Ej e m plos: num eros[ 2] = 3;

int a = num eros[ 0] ;

if( num eros[ 4] = = 5) …..

Vem os com o queda en m em oria los arrays de t ipos prim it ivos:

286
Un ida d 3 .2 Est r u ct u r a de da t os

Con un array de t ipos com plej os quedaría de la siguient e m anera:

Para conocer la longit ud de un array, podrem os acceder a su at ribut o público:


le n gt h .

Al no ser dinám ico, no podem os:

 Ni elim inar posiciones.

 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) .

 Ej e m plo: Si seguim os la ej ecución del siguient e


program a

public class Colecciones


{
public st at ic void m ain( St ring[ ] args)
{
/ / Creación e inicialización.
St ring[ ] saludos = new St ring[ 4] ;

/ / 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…

for ( in icia liza ción : cole cción) N ot a : Se u sa “:” e n ve z de “;”.


{
se n t e n cia s;
}

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.

 Ej e m plo: se m uest ra un ej em plo de la sent encia de cont rol for/ in

public void list ar( int [ ] param )


{
for( int i: param )
Syst em .out .print ln( i) ;
}

Básicam ent e, se t rat a de una sim plificación a la hora de codificar. Es decir, al


final, el com pilador conviert e el código en una sent encia for convencional co-
m o la siguient e:

public void list ar( int [ ] param )


{
int i = 0;
for( int j = 0; j < param .lengt h; j + + )
i = param [ j ] ;
Syst em .out .print ln( i) ;
}

1 . 2 Ar r a ys m u lt idim e n sion a le s

Un array m ult idim ensional es un array de arrays o desde un punt o de vist a


m at em át ico es una m at riz. Es decir, una m at riz de 4 x 2 en realidad en Java
est á form ada por 5 arrays: 1 array con 4 arrays.

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

La sint axis de la creación de un array bidim ensional es la siguient e:

m odifica dor _ a cce so t ipo[ ] [ ] nom br e = ne w t ipo[ long] [ long] ;

 Ej e m plo: privat e int [ ] [ ] num eros = new int [ 4] [ 2] ;

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.

La sint axis de la creación de un array bidim ensional no cuadrado es la siguien-


t e:

m odifica dor _ a cce so t ipo[ ] [ ] nom br e = ne w t ipo[ long] [ ] ;

 Ej e m plo:

privat e int [ ] [ ] num eros = new int [ 4] [ ] ;


num eros[ 0] = new int [ 2] ;
num eros[ 1] = new int [ 10] ;
num eros[ 3] = new int [ 1] ;

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.

 Ej e m plos: privat e int [ ] [ ] num eros = { { 1,2,3} , { 1,2,3} } ;

privat e St ring[ ] [ ] dias = { { “ Lunes” ,” Mart es” } , { “ Miércoles” } } ;

Vem os com o queda en m em oria los arrays bidim ensionales:

290
Un ida d 3 .2 Est r u ct u r a de da t os

 Ej e m plo: privat e int [ ] [ ] num eros = { { 1,2,3} , { 1,2,3} } ;

 Ej e m plo: Si seguim os la ej ecución del siguient e program a, obt en-


drem os la salida m ost rada

public class Mat riz


{
public st at ic void m ain( St ring[ ] args)
{
int [ ] [ ] m at riz = new int [ 4] [ ] ;

/ / 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 ;
}

/ / Most rar la m at riz


for( int i= 0; i< m at [Link] h; i+ + )
{
for( int j = 0; j < m at riz[ i] .lengt h; j + + )
Syst em .out .print ( m at riz[ i] [ j ] + " " ) ;
Syst em .out .print ln( ) ;
}
}
}

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:

pu blic st a t ic void m a in ( St r in g[ ] a r gs)

 Ej e m plo:

public class Test


{
public st at ic void m ain( St ring[ ] args)
{
for( int i= 0; i< [Link] h; i+ + )
Syst em .out .print ln( " Argum ent o " + i + “ : " + args[ i] ) ;
}
}

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.

En Java t enem os un fram ework de colecciones, im plem ent ado m ediant e:

 I nt erfaces: represent aciones abst ract as de las colecciones


que perm it en usarlas sin conocer sus det alles.

 I m plem ent aciones: colecciones concret as.

 Algorit m os: m ét odos que perm it en realizar operaciones co-


m o búsquedas, ordenaciones, et c…

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.

Todas las colecciones se encuent ran en el paquet e j [Link] il.* ; siendo j a-


[Link] [Link] ion y j [Link] [Link] las raices de la j erarquía de las colecciones.

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

Los m ét odos básicos de est e int erfaz son:

 in t size ( ) ; / / I ndica el núm ero de elem ent os que cont iene.

 boole a n isEm pt y( ) ; / / I ndica sí no cont iene ningún ele-


m ent o.

294
Un ida d 3 .2 Est r u ct u r a de da t os

 boole a n con t a in s( Obj e ct e le m e n t ) ; / / I ndica sí cont iene


ese elem ent o.

 boole a n a dd( Obj e ct e le m e n t ) ; / / Añade un elem ent o.


Devuelve un boolean para indicar si ha t enido éxit o o ha t enido pro-
blem as.

 r e m ove ( Obj e ct e le m e n t ) ; / / Borra un elem ent o.

 I t e r a t or it e r a t or ( ) ; / / Devuelve una inst ancia de I t erat or.

Los m ét odos que corresponden a operaciones m asivas son:

 boole a n con t a in sAll( Colle ct ion c) ; / / I ndica sí cont iene


t odos esos elem ent os.

 boole a n a ddAll( Colle ct ion c) ; / / Añade t odos los elem en-


t os del parám et ro pasado. Devuelve un boolean para indicar si ha
t enido éxit o o ha t enido problem as.

 boole a n r e m ove All( Colle ct ion c) ; / / Borra t odos los ele-


m ent os del parám et ro pasado. Devuelve un boolean para indicar si
ha t enido éxit o o ha t enido problem as.

 boole a n r e t a inAll( Colle ct ion c) ; / / Borrar t odos los ele-


m ent os m enos los pasados en el parám et ro. Devuelve un boolean
para indicar si ha t enido éxit o o ha t enido problem as.

 void cle a r ( ) ; / / Borra t odos los elem ent os.

Los m ét odos que corresponden a operaciones con arrays son:

 Obj e ct [ ] t oAr r a y( ) ; / / Devuelve un array con t odos los


elem ent os.

 Obj e ct [ ] t oAr r a y( Obj e ct a [ ] ) ; / / Devuelve un array con


t odos los elem ent os. El t ipo será el del array enviado.

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 ( ) ;

Sus m ét odos son:

 boole a n ha sN e x t ( ) ; / / I ndica sí t iene m ás elem ent os des-


de la posición en la que se encuent ra el it erador.

 Obj e ct n e x t ( ) ; / / Devuelve el prim er elem ent o y se queda


apunt ando al siguient e. En la siguient e llam ada, devolverá el segun-
do elem ent o y apunt ará al siguient e y así sucesivam ent e hast a el fi-
nal de la colección que devolverá un null.

 void r e m ove ( ) ; / / Elim ina el prim er elem ent o y se queda


apunt ando al siguient e. En el caso de que no est em os en la prim era
posición, borrará el elem endo donde est é el it erador y apunt ará al si-
guient e.

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

pu blic boole a n e qua ls( Obj e ct o) ;

Exist en dist int as im plem ent aciones de est e int erfaz:

 j a va .u t il.H a shSe t : Es nueva en el SDK 1.2.x. Ofrece el ac-


ceso m ás rápido cuando dicho acceso es aleat orio ( no secuencial) . Su
orden de it eración es im predecible.

 j a va .u t [Link] k e dH a shSe t : Es nueva en el SDK 1.4.x. Su


orden de it eración es el orden de inserción.

 j a va .u t [Link] e e Se t : Es nueva en el SDK 1.2.x. Su orden de


it eración depende de la im plem ent ación que los elem ent os hagan del
int erfaz j a va .la [Link] pa r a ble , m ediant e la im plem ent ación del
m ét odo public in t com pa r e To( Obj e ct o) ;

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test HashSet


{
public st at ic void m ain( St ring[ ] args)
{
HashSet ciudades = new HashSet ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( " Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

I t erat or it = [Link] erat or( ) ;

while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}

297
MODULO 3

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test LinkedHashSet


{
public st at ic void m ain( St ring[ ] args)
{
LinkedHashSet ciudades = new LinkedHashSet ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( " Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

I t erat or it = [Link] erat or( ) ;

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

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test TreeSet


{
public st at ic void m ain( St ring[ ] args)
{
TreeSet ciudades = new TreeSet ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( " Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

I t erat or it = [Link] erat or( ) ;

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.

Perm it e t ener duplicados.

Es accesible m ediant e índice, de m anera que se puede:

 Acceder a un elem ent o concret o de una posición.

299
MODULO 3

 I nsert ar un elem ent o en una posición concret a.

Los m ét odos que añade est e int erfaz, para acceso posicional son:

 Obj e ct ge t ( in t inde x ) ; / / Devuelve el elem ent o de la posi-


ción indicada en el parám et ro.

 Obj e ct se t ( in t in de x , Obj e ct e le m e n t ) ; / / Reem plaza el


elem ent o de la posición indicada en el parám et ro, con el elem ent o
del parám et ro.

 void a dd( in t in de x , Obj e ct e le m e n t ) ; / / I nsert a el ele-


m ent o pasado por parám et ro, en la posición pasada por parám et ro.

 Obj e ct r e m ove ( int inde x ) ; / / Elim ina el elem ent o de la


posición indicada por parám et ro. Devuelve el obj et o borrado.

 boole a n a ddAll( in t in de x , Colle ct ion c) ; / / I nsert a t odos


los elem ent os pasados por parám et ro, en la posición pasada por pa-
rám et ro.

Los m ét odos que añade est e int erfaz para operaciones de búsqueda son:

 in t inde x Of( Obj e ct o) ; / / Devuelve la posición de la pri-


m era ocurrencia del elem ent o pasado por parám et ro.

 in t la st I n de x Of( Obj e ct o) ; / / Devuelve la posición de la


últ im a ocurrencia del elem ent o pasado por parám et ro.

Los m ét odos que añade est e int erfaz para obt ener subcolecciones son:

 List su bList ( in t fr om , in t t o) ; / / Devuelve una list a con


los elem ent os com prendidos ent re las posiciones pasadas por pará-
m et ro.

A cont inuación se enum eran las dist int as im plem ent aciones de est e int erfaz:

 j a va .u t [Link] r a yList : Es nueva en el SDK 1.2.x. Ofrece un


t iem po de acceso ópt im o cuando dicho acceso es aleat orio.

300
Un ida d 3 .2 Est r u ct u r a de da t os

 j a va .u t [Link] k e dList : Es nueva en el SDK 1.2.x. Ofrece un


t iem po de acceso ópt im o cuando dicho acceso es para añadir o eli-
m inar elem ent os del com ienzo y final de la list a ( t ípico para pilas) .

 j a va .u t [Link] ct or : Es com o el ArrayList , pero sincronizado,


lo que penaliza not ablem ent e el rendim ient o. La sincronización es
im port ant e cuando m ás de un t hread ( hilo de ej ecución) va a acceder
a la colección ( los t hreads se verán en m ás det alle en la Unidad 3.7.

 Ej e m plo: Ut ilización de j [Link] [Link] y j [Link] il.I t erat or

im port j [Link] il.* ;

public class Test ArrayList


{
public st at ic void m ain( St ring[ ] args)
{
ArrayList ciudades = new ArrayList ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( 1," Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

I t erat or it = [Link] erat or( ) ;

while( it .hasNext ( ) )
Syst em .out .print ln( " Ciudad: " + it .next ( ) ) ;
}
}

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test ArrayList 2


{

301
MODULO 3

public st at ic void m ain( St ring[ ] args)


{
ArrayList ciudades = new ArrayList ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( 1," Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

for( int i= [Link]( ) - 1; i > = 0; i- - )


Syst em .out .print ln( "Ciudad: " + i + " es: " +
[Link] ( i) ) ;
}
}

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test LinkedList


{
public st at ic void m ain( St ring[ ] args)
{
LinkedList ciudades = new LinkedList ( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( 1," Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

I t erat or it = [Link] erat or( ) ;

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

 Ej e m plo: Ut ilización de j [Link] [Link] or

im port j [Link] il.* ;

public class Test Vect or


{
public st at ic void m ain( St ring[ ] args)
{
Vect or ciudades = new Vect or( ) ;

[Link]( " Madrid" ) ;


[Link]( " Barcelona" ) ;
[Link]( " Malaga" ) ;
[Link]( " Vigo" ) ;
[Link]( 1," Sevilla" ) ;
[Link]( " Madrid" ) ; / / Repet ido.

for( int i= [Link]( ) - 1; i > = 0; i- - )


Syst em .out .print ln( "Ciudad: " + i + " es: " +
[Link] ( i) ) ;
}
}

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.

No perm it e t ener claves duplicadas. Pero si valores duplicados.

Para calcular la colocación de un elem ent o se basa en el uso del m ét odo:

pu blic in t h a shCode ( ) ;

Los m ét odos básicos de est e int erfaz son:

 Obj e ct pu t ( Obj e ct k e y, Obj e ct va lu e ) ; / / I nsert a una


parej a de clave/ valor pasados com o parám et ros.

 Obj e ct ge t ( Obj e ct k e y) ; / / Accede al valor de una clave


pasada com o parám et ro.

 Obj e ct r e m ove ( Obj e ct k e y) ; / / Elim ina una parej a de


clave/ valor pasados com o parám et ros, devolviendo el obj et o borra-
do.

 boole a n con t a in sKe y( Obj e ct k e y) ; / / Com prueba la


exist encia de una clave pasada com o parám et ro.

 boole a n con t a in sVa lu e ( Obj e ct va lu e ) ; / / Com prueba la


exist encia de un valor pasado com o parám et ro.

 in t size ( ) ; / / I ndica el núm ero de parej a que cont iene.

 boole a n isEm pt y( ) ; / / I ndica sí no cont iene ninguna pare-


j a.

Los m ét odos que realizan operaciones m asivas son:

 void pu t All( M a p t ) ; / / Añade t odas las parej as que exist en


en el parám et ro t .

 void cle a r ( ) ; / / Elim ina t odas las parej as de clave/ valor.

304
Un ida d 3 .2 Est r u ct u r a de da t os

Los m ét odos que realizan operaciones de obt ención de colecciones son:

 pu blic Se t k e ySe t ( ) ; / / Devuelve las claves en un j a-


[Link] [Link] .

 pu blic Colle ct ion va lu e s( ) ; / / Devuelve los valores en un


j [Link] il. Collect ion.

A cont inuación enum eram os las dist int as im plem ent aciones de est e int erfaz:

 j a va .u t il.H a sh M a p: Es nueva en el SDK 1.2.x. Ofrece un


t iem po de acceso ópt im o cuando dicho acceso es aleat orio. Su orden
de it eración es im previsible.

 j a va .u t il.H a sh t a ble : Es la versión sincronizada de Hash-


Map.

 j a va .u t [Link] k e dH a shM a p: Es nueva en el SDK 1.4.x. Su


orden de it eración es el de inserción.

 j a va .u t [Link] e e M a p: Su orden de it eración depende de la


im plem ent ación que los elem ent os hagan del int erfaz ja-
va .la [Link] pa r a ble , m ediant e la im plem ent ación del m ét odo pu -
blic in t com pa r e To( Obj e ct o) ;

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test HashMap


{
public st at ic void m ain( St ring[ ] args)
{
HashMap codigos = new HashMap( ) ;
[Link] ( " 01" ," Urgent e" ) ;
[Link] ( " 02" ," I m port ant e" ) ;
[Link] ( " 03" ," Norm al" ) ;
[Link] ( " 04" ," Baj a prioridad" ) ;

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( aux + " : " + [Link] ( aux) ) ;


}
}
}

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test Hasht able


{
public st at ic void m ain( St ring[ ] args)
{
Hasht able codigos = new Hasht able( ) ;
[Link] ( " 01" ," Urgent e" ) ;
[Link] ( " 02" ," I m port ant e" ) ;
[Link] ( " 03" ," Norm al" ) ;
[Link] ( " 04" ," Baj a prioridad" ) ;

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

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test LinkedHashMap


{
public st at ic void m ain( St ring[ ] args)
{
LinkedHashMap codigos = new LinkedHashMap( ) ;
[Link] ( " 01" ," Urgent e" ) ;
[Link] ( " 02" ," I m port ant e" ) ;
[Link] ( " 03" ," Norm al" ) ;
[Link] ( " 04" ," Baj a prioridad" ) ;

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

 Ej e m plo: Ut ilización de j [Link] [Link]

im port j [Link] il.* ;

public class Test TreeMap


{
public st at ic void m ain( St ring[ ] args)
{
TreeMap codigos = new TreeMap( ) ;
[Link] ( " 04" ," Baj a prioridad" ) ;
[Link] ( " 01" ," Urgent e" ) ;
[Link] ( " 03" ," Norm al" ) ;
[Link] ( " 02" ," I m port ant e" ) ;

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> ( ) ;

 Ej e m plo: List < St ring> list a = new ArrayList < St ring> ( ) ;

En est e caso, se t rabaj aría ut ilizando St rings direct am ent e sin


necesidad de cast ing alguno:

St ring elem ent o = list [Link] ( 0) ;

En el caso de colecciones de t ipo Map, se definiría t ant o el t ipo de las claves


com o el de los valores:

Map< I nt eger,St ring> m apa = new HashMap< I nt eger,St ring> ( ) ;

309
MODULO 3

3 . I m por t a n cia de los m é t odos e qu a ls( ) y h a sh Code ( )

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.

La est ruct ura int erna de un Map es la siguient e:

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:

 Dos obj et os dist int os devolvieron el m ism o código hash.

 Dos códigos hash dist int os correspondieron al m ism o com -


part im ent o.

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:

 Reflexiva: [Link]( x) debe devolver t rue.

 Sim ét rica: Si [Link]( y) devuelve t rue, [Link]( x) debe


devolver t am bién t rue.

 Transit iva: Si [Link]( y) devuelve t rue, e [Link]( z) de-


vuelve t rue, [Link]( z) debe devolver t am bién t rue.

 Consist ent e: Si [Link]( y) devuelve t rue, ent onces las su-


cesivas invocaciones de [Link]( y) sin haber m odificado el est ado
de x o y deben seguir devolviendo t rue.

 Null: [Link]( null) siem pre debe devolver false.

 Ej e m plo: Sobreescrit ura del m ét odo equals

public class Test Equals


{
privat e int valor1;
privat e I nt eger valor2;

public boolean equals( Obj ect o)


{
if( t his = = o) / / Prim er paso.
ret urn t rue;
if( ! ( o inst anceof Test Equals) ) / / Segundo paso.
ret urn false;
Test Equals param = ( Test Equals) o; / / Tercer paso.
ret urn param .valor1 = = valor1 &&
param .[Link]( valor2) ;
}
}

311
MODULO 3

public st at ic void m ain( St ring[ ] args)


{
Test Equals t est 1 = new Test Equals( 1, new I nt eger( 2) ) ;
Test Equals t est 2 = new Test Equals( 1, new I nt eger( 2) ) ;
Syst em .out .print ln( t est [Link]( t est 2) ) ;
}

La im plem ent ación del m ét odo hashCode( ) debe cum plir las siguient es norm as:

 La ej ecución sucesiva del m ét odo hashCode( ) sobre un


m ism o obj et o sin haber m odificado su est ado int erno ent re m edias,
debe devolver siem pre el m ism o código hash.

 Si [Link]( y) devuelve t rue, ent onces t ant o x com o y de-


ben generar el m ism o código hash.

 Sin em bargo, si [Link]( y) devuelve false, no es obligat o-


rio que t ant o x com o y deban generar un código hash dist int o. No
obst ant e es lo deseable para evit ar en la m edida de lo posible las co-
lisiones en los Map y por t ant o ofrecer un m ej or rendim ient o.

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:

 Convert ir a St ring los valores de los dist int os at ribut os de la


clase. Concat enarlos y delegar la generación del código hash en el
m ét odo hashCode( ) del St ring result ant e ( la clase St ring posee una
im plem ent ación bast ant e eficaz del m ét odo hashCode( ) ) .

 Sum ar el código hash de cada uno de los at ribut os de la


clase ( los wrappers de t ipos prim it ivos t am bién t ienen sobreescrit o el
m ét odo hashcode( ) ) .

 Ej e m plo: Sobreescrit ura del m ét odo hashcode

312
Un ida d 3 .2 Est r u ct u r a de da t os

public class Test HashCode


{
privat e int valor1;
privat e I nt eger valor2;

public int hashCode( )


{
St ringBuffer buffer = new St ringBuffer( ) ;
[Link]( I nt eger .t oSt ring( valor1) ) ;
[Link]( valor2.t oSt ring( ) ) ;
ret urn buffer.t oSt ring( ) .hashCode( ) ;
}
}

public st at ic void m ain( St ring[ ] args)


{
Test HashCode t est 1 = new Test HashCode( 1, new I nt eger( 2) ) ;
Test HashCode t est 2 = new Test HashCode( 1, new I nt eger( 2) ) ;
Syst em .out .print ln( t est [Link]( ) ) ;
Syst em .out .print ln( t est [Link]( ) ) ;
}

El m ét odo equals( ) t am bién es im port ant e para el rest o de Colecciones.

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.

 Ej e m plo: Sobreescrit ura del m ét odo equals

public st at ic void m ain( St ring[ ] args)


{
Test Equals t est 1 = new Test Equals( 1, new I nt eger( 2) ) ;
List list = new ArrayList ( ) ;
list .add( t est 1) ;
Test Equals t est 2 = new Test Equals( 1, new I nt eger( 2) ) ;
Syst em .out .print ln( list .cont ains( t est 2) ) ;
}

313
MODULO 3

4 . Ar r a ys vs. Cole ccion e s

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.

Las caract eríst icas de los Arrays son:

 Tam 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 ple-
j os.

 Solo pueden albergar elem ent os de un t ipo.

Las caract eríst icas de las Colecciones son:

 Tam año dinám ico.

 Su t am año se conoce m ediant e el m ét odo size( ) .

 Solo puede alm acenar t ipos com plej os.

 Puede albergar elem ent os de dist int o t ipo.

314
Un ida d 3 .2 Est r u ct u r a de da t os

PRÁCTI CA A: Desarrollar, t ant o en la JDK de Sun com o en Eclipse, un sist em a de


gest ión de un garaj e siguiendo est as especificaciones.

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.

Las clases relacionadas con los vehículos se guardarán en el paquet e


es.j [Link].m ent [Link] [Link] m ient ras que el Garaj e y Pract icaA se
guardarán en el paquet e es.j [Link].m ent [Link] icas31.

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.

NOTA: Realizar est a práct ica m ediant e Arrays.

Solución con la JDK De Sun

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

Cream os un direct orio de t rabaj o donde guardar el program a Java.

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

El código del int erface podría quedar com o sigue:

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

Ya podem os im plem ent ar la clase Garaj e, desde el direct orio


es\ j ava\ aula\ m ent or\ pract icas31

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

Para com pilar un posible orden sería el siguient e:

Para ej ecut ar la aplicación

Ahora realizarem os la m ism a práct ica con Eclipse

Arrancar Eclipse, ej ecut ando c: \ eclipse3.5.2\ [Link]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

321
MODULO 3

Aparecerá la pant alla para em pezar a t rabaj ar.

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 proyect o nuevo de nom bre Pract icas31

Darle el nom bre y seleccionar Finish.

Crear un int erface Java nuevo llam ado Vehiculo, especificando el paquet e
es.j [Link].m ent [Link] [Link]

323
MODULO 3

La int erface quedaría com o sigue:

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

Realizam os el m ism o proceso para la clase Mot o

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

package es.j av [Link].m ent or .pract icas31;


im por t es.j [Link].m ent [Link] act [Link];

public class Garaj e {


/ / At r ibut os.
privat e Vehiculo[ ] vehiculos = null;
privat e int precio = 0;

326
Un ida d 3 .2 Est r u ct u r a de da t os

/ / Const ruct ores.


public Garaj e( int param 1, int param 2)
{
vehiculos = new Vehiculo[ param 1] ;
precio = par am 2;
}
/ / Mét odos.
public boolean ingr esarVehiculo( Vehiculo param )
{
boolean sw = false;
for( int i= 0; i< [Link] h; i+ + ) {
if( vehiculos[ i] = = null) {
sw = t rue;
vehiculos[ i] = param ;
break;
}
}
ret urn sw ;
}

public void ret irarVehiculo( Vehiculo param )


{
for( int i= 0; i< [Link] h; i+ + ) {
if( vehiculos[ i] = = param ) {
vehiculos[ i] = null;
break;
}
}
}

public Vehiculo[ ] get Vehiculos( )


{
Vehiculo[ ] t em p = new Vehiculo[ t [Link] Num Vehiculos( ) ] ;
for( int j = 0, i= 0; j < t em [Link] h && i< [Link] h; i+ + ) {
if( vehiculos[ i] ! = null) {
t em p[ j ] = vehiculos[ i] ;
j+ + ;
}
}
ret urn t em p;
}

public double get Kilom et raj eMedio( )


{
int cont = 0;
double acum = 0;
for( int i= 0; i< [Link] h; i+ + ) {
if( vehiculos[ i] ! = null) {
cont + + ;
acum + = vehiculos[ i] .get Kilom et raj e( ) ;
}
}
ret urn acum / cont ;
}

public int get Cost eTot al( )


{
int acum = 0;
for( int i= 0; i< [Link] h; i+ + ) {
if( vehiculos[ i] ! = null)
acum + = vehiculos[ i] .get Num Ruedas( ) ;
}
ret urn acum * precio;
}

public int get Num Vehiculos( )


{
int cont = 0;
for( int i= 0; i< [Link] h; i+ + ) {

327
MODULO 3

if( vehiculos[ i] ! = null)


cont + + ;
}
ret urn cont ;
}
}

Finalizam os creando la clase Pract icaA, m arcando que nos cree el m ét odo m ain

quedando la clase de la siguient e m anera:

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

PRÁCTI CA B: Desarrollar, t ant o en la JDK de Sun com o en Eclipse, un sist em a de


gest ión de pacient es.

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.

NOTA: Realizar est a práct ica m ediant e Colecciones.

Reut ilizarem os los direct orios, paquet es .... realizados en la Pract icaA.

Solución con la JDK De Sun

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

Por últ im o nos cream os la clase Pract icaB con el m ain.

332
Un ida d 3 .2 Est r u ct u r a de da t os

El orden de com pilación debe de ser el siguient e:

Ej ecut am os la práct ica

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]

Seleccionar la ubicación del “ workspace” ( o área de t rabaj o) .

Ya t enem os creado el proyect o Pract icas31, ut ilizado en la Práct ica A. Vam os a


crear la clase Ficha, pert enecient e al paquet e es.j [Link].m ent [Link] icas31

Cont inuam os con la clase Archivador

334
Un ida d 3 .2 Est r u ct u r a de da t os

Y finalm ent e con la clase Pract icaB

Ej ecut am os la clase, obt eniendo la siguient e salida

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.

Las Colecciones se clasifican en dos grandes grupos:


 j a va .u t [Link] ct ion que t rabaj a con elem ent os de t ipos com plej os de for-
m a conj unt a. Se clasifican a su vez en:
- j [Link] [Link] : Represent a colecciones que no perm i-
t en t ener elem ent os duplicados. j [Link] [Link] se
ut iliza para acceso aleat orio, j [Link] [Link]
se ut iliza para el acceso según su orden de inserción
y j [Link] [Link] depende de la im plem ent ación del
m ét odo public int com pareTo( Obj ect o) ;
- j [Link] [Link] : Represent a colecciones que pueden
- t ener elem ent os duplicados. j [Link] [Link] ut ili-
zado para accesos aleat orios, j [Link] [Link] ut i-
lizado cuando se necesit a añadir o elim inar elem en-
t os del com ienzo y final de la list a y j [Link] [Link] or
que es com o el ArrayList , pero sincronizado.
Un ida d 3 .1 Est r u ct u r a de da t os

 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.

También podría gustarte