G) B® @®
ii Fs
___ ~Fundamentos de
7
Tercera ediciénResumen del contenido
1 Fundamentos de Java
Introduccién a los tipos de datos y los operadores
Instrucciones de control del programa
Introduccién a clases, objetos y métodos
Mis tipos de datos y operadores
2
3
4
5
6 Unanilisis detallado de métodos y clases.
7 Herencia
8 Paquetes e interfaces
9 Manejo de excepciones
°
10 Uso de B/S
11 Programacién con varios subprocesos.
12 Enumeraciones, autoencuadre e importacién de miembros estiticos
13 Elementos genéricos
14 Applets, eventos y temas diversos.
35
n
115
151
201
251
301
- 333
365
407
447
- 481
525viii
Fundamentos de Java
A. Respuestas a las comprobaciones de dominio
B Uso de comentarios de documentacién de Java
indice
$87
603
613,1 Fundamentos de Java ......+
Los origenes de Java :
Como se relaciona Java con C y CH}
(Cémo se relaciona Java con Cit
La conteibucién de Java a Internet.
Los applets de tava.
Seguridad
Portabilidad :
La magia de Java: el eédigo de bytes
Terminologia de Java.
Programacién orientada a objetos
Eneapsulamiento
Polimorfismo
Herencia
Obiencidn del kit de desarrollo de Java
Un primer programa de ejemplo
Ingreso del programa
Compilacién del programa...
E} ptimer programa de ejemplo, linea porx
Fundamentos de Java
Manejo de errores de sintaxis, 7
Un segundo programa simple . . . ceeees ce lT
Otro tipo de datos 20
Proyecto 1-1 Conversion de galones a litros 2
Dos instruceiones de control 2B
La instrucei6n if, 2B
El bucle for 25
Cree bloques de cédigo 27
Punto y coma y posicionamiento. 29
Précticas de sangrado. ° 29
Proyecto 1-2 Mejoramiento del convertidor de galones en litros. 30
Las palabras clave de Java. 32
Identificadores en Java. 32
Las bibliotecas de clases de Java. 33
Comprobacién de dominio del médulo 1 34
2 Introduccién a los tipos de datos y operadores
4Por qué los tipos de datos son importantes?
Tipos primitivos de Java
Enteros
Tipos de punto otante
Caracteres
El tipo boolean
Proyecto 2.1 ,A qué distancia esta un trueno?
Literales.
Constantes hexadecimales y octales
Secuencias de escape de caracteres,
Literales de cadena.
Una revisién detallada de las variables
Inicializacién de una variable.
Inicializacion dinémica,
El alcance y la vida de las variables... : : 49
Operadores. : : 2 52
Operadores aritméticos : . 52
Incremento y decremento. . 34
Operadores relacionales y légicos : : cette teeeee eres SS
Operadores lgicos de cortocircuito. : 31
E] operador de asignacién cette : 58
Asignaciones de método abreviado...... cee 60
Conversién de tipos en asignaciones. . . cee . cee ve 61
Moldeado de tipos incompatibles ...... cece 2
Precedencia de operadores. ...... : 64
Proyecto 2.2 Despliegue una tabla de verdad pata los operadores ldgicos 65Contenido
Expresiones 66
Conversién de tipos en expresiones 66
Espaciado y paréntesis
Comprobacién de dominio del médulo 2
Instrucciones de control del programa.
Entrada de caracteres desde el teclado
La instruccién if,
Ifanidados
La escalera if-else-if
La instruccién switch.
Instrucciones switch anidadas .
-¢ a construir un sistema de ayuda de Java 83
Proyecto 3.1 Empi
El bucle for 86
‘Algunas variaciones del bucle for . : 87
Piezas faltantes . 88
El bucle infinito 90
Bucles sin cuerpo 90
Declaracin de las variables de control del bucle dentro del bucle for. - a a1
El bucle for mejorado. 2
El bucle while 2
El bucle do-while 94
Proyecto 3.2 Mejore el sistema de ayuda de Java 7
Uso de break para salir de un bucle 100
Use break como una forma de goto 102
Uso de continue 106
Proyecto 3.3 Termine el sistema de ayuds de Fava 109
Bucles anidados. : 112
Comprobacién de dominio del médulo 3 . 113
Introduccién a clases, objetos y métodos . 1s
Fundamentos de las clases... 116
La forma general de una clase 116
Definicién de una clase... . . 7
Cémo se crean los objetos 121
Variables de referencia y asignacién 21
Métodos 122
‘Adicién de un método ala clase Automotor 123,
Regreso de un método 125
Devolucién de un valor 126
Uso de parémetros 129
Adicién de un método con parimetros 2 un automotor 130
Proyecto 4.1 Creacién de una clase Ayuda 133
Constructores, feces 139
Constructores con parimetros 140
‘icin de un constructor a la clase Automotor 141
xixii
5 Mas tipos de datos y operadores........
Fundamentos de Java
‘Nueva visita al operador new
Recoleccién de basura y finalizadores.
E] método finalize()
Proyecto 4,2 Demostracién de la finalizacién
La palabra clave this
Comprobacin de dominio del médulo 4
Matrices :
Matrices de una dimensién.
Proyeeto $.1 Ordenamiento de una matriz
Matric
Matrices de dos dimensiones
Matrices imegulares,
Matrices de tres 0 mas dimensiones
s de varias dimensiones.
Inicializacién de matrices de varias dimensiones.
Sintaxis alterna de dectaracién de matrices. .
Asignacién de referencias a matrices
Uso del miemibro lenght
Proyecto 5.2 Una clase Cola
El bucle for de estilo for-each
Iteracién en matsices de varias dimensiones,
Aplicacién del for mejorado.
Cadenas
Construccién de cadenas
Operaciones con cadenas
Matrices de cadenas
Las cadenas son inmutables
Uso de argumentos de linea de comandos.
Los operadores de bitwise
Los operadores Y, O, XO y NO de bitwise
Los operadores de desplazamiento,
Asignaciones de método abreviado de bitwise.
Proyecto 5.3 Una clase MostrarBits
El operador ?
Comprobacién de dominio del médulo 5
Un anilisis detallado de métodos y clases.
Control de acceso a miembros de clases.
Especificadores de acceso de Java
Proyecto 6.1 Mejoramiento de la clase Cola
Paso de objetos
Cémo se pasan los argumentos.
Regreso de objetos .
métodos
142
443
144
145
147
149
151
152
152
156
158.
158
160
161
161
163
164
165
168
In
115
7
178
178
179
Ist
182,
183
185
186
191
193
193
196
198
-201
202
202
208
209
2u
214Contenido
Sobrecarga de métodos 216
Sobrecarga de constructores : 2m
Proyecto 6.2 Sobrecarga del constructor Cola 225
Recursion. 228
Comprension de static 230
Blogues static 233
Proyecto 6.3 El ordenamiento ripido 235
Introduccidn a clases anidadas e internas 238
Varargs: arguments de longitud variable 242
Fundamentos de varar 242
Sobrecarga de métodos varargs 246
Varotgs y ambigtedad 247
‘Comprobacién de dominio del médulo 6 249
Herencia. . . : 251
Fundamentos de Ja herencia 252
Acceso a miembros y herencia 255
Constructores y herencia 258
Uso de siiper para Ilamnar a constructores de una siperclase 260
Uso de super para accesar a miembros de una superclase. 266
Proyecto 7.1 Exiensién de la clase Automotor 267
Creacion de una jerarquia de varios niveles . 270
¢Cuindo se llama a los constructores? 23
Referencias a siiperclases y objetos de subclases 274
Sobreseritura de métodos. 280
Los métodos sobrescritos soportan polimorfismo 283
{Por queé los métodos se sobrescriben? 285
Aplicacién de la sobrescritura de métodos a FormaDosD 285
Uso de clases abstractas. 290
Uso de final 295
Final evita la sobreseritura 295
Final evita la herencia 295
Uso de final con miembros de datos. 296
La clase Object : 298
Comprobacién de dominio del médulo 7 299
Paquetes e interfaces .....++ seer +304
Paquetes: 302
Definicin de un paquete 302
Buisqueda de paquetes y CLASSPATH, 304
Un ejemplo corto de paquete 304
Acceso a paquets y miembros 306
Un ejemplo de acceso a paquete. 307
Los miembros protegidos 309
Importacién de paquetes 31
xixiv Fundamentos de Java
Las bibliotecas de clases de Java se encuentran en paquetes .... 314
Interfaces 315
Implementacién de interfaces 316
Uso de referencias a interfaces 320
Proyecto 8.1 Creacién de una interfaz de cola 322
Variables en interface: 328
Las interfaces pueden extenderse 329
Comprobacién de dominio det médulo 8 330
9 Manejo de excepciones........ sees +5533
La jerarquia de excepciones . : 334
Fundamentos del mangjo de excepeiones 334
Uso de try y catch 335
Un ejemplo simple de excepcién : 336
Las consecuencias de una excepcin no capturada......... 339
Las excepciones le permiten manejar con elegancia los errores cee 340
‘Uso de varias instrucciones catch : 342
Captura de excepciones de subclases : 343
Es posible anidar bloques try. : 344
Lanzamiento de una excepeién : 346
Relanzamiento de una excepeién 346
Analisis detallado de Throwable 348
Uso de finally 350
Uso de throws : 382
Las excepciones integradas de Java. cee 354
Creacién de subclases de excepciones. . 356
Proyecto 9.1 Adicién de excepciones a la clase Cola : 359
Comprobacién de dominio del médulo 9 362
10 Uso de B/S .......+- ceseeeeees tteseeeeees coer 365
La B/S de Java esta construida sobre fiujos 366
Flujos de bytes y de caracteres cee 366
Las clases de flujos de bytes 367
Las clases de flujo de caracteres . 367
Los flujos predefinidos 367
Uso de los flujos de bytes . 370
Lectura de la entrada de la consola 370
Escritura de salida en la consola. . 372
Lectura y escritura de archivo empleando flujes de byte coe 373
Obtencién de entrada de un archivo. cee 374
Escritura en un archivo, . 376
Lectura y escritura de datos binarios 378
Proyecto 10.1 Una utileria de comparacién de archivos : 382
Archivos de acceso directo . 3841
12
Uso de los flujos de caracteres de Java
Entrada de consola empleando flujos de caracteres,
lida de consola empleando flujos de caracteres
EIS de archivo empleando flujos de caracteres
Uso de File Writer
Uso de FileReader
Uso de los envolventes de tipo de Java para convertir cadenas numéricas,
Proyecto 10.2 Creacién de un sistema de ayuda en disco
Comprobacién de dominio del médulo 10
Programacién con varios subprocesos . «
Fundamentos de los subprocesos miltipts.
La clase Thread y la interfaz Runnable
Creacién de un subproceso
‘Algunas mejoras simples
Proyecto 11.1 Extensién de Thread
Creacién de subprocesos miiltiples
Cémo determinar cusindo termina un suaproceso
Prioridades en subprocesos
Sincronizacién
Uso de métodos sineronizados
La instruccién synchronized
Comiiicacién ene subprocesos empleando notty(), wait() ynotifyANNO
Un ejemplo que utiliza waitt) y notify().
Suspensién, reanudacién y detencidn de subprocesos.
Proyecto 11.2 Uso del subproceso principal
Comprobacién de dominio del médulo 11
Enumeraciones, autoencuadre e importacién de ntiembros estiticos ..
Enumeraciones,
Fundamentos de las enumeraciones...
Las enumeraciones de Java son tipos de clases
Los métodos values() y valueOft) .
Constructores, métodos, variables de instancia y enumeraciones
Dos restricciones importantes
Las enumeraciones beredan Enum
Proyecto 12.1 Un semaforo controlado por computadora
Autoencuadte.
Envolventes de tipo
Fundamentos del autoencuadre
Autoencuadre y métodos
El autoencuadre/desencuadre ocurre en expresiones,
Una palabra de advertencia
Importacién de miembros estiticos
Contenido
387
388
391
393
393
394
396
399
406
407
408
409
410
43
41s
418
421
424
428
428
431
434
435
440
444
» 446
2447
448,
449,
452
452
454
456
456
458
464
465
467
468
470
ani
472
xvxvi
13
14
Fundamentos de Java
Metadatos,
Comprobacién de dominio del médulo 12
Elementos genéricos .
Fundamentos de los elementos genéricos
Un ejemplo simple de elementos genéricos
Los elementos genéricos s6lo funcionan con objetos
Los tipos genéricos difieren con base en sus argumentos de tipo
Una clase genérica con dos parémetros de tipo
La forma general de una clase genérica
Tipos limitados
Uso de argumentos comodin
Comodines limitados
Métodos genéricos
Constructores genéricos.
Interfaces genéricas
Proyecto 13.1 Cree una cola genética,
Tipos brutos y eédigo heredado.
Borrado
Errores de ambigiiedad
‘Algunas restricciones genéricas,
No pueden crearse inslancias de pardmettos de tipo
Restticciones en miembros estiticos
Restricciones genéricas de matriz.
Restriccién de excepciones genéricas
Continuacién del estudio de tos elementos genéricos,
Comprobacién de dominio del médulo 13
Applets, eventos y temas diversos
Fundamentos de los applets
Organizacién del applet y elementos esenciales
La arquitectura del applet
Esqueleto completo de un applet
Inicializacién y terminacién de applets
Solicitud de repintado
E] método update)
Proyecto 14.1 Un applet simple de leteero
Uso de fa ventana de estado
Paso de parimetros a applets.
Laclase Applet
Manejo de eventos
El modelo de evento de delegacién.
Eventos
Origenes de eventos
476
479
= 481
482
483
487
487
488
490
490
494
498
501
504
505
508.
S13
516
57
519
519
520
520
522
522
522
= 525
526
530
530
531
532
533
534
535
939
540
542
544
544
544
545Contenido xvii
Bscuchas de eventos 545
Clases de eventos : 545
Interfaces de escuchas de eventos : 546
Uso del modelo de evento de delegacién 548
Manejo de eventos del raton, sevens 548
Un applet simple de evento de ratén . . 549
Mis palabras clave de Java . 552
‘Los modificadores transient y volatile : 552
instanceof. 553
strictfp, : 553
assert o 553
Métodos nativos.. : 554
{Qué sucede a continuacién?, 555
Comprobacién de dominio del médulo 14 536
A. Respuestas a las comprobaciones de dominio . +857
Uso de comentarios de documentacién de Java. serene 603
Las etiquetas de javadoc : - 604
@author 605
{@code}... 60s
@deprecated. . 60S
{@docRoot} : : 606
@exception.. .. . . 606
{@inheritDoc} 606
{@link} .. . ceo 606
{@linkplain} 606
(@literal} 606
@param . cece tees = 607
@retum, vee : 607
@see cece 607
@serial . . : 607
@serialData 608
@serialFicld : 608
@since : 608
@throws...... : 608
{@value} 608
@version. : 609
La forma general de un comentario de documentaciOn.......60ceecveeeecseee = 609
{GA qué da salida javadoc? . bee 609
Un ejemplo que usa comentarios de documentacién. : 610
dice sete 613Prefacio
Jn: el lenguaje més importante de Internet. Més aiin, es el lenguaje universal de los
programadores Web en todo el mundo, Para ser un desarrollador Web profesional es necesario
ddominar Java, Por lo tanto, si su futuro se encuentra en ia programacién en Internet, ha clegido el
fenguaje correcto; y ese libro le ayudard a aprenderlo,
El objetivo es ensefarle los fundamentos de la programacién en Java. En est libro encontrar
tin método que se desarrolla paso a paso, junto con numerosos ejemplos, pruebas de autocvaluacién
¥ proyectos. Debido a que se parte de la premisa de que usted mo cusnta con experiencia previa en
programacién, ef libro inicia con los fundamentos, €s decir, con la manera, por ejemplo, de compilar y
cjecutar un programa en Java. Luego se analiza cada palabra clave en este lenguaje y se coneluye con
algunas de ls caracteristicas mis avanzadas de Java, como la programacidn con varios subprocesos,
las opciones genéricas y los applets. Hacia el final de libro, usted tendré un fine conocimiento de los
elementos esenciales dela programacién en Java
Es importante establecer desde el principio que este libro sélo representa un punto de partida
Java va mis alld de los elementos que definen el Lenguaje pues incluye también amplias bibliotecas
y herramientas que ayudan al desarrollo de programas. Mas ain, Java proporciona un conjunto
Sofisticado de bibliotecas que manejan (a interfaz de usuario del explorador. Para ser un programador
profesional en Java. se require también el dominio de estas éreas. Al finalizar este libro, usted tendré
los conocimientos para dar seguimiento a cualquier otro aspecto de Java,
xixXK
Fundamentos de lava
La evolucién de Java
Solo unos cuantos Jenguajes han cambiado de manera importante la esencia de la programacién. En
este selecto grupo, uno de ellos se destaca debido a que st impacto fue rapido y de gran alcance. Este
lenguaje es, por supuesto, Java, No resulta exagerado afirmar que el lanzamiento original de Java
1.0 en 1995 por parte de Sun Microsystems caus6 una revolucién en ta programacién que trasforms
dde manera radical Web y lo convirtié en un entorno enotmemente interactivo. En el proceso, Java
establecio un nuevo estandar en el disefio de lenguajes para computadoras.
Con los afios, lava sigui creciendo, evolucionando y redefinigndose en distintas formas. A
diferencia de muchos otros lenguajes que se muestraa lentos para incorporar nuevas caracteristicas,
Java ha estado de manera continua al frente del diserto de Lenguaje pare computadoras, Una razén
de ello es la cultura de innovacién y cambio que lo ha rodeado. Como resultado, este lenguaje
recorrido varias actualizaciones (algunas relativamente pequeiias y otras de mayor importancia),
La primera actualizacién importante de Java fue la version 1.1. Las funciones agregadas en Java
1.1 fueron mas sustanciales de lo que se pensaria a partir del pequefio aumento en el numero de
versi6n. Por ejemplo, Java 1.1 agregé muchos elementos nuevos de biblioteca, redefinié la manera
en que se manejaban los eventos y reconfiguré muchas caracteristcas de ta bibliateca original de la
versién 1.0.
La siguiente versidn importante de Java fue Java 2, donde el 2 indicaba “segunda generacién”
La ereacisn de Java 2 constituy un parteaguas y marcé et inicio de la “era moderna” de Java. La
primera versién de Java 2 Nevo el nimero de version 1.2, Resulta extrafio que la primera versién
de Java 2 utilizara el niimero de version 1.2. El nimero aludia originalmente a la version interna
de las bibliotecas de Java, pero luego se generalizé para aludir a toda la versién, Con Sava 2, Sun
reempaguetd el producto Java como J2SE (Java 2 Platform Standard Edition) y el miimero de versién
empez6 a aplicarse a ese producto,
La siguiente actualizacion de Java fue 2
importante de la versién original de Java 2, pues, en su mayor parte, contenia adiciones a las Funciones,
existentes y le “apreté las tuercas” al entomo de desarrollo, La versin de J2SE 1.4 mejoré Java ain
is, Fsta version contena nuevas e importantes funciones, incluidas las excepciones encadenadas, la
E/S de canal y la palabra clave assert.
La iltima version de Java es la J2SE 5. Aunque cada uns de las actualizaciones anteriores de Java
ha sido importante, ninguna se compara en escala, tamafio y aleance con la J2SE 5. jEsta ha cambiado
cde manera fundamental el mundo de Java!
1.3. Esta versién de Java fue la primera actualizaciénPrefacio xxi
J2SE 5: la segunda revolucién de Java
Java 2 Pitform Standard Edition version 5 (J2SE 5) marca el inicio de la segunda revolucién de Sava
JOSE 5 agrega muchas funciones nuevas a Java que cambian de manera fundamental el carécter del
lenguaje aumentando su capacidad y su aleance. Estas adiciones son tan profundas que modificarén
para siempre la manera en que se escribe el cédigo de Java, No se puede pasar por alto la fuerza
revolucionaria de J2SE 5. Para darle una idea del alcance de los cambios originados por J2SE 5, be
aqui una lista de las nuevas caracteristicas importantes que se cubren en este libro.
+ Elementos genéricos
+ Autoencuadre/desencuadre
+ Enumeraciones
+ El bucle mejorado for del estilo “for-each”
+ Argumentos de longitud variable (varargs)
+ Importacién estitica
+ Metadatos (anotaciones)
No se trata de una lista de cambios menores o actualizaciones incrementales. Cada element de la
lista representa una adicién importante al lenguaje Java. Algunos, como los elementos genéricos, e4
for mejorado y los varargs introducen nuevos elementos de sintaxis. Otros, como el auitoencuadre
y el autodesencuadre, modifican la semantica del lenguaje. Los metadatos agregan una dimension
completamente nueva a la programacién, En todos los casos, se han agregado funciones nuevas y
sustanciales
La importancia de estas nuevas funciones se refieja en el uso de la versién ntimero 5,
Normalmente, el niimero de version siguiente para Java habria sido 1.5; sin embargo, los cambios y
Jas nuevas funciones resultan tan importantes que un cambio de 1.4 a 1.5 no expresaria la magnitud
de éste. En lugar de ello, Sun decidié Hlevar el nimero de version a 5, como wna manera de destacar
que un evento importante se estaba gencrando. Asi, el producto actual es el denominado J2SE 5 y el
kit para el desarrollador es el JDK 5. Sin embargo, con el fin de mantener la consistencia, Sun decidid
usar 1.5 como miimero interno de la versién. De ahi que 5 sea el niimero externo de la versién y 1.5
sea el interno,xxii
Fundamentos de Java
Debido a que Sun usa el 1.5 como niimero intemo de Ia versién, cuando le pida al compilador su
versién, éste responderd con 1.5 en lugar de 5. Ademis, la documentacién en linea proporcionada por
Sun utiliza 1.5 para aludir a las funciones agregadas en el J2SE 5. En general, cada vez que vea 1.5,
simplemente significa 5,
Se ha actualizado por completo este libro a fin de que incluya las nuevas funciones agregadas en
JOSE 5. Para manejar todos los nuevos materiales, se agregaron dos médulos completamente nuevos
‘esta edicién, En el médulo 12 se analizan las enumeraciones, el autoencuadre, ta importacién
estitica y los metadatos, mientras que en el médulo 13 se examinan los elementos genéricos. Las
descripciones del bucle for del estilo “for-each”
Jos médulos existentes.
los argumentos de longitud variable se integraron en
Cémo esté organizado este libro
En este libro se presenta un tutorial en el que los avances se producen a un ritmo constante y en el
que cada seccién parte de lo aprendido en la anterior. Contiene 14 médulos, y en cada uno de ellos
se analiza un aspecto de Java, Este libro es jinico porque incluye varios elementos especiales que
refuerzan lo que usted ha aprendido.
Habilidades fundamentales
Cada médulo empieza con un conjunto de las habilidades fundamentales que usted aprendera y se
indica, ademas, la ubicacion de cada habilidad
Revision de habilidades dominadas
‘Cada médulo concluye con una revisién del dominio de las habilidades, es decir, con una prueba de
autoevaluacién que le permite probat sus conocimientos. Las respuestas se presentan en el apéndice A.
Revision de los avances
Al final de cada seecion importante, se presenta una revisién de los avances mediante la cual probara
su comprensién de los puntos clave de la seccién anterior. Las respuestas a estas preguntas se
encuentran en la parte inferior de la pagina
Pregunte al experto
Dias porto io se eeuentanrecaios expec de Preguntalexent
contienen informacién adieional o comentarios importantes acerca de ur tema, y emplean un formato
deren y esp
EstosPrefaclo xxiii
Proyectos
Cada médulo contiene uno o mas proyectos que le muestran cémo aplicar lo aprendido. Se trata de
ejemplos realistas que podré usar como puntos de partida para sus propios programas.
No se necesita experiencia previa en programacién
En este Iibro no se parte de la premisa de que usted cuenta con experiencia previa en programacién.
Por lo tanto, podra consultar este libro aunque nunca antes haya programado, Sin embargo, si cuenta
con cierta experiencia en programacién, avanzara un poco mis rapido. Asimismo, tenga en cuenta
que Java es diferente, en varios sentidos, a otros lenguajes populares de programacién, asi que es
importante que no vaya directamente a las conclusiones. Por consiguiente se le aconseja, aun a los,
programadores experimentados, una lectura cuidadosa.
Software necesario
Para ejecutar y compilar los programas de este libro, necesitard la versién mas reciente del kit
de desarrollo de Java (Java Development Kit, JDK) de Sun que, al momento de la publicacion
del presente libro, era Java 2 Platform Standard Edition, versién 5 (J2SE 5). En el médulo I se
proporcionan las instrucciones para obtenerlo,
Siesté usando una version anterior de Java, como J2SE 1.4, podré usar aii este libro, pero no
podré compilar y ejecutar los programas que usan las nuevas funciones agregadas en J2SE 5,
No lo olvide: el cédigo esti en Web
Recuerde, el cddigo fuente de todos los ejemplos y proyectos de este libro estan disponibles, sin costo,
|-edueacion.com.
en el sitio Web www.megraw-txxiv
Fundamentos de Javo
Para conocer aun mds
Fundamentos de Java es su puerta a la serie de libros de programacién de Herb Schildt. He aqui
algunos otros libros que podrian resultarle de interés.
Para aprender més acerca de la programacién en Java, recomendamos los siguientes titulos:
+ Java: The Complete Reference, J2SE $ Edition
+ The Art of Java
Para aprender acerca de C++, estos libros le resultardn especialmente tiles:
+ Cts The Complete Reference
+ Teach Yourself C+
+ C++ from the Ground Up
+ STL Programming from the Ground Up
+ The Art of C++
Para aprender acerca de Ci, sugerimos:
+ Ch: A Beginner's Guide
+ CH: The Complete Reference
Si quiere aprender més acerca del lenguaje C, entonces los siguientes titulos le interesaran’
+ C: The Complete Reference
+ Teach Yourself C
Cuando necesite de respuestas sélidas, consulte a Herbert Schildt,
Ia autoridad més reconocida en programacién.Modulo 1
Fundamentos de Java
TTT SS
Wd
1.2
1.3
1.4
1.5
1.6
1.7
18
19
1.10
111
1.12
Conozca la historia y filosofia de Java
Comprenda la contribucién de Java a Internet
Comprenda la importancia del cédigo de bytes
Conozca la terminologia de Java
Comprenda los principios fundamentales de la programacién orientada a objetos
Cree, compile y ejecute un programa simple de Java
Use variables
Use las instrucciones de control if y for
Cree bloques de eédigo
Comprenda la manera en la que se posicionan, sangran y terminan las
Instrucciones
Conozca las palabras clave de Jova
Comprenda las reglas para los identificadores de JavaSdulo 1: Fundamentos de Java
E | erecimiento de Internet y World Wide Web cambiaron de manera fundamental fa forma de la
computacién. En el pasado el ciber paisaje estaba dominado por las PC independientes y aisladas.
Hoy dia, casi todas las PC estin conectadas con Internet que, por si mismo, se ha transformado pues
al principio ofrecia una manera conveniente de compartir archivos ¢ informacion y en la actualidad
se ha convertido en un universo computacional enorme y distribuido. Con estos cambios, una nueva
‘manera de programar surgi: Java
Java es mas que un lenguaje importante de Internet: revolucioné la programacién cambiando
la manera en Ja que pensamos acerca de la forma y la funcién de un programa. Hoy dia, para ser un
programador profesional se requiere la capacidad de programar en Java: asi de importante es, A medida
que avance en la lectura de este libro, aprenderd las habilidades necesarias para dominarlo,
El objetivo de este médulo es proporcionar una introduccién a Java, inctuyendo su historia, su
diseio, su filosofia y varias de sus caracteristicas mas importantes. Por mucho, lo més dificil acerca del
aprendizaje de un lenguaje de programacién es el hecho de que no existen elementos aislados, sino que
Jos componentes del lenguaje funcionan de manera conjunta. Esta interrelacién resulta especialmente
significativa en Java, En realidad, es dificil analizar un aspecto de Java sin incluir o'ros aspectos. Para
ayudar a superar este problema, en este médulo se proporciona una breve presentacion general de las
Funciones de Java como, por ejemplo, la forma general de un programa, algunas estructuras bésicas de
control y los operadores. Aunque no se profundizaré mucho, enfatizarén los conceptos generales que le
son comunes a cualquier programa de Java
tuna
Fut
HEB] Los origenes de Java
La innovacién en los lenguajes computacionales est
determinada por dos factores: mejoras en el arte de la
programacién y cambios en el entomo del cémputo. Java no es la excepcién, Aprovechando la rica herencia
de Cy C+, Java oftece un mayor refinamiento y funciones que reflejan el estado actual del arte de la
programacién. Respondiendo al surgimiento del entomo en linea, Java ofrece funciones que moderizan la
programacion con el fin de desarrollar una arquitectura altamente distrbuida,
James Gosling, Patrick Naughton, Chris Warth, Ed Frank y Mike Sheridan concibieron Java en
Sun Microsystems en 1991. A este lenguaje se le lam inicialmente “Oak” peto se le renombré “Java”
cen 1995, Sorpresivamente, jInternet no fue el objetivo original de Java! La motivacién principal,
cen cambio, fue la necesidad de un lenguaje que fuer independiente de la plataforma y que pudiera
cemplearse para crear un software que estuviera incrustado en varios dispositivos electrénicos para
uso del consumidor, como tostadoras, hornos de microondas y controles remotos. Como usted ya
probablemente adiviné, se usan muchos tipos diferentes de CPU como controladores. El problema
es que la mayor parte de Jos lenguajes de cémputo estan diseiados para compilarse con un destino
especifico, Pensemos, por ejemplo, en C+
Aunque es posible compilar una pagina de C+ para cualquier tipo de CPU, para ello se
requiere un compilador completo de C+ orientado a ese CPU. Sin embargo, el problema es que los
compiladores son caros y su creacién requiere mucho tiempo. En el intento de encontrar una mejor
solucin, Gosling y sus demas compafieros trabajaron en un lenguaje portable, de plataforma cruzada
que pudiera producir un eédigo que se ejecutara en diversos CPU bajo entornos diferentes. Este
esfuerzo culminé en la ereacion de Java,ndamentos de Java
Por la época en la que se trabajaba en los detales de Java, surgié un segundo factor que resulté més
importante y que desempefiaria un papel crucial en el futuro de Java. Por supuesto, esta segunda fuerza
fue World Wide Web, En el caso de que Web no hubiera tomado forma casi al mismo tiempo en que se dio
Ja implementacién de Java, ést ditinno habria conservado su uilidad pero se habria mantenido como un
Tenguaje oscuro para la programacién de los aparatos electrénico antes meneionados. Sin embargo, con el
surgimiento de Web, Java fue impulsado al primer plano det disefio de lenguajes de cémputo, debido a que
Web exigia tambien programas portables.
La mayoria de los programtadores aprenden al principio de su carrera que los programas
portables son fai evasivos como deseables. Mientras que el desafio de hallar una manera de crear
programas eficientes y portables (independientes de la plataforma) es casi tan antiguo como Ia propia
disciplina de la programacién, dicho desafio habia pasado a un segundo plano en relacién con otros
problemas mas relevantes. Sin embargo, con el surgimiento de Internet y Web, el viejo problema de la
portabilidad volvi6 para tomar revancks. Después de todo, Internet es un universo diverso, distribuido
¥y poblado con muchos tipos de computadoras, sistemas operativos y CPU,
Hacia 1993 resulté obvio para los miembros del equipo de disefo de Java que los problemas de
portabilidad que comiinmente surgen cuando se erea un cédigo para controladores incrustados, surgen
también al momento de tratar de ctear un eédigo para Internet. Este descubrimiento logré que el centro
de atencién de Java cambiara de los aparatos electrSnicos para el consumidor ala programacién para
Internet, De este modo, aunque e deseo de desarrollar un lenguaje de programacién de arquitectura
neutral constituyé le chispa inicial, Internet Fue el que finalmente condujo al éxito de Java a gran escala
Cémo se relaciona Java con C y C++
Java esta relacionado directamente con Cy C++. Hereda su sintaxis de C y su modelo de objeto esti
adaptado a partir de C++, La relacién de Java con C y C+ es importante por varias razones. En
primer lugar, muchos programadores estan familiarizados con la sintaxis de C, C++, o ambus. Este
hecho le facilita a un programador de C 0 C++ aprender Java y, de igual manera, a un programador de
Java aprender C 0 C++.
En segundo lugar, los disefiadores de Java no “reinventaron Ia rueda”, sino que refinaron alin mas
‘un paradigma de programacién que habia tenido mucho éxito. La época moderna de la programacién
‘empez6 con C. Cambis a C++ y ahora a Java. Al heredar y basarse en esa rica herencia, Java
proporciona un entomo de programacién poderoso y légicamente consistente que tome 0 mejor del
pasado y agrega nuevas funciones que el entomo en linea requiere. Tal vez io més importante sea
que, debido a sus similitudes, C, C+ y Java definen un macco de trabajo conceptual comiin para el
programador profesional. Los programadores ao enfrentan mayores fisuras cuando cambian de un
lenguaje a otro
Una de las fifosofias centrales de C y C+ en cuanto al diseito es que el programador es la
persona que tiene el control. Java hereda también dicha filosofia. Con excepeién de fas restricciones
impuestas por el entomo de Internet, Java le proporciona a usted, es decir, el programador, un control
total, Si usted programa bien, sus programas asi lo eflejaran. Si programa de manera deficiente, sus
programas igualmente lo reflejarin. En otras palabras, Java no es un lenguaje para aprender: €s un
lenguaje para programadares profesionsles,
3
de avs
ndamento:4 Médulo 1: Fundamentos de Java
Java cuenta con otro atributo en comiin con C y C++: fue disefiado, probado y afinado por
programadores reales y en activo. Es un lenguaje surgido de las necesidades y la experiencia de la
gente que lo concibi6, En este semtido, no existe una mejor manera de producir un lenguaje profesional
de altos vuelos.
Debido a las similitudes entre Java y C++, sobre todo en el soporte que brindan a la programacién
orientada a objetos, resulta tentador pensar en Java como la simple “versién de C++ para Internet”. Sin
embargo, ello seria un error pues Java tiene importantes diferencias pricticas y filoséficas, Aunque fue
influido por C+, no es una versién mejorads de éste (por ejemplo, no es compatible ni hacia arriba ni
hacia abajo con C++). Por supnesto, las similitudes con C++ son significativas; por lo tanto, si usted
5 un programader de C++, se sentité como en casa con Java. Otro punto: Java no fue disefiado para
reemplazar a C++: fue diseiado para resolver wn cierta conjunto de problemas, mientras que C++ fue
diseRado para resolver otro conjunto diferente. Ambos coexistirin durante muchos afies ms,
Cémo se relaciona Java con C#
Recientemente ha llegado a escena tin nuevo lenguaje llamado Ci, Creado por Microsoft para dar
soporte a su NET Framework, C# esti intimatnente relacionado con Java. En realidad, muchas de las
funciones de C# se adaptaron directamente de Java, Tanto Java como C# compasten una mista sintaxis
general semejante a C++, soporta la programacién distribuida y utilizan el mismo modelo de objeto. Por
supuesto, hay diferencias entre lava y CH, pero el aspecto y el manejo de estos lenguajes es muy similar.
Esto significa que si ya conoce C#, le serd especialmente facit aprender Java, De manera que si va a
utilizar C# en el futuro, entonces su conocimiento de Java le sed itil
Dada fa similitud entre Java y CH, parece natural preguntar, ";C# reemplazara a Java?” La
respuesta es No. Java ¥ Ci estan optimizados para des tipos diferentes de entomos de cémputo. Asi
como C++ y Java coexistitén por mucho tiempo, también lo hardin C# y Java,
Comprobacién de avance
1. Java es itil para Internet porque puede producir programas
2. De eniles lenguaies desciende directamente Java?Fundamentos de Java 5
HABILDAD 1
‘wou
BE! | contribucién de Java a Internet
Intemet ayude a eatapultar a Java al primer plano de la programacién, y Java, a su vez, ha tenido
un profundo efecto en Internet, La razén es muy simple: Java expande el universo de los objetos
que pueden desplazarse libremente por el ciberespacio. Fn una red hay dos categorias muy amplias
de objetos que se transmiten entre el servidor y sx computadora personal: informacién pasiva y
programas dinamicos y
pasivos. Aunque descargue un programa, el cédigo de éste sélo contendra datos pasivos hasta que lo
ejecute. Sin embargo, es posible transmitir a su computadora un segundo tipo de objeto: wn programa
dindmico, que se autoejecute. Este tipo de programa constituye un agente activo en la computadora
cliente, pero es iniciado por el servidor. Por ejemplo, el servidor podria proporcionar un programa para
desplegar apropiadamente los datos que esté enviando.
Aunque los programas en red son deseables y dindmicos, también presentan problemas serios en
las reas de seguridad y portabilidad. Antes de Java, el ciberespacio estaba totalmente cerrado para
Ja mitad de las entidades que ahora viven alli, Como vers, Java atiende estas preocupaciones y, al
hacerlo, ha definido una nueva forma de programa: el applet.
tivos. Por ejemplo, cuando lee su correo electrénico esté viendo datos
Los applets de Java
Un applet es un tipo especial de programa de Java que esti disefindo para transmitirse en Inter
que se ejecuta automaticamente en un explorador Web compatib.
descarga bajo dernanda, como cualquier imagen, archivo de sonido o clip de video. La diferencia mas
importante es que un applet es un programa inteligente, no s6lo una animacion o un archivo multimedia
y
‘on Java, Mas atin, un applet se
En otras palabras, un applet es un programa que puede reaccionar a las entradas del usuario y cambiar
dindmicamente (no s6lo ejecutar la animacién y el sonido una y otra vez).
Sibien los applets de Java son excitantes, slo serian ideas deseables si Java no atendiera dos
problemas fundamentales asociados con ellos: la seguridad y la portabilidad, Antes de seguir adelante,
definamos lo que estos dos términos significan en relacién con Intemet,
Seguridad
‘Como seguramente ya lo sabe, cada vez que descarga un programa “normal”, se pane en riesgo
de una infeccién por virus. Antes de Java, la mayoria de fos usuarios no descargaban programas
ejecutables con frecuencia y, quienes lo hacian, revisaban que éstos no tuvieran virus antes de
su gjecucton. Atin asi, la mayoria de los usuarios se preocupaban todavia por la posibilidad de la
n de sus sistemas con un virus 0 por permitir que programas malintencionados se ejecutaran
libremente en sus sistemas. (Un programa malintencionado puede recolectar informacién privada,
infos
como nimeros de tarjetas de crédito, saldos de cuentas bancarias y contrasefias al revisar el contenido
del sistema de archivos de su computadora.) Java responde a estas preocupaciones al proporcionar un
“firewall entre una aplicacién en red y su computadora,Médulo 1: Fundamentos de Java
Cuando asa un explorador Web compatible con Java, es posible descargar applets de Java de
‘manera segura, sin miedo a una infeecién por virus. La manera en la que Java lo logra es mediante la
confinacién de un programa de Java al entomo de ejecucién de Java y el impedimento que impone
de acceder a otras partes de la computadora, (En breve vera eémo se logra esto.) Francamente, la
spacidad de descargar applets con la confianza de que no dafiara la computadora cliente consttuye el
aspecto mis significativo de Java
Portabilidad
Como se analizé antes, muchos tipos de computadoras y sistemas operativos estén conectados con
Internet. Para que los programas se descarguen dinémicamente a todos los tipos distintos de plataformas,
se necesitan algunos medios para generar un cédigo ejecutable que sea portable. Como verd pronto,
el mismo mecanismo que aytida a establecer la seguridad también ayuda a crear la portabilidad. Por
supuesto, la solucidn de Java a estos dos problemas resulta refinada y eficiente.
suo
AND,
La magia de Java: el cédigo de bytes
La clave que permite a Java resolver los problemas de seguridad y portabilidad que se acaban de
deseribir es que la salida de un compilador de Java no es un cédigo ejecutable, sino un cédigo de bytes.
El cddigo de bytes es un conjunto altamente optimizado de instrucciones disefiado para que sea ejecutado
por el sistema de Java en tiempo de ejecucién. A dicho sistema se le denomina maquina virtual de Java
(Java Virtual Machina, JVM), es decir, la méquina virtual de Java es un intéxprete de cédigo de bytes
Esto puede resultarle un poco sorprenidente. Como sabe, la mayor parte de los lenguajes modemos,
como C+, estn disefiados para la compilacién, no la interpretacidn (sobre todo debido a problemas de
desempetio). Sin embargo, el hecho de que un programs de Java se ejecute en la JVM ayuda a resolver
Jos principales problemas relacionados con fos programas descargados én Internet. He aqui por que.
La traduecidn de un programa de Java en cédigo de bytes facilita la ejecucién de un programa
en una gren variedad de entomos. La razén es sencilla: solo la maquina virtual de Java necesita
implementarse en eada plataforma. Una vez que existe el paquete en tiempo de ejecucién para un
sistema dado, cualquier programa de Java puede ejecutarse en él. Recuerde que, a pesar de que los
detalles de la JVM seran diferentes entte plataformas, todas las JVM comprenden el mismo cédigo
de bytes de Java, Si se compilara un programa de Java en eddigo nativo, entonces tendrian que existir
diferentes versiones del mismo programa para cada tipo de CPU conectado a internet. Claro esté que
ésta no es una solucién factible. Por lo tanto, la interpretacidr def eddigo de bytes es la manera mas
facil de crear programas realmente portables.
El hecho de que un programa de Java sea interpretado ayuda también a que sea seguro. Debido a
que la ejecucién de todos tos programas de Java esté bajo el control de la JVM, ésta puede contener
al programa y evitar que genere efectos colaterales fuera del sistema. La seguridad se mejora también
con ciertas restricciones del lenguaie.
Por lo general, cuando se interpreta un programa, éste se ¢jecuta de manera sustancialmente més lenta
de lo que lo que se ejecutaria si se compilara en cédigo ejecutable. Sin embargo, con Java la diferenciasuo
Fue
Fundamentos de Java
entre ambos cédigos no es muy grande: el uso de un eédigo de bytes permite que el sistema de Java en.
tiempo de ejecuciémejecute el programa mucho mis répido de lo que se esperaria
‘Aunque Java se disefd paca la interpretacién, técnicamentte nada impide que compile al vuelo et
cédigo de bytes en cédigo nativo. Por ‘el motivo, Sun empez6 proporcionando su tecnologia HotSpot
ppoco después del anzamiento inicial de Java, HotSpot proporciona un compilador JIT (Just In Time
justo tiempo) para el eédigo de bytes. Cuando un compilador JIT es parte de la. JVM compila, en
tiempo real, el cédigo de bytes en codigo ejecutable, parte por parte, de acuerdo con la demanda. Es
importante comprender que no es posible Compilar todo un programa de Java en cédigo ejecutable de
una sola vez debido a que Java realiza varias comprobaciones que s6lo pueden realizarse 2 tiempo de
ejecuciion. En cambio, el JIT compila el cédigo conforme se requiera durante la ejecucién, Mas ai
ro todas las secuencias del cédigo de bytes estén compiladas (s6lo aquellas que se beneficiarén con la
compilacién). El cédigo restante simplemente se interpreta, Sin embargo, el método de justo a tiempo
proporciona, de cualquier modo, una importante sejora en el desemperio. Aunque la eompitacién
dinmica se aplica al cédigo de bytes, las caracteristicas de portabilidad y seguridad todavia aplicaran,
pues el sistema en tiempo de ejecucién (el cual realiza la compilacién} estard aiin a cargo del entomo de =
sjecucién, i
Terminologia de Java
Ninguna revisién general de Java estaria compieta sin que antes se diera un vistazo a la terminologia
de Java, Aunque las fuerzas fundamentales que se necesitaton para la invencién de Java son la :
portabilidad y la seguridad, otros factores desempeiiaron wn papel importante en el modelado de la
forma final del lenguaje. E] equipo de diseiio de Java resumié las consideraciones clave, estén en la
siguiente lista de términos.
Simple Java tiene un Conjunto conciso y cohesivo de funciones que focilitan su aprendizaie y vsa
Seguro Javo propoiciona un medio seguro de crear aplicaciones de Iniernet _
Portable los programas de Java pueden ejecutarse en cuclauier enlorno para el cual haya un
sistema de Jovo en tiempo de ejecvcién
Orientado @ objetos Java encorna Io flosofia mederna de programacién orientada @ objetos
Rebusto Java aliento una. programacién libre de errores, pues requere una escritvreestricta
y realizar comprobaciones en tiempo de ejecucién,
Subprocesos milliples_lava proporciona un soporte inlegrado pate la progremacién de aubprocesos miliples,
‘Arquitectura nevira Java no est unido a una maquina 0 una arquiteciura especificas de sistema operative
Interpretado Java soporta un cédigo de plataforma cruzada mediante el uso de un cédigo de
bytes de Jove: _
‘Alto desempeio_Elcdigo de bytes de Jova esté aliamente optimizado para que se elecule rapidamente,
Distibuido Java fue disefiado tomando en consideracién el entomno distibuido de Internet
Dindmico Los programas de java incluyen importantes cantidades de informacion que son del
tipo-de tiempo de ejecucién. Esta informacién se usa pora verificar y resolver el
acceso a objetos al momento de realizar la ejecucién,8
Médulo 1: Fundamentos de Java
Pregunte al experto
P: Para atender los temas de la portabilidad y la seguridad, gpor qué fue necesario crear
un nuevo lenguaje de computacién como Java, zpor qué no se adapt6 un lenguaje
como C++? En otras palabras, zno podria crearse un compilador de C++ que dé
salida a un cédigo de bytes?
Aunque serfa posible que un compilador de C++ generara un cédigo de bytes en lugar de
un cédigo ejecutable, C++ tiene funciones que no recomiendan utilizarlo para la creacion
de applets; la més importante de ellas es el soporte a apuntadores de C++. Un apuntador
es la direccién de algin objeto almacenado en la memoria. Con el uso de un apuntador,
seria posible acceder a recursos fuera del propio programa, lo que daria como resultado una
brecha de seguridad. Java no soporta apuntadores, con fo cual se elimina dicho problema.
Comprobacién de avance
1. {Qué es un applet?
2. {Qué es el eddigo de bytes de Java?
3. {Cuiles son los dos problemas que el uso de cédigo de bytes ayuda a resolver?
una
pen
Programacién orientada a objetos
En el corazén de Java se encuentra la progeam:
n orientada a objetos (programacién orientada a
objetos, Object Oriented Programming). La metodologia orientada a objetos es inseparable de Java,
y todos los programas de Java son, hasta cierto punto, orientados @ objetos. Debido a la importancia
de la programacién orientada a objetos, resulta itil comprender los principios basicos de ésta antes de
escribir incluso el més simple prograina de Java.
La programacién orientada a objetos es una manera poderosa de aftontar el trabajo de
programacién. Las metodologias de programacién han cambiado de manera importante desde la
invencion de la computadora, principalmente para adecuarse a Ia creciente complejidad de los
programas, Por ejemplo, cuando se inventaron las computadoras, la progtamacién se hacia al mover
interruptores para ingresar las instrucciones binarias empleando el panel frontal de la computadora,
Un applet es un pequeto programa que se descarga dindmicamente de Web
2, Un conjuntoaltamente optimizado de instrucciones que pueden ejecutarse en el intérprete de Java,
3, Portabilidad y seguridadFundamentos de Jova
Siempre y cuando los programas tuvieran unos cuantos cientos de instrucciones, este método
funcionaba. A medida que los programas erecieron, se invent6 e} lenguaie ensamblador para que
tun programador pudiera tratar con programas més grandes y de complejidad creciente empteando
representaciones simbélicas de las instrucciones de la maquina. A medida que los programas siguieron
creciendo, se introdujeron lenguajes de nivel superior que proporcionaron al programador mas
‘berramientas con las cuales manejar la complejidad. El primer lenguaje de amplia difusin fue, por
supuesto, FORTRAN, Aunque éste representé un primer paso impresionante, FORTRAN dificilmente
es un lengua
La década de 1960 vio nacer la programacién estructurada. Es et métndo estimulado por lenguajes
como C y Pascal. Bl uso de lenguajes estructurados permitié escribir con mucho mayor facitided
programas de complejidad moderada. Los lenguajes estructurados se caracterizan por su soporte
de subrutinas independientes, variables locales y constructs de control, asi como por st falta de
dependencia de GOTO. Aunque los lenguajes estructurados constituyen una herramienta poderosa,,
alcanzan su limite coanda un proyecto se vuelve demasiado grande.
‘Tome en consideracién lo siguiente: en cada momento clave del desarrollo de la programacién, se
crearon técnicas y herramientas que permitieron al programador tratar con una complejidad creciente.
‘A.cada paso, el nuevo método tomé los mejores elementos de los métodos anteriores y los hizo avanzar.
‘Antes de Ia invencién de la programacién orientada a objetos, muchos proyectos estuvieron cerca del
punto en que el método estructurado ya no funcionaba (0 lo rebasaron), Los métodos orientados a objetos
‘se crearon para ayudar a los programadores a rebasar estos limites,
La programacion orientada a objetos retomé las mejores ideas de la programacidn estructurada
y las combiné con varios conceptos nuevos. Et resultado fue una nueva manera de organizar un
programa. En el sentido més general, un programa puede organizarse mediante una de as siguientes
dos maneras: alrededor de st cédigo (lo que esta sucediendo) 0 alrededor de sus datos (lo que se
esté afectando). Con et uso exclusivo de las téenicas de programacién estructurada, los programas Se
encuentran tipicamente organizados alrededor del c6digo. A este método puede considerarsele como
“an e6digo que actia sobre los datos”
Los programas orientados a objetos funcionan de manera diferente: estin organizados alrededor de
los datos y el principio clave es que “los datos controtan el acceso al c6digo”. En un lenguaje orientado a
objetos, usted define los datos y las rtinas a las que se les permite actuar sobre los datos, Por lo tanto, un
tipo de datos define de manera precisa el tipo de operaciones que puede aplicarse a esos datos.
Para soportar los principios de la programacién orientada a objetos, todos los lenguajes orientados
« objetos, incluido Java, tienen tres rasgos en comtin: encapsulamiento, polimorfismo y herencia,
‘Examiinemos cada uno de ellos.
‘que estimula la creacién de programas claros y ficiles de comprender.
Encapsulamiento
El encapsulamiento es un mecanismo de programacién que une al cédigo y a los datos que manipula y
que los mantiene @ salvo de interferencias y de un mal uso externo. En un lenguaje orientado a objetos,
el c6digo y los datos pueden unirse de tal manera que pueda crearse una caja negra de contenido
independiente. Dentro de la caja estén todos los datos y el eédigo necesarios. Cuando el cddigo y los
datos estin vinculados de esta manera, se crea un objeto, En otras palabras, un objeto es el dispositivo
que Soporta el encapsulamiento.10
Médulo 1: Fundamentos de Java
Dentro de un objeto, el cédigo, os datos, o ambos, pueden ser privados, 0 piiblicos, en relacién con
dicho objeto. Fl cédigo 0 los datos privados son conocidos para la otra parte del objeto, y sélo ésta puede
tener acceso a ellos. Es decir, una parte del programa que se encuentra fuera del objeto no puede acceder
al cédigo 0 los datos privados, Cuando el cédigo 0 los datos son piiblicas, otras partes de su programa
pueden acceder a ellos aunque estén definidos dentro del objeto. Por lo general, las partes pulicas de un
‘objeto se usan para proporcionar tna interfaz controlada a los elementos privados de un objeto.
La unidad bisica de encapsulamiento de Java es la clase. Si bien se examinardn las elases con
mayor detalle en las paginas posteriores de este libro, el siguiente andlisis breve le serd de ayuda
ahora. Una clase define la forma de tn objeto; especifica los datos y el eédigo que operarin sobre los,
datos, Java usa una especificacidn de clase para construir objetos. Los objetos son instancias de una
clase. Por consiguiente, una clase es, en esencia, un conjunto de planos que especifican la manera de
construir un objeto,
Al c6digo y los datos que constituyen una clase se les denomina miembros de la clase. De manera
specifica, los datos definidos por la clase son denominados variables de miembro o variables de
instancia, Método es el término que usa Java para una subrutina, Siesta familiarizado con Cl, C++, 0
ambos, le seri de ayuda saber que lo que un programador de Java denomina método, un programador
de CICH+ lo denomina funcién.
Polimorfismo
Polimo
fimo (del griego “muchas formas”) es la cualidad que permite que una interfaz acceda a
tuna clase general de acciones. La accién especifica esta determinada por la naturaleza exacta de la
situacién. El volante de un automévil representa un ejemplo simple de polimorfismo. El volante (es
decir, la interfaz) es el mismo sin importar el tipo de mecanismo de conduccidn real que se emplee.
En otras palabras, el volante funcionara de manera igual si su automévil tiene direccién manual,
direccién hidriulica 0 de engranes. Por lo tanto, una vez que sepa cémo operar el volante, podra
rmanejar cualquier tipo de automévil
EI mismo principio se puede aplicar también a la programacién. Por ejemplo, tome en
consideracién una pila (Ia cual es una lista del tipo primero en entrar y ltimo en salir). Podria tener
tun programa que requiera tres tipos diferentes de pilas: una pila se usa para valores enteros, otta
para valores de punto flotante y otra mas para caracteres, En este caso, el algoritmo que implemente
cada pila sera el mismo, aunque los datos que se almacenen sean diferentes. En un lenguaje orientado
a objetos necesitaria crear tres conjuntos diferentes de rutinas de pilas, y cada conjunto tendria que
cemplear nombres diferentes. Sin embargo, debido al polimorfismo, en Java puede crear un conjunto
‘general de rutinas de pilas que funcione para las tres situaciones especificas. De esta manera, una vez
que usted sabe cémo usar una pila, podra usarlas todas.
De manera mas general, el concepto de polimorfismo suele expresarse con la frase “una interfaz
varios métodos”. Esto significa que es posible disefiar una interfaz. genérica para un grupo de
actividades relacionadas. £1 polimorfismo ayuda a reducir la complejidad al permitir que la misma
interfaz sea usada para especificar una clase general de accién. Usted, el programador, no necesita
llevar a cabo esta selecciér manualmente; s6lo necesita recordar y utilizar la interfaz generalFundamentos de Java «17
. 1
Herencia bo
Herencia es el proceso mediante el cual un objeto puede adquirir as propiedades de otro objeto, Esto.
resulta importante porque sopora el concepto de cusfiacion jerdrquica.En este sentido, la mayor:
parte del conocimiento se puede manejar mediante clasificaviones jerérquicas (es decir, de arriba a
abajo). Por ejemplo, una manzana roja es parte de la clasificacién marcana, que a su vez.es parte de la
clase fruta, la cual se encuentra bajo la clase mas grande de alimento. Es decir, ia clase alimento posee
ciertas cualidades (comestible, nutrtiva, et.) que también aplican, ldgicamente, ala subclase frura
Ademas de estas cualidades, la clase fina tiene caracteristicas especificas (ugosa, dulce, ete.) que?
la distinguen de otros alimentos, La clase manzana define las cualidades especificas de una manzana
(crece en arboles, no es tropical, ete). Asi, una manzana roja heredarfa a su vez todas las cvalidades de
todas las clases anteriores y s6lo definiria las cualidades que la hacen tnica,
Sin el uso de jerarquias, cada objeto tendria que definirexplicitamente todas sus caracteristcas. Si
utiliza la herencia, un objeto solo necesitaré defini esas cualidades que lo hacen tinico dentro de su cla
De esta forma, el objeto puede heredar sus atributos generales a partir de su ascendiente y, por consiguiente,
el mecanismo de la herencia hace posible que un objeto Sea una instancia especifica de un caso més general
Comprobacién de avance :
1, Nombre los principios de la programacién orientada a objetos,
2. {Cual es la unidad bisica de encapsulamiento en Java?
Pregunte al experto
Ps Usted establecié que la programaci6n orientada a objetos es una manera efectiva
de manejar programas largos. Sin embargo, al parecer dicha programacién podria
afiadir una carga adicional a los programas pequefios, Debido a que usted mencioné
que todos tos programas de Java estan, en cierta medida, orientados a objetos, ,esto
impone una penaiidad a los programas mis pequefios?
3 No, Como vera, en el caso de programas pequefios, las funciones orientadas a objetos.
de Java son casi transparentes. Aunque es verdad que Java sigue un modelo estricto de
objeto, usted cuenta con un amplio poder de decision sobre el grado en el que lo emplea,
Para el caso de programas mas pequeiios, sus caracleristicas orientadas a objetos apenas
son perceptibles. A medida que sus programas crezcan, usted integrara mas caracteristicas
orientadas a objetos sin mayor esfuerzo.
Encapsulamiento, plimoyfismo y herencia,
2, Laclase