0% encontró este documento útil (0 votos)
16 vistas

Fundamentos de Programacion en Java

El documento 'Fundamentos de programación en Java' de Jorge Martínez Ladrón de Guevara ofrece una introducción exhaustiva al lenguaje de programación Java, abarcando su historia, estructura de programas, clases y objetos, así como conceptos fundamentales de programación. Se destaca la portabilidad de Java, que permite ejecutar programas en diversas plataformas a través del Java Runtime Environment (JRE). Además, el texto enfatiza la importancia de diseñar algoritmos y desarrollar habilidades de programación sistemática para resolver problemas de manera efectiva.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas

Fundamentos de Programacion en Java

El documento 'Fundamentos de programación en Java' de Jorge Martínez Ladrón de Guevara ofrece una introducción exhaustiva al lenguaje de programación Java, abarcando su historia, estructura de programas, clases y objetos, así como conceptos fundamentales de programación. Se destaca la portabilidad de Java, que permite ejecutar programas en diversas plataformas a través del Java Runtime Environment (JRE). Además, el texto enfatiza la importancia de diseñar algoritmos y desarrollar habilidades de programación sistemática para resolver problemas de manera efectiva.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 206

Fu n da m e n t os de

pr ogr a m a ción e n Ja va

Jorge Mart ínez Ladrón de Guevara


Edit orial EME

I SBN 978- 84- 96285- 36- 2


Con t e n ido
1 . I nt r oducción a Ja va .................................... 1
Los le n gu a j e s de pr ogr a m a ción .......................... 1
H ist or ia de Ja va .................................................. 2
La pla t a for m a de Ja va ........................................ 3
En t or n os de de sa r r ollo pa r a Ja va ....................... 4
El pr oce so de e dición y com pila ción .................... 5
La codifica ción de pr ogr a m a s Ja va ..................... 6
El pr oce so de de sa r r ollo de soft w a r e .................. 6
2 . Est r uct ur a de un pr ogr a m a Ja va ................. 9
La e st r u ct u r a de u n pr ogr a m a Ja va .................... 9
Los e le m e n t os de u n pr ogr a m a Ja va ................. 1 3
Com ent arios ......................................................................... 14
I dent ificadores...................................................................... 14
Variables y valores ................................................................ 15
Tipos prim it ivos .................................................................... 17
Lit erales .............................................................................. 18
Operadores .......................................................................... 19
Expresiones.......................................................................... 21
Expresiones arit m ét ico- lógicas ................................................ 22
Conversión de t ipos ............................................................... 22
Las palabras reservadas de Java ............................................. 23

3 . Cla se s y obj e t os........................................ 2 5


Cla se s ............................................................... 2 6
Los e le m e n t os de u n a cla se .............................. 2 7
At ribut os.............................................................................. 27
Mét odos y const ruct ores ........................................................ 28
Represent ación de clases y obj et os .......................................... 32

Obj e t os ............................................................. 3 3
La referencia null .................................................................. 35
Referencias com part idas por varios obj et os............................... 36

i
El ciclo de vida de un obj et o ................................................... 39

At r ibu t os .......................................................... 4 0
M é t odos ............................................................ 4 1
Declaración de m ét odos ......................................................... 44
I nvocación de m ét odos .......................................................... 45
El m ét odo m ain( ) .................................................................. 47
Parám et ros y argum ent os ...................................................... 48
Paso de parám et ros............................................................... 50
El valor de ret orno ................................................................ 52
Las variables locales de un m ét odo .......................................... 52
Sobrecarga de m ét odos ......................................................... 53

Con st r u ct or e s ................................................... 5 4
4 . Ex t e nsión de cla se s .................................. 5 9
Com posición ..................................................... 5 9
H e r e n cia ........................................................... 6 4
Ext ensión de clases ............................................................... 64
Polim orfism o ........................................................................ 70

Com pa t ibilida d de t ipos .................................... 7 4


Conversión ascendent e de t ipos .............................................. 74
Conversión descendent e de t ipos............................................. 76
Jerarquía de herencia ............................................................ 77

5 . Am plia ción de cla se s ................................ 7 9


Ele m e n t os de cla se ( St a t ic) .............................. 7 9
D e r e ch os de a cce so .......................................... 8 0
Pa qu e t e s .......................................................... 8 3
Uso ..................................................................................... 83
Nom bres .............................................................................. 84

Cla se s pr e de fin ida s........................................... 8 5


Las clases asociadas a los t ipos prim it ivos ................................ 85
La clase Mat h ....................................................................... 86
La clase St ring ...................................................................... 87

6 . Est r uct ur a s de cont r ol .............................. 8 9


Est r u ct u r a s de se le cción ................................... 9 0

ii
Est ruct ura if ......................................................................... 90
Est ruct ura if else ................................................................... 91
Est ruct ura if else if ................................................................ 94
Est ruct ura swit ch .................................................................. 95
El operador condicional ........................................................ 101

Est r u ct u r a s de r e pe t ición ................................ 1 0 2


Est ruct ura while .................................................................. 103
Est ruct ura do- while ............................................................. 107
Est ruct ura for ..................................................................... 109
Uso de las est ruct uras de repet ición ....................................... 111

Est r u ct u r a s de sa lt o ........................................ 1 1 5
Sent encia break .................................................................. 115
Sent encia cont inue .............................................................. 115
Uso de break y cont inue....................................................... 115

7 . Est r u ct u r a s de a lm a ce na m ie nt o ............. 1 1 9
Ar r a ys............................................................. 1 1 9
Ar r a ys m u lt idim e n sion a le s ............................. 1 2 7
Uso de a r r a ys ................................................. 1 3 1
Bú squ e da bin a r ia e n a r r a ys or de n a dos ........... 1 4 1
Or de n a ción de a r r a ys ..................................... 1 4 4
El algorit m o de ordenación “ Bubble Sort ” ................................ 145
El m ét odo sort de la clase Arrays........................................... 149

Ar r a ys r e dim e n sion a ble s ................................ 1 5 3


Uso de a r r a ys r e dim e n sion a ble s ..................... 1 5 6
8 . Ent r a da y sa lida ...................................... 1 6 5
Los flu j os de Ja va ........................................... 1 6 5
En t r a da de da t os de sde e l t e cla do .................. 1 6 7
Le e r y e scr ibir e n fich e r os de t e x t o................. 1 6 9
Le e r y e scr ibir obj e t os e n fich e r os .................. 1 7 3

iii
An e x os
A. Ope r a dor e s de l le ngua j e Ja va ................ 1 7 9
Ope r a dor e s a r it m é t icos .................................. 1 7 9
Ope r a dor e s u n a r ios y com pu e st os .................. 1 7 9
Ope r a dor e s de r e la ción ................................... 1 8 1
Ope r a dor e s lógicos ......................................... 1 8 1
Or de n de pr e ce de n cia de los ope r a dor e s ........ 1 8 2
B. Re fe r e ncia s ............................................ 1 8 3
El le n gu a j e de pr ogr a m a ción Ja va .................. 1 8 3
El API de Ja va ................................................. 1 8 4
C. Glosa r io .................................................. 1 8 5

iv
1 . I n t r odu cción a Ja va

Los le n gu a j e s de pr ogr a m a ción


Los lenguaj es de program ación son idiom as art ificiales diseñados para
expresar cálculos y procesos que serán llevados a cabo por ordenadores. Un
lenguaj e de program ación est á form ado por un conj unt o de palabras
reservadas, sím bolos y reglas sint áct icas y sem ánt icas que definen su
est ruct ura y el significado de sus elem ent os y expresiones. El proceso de
program ación consist e en la escrit ura, com pilación y verificación del código
fuent e de un program a.

Ant es de diseñar un program a es necesario ent ender com plet am ent e el


problem a que querem os resolver y conocer las rest ricciones de operación de
la aplicación. La program ación es una t area com plej a y es m uy im port ant e
abordar la solución a un problem a específico desde un punt o de vist a
algorít m ico. Un algorit m o es un conj unt o ordenado y finit o de operaciones
que perm it e hallar la solución de un problem a. Est á definido por
inst rucciones o reglas bien definidas, ordenadas y finit as que perm it en
realizar una act ividad. Dado un est ado inicial, una ent rada y una secuencia
de pasos sucesivos, se llega a un est ado final y se obt iene una solución.

Para program ar de form a eficaz es necesario aprender a resolver problem as


de una form a sist em át ica y rigurosa. Solo se puede llegar a realizar un buen
program a si previam ent e se ha diseñado un algorit m o. Un algorit m o dará
lugar a un program a que puede codificarse en cualquier lenguaj e de
program ación.

Uno de los obj et ivos del curso de Fundam ent os de I nform át ica es que el
alum no desarrolle habilidades de análisis y diseño de algorit m os sim ples
que le puedan ser de ut ilidad en el fut uro. Es im port ant e t ener nociones
básicas de program ación porque est o perm it irá ent ender y diseñar procesos
básicos en lenguaj es de uso general com o Java y t am bién en aplicaciones
inform át icas de uso com ún en la ingeniería o el diseño. En la act ualidad la
m ayoría de las aplicaciones que ut ilizam os a diario ofrecen posibilidades de
program ación. Est o facilit a el diseño de pequeñas aplicaciones para
aut om at izar t areas de uso cot idiano.

1
I n t r odu cción a Ja va

H ist or ia de Ja va
Java es un lenguaj e de program ación desarrollado por Sun Microsyst em s.
Java fue present ado en la segunda m it ad del año 1995 y desde ent onces se
ha convert ido en un lenguaj e de program ación m uy popular. Java es un
lenguaj e m uy valorado porque los program as Java se pueden ej ecut ar en
diversas plat aform as con sist em as operat ivos com o Windows, Mac OS,
Linux o Solaris. Jam es Gosling, el direct or del equipo de t rabaj o encargado
de desarrollar Java, hizo realidad la prom esa de un lenguaj e independient e
de la plat aform a. Se buscaba diseñar un lenguaj e que perm it iera program ar
una aplicación una sola vez que luego pudiera ej ecut arse en dist int as
m áquinas y sist em as operat ivos. Para conseguir la port abilidad de los
program as Java se ut iliza un ent orno de ej ecución para los program as
com pilados. Est e ent orno se denom ina Java Runt im e Environm ent ( JRE) . Es
grat uit o y est á disponible para los principales sist em as operat ivos. Est o
asegura que el m ism o program a Java pueda ej ecut arse en Window s, Mac
OS, Linux o Solaris.

“ Writ e Once, Run Anyware” , que podría t raducirse com o “ program ar una
sola vez y después ej ecut ar los program as en cualquier sist em a operat ivo” ,
era el obj et ivo del equipo de desarrollo de Java. Est a idea resum e el
concept o de port abilidad. Los program as Java son port ables, es decir,
independient es de la plat aform a, porque pueden ej ecut arse en cualquier
ordenador o disposit ivo m óvil, independient em ent e del sist em a operat ivo
que t engan inst alado: Un program a Java puede ej ecut arse en un ordenador
de m esa, un ordenador port át il, una t ablet a, un t eléfono, un reproduct or de

2
Fu nda m e nt os de pr ogr a m a ción e n Ja va

m úsica o en cualquier ot ro disposit ivo m óvil con cualquier sist em a


operat ivo.

La pla t a for m a de Ja va
Los program as Java se com pilan a un lenguaj e int erm edio, denom inado
Byt ecode. Est e código es int erpret ado por la m áquina virt ual de Java del
ent orno de ej ecución ( JRE) y así se consigue la port abilidad en dist int as
plat aform as. El JRE es una pieza int erm edia ent re el código Byt ecode y los
dist int os sist em as operat ivos exist ent es en el m ercado. Un program a Java
com pilado en Byt ecode se puede ej ecut ar en sist em as operat ivos com o
Window s, Linux, Mac Os, Solaris, BlackBerry OS, iOs o Android ut ilizando el
ent orno de ej ecución de Java ( JRE) apropiado.

Una de las caract eríst icas m ás im port ant es de los lenguaj es de


program ación m odernos es la port abilidad. Com o se ha com ent ado ant es,
un program a es port able cuando es independient e de la plat aform a y puede
ej ecut arse en cualquier sist em a operat ivo y disposit ivo físico. Los
program as Java son port ables porque se ej ecut an en cualquier plat aform a.
Sucede algo parecido con las fot ografías o los ficheros PDF. Las fot ografías
con form at o JPEG son port ables porque un archivo JPEG lo podem os
visualizar con dist int os visores de fot os y en disposit ivos com o ordenadores,
t ablet as o t eléfonos. El form at o JPEG es un est ándar para alm acenar
archivos de im agen. Todas las im ágenes JPEG t ienen el m ism o form at o y los
visores de fot os est án diseñados para m ost rar las im ágenes con est e
form at o. De form a sim ilar, los archivos PDF ( Port able Docum ent Form at )
son port ables. El form at o PDF fue desarrollado por Adobe Syst em s con la
idea de que est os archivos se puedan ver en cualquier disposit ivo que t enga
inst alado Adobe Acrobat Reader, el soft ware de visualización de docum ent os
PDF.

La port abilidad de Java ha cont ribuido a que m uchas em presas hayan


desarrollado sus sist em as de com ercio elect rónico y sus sist em as de
inform ación en I nt ernet con Java. El proceso de desarrollo y de
m ant enim ient o de los sist em as result a m enos cost oso y las aplicaciones son
com pat ibles con dist int os sist em as operat ivos.

La evolución del lenguaj e de program ación Java ha sido m uy rápida. La


plat aform a de desarrollo de Java, denom inada Java Developm ent Kit ( JDK) ,
se ha ido am pliando y cada vez incorpora a un núm ero m ayor de
program adores en t odo el m undo. En realidad Java no solo es un lenguaj e
de program ación. Java es un lenguaj e, una plat aform a de desarrollo, un
ent orno de ej ecución y un conj unt o de librerías para desarrollo de

3
I n t r odu cción a Ja va

program as sofist icados. Las librerías para desarrollo se denom inan Java
Applicat ion Program m ing I nt erface ( Java API ) .

El siguient e esquem a m uest ra los elem ent os de la plat aform a Java, desde el
código fuent e, el com pilador, el API de Java, los program as com pilados en
Byt ecode y el ent orno de ej ecución de Java. Est e ent orno de ej ecución ( JRE)
y la m áquina virt ual ( JVM) perm it en que un program a com pilado Java se
ej ecut e en dist int os sist em as operat ivos.

En t or n os de de sa r r ollo pa r a Ja va
Exist en dist int os ent ornos de desarrollo de aplicaciones Java. Est e t ipo de
product os ofrecen al program ador un ent orno de t rabaj o int egrado para
facilit ar el proceso com plet o de desarrollo de aplicaciones, desde el diseño,
la program ación, la docum ent ación y la verificación de los program as. Est os
product os se denom inan I DE ( I nt egrat ed Developm ent Environm ent ) .

Exist en ent ornos de dist ribución libre com o: Net Beans, Eclipse o BlueJ.
Ent re los product os com erciales est án JBuilder o JCreat orPro.

4
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Para ut ilizar un ent orno de desarrollo es necesario inst alar el Java Runt im e
Environm ent ( JRE) apropiado para el sist em a operat ivo. El JRE se descarga
de la página de Oracle Java.

El pr oce so de e dición y com pila ción


En Java, al igual que en ot ros lenguaj es de program ación, se sigue el
siguient e proceso: edición del código fuent e, com pilación y ej ecución. Los
program as Java se desarrollan y se com pilan para obt ener un código
denom inado Byt ecode que es int erpret ado por una m áquina virt ual de Java
( Java Virt ual Machine) .

La edición del program a fuent e se realiza escribiendo el program a Java en


un edit or de t ext o com o el Bloc de not as o ut ilizando un ent orno int egrado
de desarrollo. El código fuent e se alm acena en un fichero de t ipo .j ava.

La com pilación se realiza con el com pilador Java j avac o ut ilizando un


ent orno int egrado de desarrollo. Durant e el proceso de com pilación se
verifica que el código fuent e cum ple la definición léxica, sint áct ica y
sem ánt ica de Java. Est o significa que el com pilador com prueba que el
código fuent e se com pone de palabras válidas en Java y que los com andos
Java t ienen la form a sint áct ica correct a. Si durant e el proceso de
com pilación el com pilador det ect a los errores que ha com et ido el
program ador y le inform a de los problem as que ha encont rado para que
pueda corregirlos. Si durant e la com pilación no se det ect an errores, se
genera un fichero de t ipo class en Byt ecode. Una vez finalizado el proceso
de com pilación se puede ej ecut ar el program a. Para est o, es necesario que
la m áquina virt ual de Java int erpret e el código Byt ecode y ej ecut e la
aplicación.

5
I n t r odu cción a Ja va

La codifica ción de pr ogr a m a s Ja va


El est ilo de program ación o codificación de los program as Java es m uy
im port ant e. La legibilidad de un program a det erm ina en buena m edida que
se haya desarrollado correct am ent e y que el product o final sea eficient e.

Legibilidad > Corrección > Eficiencia

Le gibilida d. Un program a Java debe ser fácil de leer y ent ender, incluso
para una persona que no ha part icipado en el desarrollo del program a. La
legibilidad es un aspect o m uy im port ant e porque facilit a el m ant enim ient o
del soft w are, la corrección de errores o la m odificación de la funcionalidad
de la aplicación con m enor cost e.

Cor r e cción. Un program a debe hacer lo que debe hacer, ni m ás, ni m enos.
Est o es lo que se ent iende por corrección. Un program a debe cum plir
rigurosam ent e los requisit os funcionales y t écnicos de la fase de
especificación. Durant e la fase de prueba se verifica que el program a
funciona correct am ent e y que cum ple los requisit os t écnicos y funcionales.

Eficie n cia . La eficiencia se refiere al t iem po que un program a t arda en


ej ecut arse y a los recursos que consum e. Cuant o m ás rápido sea un
program a y ut ilice m enos m em oria o disco duro, el diseño es m ej or. La
eficiencia no es un problem a que deba at ender cuando se aprende a
program ar. Ahora lo m ej or es ut ilizar los m ecanism os de opt im ización
propios de los com piladores. La eficiencia se debe analizar solo cuando un
program a funciona correct am ent e y cum ple con los requisit os t écnicos
definidos.

El pr oce so de de sa r r ollo de soft w a r e


El proceso de desarrollo de los program as Java no difiere de la m ayoría de
los lenguaj es de program ación. Es necesario seguir un conj unt o de pasos
para desarrollar correct am ent e un product o soft ware.

La I ngeniería del Soft ware est udia los dist int os procesos de desarrollo de
soft w are. El I EEE define I ngeniería del Soft ware com o la aplicación
sist em át ica, disciplinada y cuant ificable de un proceso de desarrollo,
operación y m ant enim ient o de un product o soft ware.

6
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El proceso clásico de desarrollo de soft ware es am pliam ent e ut ilizado por su


sencillez. Est e proceso se com pone de las siguient es fases: especificación,
diseño, codificación, prueba y m ant enim ient o.

Espe cifica ción. En est a fase se decide la funcionalidad, las caract eríst icas
t écnicas de una aplicación y sus condiciones de uso. En est a fase es
necesario responder a las siguient es pregunt as:

 ¿Para qué se va a ut ilizar la aplicación?

 ¿Cuáles son las necesidades funcionales de los usuarios?

 ¿Cuál es el perfil de los usuarios de la aplicación?

 ¿En qué plat aform a se ej ecut ará la aplicación?

 ¿Cuáles son sus condiciones de operación?

 ¿Cóm o se va a ut ilizar?

D ise ñ o. En est a fase se ut iliza t oda la inform ación recogida en la fase de


especificación y se propone una solución que responda a las necesidades del
usuario y se pueda desarrollar. En est a fase se define la arquit ect ura de la
aplicación. Es necesario det allar la est ruct ura y la organización del
program a y cóm o se relacionan las dist int as part es de la aplicación.

Codifica ción. Est a fase consist e en la program ación en Java de las


especificaciones de diseño de la fase ant erior. Durant e est a fase de
codificación o im plem ent ación se aplican norm as de program ación para
facilit ar la legibilidad de los program as Java.

Pr u e ba . En est a fase se com pila y se ej ecut a la aplicación para verificar


que cum ple con los requisit os funcionales y t écnicos definidos en la fase de
especificación. Si el program a no cum ple con t odos los requisit os, se puede
deber a errores de diseño o de program ación. En t al caso, es necesario
corregir los errores que se hayan det ect ado y repet ir de nuevo el proceso de
diseño y codificación. Durant e la fase de prueba se verifica que la aplicación
cum ple con los crit erios de calidad est ablecidos en el proyect o: facilidad de
uso, corrección, eficiencia, int egridad, fiabilidad, flexibilidad, facilidad de
m ant enim ient o, facilidad de prueba, port abilidad, capacidad de reut ilización
e int eroperabilidad.

Una vez que la aplicación se ha probado y cum ple con los requisit os
est ablecidos, ent onces se pone en funcionam ient o y com ienza la fase de
operación para que sea ut ilizada para el fin con el que ha sido desarrollada.

7
I n t r odu cción a Ja va

M a n t e n im ie n t o. Una vez que la aplicación se ha puest o en operación da


com ienzo la fase de m ant enim ient o. En est a fase se corrigen errores de
funcionam ient o de la aplicación, se m odifica la funcionalidad o se añaden las
nuevas funcionalidades que dem andan los usuarios. La fase de
m ant enim ient o es la de m ayor duración, pues pueden pasar m uchos años
desde el inicio de la operación hast a que el product o es ret irado.

8
2 . Est r u ct u r a de u n pr ogr a m a Ja va

Un program a describe cóm o un ordenador debe int erpret ar las órdenes del
program ador para que ej ecut e y realice las inst rucciones dadas t al com o
est án escrit as. Un program ador ut iliza los elem ent os que ofrece un lenguaj e
de program ación para diseñar program as que resuelvan problem as
concret os o realicen acciones bien definidas.

El siguient e program a Java m uest ra un m ensaj e en la consola con el t ext o


“ Hola Mundo” .

/*
* Este programa escribe el texto "Hola Mundo" en la consola
* utilizando el método System.out.println()
*/

public class HolaMundo {

public static void main (String[] args) {


System.out.println("Hola Mundo");
}

La e st r u ct u r a de u n pr ogr a m a Ja va
En est e program a se pueden ident ificar los siguient es elem ent os del
lenguaj e Java: com ent arios, definiciones de clase, definiciones de m ét odo y
sent encias.

Com e n t a r io. El program a com ienza con un com ent ario. El delim it ador de
inicio de un com ent ario es / * y el delim it ador de fin de com ent ario es * / . El
t ext o del prim er com ent ario de est e ej em plo sería: ‘Est e program a escribe
el t ext o “ Hola Mundo” en la consola ut ilizando el m ét odo
Syst em .out .print ln( ) '. Los com ent arios son ignorados por el com pilador y
solo son út iles para el program ador. Los com ent arios ayudan a explicar
aspect os relevant es de un program a y lo hacen m ás legible. En un
com ent ario se puede escribir t odo lo que se desee, el t ext o puede ser de
una o m ás líneas.

9
Est r u ct u r a de u n pr ogr a m a Ja va

D e fin ición de cla se . La prim era línea del program a, después del prim er
com ent ario. Define una clase que se llam a HolaMundo. La definición de la
clase com ienza por el caráct er { y t erm ina con el caráct er } . El nom bre de
la clase lo define el program ador.

D e fin ición de m é t odo. Después de la definición de clase se escribe la


definición del m ét odo main(). Todos los program as Java deben incluir un
m ét odo main(). Est e m ét odo indica las sent encias a realizar cuando se
ej ecut a un program a. Un m ét odo es una secuencia de sent encias
ej ecut ables. Las sent encias de un m ét odo quedan delim it adas por los
caract eres { y } que indican el inicio y el fin del m ét odo, respect ivam ent e.

Se n t e n cia . Dent ro del m ét odo main() se incluye una sent encia para
m ost rar un t ext o por la consola. Los t ext os siem pre se escriben ent re
com illas dobles para diferenciarlos de ot ros elem ent os del lenguaj e. Todas
las sent encias de un program a Java deben t erm inar con el sím bolo punt o y
com a. Est e sím bolo indica al com pilador que ha finalizado una sent encia.

Una vez que el program a se ha edit ado, es necesario com pilarlo y ej ecut arlo
para com probar si es correct o. Al finalizar el proceso de com pilación, el
com pilador indica si hay errores en el código Java, dónde se encuent ran y el
t ipo de error que ha det ect ado: léxico, sint áct ico o sem ánt ico.

/* Este programa calcula el perímetro de una circunferencia */

public class PerimetroCircunferencia {


public static void main (String[] args) {

// declaración de PI y la variables radio y perimetro

final double PI = 3.1415926536;


double radio = 25.0, perimetro;

perimetro = 2.0*PI*radio;
System.out.print("El perimetro de la circunferencia de radio ");
System.out.print(radio);
System.out.print(" es ");
System.out.print(perimetro);

}
}

10
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En un program a Java las sent encias se ej ecut an secuencialm ent e, una


det rás de ot ra en el orden en que est án escrit as.

En est e ej em plo se puede ver que dent ro del m ét odo main() se incluye un
com ent ario de una sola línea que com ienza con / / . A cont inuación se
declaran las variables PI, radio y perimetro, t odas ellas de t ipo double
porque alm acenan núm eros reales. PI represent a un valor const ant e, por lo
que es necesario ut ilizar el delim it ador final y asignarle el valor
3.1415926536 correspondient e al núm ero pi.

Después de las declaraciones, se asigna el valor 25.0 a la variable radio y


se calcula el perím et ro. Finalm ent e, se m uest ra el result ado del cálculo del
perím et ro para una circunferencia de radio 25.

En est e ej em plo se ut ilizan variables num éricas de t ipo double. Cada


variable alm acena un núm ero real. La part e ent era del núm ero se separa de
los decim ales con un punt o, no con una com a. Est a es una caract eríst ica de
Java que se debe t ener en cuent a, de lo cont rario, el com pilador no
ent iende que se t rat a de un núm ero real.

El valor 25.0 alm acenado en la variable radio es una m agnit ud para la que
no se indican sus unidades. El program ador es responsable de que los
cálculos se realicen correct am ent e y de realizar la conversión de unidades
cuando sea necesario.

Para escribir un m ensaj e por la consola se ut ilizan los m ét odos


System.out.print() y System.out.println(). Para escribir un
m ensaj e sin salt ar a la línea siguient e se ut iliza System.out.print(),
System.out.println() escribe un m ensaj e y da un salt o de línea.

¿Qué hace el siguient e código Java?

System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");

En est e ej em plo se escribe el t ext o “ Hola Mundo” en la consola.

Hola Mundo

11
Est r u ct u r a de u n pr ogr a m a Ja va

¿Qué pasaría si se om it iera la segunda línea de código?,

System.out.print("Hola");
System.out.print("Mundo");

En est e caso se escribiría “ HolaMundo” sin el espacio de separación ent re


las dos palabras.

HolaMundo

Si en vez de ut ilizar el m ét odo System.out.print() se ut iliza el m ét odo


System.out.println(), ent onces el m ensaj e se escribe en dos líneas
dist int as.

System.out.println("Hola");
System.out.println("Mundo");

En est e ej em plo, se escribiría “ Hola” y “ Mundo” en dos líneas.

Hola
Mundo

Com binando el uso de los m ét odos System.out.print() y


System.out.println() se puede escribir cualquier m ensaj e en la consola
salt ando de línea cuando sea necesario. Adem ás, am bos m ét odos perm it en
ut ilizar el operador + para concat enar t ext os.

El siguient e código Java escribe “ Hola Mundo” en la consola.

System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");

12
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En est e caso se ej ecut an t res m ét odos System.out.print(). Est e código


se puede sim plificar ut ilizando un solo m ét odo System.out.print() y el
operador + para concat enar los t ext os “ Hola” , “ ” y “ Mundo” .

System.out.print("Hola" + " " + "Mundo");

Tam bién se puede escribir direct am ent e el m ensaj e “ Hola Mundo” . El


result ado es el m ism o y el código es m ás claro.

System.out.print("Hola Mundo");

Para m ost rar por la consola un t ext o seguido del valor alm acenado de una
variable se puede ej ecut ar dos veces el m ét odo System.out.print():

System.out.print("El perímetro es ");


System.out.print(perimetro);

Est e código se puede sim plificar ut ilizando el operador + para concat enar el
t ext o “ El perím et ro es ” con el valor alm acenado en la variable perimetro.

System.out.print("El perímetro es " + perimetro);

En am bos casos el result ado es el m ism o. Por ej em plo, si el valor


alm acenado en la variable perimetro fuera 157.08 la salida por la consola
sería:

El perímetro es 157.08

Los e le m e n t os de u n pr ogr a m a Ja va
A cont inuación se describe la definición léxica y sint áct ica de los elem ent os
de un program a Java: com ent arios, ident ificadores, variables y valores,
t ipos prim it ivos, lit erales, operadores, expresiones y expresiones arit m ét ico-
lógicas.

13
Est r u ct u r a de u n pr ogr a m a Ja va

Com e n t a r ios

En un program a Java hay t res t ipos de com ent arios.

Com e n t a r io de bloqu e . Em pieza por / * y t erm ina por * / . El com pilador


ignora t odo el t ext o cont enido dent ro del com ent ario.

/*
* El programa HolaMundo se utiliza para aplicar los
* métodos System.out.print() y System.out.println()
*/

Com e n t a r io de docu m e n t a ción. Em pieza por / * * y t erm ina por * / . Java


dispone de la herram ient a javadoc para docum ent ar aut om át icam ent e los
program as. En un com ent ario de docum ent ación norm alm ent e se indica el
aut or y la versión del soft ware.

/**
* Programa HolaMundo
* @author Fundamentos de Informática
* @version 1.0
* @see Referencias
*/

Com e n t a r io de lín e a . Em pieza con / / . El com ent ario com ienza con est os
caract eres y t erm ina al final de la línea.

// El método System.out.println() salta la línea

El uso de com ent arios hace m ás claro y legible un program a. En los


com ent arios se debe decir qué se hace, para qué y cuál es el fin de nuest ro
program a. Conviene ut ilizar com ent arios siem pre que m erezca la pena
hacer una aclaración sobre el program a.

I de n t ifica dor e s

El program ador t iene libert ad para elegir el nom bre de las variables, los
m ét odos y de ot ros elem ent os de un program a. Exist en reglas m uy est rict as

14
Fu nda m e nt os de pr ogr a m a ción e n Ja va

sobre los nom bres que se ut ilizan com o ident ificadores de clases, de
variables o de m ét odos.

Todo ident ificador debe em pezar con una let ra que puede est ar seguida de
m ás let ras o dígit os. Una let ra es cualquier sím bolo del alfabet o y el
caráct er ‘_’. Un dígit o es cualquier caráct er ent re ‘0’ y ‘9’.

Los ident ificadores Hola, hola, numero, numeroPar, numeroImpar,


numero_impar, numero_par, nombre, apellido1 y apellido2 son
válidos. El ident ificador 1numero no es válido porque em pieza con un dígit o,
no con una let ra.

Cualquier ident ificador que em piece con una let ra seguida de m ás let ras o
dígit os es válido siem pre que no form e part e de las palabras reservadas del
lenguaj e Java. El lenguaj e Java dist ingue ent re let ras m ayúsculas y
m inúsculas, est o significa que los ident ificadores numeroPar y numeropar
son dist int os.

Exist en unas norm as básicas para los ident ificadores que se deben respet ar.

 Los nom bres de variables y m ét odos em piezan con m inúsculas. Si se


t rat a de un nom bre com puest o cada palabra debe em pezar con
m ayúscula y no se debe ut ilizar el guión baj o para separar las palabras.
Por ej em plo, los ident ificadores calcularSueldo, setNombre o
getNombre son válidos.

 Los nom bres de clases em piezan siem pre con m ayúsculas. En los
nom bres com puest os, cada palabra com ienza con m ayúscula y no se
debe ut ilizar el guión baj o para separar las palabras. Por ej em plo,
HolaMundo, PerimetroCircunferencia, Alumno o Profesor son
nom bres válidos.

 Los nom bres de const ant es se escriben en m ayúsculas. Para nom bres
com puest os se ut iliza el guión baj o para separar las palabras. Por
ej em plo, PI, MINIMO, MAXIMO o TOTAL_ELEMENTOS son nom bres
válidos.

Va r ia ble s y va lor e s

Un program a Java ut iliza variables para alm acenar valores, realizar cálculos,
m odificar los valores alm acenados, m ost rarlos por la consola, alm acenarlos
en disco, enviarlos por la red, et c. Una variable alm acena un único valor.

15
Est r u ct u r a de u n pr ogr a m a Ja va

Una variable se define por un nom bre, un t ipo y el rango de valores que
puede alm acenar.

El nom bre de una variable perm it e hacer referencia a ella. Est e nom bre
debe cum plir las reglas aplicables a los ident ificadores. El t ipo indica el
form at o de los valores que puede alm acenar la variable: cadenas de
caract eres, valores lógicos, núm eros ent eros, núm eros reales o t ipos de
dat os com plej os. El rango indica los valores que puede t om ar la variable.

Por ej em plo, una variable de t ipo núm ero ent ero, con nom bre
mesNacimiento puede alm acenar valores posit ivos y negat ivos, lo que no
t iene sent ido cuando se t rat a de m eses del año. El rango válido para est a
variable sería de 1 a 12.

Para declarar una variable en Java se indica el t ipo y su nom bre.

int mesNacimiento;

En est e ej em plo se indica que la variable es de t ipo ent ero (int) y su


nom bre es mesNacimiento. Una vez declarada una variable, se puede
ut ilizar en cualquier part e del program a referenciándola por su nom bre.
Para alm acenar un valor en una variable se ut iliza el operador de asignación
y a cont inuación se indica el valor, por ej em plo 2.

mesNacimiento = 2;

A part ir de est e m om ent o la variable mesNacimiento alm acena el valor 2 y


cualquier referencia a ella ut iliza est e valor. Por ej em plo, si se im prim e el
valor de la variable por la consola, m uest ra el valor 2.

System.out.print(mesNacimiento);

Java perm it e declarar e inicializar una variable en una sola sent encia.

int diaNacimiento = 20;


int mesNacimiento = 3;

16
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En est e ej em plo se declaran las variables diaNacimiento con el valor 20 y


mesNacimiento con valor 3.

Si se declara una const ant e, ent onces se debe ut ilizar el delim it ador final
y es necesario indicar su valor. En la siguient e declaración se define el valor
de la const ant e pi de t ipo double para alm acenar un núm ero real.

final double PI = 3.1415926536;

Es convenient e ut ilizar nom bres apropiados para las variables. El nom bre de
una variable debe indicar para qué sirve. El nom bre de una variable debe
explicarse por sí m ism o para m ej orar la legibilidad del program a.

Si se desea declarar m ás de una variable a la vez se deben separar las


variables en la sent encia de la declaración.

int dia=20, mes=2, año=2020;

En est e ej em plo se declaran las variables ent eras dia, mes y año. La
variable día se inicializa con el valor 20, mes con 2 y año con 2020. La
siguient e declaración es equivalent e a la ant erior.

int dia=20;
int mes=2;
int año=2020;

Tipos pr im it ivos

Las variables de j ava pueden ser de un t ipo prim it ivo de dat os o una
referencia a un obj et o. Los t ipos prim it ivos perm it en represent ar valores
básicos. Est os t ipos se clasifican en núm eros ent eros, núm eros reales,
caract eres y valores booleanos.

N ú m e r os e n t e r os. Represent an núm eros ent eros posit ivos y negat ivos con
dist int os rangos de valores, desde cient os a t rillones. Los t ipos ent eros de
Java son byte, int, short y long.

17
Est r u ct u r a de u n pr ogr a m a Ja va

N ú m e r os r e a le s. Exist en dos t ipos de núm eros reales en Java, float y


double. La diferencia ent re ellos est á en el núm ero de decim ales que
t ienen capacidad para expresar y en sus rangos de valores.

Ca r a ct e r e s. El t ipo char perm it e represent ar cualquier caráct er Unicode.


Los caract eres Unicode cont ienen t odos los caract eres del alfabet o de la
lengua cast ellana.

Boole a n o. Se ut iliza para represent ar los valores lógicos verdadero y falso.


Solo t iene dos valores true y false.

La siguient e t abla resum e los t ipos prim it ivos de Java.

Tipo Descripción Valor m ínim o y m áxim o

byt e Ent ero con signo - 128 a 127

short Ent ero con signo - 32768 a 32767

int Ent ero con signo - 2147483648 a 2147483647

- 922117036854775808 a
long Ent ero con signo
+ 922117036854775807

± 3.40282347e+ 38 a
float Real de precisión sim ple
± 1.40239846e- 45

± 1.7976931348623157e+ 309 a
double Real de precisión doble
± 4.94065645841246544e- 324

char Caract eres Unicode \ u0000 a \ uFFFF

boolean Valores lógicos t rue, false

Lit e r a le s

Se denom ina lit eral a la m anera en que se escriben los valores para cada
uno de los t ipos prim it ivos.

N ú m e r os e n t e r os. Un núm ero ent ero en Java se puede escribir en


decim al, oct al o en hexadecim al. Cuando se ut iliza el sist em a oct al es
necesario poner el dígit o 0 delant e del núm ero. Si se ut iliza el sist em a
hexadecim al se debe poner 0x delant e del núm ero. Por ej em plo, el núm ero
decim al 10 se puede escribir 012 en oct al y 0xA en hexadecim al. Los
núm eros ent eros se supone que pert enecen al t ipo int.

18
Fu nda m e nt os de pr ogr a m a ción e n Ja va

N ú m e r os r e a le s. Un núm ero real en Java siem pre debe t ener un punt o


decim al o un exponent e. Por ej em plo, el núm ero 0.25 se puede expresar
t am bién com o 2.5e- 1. Los núm eros reales se supone que pert enecen al t ipo
double.

Boole a n os. Los valores lógicos solo pueden ser true y false. Se escriben
siem pre en m inúsculas.

Ca r a ct e r e s. Los valores de t ipo caráct er represent an un caráct er Unicode.


Se escriben siem pre ent re com illas sim ples, por ej em plo 'a', 'A', '0', '9'. En
Java un caráct er se puede expresar por su código de la t abla Unicode en
oct al o en hexadecim al. Los caract eres que t ienen una represent ación
especial se indican en la siguient e t abla.

Caráct er Significado

\b Ret roceso

\t Tabulador

\n Salt o de línea

\r Cam bio de línea

\" Caráct er com illa doble

\' Caráct er com illa sim ple

\\ Caráct er barra hacia at rás

Te x t os. Un t ext o en Java pert enece a la clase String y se expresa com o el


t ext o ent re com illas dobles. Un t ext o siem pre debe aparecer en una sola
línea. Para dividir un t ext o en varias líneas se debe ut ilizar el operador +
para concat enar t ext os.

Un t ext o puede est ar vacío o cont ener uno o m ás caract eres. Por ej em plo,
“ Hola Mundo” es un t ext o de 10 caract eres, m ient ras que “ ” es un t ext o
vacío y t iene 0 caract eres. El t ext o “ a” es diferent e del caráct er 'a' de t ipo
char.

Ope r a dor e s

Cada t ipo puede ut ilizar det erm inados operadores para realizar operaciones
o cálculos.

19
Est r u ct u r a de u n pr ogr a m a Ja va

N ú m e r os e n t e r os. Al realizar una operación ent re dos núm eros ent eros, el
result ado siem pre es un núm ero ent ero. Con los núm eros ent eros se
pueden realizar operaciones unarias, adit ivas, m ult iplicat ivas, de increm ent o
y decrem ent o, relacionales, de igualdad y de asignación.

 Una operación unaria perm it e poner un signo delant e: + 5, - 2.

 Una operación adit iva se refiere a la sum a y la rest a: 2+ 3, 5- 2.

 Una operación m ult iplicat iva m ult iplica o divide dos valores: 5* 2, 5/ 2. El
operador % calcula el rest o de la división ent era 5% 2.

 Un increm ent o o decrem ent o aum ent a o decrem ent a en 1 el valor de


una variable: + + num ero, num ero+ + , - - num ero, num ero- - . Si el
operador va ant es de la variable, prim ero se realiza la operación y se
m odifica el valor de la variable. Si el operador va después de la variable,
su valor se m odifica al final.

 Un operador relacional perm it en com parar dos valores: > , < , > = y < = .
El result ado de la com paración es un valor booleano que indica si la
relación es verdadera o falsa.

 Un operador de igualdad com para si dos valores son iguales o no. El


operador = = devuelve verdadero si los dos valores son iguales, el
operador ! = devuelve verdadero si son diferent es. El result ado de la
com paración es un valor booleano que indica si la igualdad o desigualdad
es verdadera o falsa.

 Un operador de asignación perm it e asignar un valor o el result ado de


una operación a una variable: = , + = , - = , * = , / = , % = .

N ú m e r os r e a le s. Con los núm eros reales se aplican los m ism os operadores


que con los núm eros ent eros. Si se realizan operaciones unarias, adit ivas o
m ult iplicat ivas, el result ado es un núm ero real. Tam bién se pueden aplicar
los operadores relacionales para com parar dos núm eros reales.

Boole a n os. Los operadores que se aplican a los valores lógicos son:
negación, Y lógico, O lógico.

 La negación ( ! ) devuelve true si el operando es false.

 El Y lógico ( &&) devuelve false si uno de los operandos es false.

 El O lógico ( | | ) devuelve true si uno de los operandos es true.

20
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ex pr e sion e s

Una expresión perm it e realizar operaciones ent re valores ut ilizando dist int os
operadores. Las expresiones son út iles para represent ar las fórm ulas
m at em át icas que se ut ilizan para realizar cálculos.

En Java se pueden definir expresiones t an com plej as com o sea necesario.


Por ej em plo, para convert ir una t em perat ura de grados Fahrenheit a
Cent ígrados se ut iliza la fórm ula:

C = ((F – 32) * 5) / 9

En est e ej em plo C represent a la t em perat ura en grados cent ígrados y F en


grados Fahrenheit . La fórm ula en Java, ut ilizando las variables
centigrados y fahrenheit de t ipo double.

centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;

Toda la expresión se evalúa a un valor. El orden de los cálculos depende del


orden de prioridad de los operadores: prim ero los operadores unarios,
después los m ult iplicat ivos, de izquierda a derecha, después los operadores
adit ivos, de izquierda a derecha, después los operadores de relación y por
últ im o los operadores de asignación.

Por ej em plo, la expresión x = - 3 + 2 * 4 – 12 / 6 + 5 se calcula en el orden


siguient e:

Prim ero se aplica el operador unario ( - ) a 3 y se obt iene - 3. A cont inuación


se evalúan los operadores m ult iplicat ivos de izquierda a derecha. Se calcula
el product o de 2 * 4 y se obt iene 8, después se divide 12 / 6 y se obt iene 2.
Al finalizar est as operaciones la expresión queda x = - 3 + 8 – 2 + 5. Por
últ im o, se evalúan los operadores adit ivos de izquierda a derecha y se
obt iene 8.

Cuando se desea m odificar el orden de prioridad de los operadores es


necesario ut ilizar parént esis para indicar el orden de evaluación. Por
ej em plo, al calcular el valor de y = - 3 + 2 * ( 14 – 2) / 6 + 5 se obt iene 6.

21
Est r u ct u r a de u n pr ogr a m a Ja va

Ex pr e sion e s a r it m é t ico- lógica s

Una expresión arit m ét ico- lógica devuelve un valor lógico verdadero o falso.
En est e t ipo de expresiones se ut ilizan operadores arit m ét icos, operadores
relacionales y de igualdad. Por ej em plo, una expresión lógica puede ser:

(10 – 2) > (5 – 3)

En est e ej em plo la expresión arit m ét ico- lógica es verdadera porque el lado


derecho de la expresión es m ayor que el lado izquierdo.

En una expresión arit m ét ico- lógica se pueden com binar varias expresiones
con operadores lógicos. La precedecencia de los operadores lógicos es
m enor que la de los operadores relacionales, por lo que prim ero se evalúan
las desigualdades y después los operadores lógicos. El orden de prioridad de
los operadores lógicos es el siguient e: prim ero la negación, después el Y
lógico y por últ im o el O lógico. La prioridad de los operadores de asignación
es la m enor de t odas.

Por ej em plo, la expresión 3 + 5 < 5 * 2 | | 3 > 8 && 7 > 6 – 2 se evalúa en


el orden siguient e.

Prim ero se evalúan las expresiones arit m ét icas y se obt iene la expresión
lógica 8 < 10 | | 3 > 8 && 7 > 4. A cont inuación se evalúan los operadores
relacionales y se obt iene true | | false && true. Ahora se evalúa el
operador Y lógico con los operandos false && true y se obt iene false.
Por últ im o, se evalúa el operador O lógico con los operandos true | | false
y se obt iene true, el valor final de la expresión.

Los operadores lógicos && y | | se evalúan por cort ocircuit o. Est o significa
que al evaluar a && b, si a es falso, no es necesario evaluar b porque la
expresión es falsa. De form a sim ilar, al evaluar a | | b, si a es verdadero, no
es necesario evaluar b porque la expresión es verdadera.

Con ve r sión de t ipos

Muchas veces es necesario realizar conversiones de t ipos cuando se evalúa


una expresión arit m ét ica. Por ej em plo, si después de realizar el cálculo de
conversión de grados Fahrenheit a Cent ígrados se quiere alm acenar el
result ado en la variable de t ipo ent ero temperatura, es necesario hacer

22
Fu nda m e nt os de pr ogr a m a ción e n Ja va

una conversión de t ipos. La fórm ula en Java, ut ilizando las variables


centigrados y fahrenheit de t ipo double.

centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;

Ant es de asignar el valor result ant e a la variable temperatura, que


alm acena un valor ent ero, es necesario convert ir el valor de t ipo double de
la variable centigrados a int.

int temperatura = (int) centigrados;

La s pa la br a s r e se r va da s de Ja va

En t odos los lenguaj es de program ación exist en palabras con un significado


especial. Est as palabras son reservadas y no se pueden ut ilizar com o
nom bres de variables.

abstract final public


assert finally return
boolean float short
break for static
byte if strictfp
case implements super
catch import switch
char instanceof synchronized
class int this
continue interface throw
default long throws
do native transient
double new true
else null try
enum package void
extends private volatile
false protected while

23
Est r u ct u r a de u n pr ogr a m a Ja va

En realidad, las palabras false, null y true son lit erales. No son palabras
reservadas del lenguaj e, pero no se pueden ut ilizar com o ident ificadores.

24
3 . Cla se s y obj e t os

La program ación orient ada a obj et os se enfoca en los elem ent os de un


sist em a, sus at ribut os y las int eracciones que se producen ent re ellos para
diseñar aplicaciones inform át icas. Los elem ent os abst ract os del m odelo
orient ado a obj et os se denom inan clases.

Un program a orient ado a obj et os es, esencialm ent e, una colección de


obj et os que se crean, int eraccionan ent re sí y dej an de exist ir cuando ya no
son út iles durant e la ej ecución de un program a. Una aplicación inform át ica
puede llegar a ser m uy com plej a. La com plej idad es m ás m anej able cuando
se descom pone y se organiza en part es pequeñas y sim ples, los obj et os.

Un program a Java ut iliza clases y obj et os. Las clases represent an un


esquem a sim plificado de la casuíst ica de una aplicación inform át ica. Una
clase es una represent ación abst ract a de un conj unt o de obj et os que
com part en los m ism os at ribut os y com port am ient o, es decir, una clase
describe un t ipo de obj et os. Un obj et o es una inst ancia de una clase, t iene
una ident idad propia y un est ado. La ident idad de un obj et o se define por su
ident ificador. El est ado de un obj et o se define por el valor de sus at ribut os.
El com port am ient o de un obj et o queda det erm inado por el com port am ient o
la clase a la que pert enece. Los obj et os son unidades indivisibles y disponen
de m ecanism os de int eracción llam ados m ét odos.

Para ent ender el concept o de obj et o es necesario saber que exist e una
relación direct a ent re los elem ent os que form an part e de una aplicación
inform át ica y los obj et os. Norm alm ent e, para ident ificar los elem ent os de
una aplicación, debem os fij arnos en los sust ant ivos que ut ilizam os para
describir los obj et os reales del sist em a. Para diseñar una aplicación
orient ada a obj et os es necesario responder las siguient es pregunt as:

 ¿Cuáles son los elem ent os t angibles de un sist em a?

 ¿Cuáles son sus at ribut os?

 ¿Cuáles son sus responsabilidades?

 ¿Cóm o se relacionan los elem ent os del sist em a?

 ¿Qué obj et o debe “ saber” ...?

 ¿Qué obj et o debe “ hacer” ...?

25
Cla se s y obj e t os

Por ej em plo, si se desea diseñar un program a Java para gest ionar las
vent as de una t ienda, ent onces habría que ident ificar y describir las
caract eríst icas elem ent os com o: client e, t ipo de client e, product o, pedido,
t ipo de ent rega, form a de pago, unidades en exist encia de los product os,
et c. Los procesos de gest ión de la t ienda incluirían el regist ro de los
client es, el regist ro de los product os de la t ienda, el proceso de com pra del
client e y la realización de los pedidos, la ent rada y salida de product os del
alm acén, et c.

Si en vez de una t ienda se t rat a de una aplicación para dibuj ar figuras


geom ét ricas en dos dim ensiones, ent onces sería necesario ident ificar y
describir las caract eríst icas de las figuras y su posición. En est e caso habría
figuras de t ipo círculo, rect ángulo, t riángulo, et c. Las operaciones a realizar
con las figuras incluirían dibuj ar, borrar, m over o rot ar.

Cla se s
En su form a m ás sim ple, una clase se define por la palabra reservada
class seguida del nom bre de la clase. El nom bre de la clase debe em pezar
por m ayúscula. Si el nom bre es com puest o, ent onces cada palabra debe
em pezar por m ayúscula. Circulo, Rectangulo, Triangulo y
FiguraGeometrica son nom bres válidos de clases.

Por ej em plo, la clase Circulo se define con t res at ribut os: el radio y las
coordenadas x, y que definen la posición del cent ro del círculo.

/* Esta clase define los atributos de un círculo */

public class Circulo {

int x;
int y;
int radio;

26
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Una vez que se ha declarado una clase, se pueden crear obj et os a part ir de
ella. A la creación de un obj et o se le denom ina inst anciación. Es por est o
que se dice que un obj et o es una inst ancia de una clase y el t érm ino
inst ancia y obj et o se ut ilizan indist int am ent e.

Para crear obj et os, bast a con declarar una variable de alguno de los t ipos
de figuras geom ét ricas:

Circulo circulo1;
Circulo circulo2;

Para crear el obj et o y asignar un espacio de m em oria es necesario realizar


la inst anciación con el operador new.

circulo1 = new Circulo();


circulo2 = new Circulo();

Después de crear los obj et os, circulo1 y circulo2 alm acenan los valores
predet erm inados de la clase Circulo. A part ir de est e m om ent o los obj et os
ya pueden ser referenciados por su nom bre. Los nom bres circulo1 y
circulo2 son las referencias válidas para ut ilizar am bos obj et os.

Los e le m e n t os de u n a cla se
Una clase describe un t ipo de obj et os con caract eríst icas com unes. Es
necesario definir la inform ación que alm acena el obj et o y su
com port am ient o.

At r ibu t os

La inform ación de un obj et o se alm acena en at ribut os. Los at ribut os pueden
ser de t ipos prim it ivos de Java o de t ipo obj et o. Por ej em plo, para el
cat álogo de vehículos de una em presa de alquiler, es necesario conocer la
m at rícula del coche, su m arca, m odelo, color, la t arifa del alquiler y su
disponibilidad.

27
Cla se s y obj e t os

public class Vehiculo {

String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;

En est e ej em plo, los at ribut os matricula, marca, modelo y color son


cadenas de caract eres, tarifa es un núm ero real y disponible es un
valor lógico.

M é t odos y con st r u ct or e s

Adem ás de definir los at ribut os de un obj et o, es necesario definir los


m ét odos que det erm inan su com port am ient o. Toda clase debe definir un
m ét odo especial denom inado const ruct or para inst anciar los obj et os de la
clase. Est e m ét odo t iene el m ism o nom bre de la clase. Por ej em plo, para la
clase Vehiculo, el ident ificador del m ét odo const ruct or es Vehiculo. El
m ét odo const ruct or se ej ecut a cada vez que se inst ancia un obj et o de la
clase. Est e m ét odo se ut iliza para inicializar los at ribut os del obj et o que se
inst ancia.

Para diferenciar ent re los at ribut os del obj et o y los ident ificadores de los
parám et ros del m ét odo const ruct or, se ut iliza la palabra this. De est a
form a, los parám et ros del m ét odo pueden t ener el m ism o nom bre que los
at ribut os de la clase. Est o perm it e hacer una asignación com o la que se
m uest ra a cont inuación, donde this.marca se refiere al at ribut o del obj et o
y marca al parám et ro del m ét odo.

this.marca = marca;

28
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En el siguient e ej em plo el m ét odo const ruct or inicializa los at ribut os


matricula, marca, modelo, color y tarifa.

public class Vehiculo {


String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;

// el método constructor de la clase Vehiculo

public Vehiculo(String matricula,


String marca,
String modelo,
String color,
double tarifa) {
this,matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

La inst anciación de un obj et o se realiza ej ecut ando el m ét odo const ruct or


de la clase.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW", "GTI",
"Blanco",
100.0);

En est e ej em plo se inst ancia el obj et o vehiculo1. El m ét odo const ruct or


crea el obj et o vehiculo1 con la m at rícula “ 4050 ABJ” , m arca “ VW” ,
m odelo “ GTI ” , color “ Blanco” y t arifa 100.0 euros.

29
Cla se s y obj e t os

Vehiculo vehiculo2 = new Vehiculo("2345 JVM",


"SEAT",
"León",
"Negro",
80.0);

En est e ej em plo se inst ancia el obj et o vehiculo2. El m ét odo const ruct or


crea el obj et o vehiculo2 con la m at rícula “ 2345 JVM” , m arca “ SEAT” ,
m odelo “ León” , color “ Negro” y t arifa 80.0 euros.

La inst anciación de un obj et o consist e en asignar un espacio de m em oria al


que se hace referencia con el nom bre del obj et o. Los ident ificadores de los
obj et os perm it en acceder a los valores alm acenados en cada obj et o. En
est os ej em plos, los obj et os vehiculo1 y vehiculo2 alm acenan valores
diferent es y ocupan espacios de m em oria dist int os.

Para acceder a los at ribut os de los obj et os de la clase Vehiculo se definen


los m ét odos ‘get ’ y ‘set ’. Los m ét odos ‘get ’ se ut ilizan para consult ar el
est ado de un obj et o y los m ét odos ‘set ’ para m odificar su est ado. En la
clase Vehiculo es necesario definir un m ét odo ‘get ’ para cada uno de sus
at ribut os: getMatricula(), getMarca(), getModelo(), getColor(),
getTarifa() y getDisponible(). Los m ét odos ‘set ’ solo se definen para
los at ribut os que pueden ser m odificados después de que se ha creado el
obj et o. En est e caso es necesario definir setTarifa(double tarifa) y
setDisponible(boolean disponible) para m odificar la t arifa del
alquiler del vehículo y su disponibilidad, respect ivam ent e.

30
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public class Vehiculo {


String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;

// los métodos ‘get’ y ‘set’ de la clase Vehiculo

public String getMatricula() {


return this.matricula;
}
public String getMarca() {
return this.marca;
}
public String getModelo() {
return this.modelo;
}
public String getColor() {
return this.color;
}
public double getTarifa() {
return this.tarifa;
}
public boolean getDisponible() {
return this.disponible;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public void setDisponible(boolean disponible) {
this.disponible = disponible;
}
}

31
Cla se s y obj e t os

Re pr e se n t a ción de cla se s y obj e t os

Represent ación de la clase vehículo ut ilizando un diagram a de clases.

Una clase se represent a com o un recuadro dividido en t res part es: el


nom bre de la clase en la part e superior, la declaración de at ribut os y la
declaración de m ét odos.

El código Java de una clase se divide en dos part es, la declaración y su


definición. La declaración com ienza por la palabra class y a cont inuación
se indica el nom bre de la clase. La definición de una clase queda delim it ada
por la llave de inicio { y la llave de fin } . En el bloque de definición de la
clase se declaran los at ribut os de los obj et os y los m ét odos que definen su
com port am ient o.

Los obj et os se represent an com o caj as que indican el nom bre del obj et o, la
clase a la que pert enecen y el est ado del obj et o.

En est e ej em plo, los obj et os vehiculo1 y vehiculo2 son inst ancias de la


clase Vehiculo. Am bos obj et os com part en los m ism os at ribut os, pero
alm acenan dist int os valores. Los valores alm acenados en un obj et o
represent an su est ado. El est ado del obj et o vehiculo1 alm acena los
valores: m at ricula “ 4050 ABJ” , m arca “ VW” , m odelo “ GTI ” , color “ Blanco” ,
t arifa 100.0 y disponible true. El est ado del obj et o vehiculo2 alm acena

32
Fu nda m e nt os de pr ogr a m a ción e n Ja va

m at ricula “ 2345 JVM” , m arca “ SEAT” , m odelo “ León” , color “ Negro” , t arifa
80.0 y disponible false.

El est ado de un obj et o puede cam biar durant e la ej ecución de un program a


Java. En est e ej em plo, se podría m odificar la t arifa del alquiler y la
disponibilidad de los obj et os de la clase Vehiculo, el rest o de los at ribut os
no se pueden m odificar.

Obj e t os
Un obj et o se com pone de at ribut os y m ét odos. Para acceder a los
elem ent os de un obj et o se escribe el nom bre del obj et o, un punt o y el
nom bre del elem ent o al que se desea acceder.

Por ej em plo, para los obj et os vehiculo1 y vehiculo2, se podría acceder


direct am ent e a sus at ribut os com o se m uest ra a cont inuación:

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW", "GTI",
"Blanco",
100.0);
System.out.println("Matricula : " +
vehiculo1.matricula);
System.out.println("Marca y modelo: " +
vehiculo1.marca + " " +
vehiculo1.modelo);
System.out.println("Color : " +
vehiculo1.color);
System.out.println("Tarifa : " +
vehiculo1.tarifa);

33
Cla se s y obj e t os

La salida por la consola:

Matrícula : 4050 ABJ


Marca y modelo: VW GTI
Color : Blanco
Tarifa : 100.0

Para acceder a un m ét odo, adem ás de su nom bre hay que indicar la list a de
argum ent os requeridos por el m ét odo. Cuando la declaración del m ét odo no
incluye parám et ros no es necesario pasar argum ent os.

El siguient e código Java crea el obj et o vehiculo1 y m uest ra su m at rícula y


su t arifa. A cont inuación m odifica la t arifa a 90.0 euros y la m uest ra de
nuevo.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());

vehiculo1.setTarifa(90.0);

System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());

34
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La salida por la consola:

Matrícula : 4050 ABJ


Tarifa : 100.0
Matrícula : 4050 ABJ
Tarifa : 90.0

Para m ost rar la t arifa del obj et o vehiculo1 se puede acceder direct am ent e
al at ribut o tarifa del obj et o o se puede ej ecut ar el m ét odo getTarifa().
Est o se debe a que los at ribut os de clase Vehiculo son de acceso público
porque se han declarado public en vez de private. Los at ribut os de la
clase se deben declarar private y para acceder a ellos se debe ut ilizar un
m ét odo ‘get ’.

La r e fe r e n cia n u ll

Una referencia a un obj et o puede no t ener asignada una inst ancia. Est o
puede ocurrir porque se ha declarado el obj et o pero no se ha inst anciado,
es decir no se ha creado un obj et o con el operador new. Exist e un valor
especial, llam ado null que indica que un obj et o no se ha inst anciado. A
cont inuación se declara el obj et o vehiculo2, pero no se crea una inst ancia
para él.

Vehiculo vehiculo2;

Mient ras no se inst ancie el obj et o vehiculo2 su referencia vale null. En


un program a Java no se deben dej ar referencias de obj et os sin inst anciar.
Es necesario asegurarse que los obj et os exist en para evit ar referencias
null.

El obj et o se puede inst anciar en la m ism a declaración o m ás adelant e, com o


se m uest ra en el siguient e ej em plo.

Vehiculo vehiculo2;

// el objeto vehiculo2 se declara pero no se instancia


// la instancia se crea utilizando el operador new

35
Cla se s y obj e t os

Vehiculo vehiculo2 = new Vehiculo("2345 JVM",


"SEAT",
"León",
"Negro",
80.0);

Para saber si una referencia est á inst anciada o no, se puede com parar con
null.

if (vehiculo2 == null) {
System.out.print("vehiculo2 es una referencia null")
}

if (vehiculo2 != null) {
System.out.print("vehiculo2 está instanciado")
}

Si vehiculo2 es null, la prim era expresión es true y la segunda false.


En ese caso, el program a m uest ra por la consola el m ensaj e:

vehiculo2 es una referencia null

Re fe r e n cia s com pa r t ida s por va r ios obj e t os

Un obj et o puede t ener varias referencias o nom bres. Un alias es ot ro


nom bre que se referencia al m ism o obj et o. Un alias es una referencia m ás
al m ism o espacio de m em oria del obj et o original. Por ej em plo, si se crea el
obj et o vehiculo1 y después se declara ot ro obj et o vehiculo3 y a
cont inuación se asigna la referencia de vehiculo1 a vehiculo3, ent onces
vehiculo3 es un alias de vehiculo1. Est o significa que el espacio de
m em oria de vehiculo1 y vehiculo3 es el m ism o.

36
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Vehiculo vehiculo1;
Vehiculo vehiculo3;

vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

// el objeto vehiculo1 se instancia, vehiculo3 solo


// está declarado y es una referencia null

vehiculo3 = vehiculo1;

// al asignar la referencia de vehiculo1 a vehiculo3,


// éste se convierte en alias de vehiculo1 y referencia
// el mismo espacio de memoria

System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());

// se muestra la matricula y la tarifa de vehiculo1

System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());

37
Cla se s y obj e t os

// se muestra la matricula y la tarifa de vehiculo3,


// un alias de vehiculo1, por lo que muestra de nuevo
// la información correspondiente a vehiculo1

La salida por la consola m uest ra dos veces los valores asignados al obj et o
vehiculo1.

Matrícula : 4050 ABJ


Tarifa : 100.0
Matrícula : 4050 ABJ
Tarifa : 100.0

Un alias se puede ut ilizar para m ost rar el est ado de un obj et o y t am bién
para m odificarlo. Si se ej ecut a setTarifa(90.0) con el obj et o vehiculo3
en realidad se m odifica la t arifa de vehiculo1.

vehiculo3.setTarifa(90.0);

// al modificar la tarifa de vehiculo3 en realidad se


// modifica la tarifa de vehiculo1

System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());

System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());

38
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Se m uest ra la m at rícula y la t arifa de vehiculo1 y vehiculo3.

Matrícula : 4050 ABJ


Tarifa : 90.0
Matrícula : 4050 ABJ
Tarifa : 90.0

El obj et o vehiculo3 es un alias de vehiculo1 y no t iene un espacio de


m em oria propio. Ut iliza el m ism o espacio de m em oria que vehiculo1. Es
decir, vehiculo1 com part e con sus alias el m ism o espacio de m em oria. Si
se m odifica el valor de la t arifa alm acenada en vehiculo3, en realidad se
m odifica el valor de vehiculo1.

Esquem át icam ent e, un alias se puede ver com o un obj et o que apunt a al
espacio de m em oria de ot ro obj et o, com o se m uest ra a cont inuación:

En est e esquem a, el obj et o vehiculo3 es un alias de vehiculo1 y am bos


obj et os com part en el m ism o espacio de m em oria. El obj et o vehiculo2,
t iene su espacio de m em oria propio y no lo com part e con ot ro obj et o.

El ciclo de vida de u n obj e t o

El ciclo de vida de un obj et o em pieza por su declaración, su inst anciación y


su uso en un program a Java hast a que finalm ent e desaparece.

Cuando un obj et o dej a de ser ut ilizado, Java libera la m em oria asignada al


obj et o y la reut iliza. El ent orno de ej ecución de Java decide cuándo puede
reut ilizar la m em oria de un obj et o que ha dej ado de ser út il en un
program a. El program ador no debe preocuparse de liberar la m em oria

39
Cla se s y obj e t os

ut ilizada por los obj et os. A est e proceso se le conoce com o recolección de
basura. Java cuent a con un sist em a recolect or de basura que se encarga de
liberar los obj et os y los espacios de m em oria que ocupan cuando ést os
dej an de ser ut ilizados en un program a.

At r ibu t os
Los at ribut os son los elem ent os que alm acenan el est ado de un obj et o. Se
definen de la m ism a form a que las variables, pero dent ro del bloque de la
clase.

Exist en dos t ipos de at ribut os: los at ribut os de clase y los at ribut os de
obj et o. Los at ribut os de clase exist en siem pre, son independient es de que
exist an obj et os inst anciados. Los at ribut os de clase se declaran ut ilizando
static. Los at ribut os de obj et o exist en durant e el ciclo de vida de un
obj et o, es decir, se crean cuando se inst ancia el obj et o y se pueden ut ilizar
m ient ras el obj et o exist a.

Un at ribut o se declara con la siguient e sint axis:

tipo-de-acceso tipo nombre [ = valor-inicial ];

El t ipo de acceso puede ser private, protected o public. Los at ribut os


con acceso private solo se pueden acceder desde la propia clase que los
define, m ient ras que los at ribut os public se pueden acceder librem ent e
desde ot ras clases. Los at ribut os protected se pueden acceder desde la
propia clase que los define y desde sus subclases. El concept o de subclase
se explica m ás adelant e, en el apart ado de ext ensión de clases.

El t ipo puede ser un t ipo prim it ivo de Java o el ident ificador de una clase. El
nom bre del at ribut o debe cum plir las norm as de los ident ificadores y se
recom ienda ut ilizar un sust ant ivo que sea represent at ivo de la inform ación
que alm acena.

La inicialización del obj et o es opcional. Se puede declarar un obj et o que


será inst anciado después o se puede inst anciar al m om ent o de su
declaración.

40
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public class Vehiculo {


String matricula;
String marca;
String modelo;
String color;
double tarifa = 0.0;
boolean disponible = false;
}

En el ej em plo ant erior, el at ribut o t arifa se inicializa a cero y disponible a


false. Al rest o de at ribut os no se les asigna un valor inicial. Con est a
declaración, cuando se inst ancia un obj et o de t ipo Vehiculo se inicializan
los valores de los at ribut os t arifa y disponible. Si no se define el t ipo de
acceso, ent onces el at ribut o t iene acceso de t ipo public.

La clase Vehiculo se debe declarar con at ribut os privados. Se ut iliza el t ipo


de acceso private para que solo los m ét odos ‘get ’ y ‘set ’ de la clase
puedan acceder a ellos.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;
}

En est a nueva declaración, t odos los at ribut os t ienen acceso private y solo
es posible acceder a ellos desde los m ét odos de la clase.

M é t odos
Los m ét odos son funciones que det erm inan el com port am ient o de los
obj et os. Un obj et o se com port a de una u ot ra form a dependiendo de los
m ét odos de la clase a la que pert enece. Todos los obj et os de una m ism a
clase t ienen los m ism os m ét odos y el m ism o com port am ient o.

41
Cla se s y obj e t os

Exist en t res t ipos de m ét odos: m ét odos de consult a, m ét odos m odificadores


y operaciones. Los m ét odos de consult a sirven para ext raer inform ación de
los obj et os, los m ét odos m odificadores sirven para m odificar el valor de los
at ribut os del obj et o y las operaciones definen el com port am ient o de un
obj et o.

Los m ét odos ‘get ’ son m ét odos de consult a, m ient ras que los m ét odos ‘set ’
son m ét odos m odificadores.

Los m ét odos ‘get ’ se ut ilizan para ext raer el valor de un at ribut o del obj et o
y los m ét odos ‘set ’ para m odificarlo. En la clase Vehiculo es necesario
definir un m ét odo ‘get ’ para cada uno de sus at ribut os: getMatricula(),
getMarca(), getModelo(), getColor(), getTarifa() y
getDisponible(). Los m ét odos ‘set ’ solo se definen para los at ribut os que
pueden ser m odificados después de que se ha creado el obj et o. En est e
caso es necesario definir los m ét odos setTarifa(double tarifa) y
setDisponible(boolean disponible) para m odificar la t arifa del
alquiler del vehículo y su disponibilidad, respect ivam ent e.

Un m ét odo ‘get ’ se declara public y a cont inuación se indica el t ipo que


devuelve. Es un m ét odo de consult a. Por ej em plo, el m ét odo getTarifa()
devuelve double porque el at ribut o tarifa es de t ipo double. La list a de
parám et ros de un m ét odo ‘get ’ queda vacía. En el cuerpo del m ét odo se
ut iliza return para devolver el valor correspondient e al at ribut o tarifa
del obj et o, al que se hace referencia com o this.tarifa.

Un m ét odo ‘get ’ se El valor de ret orno es double, igual


declara public que el at ribut o tarifa
La list a de parám et ros de un m ét odo
‘get ’ queda v acía

public double getTarifa() {


return this.tarifa;
}

Un m ét odo ‘get ’ ut iliza return para devolver el valor del at ribut o. En est e caso el ident ificador
del at ribut o es tarifa y se refiere a él com o this.tarifa

42
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El m ét odo getAtributos() es un caso part icular de m ét odo ‘get ’ que


devuelve los valores concat enados de los at ribut os del obj et o.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;

public String getAtributos() {


return "Matrícula: " + this.matricula +
" Modelo: " + this.marca + " " + this.modelo +
" Color: " + this.color +
" Tarifa: " + this.tarifa +
" Disponible: " + this.disponible;
}
}

Un m ét odo ‘set ’ se declara public y devuelve void. La list a de parám et ros


de un m ét odo ‘set ’ incluye el t ipo y el valor a m odificar. Es un m ét odo
m odificador. Por ej em plo, el m ét odo setTarifa(double tarifa) debe
m odificar el valor de la t arifa del alquiler alm acenado en el obj et o. El cuerpo
de un m ét odo ‘set ’ asigna al at ribut o del obj et o el parám et ro de la
declaración.

Un m ét odo ‘set ’ se El valor de ret orno La list a de parám et ros de un m ét odo ‘set ’
declara public es void incluye el t ipo y el nom bre del parám et ro

public void setTarifa(double tarifa) {


this.tarifa = tarifa;
}

Un m ét odo ‘set ’ m odifica el valor de un at ribut o del obj et o. En est e caso el ident ificador del
at ribut o es tarifa y se refiere a él com o this.tarifa para asignarle el valor del parám et ro

43
Cla se s y obj e t os

Un m ét odo de t ipo operación es aquel que realiza un cálculo o m odifica el


est ado de un obj et o. Est e t ipo de m ét odos pueden incluir una list a de
parám et ros y puede devolver un valor o no. Si el m ét odo no devuelve un
valor, se declara void.

Por ej em plo, la clase Circulo define dos m ét odos de t ipo operación, uno
para calcular el perím et ro y ot ro para calcular el área.

public class Circulo {


public static final double PI = 3.1415926536;
private double radio;

public Circulo(double radio) {


this.radio = radio;
}

public double getRadio() {


return this.radio;
}

public double calcularPerimetro() {


return 2 * PI * this.radio;
}

public double calcularArea() {


return PI * this.radio * this.radio;
}

En est e ej em plo, los m ét odos calcularPerimetro() y calcularArea()


devuelven un valor double y ninguno de ellos recibe parám et ros.

D e cla r a ción de m é t odos

La declaración de un m ét odo indica si el m ét odo necesit a o no argum ent os.


Los m ét odos ‘get ’ no t ienen argum ent os y devuelven un valor, los m ét odos
‘set ’ necesit an un argum ent o para indicar el valor del at ribut o que van a
m odificar.

44
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El m ét odo setTarifa(double tarifa) t iene un argum ent o. El nom bre


de est e parám et ro es tarifa y su t ipo es double.

Un m ét odo se declara con la siguient e sint axis:

tipo-de-acceso tipo nombre (lista-parametros);

El t ipo de acceso puede ser private o public. Si el m ét odo devuelve un


valor se debe indicar su t ipo. Est e valor puede ser de un t ipo prim it ivo de
Java o el ident ificador de una clase. Si el m ét odo no devuelve un valor
ent onces el t ipo es void. El nom bre del at ribut o debe cum plir las norm as
de los ident ificadores y se recom ienda ut ilizar un verbo que sea
represent at ivo de la acción que realiza el m ét odo. La list a de parám et ros
indica los valores que requiere el m ét odo para su ej ecución.

La list a de parám et ros se declara con la siguient e sint axis:

tipo nombre [,tipo nombre ]

La list a de parám et ros puede declarar una o m ás variables separadas por


una com a. El t ipo puede ser un t ipo prim it ivo de Java o el ident ificador de
una clase. El nom bre del parám et ro debe cum plir las norm as de los
ident ificadores y se recom ienda ut ilizar un sust ant ivo que sea
represent at ivo de la inform ación que alm acena.

Dent ro de una clase los m ét odos se ident ifican unívocam ent e por su nom bre
y su list a de parám et ros.

I n voca ción de m é t odos

Un m ét odo se puede invocar dent ro o fuera de la clase donde se ha


declarado. Si el m ét odo se invoca dent ro de la clase, bast a con indicar su
nom bre. Si el m ét odo se invoca fuera de la clase ent onces se debe indicar el
nom bre del obj et o y el nom bre del m ét odo.

Por ej em plo, el m ét odo getAtributos() de la clase Vehiculo se podría


codificar invocando a los m ét odos getMatricula(), getMarca(),
getModelo(), getTarifa() y getDisponible(). En est e caso, el

45
Cla se s y obj e t os

m ét odo getAtributos() ut iliza los m ét odos ‘get ’ de la clase en vez de


hacer referencia direct a a los at ribut os del obj et o.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;

public String getAtributos() {


return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}

Si el m ét odo getAtributos() se va a invocar desde fuera de la clase,


ent onces es necesario indicar el nom bre del obj et o y el nom bre del m ét odo.

En est e ej em plo, el m ét odo getAtributos() se ut iliza para m ost rar los


valores alm acenados en el obj et o vehiculo1.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

// invocación del método getAtributos para mostrar


// los datos del objeto vehiculo1

System.out.print("Datos del vehículo " +


vehiculo1.getAtributos());

46
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Si el m ét odo es est át ico, ent onces es necesario indicar el nom bre de la


clase y el nom bre del m ét odo. Por ej em plo, la clase Math incluye el m ét odo
sqr para calcular el cuadrado de un núm ero. En est e caso, es necesario
indicar el nom bre de la clase y el nom bre del m ét odo que se invoca.

int numero = 4;

// invocación del método sqr de la clase Math

System.out.print("El cuadrado del número es: " +


Math.sqr(numero));

Cuando se invoca a un m ét odo ocurre lo siguient e:

 En la línea de código del program a donde se invoca al m ét odo se


calculan los valores de los argum ent os.

 Los parám et ros se inicializan con los valores de los argum ent os.

 Se ej ecut a el bloque código del m ét odo hast a que se alcanza return o


se llega al final del bloque.

 Si el m ét odo devuelve un valor, se sust it uye la invocación por el valor


devuelt o.

 La ej ecución del program a cont inúa en la siguient e inst rucción donde se


invocó el m ét odo.

El m é t odo m a in ( )

Exist e un m ét odo especial, llam ado main(). Est e m ét odo se invoca cuando
se ej ecut a un program a Java. Todo program a Java debe t ener una clase con
el m ét odo main(). Est e m ét odo se debe declarar public static void.
Es un m ét odo est át ico, público y no devuelve un valor de ret orno. Los
parám et ros String[] args se refieren a la línea de com andos de la
aplicación.

Cuando la m áquina virt ual de Java ( JVM) ej ecut a un program a Java invoca
al m ét odo main(). Es est e m ét odo quien a su vez ej ecut a los m ét odos de
la aplicación.

47
Cla se s y obj e t os

public class MisVehiculos {

public static void main(String args[]) {

// este programa crea un objeto de la clase vehiculo y


// muestra sus atributos

// instanciación del objeto vehiculo1

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

// invocación del método getAtributos() para mostrar los datos


// del objeto vehiculo1

System.out.print("Datos del vehículo " +


vehiculo1.getAtributos());

}
}

Pa r á m e t r os y a r gu m e n t os

Los parám et ros de un m ét odo definen la cant idad y el t ipo de dat o de los
valores que recibe un m ét odo para su ej ecución. Los argum ent os son los
valores que se pasan a un m ét odo durant e su invocación. El m ét odo recibe
los argum ent os correspondient es a los parám et ros con los que ha sido
declarado.

Un m ét odo puede t ener t ant os parám et ros com o sea necesario. La list a de
parám et ros de la cabecera de un m ét odo se define con la siguient e sint axis:

tipo nombre [,tipo nombre ]

Por ej em plo, el m ét odo const ruct or de la clase Vehiculo t iene cinco


parám et ros, la m at rícula, la m arca, el m odelo, el color del vehículo y su

48
Fu nda m e nt os de pr ogr a m a ción e n Ja va

t arifa. Los parám et ros matricula, marca, modelo y color son de t ipo
String, tarifa es de t ipo double.

public Vehiculo(String matricula,


String marca,
String modelo,
String color,
double tarifa) {
}

El m ét odo setTarifa(double tarifa) de la clase Vehiculo t iene un


parám et ro tarifa de t ipo double.

public void setTarifa(double tarifa) {


}

Durant e la invocación de un m ét odo es necesario que el núm ero y el t ipo de


argum ent os coincidan con el núm ero y el t ipo de parám et ros declarados en
la cabecera del m ét odo.

Por ej em plo, es correct o invocar al m ét odo setTarifa(double tarifa)


del obj et o vehiculo1 pasando un argum ent o de t ipo double.

vehiculo1.setTarifa(100.0); // invocación correcta


vehiculo1.setTarifa(90.0); // invocación correcta

La invocación del m ét odo no es correct a si se pasan dos argum ent os de t ipo


double o un argum ent o de t ipo String porque la cabecera del m ét odo
solo incluye un parám et ro double. Las invocaciones del m ét odo
setTarifa(double tarifa) son incorrect as.

vehiculo1.setTarifa(100.0, 20.0); // no es correcto


vehiculo1.setTarifa("100.0"); // no es correcto

49
Cla se s y obj e t os

Los dos ej em plos ant eriores no son válidos porque la list a de argum ent os
del m ét odo setTarifa(double tarifa) no coincide con la list a de
parám et ros de la declaración de est e m ét odo.

Durant e el proceso de com pilación se com prueba que durant e la invocación


de un m ét odo se pasan t ant os argum ent os com o parám et ros t iene
declarados y que adem ás coinciden los t ipos. Est a es una caract eríst ica de
los lenguaj es que se denom inan “ st rongly t yped” o “ fuert em ent e t ipados” .

Pa so de pa r á m e t r os

Cuando se invoca un m ét odo se hace una copia de los valores de los


argum ent os en los parám et ros. Est o quiere decir que si el m ét odo m odifica
el valor de un parám et ro, nunca se m odifica el valor original del argum ent o.

Cuando se pasa una referencia a un obj et o se crea un nuevo alias sobre el


obj et o, de m anera que est a nueva referencia ut iliza el m ism o espacio de
m em oria del obj et o original y est o perm it e acceder al obj et o original.

Por ej em plo, el m ét odo recibirVehiculoAlquilado(Vehiculo v)


recibe el parám et ro v de t ipo Vehiculo. Si el m ét odo m odifica el est ado del
obj et o v, en realidad m odifica el est ado del obj et o original vehiculo1 que
recibe com o argum ent o.

public void recibirVehiculoAlquilado (Vehiculo v) {


v.setDisponible(true);
}

50
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En el siguient e program a Java, en el m ét odo main() se crea un obj et o


vehiculo1 de la clase Vehiculo. Al inst anciar el obj et o, el m ét odo
const ruct or asigna el valor false al at ribut o disponible, pero al invocar al
m ét odo recibirVehiculoAlquilado(Vehiculo v) con el obj et o
vehiculo1, se m odifica su disponibilidad.

public class MisVehiculos {

public static void recibirVehiculoAlquilado(Vehiculo v) {


v.setDisponible(true);
}

public static void main(String args[]) {

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

// el valor del atributo disponible de vehiculo1 es false

System.out.println("El objeto vehiculo1 está disponible: " +


vehiculo1.getDisponible());

recibirVehiculoAlquilado (vehiculo1);

// el valor del atributo disponible de vehiculo1 es true

System.out.println("El objeto vehiculo1 está disponible: " +


vehiculo1.getDisponible());

}
}

La salida por la consola:

El objeto vehiculo1 está disponible: false


El objeto vehiculo1 está disponible: true

51
Cla se s y obj e t os

El va lor de r e t or n o

Un m ét odo puede devolver un valor. Los m ét odos que no devuelven un


valor se declaran void, m ient ras que los m ét odos que devuelven un valor
indican el t ipo que devuelven: int, double, char, String o un t ipo de
obj et o.

Los m ét odos ‘set ’ devuelven void, m ient ras que los m ét odos ‘get ’
devuelven el t ipo correspondient e al at ribut o al que hacen referencia. Los
m ét odos ‘set ’ devuelven void porque son m ét odos m odificadores, realizan
operaciones y cálculos para m odificar el est ado de los obj et os. Los m ét odos
‘get ’, en cam bio, son m ét odos de consult a y devuelven los valores
alm acenados en los at ribut os de un obj et o.

Por ej em plo, el m ét odo setTarifa(double tarifa) recibe el parám et ro


tarifa de t ipo double y devuelve void.

public void setTarifa(double tarifa) {


this.tarifa = tarifa;
}

El m ét odo getTarifa() devuelve el t ipo double correspondient e al


at ribut o tarifa. El valor del at ribut o se devuelve con return.

public double getTarifa() {


return this.tarifa;
}

La s va r ia ble s loca le s de u n m é t odo

Las variables locales de un m ét odo son út iles para alm acenar valores
t em porales cuyo t iem po de vida coincide con el m ét odo.

Por ej em plo, el m ét odo getAtributos() no ut iliza variables locales. El


valor de ret orno se calcula al m om ent o de hacer return.

52
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public String getAtributos() {


return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}

Est e m ét odo se podría codificar declarando la variable local atributos de


t ipo String para alm acenar el valor de ret orno. Est a variable se declara
dent ro del cuerpo del m ét odo.

public String getAtributos() {


String atributos;
atributos = "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
return atributos;
}

Los dos m ét odos son equivalent es, pero el prim ero es m ás claro porque
evit a el uso de una variable local que no es necesaria.

Sobr e ca r ga de m é t odos

La sobrecarga de m ét odos es út il para que el m ism o m ét odo opere con


parám et ros de dist int o t ipo o que un m ism o m ét odo reciba una list a de
parám et ros diferent e. Est o quiere decir que puede haber dos m ét odos con
el m ism o nom bre que realicen dos funciones dist int as. La diferencia ent re
los m ét odos sobrecargados est á en su declaración.

53
Cla se s y obj e t os

Por ej em plo, el m ét odo getAtributos() se puede sobrecargar para


devolver los at ribut os de un vehículo y para m ost rar la t arifa reducida al
aplicar el porcent aj e de descuent o recibido com o argum ent o.

public String getAtributos() {


return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}
public String getAtributos(double porcentajeDescuento) {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() + " Tarifa: " +
(100.0 – porcentajeDescuento)/100*tarifa +
" Disponible: " + getDisponible;
}

En est e ej em plo los dos m ét odos se diferencian por la declaración de sus


parám et ros y am bos m ét odos realizan operaciones dist int as.

Con st r u ct or e s
Para crear un obj et o se ut iliza el operador new. Si no se ha definido un
m ét odo const ruct or para la clase, ent onces el obj et o se inst ancia indicando
el nom bre de la clase y a cont inuación un parént esis abiert o y ot ro cerrado.
Si ya se ha definido un m ét odo const ruct or, ent onces no es posible
inst anciar un obj et o ut ilizando el const ruct or por defect o. Cuando se invoca
al const ruct or por defect o se asigna un espacio de m em oria para el nuevo
obj et o y sus at ribut os se inicializan a los valores por defect o
correspondient es a su t ipo. Los núm eros ent eros se inicializan a cero, los
núm eros reales a 0.0, los valores lógicos a false, los caract eres se
inicializan a \ u0000 y las referencias a null.

54
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En una clase se pueden definir uno o m ás m ét odos const ruct ores para
inicializar los at ribut os de un obj et o con valores dist int os de los valores por
defect o de Java. Para inst anciar un obj et o es necesario indicar los valores
iniciales de sus at ribut os cuando se ej ecut a el m ét odo const ruct or. En la
clase Vehiculo se ha definido un m ét odo const ruct or que inicializa los
at ribut os matricula, marca, modelo, color y tarifa.

public class Vehiculo {


String matricula; this.matricula se refiere al
at ribut o del obj et o
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;

// El método constructor de la clase Vehiculo

public Vehiculo(String matricula, matricula se refiere al


parám et ro del m ét odo
String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

55
Cla se s y obj e t os

A veces es necesario cont ar con diferent es m ét odos const ruct ores con
dist int os parám et ros. Por ej em plo, se podría crear un obj et o de la clase
Vehiculo sin conocer la t arifa de alquiler. El m ét odo const ruct or debería
inicializar la t arifa a cero.

public Vehiculo(String matricula,


String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;
this.disponible = false;
}

Cuando se definen dos o m ás m ét odos const ruct ores para la clase


Vehiculo, se dice que el m ét odo const ruct or de la clase est á
sobrecargado. En est e ej em plo la diferencia ent re los dos m ét odos es que el
prim ero recibe cuat ro parám et ros e inicializa la t arifa a cero, el segundo
recibe cinco parám et ros, uno de ellos para inicializar la t arifa del vehículo.

public Vehiculo(String matricula,


String marca,
String modelo,
String color)

public Vehiculo(String matricula,


String marca,
String modelo,
String color,
double tarifa)

56
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La clase Vehiculo con dos m ét odos const ruct ores.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;

public Vehiculo(String matricula,


String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;
this.disponible = false;
}
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

Java diferencia los m ét odos sobrecargados por el núm ero y el t ipo de los
argum ent os que t iene el m ét odo. En la clase Vehiculo el núm ero de
parám et ros de los dos m ét odos const ruct ores es diferent e.

Cuando se invoca al m ét odo const ruct or de la clase con el operador new,


Java selecciona el m ét odo que debe ej ecut ar por el núm ero y el t ipo de
argum ent os que recibe.

57
Cla se s y obj e t os

Creación de obj et os de la clase Vehiculo ut ilizando am bos m ét odos


const ruct ores.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

Vehiculo vehiculo2 = new Vehiculo("2345 JVM",


"SEAT",
"León",
"Negro");

El obj et o vehiculo1 se inst ancia ej ecut ando const ruct or de cinco


parám et ros, m ient ras que vehiculo2 se inst ancia ej ecut ando el
const ruct or de cuat ro parám et ros.

58
4 . Ex t e n sión de cla se s

Com posición
La com posición consist e en crear una clase nueva agrupando obj et os de
clases que ya exist en. Una com posición agrupa uno o m ás obj et os para
const ruir una clase, de m anera que las inst ancias de est a nueva clase
cont ienen uno o m ás obj et os de ot ras clases. Norm alm ent e los obj et os
cont enidos se declaran con acceso private y se inicializan en el
const ruct or de la clase.

La clase Vehiculo est á com puest a de obj et os de t ipo String. Los


at ribut os matricula, marca, modelo y color en realidad son obj et os de
la clase String.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;

// se omiten los métodos ‘get’ y ‘set’ de la clase

public Vehiculo(String matricula,


String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

59
Ex t e n sión de cla se s

Para hacer una com posición ut ilizando obj et os de una clase diferent e de
String, lo prim ero es definir una nueva clase. La clase Cliente form ará
j unt o con Vehiculo la clase VehiculoAlquilado ut ilizando la
com posición.

public class Cliente {


private String nif;
private String nombre;
private String apellidos;

// se omiten los métodos ‘get’ y ‘set’ de la clase

public Cliente(String nif, String nombre, String apellidos) {


this.nif = nif;
this.nombre = nombre;
this.apellidos = apellidos;
}
}

Ahora se define una com posición que declara un obj et o de la clase


Vehiculo y un obj et o de la clase Cliente. La nueva clase
VehiculoAlquilado relaciona una inst ancia de la clase Vehiculo con una
inst ancia de la clase Cliente y crea obj et os que alm acenan relaciones
ent re client es y vehículos de alquiler.

Est o significa que para inst anciar un obj et o de la clase


VehiculoAlquilado es necesario t ener referencias a obj et os de las clases
Cliente y Vehiculo.

60
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public class VehiculoAlquilado {


private Cliente cliente;
private Vehiculo vehiculo;
private int diaAlquiler;
private int mesAlquiler;
private int añoAlquiler;
private int totalDiasAlquiler;

public VehiculoAlquilado(Cliente cliente,


Vehiculo vehiculo,
int diaAlquiler,
int mesAlquiler,
int añoAlquiler,
int totalDiasAlquiler) {
this.cliente = cliente;
this.vehiculo = vehiculo;
this.diaAlquiler = diaAlquiler;
this.mesAlquiler = mesAlquiler;
this.añoAlquiler = añoAlquiler;
this.totalDiasAlquiler = totalDiasAlquiler;
}

// los métodos ‘get’ de los atributos de tipo objeto


// Cliente y Vehiculo

public Cliente getCliente() {


return this.cliente;
}

public Vehiculo getVehiculo() {


return this.vehiculo;
}

La clase VehiculoAlquilado cont iene un obj et o de la clase Cliente, un


obj et o de la clase Vehiculo y at ribut os de t ipo int para alm acenar el día,
el m es y el año de la fecha del alquiler del vehículo y el t ot al de días de
alquiler. La clase cont enedora es VehiculoAlquilado y las clases
cont enidas son Cliente y Vehiculo.

61
Ex t e n sión de cla se s

El program a principal donde se crean los obj et os de las clases Cliente,


Vehiculo y VehiculoAlquilado.

public class MisVehiculos {

public static void main(String args[]) {

// se crean dos instancias de la clase Vehiculo

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",


"VW",
"GTI",
"Blanco",
100.0);

Vehiculo vehiculo2 = new Vehiculo("2345 JVM",


"SEAT",
"León",
"Negro",
80.0);

// se crea una instancia de la clase Cliente

Cliente cliente1 = new Cliente("30435624X", "Juan", "Pérez");

// se crea una instancia de la clase VehiculoAlquilado que


// relaciona al cliente1 con el vehiculo1, el vehículo se
// alquila con fecha 11/11/2011 durante 2 días

VehiculoAlquilado alquiler1 = new VehiculoAlquilado(cliente1,


vehiculo1,
11,
11,
2011,
2);

}
}

62
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En una relación de com posición, hay at ribut os de la clase cont enedora que
son obj et os que pert enecen a la clase cont enida. Un obj et o de la clase
cont enedora puede acceder a los m ét odos públicos de las clases cont enidas.
En la declaración de la clase VehiculoAlquilado se han definido dos
m ét odos ‘get ’ para los at ribut os de t ipo obj et o. El m ét odo getCliente()
devuelve un obj et o de t ipo Cliente y el m ét odo getVehiculo() devuelve
un obj et o de t ipo Vehiculo.

Por ej em plo, el obj et o alquiler1 de la clase VehiculoAlquilado puede


acceder a los m ét odos públicos de su propia clase y de las clases Cliente
y Vehiculo. Un obj et o de la clase VehiculoAlquilado puede ej ecut ar
m ét odos ‘get ’ para m ost rar la inform ación de los obj et os que cont iene.

alquiler1.getCliente().getNIF();
alquiler1.getVehiculo().getMatricula();

Los dat os del client e y del vehículo alquilado:

System.out.println("Vehículo alquilado");
System.out.println("Cliente : " +
alquiler1.getCliente().getNIF() + " " +
alquiler1.getCliente().getNombre() + " " +
alquiler1.getCliente().getApellidos());
System.out.println("Vehículo: " +
alquiler1.getVehiculo().getMatricula());

La salida por la consola:

Vehículo alquilado
Cliente : 30435624X Juan Pérez
Vehículo: 4050 ABJ

63
Ex t e n sión de cla se s

H e r e ncia
La herencia es la capacidad que t ienen los lenguaj es orient ados a obj et os
para ext ender clases. Est o produce una nueva clase que hereda el
com port am ient o y los at ribut os de la clase que ha sido ext endida. La clase
original se denom ina clase base o superclase, la nueva clase se denom ina
clase derivada o subclase.

Ex t e n sión de cla se s

La capacidad para ext ender clases se llam a herencia porque la nueva clase
hereda t odos los at ribut os y los m ét odos de la superclase a la que ext iende.
Una subclase es una especialización de la superclase. Norm alm ent e una
subclase añade nuevos at ribut os y m ét odos que le dan un com port am ient o
diferent e al de la superclase. La herencia es un m ecanism o m uy im port ant e
porque perm it e la reut ilización del código.

Suponga que se desea diseñar una aplicación para gest ionar una em presa
de alquiler de vehículos de t ipo t urism o, deport ivo y furgonet as. La clase
Vehiculo define los at ribut os y los m ét odos de t odos los vehículos de la
em presa de alquiler. Est o no es suficient e porque hay dist int os t ipos de
vehículos, de m anera que es necesario definir subclases para cada t ipo de
vehículo: t urism o, deport ivo y furgonet a. En est e ej em plo, la superclase es
Vehiculo y las subclases son Turismo, Deportivo y Furgoneta. Todas
las subclases son vehículos, un t urism o, un deport ivo y una furgonet a son
vehículos, pero cada uno de ellos t iene caract eríst icas propias que le hacen
diferent e del rest o. Para un t urism o int eresa saber el núm ero de puert as y
el t ipo de cam bio de m archa, para un deport ivo int eresa saber su cilindrada
y para una furgonet a su capacidad de carga en kilos y el volum en en m et ros
cúbicos.

La ext ensión de una clase t iene la siguient e sint axis:

public class nombre-subclase extends nombre-superclase {


}

64
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La declaración de la clase Turism o com o subclase de Vehiculo:

public class Turismo extends Vehiculo {


}

El esquem a m uest ra la relación de herencia que exist e ent re la superclase


Vehiculo y las subclases Turismo, Deportivo y Furgoneta.

Las subclases Turismo, Deportivo y Furgoneta son especializaciones de


la clase Vehiculo. En una relación de herencia, las subclases heredan los
at ribut os y los m ét odos de la superclase. En la declaración de las subclases
se indica la clase a la que ext ienden, en est e caso, Vehiculo.

public class Turismo extends Vehiculo {


}
public class Deportivo extends Vehiculo {
}
public class Furgoneta extends Vehiculo {
}

65
Ex t e n sión de cla se s

La declaración de la superclase Vehiculo.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible;

// se omiten los métodos ‘get’ y ‘set’ de la superclase Vehiculo,


// excepto el método getAtributos()

public Vehiculo(String matricula,


String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}

public String getAtributos() {


return "Matrícula: " + this.matricula +
" Modelo: " + this.marca + " " + this.modelo +
" Color: " + this.color +
" Tarifa: " + this.tarifa +
" Disponible: " + this.disponible;
}

66
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La declaración de la subclase Turismo.

public class Turismo extends Vehiculo {


private int puertas;
private boolean marchaAutomatica;

public Turismo(String matricula,


String marca,
String modelo,
String color,
double tarifa,
int puertas,
boolean marchaAutomatica) {
super(matricula, marca, modelo, color, tarifa);
this.puertas = puertas;
this.marchaAutomatica = marchaAutomatica;
}

// métodos ‘get’ de la subclase Turismo

public int getPuertas() {


return this.puertas;
}

public boolean getMarchaAutomatica() {


return this.marchaAutomatica;
}

public String getAtributos() {


return super.getAtributos() +
" Puertas: " + this.puertas +
" Marcha automática: " + this.marchaAutomatica;
}

67
Ex t e n sión de cla se s

La declaración de la subclase Deportivo.

public class Deportivo extends Vehiculo {


private int cilindrada;

public Deportivo(String matricula,


String marca,
String modelo,
String color,
double tarifa,
int cilindrada) {
super(matricula, marca, modelo, color, tarifa);
this.cilindrada = cilindrada;
}

// métodos ‘get’ de la subclase Deportivo

public int getCilindrada() {


return this. cilindrada;
}

public String getAtributos() {


return super.getAtributos() +
" Cilindrada (cm3): " + this.cilindrada;
}

68
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La declaración de la subclase Furgoneta.

public class Furgoneta extends Vehiculo {


private int carga;
private int volumen;

public Furgoneta(String matricula,


String marca,
String modelo,
String color,
double tarifa,
int carga,
int volumen) {
super(matricula, marca, modelo, color, tarifa);
this.carga = carga;
this.volumen = volumen;
}

// métodos ‘get’ de la subclase Furgoneta

public int getCarga() {


return this.carga;
}

public int getVolumen() {


return this.volumen;
}

public String getAtributos() {


return super.getAtributos() +
" Carga (kg): " + this.carga +
" Volumen (m3): " + this.volumen;
}

69
Ex t e n sión de cla se s

Polim or fism o

Las clases Turismo, Deportivo y Furgoneta ext ienden a la clase


Vehiculo. Est as clases heredan los at ribut os de Vehiculo y cada subclase
añade at ribut os y m ét odos propios.

La clase Turismo añade los at ribut os puertas, marchaAutomatica y los


m ét odos getPuertas() y getMarchaAutomatica().

La clase Deportivo añade el at ribut o cilindrada y el m ét odo


getCilindrada().

La clase Furgoneta añade los at ribut os carga, volumen y los m ét odos


getCarga() y getVolumen().

Adem ás, cada subclase declara un m ét odo getAtributos(). Est e m ét odo


t am bién se ha declarado en la superclase. Est o significa que el m ét odo
getAtributos() de las subclases sobreescribe al m ét odo de la superclase.
Dependiendo del t ipo de obj et o que invoque el m ét odo, se ej ecut a el
m ét odo correspondient e a la clase del obj et o. Por ej em plo, si el m ét odo es
invocado por un obj et o de la clase Turismo, ent onces se ej ecut a el código
del m ét odo getAtributos() de la clase Turismo.

Los m ét odos getAtributos() de las subclases m odifican el


com port am ient o del m ét odo getAtributos() de la superclase. En cada
m ét odo se invoca a super.getAtributos() para que m uest re los
at ribut os de un vehículo y después se m uest ran los at ribut os propios de la
subclase. Los m ét odos getAtributos() de las subclases sobrescriben el
m ét odo getAtributos() de la superclase. Est a caract eríst ica de los
lenguaj es de program ación orient ados a obj et os se conoce com o
polim orfism o.

Un obj et o de las subclases Turismo, Deportivo o Furgoneta puede


invocar los m ét odos getMatricula(), getMarca(), getModelo(),
getColor(), getTarifa(), getDisponible(), setTarifa() y
setDisponible() de la superclase Vehiculo.

70
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El esquem a m uest ra la superclase Vehiculo y las subclases Turismo,


Deportivo y Furgoneta con sus at ribut os y m ét odos.

El siguient e ej em plo m uest ra el com port am ient o de los m ét odos


sobreescrit os en las subclases.

// creación de instancias de la superclase Vehiculo y


// de las subclases Turismo, Deportivo y Furgoneta

Vehiculo miVehiculo = new Vehiculo("4050 ABJ",


"VW", "GTI",
"Blanco",
100.0);

Turismo miTurismo = new Turismo("4060 TUR",


"Skoda", "Fabia",
"Blanco",
90.0,
2,
false);

71
Ex t e n sión de cla se s

Deportivo miDeportivo = new Deportivo("4070 DEP",


"Ford”, "Mustang",
"Rojo",
150.0,
2000);

Furgoneta miFurgoneta = new Furgoneta("4080 FUR",


"Fiat", "Ducato",
"Azul",
80.0,
1200,
8);

// invocación del método getAtributos() de cada objeto

System.out.print("Vehículo : " +
miVehiculo.getAtributos());

// miVehiculo es una instancia de la clase Vehiculo, se


// invoca el método getAtributos() de Vehiculo

Vehículo : Matrícula: 4050 ABJ Modelo: VW GTI


Color: Blanco Tarifa: 100.0 Disponible: false

System.out.print("Turismo " + miTurismo.getAtributos());

// miTurismo es una instancia de la clase Turismo, se


// invoca el método getAtributos() de Turismo

72
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Turismo Matrícula: 4060 TUR Modelo: Skoda Fabia


Color: Blanco Tarifa: 90.0 Disponible: false Puertas: 2
Marcha automática: false

System.out.print("Deportivo " +
miDeportivo.getAtributos());

// miDeportivo es una instancia de la clase Deportivo,


// se invoca el método getAtributos() de Deportivo

Deportivo Matrícula: 4070 DEP Modelo: Ford Mustang


Color: Rojo Tarifa: 150.0 Disponible: false
Cilindrada (cm3): 2000

System.out.print("Furgoneta " +
miFurgoneta.getAtributos());

// miFurgoneta es una instancia de la clase Furgoneta,


// se invoca el método getAtributos() de Furgoneta

Furgoneta Matrícula: 4080 FUR Modelo: Fiat Ducato


Color: Azul Tarifa: 80.0 Disponible: false
Carga (kg): 1200 Volumen (m3): 8

// el objeto miTurismo pertenece a la subclase Turismo,


// es un vehículo y puede invocar a los métodos de la
// superclase Vehiculo: getMatricula(),
// getMarca() y getModelo()

73
Ex t e n sión de cla se s

System.out.print("Turismo : " +
miTurismo.getMatricula() + " " +
miTurismo.getMarca() + " " +
miTurismo.getModelo());

Turismo : 4060 TUR Skoda Fabia

Com pa t ibilida d de t ipos


En una relación de t ipo herencia, un obj et o de la superclase puede
alm acenar un obj et o de cualquiera de sus subclases. Por ej em plo, un obj et o
de la clase Vehiculo puede alm acenar un obj et o de la clase Turismo,
Deportivo o Furgoneta. Dicho de ot ro m odo, cualquier referencia de la
clase Vehiculo puede cont ener una inst ancia de la clase Vehiculo o bien
una inst ancia de las subclases Turismo, Deportivo o Furgoneta.

Est o significa que la clase base o superclase es com pat ible con los t ipos que
derivan de ella, pero no al revés. Una referencia de la clase Turismo solo
puede alm acenar una inst ancia de Turismo, nunca una inst ancia de la
superclase Vehiculo.

Con ve r sión a sce n de n t e de t ipos

Cuando un obj et o se asigna a una referencia dist int a de la clase a la que


pert enece, se hace una conversión de t ipos. Java perm it e asignar un obj et o
a una referencia de la clase base.

Por ej em plo, si un obj et o de la clase Turismo se asigna a una referencia de


la clase Vehiculo, se hace una conversión ascendent e de t ipos,
denom inada “ upcast ing” . La conversión ascendent e de t ipos siem pre se
puede realizar.

74
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Vehiculo miVehiculo = new Turismo("4090 TUR",


"Skoda", "Fabia",
"Negro",
90.0,
2,
true);
System.out.println("Vehículo " +
miVehiculo.getAtributos());

En est e ej em plo se crea un obj et o de la clase base Vehiculo ut ilizando el


const ruct or de la clase derivada Turismo.

Dado que la inst ancia es de t ipo Turismo, al invocar al m ét odo


getAtributos() m uest ra los at ribut os de un t urism o.

Vehículo Matrícula: 4090 TUR Modelo: Skoda Fabia Color:


Negro Tarifa: 90.0 Disponible: false Puertas: 2
Marcha automática: true

A la referencia miVehiculo t am bién se le puede asignar la referencia de


una inst ancia exist ent e de la clase Turismo.

Turismo miTurismo = new Turismo("4100 TUR",


"VW", "Polo",
"Rojo",
80.0,
2,
false);

75
Ex t e n sión de cla se s

Vehiculo miVehiculo = miTurismo;


System.out.println("Vehículo " +
miVehiculo.getAtributos());

De nuevo, el m ét odo getAtributos() m uest ra los at ribut os de un


t urism o:

Vehículo Matrícula: 4100 TUR Modelo: VW Polo Color:


Rojo Tarifa: 80.0 Disponible: false Puertas: 2 Marcha
automática: false

Con ve r sión de sce n de n t e de t ipos

Si una inst ancia de la clase base Vehiculo alm acena una referencia a un
obj et o de una de sus clases derivadas, ent onces es posible hacer una
conversión descendent e de t ipos, denom inada “ downcast ing” .

El obj et o miVehiculo de la clase base Vehiculo alm acena una referencia


a un obj et o de la clase derivada Turismo. En est e caso, est á perm it ido
hacer una conversión descendent e de t ipos. La conversión se debe hacer de
form a explícit a, indicando el nom bre de la clase a la que se desea convert ir.

Conversión descendent e de t ipos:

Vehiculo miVehiculo = new Turismo("4090 TUR",


"Skoda", "Fabia",
"Negro",
90.0,
2,
true);

Turismo miNuevoTurismo = (Turismo) miVehiculo;

76
Fu nda m e nt os de pr ogr a m a ción e n Ja va

En est e ej em plo, el obj et o de la clase Vehiculo alm acena un obj et o de la


clase derivada Turismo. El obj et o miVehiculo se conviert e de form a
explícit a a un obj et o de t ipo Turismo ut ilizando el “ cast ing” (Turismo).
Solo así es posible realizar la asignación a una referencia que ha sido
declarada de t ipo Turismo.

Si no se ut iliza el “ cast ing” , ent onces el com pilador de Java da un m ensaj e


de error que indica que se produce un conflict o de t ipos y no puede
convert ir aut om át icam ent e una referencia Vehiculo en una referencia
Turismo.

Es im port ant e señalar que el “ downcast ing” no siem pre es legal y puede
producir un error durant e la ej ecución del program a Java.

Je r a r qu ía de he r e n cia

Cualquier clase Java puede ser ut ilizada com o una clase base para ext ender
sus at ribut os y com port am ient o. La clase derivada que se obt enga, puede a
su vez, ser ext endida de nuevo. La relación de herencia es t ransit iva y
define una j erarquía.

En Java t odas las clases est án relacionadas en una única j erarquía de


herencia puest o que t oda clase hereda explícit am ent e de ot ra o bien
im plícit am ent e de Object.

La clase Vehiculo no ext iende explícit am ent e ot ra clase, por lo que se


puede decir que es una ext ensión de la clase Object de Java. Est o quiere
decir que cualquier obj et o de un program a Java se puede ver com o una
inst ancia de la clase Object.

77
Ex t e n sión de cla se s

El esquem a m uest ra la j erarquía de herencia de las clases asociadas a los


t ipos prim it ivos de Java.

78
5 . Am plia ción de cla se s

Ele m e n t os de cla se ( St a t ic)


Los at ribut os y m ét odos de una clase precedidos con la palabra static se
denom inan elem ent os de clase. Solo exist e un elem ent o est át ico para t odos
los obj et os de una m ism a clase. Est o significa que los elem ent os de clase
son com part idos por t odas las inst ancias de la clase. Cuando se m odifica un
elem ent o de clase t odas las inst ancias de la clase ven dicha m odificación.
Los at ribut os de clase deben t ener un valor inicial aunque no exist a ninguna
inst ancia de la clase. Si el elem ent o de clase es un valor const ant e,
ent onces se debe indicar la palabra final.

Por ej em plo, se puede definir la const ant e PI para calcular el perím et ro y el


área de la clase Circulo.

public class Circulo {


public static final double PI = 3.1415926536;
private double radio;

public Circulo(double radio) {


this.radio = radio;
}

public double getRadio() {


return this.radio;
}

public double calcularPerimetro() {


return 2 * PI * this.radio;
}

public double calcularArea() {


return PI * this.radio * this.radio;
}

79
Am plia ción de cla se s

El acceso al elem ent o est át ico PI, la inst anciación del obj et o miCirculo y
las invocaciones a los m ét odos calcularPerimetro() y
calcularArea().

// Este programa calcula el perímetro y el área de una circunferencia

public class PerimetroAreaCircunferencia {

public static void main (String[] args) {

System.out.println("El valor de PI es " + Circulo.PI);

Circulo miCirculo = new Circulo(10.0);

System.out.println("El radio del circulo es " +


miCirculo.getRadio() +
" su perimetro es " +
miCirculo.calcularPerimetro() +
" y su área es " +
miCirculo.calcularArea());
}
}

D e r e ch os de a cce so
El est ado de un obj et o est á dado por el conj unt o de valores de sus
at ribut os. Una m odificación arbit raria, int encionada o no, puede provocar
inconsist encias o com port am ient os no deseados de un obj et o. Es por est e
m ot ivo que se debe cont rolar el acceso a los at ribut os de los obj et os. Java
proporciona m ecanism os de acceso a los elem ent os de una clase, de form a
que se puede det erm inar el derecho de acceso de cada elem ent o según las
necesidades de los obj et os.

Acce so pr iva do. Los elem ent os privados solo se pueden ut ilizar dent ro de
la clase que los define. Para indicar el acceso privado se ut iliza private.

Acce so de pa que t e . El acceso a est os com ponent es es libre dent ro del


paquet e en el que se define la clase. El acceso de paquet e no se indica
expresam ent e.

80
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Acce so pr ot e gido. Los elem ent os prot egidos solo se pueden ut ilizar dent ro
de la clase que los define, aquellas clases que la ext iendan y cualquier clase
definida en el m ism o paquet e. Para indicar el acceso prot egido se ut iliza
protected.

Acce so pú blico. Los elem ent os públicos se pueden ut ilizar librem ent e. Para
indicar expresam ent e el acceso público se ut iliza public. No es necesario,
el acceso público se ut iliza com o valor por defect o m ient ras no se indique
private o protected.

Para lim it ar el acceso a los at ribut os de la clase Vehiculo se ut iliza


private. Al ut ilizar est e t ipo de acceso, solo los m ét odos ‘get ’ y ‘set ’ de la
clase pueden acceder a ellos.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
}

Con est a declaración, t odos los at ribut os de la clase t ienen acceso private
y el diagram a de clases m uest ra un signo m enos delant e del ident ificador
del at ribut o para indicar que es privado.

81
Am plia ción de cla se s

La clase Vehiculo con sus m ét odos ‘get y ‘set ’.

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;

public String getMatricula() {


return this.matricula;
}
public String getMarca() {
return this.marca;
}
public String getModelo() {
return this.modelo;
}
public String getColor() {
return this.color;
}
public double getTarifa() {
return this.tarifa;
}
public boolean getDisponible() {
return this.disponible;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public void setDisponible(boolean disponible) {
this.disponible = disponible;
}
}

La clase Vehiculo define m ét odos ‘get ’ para los at ribut os matrícula,


marca, modelo, color, tarifa y disponible. Los m ét odos ‘set ’ solo son
aplicables a los at ribut os tarifa y disponible porque se considera que el
rest o de at ribut os de la clase no pueden m odificar su valor una vez que se
ha creado el obj et o.

82
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La responsabilidad de m odificar los at ribut os de los obj et os es de los


m ét odos ‘set ’. Est os m ét odos deben verificar que el valor que se desea
asignar a un at ribut o es válido y cum ple con las rest ricciones de diseño de
la clase.

Pa qu e t e s
Los paquet es son grupos de clases, int erfaces y ot ros paquet es que est án
relacionados ent re sí. Los paquet es aport an una form a de encapsulación de
un nivel superior al de las clases. Perm it en unificar un conj unt o de clases e
int erfaces que se relacionan funcionalm ent e. Por ej em plo, el paquet e java
engloba un conj unt o de paquet es con ut ilidades de soport e para desarrollo y
ej ecución de aplicaciones com o util o lang.

Un paquet e se declara con la siguient e sint axis:

package nombre-del-paquete;

Por ej em plo, se podría definir el paquet e vehiculos para la aplicación de le


em presa de alquiler de vehículos:

package vehiculos;

Uso

Para ut ilizar com ponent es que est án en ot ro paquet e diferent e se debe


añadir una declaración de im port ación.

El uso de un paquet e se declara con la siguient e sint axis:

import nombre-del-paquete;

Se puede im port ar un paquet e ent ero o un com ponent e del paquet e. Por
ej em plo, si se desea im port ar las librerías para cálculos m at em át icos de
Java.

import java.math.*;

83
Am plia ción de cla se s

Si solo se desea im port ar una librería, ent onces se debe indicar el nom bre
del paquet e y del com ponent e. En est e ej em plo se im port a el com ponent e
Calendar de la librería de ut ilidades de Java.

import java.util.Calendar;

La declaración de im port ación se incluye ant es de la declaración de la clase.


En el siguient e ej em plo se incluye el com ponent e Calendar de util y se
ut iliza el m ét odo getInstance() para obt ener el día, el m es y el año de la
fecha act ual.

import java.util.Calendar;

public class CalcularFechaHoy {

public static void main (String[] args) {


int edad, diaHoy, mesHoy, añoHoy;

diaHoy = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
mesHoy = Calendar.getInstance().get(Calendar.MONTH) + 1;
añoHoy = Calendar.getInstance().get(Calendar.YEAR);

System.out.println("La fecha de hoy es " +


diaHoy + "/" +
mesHoy + "/" +
añoHoy);

N om br e s

El nom bre de un paquet e debe ser represent at ivo de su cont enido. El


nom bre puede cont ener la declaración de subpaquet e. Se puede incluir el
nom bre de la em presa que ha desarrollado el paquet e para facilit ar su
ident ificación.

package nombre-de-la-empresa.nombre-del-paquete;

84
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Por ej em plo, el paquet e vehiculos de la em presa “ Mi Em presa” se podría


ident ificar:

package miEmpresa.vehiculos;

Cla se s pr e de fin ida s


Una caract eríst ica im port ant e de Java es que aport a gran cant idad de clases
predefinidas. Est as clases est án especializadas en com unicaciones, web,
int erfaz de usuario, m at em át icas y m uchas ot ras aplicaciones.

A cont inuación se describen las clases asociadas a los t ipos prim it ivos de
Java, la clase Math y la clase String.

La s cla se s a socia da s a los t ipos pr im it ivos

Los t ipos predefinidos boolean, char, int, long, float y double son
t ipos sim ples, no son clases. Para facilit ar la program ación en Java se han
creado clases asociadas a los t ipos predefinidos. Est as clases proporcionan
m ét odos út iles para convert ir cadenas de t ext o a ot ros t ipos, para im prim ir
los núm eros con diversos form at os y para describir los t ipos sim ples.

Est as clases generan aut om át icam ent e una inst ancia cuando se usan t ipos
sim ples en cont ext os en los que se espera un obj et o. Adem ás, pueden
ut ilizarse en expresiones en donde se espera un t ipo sim ple.

Las clases asociadas a los t ipos prim it ivos son:

Clase Tipo prim it ivo asociado

Boolean boolean

Charact er char

I nt eger int

Long long

Float float

Double double

85
Am plia ción de cla se s

Est as clases t ienen los siguient es m ét odos:

 Mét odo const ruct or a part ir de un valor de t ipo sim ple

Character letra = new Character('A');


Integer numero = new Integer(10);

 Mét odo const ruct or que recibe una cadena de t ext o y la t raduce al t ipo
sim ple

Integer numero = new Integer("120");

 Mét odo toString() que t ransform a el valor alm acenado en una cadena

Integer numero = new Integer("100");


System.out.println(numero.toString());

 Mét odo equals() para com parar el valor alm acenado

Integer numero1 = new Integer("100");


Integer numero2 = new Integer("101");
System.out.println(numero2.equals(numero1));

La cla se M a t h

La clase Math cont iene const ant es y m ét odos de uso com ún en


m at em át icas. Todas las operaciones que se realizan en est a clase ut ilizan el
t ipo double. Cont iene la const ant e pi ( Math.PI) y el núm ero de Euler
( Math.E) . En las funciones t rigonom ét ricas, los ángulos se expresan en
radianes y los m ét odos devuelven valores de t ipo double. La clase Math
incluye funciones com o pot enciación, redondeo, cuadrado, raíz cuadrada y
m uchas m ás.

Para m ás inform ación sobre los m ét odos de la clase Math, consult e el API
de Java.

ht t p: / / docs.oracle.com / j avase/ 1.5.0/ docs/ api/ j ava/ lang/ Mat h.ht m l

86
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La cla se St r in g

La clase String se usa para m anej ar cadenas de caract eres de cualquier


longit ud. Un obj et o String se puede crear a part ir de una secuencia de
caract eres delim it ados por com illas dobles.

String nombre = "Juan";


String apellidos = "González López";

Un obj et o String t am bién se puede crear ut ilizando el const ruct or de la


clase.

String mensaje = new String(“Hola Mundo”);

La clase String t iene un t rat am ient o part icular en Java. Adem ás de la


const rucción de obj et os a part ir de lit erales ent re com illas, se pueden
aplicar los operadores + y + = para concat enar obj et os de t ipo String.

String hola = new String("Hola");


String espacio = new String (" ");
String mundo = new String("Mundo");
String holaMundo = hola + espacio + mundo;
System.out.println(holaMundo);

Para conocer la longit ud de un obj et o String se ut iliza el m ét odo


length(). Por ej em plo, el obj et o holaMundo t iene una longit ud de 10
caract eres.

System.out.println("El texto " + holaMundo + " tiene " +


holaMundo.length() + " letras");

87
Am plia ción de cla se s

Para com parar cada let ra de dos obj et os de t ipo String se ut iliza el
m ét odo contentEquals().

String nombre1 = "Angel";


String nombre2 = "Carlos";
System.out.println(nombre1.contentEquals(nombre2));

El m ét odo String.valueOf() devuelve una cadena correspondient e al


valor de su parám et ro. Est e m ét odo est á sobrecargado y acept a t ipos
boolean, char, int, long, float y double.

String año = String.ValueOf(2011); // año = "2011"

El m ét odo charAt(int posicion) de la clase String devuelve el


caráct er alm acenado en la posición indicada de una cadena de caract eres. El
prim er caráct er de una cadena se alm acena en la posición cero y el últ im o
en la posición correspondient e a la longit ud de la cadena – 1.

String holaMundo = "Hola Mundo";


System.out.println("La primera letra de 'Hola Mundo'" +
" es " + holaMundo.charAt(0));

Para m ás inform ación sobre los m ét odos de la clase String, consult e el API
de Java.

ht t p: / / docs.oracle.com / j avase/ 1.5.0/ docs/ api/ j ava/ lang/ St ring.ht m l

88
6 . Est r u ct u r a s de con t r ol

El cuerpo de un program a se com pone de un conj unt o de sent encias que


especifican las acciones que se realizan durant e su ej ecución. Dent ro de
cualquier program a, se escriben sent encias que definen la secuencia de
acciones a ej ecut ar. Est as sent encias incluyen acciones de cálculo, ent rada
y salida de dat os, alm acenam ient o de dat os, et c. Las sent encias se ej ecut an
una a una en el orden en el que han sido escrit as.

Se denom ina fluj o de un program a al orden de ej ecución de las sent encias


que form an part e del cuerpo de un program a. Las est ruct uras de cont rol
son una caract eríst ica básica de los lenguaj es que se ut iliza para m odificar
el fluj o de un program a.

Hay casos en los que el fluj o de un program a debe ej ecut ar det erm inadas
inst rucciones solo cuando se cum ple una condición. En ot ras ocasiones,
debe repet ir un conj unt o de sent encias un núm ero det erm inado de veces.
Las est ruct uras de cont rol perm it en condicionar el fluj o de ej ecución
dependiendo del est ado de las variables de un program a.

Las est ruct uras de cont rol básicas se pueden clasificar en est ruct uras de
selección, de repet ición y de salt o.

 Selección. Perm it en decidir si se ej ecut a un bloque de sent encias o no.

 Repet ición. Perm it en ej ecut ar un bloque de sent encias m uchas veces.

 Salt o. Perm it en dar un salt o y cont inuar la ej ecución de un program a en


un punt o dist int o de la siguient e sent encia en el orden nat ural de
ej ecución.

Las est ruct uras de cont rol se pueden com binar sin ningún t ipo de lim it ación.
Cualquier nuevo bloque de sent encias puede incluir est ruct uras de cont rol a
cont inuación de ot ras. Cuando se incluyen varias est ruct uras seguidas unas
de ot ras, se dice que son est ruct uras de cont rol apiladas.

Por ot ra part e, dent ro de un bloque de una est ruct ura de cont rol se puede
incluir ot ra est ruct ura de cont rol y dent ro de est e nuevo bloque se puede
incluir ot ra est ruct ura de cont rol y así sucesivam ent e. Cuando una
est ruct ura cont iene ot ra est ruct ura, se dice que son est ruct uras de cont rol
anidadas.

Es im port ant e dest acar que no exist e lim it ación en cuant o al núm ero de
est ruct uras de cont rol apiladas o anidadas que se pueden ut ilizar en un

89
Est r u ct u r a s de con t r ol

program a Java. La única rest ricción a t ener en cuent a es la claridad y la


legibilidad del program a.

Est r u ct u r a s de se le cción
Las est ruct uras de selección perm it en m odificar el fluj o de un program a. La
decisión de ej ecut ar un bloque de sent encias queda condicionada por el
valor de una expresión lógica definida ut ilizando variables del program a.

Est r u ct u r a if

La est ruct ura if se denom ina est ruct ura de selección única porque ej ecut a
un bloque de sent encias solo cuando se cum ple la condición del if. Si la
condición es verdadera se ej ecut a el bloque de sent encias. Si la condición es
falsa, el fluj o del program a cont inúa en la sent encia inm ediat am ent e
post erior al if.

Una sent encia if t iene la siguient e sint axis:

if (condicion) {
bloque-de-sentencias
}

La condición es una expresión que evalúa un valor lógico, por lo que el


result ado solo puede ser true o false. La condición siem pre se escribe
ent re parént esis. La selección se produce sobre el bloque de sent encias
delim it ado por llaves. Si el bloque de sent encias solo t iene una sent encia,
ent onces se puede escribir sin las llaves, com o se m uest ra a cont inuación.

if (condicion)
sentencia;

Cuando el fluj o de un program a llega a una est ruct ura if, se evalúa la
condición y el bloque de inst rucciones se ej ecut a si el valor de la condición
es true. Si la condición es false, ent onces se ej ecut a la sent encia
inm ediat am ent e post erior al if.

90
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Por ej em plo, si la calificación de un alum no es 10, ent onces se debe


m ost rar por la consola un m ensaj e indicando que t iene una Mat rícula de
Honor.

La sent encia if considerando que calificación es una variable de t ipo int:

if (calificacion == 10) {
System.out.println("Matrícula de Honor");
}

En est e ej em plo el m ensaj e “ Mat rícula de Honor” solo se m uest ra cuando el


valor de la calificación es igual a 10.

Est r u ct u r a if e lse

La est ruct ura if-else se denom ina de selección doble porque selecciona
ent re dos bloques de sent encias m ut uam ent e excluyent es. Si se cum ple la
condición, se ej ecut a el bloque de sent encias asociado al if. Si la condición
no se cum ple, ent onces se ej ecut a el bloque de sent encias asociado al
else.

Una sent encia if-else t iene la siguient e sint axis:

if (condicion) {
bloque-de-sentencias-if
}
else {
bloque-de-sentencias-else
}

Al igual que en el if, la condición se debe escribir ent re parént esis. La


selección depende del result ado de evaluar la condición. Si el result ado es
true, se ej ecut a el bloque de sent encias del if, en cualquier ot ro caso se
ej ecut a el bloque de inst rucciones del else. Después de ej ecut ar el bloque
de sent encias se ej ecut a la sent encia inm ediat am ent e post erior al if-else.

91
Est r u ct u r a s de con t r ol

Por ej em plo, si se desea m ost rar un m ensaj e por la consola para indicar si
un núm ero es par o im par, bast a con calcular el rest o de la división del
núm ero ent re 2 con el operador % . Si el rest o es igual a cero, ent onces el
núm ero es par, en caso cont rario el núm ero es im par.

La sent encia if-else:

if (numero % 2 == 0)
System.out.println("El número es par");
else
System.out.println("El número es impar");

Com o se ha com ent ado ant es, los bloques de sent encias son m ut uam ent e
excluyent es. Si se cum ple la condición se ej ecut a un bloque de sent encias,
en caso cont rario se ej ecut a el ot ro bloque de sent encias. Teniendo en
cuent a est o, se podría escribir una sent encia if-else con la condición
cont raria y con los bloques de sent encias int ercam biados.

if (numero % 2 != 0)
System.out.println("El número es impar");
else
System.out.println("El número es par");

Si fuera necesario evaluar m ás de una condición, ent onces se deben ut ilizar


varias est ruct uras de selección anidadas. Por ej em plo, para m ost rar la
calificación de un alum no, es necesario evaluar las condiciones que se
indican en la siguient e t abla.

Calificación Descripción

10 Mat rícula de Honor

9 Sobresalient e

7, 8 Not able

6 Bien

5 Aprobado

0,1,2,3,4 Suspenso

92
Fu nda m e nt os de pr ogr a m a ción e n Ja va

De la t abla ant erior, se puede ver que las condiciones son excluyent es ent re
sí. Si la calificación es 10 se m uest ra “ Mat rícula de Honor” . En caso
cont rario la calificación es m enor de 10 y es necesario seleccionar ent re
“ Sobresalient e” , “ Not able” , “ Bien” , “ Aprobado” y “ Suspenso” . Si la
calificación es 9 se m uest ra “ Sobresalient e” . En caso cont rario, la
calificación es m enor de 9 y se debe seleccionar ent re “ Not able” , “ Bien” ,
“ Aprobado” y “ Suspenso” . Si la calificación es m ayor o igual a 7 se m uest ra
“ Not able” . En caso cont rario la calificación es m enor de 7 y se debe
seleccionar ent re “ Bien” , “ Aprobado” y “ Suspenso” . Si la calificación es 6 se
m uest ra “ Bien” . En caso cont rario la calificación es m enor o igual a 6 y se
debe seleccionar ent re “ Aprobado” y “ Suspenso” . Si la calificación es 5 se
m uest ra “ Aprobado” , en caso cont rario “ Suspenso” .

La sent encia if-else:

int calificacion = 7;

if (calificacion == 10)
System.out.println("Matrícula de Honor");
else
if (calificacion == 9)
System.out.println("Sobresaliente");
else
if (calificacion >= 7)
System.out.println("Notable");
else
if (calificacion == 6)
System.out.println("Bien");
else
if (calificacion == 5)
System.out.println("Aprobado");
else
System.out.println("Suspenso");

93
Est r u ct u r a s de con t r ol

Est r u ct u r a if e lse if

La est ruct ura if-else-if se puede aplicar en los m ism os casos en que se
ut iliza un if-else anidado. Est a est ruct ura perm it e escribir de form a
abreviada las condiciones de un if-else anidado.

Una sent encia if-else-if t iene la siguient e sint axis:

if (condicion-1) {
bloque-de-sentencias-condicion-1
} else if (condicion-2) {
bloque-de-sentencias-condicion-2
} else {
bloque-de-sentencias-else
}

La sent encia if-else-if para el ej em plo de las calificaciones:

int calificacion = 7;

if (calificacion == 10) {
System.out.println("Matrícula de Honor");
} else if (calificacion == 9) {
System.out.println("Sobresaliente");
} else if (calificacion >= 7) {
System.out.println("Notable");
} else if (calificacion == 6) {
System.out.println("Bien");
} else if (calificacion == 5) {
System.out.println("Aprobado");
} else {
System.out.println("Suspenso");
}

94
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Est r u ct u r a sw it ch

La est ruct ura switch es una est ruct ura de selección m últ iple que perm it e
seleccionar un bloque de sent encias ent re varios casos. En ciert o m odo, es
parecido a una est ruct ura de if-else anidados. La diferencia est á en que
la selección del bloque de sent encias depende de la evaluación de una
expresión que se com para por igualdad con cada uno de los casos. La
est ruct ura switch const a de una expresión y una serie de et iquet as case y
una opción default. La sent encia break indica el final de la ej ecución del
switch.

Una sent encia switch t iene la siguient e sint axis:

switch (expresion) {
case valor-1:
bloque-de-sentencias-1;
break;
case valor-2:
bloque-de-sentencias-2;
break;
case valor-3:
bloque-de-sentencias-3;
break;
case valor-4:
bloque-de-sentencias-4;
break;
case valor-5:
bloque-de-sentencias-5;
break;
default:
bloque-de-sentencias-default;
break;
}

95
Est r u ct u r a s de con t r ol

La expresión debe devolver un valor de t ipo ent ero (int) o caráct er


(char) y es obligat orio que la expresión se escriba ent re parént esis. A
cont inuación de cada case aparece uno o m ás valores const ant es del m ism o
t ipo que el valor que devuelve la expresión del switch.

Para int errum pir la ej ecución de las sent encias del switch se ut iliza la
sent encia break que provoca la finalización del switch. El fluj o del
program a cont inúa en la sent encia inm ediat am ent e post erior al switch.

Una vez que se evalúa la expresión del switch, se com prueba si coincide
con el valor del prim er case. En caso cont rario, se com prueba si coincide
con el valor del segundo case y así sucesivam ent e. Cuando el valor de la
expresión coincide con el valor de uno de los case, se em pieza a ej ecut ar el
bloque de inst rucciones correspondient e al case hast a encont rar una
sent encia break o al llegar al final de la est ruct ura switch donde se cierra
la llave. Si no se encuent ra un case que coincida con el valor de la
expresión, se ej ecut a el bloque de sent encias correspondient e a la et iquet a
default.

Para asegurar el correct o fluj o de ej ecución de un program a durant e la


evaluación de una sent encia switch, es recom endable incluir una sent encia
break al final del bloque de inst rucciones de cada case, incluido el
correspondient e a la et iquet a default. Est o es im port ant e, porque si se
om it e la sent encia break, cuando finaliza la ej ecución del bloque de
sent encias de un case, el fluj o del program a cont inúa ej ecut ando los case
siguient es y est o puede provocar un com port am ient o erróneo del program a.
El siguient e ej em plo m uest ra la im port ancia del uso del break en una
sent encia switch.

Suponga que en una em presa de consult oría la cat egoría profesional de un


em pleado se calcula a part ir de su t asa de cost e. La t abla m uest ra los
valores de las t asas y sus correspondient es cat egorías.

Calificación Descripción

Menor de 80 La cat egoría es ‘C’ de consult or Junior

Mayor o igual a 80 y m enor de 120 La cat egoría es ‘B’ de consult or Senior

Mayor o igual a 120 La cat egoría es ‘A’ de socio

96
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Program a que ut iliza un switch para seleccionar la descripción


correspondient e a cada cat egoría.

public class CategoriasProfesionales {


public static void main(String[] args) {
int tasaEstandar = 150;
char categoriaProfesional;

if (tasaEstandar < 80)


categoriaProfesional = 'C';
else
if (tasaEstandar < 120)
categoriaProfesional = 'B';
else
categoriaProfesional = 'A';

System.out.print("Tasa " + tasaEstandar + " euros, ");


System.out.print("categoría " + categoriaProfesional +
" de ");

switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
case 'B': System.out.print("Senior ");
case 'C': System.out.print("Junior ");
default: System.out.print("¡Indefinida! ");
}
}
}

El valor de la tasaEstandar es 150 euros, de m anera que se asigna el


valor 'A' a la variable categoriaProfesional. En el switch se cum ple el
prim er case y se m uest ra por la consola el t ext o “ Socio” . Según est o, el
program a debería m ost rar el m ensaj e:

Tasa 90 euros, categoría 'A' de Socio

No es así, el prim er case no t iene break por lo que no finaliza la ej ecución


del switch y se ej ecut an los bloques de sent encias correspondient es al

97
Est r u ct u r a s de con t r ol

segundo case, al t ercer case y al default. El program a m uest ra por la


consola el m ensaj e:

Tasa 90 euros, categoría 'A' de Socio Senior Junior


¡Indefinida!

Para evit ar que se ej ecut e m ás de un bloque de sent encias de un switch,


se debe incluir un break al final del bloque de cada case.

switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
break;
case 'B': System.out.print("Senior ");
break;
case 'C': System.out.print("Junior ");
break;
default: System.out.print("¡Indefinida! ");
break;
}

La sent encia break al final de cada case asegura que solo se ej ecut a un
case y después finaliza el switch.

98
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public class CategoriasProfesionales {


public static void main(String[] args) {
int tasaEstandar = 150;
char categoriaProfesional;

if (tasaEstandar < 80)


categoriaProfesional = 'C';
else
if (tasaEstandar < 120)
categoriaProfesional = 'B';
else
categoriaProfesional = 'A';

System.out.print("Tasa " + tasaEstandar + " euros, ");


System.out.print("categoría " + categoriaProfesional +
" de ");

switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
break;
case 'B': System.out.print("Senior ");
break;
case 'C': System.out.print("Junior ");
break;
default: System.out.print("¡Indefinida! ");
break;
}
}
}

De nuevo, se asigna el valor 'A' a la variable categoriaProfesional. En


el switch se cum ple el prim er case y la salida por la consola es:

Tasa 90 euros, categoría ‘A’ de Socio

99
Est r u ct u r a s de con t r ol

Volviendo al ej em plo de las calificaciones que ant es se ha codificado


ut ilizando if-else anidados, ahora se ut iliza un switch.

public class Calificaciones {


public static void main(String[] args) {
int calificacion = 9;
switch (calificacion) {
case 0:
case 1:
case 2:
case 3:
case 4: System.out.println("Suspenso");
break;
case 5: System.out.println("Aprobado");
break;
case 6: System.out.println("Bien");
break;
case 7:
case 8: System.out.println("Notable");
break;
case 9: System.out.println("Sobresaliente");
break;
case 10: System.out.println("Matrícula de
Honor");
break;
default: System.out.println("No presentado");
break;
}
}
}

100
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Es im port ant e ver que los case correspondient es a los valores 0, 1, 2 y 3 se


han dej ado vacíos porque el bloque de sent encias para est os casos es el
m ism o que el del case 4. Para evit ar repet ir est e código varias veces, se
dej a vacío el bloque correspondient e a est os casos y no se incluye el break.
De est a m anera, cuando se cum ple uno de ellos, se ej ecut a el bloque de
sent encias correspondient e al case, que para los valores 0, 1, 2 y 3, est á
vacío. Com o no hay break, se ej ecut an las siguient es líneas del program a
hast a llegar al bloque de sent encias correspondient e al case 4, que
m uest ra el m ensaj e “ Suspenso” y, cuando encuent ra el break, finaliza el
switch.

El switch se diferencia de ot ras est ruct uras en que no es necesario


delim it ar ent re llaves el bloque de sent encias de cada case. Solo son
obligat orias las llaves de inicio y fin del switch. En una est ruct ura switch
es obligat orio que los valores de los dist int os casos sean diferent es. Si no
hay un caso que coincida con el valor de la expresión y no se incluye la
et iquet a default, ent onces el switch no ej ecut a ninguno de los bloques
de sent encias.

Por últ im o, conviene recordar que un switch es una est ruct ura apropiada
para seleccionar ent re un conj unt o de opciones sim ples o predefinidas. No
se puede aplicar cuando la selección se basa en opciones com plej as o
cuando dependen de un int ervalo de valores. En ese caso es necesario
ut ilizar una est ruct ura if-else anidada.

El ope r a dor con dicion a l

El operador condicional (?:) se relaciona con la est ruct ura if-else. Es el


único operador de Java que ut iliza t res operandos. El prim er operando es
una condición lógica, el segundo es el valor que t om a la expresión cuando la
condición es true y el t ercero es el valor que t om a la expresión cuando la
condición es false.

El operador evalúa la condición delant e del sím bolo ?, que puede escribirse
ent re parént esis. Si vale true devuelve el valor que aparece a cont inuación
del signo ?. Si es false devuelve el valor que aparece a cont inuación de
los dos punt os.

El operador condicional t iene la siguient e sint axis:

condicion-logica ? valor-si-verdadero : valor-si-falso;

101
Est r u ct u r a s de con t r ol

La condición lógica t am bién se puede expresar ent re parént esis:

(condicion-logica)? valor-si-verdadero : valor-si-falso;

Después de evaluar la condición lógica, se devuelve el valor correspondient e


al result ado lógico verdadero o falso. Por ej em plo, dada la edad de una
persona, se desea m ost rar un m ensaj e por la consola que indique si es
m ayor de edad o no.

int edad = 16;


String txt;
txt = (edad >= 18) ? "Mayor de edad" : "Menor de edad";
System.out.print(txt);

La condición lógica es edad m ayor o igual a 18 años. Si es verdadera, el


operador devuelve el t ext o “ Mayor de edad” , en caso cont rario devuelve
“ Menor de edad” .

En est e ej em plo la variable edad se inicializa a 16, por lo que el m ensaj e


que se m uest ra por la consola es:

Menor de edad

Est r u ct u r a s de r e pe t ición
Las est ruct uras de repet ición perm it en repet ir m uchas veces un bloque de
sent encias. A est as est ruct uras t am bién se les conoce com o est ruct uras
it erat ivas o bucles.

Com o las est ruct uras de selección, las est ruct uras de repet ición se pueden
com binar y anidar. Es frecuent e ut ilizar una est ruct ura de repet ición que
cont enga un bloque de sent encias que com bine ot ras est ruct uras de
repet ición y de selección.

Las est ruct uras de repet ición se com ponen de cuat ro part es: la
inicialización, la condición, el bloque de sent encias y la act ualización.

102
Fu nda m e nt os de pr ogr a m a ción e n Ja va

 I nicialización. Perm it e inicializar la est ruct ura it erat iva, norm alm ent e
consist e en la declaración e inicialización de la variable de cont rol del
bucle.

 Condición. Define la condición que se evalúa para ej ecut ar el bloque de


sent encias de la est ruct ura it erat iva. Dependiendo del t ipo de est ruct ura
que se ut ilice, la condición se com prueba ant es o después de realizar
cada it eración.

 Bloque de sent encias. Conj unt o de sent encias que se ej ecut an dent ro de
la est ruct ura it erat iva.

 Act ualización. Act ualización de la variable de cont rol del bucle.


Norm alm ent e se realiza al finalizar la ej ecución del bloque de sent encias.

Est r u ct u r a w h ile

La est ruct ura de repet ición while repit e el bloque de sent encias m ient ras la
condición del while es verdadera.

El diagram a de fluj o de una est ruct ura while m uest ra que la condición se
verifica j ust o después de inicializar la variable de cont rol. Si el result ado de
evaluar la condición por prim era es falso, ent onces no se ej ecut a el bloque
de sent encias.

103
Est r u ct u r a s de con t r ol

Un while t iene la siguient e sint axis:

inicialización;
while (condición) {
bloque-de-sentencias;
actualizacion;
}

Est a es la sint axis general. La condición del while se escribe


obligat oriam ent e ent re parént esis.

Un while no necesariam ent e requiere inicialización y act ualización de una


variable de cont rol. En ese caso solo es necesario incluir la condición y el
bloque de sent encias:

while (condición) {
bloque-de-sentencias;
}

Cuando el program a ej ecut a un while, lo prim ero que hace es evaluar la


condición. Si es verdadera ej ecut a el bloque de sent encias, si es falsa
finaliza el while.

En cada it eración, cuando finaliza la ej ecución del bloque de sent encias se


vuelve a evaluar la condición. De nuevo, si es verdadera ej ecut a una vez
m ás el bloque de sent encias, si es falsa finaliza el while. Cuando est o se
produce, el fluj o del program a cont inúa en la sent encia inm ediat am ent e
post erior al while.

Si la prim era vez que se evalúa la condición el result ado es falso, ent onces
no se ej ecut a el bloque de sent encias. Por est a razón, se dice que un while
se ej ecut a cero o m ás veces. Si la condición siem pre es verdadera,
ent onces el while nunca t erm ina y se ej ecut a indefinidam ent e. Est o se
conoce com o bucle infinit o.

El siguient e ej em plo m uest ra el uso del while para calcular la función


fact orial de un núm ero ent ero posit ivo ‘n’.

104
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La función fact orial se define:

0! = 1
1! = 1
2! = 1 x 2
3! = 1 x 2 x 3
4! = 1 x 2 x 3 x 4
...
n!= 1 x 2 x 3 x 4 x 5 x ... x (n-2) x (n-1) x (n)

De la definición ant erior, se puede calcular el fact orial ut ilizando una


est ruct ura repet it iva con una variable de cont rol que em piece en 1 y
t erm ine en ‘n’. La act ualización de la variable de cont rol del while sum a
uno cada vez.

Program a que calcula la función fact orial de un núm ero ut ilizando la


est ruct ura while.

public class FactorialWhile {


public static void main(String[] args) {
int n = 5; // n se inicializa a 5 para calcular 5!
int factorial = 1 // factorial se inicializa a 1

int i = 1; // el valor inicial de i es 1

while (i <= n) {
factorial = factorial * i;
i++;
}

System.out.println("El factorial de " + n + " es " +


factorial);

}
}

105
Est r u ct u r a s de con t r ol

En la expresión factorial = factorial * i la variable factorial


aparece dos veces. Prim ero se calcula el product o factorial * i y
después se asigna est e result ado a la variable factorial. Es por est o que
la t abla m uest ra una colum na con los valores de los operandos del product o
y ot ra con el valor final de la variable fact orial. La siguient e t abla m uest ra el
proceso de cálculo que se realiza en el while.

i n fact orial * i fact orial

1 5 1 * 1 1

2 5 1 * 2 2

3 5 2 * 3 6

4 5 6 * 4 24

5 5 24 * 5 120

La variable factorial se inicializa a 1. En la prim era it eración i vale 1, se


calcula el product o factorial * i con los valores 1 * 1 y se asigna 1 a la
variable factorial. En la segunda it eración i vale 2, se calcula
factorial * i con los valores 1 * 2 y se asigna 2 a la variable
factorial. En la t ercera it eración i vale 3, se calcula factorial * i
con los valores 2 * 3 y se asigna 6 a la variable factorial. En la cuart a
it eración i vale 4, se calcula factorial * i con los valores 6 * 4 y se
asigna 24 a la variable factorial. En la últ im a it eración i vale 5, se
calcula el product o factorial * i con los valores 24 * 5 y se asigna 120
a la variable factorial.

De los result ados de la t abla ant erior, se puede observar que no es


necesario calcular el product o factorial * i en la prim era it eración
cuando i vale 1. Est e product o siem pre va a dar com o result ado 1.

El algorit m o es m ás eficient e si se elim ina la prim era it eración, bast a con


inicializar la variable de cont rol i a 2. En est e ej em plo, el valor inicial de i
es 1 para que el algorit m o sea m ás claro.

106
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Est r u ct u r a do- w h ile

La est ruct ura de repet ición do-while ej ecut a el bloque de sent encias al
m enos una vez. Después com prueba la condición y repit e el bloque de
sent encias m ient ras la condición es verdadera.

El diagram a de fluj o de una est ruct ura do-while m uest ra que la condición
se verifica al final, después de ej ecut ar el bloque de sent encias la prim era
vez.

Un do-while t iene la siguient e sint axis:

inicialización;
do {
bloque-de-sentencias;
actualizacion;
} while (condición);

Est a es la sint axis general. La condición del do-while se escribe


obligat oriam ent e ent re parént esis.

107
Est r u ct u r a s de con t r ol

Un do-while no necesariam ent e ut iliza una variable de cont rol. En ese


caso solo es necesario incluir la condición y el bloque de sent encias:

do {
bloque-de-sentencias;
} while (condición);

Cuando el program a ej ecut a un do-while, lo prim ero que hace es ej ecut ar


el bloque de sent encias y luego evalúa la condición. Si es verdadera,
ej ecut a de nuevo el bloque de sent encias, si es falsa finaliza el do-while.

En cada it eración, cuando finaliza la ej ecución del bloque de sent encias se


vuelve a evaluar la condición. De nuevo, si es verdadera ej ecut a una vez
m ás el bloque de sent encias, si es falsa finaliza el do-while. Cuando est o
se produce, el fluj o del program a cont inúa en la sent encia inm ediat am ent e
post erior al do-while.

Program a que calcula la función fact orial de un núm ero ut ilizando la


est ruct ura do-while.

public class FactorialDoWhile {


public static void main(String[] args) {
int n = 5; // n se inicializa a 5 para calcular 5!
int factorial = 1 // factorial se inicializa a 1

int i = 1; // el valor inicial de i es 1

do {
factorial = factorial * i;
i++;
} while (i <= n);

System.out.println("El factorial de " + n + " es " +


factorial);

}
}

108
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Est r u ct u r a for

La est ruct ura de repet ición for repit e el bloque de sent encias m ient ras la
condición del for es verdadera. Un for es un caso part icular de la
est ruct ura while. Solo se debe ut ilizar cuando se sabe el núm ero de veces
que se debe repet ir el bloque de sent encias.

El diagram a de fluj o de una est ruct ura for es igual que el de un while. Un
for verifica la condición j ust o después de inicializar la variable de cont rol.
Si el result ado de evaluar la condición por prim era es falso, ent onces no se
ej ecut a el bloque de sent encias.

Un for t iene la siguient e sint axis:

for (inicialización; condición; actualización) {


bloque-de-sentencias;
}

Cuando el program a ej ecut a un for, lo prim ero que hace es evaluar la


condición. Si es verdadera ej ecut a el bloque de sent encias, si es falsa
finaliza el for.

109
Est r u ct u r a s de con t r ol

En cada it eración, cuando finaliza la ej ecución del bloque de sent encias se


vuelve a evaluar la condición. De nuevo, si es verdadera ej ecut a una vez
m ás el bloque de sent encias, si es falsa finaliza el for. Cuando est o se
produce, el fluj o del program a cont inúa en la sent encia inm ediat am ent e
post erior al for.

Program a que calcula la función fact orial de un núm ero ut ilizando la


est ruct ura for.

public class FactorialFor {


public static void main(String[] args) {
int n = 5; // n se inicializa a 5 para calcular 5!
int factorial = 1 // factorial se inicializa a 1

for (int i=1; i <= n; i++) {


factorial = factorial * i;
}

System.out.println("El factorial de " + n + " es " +


factorial);

}
}

Norm alm ent e la variable de cont rol se declara y se inicializa en la sección de


inicialización de la variable. En est e ej em plo se hace int i= 1, es decir se
declara una variable i de t ipo int y se inicializa a 1. La condición del for
es i <= n, la m ism a que se ha ut ilizado en el while y el do-while. Por
últ im o, la variable i se increm ent a en 1 en cada it eración. En el for, el
while y el do-while el increm ent o de i se realiza con el operador + + .

Es posible com binar est ruct uras de selección y est ruct uras de it eración. Si
se define una est ruct ura de repet ición dent ro de ot ra, ent onces se t iene una
est ruct ura de repet ición anidada.

110
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El siguient e ej em plo ut iliza t res for anidados. ¿Cuánt as veces se m uest ra


por la consola el m ensaj e “ Hola Mundo” ?

public class ForAnidado {


public static void main(String[] args) {

for (int i=1; i <= 5; i++)


for (int j=2; j <= 4; j++)
for (int k=3; k <= 6; k++)
System.out.println("Hola Mundo");
}
}

Para saber cuánt as veces se im prim e el m ensaj e es necesario saber cuánt as


veces se repit e cada for. El for de i se repit e 5 veces, el for de j se repit e
3 veces y el for de k se repit e 4 veces. Com o el for de k est á dent ro del
for de j y ést e dent ro del for de i, el m ensaj e se im prim e 5x3x4 veces,
un t ot al de 60 veces.

Uso de la s e st r u ct u r a s de r e pe t ición

Es im port ant e ut ilizar la est ruct ura de repet ición m ás apropiada para cada
caso. En general, se recom ienda seguir los siguient es crit erios:

 El while se debe ut ilizar cuando no se sabe el núm ero de veces que se


va a repet ir el bloque de sent encias.

 El do-while se debe ut ilizar cuando el bloque de sent encias se debe


ej ecut ar al m enos una vez.

 El for se debe ut ilizar cuando se sabe el núm ero de veces que se va a


repet ir el bloque de sent encias. Un for es út il cuando se conoce el valor
inicial para la variable de cont rol del bucle y adem ás es necesario ut ilizar
una expresión arit m ét ica para act ualizar est a variable.

111
Est r u ct u r a s de con t r ol

Ej e m plo de u so de w h ile . Ut ilice una est ruct ura while para det erm inar
m ediant e rest as sucesivas si un núm ero ent ero posit ivo es par.

Para saber si un núm ero ent ero es par es necesario rest ar 2 sucesivam ent e
m ient ras el núm ero sea m ayor o igual a 2. Si después de realizar las rest as
el núm ero es cero, el núm ero es par, si no, es im par.

public class NumeroParImpar {


public static void main(String[] args) {

// este programa verifica si un número positivo


// es para o impar

int numero = 12; // el valor inicial del número

while (numero >= 2) {


numero = numero - 2;
}

if (numero == 0)
System.out.println("El número es par");
else
System.out.println("El número es impar");

}
}

112
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ej e m plo de u so de do- w h ile . Ut ilice una est ruct ura do-while que
m uest re por la consola núm eros ent eros aleat orios ent re 0 y 100 hast a que
salga el núm ero 50.

Para calcular un núm ero aleat orio se ut iliza el m ét odo random() de la clase
Math. Est e m ét odo devuelve un valor de t ipo double ent re 0 y 1. Est e
result ado se m ult iplica por 100 para que el valor est é en el rango ent re 0 y
100. Ant es de asignar el result ado a la variable núm ero se conviert e a un
valor ent ero ut ilizando (int).

El do-while se ej ecut a al m enos una vez y m uest ra los núm eros aleat orios
calculados m ient ras el núm ero sea diferent e de 50.

public class NumerosAleatorios {


public static void main(String[] args) {

// este programa muestra números enteros aleatorios


// entre 0 y 100 hasta que sale el 50

do {
numero = (int) (100 * Math.random());
System.out.println("Número aleatorio: " + numero);
} while (numero != 50);

}
}

113
Est r u ct u r a s de con t r ol

Ej e m plo de u so de for . Ut ilice una est ruct ura for para calcular la función
pot encia de un núm ero ent ero posit ivo ut ilizando product os. La pot encia se
calcula com o el product o de la base repet ido t ant as veces com o el valor del
exponent e.

potencia = base x base x base x base x base x ... x base

I nicialm ent e, el valor de la variable pot encia es 1 porque cualquier núm ero
elevado a la pot encia cero es 1.

public class PotenciaFor {


public static void main(String[] args) {

// este programa calcula 2^10

int base = 2; // base


int exponente = 10; // exponente al que se eleva la base
int potencia = 1; // potencia se inicializa a 1
// porque x^0 = 1

for (int i=1; i <= exponente; i++) {


potencia = potencia * base;
}

System.out.println("La potencia es " + potencia);

}
}

114
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Est r u ct u r a s de sa lt o
En Java exist en dos sent encias que perm it en m odificar el fluj o secuencial de
un program a y provocan un salt o en la ej ecución. Est as sent encias son
break y continue. Am bas se ut ilizan con las est ruct uras de repet ición
para int errum pir la ej ecución con break o volver al principio con continue.
Adem ás, el break se ut iliza para int errum pir la ej ecución de un switch.

Se n t e n cia br e a k

La sent encia break se ut iliza para int errum pir la ej ecución de una
est ruct ura de repet ición o de un switch. Cuando se ej ecut a el break, el
fluj o del program a cont inúa en la sent encia inm ediat am ent e post erior a la
est ruct ura de repet ición o al switch.

Se n t e n cia con t in u e

La sent encia continue únicam ent e puede aparecer en una est ruct ura de
repet ición. Cuando se ej ecut a un continue, se dej a de ej ecut ar el rest o del
bloque de sent encias de la est ruct ura it erat iva para volver al inicio de ést a.

Uso de br e a k y con t in u e

A cont inuación se m uest ran ej em plos del uso de las sent encias break y
cont inue.

Ej e m plo de u so de br e a k e n u n sw it ch . Desarrolle un program a que


cuent e el núm ero de vocales, consonant es y espacios de una cadena de
caract eres.

Ut ilice un for para com parar cada una de las let ras de la frase. Dent ro del
for ut ilice un switch para seleccionar ent re vocales, consonant es y
espacios. Las variables vocales, consonant es y espacios se inicializan a cero
y se ut ilizan para cont ar el núm ero de veces que aparecen en la frase.

Defina una variable let ra de t ipo char. Alm acene la let ra correspondient e a
la posición i de la cadena de caract eres. Ut ilice el m ét odo charAt(i) de la
clase String para copiar el valor de est e caráct er a la variable let ra.

Ut ilice la sent encia break al final del bloque de sent encias de los case
correspondient es a vocales, espacios y consonant es.

115
Est r u ct u r a s de con t r ol

public class ConsonantesVocales {


public static void main(String[] args) {
String frase = "Hola Mundo";
char letra;
int vocales = 0, consonantes = 0, espacios = 0;

for (int i=0; i<frase.length(); i++) {


letra = frase.charAt(i);

switch (letra) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': vocales++;
break;
case ' ': espacios++;
break;
default: consonantes++;
break;
}
}

System.out.println("La frase '" + frase + "' tiene " +


vocales + " vocales, " +
consonantes + " consonantes y " +
espacios + " espacios. ");

}
}

116
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ej e m plo de u so de br e a k e n u n do- w h ile . Modifique el program a de los


núm eros aleat orios desarrollado en el ej em plo de uso de un do-while.
I ncluya un break que int errum pa el do-while cuando el núm ero aleat orio
sea igual a 25. El program a debe t erm inar cuando el núm ero aleat orio sea
25 o 50.

public class NumerosAleatoriosConBreak {


public static void main(String[] args) {

// este programa muestra números enteros aleatorios


// entre 0 y 100 hasta que sale el 25 o el 50

do {
numero = (int) (100 * Math.random());
System.out.println("Número aleatorio: " + numero);

if (numero == 25)
break;

} while (numero != 50);

}
}

117
Est r u ct u r a s de con t r ol

Ej e m plo de u so de con t in u e e n u n for . Desarrolle un program a que


m uest re por consola los núm eros pares ent re 2 y 10. Ut ilice un for para
valores de i de 1 a 10 y aplique la sent encia continue para int errum pir la
ej ecución de las it eraciones im pares.

public class NumerosPares {


public static void main(String[] args) {

for (int i=1; i<=10; i++) {


if (i % 2 != 0)
continue; //el número es impar, se interrumpe la iteración

System.out.println("Números pares: " + i);


}

}
}

118
7 . Est r u ct u r a s de a lm a ce n a m ie n t o

Ar r a ys
Java proporciona una est ruct ura de alm acenam ient o denom inada array que
perm it e alm acenar m uchos obj et os de la m ism a clase e ident ificarlos con el
m ism o nom bre.

La declaración de un array t iene la siguient e sint axis:

tipo-o-clase[] identificador-array;
o
tipo-o-clase identificador-array[];

Por ej em plo, un array de núm eros ent eros se puede declarar de dos
form as:

int[] numeros;
o
int numeros[];

Am bas declaraciones son equivalent es, el t ipo base del array es int y el
nom bre del array es numeros. Todos los elem ent os de la est ruct ura
numeros[] alm acenan un int. La prim era declaración define un array de
obj et os de t ipo prim it ivo int con ident ificador numeros. La segunda
declaración dice que cada elem ent o de la form a numeros[] es de t ipo int.

Ej em plos de declaraciones de arrays:

int[] numerosEnteros; // array de tipo int


double[] numerosReales; // array de tipo double
String[] nombres; // array de tipo String
Object[] objetos; // array de la clase Object
Vehiculo[] vehiculos; // array de la clase Vehiculo
Turismo[] turismos; // array de la clase Turismo

119
Est r u ct u r a s de a lm a ce n a m ie n t o

Se denom ina t ipo base del array al t ipo que se declara para sus elem ent os.
Est e t ipo base puede ser un t ipo prim it ivo de Java, un obj et o o una clase
definida. En los ej em plos ant eriores se han ut ilizado t ipos prim it ivos y
clases com o t ipo base. El array numerosEnteros alm acena obj et os del
prim it ivo int. El array nombres alm acena obj et os de la clase String. El
array objetos alm acena referencias a inst ancias de la clase Object de
Java. El array vehiculos alm acena obj et os de la clase Vehiculo.

Adem ás de declarar un array es necesario indicar el núm ero de elem ent os


que va a alm acenar. Un array es un obj et o y com o cualquier obj et o de un
program a Java, su valor inicial es null. Ant es de hacer referencia a los
elem ent os del array es necesario inst anciar el obj et o.

Cuando se inst ancia un obj et o array se asigna un espacio de m em oria para


alm acenar los elem ent os del array. Para est o es necesario saber el núm ero
t ot al de elem ent os que va a alm acenar.

La inst anciación de un obj et o array se hace de la siguient e form a:

nombres = new String[100];


vehiculos = new Vehiculo[50];

En est e ej em plo, el array nombres t iene capacidad para alm acenar hast a
100 obj et os de t ipo String. El array vehiculos puede alm acenar hast a 50
obj et os de la clase Vehiculo.

Cuando se crea un array se inicializa el valor de t odos sus elem ent os al


valor por defect o del t ipo base del array: cero para los núm eros, false
para los boolean, \ u0000 para los caract eres y null para las referencias a
obj et os.

De form a sim ilar al rest o de obj et os de Java, un array se puede inicializar al


m om ent o de la declaración. En est e caso se inicializa al valor por defect o
del t ipo del array.

int[] numerosEnteros = new int[10];


String[] nombres = new String[100];
Vehiculo[] vehiculos = new Vehiculo[50];
Turismo[] turismos = new Turismo[50];

120
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Un array t am bién se puede inicializar indicando la list a de valores que va a


alm acenar:

String[] diasLaborables = {"Lunes",


"Martes",
"Miércoles",
"Jueves",
"Viernes";

int[] enteros = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

El array diasLaborables alm acena 5 obj et os de t ipo String con los


nom bres de los días laborables de la sem ana. El array enteros alm acena
11 núm eros ent eros con valores de 0 a 10.

Para hacer referencia a cada elem ent o de un array es necesario indicar la


posición que ocupa en la est ruct ura de alm acenam ient o. Est a posición se
denom ina índice. El prim er elem ent o de un array se alm acena en la posición
cero y el últ im o elem ent o en la posición n- 1, donde n es el t am año del
array.

Por ej em plo, el array not as alm acena 5 núm eros ent eros:

121
Est r u ct u r a s de a lm a ce n a m ie n t o

La declaración del array:

int[] notas = {4, 9, 7, 5, 10};

El prim er elem ent o del array se alm acena en la posición 0 y el últ im o en la


posición 4, que equivale a su t am año m enos 1. El at ribut o length
alm acena el t am año de un array. En est e ej em plo, la últ im a posición del
array es notas.length – 1.

Est e arrray not as alm acena 5 calificaciones, notas[0] es el prim er


elem ent o del array y notas[4] el últ im o. Para m ost rar las calificaciones
alm acenadas en el array, se puede ut ilizar un for con una variable de
cont rol que vaya de cero hast a la longit ud del array m enos 1.

for (int i=0; i<=notas.length - 1; i++)


System.out.println("notas[" + i + "] es " +
notas[i]);

La salida por la consola:

notas[0] es 4
notas[1] es 9
notas[2] es 7
notas[3] es 5
notas[4] es 10

El siguient e for es equivalent e al ant erior. En vez de definir el lím it e de la


variable de cont rol m enor o igual a notas.length–1, se hace
est rict am ent e m enor que notas.length.

for (int i=0; i<notas.length; i++)


System.out.println("notas[" + i + "] es " +
notas[i]);

122
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El at ribut o length de un array alm acena un valor num érico que se puede
consult ar pero no se puede m odificar. Es una buena práct ica de
program ación ut ilizar el at ribut o length para hacer referencia al t am año de
un array.

Ot ra form a de m ost rar los valores alm acenados en un array es ut ilizando un


for “ para t odo” , donde la variable de cont rol del for, con ident ificador
nota, t om a el valor de t odos los elem ent os de la est ruct ura de
alm acenam ient o, en est e caso, el array notas.

for (int nota : notas)


System.out.println(nota);

La variable nota del for “ para t odo” t om a los valores nota[0], nota[1],
nota[2], nota[3] y nota[4] en cada it eración. Cuando se ut iliza un for
“ para t odo” no hace falt a indicar los lím it es de la variable de cont rol del
for, bast a que est a variable sea del t ipo alm acenado en el array. En est e
ej em plo nota es de t ipo int.

La salida por la consola:

4
9
7
5
10

123
Est r u ct u r a s de a lm a ce n a m ie n t o

El array diasLaborables alm acena los nom bres de los días laborables de
la sem ana:

La declaración del array:

String[] diasLaborables = {"Lunes",


"Martes",
"Miércoles",
"Jueves",
"Viernes"};

De nuevo, se ut iliza un for “ para t odo” para m ost rar el cont enido del array
diasLaborables que alm acena obj et os de t ipo String.

for (String dia: diasLaborables)


System.out.println(dia);

La variable dia del for “ para t odo” es de t ipo String y t om a los valores
diasLaborables[0], diasLaborables[1], diasLaborables[2],
diasLaborables[3] y diasLaborables[4] en cada it eración.

124
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La salida por consola:

Lunes
Martes
Miércoles
Jueves
Viernes

El array vehiculos alm acena 3 obj et os de la clase Vehiculo: un t urism o,


un deport ivo y una furgonet a. Cada elem ent o del array es una inst ancia de
las subclases de Vehiculo.

El array vehiculos alm acena referencias a obj et os de la clase Vehiculo.

125
Est r u ct u r a s de a lm a ce n a m ie n t o

La declaración del array:

Vehiculo[] vehiculos = { new Turismo("4060 TUR",


"Skoda", "Fabia", "Blanco",
90.0, 2, false),
new Deportivo("4070 DEP",
"Ford", "Mustang", "Rojo",
150.0, 2000),
new Furgoneta("4080 FUR",
"Fiat", "Ducato", "Azul",
80.0, 1200, 8) };

Para m ost rar los dat os de los vehículos alm acenados en el array se debe
ej ecut ar el m ét odo getAtributos() de la clase Vehiculo. Se puede
ut ilizar un for con una variable de cont rol i o un for “ para t odo” .

// for con variable de control i

for (int i=0; i < vehiculos.length; i++)


System.out.println(vehiculos[i].getAtributos());

// for “para todo”

for (Vehiculo vehiculo : vehiculos)


System.out.println(vehiculo.getAtributos());

La variable vehiculo del for “ para t odo” es de t ipo Vehiculo y t om a los


valores de vehiculos[0], vehiculos [1] y vehiculos[2] en cada
it eración.

126
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La salida por consola es la m ism a en am bos casos:

Matrícula: 4060 TUR Modelo: Skoda Fabia Color: Blanco


Tarifa: 90.0 Disponible: false Puertas: 2
Marcha automática: false
Matrícula: 4070 DEP Modelo: Ford Mustang Color: Rojo
Tarifa: 150.0 Disponible: false Cilindrada (cm3): 2000
Matrícula: 4080 FUR Modelo: Fiat Ducato Color: Azul
Tarifa: 80.0 Disponible: false Carga (kg): 1200
Volumen (m3): 8

Ar r a ys m u lt idim e n sion a le s
Un array de dos dim ensiones es un array que cont iene ot ro array en cada
uno de sus elem ent os.

Por ej em plo, un array de dos dim ensiones de núm eros ent eros de t am año
2 x 3 se declara:

int[][] notas = new int[2][3];

Un array de dos dim ensiones t iene form a de t abla. Para indicar la posición
de uno de sus elem ent os es necesario indicar dos índices, uno para la fila y
ot ro para la colum na. La fila indica la posición en el prim er array y la
colum na la posición en el segundo array.

El siguient e esquem a m uest ra un array de dos dim ensiones de núm eros


ent eros. El array notas se inicializa con los valores { { 5, 7, 9} , { 4, 6, 5} } .
Est e array represent a una t abla de 2 x 3 y en t ot al alm acena 6 núm eros
ent eros. El array notas t iene dos elem ent os y cada uno de ellos es un
array: notas[0] y notas[1]. El elem ent o notas[0] t iene a su vez 3
elem ent os: notas[0][0], notas[0][1] y notas[0][2]. El elem ent o
notas[1] t iene t am bién 3 elem ent os: notas[1][0], notas[1][1] y
notas[1][2].

127
Est r u ct u r a s de a lm a ce n a m ie n t o

Para m ost rar los elem ent os del array not as es necesario ut ilizar dos for
anidados.

for (int i = 0; i < notas.length; i++)


for (int j = 0; j < notas[i].length; j++)
System.out.println("notas[" + i + "][" + j + "] " +
"es " + notas[i][j]);

La salida por la consola:

notas[0][0] es 5
notas[0][1] es 7
notas[0][2] es 9
notas[1][0] es 4
notas[1][1] es 6
notas[1][2] es 5

128
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Tam bién se puede ut ilizar un for “ para t odo” :

for (int[] fila : notas)


for (int nota : fila)
System.out.println(nota);

La salida por la consola:

5
7
9
4
6
5

En general, un array m ult idim ensional es aquel que dent ro de uno de sus
elem ent os alm acena uno o m ás arrays de obj et os. Por ej em plo, un array de
t res dim ensiones de núm eros ent eros de t am año 3 x 3 x 3 se declara:

int[][][] numeros = new int[3][3][3];

Est e array de t res dim ensiones t iene form a de cubo y alm acena 27 núm eros
ent eros. Para indicar la posición de uno de sus elem ent os es necesario
ut ilizar t res índices. Si el array debe alm acenar núm eros del 1 al 27
consecut ivos en cada una de sus dim ensiones, ent onces se inicializa
ut ilizando t res for anidados:

int numero = 1;

for (int i=0; i<numeros.length; i++)


for (int j=0; j<numeros[i].length; j++)
for (int k=0; k<numeros[j].length; k++)
numeros[i][j][k] = numero++;

129
Est r u ct u r a s de a lm a ce n a m ie n t o

Para m ost rar los núm eros alm acenados:

for (int i=0; i<numeros.length; i++) {


for (int j=0; j<numeros[i].length; j++) {
for (int k=0; k<numeros[j].length; k++)
System.out.print(numeros[i][j][k] + " ");
System.out.println("");
}

System.out.println("");
}

La salida por la consola:

1 2 3
4 5 6
7 8 9

10 11 12
13 14 15
16 17 18

19 20 21
22 23 24
25 26 27

130
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Uso de a r r a ys
Suponga que se desea alm acenar en arrays el cat álogo de vehículos y la
relación de client es de una em presa de alquiler de vehículos. Para est o es
necesario definir una nueva clase, EmpresaAlquilerVehiculos, que
alm acene la inform ación det allada de la em presa, los client es y el cat álogo
de vehículos.

public class EmpresaAlquilerVehiculos {


private String cif;
private String nombre;
private String paginaWeb;
private int totalClientes;
private Cliente[] clientes;
private int totalVehiculos;
private Vehiculo[] vehiculos;
private int totalAlquileres;
private VehiculoAlquilado[] alquileres;

// se omiten los métodos ‘get’ y ‘set’ de la clase

public EmpresaAlquilerVehiculos (String cif,


String nombre,
String paginaWeb) {
this.cif = cif;
this.nombre = nombre;
this.paginaWeb = paginaWeb;
this.totalClientes = 0;
this.clientes = new Cliente[50];
this.totalVehiculos = 0;
this.vehiculos = new Vehiculo[50];
this.totalAlquileres = 0;
this.alquileres = new VehiculoAlquilado[100];
}

131
Est r u ct u r a s de a lm a ce n a m ie n t o

La clase EmpresaAlquilerVehiculos est á com puest a de arrays de


obj et os de las clases Cliente, Vehiculo y VehiculoAlquilado. A
cont inuación se incluye la declaración de los at ribut os de est as clases, se
om it e la declaración de los m ét odos const ruct ores y los m ét odos ‘get ’ y
‘set ’.

public class Cliente {


private String nif;
private String nombre;
private String apellidos;

public class Vehiculo {


private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;

public class VehiculoAlquilado {


private Cliente cliente;
private Vehiculo vehiculo;
private int diaAlquiler;
private int mesAlquiler;
private int añoAlquiler;
private int totalDiasAlquiler;

132
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La clase EmpresaAlquilerVehiculos declara t res arrays para regist rar a


sus client es, vehículos y el hist órico de vehículos alquilados. El array
clientes puede alm acenar hast a 50 obj et os de t ipo Cliente, el array
vehiculos puede alm acenar hast a 50 obj et os de t ipo Vehiculo y el array
alquileres t iene capacidad para alm acenar 100 obj et os de t ipo
VehiculoAlquilado.

Las variables num éricas totalClientes, totalVehiculos y


totalAlquileres se ut ilizan para alm acenar el t ot al de obj et os
alm acenados en cada uno de los arrays. Est as variables se inicializan a cero
en el m ét odo const ruct or de la clase.

La clase EmpresaAlquilerVehiculos declara los siguient es m ét odos para


realizar operaciones:

 registrarCliente(Cliente cliente). Añade un nuevo client e a la


list a de client es de la em presa.

 registrarVehiculo(Vehiculo vehiculo). Añade un vehículo al


cat álogo de vehículos de la em presa.

 imprimirClientes(). Muest ra la relación de client es de la em presa.

 imprimirVehiculos(). Muest ra el cat álogo de vehículos de la


em presa.

 alquilarVehiculo(String matricula,String nif,int dias).


Modifica la disponibilidad del vehículo para indicar que est á alquilado y
añade un obj et o de t ipo VehiculoAlquilado al array de vehículos
alquilados. Est e array alm acena el client e, el vehículo y los días de
alquiler de cada vehículo alquilado.

 recibirVehiculo(String matricula). Modifica la disponibilidad del


vehículo para que se pueda alquilar de nuevo.

133
Est r u ct u r a s de a lm a ce n a m ie n t o

El m ét odo registrarCliente(Cliente cliente) alm acena un obj et o


de la clase Cliente en la últ im a posición del array clientes, dada por la
variable totalClientes y a cont inuación increm ent a la variable
totalClientes.

public void registrarCliente(Cliente cliente) {


this.clientes[this.totalClientes] = cliente;
this.totalClientes++;
}

El m ét odo registrarVehiculo(Vehiculo vehiculo) alm acena un


obj et o de la clase Vehiculo en la últ im a posición del array vehiculos,
dada por la variable totalVehiculos y a cont inuación increm ent a la
variable totalVehiculos.

public void registrarVehiculo(Vehiculo vehiculo) {


this.vehiculos[this.totalVehiculos] = vehiculo;
this.totalVehiculos++;
}

El m ét odo imprimirClientes() m uest ra la relación de client es de la


em presa de alquiler.

public void imprimirClientes() {


System.out.println("NIF cliente\tNombre\n");

for (int i=0; i<this.totalClientes; i++)


System.out.println(clientes[i].getAtributos());
}

134
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El m ét odo imprimirVehiculos() m uest ra el cat álogo de vehículos de la


em presa de alquiler. El m ét odo getAtributosInforme() m uest ra el
det alle de at ribut os del vehículo.

public void imprimirVehiculos() {


System.out.println("Matricula\tModelo " +
"\tImporte Disponible\n");

for (int i=0; i<this.totalVehiculos; i++)


System.out.println(
vehiculos[i].getAtributosInforme());
}

Para regist rar el alquiler de un vehículo por un client e se usa el m ét odo


alquilarVehiculo(String matricula, String nif, int dias).
Est e m ét odo m odifica la disponibilidad del vehículo para indicar que est á
alquilado. El m ét odo getCliente(String nif) busca la referencia del
client e con el NI F dado en el array clientes. De form a sim ilar, el m ét odo
getVehiculo(String matricula) busca la referencia del vehículo con la
m at rícula dada en el array vehiculos. Una vez encont rado el vehículo con
la m at rícula indicada, se verifica si est á disponible para alquilar y se
m odifica su disponibilidad. A cont inuación, alm acena un obj et o de t ipo
VehiculoAlquilado en el array alquileres. Est e obj et o relaciona un
client e, un vehículo, la fecha act ual y los días de alquiler.

El m ét odo getCliente(String nif).

private Cliente getCliente(String nif) {


for (int i=0; i<this.getTotalClientes(); i++)
if (this.clientes[i].getNIF() == nif)
return this.clientes[i];

return null;
}

135
Est r u ct u r a s de a lm a ce n a m ie n t o

public void alquilarVehiculo(String matricula,


String nif,
int dias) {
Cliente cliente = getCliente(nif);
Vehiculo vehiculo = getVehiculo(matricula);

// busca el cliente con el NIF dado en el array


// clientes y el vehículo con la matrícula dada en el
// array vehiculos, si el vehículo está disponible se
// alquila con la fecha actual, que se obtiene
// ejecutando los métodos diaHoy(), mesHoy() y
// añoHoy(), cuya declaración no se incluye

if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres[this.totalAlquileres]=
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias);
this.totalAlquileres++;
}
}

El m ét odo recibirVehiculo(String matricula) m odifica la


disponibilidad del vehículo para que se pueda alquilar de nuevo. Est e
m ét odo ut iliza el m ét odo getVehiculo(String matricula) que busca el
vehículo con la m at rícula dada en el array vehiculos. Si lo encuent ra,
m odifica su disponibilidad para indicar que nuevam ent e est á disponible para
alquiler.

136
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public void recibirVehiculo(String matricula) {


// busca el vehículo con la matrícula dada en el
// array vehiculos y modifica su disponibilidad
// para que se pueda alquilar de nuevo

Vehiculo vehiculo = getVehiculo(matricula);

if (vehiculo != null)
vehiculo.setDisponible(true);
}

Una vez definida la clase EmpresaAlquilerVehiculos es necesario definir


la clase del program a principal donde se van a crear las inst ancias de los
obj et os de est a aplicación. El m ét odo main() del program a principal crea
una inst ancia de la clase EmpresaAlquilerVehiculos, denom inada
easydrive con CI F “ A- 28- 187189” , nom bre “ easydrive” y página web
“ www.easydrive.com ” .

// la instancia easydrive de EmpresaAlquilerVehiculos

EmpresaAlquilerVehiculos easydrive = new


EmpresaAlquilerVehiculos("A-28-187189", "easy drive",
"www.easydrive.com");

Al crear la inst ancia easydrive, el m ét odo const ruct or de la clase


EmpresaAlquilerVehiculos inicializa los arrays clientes y vehiculos
de est e obj et o. Una vez creada la inst ancia es necesario añadir client es y
vehículos al obj et o easydrive. En est e ej em plo se regist ran dos client es y
cinco vehículos de alquiler: t res t urism os, un deport ivo y una furgonet a.

Para regist rar un nuevo client e bast a con invocar el m ét odo


registrarCliente(Cliente cliente) con una inst ancia de la clase
Cliente para añadir un nuevo client e al array clientes del obj et o
easydrive.

137
Est r u ct u r a s de a lm a ce n a m ie n t o

// registro del cliente con NIF "X5618927C"

easydrive.registrarCliente(new Cliente("X5618927C",
"Juan","González López"));

Para regist rar un nuevo vehículo bast a con invocar el m ét odo


registrarVehiculo(Vehiculo vehiculo) con una inst ancia de la clase
Vehiculo para añadir un nuevo vehículo al array vehiculos del obj et o
easydrive.

// registro del turismo con matrícula "4060 TUR"

easydrive.registrarVehiculo(new Turismo("4060 TUR",


"Skoda","Fabia", "Blanco",
90.0, 2, false));

Una vez regist rados los client es y los vehículos de la em presa, se invocan
los m ét odos imprimirClientes() e imprimirVehiculos() para
m ost rar la relación de client es y el cat álogo de vehículos de la em presa
“ easydrive” .

// imprime la relación de clientes de "easydrive"

easydrive.imprimirClientes();

// imprime el catálogo de vehículos de "easydrive"

easydrive.imprimirVehiculos();

138
Fu nda m e nt os de pr ogr a m a ción e n Ja va

public class EmpresaAlquilerVehiculos {


// se omiten los atributos y el resto de métodos de la clase

public void registrarCliente(Cliente cliente) {


this.clientes[this.totalClientes] = cliente;
this.totalClientes++;
}

public void registrarVehiculo(Vehiculo vehiculo) {


this.vehiculos[this.totalVehiculos] = vehiculo;
this.totalVehiculos++;
}

public void imprimirClientes() {


System.out.println("NIF cliente\tNombre\n");
for (int i=0; i<this.totalClientes; i++)
System.out.println(clientes[i].getAtributos());
}

public void imprimirVehiculos() {


System.out.println("Matricula\tModelo " +
"\tImporte Disponible\n");
for (int i=0; i<this.totalVehiculos; i++)
System.out.println(vehiculos[i].getAtributosInforme());
}

public void alquilarVehiculo(String matricula,


String nif,
int dias) {
Cliente cliente = getCliente(nif);
Vehiculo vehiculo = getVehiculo(matricula);
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres[this.totalAlquileres] =
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias);
this.totalAlquileres ++;
}
}

public void recibirVehiculo(String matricula) {


Vehiculo vehiculo = getVehiculo(matricula);
if (vehiculo != null)
vehiculo.setDisponible(true);
}
}

139
Est r u ct u r a s de a lm a ce n a m ie n t o

El program a principal de la aplicación.

public class MisVehiculos {


public static void main(String[] args) {

// la instancia easydrive de la clase EmpresaAlquilerVehiculos

EmpresaAlquilerVehiculos easydrive = new


EmpresaAlquilerVehiculos("A-28-187189", "easy drive",
"www.easydrive.com");

// registro de los clientes de la empresa

easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));

// registro de los vehículos de la empresa

easydrive.registrarVehiculo(new Turismo("4060 TUR", "Skoda",


"Fabia", "Blanco", 90.0, 2, false));
easydrive.registrarVehiculo(new Deportivo("4070 DEP", "Ford",
"Mustang", "Rojo", 150.0, 2000));
easydrive.registrarVehiculo(new Turismo("4080 TUR", "VW", "GTI",
"Azul", 110.0, 2, false));
easydrive.registrarVehiculo(new Turismo("4090 TUR", "SEAT",
"Ibiza", "Blanco", 90.0, 4, false));
easydrive.registrarVehiculo(new Furgoneta("4100 FUR", "Fiat",
"Ducato", "Azul", 80.0, 1200, 8));

// imprime la relación de clientes de easydrive

easydrive.imprimirClientes();

// imprime el catálogo de vehículos de easydrive

easydrive.imprimirVehiculos();
}
}

140
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La salida por la consola m uest ra la relación de client es y el cat álogo de


vehículos para alquiler:

La relación de client es:

NIF cliente Nombre


X5618927C González López, Juan
Z7568991Y Fernández Gómez, Luis

El cat álogo de vehículos:

Matrícula Modelo Color Importe Disponible


4060 TUR Skoda Fabia Blanco 90.0 true
4070 DEP Ford Mustang Rojo 150.0 true
4080 TUR VW GTI Azul 110.0 true
4090 TUR SEAT Ibiza Blanco 90.0 true
4100 TUR Fiat Ducato Azul 80.0 true

Bú squ e da bin a r ia e n a r r a ys or de n a dos


Para buscar un elem ent o en un array ordenado se puede aplicar la t écnica
de la búsqueda binaria. El conj unt o de búsqueda se delim it a por dos
posiciones: el lím it e inferior y el lím it e superior. El algorit m o em pieza la
búsqueda por el elem ent o que est á alm acenado en la m it ad del conj unt o de
búsqueda. Si el elem ent o alm acenado en la m it ad del conj unt o es m ayor
que el valor que se busca, ent onces cont inúa la búsqueda en la prim era
m it ad. Si el elem ent o alm acenado en la m it ad del conj unt o es m enor que el
valor que se busca, ent onces cont inúa la búsqueda en la segunda m it ad. Si
el elem ent o alm acenado en la m it ad del conj unt o es igual que el valor que
se busca, finaliza el proceso. En cada com paración, el algorit m o reduce el
conj unt o de búsqueda a la m it ad. Si durant e las sucesivas reducciones del
conj unt o de búsqueda el lím it e inferior es m ayor que el lím it e superior,
ent onces el valor que se busca no est á en el array y finaliza el proceso.

141
Est r u ct u r a s de a lm a ce n a m ie n t o

En est e ej em plo el conj unt o de búsqueda t iene 10 elem ent os, el lím it e
inferior coincide con el prim er elem ent o del array y el lím it e superior con el
últ im o elem ent o del array.

Si se aplica la búsqueda binaria para buscar el núm ero 18, el algorit m o


realiza las siguient es reducciones del conj unt o de búsqueda.

Cuando se busca el núm ero 18 en el array, en la prim era it eración se


com para el valor alm acenado en la m it ad con el 18. La m it ad es la posición
4 y alm acena un 10. Com o 18 es m ayor que 10, se descart a la prim era
m it ad del conj unt o de búsqueda y el lím it e inferior se hace igual a la m it ad
+ 1. Ahora, el lím it e inferior es 5 y la nueva m it ad es 7. Los valores del
array que se han descart ado en est a it eración se han t achado.

142
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Una vez m ás, se com para el 18 con el valor alm acenado en la m it ad, que es
16. Com o 18 es m ayor que 16, se descart a la prim era m it ad del conj unt o
de búsqueda y el lím it e inferior se hace igual a la m it ad + 1. Ahora, el lím it e
inferior es 8 y la nueva m it ad es 8. En la siguient e it eración se com para el
valor alm acenado en la posición cent ral con el 18 y finaliza el algorit m o.

En est e ej em plo, el algorit m o de búsqueda binaria ha realizado t res


com paraciones para encont rar el núm ero 18 en el array.

Durant e el proceso de división del conj unt o de búsqueda se m odifica el


valor del lím it e inferior o del lím it e superior, dependiendo de si el núm ero
que se busca est á en la prim era m it ad o en la segunda m it ad. Si durant e
est e proceso el lím it e inferior es m ayor que el lím it e superior, ent onces el
algorit m o finaliza porque el núm ero que se busca no est á en el array.

143
Est r u ct u r a s de a lm a ce n a m ie n t o

El siguient e program a ut iliza el algorit m o de búsqueda binaria para buscar


un núm ero ent re cero y 100 en un array de núm eros ordenados.

public class BusquedaBinaria {


public static void main(String[] args) {

int[] numeros = {1,2,3,4,6,7,8,9,10,15,17,20,45,51,60,68,74,75};

int mitad;
int limiteInferior = 0;
int limiteSuperior = numeros.length - 1;
int numeroBusqueda = 68;
boolean encontrado = false;

while ((limiteInferior <= limiteSuperior) && (!encontrado)) {


mitad = (limiteInferior + limiteSuperior) / 2;

if (numeros[mitad] == numeroBusqueda) {
encontrado = true; // ¡encontrado!
}
else if (numeros[mitad] > numeroBusqueda) {
limiteSuperior = mitad - 1; // buscar en la primera mitad
} else {
limiteInferior = mitad + 1; // buscar en la segunda mitad
}
}

if (encontrado)
System.out.println("He encontrado el número");
else
System.out.println("No he encontrado el número");

}
}

Or de na ción de a r r a ys
Una de las operaciones m ás com unes con arrays es la ordenación. Un
algorit m o de ordenación clasifica un conj unt o de dat os de form a ascendent e
o descendent e.

144
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El a lgor it m o de or de n a ción “Bu bble Sor t ”

El algorit m o “ Bubble Sort ” se basa en com parar cada elem ent o del conj unt o
a ordenar con el siguient e. Si est os elem ent os no est án ordenados,
ent onces se int ercam bian. En est e algorit m o es necesario revisar varias
veces t odo el conj unt o hast a que no sea necesario realizar m ás
int ercam bios.

El algorit m o “ Bubble Sort ” ordena los valores alm acenados en el array


numeros.

int[] numeros = {6, 5, 3, 1, 2};

int tmp;

for (int i=0; i < numeros.length-1; i++)


for (int j=i+1; j < numeros.length; j++)
if (numeros[i] > numeros[j]) {
tmp = numeros[i];
numeros[i] = numeros[j];
numeros[j] = tmp;
}

La variable tmp se ut iliza para realizar el int ercam bio de los valores
alm acenados en las posiciones i y j del array. Prim ero, se alm acena el

145
Est r u ct u r a s de a lm a ce n a m ie n t o

valor de numeros[i] en tmp, después se alm acena el valor de


numeros[j] en numeros[i], por últ im o se alm acena el valor de tmp en
numeros[j] y finaliza el int ercam bio.

El algorit m o ut iliza un for anidado. La variable de cont rol del prim er for es
i y la del segundo for es j. La variable i del prim er for t om a los valores
0, 1, 2 y 3. Para i = 0, la variable j del segundo for t om a los valores 1, 2,
3 y 4. Para i = 1, la variable j t om a los valores 2, 3 y 4. Para i = 2, la
variable j t om a los valores 3, 4. Para i = 3, la variable j t om a el valor de
4.

En diagram as se m uest ra el array de núm eros ant es y después de hacer el


int ercam bio de los valores que se com paran cada vez.

Com paración de numeros[0] y numeros[1].

Com paración de numeros[0] y numeros[2].

146
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Com paración de numeros[0] y numeros[3].

Com paración de numeros[0] y numeros[4].

Com paración de numeros[1] y numeros[2].

147
Est r u ct u r a s de a lm a ce n a m ie n t o

Com paración de numeros[1] y numeros[3].

Com paración de numeros[1] y numeros[4].

Com paración de numeros[2] y numeros[3].

148
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Com paración de numeros[2] y numeros[4].

Com paración de numeros[3] y numeros[4].

Al finalizar el algorit m o, el array ordenado es { 1, 2, 3, 5, 6} .

El m é t odo sor t de la cla se Ar r a ys

Java define la clase Arrays con m ét odos que perm it en realizar operaciones
de ordenación y búsqueda en obj et os de t ipo array. Est os m ét odos se
pueden ut ilizar con t odos los t ipos prim it ivos, String y con cualquier ot ro
t ipo de obj et o.

149
Est r u ct u r a s de a lm a ce n a m ie n t o

Los m ét odos m ás ut ilizados de est a clase son:

 Arrays.sort(array-de-datos). Ordena el cont enido del array en


orden ascendent e.

Arrays.sort(numeros) ordena todos los elementos del


array numeros.

 Arrays.sort(array-de-datos, inicio, fin). Ordena el


cont enido del array en orden ascendent e, desde la posición de inicial
hast a la posición final.

Arrays.sort(numeros, 0, 49) ordena los elementos


almacenados entre la posición 0 y la 49 del array
numeros.

 Arrays.binarySearch(array-de-datos, clave). Busca la clav e


indicada en el array de núm eros ent eros.

Arrays.binarySearch(numeros, 1991) busca el número 1991


en el array numeros.

 Arrays.fill(array-de-datos, dato). Rellena el array con el valor


dado. Se puede ut ilizar con t odos los t ipos prim it ivos, St ring y con
cualquier ot ro t ipo de obj et o.

Arrays.fill(numeros, 5) rellena con el valor 5 todo el


array numeros.

 Arrays.fill(array-de-datos, dato, inicio, fin). Rellena el


array con el valor dado, indicando la posición inicial y final.

Arrays.fill(numeros, 5, 0, 5) rellena con el valor 5


desde la posición 0 hasta la posición 5 del array
numeros.

150
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Program a que ut iliza el m ét odo sort de la clase Arrays para ordenar


ascendent em ent e un array de núm eros ent eros.

public class SortArray {


public static void main(String[] args) {

int[] numerosDesordenados = {5, 4, 6, 7, 5, 6, 4, 8, 7, 10};

// numerosOrdenados es una copia de numerosDesordenados


// el método clone() copia del objeto al que se aplica

int[] numerosOrdenados = numerosDesordenados.clone();

System.out.println("\nEl array de números desordenados\n");

for (int numero : numerosDesordenados)


System.out.println(numero);

// el método sort(array-de-datos) de la clase Array ordena


// ascendentemente todos los elementos de numerosOrdenados

Arrays.sort(numerosOrdenados);

System.out.println("\nEl array de números ordenados\n");

for (int numero : numerosOrdenados)


System.out.println(numero);
}
}

151
Est r u ct u r a s de a lm a ce n a m ie n t o

La salida por la consola:

El array de números desordenados

5
4
6
7
5
6
4
8
7
10

El array de números ordenados

4
4
5
5
6
6
7
7
8
10

152
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ar r a ys r e dim e n sion a ble s


Un ArrayList es un array redim ensionable. Puede alm acenar un núm ero
indefinido de elem ent os.

La declaración de un ArrayList t iene la siguient e sint axis:

List <tipo-o-clase> identificador-lista;

Por ej em plo, el ArrayList vehiculos de la clase Vehiculo se inicializa:

List <Vehiculo> vehiculos = new ArrayList<Vehiculo>();

Los m ét odos m ás ut ilizados de la clase ArrayList son:

 add(Object o). Añade un obj et o a la list a.

vehiculos.add(new Turismo("4060 TUR", "Skoda", "Fabia",


"Blanco", 90.0, 2, false));

 get(int posicion). Ext rae el obj et o alm acenado en la posición


indicada. Es necesario indicar el t ipo del obj et o que se ext rae.

Vehiculo v = (Vehiculo)vehiculos.get(0);

 size(). Devuelve el núm ero de elect os alm acenados en la list a.

int totalVehiculos = vehiculos.size();

Para m ost rar los elem ent os alm acenados en una list a se puede ut ilizar un
for con una variable de cont rol o un for ‘para t odo’.

// recorrido de un ArrayList for con variable de control

for(int i=0; i < vehiculos.size(); i++) {


Vehiculo v = (Vehiculo)vehiculos.get(i);
System.out.println(v.getAtributos());
}

153
Est r u ct u r a s de a lm a ce n a m ie n t o

// recorrido de un ArrayList for con variable de control

for (Vehiculo v : vehiculos)


System.out.println(v.getAtributos());

El m ét odo add(Object o) alm acena obj et os en un ArrayList:

List <Vehiculo> vehiculos = new ArrayList<Vehiculo>();


vehiculos.add(new Turismo("4060 TUR","Skoda","Fabia",
"Blanco", 90.0, 2, false));
vehiculos.add(new Deportivo("4070 DEP","Ford","Mustang",
"Rojo", 150.0, 2000));
vehiculos.add(new Turismo("4080 TUR","VW","GTI ",
"Azul", 110.0, 2, false));
vehiculos.add(new Turismo("4090 TUR","SEAT","Ibiza",
"Blanco", 90.0, 4, false));
vehiculos.add(new Furgoneta("4100 FUR","Fiat","Ducato",
"Azul", 80.0, 1200, 8));

El ArrayList vehiculos alm acena obj et os de la clase Vehiculo. Para


añadir un nuevo elem ent o se ej ecut a el m ét odo add(Objet o) con un
obj et o de t ipo Vehiculo. En est e ej em plo se alm acenan inst ancias de las
clases Turismo, Deportivo y Furgoneta, t odas ellas subclases de
Vehiculo.

El m ét odo size() devuelve el núm ero de obj et os alm acenados.

int totalVehiculos = vehiculos.size();

Para m ás inform ación sobre los m ét odos de la clase ArrayList, consult e el


API de Java.

ht t p: / / docs.oracle.com / j avase/ 1.4.2/ docs/ api/ j ava/ ut il/ ArrayList .ht m l

154
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Program a que define un ArrayList para alm acenar obj et os de la clase


Vehiculo y m uest ra su cont enido por la consola. Para ut ilizar la clase
ArrayList es necesario im port ar los paquet es:

import java.util.ArrayList;
import java.util.List;

import java.util.ArrayList;
import java.util.List;

public class ArrayListVehiculos {


public static void main(String[] args) {

// se declara e inicialización el ArrayList

List <Vehiculo> vehiculos = new ArrayList<Vehiculo>();

// se añaden objetos de la clase Vehiculo

vehiculos.add(new Turismo("4060 TUR", "Skoda", "Fabia",


"Blanco", 90.0, 2, false));
vehiculos.add(new Deportivo("4070 DEP", "Ford", "Mustang",
"Rojo", 150.0, 2000));
vehiculos.add(new Turismo("4080 TUR", "VW", "GTI ", "Azul",
110.0, 2, false));
vehiculos.add(new Turismo("4090 TUR", "SEAT", "Ibiza", "Blanco",
90.0, 4, false));
vehiculos.add(new Furgoneta("4100 FUR", "Fiat", "Ducato",
"Azul", 80.0, 1200, 8));

// muestra el contenido del ArrayList

System.out.println("Vehiculos");

for (Vehiculo v: vehiculos)


System.out.println(v.getAtributos());
}
}

155
Est r u ct u r a s de a lm a ce n a m ie n t o

La salida por la consola:

Vehiculos
Matrícula: 4060 TUR Modelo: Skoda Fabia Color: Blanco
Tarifa: 90.0 Disponible: true Puertas: 2 Marcha
automática: false
Matrícula: 4070 DEP Modelo: Ford Mustang Color: Rojo
Tarifa: 150.0 Disponible: true Cilindrada (cm3): 2000
Matrícula: 4080 TUR Modelo: VW GTI Color: Azul
Tarifa: 110.0 Disponible: true Puertas: 2 Marcha
automática: false
Matrícula: 4090 TUR Modelo: SEAT Ibiza Color: Blanco
Tarifa: 90.0 Disponible: true Puertas: 4 Marcha
automática: false
Matrícula: 4100 FUR Modelo: Fiat Ducato Color: Azul
Tarifa: 80.0 Disponible: true Carga (kg): 1200
Volumen (m3): 8

Uso de a r r a ys r e dim e n sion a ble s


Suponga que se desea alm acenar en arrays redim ensionables el cat álogo de
vehículos y la relación de client es de la em presa de alquiler de vehículos.
Bast a con sust it uir los arrays de la clase EmpresaAlquilerVehiculos por
obj et os de t ipo ArrayList y m odificar los m ét odos de la clase que ut ilizan
los obj et os clientes, vehículos y alquileres.

En est a nueva im plem ent ación de la clase, no es necesario definir variables


para alm acenar el t ot al de client es, vehículos o vehículos alquilados. Un
ArrayList es un array que m odifica su t am año de form a dinám ica para
alm acenar t ant os elem ent os com o sea necesario.

La nueva clase EmpresaAlquilerVehiculos declara los obj et os


clientes, vehículos y alquileres de t ipo ArrayList para alm acenar
la inform ación de los client es, el cat álogo de vehículos y el hist órico de
vehículos alquilados, respect ivam ent e.

156
Fu nda m e nt os de pr ogr a m a ción e n Ja va

import java.util.ArrayList;
import java.util.List;

public class EmpresaAlquilerVehiculos {


private String cif;
private String nombre;
private String paginaWeb;
private List <Cliente> clientes;
private List <Vehiculo> vehiculos;
private List <VehiculoAlquilado> alquileres;

// se omiten los métodos ‘get’ y ‘set’ de la clase

public EmpresaAlquilerVehiculos (String cif,


String nombre,
String paginaWeb) {
this.cif = cif;
this.nombre = nombre;
this.paginaWeb = paginaWeb;
this.clientes = new ArrayList<Cliente>();
this.vehiculos = new ArrayList<Vehiculo>();
this.alquileres = new ArrayList<VehiculoAlquilado>();
}
}

La clase EmpresaAlquilerVehiculos declara los siguient es m ét odos para


realizar operaciones:

 registrarCliente(Cliente cliente). Añade un nuevo client e a la


list a de client es de la em presa.

 registrarVehiculo(Vehiculo vehiculo). Añade un vehículo al


cat álogo de vehículos de la em presa.

 imprimirClientes(). Muest ra la relación de client es de la em presa.

 imprimirVehiculos(). Muest ra el cat álogo de vehículos de la


em presa.

157
Est r u ct u r a s de a lm a ce n a m ie n t o

 alquilarVehiculo(String matricula,String nif,int dias).


Modifica la disponibilidad del vehículo para indicar que est á alquilado y
añade un obj et o de t ipo VehiculoAlquilado a la list a de vehículos
alquilados. Est a list a alm acena el client e, el vehículo y los días de
alquiler de cada vehículo alquilado.

 recibirVehiculo(String matricula). Modifica la disponibilidad del


vehículo para que se pueda alquilar de nuevo.

El m ét odo registrarCliente(Cliente cliente) añade un obj et o de la


clase Cliente a la list a clientes.

public void registrarCliente(Cliente cliente) {


this.clientes.add(cliente);
}

El m ét odo registrarVehiculo(Vehiculo vehiculo) añade un obj et o


de la clase Vehiculo a list a vehiculos.

public void registrarVehiculo(Vehiculo vehiculo) {


this.vehiculos.add(vehiculo);
}

El m ét odo imprimirClientes() m uest ra la relación de client es de la


em presa de alquiler.

public void imprimirClientes() {


System.out.println("NIF cliente\tNombre\n");

for (Cliente c : this.clientes)


System.out.println(c.getAtributos());
}

158
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El m ét odo imprimirVehiculos() m uest ra el cat álogo de vehículos de la


em presa de alquiler. El m ét odo getAtributosInforme() m uest ra el
det alle de at ribut os del vehículo.

public void imprimirVehiculos() {


System.out.println("Matricula\tModelo " +
"\tImporte Disponible\n");
for (Vehiculo v : this.vehiculos)
System.out.println(v.getAtributosInforme());
}

Para regist rar el alquiler de un vehículo por un client e se usa el m ét odo


alquilarVehiculo(String matricula, String nif, int dias).
Est e m ét odo m odifica la disponibilidad del vehículo para indicar que est á
alquilado. El m ét odo getCliente(String nif) busca la referencia del
client e con el NI F dado en la list a clientes. De form a sim ilar, el m ét odo
getVehiculo(String matricula) busca la referencia del vehiculo con la
m at rícula dada en la list a vehiculos. Una vez encont rado el vehículo con
la m at ricula indicada, se verifica si est á disponible para alquilar y se
m odifica su disponibilidad. A cont inuación, alm acena un obj et o de t ipo
VehiculoAlquilado en la list a alquileres. Est e obj et o relaciona un
client e, un vehículo, la fecha act ual y los días de alquiler.

El m ét odo getCliente(String nif).

private Cliente getCliente(String nif) {


for (Cliente c : this.clientes)
if (c.getNIF() == nif)
return c;

return null;
}

159
Est r u ct u r a s de a lm a ce n a m ie n t o

public void alquilarVehiculo(String matricula,


String nif,
int dias) {
Cliente cliente = getCliente(nif);
Vehiculo vehiculo = getVehiculo(matricula);

if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres.add(
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias));
}
}

El m ét odo recibirVehiculo(String matricula) m odifica la


disponibilidad del vehículo para que se pueda alquilar de nuevo. Est e
m ét odo ut iliza el m ét odo getVehiculo(String matricula) que busca el
vehículo con la m at rícula dada en la list a vehiculos. Si lo encuent ra,
m odifica su disponibilidad para indicar que nuevam ent e est á disponible para
alquiler.

public void recibirVehiculo(String matricula) {


Vehiculo vehiculo = getVehiculo(matricula);

if (vehiculo != null)
vehiculo.setDisponible(true);
}

160
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Una vez m odificada la clase EmpresaAlquilerVehiculos, es im port ant e


ver que los cam bios realizados a las variables privadas de la clase solo
afect an a la im plem ent ación de los m ét odos de est a clase. Las
m odificaciones quedan “ encapsuladas” dent ro de la clase y no afect an a
ot ras clases o program as.

Est o significa que no es necesario m odificar la clase MisVehiculos que


regist ra los client es y los vehículos de la em presa de alquiler. El m ét odo
main() crea una inst ancia de la clase EmpresaAlquilerVehiculos,
denom inada easydrive con CI F “ A- 28- 187189” , nom bre “ easydrive” y
página w eb “ www.easydrive.com ” .

// la instancia easydrive de EmpresaAlquilerVehiculos

EmpresaAlquilerVehiculos easydrive = new


EmpresaAlquilerVehiculos("A-28-187189", "easy drive",
"www.easydrive.com");

Al crear la inst ancia easydrive, el m ét odo const ruct or de la clase


EmpresaAlquilerVehiculos inicializa las list as clientes y vehiculos
de est e obj et o. Una vez creada la inst ancia es necesario añadir client es y
vehículos al obj et o easydrive. En est e ej em plo se regist ran dos client es y
cinco vehículos de alquiler: t res t urism os, un deport ivo y una furgonet a.

Para regist rar un nuevo client e bast a con invocar el m ét odo


registrarCliente(Cliente cliente) con una inst ancia de la clase
Cliente para añadir un nuevo client e a la list a clientes del obj et o
easydrive.

// registro del cliente con NIF "X5618927C"

easydrive.registrarCliente(new Cliente("X5618927C",
"Juan","González López"));

161
Est r u ct u r a s de a lm a ce n a m ie n t o

Para regist rar un nuevo vehículo bast a con invocar el m ét odo


registrarVehiculo(Vehiculo vehiculo) con una inst ancia de la clase
Vehiculo para añadir un nuevo vehículo a la list a vehiculos del obj et o
easydrive.

// registro del turismo con matrícula "4060 TUR"

easydrive.registrarVehiculo(new Turismo("4060 TUR",


"Skoda","Fabia", "Blanco",
90.0, 2, false));

Una vez regist rados los client es y los vehículos de la em presa, se invocan
los m ét odos imprimirClientes() e imprimirVehiculos() para
m ost rar la relación de client es y el cat álogo de vehículos de la em presa
“ easydrive” .

// imprime la relación de clientes de "easydrive"

easydrive.imprimirClientes();

// imprime el catálogo de vehículos de "easydrive"

easydrive.imprimirVehiculos();

162
Fu nda m e nt os de pr ogr a m a ción e n Ja va

import java.util.ArrayList;
import java.util.List;

public class EmpresaAlquilerVehiculos {


// se omiten los atributos y el resto de métodos de la clase

public void registrarCliente(Cliente cliente) {


this.clientes.add(cliente);
}

public void registrarVehiculo(Vehiculo vehiculo) {


this.vehiculos.add(vehiculo);
}

public void imprimirClientes() {


System.out.println("NIF cliente\tNombre\n");
for (Cliente c : this.clientes)
System.out.println(c.getAtributos());
}

public void imprimirVehiculos() {


System.out.println("Matricula\tModelo " +
"\tImporte Disponible\n");
for (Vehiculo v : this.vehiculos)
System.out.println(v.getAtributosInforme());
}

public void alquilarVehiculo(String matricula,


String nif,
int dias) {
Cliente cliente = getCliente(nif);
Vehiculo vehiculo = getVehiculo(matricula);
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres.add(
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias));
}
}

public void recibirVehiculo(String matricula) {


Vehiculo vehiculo = getVehiculo(matricula);
if (vehiculo != null)
vehiculo.setDisponible(true);
}
}

163
Est r u ct u r a s de a lm a ce n a m ie n t o

El program a principal de la aplicación.

public class MisVehiculos {


public static void main(String[] args) {

// la instancia easydrive de la clase EmpresaAlquilerVehiculos

EmpresaAlquilerVehiculos easydrive = new


EmpresaAlquilerVehiculos("A-28-187189", "easy drive",
"www.easydrive.com");

// registro de los clientes de la empresa

easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));

// registro de los vehículos de la empresa

easydrive.registrarVehiculo(new Turismo("4060 TUR", "Skoda",


"Fabia", "Blanco", 90.0, 2, false));
easydrive.registrarVehiculo(new Deportivo("4070 DEP", "Ford",
"Mustang", "Rojo", 150.0, 2000));
easydrive.registrarVehiculo(new Turismo("4080 TUR", "VW", "GTI",
"Azul", 110.0, 2, false));
easydrive.registrarVehiculo(new Turismo("4090 TUR", "SEAT",
"Ibiza", "Blanco", 90.0, 4, false));
easydrive.registrarVehiculo(new Furgoneta("4100 FUR", "Fiat",
"Ducato", "Azul", 80.0, 1200, 8));

// imprime la relación de clientes de easydrive

easydrive.imprimirClientes();

// imprime el catálogo de vehículos de easydrive

easydrive.imprimirVehiculos();
}
}

164
8 . En t r a da y sa lida

Los flu j os de Ja va
Práct icam ent e t odos los program as deben leer dat os del ext erior para
procesarlos y después present ar los result ados. La inform ación que necesit a
un program a norm alm ent e se obt iene m ediant e la ent rada de dat os por el
t eclado o leyendo un fichero. Los result ados de la ej ecución de un program a
se pueden present ar por la consola, la im presora o en un fichero. El t ipo de
inform ación que se ut iliza t ant o en las ent radas com o en las salidas puede
t ener diversos form at os: t ext o, im agen, sonido, binario, et c.

En Java, la ent rada de dat os se realiza m ediant e un fluj o de ent rada. Para
realizar la ent rada de dat os es necesario abrir el fluj o de ent rada, leer la
inform ación del fluj o hast a el final y por últ im o cerrar el fluj o. La salida se
hace m ediant e un fluj o de salida. Para realizar la salida de dat os es
necesario abrir el fluj o de salida y a cont inuación se escribe en él t oda la
inform ación que se desee, por últ im o, se cierra el fluj o.

Est e esquem a de ent radas y salidas basadas en un fluj o perm it e que las
ent radas sean independient es de la fuent e de dat os y que las salidas sean
independient es del dest ino de los dat os.

Un fluj o en Java es un obj et o que se ut iliza para realizar una ent rada o
salida de dat os. Represent a un canal de inform ación del que se puede leer o
escribir dat os de form a secuencial. Exist en dos t ipos de fluj os en Java, los
que ut ilizan byt es y los que ut ilizan caract eres.

165
En t r a da y sa lida

La siguient e t abla m uest ra los fluj os de ent rada de dat os de Java:

Fluj os con byt es Fluj os con caract eres

I nput St ream Reader


Byt eArrayI nput St ream BufferedReader
FileI nput St ream LineNum berReader
Filt erI nput St ream CharArrayReader
BufferedI nput St ream Filt erReader
Dat aI nput St ream PushBackReader
LineNum berI nput St ream I nput St ream Reader
PushBackI nput St ream FileReader
Obj ect I nput St ream PipedReader
PipedI nput St ream St ringReader
SequenceI nput St ream
St ringBufferI nput St ream

La siguient e t abla m uest ra los fluj os de salida de dat os de Java:

Fluj os con byt es Fluj os con caract eres

Out put St ream Writ er


Byt eArrayOut put St ream BufferedWrit er
FileOut put St ream CharArrayWrit er
Filt erOut put St ream Filt erWrit er
BufferedOut put St ream Out put St ream Writ er
Dat aOut put St ream FileWrit er
Print St ream PipedWrit er
Obj ect Out put St ream Print Writ er
PipedOut put St ream St ringWrit er

Exist en fluj os con byt es y fluj os con caract eres que se aplican a la m ism a
ent rada o salida. FileInputStream y FileOutputStream son fluj os para
leer y escribir byt es en un fichero, FileReader y FileWriter t am bién son
fluj os que se aplican a ficheros, pero en est e caso para leer y escribir
caract eres.

166
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Los fluj os se pueden ut ilizar solos o com binados. Si se com binan dos fluj os,
por ej em plo uno que lea caract eres de un archivo con ot ro que conviert a a
m ayúsculas los caract eres, ent onces el result ado final es un fluj o del que se
leen caract eres en m ayúsculas.

En los siguient es ej em plos se m uest ran las aplicaciones de algunos de est os


fluj os para leer dat os del t eclado, leer y escribir en ficheros de t ext o o leer y
escribir ficheros de obj et os.

En t r a da de da t os de sde e l t e cla do
El fluj o de ent rada System.in lee los dat os que se int roducen en el
t eclado. Si est e fluj o se pasa com o argum ent o a una inst ancia de la clase
Scanner, perm it e realizar la lect ura de dat os del t eclado. Bast a con ut ilizar
los m ét odos next(), nextLine() y nextInt() para leer una palabra, una
línea y un núm ero ent ero, respect ivam ent e.

A cont inuación se m uest ra el uso de la clase Scanner y el fluj o de ent rada


del t eclado System.in. Para ut ilizar la clase Scanner en un program a Java
es necesario im port ar la librería java.util.Scanner.

Suponga que se desea realizar un program a que pide un nom bre, el día, el
m es y el año de la fecha de nacim ient o de una persona. En est e program a
se declara una inst ancia de la clase Scanner, con nom bre
entradaTeclado que se inicializa con el fluj o de ent rada del t eclado
System.in.

Scanner entradaTeclado = new Scanner(System.in);

La clase Scanner ofrece los m ét odos next(), nextLine() o nextInt(),


ent re ot ros. El m ét odo next() lee una palabra, el m ét odo nextLine() lee
una línea com plet a y el m ét odo nextInt() lee un núm ero de t ipo ent ero.

La variable nom bre de t ipo String se inicializa con el nom bre que se
int roduce en el t eclado. Com o se invoca el m ét odo nextLine() de
entradaTeclado, se lee t oda la línea, de m anera que la variable nom bre
alm acena t ant o el nom bre com o los apellidos de la persona.

System.out.print("¿Cómo te llamas? ");


nombre = entradaTeclado.nextLine();

167
En t r a da y sa lida

Las variables num éricas de t ipo int diaNacimiento, mesNacimiento y


añoNacimiento se inicializan con el valor num érico int roducido, invocando
el m ét odo nextInt() de entradaTeclado.

System.out.print("¿Qué día naciste? ");


diaNacimiento = entradaTeclado.nextInt();

import java.util.Scanner;

public class EntradaDatosTeclado {

public static void main(String args[]) {


String nombre;
int diaNacimiento, mesNacimiento, añoNacimiento;

// inicialización de la instancia de Scanner con el flujo de


// entrada del teclado

Scanner entradaTeclado = new Scanner(System.in);

System.out.print("¿Cómo te llamas? ");


nombre = entradaTeclado.nextLine();

System.out.print("¿Qué día naciste? ");


diaNacimiento = entradaTeclado.nextInt();

System.out.print("¿En qué mes? ");


mesNacimiento = entradaTeclado.nextInt();

System.out.print("¿En qué año? ");


añoNacimiento = entradaTeclado.nextInt();

System.out.println("Hola " + nombre + ", naciste el " +


diaNacimiento + "/" + mesNacimiento + "/" + añoNacimiento);
}
}

Una vez int roducidos t odos los dat os, el program a m uest ra un m ensaj e por
la consola con el nom bre y fecha de nacim ient o.

Hola Juan, naciste el 10/12/1982

168
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Le e r y e scr ibir e n fich e r os de t e x t o


La lect ura y escrit ura de dat os en un fichero de t ext o requiere el uso de las
clases PrintWriter, File y Scanner. Para escribir en un fichero de t ext o
es necesario ut ilizar la clase PrintWriter. Est a clase perm it e crear un
fichero de t ext o para alm acenar dat os. Est a clase ofrece los m ét odos
print() y println() para escribir dat os en el fichero. El m ét odo
close() cierra el fichero de dat os.

Por ej em plo, para escribir un array de núm eros ent eros en un fichero de
t ext o, es necesario crear una inst ancia de la clase PrintWriter.

int[][] numeros = { { 1, 2, 3, 4, 5},


{ 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}};

// la instancia ficheroSalida de la clase PrintWriter


// crea y escribe en el fichero "c:\\Numeros.txt"

String idFichero = "c:\\Numeros.txt";


PrintWriter ficheroSalida = new PrintWriter(idFichero);

// el for anidado escribe en ficheroSalida los elementos


// del array separados por el carácter ","

for (int i=0; i<numeros.length; i++) {


for (int j=0; j<numeros[i].length; j++)
ficheroSalida.print(numeros[i][j] + ",");
ficheroSalida.println("");
}

ficheroSalida.close();

169
En t r a da y sa lida

El for anidado escribe t odos los elem ent os del array en el fichero de t ext o.
Al finalizar se invoca al m ét odo close() del obj et o ficheroSalida para
cerrarlo.

El cont enido del fichero de t ext o Num eros.t xt .

1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25,

La clase File ofrece el m ét odo exists() para saber si un fichero exist e o


no. Para leer el cont enido del fichero se crea una inst ancia de la clase
Scanner que recibe com o argum ent o la inst ancia del fichero de t ext o.

La clase Scanner ofrece el m ét odo hasNext() para saber si hay m ás


elem ent os que leer y next() para leer el siguient e elem ent o.

La clase StringTokenizer facilit a la división de una cadena de t ext o en


com ponent es separados por espacios o por un caráct er delim it ador. En est e
ej em plo se crea una inst ancia con el delim it ador “ ,” .

Cuando se realiza una operación de lect ura o escrit ura de un fichero es


necesario gest ionar los errores en t iem po de ej ecución de Java,
denom inados excepciones. Durant e la lect ura o escrit ura de un fichero se
puede producir una excepción de t ipo IOException.

Para ut ilizar las clases PrintWriter, File, Scanner, StringTokenizer,


IOException es necesario im port ar los siguient es paquet es:

import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.IOException;

170
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Para abrir un fichero de t ext o se crea una inst ancia de la clase File. El
cont enido del fichero se lee con una inst ancia de la clase Scanner. Com o
los núm eros alm acenados en el fichero est án separados por com as, se
ut iliza una inst ancia de StringTokenizer para leer cada núm ero.

String idFichero = "c:\\Numeros.txt";

File ficheroEntrada=new File (idFichero);

if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);

System.out.println("Números del fichero");

while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");

while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() +
"\t");

System.out.println("");
}

datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");

171
En t r a da y sa lida

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.io.PrintWriter;

public class LecturaEscrituraFichero {


public static void main(String[] args) throws IOException {
int[][] numeros = { { 1, 2, 3, 4, 5},
{ 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}};

String idFichero = "c:\\Numeros.txt";

PrintWriter ficheroSalida = new PrintWriter(idFichero);

for (int i=0; i<numeros.length; i++) {


for (int j=0; j<numeros[i].length; j++)
ficheroSalida.print(numeros[i][j] + ",");
ficheroSalida.println("");
}
ficheroSalida.close();

File ficheroEntrada = new File (idFichero);

if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
System.out.println("Números del fichero");
while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");
while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() + "\t");
System.out.println("");
}
datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");
}
}

172
Fu nda m e nt os de pr ogr a m a ción e n Ja va

El result ado de leer el fichero de t ext o:

Números del fichero


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Le e r y e scr ibir obj e t os e n fich e r os


La lect ura y escrit ura de obj et os en un fichero binario requiere el uso de las
clases FileOutpusStream y ObjectOutputStream. La clase
ObjectOutputStream perm it e escribir obj et os en un fichero ut ilizando el
m ét odo writeObject(Object o). Los dat os que se alm acenan en el
fichero de salida t ienen un form at o binario dist int o de los ficheros de t ext o.
El m ét odo close() de la clase ObjectOutputStream cierra el fichero de
dat os.

Para escribir obj et os ut ilizando la clase ObjectOutputStream es necesario


codificar los obj et os dent ro del fluj o de salida. A la codificación de los
obj et os dent ro de un fluj o de ent rada o salida se le denom ina
“ serialización” . Para que los obj et os de una clase sean “ serializables” es
necesario im plem ent ar la int erfaz Serializable de Java.

Para leer obj et os alm acenados en un fichero binario se ut iliza el m ét odo


readObject() de la clase ObjectInputStream. Después de leer el obj et o
del fichero se debe convert ir a la clase a la que pert enece.

Cuando se ut ilizan los fluj os ObjectInputStream y ObjectOutputStream


de Java es necesario at rapar los errores de ej ecución que se producen
m ient ras se lee o escribe el fichero de dat os con los fluj os de ent rada y
salida. Para at rapar los errores de ej ecución o excepciones, se ut ilizan las
sent encias try y catch. Las excepciones que se producen durant e la
ej ecución de las sent encias definidas en el cuerpo del try se at rapan con
catch.

Para escribir un obj et o de la clase Persona en un fichero binario, es


necesario indicar que est a clase es “ serializable” , es decir, que sus obj et os

173
En t r a da y sa lida

se codifican dent ro de los fluj os de ent rada y salida de Java. Para indicar
que la clase Persona es “ serializable” se m odifica su declaración indicando
que im plem ent a la int erfaz Serializable.

public class Persona implements java.io.Serializable {

La declaración com plet a de la clase Persona, con la im plem ent ación de la


int erfaz Serializable, su m ét odo const ruct or y sus m ét odos ‘get ’ y ‘set ’.

public class Persona implements java.io.Serializable {


private String dni;
private String nombre;
private String apellidos;

public Persona(String dni, String nombre, String apellidos) {


this.dni = dni;
this.nombre = nombre;
this.apellidos = apellidos;
}

public String getDNI() {


return this.dni;
}

public String getNombre() {


return this.nombre;
}

public String getApellidos() {


return this.apellidos;
}

public String getAtributos() {


return this.getDNI() + " " + this.getApellidos() + ", " +
this.getNombre();
}
}

174
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Para escribir un obj et o de la clase Persona en un fichero de t ext o se


ut ilizan las clases FileOutputStream y ObjectOutputStream. Se crea
una inst ancia de la clase FileOutputStream para inicializar la inst ancia
objetoSalida de ObjectOutputStream que escribe en el fichero binario
Obj et os.dat .

String nombreFichero = "c:\\Objetos.dat";

try {
FileOutputStream ficheroSalida = new
FileOutputStream(nombreFichero);
ObjectOutputStream objetoSalida = new
ObjectOutputStream(ficheroSalida);

// se escriben dos objetos de la clase Persona

objetoSalida.writeObject(new Persona("55287188B",
"María", "Ruiz Ramos"));
objetoSalida.writeObject(new Persona("40302010A",
"Juan", "González López"));

objetoSalida.close();
} catch (FileNotFoundException e) {
System.out.println("¡El fichero no existe!");
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
};

175
En t r a da y sa lida

Para leer los obj et os alm acenados en el fichero binario se ut ilizan las clases
FileInputStream y ObjectInputStream. Se crea una inst ancia de la
clase FileInputStream para inicializar la inst ancia objetoEntrada de
ObjectInputStream.

try {
FileInputStream ficheroEntrada = new
FileInputStream(nombreFichero);
ObjectInputStream objetoEntrada = new
ObjectInputStream(ficheroEntrada);

// se leen dos objetos de la clase Persona

Persona p1 = (Persona)objetoEntrada.readObject();
Persona p2 = (Persona)objetoEntrada.readObject();

// se cierra el flujo de objetos objetoEntrada

objetoEntrada.close();

System.out.println("DNI\t Nombre");
System.out.println(p1.getAtributos());
System.out.println(p2.getAtributos());

} catch (FileNotFoundException e) {
System.out.println("¡El fichero no existe!");
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
};

176
Fu nda m e nt os de pr ogr a m a ción e n Ja va

La salida por la consola:

DNI Nombre
55287188B Ruiz Ramos, María
40302010A González López, Juan

Las sent encias try y catch se ut ilizan para at rapar las excepciones que se
producen durant e la ej ecución del program a: FileNotFoundException,
IOException o Exception. De est a form a se at rapan los errores que se
producen cuando el fichero de dat os no exist e o cuando hay un problem a de
lect ura o escrit ura en el fichero.

Las excepciones son el m ecanism o que proporciona Java para gest ionar los
errores de ej ecución de una aplicación.

La sent encia try-catch-finally t iene la siguient e sint axis:

try {
sentencias-que-pueden-producir-una-excepción;
} catch (Excepción-tipo-1 e) {
sentencias-para-excepción-tipo-1;
} catch (Excepción-tipo-2 e) {
sentencias-para-excepción-tipo-2;
} catch (Excepción-tipo-3 e){
sentencias-para-excepción-tipo-3;
} finally {
sentencias-que-se-ejecutan-si-hay-excepción-o-no;
};

En una sent encia try-catch-finally, los bloques catch se pueden


repet ir t ant as veces com o excepciones de dist int o t ipo se desee at rapar. El
bloque finally es opcional y solo puede aparecer una vez. Est e bloque se
ej ecut a siem pre.

177
En t r a da y sa lida

El program a Java que escribe y lee obj et os.

import java.io.*;

public class LecturaEscrituraObjetos {


public static void main(String[] args) {
String nombreFichero = "c:\\Objetos.dat";

try {
FileOutputStream ficheroSalida = new
FileOutputStream(nombreFichero);
ObjectOutputStream objetoSalida = new
ObjectOutputStream(ficheroSalida);

objetoSalida.writeObject(new Persona("55287188B",
"María", "Ruiz Ramos"));
objetoSalida.writeObject(new Persona("40302010A",
"Juan", "González López"));
objetoSalida.close();

FileInputStream ficheroEntrada = new


FileInputStream(nombreFichero);
ObjectInputStream objetoEntrada = new
ObjectInputStream(ficheroEntrada);

Persona p1 = (Persona)objetoEntrada.readObject();
Persona p2 = (Persona)objetoEntrada.readObject();

objetoEntrada.close();

System.out.println("DNI\t Nombre");
System.out.println(p1.getAtributos());
System.out.println(p2.getAtributos());
} catch (FileNotFoundException e) {
System.out.println("¡El fichero no existe!");
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
};
}
}

178
A. Ope r a dor e s de l le n gu a j e Ja va

Ope r a dor e s a r it m é t icos


Los operadores arit m ét icos son sím bolos que represent an operaciones
arit m ét icas con dos operandos.

Operador Operación arit m ét ica

+ Sum a de núm eros y concat enación de cadenas

- Rest a

* Product o

/ División

% Módulo o rest o

El operador + se ut iliza para sum ar dos núm eros y t am bién perm it e


concat enar o unir dos cadenas de caract eres. Est e operador est á
“ sobrecargado” porque opera con núm eros y con cadenas de caract eres.

Ope r a dor e s u n a r ios y com pu e st os


Est os operadores arit m ét icos se ut ilizan para hacer m ás claro el código
Java. Com binan la operación de asignación con una operación arit m ét ica.

Los operadores + + y –- son operadores unarios, es decir, ut ilizan un solo


operando. Los operadores unarios se pueden aplicar ant es y después del
operando. Por ej em plo, x+ + y + + x represent an dos operaciones dist int as
aplicando el m ism o operador. Am bas operaciones sum an 1 a la variable x
pero t ienen un significado diferent e.

179
Ope r a dor e s de l le n gua j e Ja va

Operador Operación Equivale a

++ a+ + a= a+ 1

-- a- - a= a- 1

+= a+ = b a= a+ b

-= a- = b a= a- b

*= a* = b a= a* b

/= a/ = b a= a/ b

%= a% = b a= a% b

La siguient e t abla m uest ra ej em plos de uso de los operadores unarios y de


los operadores com puest os.

Expresión Equivale a Significado

x+ + x = x + 1 Sum a 1 al valor de x

x+ = 5 x = x + 5 Sum a 5 al valor de x

y- = 2 y = y - 2 Rest a 2 al valor de y

z* = 10 z = z * 10 Mult iplica por 10 el valor


de z

a/ = b a= a/ b Divide a ent re b

c% = 3 c= c% 3 Calcula el m ódulo de c
dividido ent re 3

180
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ope r a dor e s de r e la ción


Los operadores de relación perm it en com parar dos o m ás valores.

Operador Significado Ej em plo

= I gual not a = 10

< Menor que not a < 5

> Mayor que not a > 9

<= Menor o igual not a < = 7

>= Mayor o igual not a > = 5

<> Dist int o de not a < > 0

Ope r a dor e s lógicos


Java ut iliza t res operadores lógicos: el O lógico ( disyunción) , el Y lógico
( conj unción) y la negación.

Los operadores O lógico ( | | ) y el Y lógico ( &&) se ut ilizan para evaluar


expresiones lógicas que solo pueden t om ar el valor falso o verdadero. El
operador Y lógico ( &&) devuelve false si uno de los operandos es false. El O
lógico ( | | ) devuelve t rue si uno de los operandos es t rue.

El operador de negación ( ¡) es unario y devuelve el valor negado de una


expresión lógica.

181
Ope r a dor e s de l le n gua j e Ja va

Or de n de pr e ce de n cia de los ope r a dor e s


La siguient e t abla m uest ra el orden de prioridad de los operadores. I ndica
qué operador se aplica prim ero en una expresión.

Operador Descripción

+ + -- ! Operadores unarios, negación

* / % Product o, división, m ódulo

+ - Sum a, rest a

< > <= >= Menor, m ayor, m enor o igual, m ayor igual

= = != I gual, diferent e

&& Operador lógico AND

|| Operador lógico OR

? Operador condicional t ernario ?

= + = -= * = / = % = Asignación y operadores com binados de asignación

182
B. Re fe r e n cia s

Enlaces út iles sobre el lenguaj e de program ación Java y el desarrollo de


aplicaciones.

El le n gu a j e de pr ogr a m a ción Ja va
W ik ibook s Fu n da m e n t os de pr ogr a m a ción Ja va

ht t p: / / es.wikibooks.org/ wiki/ Program aci% C3% B3n_en_Java

Ja va

ht t p: / / es.wikipedia.org/ wiki/ Java_( lenguaj e_de_program aci% C3% B3n)

Est r u ct u r a s de con t r ol y e st r u ct ur a s de se le cción de Ja va

ht t p: / / w w w.program acionfacil.com / j ava/ if

ht t p: / / w w w.program acionfacil.com / j ava: swit ch

ht t p: / / w w w.program acionfacil.com / j ava/ ciclo_for

ht t p: / / w w w.program acionfacil.com / j ava/ w hile

ht t p: / / w w w.program acionfacil.com / j ava/ do_while

ht t p: / / w w w.program acionfacil.com / j ava/ ciclos_conclusiones

ht t p: / / w w w.codexion.com / t ut orialesj ava/ j ava/ nut sandbolt s/ if.ht m l

ht t p: / / w w w.codexion.com / t ut orialesj ava/ j ava/ nut sandbolt s/ sw it ch.ht m l

ht t p: / / w w w.codexion.com / t ut orialesj ava/ j ava/ nut sandbolt s/ for.ht m l

ht t p: / / w w w.codexion.com / t ut orialesj ava/ j ava/ nut sandbolt s/ while.ht m l

Blog sobr e pr ogr a m a ción e n Ja va

ht t p: / / aprender- j ava.blogspot .com

183
Re fe r e n cia s

El API de Ja va
ht t p: / / dow nload.oracle.com / j avase/ 1,5,0/ docs/ api/ allclasses- nofram e.ht m l

La cla se Ar r a ys

ht t p: / / docs.oracle.com / j avase/ 1.5.0/ docs/ api/ j ava/ ut il/ Arrays.ht m l

La cla se Ar r a yList

ht t p: / / docs.oracle.com / j avase/ 1.4.2/ docs/ api/ j ava/ ut il/ ArrayList .ht m l

La cla se File

ht t p: / / dow nload.oracle.com / j avase/ 1,5,0/ docs/ api/ j ava/ io/ File.ht m l

La cla se Pr in t W r it e r

ht t p: / / dow nload.oracle.com / j avase/ 1,5,0/ docs/ api/ j ava/ io/ Print Writ er.ht m l

La s cla se Sca n n e r

ht t p: / / dow nload.oracle.com / j avase/ 1,5,0/ docs/ api/ j ava/ ut il/ Scanner.ht m l

La cla se St r in gTok e n ize r

ht t p: / / dow nload.oracle.com / j avase/ 1,5,0/ docs/ api/ j ava/ ut il/ St ringTokenizer


.ht m l

184
C. Glosa r io

Apple t . Program a desarrollado en


A Java que se ej ecut a en un
navegador o brow ser. Un applet
Abst r a ct W in dow Toolk it
form a part e de una página web y
( AW T) . Com ponent e Java para
es ut ilizado para int roducir
diseñar un int erfaz gráfico de
acciones dinám icas t ales com o
usuario.
funciones de cálculo, anim aciones
Act ive Se r ve r Pa ge ( ASP) . Una o t areas sim ples sin necesidad de
página ASP es un t ipo especial de enviar una pet ición del usuario al
página HTML que cont iene servidor w eb.
pequeños program as, denom i-
Applica t ion Pr ogr a m I n t e r fa ce
nados “ script s” ( norm alm ent e
( API ) . I nt erfaz que se publica
escrit os en lenguaj e VBScript ) ,
para facilit ar el uso de los servicios
que son ej ecut ados en servidores
que soport a un sist em a operat ivo
Microsoft I nt ernet I nform at ion
o una aplicación. Un API describe
Server ant es de ser enviados al
det alladam ent e los m ét odos y los
usuario para su visualización en
argum ent os de las funciones que
form a de página HTML. Esos
const it uyen la int erfaz del sist em a
program as norm alm ent e realizan
operat ivo o aplicación. Perm it e
consult as a bases de dat os, de
que un program ador haga uso de
form a que est os result ados
las funciones alm acenadas.
det erm inan la inform ación que se
envía al usuario. Los ficheros de Applica t ion Se r ve r . Un servidor
est e t ipo llevan el sufij o asp. de aplicaciones es un program a
servidor que se ej ecut a en un
Act ive X. Lenguaj e desarrollado
ordenador en una red dist ribuida y
por Microsoft para la elaboración
proporciona la lógica de negocio
de aplicaciones que funcionan en
de una aplicación. Un servidor de
cualquier plat aform a, norm al-
aplicaciones form a part e de la
m ent e ut ilizando navegadores
arquit ect ura de t res capas ( Three-
web. Los obj et os Act iveX perm it en
t ier archit ect ure) , com puest a por
hacer páginas web dinám icas.
un servidor de int erfaz gráfica de
Ám bit o. I ndica el ent orno desde usuario ( GUI ) , un servidor de
donde se puede ut ilizar un aplicaciones ( lógica de negocio) y
ident ificador. De form a general, un un servidor de base de dat os y
ident ificador solo puede ser t ransacciones.
ut ilizado en el bloque donde se ha
declarado.

185
Glosa r io

Est a arquit ect ura se com pone de usualm ent e enviando una nueva
t res capas, denom inadas página w eb.
com únm ent e:
Ar r a y. Conj unt o de dat os de un
Top- t ier / front - end. I nt erfaz m ism o t ipo de dat o, por ej em plo
gráfica de usuario basada en un ent ero, lógico o de clase. Un array
navegador web ( browser) . Est e est á form ado por un conj unt o de
int erfaz se ej ecut a norm alm ent e casillas que alm acenan variables.
ut ilizando un ordenador personal o Cada casilla o elem ent o del array
una est ación de t rabaj o. se ident ifica por un núm ero de
posición.
Middle- t ier / business logic.
Aplicaciones que se ej ecut an Asign a ción. Proceso por el cual
norm alm ent e en un servidor se alm acena un valor en una
int ranet . variable.

Third- t ier / back- end. Servidor de Asym m e t r ic D igit a l Su bscr ibe r


bases de dat os y t ransacciones. Lin e ( AD SL) . Tecnología de
Est e servicio se ej ecut a t ransm isión de t ipo xDSL, que
norm alm ent e en un servidor perm it e a los hilos t elefónicos de
grande o m ainfram e. cobre convencionales una alt a
velocidad de t ransm isión. Se
Los sist em as heredados ( legacy denom ina asim ét rica porque
syst em s) con frecuencia form an perm it e m ayor velocidad en la
part e del back- end, en t ant o que recepción que en la em isión de
el servidor de aplicaciones est á dat os.
int egrado en la capa int erm edia
que exist e ent re la int erfaz de Asym m e t r ica l Ke ys. Uso de una
usuario ( front - end) y los sist em as parej a de claves, una pública y la
heredados. ot ra privada. Una clave se ut iliza
para cifrar y la ot ra para descifrar
Un servidor de aplicaciones t rabaj a la inform ación que viaj a por una
norm alm ent e con un servidor web red pública de com unicaciones.
( Hypert ext Transfer Prot ocol –
HTTP) y es por ello denom inado Au t e n t ifica ción. Aut ent ificación o
Web Applicat ion Server. El int erfaz verificación de la ident idad de un
de usuario ( front - end) se basa en usuario o sist em a m ediant e el uso
HTML y XML, m ient ras que el de algorit m os de cifrado,
servidor web soport a diferent es norm alm ent e basados en claves
form as de enviar una pet ición al asim ét ricas.
servidor de aplicaciones y devolver
la respuest a al usuario,

186
Fu nda m e nt os de pr ogr a m a ción e n Ja va

puede represent ar com o una


B t abla. En el m odelo relacional, los
dat os y las relaciones exist ent es
Ba ck bon e . Línea de t eleco-
ent re los dat os se represent an
m unicaciones de gran capacidad a
m ediant e est as relaciones
la que se conect an ot ras líneas de
m at em át icas, cada una con un
m enor capacidad.
nom bre que es único y con un
En una red local un backbone es conj unt o de colum nas. En est e
una línea o conj unt o de líneas de m odelo la base de dat os es
la red que conect an con una percibida por el usuario com o un
conexión de ám bit o ext enso o a conj unt o de t ablas.
una red local para unir dos
El m odelo orient ado a obj et os
edificios. En I nt ernet o en
define una base de dat os en
cualquier ot ra red de ám bit o
t érm inos de obj et os, sus
ext enso ( WAN) , un backbone es
propiedades y sus operaciones.
un conj unt o de rut as ( pat hs) que
Los obj et os con la m ism a
conect an redes locales a una
est ruct ura y com port am ient o
conexión de larga dist ancia. Los
pert enecen a una clase, y las
punt os de conexión se conocen
clases se organizan en j erarquías.
com o nodos.
Las operaciones de cada clase se
Ba ck - e n d. Front - end y back- end definen en t érm inos de
son t érm inos que se ut ilizan para procedim ient os predefinidos
dist inguir las int erfaces y servicios denom inados m ét odos.
que t ienen relación direct a con el
El lenguaj e est ándar para realizar
usuario final. Una aplicación de
consult as y act ualizaciones a una
t ipo back- end sólo t iene una
base de dat os es SQL ( St ruct ured
relación indirect a con el usuario a
Query Language) .
t ravés de la int erfaz.
Bit . Dígit o binario que alm acena
Ba se de da t os. Colección de
un valor 0 o 1.
dat os organizados de form a que
los cont enidos pueden ser Bloqu e . Código fuent e Java que
recuperados o act ualizados se escribe ent re los caract eres { y
fácilm ent e. Los m odelos em - }.
pleados por los sist em as de bases
de dat os son: el relacional y el Boole a n o. Tipo de dat o prim it ivo
orient ado a obj et os. que alm acena un valor lógico falso
o verdadero.
El m odelo relacional se basa en el
concept o m at em át ico denom inado Byt e code . Código int erm edio
“ relación” , que gráficam ent e se independient e de la plat aform a. El

187
Glosa r io

código fuent e Java se com pila a Const a n t e . Se refiere a las


Byt ecode y est e código es variables de un program a que
int erpret ado por la m áquina virt ual m ant ienen el m ism o valor durant e
de Java. la ej ecución de un program a. Las
const ant es en Java se declaran
Br ow se r . Navegador web que con el delim it ador final.
perm it e visualizar docum ent os
HTML o XML y navegar por el Con st r u ct or . Mét odo que se
espacio I nt ernet . Un navegador ut iliza para crear un obj et o en una
web es un program a client e que clase.
ut iliza el prot ocolo HTTP para
realizar pet iciones a servidores D
web a t ravés de I nt ernet y
desplegar de form a gráfica al D e cla r a ción. Sent encia en la que
usuario la inform ación recibida del se define un nom bre de at ribut o y
servidor. el t ipo o clase a la que pert enece.

C D om in io. Un dom inio ident ifica de


form a unívoca a una organización
Cla se . Una clase describe a un o cualquier ot ra ent idad en
conj unt o de obj et os que com part e I nt ernet . Un ident ificador de
los m ism os at ribut os, com por- dom inio se com pone de dos
t am ient o y sem ánt ica. niveles:

Com e n t a r io. Part e de un Top- le ve l dom a in ( TLD ) .


program a Java delim it ado por los I dent ifica la part e m ás general del
sím bolos / * y * / o por / / si se nom bre de dom inio en una
t rat a de un com ent ario de una dirección de I nt ernet . Un TLD
línea. Los com ent arios son út iles puede ser genérico ( gTLD) o
para explicar el diseño o el código de país ( ccTLD) . “ com ” o
com port am ient o de un program a. “ edu” son ej em plos de TLD’s
genéricos, en t ant o que “ es” o “ fr”
Com pila dor . Program a que son ej em plos de códigos de país.
t raduce el código fuent e de un
lenguaj e en un código ej ecut able o Se con d- le ve l dom a in ( SLD ) .
en un código int erm edio com o el I dent ifica al propiet ario del
Byt ecode. Al proceso de análisis y dom inio con una dirección I P.
t raducción del lenguaj e de “ nebrij a” es un ej em plo de un
program ación se le denom ina dom inio de segundo nivel.
com pilación.

188
Fu nda m e nt os de pr ogr a m a ción e n Ja va

form at o. XML ofrece una


E represent ación est ruct ural de los
dat os, es un subconj unt o de SGML
En ca psu la ción . Consist e en
opt im izado para el Web que ha
definir t odos los dat os y m ét odos
sido definido por el World Wide
dent ro de una clase. La
Web Consort ium ( W3C) . Garant iza
encapsulación consist e en form ar
que los dat os est ruct urados son
un paquet e con los at ribut os
uniform es e independient es de
( dat os) y el com port am ient o
aplicaciones o fabricant es, lo que
( m ét odos) de un obj et o.
increm ent a la int eroperabilidad y
En t e r pr ise Ja va Be a n ( EJB) . ha dado origen a una nueva
Arquit ect ura de com ponent es generación de aplicaciones de
desarrollada por Sun Microsyst em s com ercio elect rónico en la Web.
para diseño de obj et os dist ribuidos
Los obj et ivos de XML son:
en Java. Un EJB se const ruye a
part ir de la t ecnología JavaBeans. 1. XML debe ser direct am ent e
Un com ponent e EJB t iene la ut ilizable sobre I nt ernet
vent aj a de ser un elem ent o
reut ilizable en diferent es 2. XML debe soport ar una am plia
aplicaciones. variedad de aplicaciones

Ex ce pción. Event o inesperado 3. XML debe ser com pat ible con
que se produce durant e la SGML
ej ecución de un program a. Una
4. Un program a que procese
excepción rom pe int errum pe el
docum ent os XML debe ser fácil de
fluj o de ej ecución norm al de un
escribir
program a.

5. El núm ero de caract eríst icas


Ex pr e sión . Código que se form a
opcionales en XML debe ser
uniendo expresiones sim ples
m ínim a, idealm ent e cero
form adas por lit erales o variables
con operadores. El valor de una
6. Los docum ent os XML deben ser
expresión se calcula considerando
legibles y claros
la precedencia de los operadores
arit m ét icos y lógicos. 7. El diseño de XML debe ser
conciso
e Xt e n sible Markup La n gu a ge
( XM L) . XML es un lenguaj e de 8. Los docum ent os XML deben
m arcado para la descripción de crearse fácilm ent e
dat os est ruct urados. Perm it e
declarar los cont enidos de form a 9. No im port a si las m arcas XML
precisa y separar el cont enido del no son concisas

189
Glosa r io

dist inguir las int erfaces y servicios


F que t ienen relación direct a con el
usuario final. Una aplicación de
File Tr a n sfe r Pr ot ocol ( FTP) . El
t ipo front - end int eracciona
prot ocolo FTP se incluye com o
direct am ent e con el usuario.
part e del TCP/ I P. Es el prot ocolo
de nivel de aplicación dest inado a
proporcionar el servicio de G
t ransferencia de ficheros en
I nt ernet . El FTP depende del Ga t e w a y. Punt o de una red que
prot ocolo TCP para las funciones act úa com o punt o de ent rada a
de t ransport e, y guarda alguna ot ra red. En int ernet , un nodo de
relación con TELNET ( prot ocolo la red puede ser de dos t ipos:
para la conexión rem ot a) . gat eway o host . Tant o los
ordenadores de los usuarios de
El prot ocolo FTP perm it e acceder a I nt ernet com o los ordenadores
algún servidor que disponga de que sirven páginas son nodos de
est e servicio y realizar t areas t ipo host . Los ordenadores que
com o m overse a t ravés de su cont rolan el t ráfico en una red
est ruct ura de direct orios, ver y local o en un I SP - I nt ernet
descargar ficheros al ordenador Service Provider son nodos de t ipo
local, enviar ficheros al servidor o gat eway. En una red local, un
copiar archivos direct am ent e de ordenador que act úa com o nodo
un servidor a ot ro de la red. gat eway com únm ent e hace las
Lógicam ent e y por m ot ivos de funciones de servidor proxy y
seguridad se hace necesario firewall.
cont ar con el perm iso previo para
poder realizar t odas est as Gr a ph ica l Use r I n t e r fa ce
operaciones. El servidor FTP pedirá ( GUI ) . I nt erfaz gráfica de usuario.
el nom bre de usuario y clave de Es el m edio a t ravés del que un
acceso al iniciar la sesión ( login) , usuario int eracciona con una
que debe ser sum inist rado aplicación inform át ica. Un int erfaz
correct am ent e para ut ilizar el de usuario se com pone
servicio. norm alm ent e de vent anas,
bot ones, m enús desplegables,
Fir e w a ll. Disposit ivo o m enús cont ext uales, cam pos de
com ponent e soft ware que ut iliza t ext o, list as y ot ros obj et os.
reglas para especificar que
prot ocolos o com unicaciones no H
pueden acceder a la red.
H e r e n cia . Concept o por el que
Fr on t - e nd. Front - end y back- end
una clase queda form ada por
son t érm inos que se ut ilizan para

190
Fu nda m e nt os de pr ogr a m a ción e n Ja va

t odos los at ribut os y m ét odos de I n t e r ne t . Red de t eleco-


una clase de orden superior de la m unicaciones nacida en 1969 en
que hereda. los EE.UU. a la cual est án
conect adas m illones de personas,
H ype r t e x t Markup La n gu a ge organism os y em presas en t odo el
( H TM L) . Lenguaj e de t ext o con m undo, m ayorit ariam ent e en los
m arcadores, denom inados t ags, países m ás desarrollados. I nt ernet
que se ut iliza para especificar el es una red m ult iprot ocolo cuyo
form at o y com port am ient o de las rápido desarrollo est á t eniendo
páginas web. HTML perm it e im port ant es efect os sociales,
especificar t odas las caract eríst icas económ icos y cult urales,
del t ext o a present ar ( t ipo de convirt iéndose en uno de los
let ra, t am año, color, posición, m edios m ás influyent es de la
et c.) , así com o el inicio y fin de las llam ada " Sociedad de la
zonas act ivas del t ext o, con la I nform ación" . La red I nt ernet t iene
referencia del docum ent o a una j erarquía de t res niveles
present ar. form ados por redes t roncales,
redes de nivel int erm edio y redes
H ype r t e x t Tr a n sfe r Pr ot ocol
aisladas.
( H TTP) . Prot ocolo de t ransport e
de hypert ext o. Const a de un I n t e r n e t Pr ot ocol ( I P) . El I P es
conj unt o de reglas para un prot ocolo que pert enece al
int ercam bio de ficheros de t ext o, nivel de red. Es ut ilizado por los
im ágenes, sonido, video y ot ros prot ocolos del nivel de t ransport e
form at os m ult im edia gráficos a com o TCP para encam inar los
t ravés del World Wide Web. dat os hacia su dest ino. I P t iene la
m isión de encam inar el
I dat agram a, sin com probar la
int egridad de la inform ación que
I de n t ifica dor . Nom bre que se da cont iene.
a un elem ent o de un program a.
Mediant e est e nom bre se hace I n t e r ne t Pr ot ocol Addr e ss
referencia a cualquier elem ent o de ( I P Addr e ss) . La dirección de
un program a Java. Se aplica a I nt ernet se ut iliza para ident ificar
clases, at ribut os, m ét odos y t ant o a cada ordenador y a la red
argum ent os. a la que pert enece, de m anera que
sea posible dist inguir a t odos los
I n icia liza r . Asignar un valor a ordenadores conect ados a una
una variable ant es de que sea m ism a red. Con est e propósit o, y
ut ilizada en una expresión. t eniendo en cuent a que en
I nt ernet se conect an redes de
diverso t am año, exist en t res

191
Glosa r io

clases diferent es de direcciones, t ipo de direcciones t endría que ser


las cuales se represent an suficient e para la gran m ayoría de
m ediant e t res rangos de valores: las organizaciones grandes. En
caso de que el núm ero de
Clase A. El prim er byt e t iene un ordenadores que se necesit a
valor com prendido ent re 1 y 126. conect ar fuese m ayor, sería
Est as direcciones ut ilizan posible obt ener m ás de una
únicam ent e est e prim er byt e para dirección de " clase B" , evit ando de
ident ificar la red, quedando los est a form a el uso de una de " clase
ot ros t res byt es disponibles para A" .
cada uno de los host s que
pert enezcan a est a m ism a red. Clase C. En est e caso el valor del
Est o significa que podrán exist ir prim er byt e t endrá que est ar
m ás de dieciséis m illones de com prendido ent re 192 y 223,
ordenadores en cada una de las incluyendo am bos valores. Est e
redes de est a clase. Est e t ipo de t ercer t ipo de direcciones ut iliza
direcciones es usado por redes los t res prim eros byt es para el
m uy ext ensas, pero hay que t ener núm ero de la red, con un rango
en cuent a que sólo puede haber desde 192.1.1 hast a 223.254.254.
126 redes de est e t am año. De est a m anera queda libre un
ARPAnet es una de ellas, aunque byt e para el host , lo que perm it e
son pocas las organizaciones que que se conect en un m áxim o de
obt ienen una dirección de " clase 254 ordenadores en cada red.
A" . Lo norm al para las grandes Est as direcciones perm it en un
organizaciones es que ut ilicen una m enor núm ero de host que las
o varias redes de " clase B" . ant eriores, aunque son las m ás
num erosas pudiendo exist ir un
Clase B. Est as direcciones ut ilizan gran núm ero redes de est e t ipo
en su prim er byt e un valor ( m ás de dos m illones) .
com prendido ent re 128 y 191,
incluyendo am bos. En est e caso el
ident ificador de la red se obt iene
J
de los dos prim eros byt es de la
Ja va . Ent orno de desarrollo de
dirección, t eniendo que ser un
aplicaciones web diseñado por Sun
valor ent re 128.1 y 191.254 ( no
MicroSyst em s.
es posible ut ilizar los valores 0 y
255 por t ener un significado Ja va D a t a ba se Con ne ct iv it y
especial) . Los dos últ im os byt es de ( JD BC) . Est ándar para acceso a
la dirección const it uyen el bases de dat os desde program as
ident ificador del host , perm it iendo desarrollados en Java. JDBC ut iliza
un núm ero m áxim o de 64516 una API basada en el lenguaj e de
ordenadores en la m ism a red. Est e consult a de bases de dat os SQL.

192
Fu nda m e nt os de pr ogr a m a ción e n Ja va

Ja va D e v e lopm e n t Kit ( JD K) . 1. Cam biar el form at o de una


Ent orno de desarrollo y librerías fecha de form a aut om át ica en una
para diseño de program as Java. página w eb

Ja va Run t im e Envir onm e n t 2. Desplegar un enlace a una


( JRE) . Subconj unt o del JDK que página web en una vent ana pop-
perm it e ej ecut ar program as up.
com pilados en Byt ecode. Est á
form ado por una m áquina virt ual 3. Modificar t ext os o gráficos
de Java y por librerías est ándar. m ient ras se realiza una acción de
rat ón de t ipo “ m ouse rollover” .
Ja va Se r ve r Pa ge ( JSP) . Java
Server Page es una t ecnología que L
se ut iliza para cont rolar el
cont enido y apariencia de las Loca l Ar e a N e t w or k ( LAN ) . Red
páginas w eb m ediant e el uso de de área local que une servidores y
servlet s. Un servlet es un pequeño puest os client e. La ext ensión de
program a Java que se direcciona est e t ipo de redes suele est ar
desde la página web y es rest ringida a una sala o edificio,
ej ecut ado en el servidor web para aunque t am bién podría ut ilizarse
m odificar el cont enido de la página para conect ar dos m ás edificios
ant es de que ést a sea enviada al próxim os.
usuario que la ha solicit ado. Una
página JSP cont iene servlet s para
consult ar bases de dat os y generar
M
de form a dinám ica el cont enido de
M a in fr a m e . Térm ino que se
una página HTML.
ut iliza para denom inar a grandes
Ja va Vir t u a l M a chin e ( JV M ) . ordenadores diseñados para
Program a que ej ecut a program as sat isfacer las necesidades de
j ava com pilados en Byt ecode. La procesam ient o de inform ación de
m áquina virt ual de Java es un las organizaciones de m ayor
ent orno seguro de ej ecución de t am año a nivel m undial.
aplicaciones.
M é t odo. Función definida dent ro
Ja va scr ipt . Lenguaj e de de una clase. Un m ét odo puede
program ación que perm it e devolver un valor o no, en t al caso
dinam izar el cont enido de una se indica que devuelve void.
página HTML. Javascript es un
lenguaj e int erpret ado. Se ut ilizan
norm alm ent e para desarrollar
funciones t ales com o:

193
Glosa r io

Sesión. Encargado de ciert os


N aspect os de la com unicación com o
el cont rol de los t iem pos de
N e t w or k Use r I n t e r fa ce ( N UI ) .
t ransm isión.
I nt erfaz de usuario de red en un
ent orno I nt ernet . Transport e. Transport a la
inform ación de una m anera fiable
O para que llegue correct am ent e a
su dest ino.
Ope n Syst e m I n t e r con n e ct ion
Red. Nivel encargado de
( OSI ) . El m odelo OSI es ut ilizado
encam inar los dat os hacia su
por práct icam ent e la t ot alidad de
dest ino eligiendo la rut a m ás
las redes de ordenadores del
efect iva.
m undo. Est e m odelo fue creado
por el I nt ernat ional St andard
Enlace de dat os. Cont rola el fluj o
Organizat ion I SO, consist e en
de dat os, la sincronización y los
siet e niveles o capas donde cada
errores que puedan producirse.
una de ellas define las funciones
que deben proporcionar los Físico. Se encarga de los aspect os
prot ocolos con el propósit o de físicos de la conexión, t ales com o
int ercam biar inform ación ent re el m edio de t ransm isión o el
varios sist em as. Est a clasificación hardware.
perm it e que cada prot ocolo se
desarrolle con una finalidad
P
det erm inada, lo cual sim plifica el
proceso de desarrollo e
Pla t a for m a . En inform át ica, una
im plem ent ación. Cada nivel
plat aform a es un sist em a que
depende de los que est án por
sirve com o base para hacer
debaj o de él, y a su vez
funcionar det erm inados m ódulos
proporciona alguna funcionalidad a
de hardware o de soft ware con los
los niveles superiores.
que es com pat ible. Una plat aform a
se define por una arquit ect ura
A cont inuación se describen las
hardware y una plat aform a
funciones básicas de cada nivel.
soft w are que incluye sist em as
Aplicación. El nivel de aplicación es operat ivos y ent ornos de
el dest ino final de los dat os donde desarrollo de aplicaciones.
se proporcionan los servicios al
Poin t t o Poin t Pr ot ocol ( PTP) .
usuario.
Prot ocolo de com unicación ent re
Present ación. Conviert e los dat os dos ordenadores basado en una
que serán ut ilizados en el nivel de int erfaz serie, t ípicam ent e un
aplicación. ordenador personal conect ado vía

194
Fu nda m e nt os de pr ogr a m a ción e n Ja va

t elefónica con un servidor. En est e el esfuerzo se cent ra en m odelar


caso, el I SP proporcionaría una los obj et os que com ponen un
conexión punt o a punt o para sist em a, sus responsabilidades y
at ender a las pet iciones que el en las relaciones que exist en ent re
ordenador personal realizaría a diferent es obj et os.
t ravés de I nt ernet .
Pr ot ocolo. Prot ocolo, descripción
Por t a bilida d. Caract eríst ica que form al de form at os de m ensaj e y
posee un program a para de reglas que dos ordenadores
ej ecut arse en diferent es deben seguir para int ercam biar
plat aform as inform át icas. inform ación. Un prot ocolo puede
describir det alles de baj o nivel de
Pr ogr a m a ción or ie n t a da a las int erfaces m áquina- a- m áquina
obj e t os. La program ación o int ercam bios de alt o nivel ent re
orient ada a obj et os es una t écnica program as.
de análisis y diseño de soft ware
que orient a a los elem ent os de un Pr ox y Se r ve r . Servidor especial
sist em a, sus at ribut os y encargado, ent re ot ras cosas, de
responsabilidades en vez de cent ralizar el t ráfico ent re I nt ernet
cent rarse en el fluj o de los y una red privada, de form a que
procesos. El m odelo abst ract o est á evit a que cada una de las
form ado de clases. Una clase m áquinas de la red int erior t enga
describe a un conj unt o de obj et os que disponer necesariam ent e de
que com part e los m ism os una conexión direct a a la red. Al
at ribut os, com port am ient o y m ism o t iem po cont iene
sem ánt ica. m ecanism os de seguridad
( firew all) que im piden accesos no
La program ación orient ada a aut orizados desde el ext erior hacia
obj et os ha cam biado las reglas de la red privada.
desarrollo de soft ware. Est e
paradigm a se basa en los obj et os
y en los dat os, en vez de en las
R
acciones. Tradicionalm ent e, t odo
Ru n t im e . Program a que perm it e
program a era concebido com o un
ej ecut ar program as Java
procedim ient o lógico que recibía
com pilados en Byt ecode. El
dat os de ent rada y, t ras
sist em a runt im e dispone de t odo
procesarlos, generaba dat os de
lo necesario para la carga
salida. Baj o est e m odelo, el ret o
dinám ica de las clases de un
consist ía en cóm o codificar el
program a, las librerías est ándar
proceso lógico y no en cóm o
del lenguaj e y una m áquina virt ual
definir los dat os. En la
de Java.
program ación orient ada a obj et os

195
Glosa r io

cert ificadoras aut orizadas y se


S pone en com unicación con el
servidor seguro que le envía su
Se cu r e Sock e t La ye r ( SSL) .
clave pública, rubricada por el
Prot ocolo que soport a cifrado para
not ario. La ident ificación se
garant izar la privacidad de la
com plet a enviando al servidor un
com unicación ent re un browser y
m ensaj e aleat orio que ést e debe
un servidor web. Es el prot ocolo
firm ar. De est a form a sabe el
de seguridad m ás ut ilizado en
client e que al ot ro lado est á quien
I nt ernet , es una t ecnología
dice ser.
diseñada por Net scape
Com m unicat ions I nc. que dispone Verificada la ident idad del
un nivel seguro ent re el servicio servidor, el client e genera una
clásico de t ransport e en I nt ernet clave de sesión y la envía cifrada
( TCP) y las aplicaciones que se con la clave pública del servidor.
com unican a t ravés de él. Conociendo am bos la clave de
sesión ( y el servidor es el único en
Las com unicaciones t ienen lugar
poderla descifrar al requerir su
en dos fases, en una prim era fase
clave privada) , se int ercam bian
se negocia ent re el client e y el
dat os con seguridad cifrados por el
servidor una clave sim ét rica sólo
algorit m o de clave secret a.
válida para esa sesión. En la
segunda fase, se t ransfieren dat os Se r vle t . Program a Java que
cifrados con dicha clave. Est e aport a m ás funcionalidad a un
sist em a es t ransparent e para las servidor web generando
aplicaciones finales, que cont enidos dinám icos e
sim plem ent e saben que el canal int eract uando con client es web
( m ant enido por el navegador y el ut ilizando el m odelo Request -
servidor de com ercio o servidor Response.
seguro) se encarga de
proporcionarles confidencialidad Sim ple M a il Tr a n sfe r Pr ot ocol
punt o a punt o. ( SM TP) . El prot ocolo SMTP
proporciona el servicio de correo
La fase inicial que ut iliza elect rónico. Perm it e enviar
t ecnología de cifrado de clave m ensaj es de t ext o y archivos
pública se realiza m uy binarios de cualquier t ipo a ot ros
cuidadosam ent e para evit ar t ant o usuarios de la red. Los m ensaj es
la int rom isión de t erceras part es de correo elect rónico no se envían
com o para evit ar suplant aciones direct am ent e a los ordenadores
de ident idad del cent ro servidor. El personales de cada usuario, sino
navegador incluye las claves que se ut iliza un ordenador que
públicas de ciert os not arios act úa com o servidor de correo
elect rónicos o ent idades

196
Fu nda m e nt os de pr ogr a m a ción e n Ja va

elect rónico perm anent em ent e. Los


m ensaj es perm anecen en est e
T
sist em a hast a que el usuario los
Tr a n sm ission Con t r ol Pr ot ocol
t ransfiere a su propio ordenador.
( TCP) . Prot ocolo de com unicación
Sist em a operat ivo. Program a o que perm it e el enlace ent re
conj unt o de program as que aplicaciones a t ravés de I nt ernet .
efect úan la gest ión de los procesos Est e prot ocolo pert enece al nivel
básicos de un sist em a inform át ico de t ransport e y es el encargado de
y perm it e la norm al ej ecución del dividir el m ensaj e original en
rest o de las operaciones. Un dat agram as de m enor t am año. Los
sist em a operat ivo gest iona los dat agram as serán dirigidos a
recursos de un sist em a t ravés del prot ocolo I P de form a
inform át ico. individual. El prot ocolo TCP se
encarga adem ás de añadir
inform ación necesaria en la
St a n da r d Ge n e r a lize d Makup cabecera de cada dat agram a.
La ngua ge ( SGM L) . SGML es un
lenguaj e de m arcado de t ext o que Cuando la inform ación se divide en
se ut iliza para especificar el dat agram as para ser enviados, el
form at o de docum ent os. SGML orden en que ést os lleguen a su
perm it e que la est ruct ura de un dest ino no t iene que ser el
docum ent o pueda ser definida en correct o. Cada uno de ellos puede
base a la relación lógica de sus llegar en cualquier m om ent o y con
part es, se basa en la idea de que cualquier orden, e incluso puede
los docum ent os se com ponen de que algunos no lleguen a su
una est ruct ura y elem ent os dest ino o lleguen con inform ación
sem ánt icos que pueden describirse errónea. Para evit ar t odos est os
sin necesidad de indicar su problem as el TCP num era los
apariencia. dat agram as ant es de enviarlos, de
m anera que sea posible volver a
Un docum ent o SGML se m arca de unirlos en el orden adecuado. Est o
m odo que no dice nada respect o a perm it e t am bién solicit ar el envío
su represent ación en la pant alla o de los dat agram as individuales
en papel. Un program a de que no se hayan recibido o que
present ación debe unir el cont engan errores, sin que sea
docum ent o con la inform ación de necesario volver a enviar el
est ilo a fin dar al docum ent o su m ensaj e com plet o.
apariencia final.
Tr a n sm ission Con t r ol Pr ot ocol
Sw in g. Conj unt o de com ponent es / I n t e r n e t Pr ot ocol ( TCP/ I P) .
desarrollados para diseñar una TCP/ I P es el prot ocolo que ut ilizan
int erfaz gráfico de usuario. los ordenadores conect ados a

197
Glosa r io

I nt ernet para com unicarse ent re Red. I ncluye al prot ocolo I P, que
sí. TCP/ I P se encarga de que la se encarga de enviar los paquet es
com unicación ent re diferent es de inform ación a sus dest inos
ordenadores sea posible ya que es correspondient es y es ut ilizado por
com pat ible con cualquier hardw are los prot ocolos del nivel de
y sist em a operat ivo. TCP/ I P no es t ransport e.
un único prot ocolo, sino un
conj unt o de prot ocolos que cubren Enlace de dat os. Los niveles OSI
los dist int os niveles del m odelo correspondient es son el de enlace
OSI . Los dos prot ocolos m ás y el nivel físico. Los prot ocolos que
im port ant es son el TCP pert enecen a est e nivel son los
( Transm ission Cont rol Prot ocol) y encargados de la t ransm isión a
el I P ( I nt ernet Prot ocol) , que son t ravés del m edio físico al que se
los que dan nom bre al conj unt o. encuent ra conect ado cada host ,
En I nt ernet se diferencian cuat ro com o puede ser una línea punt o a
niveles o capas en las que se punt o o una red Et hernet .
agrupan los prot ocolos,
El TCP/ I P necesit a funcionar sobre
relacionadas con los niveles OSI
algún t ipo de red o de m edio físico
de la siguient e form a:
que proporcione sus propios
Aplicación. Corresponde con los prot ocolos para el nivel de enlace
niveles OSI de aplicación, de I nt ernet . Por est e m ot ivo hay
present ación y sesión. Aquí se que t ener en cuent a que los
incluyen prot ocolos dest inados a prot ocolos ut ilizados en est e nivel
proporcionar servicios, t ales com o pueden ser m uy diversos y no
correo elect rónico SMTP ( Sim ple form an part e del conj unt o TCP/ I P.
Mail Transfer Prot ocol) , Sin em bargo, est o no debe ser un
t ransferencia de ficheros FTP ( File problem a, puest o que una de las
Transfer Prot ocol) , conexión funciones y vent aj as principales
rem ot a ( TELNET) y ot ros m ás del TCP/ I P es proporcionar una
recient es com o el prot ocolo HTTP abst racción del m edio de form a
( Hypert ext Transfer Prot ocol) . que sea posible el int ercam bio de
inform ación ent re m edios
Transport e. Coincide con el nivel diferent es y t ecnologías que
de t ransport e del m odelo OSI . Los inicialm ent e son incom pat ibles.
prot ocolos de est e nivel, t ales
com o TCP y UDP, se encargan de Para t ransm it ir inform ación a
m anej ar los dat os y proporcionar t ravés de TCP/ I P, ést a debe ser
la fiabilidad necesaria en el dividida en unidades de m enor
t ransport e de los m ism os. t am año, lo que proporciona
grandes vent aj as en el m anej o de
los dat os. En TCP/ I P cada una de

198
Fu nda m e nt os de pr ogr a m a ción e n Ja va

est as unidades de inform ación ubicación física del fichero en el


recibe el nom bre de dat agram a. ordenador.
Un dat agram a es un conj unt o de
dat os que se envía com o un V
m ensaj e independient e.
Va r ia ble . Elem ent o de un
Tu n n e lin g. Perm it e la t ransm isión
program a Java ident ificado por un
segura de dat os a t ravés de
nom bre. Una variable alm acena un
I nt ernet .
valor y t iene un t ipo de dat o y un
ám bit o.
U
VBScr ipt . Lenguaj e int erpret ado
Un icode . Sist em a de codificación desarrollado por Microsoft que es
de caract eres que ut iliza 16 bit s un subconj unt o de Visual Basic.
para represent ar cada caráct er. Est e lenguaj e ha sido diseñado
Est o perm it e represent ar para ser int erpret ado por
práct icam ent e cualquier alfabet o navegadores web. VBScript es
del m undo. Los program as Java com parable a ot ros lenguaj es para
ut ilizan caract eres Unicode. diseño de páginas web com o
Javascript , o Perl.
Un ifie d M ode lin g La n gu a ge
( UM L) . El UML se ha convert ido
en el lenguaj e de m odelado de la
W
indust ria del soft ware. UML es el
W e b Se r ve r . Un servidor web es
lenguaj e est ándar para análisis y
un equipo conect ado a I nt ernet
diseño de aplicaciones orient adas
con un conj unt o de docum ent os
a obj et os. Es result ado de años de
alm acenados, norm alm ent e
invest igación en el ám bit o de la
escrit os en form at o HTML, y un
ingeniería del soft ware.
program a que at iende a las
Un ifor m Re sou r ce Loca t or pet iciones de docum ent os
( URL) . Dirección de un fichero o realizadas por los usuarios. Un
recurso que es accesible a t ravés servidor w eb se com unica con los
de I nt ernet . El recurso puede ser navegadores o brow sers m ediant e
una página HTML, una im agen, un el prot ocolo HTTP. Un servidor
program a o cualquier ot ro t ipo de web ej ecut a program as que
fichero soport ado por el prot ocolo realizan consult as a bases de
HTTP. La dirección URL cont iene el dat os y generan páginas HTML
prot ocolo requerido para acceder dinám icas.
al recurso, el dom inio que
W e b Sit e . Conj unt o de páginas
ident ifica a un ordenador en
web alm acenadas en un punt o de
I nt ernet y una descripción de la
red con una dirección única a las

199
Glosa r io

que se accede a t ravés de una


página de inicio. Un sit io web es
público y cualquier usuario puede
acceder a él para obt ener
inform ación.

W ide Ar e a N e t w or k ( W AN ) .
Red de ordenadores que cubre un
espacio ext enso, conect ando a
puest os de t rabaj o de una cuidad
o un país com plet o. Est e t ipo de
redes se basan en las líneas de
t eléfono y ot ros m edios de
t ransm isión m ás sofist icados,
com o pueden ser las m icroondas.
La velocidad de t ransm isión suele
ser inferior que en las redes
locales.

W or ld W ide W e b. Sist em a
ut ilizado para explorar sit ios web
que residen en I nt ernet . World
Wide Web es el com ponent e m ás
visible y m ás conocido de I nt ernet .

200

También podría gustarte