Fundamentos de Programacion en Java
Fundamentos de Programacion en Java
pr ogr a m a ción e n Ja va
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
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 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
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
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
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.
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.
5
I n t r odu cción a Ja va
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.
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
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:
¿Cóm o se va a ut ilizar?
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
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.
/*
* Este programa escribe el texto "Hola Mundo" en la consola
* utilizando el método System.out.println()
*/
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.
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.
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 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.
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.
System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");
Hola Mundo
11
Est r u ct u r a de u n pr ogr a m a Ja va
System.out.print("Hola");
System.out.print("Mundo");
HolaMundo
System.out.println("Hola");
System.out.println("Mundo");
Hola
Mundo
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
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():
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.
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
/*
* El programa HolaMundo se utiliza para aplicar los
* métodos System.out.print() y System.out.println()
*/
/**
* 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.
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’.
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 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.
int mesNacimiento;
mesNacimiento = 2;
System.out.print(mesNacimiento);
Java perm it e declarar e inicializar una variable en una sola sent encia.
16
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
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.
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
- 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
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.
18
Fu nda m e nt os de pr ogr a m a ción e n Ja va
Boole a n os. Los valores lógicos solo pueden ser true y false. Se escriben
siem pre en m inúsculas.
Caráct er Significado
\b Ret roceso
\t Tabulador
\n Salt o de línea
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 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 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.
Boole a n os. Los operadores que se aplican a los valores lógicos son:
negación, Y lógico, O lógico.
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.
C = ((F – 32) * 5) / 9
21
Est r u ct u r a de u n pr ogr a m a Ja va
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 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.
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.
22
Fu nda m e nt os de pr ogr a m a ción e n Ja va
La s pa la br a s r e se r va da s de Ja va
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
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:
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.
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.
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;
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
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
M é t odos y con st r u ct or e s
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
29
Cla se s y obj e t os
30
Fu nda m e nt os de pr ogr a m a ción e n Ja va
31
Cla se s y obj e t os
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.
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.
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.
33
Cla se s y obj e t os
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.
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
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;
Vehiculo vehiculo2;
35
Cla se s y obj e t os
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")
}
36
Fu nda m e nt os de pr ogr a m a ción e n Ja va
Vehiculo vehiculo1;
Vehiculo vehiculo3;
vehiculo3 = 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());
37
Cla se s y obj e t os
La salida por la consola m uest ra dos veces los valores asignados al obj et o
vehiculo1.
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);
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
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:
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.
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.
40
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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
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 ’ 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
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
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
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.
44
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
45
Cla se s y obj e t os
46
Fu nda m e nt os de pr ogr a m a ción e n Ja va
int numero = 4;
Los parám et ros se inicializan con los valores de los argum ent os.
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
}
}
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:
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.
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.
Pa so de pa r á m e t r os
50
Fu nda m e nt os de pr ogr a m a ción e n Ja va
recibirVehiculoAlquilado (vehiculo1);
}
}
51
Cla se s y obj e t os
El va lor de r e t or n 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.
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.
52
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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
53
Cla se s y obj e t os
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.
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.
56
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
57
Cla se s y obj e t os
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.
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.
60
Fu nda m e nt os de pr ogr a m a ción e n Ja va
61
Ex t e n sión de cla se s
}
}
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.
alquiler1.getCliente().getNIF();
alquiler1.getVehiculo().getMatricula();
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());
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.
64
Fu nda m e nt os de pr ogr a m a ción e n Ja va
65
Ex t e n sión de cla se s
66
Fu nda m e nt os de pr ogr a m a ción e n Ja va
67
Ex t e n sión de cla se s
68
Fu nda m e nt os de pr ogr a m a ción e n Ja va
69
Ex t e n sión de cla se s
Polim or fism o
70
Fu nda m e nt os de pr ogr a m a ción e n Ja va
71
Ex t e n sión de cla se s
System.out.print("Vehículo : " +
miVehiculo.getAtributos());
72
Fu nda m e nt os de pr ogr a m a ción e n Ja va
System.out.print("Deportivo " +
miDeportivo.getAtributos());
System.out.print("Furgoneta " +
miFurgoneta.getAtributos());
73
Ex t e n sión de cla se s
System.out.print("Turismo : " +
miTurismo.getMatricula() + " " +
miTurismo.getMarca() + " " +
miTurismo.getModelo());
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.
74
Fu nda m e nt os de pr ogr a m a ción e n Ja va
75
Ex t e n sión de cla se s
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” .
76
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
77
Ex t e n sión de cla se s
78
5 . Am plia ción de cla se s
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().
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.
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.
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
82
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
package nombre-del-paquete;
package vehiculos;
Uso
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;
import java.util.Calendar;
diaHoy = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
mesHoy = Calendar.getInstance().get(Calendar.MONTH) + 1;
añoHoy = Calendar.getInstance().get(Calendar.YEAR);
N om br e s
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
package miEmpresa.vehiculos;
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.
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.
Boolean boolean
Charact er char
I nt eger int
Long long
Float float
Double double
85
Am plia ción de cla se s
Mét odo const ruct or que recibe una cadena de t ext o y la t raduce al t ipo
sim ple
Mét odo toString() que t ransform a el valor alm acenado en una cadena
La cla se M a t h
Para m ás inform ación sobre los m ét odos de la clase Math, consult e el API
de Java.
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
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().
Para m ás inform ación sobre los m ét odos de la clase String, consult e el API
de Java.
88
6 . Est r u ct u r a s de con t r ol
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.
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
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.
if (condicion) {
bloque-de-sentencias
}
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
if (calificacion == 10) {
System.out.println("Matrícula de Honor");
}
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.
if (condicion) {
bloque-de-sentencias-if
}
else {
bloque-de-sentencias-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.
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");
Calificación Descripción
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” .
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.
if (condicion-1) {
bloque-de-sentencias-condicion-1
} else if (condicion-2) {
bloque-de-sentencias-condicion-2
} else {
bloque-de-sentencias-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");
}
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.
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
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.
Calificación Descripción
96
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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! ");
}
}
}
97
Est r u ct u r a s de con t r ol
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
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;
}
}
}
99
Est r u ct u r a s de con t r ol
100
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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 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.
101
Est r u ct u r a s de con t r ol
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.
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.
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
inicialización;
while (condición) {
bloque-de-sentencias;
actualizacion;
}
while (condición) {
bloque-de-sentencias;
}
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.
104
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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)
while (i <= n) {
factorial = factorial * i;
i++;
}
}
}
105
Est r u ct u r a s de con t r ol
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
106
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
inicialización;
do {
bloque-de-sentencias;
actualizacion;
} while (condición);
107
Est r u ct u r a s de con t r ol
do {
bloque-de-sentencias;
} while (condición);
do {
factorial = factorial * i;
i++;
} while (i <= n);
}
}
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.
109
Est r u ct u r a s de con t r ol
}
}
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
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:
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.
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.
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.
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.
}
}
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.
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
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;
}
}
}
}
116
Fu nda m e nt os de pr ogr a m a ción e n Ja va
do {
numero = (int) (100 * Math.random());
System.out.println("Número aleatorio: " + numero);
if (numero == 25)
break;
}
}
117
Est r u ct u r a s de con t r ol
}
}
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.
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.
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.
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.
120
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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
notas[0] es 4
notas[1] es 9
notas[2] es 7
notas[3] es 5
notas[4] es 10
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.
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.
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:
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.
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
Lunes
Martes
Miércoles
Jueves
Viernes
125
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 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” .
126
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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:
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.
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.
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
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:
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;
129
Est r u ct u r a s de a lm a ce n a m ie n t o
System.out.println("");
}
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.
131
Est r u ct u r a s de a lm a ce n a m ie n t o
132
Fu nda m e nt os de pr ogr a m a ción e n Ja va
133
Est r u ct u r a s de a lm a ce n a m ie n t o
134
Fu nda m e nt os de pr ogr a m a ción e n Ja va
return null;
}
135
Est r u ct u r a s de a lm a ce n a m ie n t o
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres[this.totalAlquileres]=
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias);
this.totalAlquileres++;
}
}
136
Fu nda m e nt os de pr ogr a m a ción e n Ja va
if (vehiculo != null)
vehiculo.setDisponible(true);
}
137
Est r u ct u r a s de a lm a ce n a m ie n t o
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan","González López"));
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” .
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
138
Fu nda m e nt os de pr ogr a m a ción e n Ja va
139
Est r u ct u r a s de a lm a ce n a m ie n t o
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
}
}
140
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
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.
143
Est r u ct u r a s de a lm a ce n a m ie n t o
int mitad;
int limiteInferior = 0;
int limiteSuperior = numeros.length - 1;
int numeroBusqueda = 68;
boolean encontrado = false;
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 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.
int 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
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.
146
Fu nda m e nt os de pr ogr a m a ción e n Ja va
147
Est r u ct u r a s de a lm a ce n a m ie n t o
148
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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
150
Fu nda m e nt os de pr ogr a m a ción e n Ja va
Arrays.sort(numerosOrdenados);
151
Est r u ct u r a s de a lm a ce n a m ie n t o
5
4
6
7
5
6
4
8
7
10
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
Vehiculo v = (Vehiculo)vehiculos.get(0);
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’.
153
Est r u ct u r a s de a lm a ce n a m ie n t o
154
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;
import java.util.ArrayList;
import java.util.List;
System.out.println("Vehiculos");
155
Est r u ct u r a s de a lm a ce n a m ie n t o
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
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;
157
Est r u ct u r a s de a lm a ce n a m ie n t o
158
Fu nda m e nt os de pr ogr a m a ción e n Ja va
return null;
}
159
Est r u ct u r a s de a lm a ce n a m ie n t o
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres.add(
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias));
}
}
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
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
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” .
easydrive.imprimirClientes();
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;
163
Est r u ct u r a s de a lm a ce n a m ie n t o
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));
easydrive.imprimirClientes();
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
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 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.
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.
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.
167
En t r a da y sa lida
import java.util.Scanner;
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.
168
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
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.
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,
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.
if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
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;
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
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.
174
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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();
} 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);
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());
};
176
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
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;
};
177
En t r a da y sa lida
import java.io.*;
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();
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
- Rest a
* Product o
/ División
% Módulo o rest o
179
Ope r a dor e s de l le n gua j e Ja va
++ 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
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
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
= I gual not a = 10
181
Ope r a dor e s de l le n gua j e Ja va
Operador Descripción
+ - Sum a, rest a
< > <= >= Menor, m ayor, m enor o igual, m ayor igual
= = != I gual, diferent e
|| Operador lógico OR
182
B. Re fe r e n cia s
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
Ja va
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
La cla se Ar r a yList
La cla se File
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
184
C. Glosa r io
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.
186
Fu nda m e nt os de pr ogr a m a ción e n Ja va
187
Glosa r io
188
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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.
189
Glosa r io
190
Fu nda m e nt os de pr ogr a m a ción e n Ja va
191
Glosa r io
192
Fu nda m e nt os de pr ogr a m a ción e n Ja va
193
Glosa r io
194
Fu nda m e nt os de pr ogr a m a ción e n Ja va
195
Glosa r io
196
Fu nda m e nt os de pr ogr a m a ción e n Ja va
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
199
Glosa r io
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