Download - Java
-
This book is the key to access the world ofprogramming with Java, the leading language inclient-server applications. Know all the secrets ofthis object-oriented programming language, themost widely used today by developers.
JAVA
CONTENIDO
N I V E L D E U S U A R I O
PRINCIPIANTE INTERMEDIO AVANZADO EXPERTO
1 | PROGRAMACIN ORIENTADA A OBJETOSHistoria / Conceptos / Terminologa / Polimorfismo /Tipos y subtipos / Herencia / Por qu objetos?
2 | INICIACIN A JAVAHistoria / Preparacin / Eclipse IDE / Test DrivenDevelopment / Primeros cdigos
3 | SINTAXISPalabras clave / Ciclos / Declaraciones, expresiones,sentencias y bloques / Otras estructuras / Tipos primitivosy literales / Operadores / Paquetes
4 | CLASESDefinicin / Atributos / Mtodos / La herencia y los mtodos/ Constructores / This y Super / Esttico vs. no esttico
5 | MS CLASESClases abstractas / Clases anidadas / Clases anidadasestticas / Clases internas / Clases locales y clasesannimas / Ejercicio: el juego de la vida
6 | INTERFACESDefinicin / Uso / Clases abstractas vs. interfaces
7 | ENUMERACIONESDefinicin / Uso
8 | EXCEPCIONESDefinicin / Uso / Excepciones chequeadas / Excepcionesno chequeadas / Errores
9 | GENRICOSDefinicin / Subtipado / Comodn / Tipos restringidos /Genricos en el alcance esttico
10 | LIBRERA BASELibrera y objetos bsicos / Colecciones / Clases tiles / I/O
11 | ANOTACIONESQu son las anotaciones? / Definicin / Uso de lasanotaciones / Acceder a las anotaciones en tiempo deejecucin / Distintos usos de las anotaciones
12 | TCNICAS Y DISEOJava Beans / Inyeccin de dependencias e inversin decontrol / Evitar null / Representar conceptos con objetos
En este sitio encontrar una gran variedad de recursos y software relacionado, quele servirn como complemento al contenido del libro. Adems, tendr la posibili-dad de estar en contacto con los editores, y de participar del foro de lectores, endonde podr intercambiar opiniones y experiencias.
Si desea ms informacin sobre el libro puede comunicarse connuestro Servicio de Atencin al Lector: [email protected]
DOMINE EL LENGUAJE LDER EN APLICACIONES CLIENTE-SERVIDOREste libro fue concebido para ayudar a quienes buscan aprender a programar
en Java, como as tambin para aquellos que conocen el lenguaje, pero quie-
ren profundizar sus conocimientos.
Con la lectura de esta obra, iniciaremos un apasionante y progresivo recorri-
do, que comenzar con los conceptos fundamentales de la programacin
orientada a objetos, el diseo y el desarrollo de software. El aprendizaje ser
completo desde el momento en que tendremos en cuenta las buenas prcticas
y las mejores tcnicas para obtener programas robustos, claros y eficientes.
Todos los procedimientos son expuestos de manera prctica con el cdigo
fuente de ejemplo (disponible en Internet), diagramas conceptuales y la
teora necesaria para comprender en profundidad cada tema presentado. Al
finalizar el libro, el lector contar con las herramientas requeridas para ser
un programador integral en Java.
Ignacio Vivona es un desarrollador de software con ms de diez aos de expe-
riencia y un entusiasta de la tecnologa desde siempre. Gracias a su gua y
consejos, estaremos en condiciones de conocer a fondo el lenguaje y ponerlo
en prctica para insertarnos en el mercado del desarrollo de software.
JAVA
por Ignacio Vivona
Tapa Java OK.qxp 23/08/2011 21:48 Pgina 1
-
CLAVES Y TCNICAS PARA OPTIMIZAR SITIOS DE FORMA PROFESIONAL
POTENCIE SUS SITIOS CON EL PODER DE AMBAS HERRAMIENTAS
PROGRAMACIN DE SITIOS WEB PROFESIONALES
DISEO DE SITIOS WEB COMPLEJOS CON LAS HERRAMIENTAS DE ADOBE
>> DESARROLLO / INTERNET>> 400 PGINAS>> ISBN 978-987-1773-09-1
>> DESARROL>> 400 PGIN>> ISBN 978-
>> DESARROLLO>> 432 PGINAS>> ISBN 978-987-1773-16-9
>> DESARROL>> 432 PGIN>> ISBN 978-
>> DESARROLLO / INTERNET>> 400 PGINAS>> ISBN 978-987-1773-07-7
>> DESARROL>> 400 PGIN>> ISBN 978-
>> DISEO / DISEO WEB>> 320 PGINAS>> ISBN 978-987-663-022-1
>> DISEO / D>> 320 PGIN>> ISBN 978-
Bombo - RT - LIBRO Java.indd 1Bombo - RT - LIBRO Java.indd 1 24/08/2011 16:08:0624/08/2011 16:08:06
-
JAVADomine el lenguaje lDer en aplicaciones cliente-serviDor
por ignacio vivona
00_Java_AJUSTADO.indd 1 8/25/11 1:02 PM
-
copyright mmXi. es una publicacin de Fox andina en coedicin con Dalaga s.a. Hecho el depsito que marca la ley 11723.
todos los derechos reservados. esta publicacin no puede ser reproducida ni en todo ni en parte, por ningn medio actual o
futuro sin el permiso previo y por escrito de Fox andina s.a. su infraccin est penada por las leyes 11723 y 25446. la editorial
no asume responsabilidad alguna por cualquier consecuencia derivada de la fabricacin, funcionamiento y/o utilizacin de los
servicios y productos que se describen y/o analizan. todas las marcas mencionadas en este libro son propiedad exclusiva de sus
respectivos dueos. impreso en argentina. libro de edicin argentina. primera impresin realizada en sevagraf, costa rica 5226,
grand Bourg, malvinas argentinas, pcia. de Buenos aires en iX, mmXi.
vivona, ignacio
java. - 1a ed. - Buenos aires : Fox andina; Dalaga, 2011.
320 p. ; 24x17 cm. - (manual users; 218)
ISBN 978-987-1773-97-8
1. informtica. i. ttulo
cDD 005.3
TTULO: Java
AUTOR: Ignacio Vivona
COLECCIN: Manuales USERS
FORMATO: 17 x 24 cm
PGINAS: 320
ISBN 978-987-1773-97-8
00_Java_AJUSTADO.indd 2 8/25/11 1:02 PM
-
ANTES DE COMPRAREN NUESTRO SITIO PUEDE OBTENER, DE FORMA GRATUITA, UN CAPTULO DE CADA UNO DE LOS
LIBROS EN VERSIN PDF Y PREVIEW DIGITAL. ADEMS, PODR ACCEDER AL SUMARIO COMPLETO, LIBRO DE UN VISTAZO, IMGENES AMPLIADAS DE TAPA Y CONTRATAPA Y MATERIAL ADICIONAL.
REDISEO BOMBOS LIBROS - PAG 01 - Base Editable - Nov 09.indd 1REDISEO BOMBOS LIBROS - PAG 01 - Base Editable - Nov 09.indd 1 27/4/2011 13:05:5127/4/2011 13:05:51
-
www.redusers.com
4 PRELIMINARES
Ignacio VivonaDesarrollador de software desde hace casi
diez aos y entusiasta de la tecnologa desde
hace mucho ms. Ha trabajado en varios
sistemas informticos de gran envergadura,
desde programas de consulta de autopartes para
sistemas GIS de seguimiento de vehculos, hasta
desarrollos para motores de reglas y sitios web de
distinta ndole. Ha utilizado un amplio espectro de
tecnologas y plataformas para aplicar las distintas
opciones y herramientas que ms se adecuan a cada situacin. Trabaj
en plataformas Windows y Linux, haciendo uso de tecnologas como
C++ y Visual Basic para la creacin de aplicaciones de escritorio,
servicios y para componentes transaccionales. Por otra parte, tambin
ha desarrollado diversas aplicaciones para la Web utilizando Java,
.NET, PHP y ASP. Particip en la creacin de varios frameworks, en
los cuales se basaron distintas aplicaciones.
Realiz su tesis para la carrera de Licenciatura en Ciencias de la
Computacin en la Universidad de Buenos Aires.
AgradecimientosA Yayi, por su confianza y su apoyo incondicional.
A Nicols Kestelboim, por la oportunidad de escribir este libro.
A Mati, Marce y Emi por bancarme en esta iniciativa.
A mis padres y mi hermano.
Y a mis amigos.
00_Java_AJUSTADO.indd 4 8/29/11 8:39 AM
-
www.redusers.com
5JAVA
PrlogoLe por primera vez algo sobre Java all por el ao 1998, en una
revista de informtica espaola. En esa ocasin me intrig el slogan
compilarlo una vez, correrlo en cualquier lado y desde ese momento
comenc a investigar sobre el tema. Consegu un libro sobre Java, uno
de los primeros en nuestra lengua, desarrollando ejercicios y leyendo
en los sitios web fui creciendo en el lenguaje.
Luego me fui metiendo cada vez ms en la teora del paradigma
de la programacin orientada a objetos, fui entendiendo sus bases,
su historia y las ideas que propone. Esto me fue llevando a investigar
otros temas, otros paradigmas y otros lenguajes.
Es esa sensacin de necesitar saber cmo funciona algo, qu partes
lo componen y de qu forma interactan para cumplir con una tarea
ms compleja que la que realizan individualmente. Es esta curiosidad,
sumada a las ganas de crear, de concretizar ideas, los elementos
necesarios para ser un programador.
En este libro me propongo llevar al lector en un viaje por el
maravilloso mundo de la programacin con objetos. Utilizaremos como
medio de transporte el lenguaje Java, uno de los exponentes ms famosos
de este paradigma de programacin. Iremos aprendiendo las ideas y las
metodologas sobre la programacin con objetos, aplicando todo lo que
veamos en los ejercicios y poniendo en prctica los test unitarios.
Invito ahora al lector a comenzar este recorrido juntos, e ir
aprendiendo cmo materializar nuestras ideas, utilizando Java y la
programacin orientada a objetos. Sin ms, arrancamos
Ignacio Vivona
Claudio PeaAutor y editor RedUsers
00_Java_AJUSTADO.indd 5 8/29/11 8:39 AM
-
www.redusers.com
PRELIMINARES6
El libro de un vistazoEste libro realiza un recorrido por la teora tras las ideas soportadas
por el paradigma de la programacin orientada a objetos y su aplicacin
con Java. Los primeros captulos presentan los conceptos del paradigma,
luego se explaya en el lenguaje y en el modelado correcto con l.
ProgrAmAcIN orIeNtAdA A oBJetoS
en este captulo veremos la historia del
paradigma de la orientacin a objetos.
analizaremos conceptos como polimorfismo y
herencia. tambin veremos los tipos y subtipos.
INIcIAcIN A JAVA
este captulo se dedica a la presentacin del
lenguaje java. empezaremos viendo su historia
y los motivos detrs de su creacin, para
luego preparar nuestros cdigos.
SINtAxIS
aprenderemos cmo estn compuestos los
programas en java. veremos las distintas
estructuras del lenguaje, su significado as
como tambin las reglas que lo definen.
clASeS
en este captulo veremos las clases.
aprenderemos cmo se definen, cmo se
especifica el estado de las instancias y cmo se
declara el comportamiento de estas.
mAS clASeS
continuamos con el tema del captulo anterior y
avanzamos sobre temas como clases abstractas
y clases anidadas. luego presentamos un gran
ejercicio: el juego de la vida.
INterfAceS
en este captulo analizaremos las interfaces.
veremos cul es el motivo de su existencia, cmo
se definen y cundo se deben utilizar. Finalmente
las compararemos con las clases abstractas.
eNumerAcIoNeS
aqu conoceremos las enumeraciones como la
forma que tiene el lenguaje java de definir una
serie de elementos conocidos y que comparten
un comportamiento y estn agrupados.
excePcIoNeS
aprenderemos en este captulo cmo se
encuentran clasificadas las excepciones, cmo
funcionan, en qu casos debemos utilizarlas y
de qu forma las implementamos.
00_Java_AJUSTADO.indd 6 8/25/11 1:02 PM
-
www.redusers.com
JAVA 7
a lo largo de este manual podremos encontrar una serie de recuadros que nos brindarn informacin complemen-
taria: curiosidades, trucos, ideas y consejos sobre los temas tratados. para poder reconocerlos fcilmente, cada
recuadro est identificado con diferentes iconos:
INFORMACIN COMPLEMENTARIA
geNrIcoS
en este captulo seremos presentados con
la forma que define el lenguaje que permite
parametrizar los tipos utilizados en nuestro
cdigo. veremos por qu son necesarios,
cmo se definen y de qu forma debemos
utilizarlos.
lIBrerA BASe
aqu nos encargaremos de ver la librera
base que proporciona java. conoceremos y
analizaremos las clases e interfaces principales
que todo programador debe conocer.
ANotAcIoNeS
trataremos en este captulo una forma
de definir informacin extra en nuestros
programas, que podr ser consultada
luego en distintos momentos de la vida
de nuestro cdigo.
tcNIcAS y dISeo
captulo donde aprenderemos algunas tcnicas
de diseo que no ayudan en la tarea de
construccin de software robusto, claro
y mantenible. tendremos, tambin, una
primera aproximacin a los famosos
patrones de diseo.
reflexIN
en este apartado estudiaremos el aspecto del
lenguaje java que permite analizar y modificar
las clases y tambin los objetos desde el
mismo programa mientras es ejecutado.
SIguIeNteS PASoS
Finalmente, en este anexo, se nos presentarn
distintos caminos que podremos seguir
para ir enriqueciendo y ampliando nuestro
conocimiento sobre java y el desarrollo
de software.
CuRIOsIdAdEs
E IdEAs
ATENCIN dATOs TILEs
y NOvEdAdEs
sITIOs wEb
00_Java_AJUSTADO.indd 7 8/25/11 1:02 PM
-
REDISEO BOMBOS LIBROS - PAG 08 - Base Editable - Dic 09.indd 1REDISEO BOMBOS LIBROS - PAG 08 - Base Editable - Dic 09.indd 1 10/05/2010 12:57:5310/05/2010 12:57:53
-
www.redusers.com
JAVA 9
ContenidoSobre el autor .................................................. 4
Prlogo ............................................................ 5
El libro en un vistazo ....................................... 6
Informacin complementaria ........................... 7
Inroduccin .................................................... 12
Programacin orientada a objetosHistoria .................................................................14
Conceptos .............................................................15
Terminologa ....................................................17
Polimorfismo ....................................................18
Tipos y Subtipos ...................................................19
Herencia ...............................................................21
Herencia simple versus herencia mltiple ...........24
Por qu objetos?.................................................25
Resumen ...............................................................27
Actividades ...........................................................28
Iniciacin a JavaHistoria .................................................................30
Preparacin ..........................................................32
Eclipse IDE ...........................................................33
Primeros cdigos ..................................................38
Resumen ...............................................................43
Actividades ...........................................................44
Sintaxis Palabras claves .....................................................46
Ciclos ....................................................................52
Declaraciones, expresiones,
sentencias y bloques .............................................58
Variables ...............................................................58
Sentencias .............................................................60
Otras estructuras ..................................................60
if/else/else if ..........................................................60
Switch ...................................................................63
Try/catch/finally .....................................................65
Tipos primitivos y literales ...................................67
Operadores ...........................................................70
Paquetes ...............................................................72
Resumen ...............................................................73
Actividades ...........................................................74
clases Definicin .............................................................76
Atributos ..............................................................79
Mtodos ...................................................................82
La herencia y los mtodos .....................................84
Constructores ......................................................85
This y Super .........................................................87
Lo esttico versus
lo no esttico ........................................................90
Resumen ...............................................................91
Actividades ...........................................................92
CAP4_DIAG 1
Objeto
Vehculo
Auto VehculoTerrestre
CLASES INTERFACES
00_Java_AJUSTADO.indd 9 8/25/11 1:02 PM
-
www.redusers.com
PRELIMINARES10
ms clasesClases abstractas ..................................................94
Clases anidadas ........................................................97
Clases anidadas estticas ......................................97
Clases internas ......................................................98
Clases locales y clases annimas .......................101
Ejercicio: El juego de la vida .............................103
Resumen .............................................................121
Actividades .........................................................122
Interfaces Definicin ...........................................................124
Uso .....................................................................126
Clases abstractas versus interfaces ....................129
Resumen .............................................................131
Actividades .........................................................132
enumeracionesDefinicin ...........................................................134
Uso .....................................................................136
Resumen .............................................................147
Actividades .........................................................148
excepcionesDefinicin ...........................................................150
Uso .....................................................................154
Excepciones chequeadas ....................................157
Excepciones no chequeadas ...............................158
Errores ................................................................159
Resumen .............................................................159
Actividades .........................................................160
genricosDefinicin ...........................................................162
Subtipado ...........................................................166
Comodn .............................................................166
Tipos restingidos ................................................167
Genricos en el alcance esttico ........................168
Resumen .............................................................169
Actividades .........................................................170
librera BaseLibrera y objetos bsicos ..................................172
java.lang.Object ...................................................172
java.lang.Boolean ................................................174
Colecciones ........................................................177
java.util.Collection ...............................................178
java.util.Set .........................................................180
java.util.Map .......................................................181
Ejercicio: colecciones diferentes ........................182
Clases tiles ........................................................186
Ejercicio: alternativa a java.util.Date ..................188
I/O .......................................................................192
java.io.InputStream y su familia ..........................192
java.io.Reader y java.io.Writer ............................195
Resumen .............................................................197
Actividades .........................................................198
GregorianCalendar
CAP10_DIAG 3
Date Calendar
Object
00_Java_AJUSTADO.indd 10 8/25/11 1:02 PM
-
www.redusers.com
JAVA 11
AnotacionesQu son las anotaciones? ..................................200
Definicin ...........................................................204
Heredando anotaciones .......................................208
Uso de las anotaciones .......................................209
Accediendo a las anotaciones
en tiempo de ejecucin ......................................209
Jerarquizando anotaciones ..................................212
Distintos usos de las anotaciones .......................217
Inyeccin de dependencias ..................................219
Serializacin .......................................................220
Mapeos a base de datos .......................................222
Aplicaciones web .................................................223
Resumen .............................................................223
Actividades .........................................................224
tcnicas y diseoInmutabilidad, Java Beans
y la creacin de objetos ......................................226
Inyeccin de dependencias
e inversin de control .........................................233
Sobre la creacin de objetos ..............................237
Mtodo factora ...................................................237
Factora abstracta ...............................................239
Singleton .............................................................241
Evitar utilizar null ...............................................243
Representar conceptos con objetos ...................245
Resumen .............................................................247
Actividades .........................................................248
reflexinQu es la reflexin? ...........................................250
Las clases ...........................................................251
Mtodos ..............................................................255
Constructores .....................................................261
Atributos ............................................................262
Modificadores .....................................................264
Interfaces ...........................................................265
Clases anidadas ..................................................265
Arrays .................................................................268
Los ClassLoaders ................................................277
Resumen .............................................................277
Actividades .........................................................278
Siguientes pasosTemas para seguir estudiando ............................280
Desarrollo de aplicaciones para
la consola de comandos ......................................296
Desarrollo de aplicaciones de escritorio .............298
Desarrollando aplicaciones
para dispositivos mviles ....................................301
Desarrollando aplicaciones web .........................303
Otros lenguajes para la JVM ..............................307
Resumen .............................................................308
Servicios al lectorndice temtico ................................................. 310
CAP12_DIAG 4
Producto
Construye
Construye
Producto
ConstruyeConstruye
Un Producto
ConstruyeConstruye
Un Producto
Factora
ConstruyeConstruye
Factora
Una Factora
ConstruyeConstruye
Una Factora
Mtodo Factora
Mtodo Factora
00_Java_AJUSTADO.indd 11 8/25/11 1:02 PM
-
www.redusers.com
PRELIMINARES12
IntroduccinCmo funciona esto? Es posible hacer algo as? Estas son
preguntas que todo aquel que se interesa por la tecnologa y
la computacin se hace. Y estas inquietudes son las que nos
llevan a embarcarnos en el camino de la programacin. Hoy en
da las computadoras estn en todos lados y en todas partes.
Cualquiera tiene los medios y la posibilidad de responder las
dudas anteriores y de crear programas y herramientas que
permitan mejorar el mundo. Cualquiera puede ser el autor de la
prxima gran idea millonaria.
La programacin orientada a objetos ha dominado el
mercado por sobre otros paradigmas durante los ltimos
veinte aos, y parece que va seguir dominndolo por mucho
tiempo ms. En particular Java es el mximo referente de los
programadores y existe una comunidad que constantemente
genera productos, libreras y frameworks. Aun as, la demanda
de nuevos programadores sigue creciendo. La orientacin
a objetos encabeza la difcil tarea de transmitir ideas y de
plasmarlas en la PC, de tal forma que un sistema pueda hacer
lo que queramos de una manera sencilla y tangible.
En este libro, el lector tendr la oportunidad de sumergirse
en el paradigma; tomar sus ideas, sus reglas y sus metodologas.
Luego, todos estos conocimientos se aplicarn a un lenguaje
particular, en este caso, Java. Ir conociendo y aprendiendo
el lenguaje paso a paso, desde su sintaxis y semntica, para
escribir cdigo correcto y entender cmo plasmar y modelar
adecuadamente las situaciones de nuestro inters. Para esto
se usarn las herramientas provistas por el lenguaje, como las
clases y la herencia, y tambin las interfaces y conceptos que
provee Java. El lector est invitado a continuar, con la mente
abierta a nuevas ideas, sin preconceptos ni prejuicios. Suerte.
Ignacio Vivona
00_Java_AJUSTADO.indd 12 8/25/11 1:02 PM
-
Servicio de atencin al lector: [email protected]
Conocer los conceptos bsicos que corresponden a este
paradigma de programacin es fundamental para poder
entender y aplicar correctamente los conocimientos que
iremos adquiriendo a lo largo del libro. En este captulo
nos encargaremos de revisar y entender los alcances de la
programacin orientada a objetos y su relacin con Java.
Programacin orientada a objetos
Historia .....................................14
Conceptos ................................15
Terminologa .................................... 17
Polimorfismo ................................... 18
Tipos y Subtipos ......................19
Herencia ...................................21
Herencia simple versus
herencia mltiple ............................. 24
Por qu objetos? ....................25
Resumen ...................................27
Actividades ...............................28
01_Java_AJUSTADO.indd 13 8/29/11 8:12 AM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos14
HistoriaLas races de la programacin orientada a objetos se remontan a
los aos 60, con lenguajes como Algol 60 y Simula. Pero no es sino
hasta los 70, cuando Alan Kay y su equipo empiezan a trabajar en
la creacin del lenguaje Smalltalk, el momento en el cual se acua
el trmino orientado a objetos. El lenguaje Smalltalk fue el pilar
de este tipo de programacin y, actualmente, es uno de los pocos
lenguajes puros, donde todo es un objeto. Se le dice puro a un lenguaje
cuando todos sus elementos son objetos. Muchos lenguajes de este tipo
no son puros (como Java) porque tienen elementos, como los nmeros,
que no lo son. Esto crea una discontinuidad en el razonamiento, dado
que hay que pensar en objetos y tambin tener en cuenta los elementos
que no son objetos. Un lenguaje puro tiene un concepto uniforme, todos son objetos, y as facilita pensar los problemas y sus soluciones.
Alan Kay y su equipo trabajaban en Xerox PARC (un centro de
investigacin y desarrollo) y fueron pioneros en varias tecnologas
que hoy en da son comunes. El sistema en el que trabajaban se
denominaba Smalltalk, y se caracterizaba por ser un sistema operativo
ms que un lenguaje de programacin. Fue el primero en tener
ventanas, barras de desplazamiento, botones y hacer uso del mouse
(aunque no fue inventado por ellos). Es un hecho que Steve Jobs, en
una de sus visitas al Xerox PARC, vio Smalltalk y as surgi la Apple
Lisa, la primera computadora personal con interfaz grfica.
Smalltalk innov tambin en ser un lenguaje dinmico y reflectivo
donde un usuario poda modificar el comportamiento de cualquier
parte del sistema en tiempo de ejecucin (no haba un tiempo de
compilacin como en otros lenguajes), de esta manera el sistema
estaba constantemente vivo. Las capacidades reflectivas permitan
razonar y manipularlo dinmicamente mientras estaba corriendo.
De la comunidad Smalltalk tambin surgieron adelantos como los test unitarios (que veremos ms
adelante) y los refactorings (cambios que mejoran el cdigo sin cambiar el comportamiento de ste),
dos temas que han adquirido gran importancia en los ltimos aos. Y surgieron hace veinte!
OtrOs apOrtes de smalltalk
01_Java_AJUSTADO.indd 14 8/18/11 8:15 PM
-
www.redusers.com
Java 15
ConceptosLa programacin orientada a objetos se basa en dos conceptos bsicos:
Hay objetos Solamente se comunican envindose mensajes
Un objeto es una entidad que agrupa datos y funcionalidad. En este
esquema los datos son otros objetos, que son referenciados a travs de
un nombre, una etiqueta. Por ejemplo, un objeto Persona tiene como
datos el nombre y la edad, estas son etiquetas que apuntan a los objetos
correspondientes. Entendemos funcionalidad por lo que hace un objeto
cuando recibe un mensaje, determinando su comportamiento.
Siguiendo con el ejemplo de la persona, si se le enva el mensaje correr,
esta empieza a correr. Esta idea difiere de otros lenguajes como C,
Figura 1. As se vea la versin 80 de Smalltalk. Contaba con la posibilidad de manipular ventanas, iconos y otros elementos. Debemos saber que fue uno de los primeros sistemas en utilizar el mouse.
01_Java_AJUSTADO.indd 15 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos16
donde los datos y las funciones que operan sobre esos datos estn
separados. Al estar contenidos en un objeto tanto los datos como la
funcionalidad, se define as una frontera entre el interior y el exterior
de este.
Esta separacin asla tanto al interior de un objeto de otros objetos,
como as tambin de sus asuntos internos . Este aislamiento favorece
la reutilizacin (de conocimiento, secundariamente de cdigo), en la
adaptacin a los cambios y la simplicidad. Todos estos beneficios surgen
por la existencia de esta frontera y porque la nica forma posible de
cruzarla sea el envo de mensajes. Se dice que un objeto encapsula
datos y funcionalidad y que, adems, oculta su informacin, dado que
solamente expone lo que quiere hacer pblico a otros objetos.
El paradigma no explica nada acerca de su implementacin, de cmo
son los objetos ni de qu forma se envan los mensajes. Tampoco
hace mencin a clases ni a mtodos. Al ser tan simple y no imponer
restricciones, existen diversos tipos de lenguajes orientados a objetos.
Hay lenguajes que utilizan clases para agrupar y crear objetos, como
en el caso de Java, otros utilizan prototipos, donde los objetos se
copian de otros objetos base y, a su vez, toman cosas prestadas de ellos,
como en el caso de Javascript. Algunos lenguajes como Java, Smalltalk
y C++, ocultan el hecho de que se estn enviando mensajes, por temas
de velocidad y simplicidad. Otros, en cambio, lo hacen explcito, por
temas de paralelismo, y no se espera que la respuesta sea inmediata,
Figura 2. Vista conceptual de objetos comunicndose. Los objetos interactan envindose mensajes, los cuales pueden llevar ms informacin (otros objetos) con ellos.
un mensaje
La respuesta
un objeto otro objeto
01_Java_AJUSTADO.indd 16 8/18/11 8:15 PM
-
www.redusers.com
Java 17
como Erlang. A partir de estos conceptos bsicos, se desprenden
algunos otros que, generalmente, estn asociados a la programacin
orientada a objetos: polimorfismo, tipos, subtipos y herencia.
TerminologaDejemos claro algunos trminos antes de seguir. Llamaremos a la
parte externa de un objeto, es decir, su frontera con el exterior, interfaz
o protocolo. A los objetos, instancias, y cuando estemos en el contexto
de clases, diremos que un objeto es instancia de una determinada
clase. Una clase es un artefacto que proveen los lenguajes para
construir tipos, que especifican el comportamiento de las instancias
y las construyen. La forma en que un objeto responde a un mensaje
es a travs de su implementacin, a la que llamaremos mtodo. Los
mensajes pueden llevar consigo objetos, a estos los denominaremos
colaboradores externos (al objeto receptor), y tambin parmetros
o argumentos del mtodo. Debemos tener en cuenta que a los datos
de un objeto, los que conoce por un nombre, los mencionaremos como
colaboradores internos o variables de instancia.
Figura 3. Vemos cmo un objeto es usado por muchos otros y cmo tambin puede utilizar distintos objetos, tomando como ejemplo los conceptos de encapsulamiento y ocultamiento de la informacin.
un mensaje
un saldo
saldo
depositar
depositar $100
extraer
una cuenta
01_Java_AJUSTADO.indd 17 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos18
PolimorfismoEl polimorfismo es la caracterstica por la cual distintos objetos
pueden ser intercambiados entre s, dado que responde a un cierto
conjunto interesante de mensajes. Un objeto es polimrfico con
otro objeto cuando ambos responden a un mismo mensaje (de formas
distintas). El mensaje en cuestin es polimrfico y permite que
Estos conceptos estn basados en la biologa celular, donde las clulas poseen una frontera llamada
pared celular, la cual oculta y protege el interior de stas que se comunican entre s por medio de
mensajes qumicos. En la pared celular se encuentran los receptores, que son protenas que le permiten recibir los mensajes qumicos. Dynamic dispatch en la naturaleza!
Origen de la idea de ObjetOs y mensajes
Figura 4. Un objeto reconoce a otros por medio de nombres. El protocolo establece qu mensajes entiende un objeto, y estos mensajes son los nicos elementos que permiten cruzar la frontera del objeto.
$1500 saldo
depositar
protocolo
argumento
un monto
mtodo
saldo saldo unManto
extraer
Variablede instancia
01_Java_AJUSTADO.indd 18 8/18/11 8:15 PM
-
www.redusers.com
Java 19
haya polimorfismo entre los dos (o ms) objetos. Es posible desde el
momento que se desacopla el envo de mensajes, cuando se produce
la recepcin de uno de ellos y viendo la forma en que acta el objeto
receptor en consecuencia. Que la decisin de lo que se ejecuta cuando
se recibe un mensaje sea independiente del envo de este, se conoce
como dynamic dispatch (despacho dinmico).
Tipos y SubtiposEl concepto de tipo est estrechamente ligado al paradigma de
objetos, por ms que no sea exclusivo a l (proviene del mundo lgico-
matemtico). Un tipo es un concepto que define un conjunto de objetos
que comparten ciertas caractersticas (responden a un mismo conjunto
de mensajes) que tienen sentido en un determinado contexto. Esto
permite razonar sobre el conjunto, y todo lo que aplica a l aplica a
cada integrante de este. Por ejemplo, si decimos que el tipo Nmero
representa a todos los
objetos que saben responder
a la suma y la resta, entonces
los objetos 1, o Pi al ser
nmeros pueden ser usados
en cualquier lugar que se
necesite un nmero, ya que
se pueden sumar y restar.
Ahora, el nmero 1 es un
entero, mientras que el
nmero es una fraccin
(racional) y Pi es uno real
(irracional). Todos son
nmeros, pero cada uno
pertenece a un tipo especial,
dado que tienen
caractersticas distintas. Diremos entonces, que Entero, Fraccin y Real
son subtipos de Nmero, dado que pertenecen a este grupo (se suman
y restan) pero tambin tienen diferencias que forman un subconjunto
dentro del conjunto ms grande. Por ejemplo, una fraccin puede
1
+_
1/2
+_
+_
nmero
Figura 5. En esta imagen podemos ver al tipo denominado Nmero que se encarga de englobar otros nmeros.
01_Java_AJUSTADO.indd 19 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos20
responder a mensajes como numerador y denominador, pero un
irracional no. Se dice que una Fraccin es una especializacin de
Nmero. As, debemos tener en cuenta que Nmero es un supertipo de
Fraccin y a su vez, Fraccin un subtipo de Nmero. Entonces,
Nmero, Entero, Fraccin y Real forman una jerarqua.
Un supertipo es ms abstracto que un subtipo mientras que el
subtipo es ms concreto (especializado) que el supertipo. Abstraer
significa que intencionalmente se dejan de lado ciertas caractersticas
para poder as enfocarse en otras ms importantes (dependiendo del
contexto) en un determinado momento. Por lo tanto es simple ver que
para poder abstraer es necesario primero contar con las instancias
concretas. Luego se realiza el trabajo intelectual de seleccionar las
caractersticas comunes y dejar de lado las diferencias.
Figura 6. En esta imagen podemos ver los diagramas correspondientes a jerarqua de nmeros y jerarqua de animales.
1
+_
1/2
+_
+_
nmeroanimal
insecto
mariposa hormiga vaca len
mamfero
No deberamos empezar pensando la abstraccin y luego las especializaciones. Ese proceso no
funcionar porque seleccionaremos caractersticas que no son comunes o no seleccionaremos algunas
que s lo sean. Es conveniente empezar por los casos concretos que nos guiarn en la construccin de
una abstraccin cuando distingamos las caractersticas comunes entre ellos.
CmO abstraer?
01_Java_AJUSTADO.indd 20 8/18/11 8:15 PM
-
www.redusers.com
Java 21
HerenciaEn la programacin orientada a objetos se considera que una clase
hereda de otra cuando la primera es un tipo de la segunda. Una clase
es un artefacto de implementacin de tipo que permiten los lenguajes.
Las clases forman jerarquas de herencia y se dice que cuando la clase
Mamfero hereda de la clase Animal, Mamfero es una subclase de
Animal y Animal es una superclase de Mamfero. En general, debemos
saber que los lenguajes slo permiten heredar de una sola clase aunque
hay algunos, como el lenguaje de programacin C++, que tienen
herencia mltiple, o sea que una clase puede heredar de muchas otras.
La subclasificacin se parece al subtipado aunque no hay que
confundirse, la subclasificacin no fuerza al subtipado. Podramos
tener una clase que hereda de otra, pero sin compartir entre ellas un
concepto de tipo para crear una jerarqua de tipos. Veamos un ejemplo
para que quede ms claro. Supongamos que tenemos la clase que
representa a las listas que responden a los mensajes tamao?, elemento
en la posicin X y agregar al final; y queremos tener la clase Pila
(imaginemos una pila de platos), donde slo se puede poner arriba y
sacar el de arriba. Si quisiramos implementar dicha clase, podramos
Figura 7. Jerarqua de herencia entre clases. Primero un ejemplo de una jerarqua con herencia simple, luego otro donde hay herencia mltiple. En general la herencia mltiple resulta en jerarquas ms rebuscadas.
vehculo
vehculoterrestre
auto vehculoanfibio
barco
vehculoacutico
nmero
entero
natural
fraccin
herencia simple herencia compuesta
01_Java_AJUSTADO.indd 21 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos22
utilizar la clase lista que ya tenemos y reutilizarla. Si heredamos de
lista, y hacemos que poner arriba use agregar al final, y sacar el de arriba use
elemento en la posicin X ms tamao?, ya tendramos todo resuelto.
Lamentablemente el resultado no sera una relacin de subtipado
entre la lista y la pila, dado que la pila tambin sera una lista (podra
responder a elemento en la posicin X), cosa que no correspondera con
el concepto de pila. Es claro que una lista y una pila no forman una
relacin de tipo, una pila no es una lista.
Figura 8. Herencia entre Lista y Pila. Observamos las dos alternativas para implementar una pila, la herencia y la agregacin.
sacar
elemento En
PILA
LISTA
poner
agregar
tamao
elementos
PILA LISTA
elemento En
agregar
tamao
sacar
poner
01_Java_AJUSTADO.indd 22 8/18/11 8:15 PM
-
www.redusers.com
Java 23
En general se considera mala prctica utilizar la subclasificacin
para reutilizar implementacin sin formar una relacin de subtipado.
Generalmente la tcnica que se utiliza para no crear ese tipo de
jerarquas mal aplicadas es la agregacin.
Debemos tener en cuenta que se llama agregacin cuando un objeto
utiliza a otro. Se dice que un objeto tiene o usa otro.
Veamos otro ejemplo: supongamos que tenemos Rectngulos y
Cuadrados, y queremos que respondan al mensaje rea?. Ambos tipos
son muy parecidos, podramos decir que un Cuadrado es un Rectngulo
con los lados iguales o tambin que un Rectngulo es un Cuadrado con
los lados desparejos. Podramos, entonces, elegir alguna de estas dos
jerarquas para reutilizar el comportamiento. Cul conviene elegir?
Viendo las diferencias entre los objetos, elegir heredar Rectngulo
de Cuadrado parece una opcin sencilla, solo hay que agregar un
Figura 9. Objetos que representan a un rectngulo y a un cuadrado. El rectngulo especializa al cuadrado agregando un colaborador extra para representar el lado distinto.
ladolado 2
RECTNGULO
area
lado
CUADRADO
area
En su mayora, si una clase hereda mtodos que no tienen ninguna relacin con ella, que no aplican y que
no forman parte de las responsabilidades que debera tener, entonces estamos frente a un mal uso
de la herencia. Debemos evitar este tipo de jerarquas dado que generan productos de mala calidad. La
forma correcta de aplicarlas es eliminando la herencia y utilizando la agregacin.
jerarQUa mal UtiliZada
01_Java_AJUSTADO.indd 23 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos24
colaborador interno lado2 y cambiar el comportamiento del mensaje
rea?. Detengmonos un momento a pensar, imaginemos que
necesitamos un Cuadrado, y que al ser el Rectngulo subclase de
Cuadrado, todo rectngulo es un cuadrado, de esta forma podramos
usar un rectngulo en su lugar. Suena lgico esto? Claramente no.
Veamos la otra opcin, si Cuadrado hereda de Rectngulo, usaramos
slo un lado y modificaramos rea?, o podramos hacer que ambos
lados sean iguales y no tendramos que modificar nada. Ahora si
necesitamos un Rectngulo y tenemos un Cuadrado, no hay problema,
dado que un cuadrado es un rectngulo vlido. Reutilizamos este
conocimiento y la jerarqua estar basada en una relacin de tipos.
Recordemos: siempre debemos preocuparnos de hacer que nuestras
jerarquas estn basadas en una relacin de tipos.
En el ejemplo anterior dijimos que un Cuadrado poda ir en lugar
de un Rectngulo. Formalmente quisimos decir que el Cuadrado poda
sustituir a un Rectngulo o, dicho de otra forma, que un Rectngulo
es sustituible por un Cuadrado. La herencia fomenta el polimorfismo,
porque generalmente los lenguajes tienen ciertas reglas que fuerzan
a que las subclases puedan sustituir a las superclases. Qu significa
sustituir? Significa que, cuando un objeto que usamos es sustituido
por otro, esperamos que este objeto nuevo nos requiera lo mismo o
menos y que nos d lo mismo o ms que el objeto que sustituy. De
esta forma nuestras expectativas y nuestras colaboraciones con este
objeto no se vern afectadas.
Herencia simple versus herencia mltiple
Si bien la mayora de los lenguajes orientados a objetos que se
basan en las clases utilizan herencia simple, hay algunos otros que
permiten heredar de muchas clases al mismo tiempo. El caso ms
famoso es el lenguaje C++. Por qu existe la herencia mltiple? La
herencia mltiple permite que las clases pertenezcan a distintas
jerarquas adquiriendo el conocimiento, o sea reutilizando cdigo, de
distintas clases. A primera vista nos puede parecer que es una ventaja
contra la herencia simple, pero generalmente pasa que las jerarquas
se deforman, y dejan de estar guiadas por relaciones de tipos para
01_Java_AJUSTADO.indd 24 8/18/11 8:15 PM
-
www.redusers.com
Java 25
pasar a estar guiadas por la reutilizacin de cdigo. De esta forma, en
su mayora terminan con complejas e inutilizables clases. Adems la
herencia mltiple plantea ciertos problemas de implementacin que se
desencadenan en errores molestos de corregir. El
principal problema es en qu orden se hereda, es
decir, qu clase tiene prioridad sobre otra, lo cual
lleva a que algunas clases oculten o sobrescriban
los mtodos de otras. Es difcil que el autor de
una jerarqua haya preparado el diseo de esta
para actuar junto con otra totalmente dispar,
creada por otra persona. La gente que trabaja con
este tipo de lenguajes es muy cuidadosa a la hora
de utilizar la herencia mltiple y en lo posible
tratan de evitarla. Por eso y por algunos otros
problemas, la mayora de los lenguajes opta por la herencia simple
(sumada a otros mecanismos) para la creacin de jerarquas de tipos.
Por qu objetos?Cuando nos encontramos frente a un problema o una situacin
que queremos entender, para luego resolver, creamos en nuestra
mente un modelo que lo representa. Un modelo no refleja totalmente la problemtica. Nosotros mismos, al crear el modelo, elegimos
enfocarnos en algunas caractersticas y dejamos otras de lado. Luego,
operamos sobre este y contraponemos los resultados con el problema
real. Es necesario tener en cuenta que, en base a las conclusiones que
nos encargamos de obtener, volvemos al modelo y lo ajustamos para
lograr mejores resultados la prxima vez.
Para no restringir el tipado a la herencia simple, subclasificando innecesariamente, se usan las inter-
faces (Java, las veremos ms adelante), los mixins (Ruby) o los traits (Smalltalk). Cada uno tiene
ventajas y desventajas, respecto de la herencia mltiple, que permiten reutilizar y el tipado.
ALTERNATIVAS A LA HERENCIA MLTIPLE
LA MAYORIA
DE LOS LENGUAJES
OPTA POR LA
HERENCIA
SIMPLE
01_Java_AJUSTADO.indd 25 8/29/11 8:12 AM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos26
Figura 10. El ciclo de modelado y cmo interviene el paradigma. De toda la informacin que da el problema real, parte se deja de lado explcitamente y se focaliza en otra.
PROBLEMAMODELOMENTE
+PARADIGMA
El paradigma de objetos es un filtro que se encuentra entre el
problema y el modelo, que polariza el entendimiento de la situacin
acomodndolo a sus conceptos. Afortunadamente, el paradigma de la
orientacin a objetos permite que la interpretacin entre la realidad, la
problemtica y el modelo sea muy fcil. Un objeto es tangible y es
fcilmente relacionado a un elemento del dominio del problema, la carga
mental que implica el pasaje del modelo al problema es imperceptible.
Esta es la gran ventaja frente a otros paradigmas de programacin, dado
que permite interpretar fcilmente la problemtica. Adems la
comunicacin entre individuos que se manejen tanto en el modelo
(programadores) como en la situacin de inters (clientes) es sencilla, ya
que se maneja el mismo idioma en ambos mundos. Se dice que entre el
modelo y el problema debe existir una relacin de isomorfismo.
Un isomorfismo es una relacin entre dos elementos cuando ambos
son indistinguibles, ambos cumplen las mismas propiedades y todo
lo que es cierto para uno lo es para el otro, del mismo modo todo lo
que es falso para uno lo es para el otro. Se dice que ambos elementos
son isomorfos entre s. Por ejemplo, si estamos en el mbito bancario,
tendremos un objeto Cuenta que representa una cuenta real en el
banco. Entonces cuando el cliente diga cuenta nosotros entenderemos
que se trata de un objeto de este tipo en forma inmediata. Y viceversa,
cuando nosotros hablemos de una Cuenta, el cliente comprender, sin
ningn inconveniente, que queremos decirle algo sobre una de ellas.
De este ejemplo podemos sacar algunas conclusiones; no puede haber
01_Java_AJUSTADO.indd 26 8/18/11 8:15 PM
-
www.redusers.com
Java 27
un elemento del modelo que represente a ms de un concepto del
dominio por modelar. Tampoco lo opuesto, que un concepto del
problema est representado por ms de un elemento del modelo.
Figura 11. En esta imagen vemos el isomorfismo entre el modelo y el problema (primer ejemplo). As como tambin los casos que debemos evitar (los siguientes).
PROBLEMAMODELO
La programacin orientada a objetos se basa en que todo es un objeto y en que estos se comunican me-
diante mensajes. Tiene poderosas ideas como el tipado y el polimorfismo. La mayora de la los lenguajes
utilizan las clases para tipar y la herencia para subtipar. Existen lenguajes con herencia simple y otros con
herencia mltiple, aunque tambin se utilizan otras alternativas para flexibilizar las jerarquas. Es importan-
te entablar un isomorfismo entre los elementos del dominio y los elementos del modelo que realizamos.
resUmen
01_Java_AJUSTADO.indd 27 8/18/11 8:15 PM
-
www.redusers.com
1. ProgramaCin oriEntada a obJEtos28
test de aUtOeValUaCin
1 Cules son los conceptos bsicos del paradigma?
2 Qu es el encapsulamiento y el ocultamiento de la informacin?
3 Qu beneficios traen el encapsulamiento y el ocultamiento de la informacin?
4 Para qu sirven los tipos?
5 Qu es el polimorfismo?
6 Defina herencia.
7 Diferencias entre el tipado y la clasificacin.
8 Para qu se utiliza la agregacin?
9 Qu condicin debe cumplir un modelo para ser una buena representacin?
10 Por qu es necesario utilizar objetos?
aCtiVidades prCtiCas
1 Ingrese a la direccin www.smalltalk.org/smalltalk/history.html y lea The Early History of Smalltalk de Alan Kay (slo en ingls).
2 Modele un tomo.
3 Disee una molcula como subclase de tomo.
4 Especifique una molcula como una agregacin de tomos.
5 Relacione los tipos Animal, Mamfero, Ave, Pingino, Cndor y Elefante en relaciones de subtipos.
Actividades
01_Java_AJUSTADO.indd 28 8/18/11 8:15 PM
-
Servicio de atencin al lector: [email protected]
Desde sus orgenes Java se ha difundido en diversos mbitos
con el afn de consagrarse como la gran plataforma que es
hoy. Antes de introducirnos por completo en la programacin
Java necesitamos conocer su historia y las fuerzas que guiaron
su creacin. Veremos tambin una introduccin a la forma
de trabajo que adoptaremos a lo largo del libro, as como un
breve vistazo a la tcnica de Test Driven Development en Java.
Iniciacin a Java
Historia .....................................30
Preparacin ..............................32
Eclipse IDE ..................................... 33
Test Driven Development ................. 36
Primeros cdigos .....................38
Resumen ...................................43
Actividades ...............................44
02_Java_AJUSTADO.indd 29 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA30
HistoriaEl lenguaje de programacin Java tiene sus orgenes en el ao
1991, cuando Sun empieza el proyecto Green. Este proyecto tena
como objeto controlar dispositivos hogareos, para lo que crearon un
lenguaje llamado Oak. Sun no tuvo xito, y no es hasta 1995 cuando el
nombre es cambiado a Java y se lanza al mundo.
Inicialmente, Java se lanz como un lenguaje cuyos programas
podan correr en cualquier plataforma. El slogan de Sun era write
once, run anywhere (escribir una vez, correrlo en cualquier parte).
Para lograr esto Java corre sobre una mquina virtual o un programa
que simula una mquina abstracta, la cual funciona aislando al
programa que corre sobre ella de los distintos hardwares y sistemas
operativos. De esta forma, para el programa que estamos utilizando, la
maquina donde corre es siempre igual.
James Gosling, padre de Java, lo hizo parecido a C++ para que
los programadores de este lenguaje se sintieran cmodos con Java y
optaran por l. Java ofreca a los programadores un lenguaje parecido
a C++ pero simplificado (por ese entonces Java no posea genricos)
y tena manejo automtico de memoria, es decir, que el programador
no es el responsable de liberar la memoria que no usa. De esto se
encarga una funcin de la mquina virtual llamada recolector de basura (garbage collector). El garbage collector es un proceso que se ejecuta
paralelamente al de la aplicacin y se encarga de liberar la memoria
ocupada por los objetos que no son utilizados por el sistema.
Java siempre fue un lenguaje que triunf gracias a Internet. En un
comienzo lo hizo a travs de las applets, pequeas aplicaciones
embebidas en las pginas web que se ejecutan en los navegadores. En
ese entonces las applets no triunfaron dado que competan con la
tecnologa Shockwave, ahora conocida como Flash. A partir de 1997,
En www.java.com/en/javahistory/timeline.jsp podemos ver una lnea temporal de los eventos im-
portantes en la historia de Java y de aquellos del mundo tecnolgico que los acompaaron. La rpida
evolucin del lenguaje y de las distintas tecnologas que se crearon a partir de l son evidentes.
Lnea de tiempo de Java
02_Java_AJUSTADO.indd 30 8/18/11 8:26 PM
-
www.redusers.com
JAVA 31
Java empez a migrar hacia los servidores. Se lanz la primera versin
de los Servlets, componentes Java que corren en los servidores. En
esta rea es donde este lenguaje se impuso y brill. Las tecnologas
competidoras de ese entonces eran CGI, ASP y PHP. Java super a la
competencia y se posicion como la tecnologa por excelencia para las
aplicaciones web empresariales. Desde entonces Java es una de las
tecnologas ms importantes, disponible en casi todas las plataformas.
Se encuentra en las desktops (aplicaciones de escritorio), el los
servidores (sirviendo pginas web y aplicaciones web) y hasta en los
telfonos celulares (versin micro de Java).
Ahora Java forma parte de uno de los sistemas operativos para
celular ms famosos y pujantes que hay en la actualidad: Android.
Este sistema operativo fue creado por los desarrolladores del
famoso buscador Google; est basado en Java, por lo cual todas las
aplicaciones para los celulares con Android estn hechas utilizando
este lenguaje. No slo existen celulares con el sistema operativo
Figura 1. Duke, la mascota de Java en los comienzos del lenguaje, fue muy popular y atrayente. Se lo poda ver en cada artculo, libro o sitio relacionado con este lenguaje.
02_Java_AJUSTADO.indd 31 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA32
Android, sino smartphones, netbooks y tablets que tambin lo utilizan.
En el 2009 Oracle, gigante de las bases de datos, compr Sun y, por lo
tanto, tambin asumi la responsabilidad sobre la evolucin de Java.
El futuro de Java es prometedor, ya que esta respaldado por gigantes
de la informtica y por una enorme comunidad de programadores.
PreparacinPara poder programar en Java, compilar y correr los programas,
necesitaremos instalar el kit de desarrollo. Podemos conseguirlo en
www.oracle.com/technetwork/indexes/downloads/index.html.
Debemos asegurarnos de descargar la ltima versin del SDK,
Software Development Kit (Kit de Desarrollo de Software), y no el JRE,
Java Runtime Environment (Entorno de Ejecucin Java). El primero nos
permitir crear y ejecutar aplicaciones Java, el segundo solamente
correrlas. El ejecutable que descargaremos nos guiar durante la
sencilla instalacin. Finalizada esta tendremos a nuestra disposicin
los distintos programas para producir y ejecutar aplicaciones Java.
El compilador correspondiente a este lenguaje: javac.exe (el cual se
encarga de producir los binarios Java a partir del cdigo fuente), el
intrprete java.exe (que ejecuta un programa Java) y el documentador
javadoc.exe (el que se encargar de generar la documentacin necesaria
para las clases) entre otros. Tambin encontraremos el profiler
jvisualvm.exe, una herramienta que nos permitir medir la performace
(tiempo de ejecucin y uso de memoria) de cualquier programa Java
de una forma sencilla y visual. As mismo contaremos con las libreras
base que trae Java por defecto y el cdigo fuente de estas, por si
queremos ver cmo funcionan internamente.
Tanto en la pgina donde descargamos el SDK cmo dentro de l, encontraremos ejemplos y tutoriales
que nos ayudarn a profundizar los conocimientos que incorporaremos a lo largo del libro. Vale la pena
mirar los ejemplos incluidos y probarlos, ya que utilizan muchas clases importantes de la librera base.
tutoriaLes y eJempLos
02_Java_AJUSTADO.indd 32 8/18/11 8:26 PM
-
www.redusers.com
JAVA 33
Eclipse IDEYa estamos en condiciones de empezar a programar nuestros
primeros cdigos en Java. Podramos comenzar escribiendo con
cualquier editor de texto y luego utilizar el compilador, programa que
toma un archivo con cdigo fuente, lo transforma y genera otro que
entiende la virtual machine (ms conocida como mquina virtual o tambin VM). Pero esta forma de trabajar solamente sirve para algunas
pruebas sencillas, no slo es apta para realizar desarrollos
profesionales. Por lo tanto tambin necesitaremos descargar un
entorno de trabajo. Utilizaremos el IDE, Integrated Development
Environment (Entorno de Desarrollo Integrado) llamado Eclipse.
En www.eclipse.org encontraremos los enlaces para descargar el
entorno de desarrollo ms famoso. Hallaremos los distintos sabores
de Eclipse para poder desarrollar en diversas tecnologas desde Java,
C++ y PHP hasta Javascript. All tambin encontraremos diversas
herramientas para agregarle a nuestro IDE.
Figura 2. En esta imagen podemos ver la vista de Java, se trata de la vista principal de Eclipse y es en la que ms se trabaja.
02_Java_AJUSTADO.indd 33 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA34
Eclipse es el entorno de desarrollo Java por excelencia. Fue concebido
como una plataforma para la creacin de IDEs, cuya expansin puede ser
realizada mediante plugins. Inicialmente los lenguajes soportados eran
Java y luego C++. Actualmente existe una amplia variedad de plugins
para casi todos los lenguajes, y los lenguajes nuevos generalmente
utilizan Eclipse dado que provee la infraestructura bsica para la
creacin del IDE que requieren. Nosotros descargaremos la versin para
Java Developers. El archivo posee una extensin .ZIP (archivo
comprimido), que descomprimiremos en el lugar que queramos. Luego,
no se requiere ms instalacin y, una vez descomprimida la carpeta,
ejecutaremos el archivo llamado eclipse.exe (nos conviene crear un acceso
directo desde el escritorio para futuros usos).
Lo primero que veremos ser una ventana que nos preguntar
donde queremos guardar el workspace (rea de trabajo). El workspace
es un directorio donde Eclipse salvar los distintos proyectos en los
que trabajemos. La pantalla de bienvenida nos recibe con ejemplos y
Figura 3. Vista de Java Browsing focaliza la atencin en el rea de edicin y en la navegacin de paquetes, clases y mtodos.
02_Java_AJUSTADO.indd 34 8/18/11 8:26 PM
-
www.redusers.com
JAVA 35
tutoriales, as como tambin con una visita a las caractersticas que
ofrece la herramienta. Si elegimos ir al workbench (mesa de trabajo)
nos encontraremos con la vista Java. Eclipse tiene el concepto de vistas
para trabajar, cada vista es una configuracin de paneles y ventanas
que permiten al usuario enfocarse en una determinada tarea.
Para trabajar con Java tenemos tres vistas principales, la vista de
Java, la vista de Java Browsing y la vista de Debug.
En la vista de Java encontramos un explorador de paquetes (Pakage Explorer), fuentes Java y libreras del proyecto. Incluye tambin el
panel de errores (Problems), donde Eclipse nos informar de aquellos
relacionados con el proyecto (libreras que faltan, errores sintcticos en
los cdigos fuente, etc.). El panel del esquema (Outline) de las clases y
paquetes tambin est presente. Podemos darnos cuenta de que la
parte central de la vista est destinada a la edicin de cdigo.
La segunda vista, la de Java Browsing, est enfocada en el trabajo con
las clases y nos recuerda al entorno de trabajo clsico de Smalltalk. En
Figura 4. La vista de Debug permite que seamos testigos de qu ocurre durante la ejecucin de nuestro cdigo.
02_Java_AJUSTADO.indd 35 8/18/11 8:26 PM
-
www.redusers.com
2. iniciacin a java36
esta vista nos encontramos con paneles en la parte superior, y el resto
del espacio es destinado a la edicin de los cdigos fuente. Los cuatro
paneles son: el de proyecto (Proyects), el de paquete (Packages), el de
clases (Types, que presenta las distintas clases dentro del paquete) y
el de miembros (Members, que se encarga de
mostrar los elementos que conforman la clase
seleccionada en el panel anterior).
Finalmente, la vista de Debug, se activa
cuando la ejecucin (lanzada en modo Debug)
alcanza un breakpoint (punto de frenado) en
el cdigo. En ella podemos hacer avanzar la
ejecucin, detenerla, inspeccionar qu objetos
estn siendo usados en un determinado
momento y hasta modificarlos. Debemos tener
en cuenta que esta es la vista que ms usaremos
cuando queramos determinar en forma exacta qu est haciendo el
cdigo y por qu no hace lo que nosotros queremos.
Test Driven DevelopmentA lo largo del libro trabajaremos utilizando JUnit. JUnit es un
herramienta (que usaremos a travs de Eclipse) para trabajar aplicando
una metodologa conocida como Test Driven Development (TDD)
o Desarrollo Guiado por Pruebas. TDD es un estilo para plantear
el desarrollo de un software, que se basa en el hecho de que el
programador vuelca su conocimiento sobre determinado problema en
forma de aserciones. El programador debe codificar lo necesario para
validar estas aserciones que enunci anteriormente. Cuando todas sean
Si estamos posicionados dentro de un mtodo y presionamos las teclas CTRL y la BARRA ESPACIADORA,
se accionar el autocomplete. Esta funcionalidad, dependiendo del contexto, nos muestra qu elementos
tenemos a disposicin, ya sean clases, atributos o mtodos (de instancia y estticos). Tambin nos da
ms informacin sobre los mtodos, como su tipo de retorno y los parmetros que acepta.
Autocomplete en eclipse
Usar EclipsE
agiliza mUcha El
dEsarrollo ya qUE
intEgra mUchas
hErramiEntas
02_Java_AJUSTADO.indd 36 8/29/11 8:15 AM
-
www.redusers.com
JAVA 37
vlidas debe seguir explorando el dominio del problema agregando ms
aserciones. Cuando alguna resulte falsa, debe codificar para hacerla
verdadera. Finalmente, el programador refactoriza el cdigo y lo repara
buscando abstracciones, de forma de simplificarlo pero procurando
que el comportamiento no cambie; las aserciones
deben continuar siendo vlidas.
TDD ofrece una forma de abordar el problema
de manera exploratoria, usando ejemplos
(aserciones). Esto es ms fcil que tratar de
resolver el problema en abstracto y para todos los
casos. As mismo TDD hace que el programador
sea el usuario de su propio cdigo primero,
logrando que l mismo pueda darse cuenta de cun
amigable y fcil de usar es el API desarrollado,
tambin facilita el mantenimiento del software. El
software, por su naturaleza, est en constante cambio. Estos cambios
tienen que ser codificados e introducidos en el cdigo existente sin
afectar involuntariamente al resto de las funcionalidades del sistema.
As, los test sirven como red de seguridad, dado que podremos verificar
rpida y sistemticamente el correcto funcionamiento de la aplicacin.
JUnit es la herramienta clsica, originaria de Smalltalk, para realizar
TDD en Java (otra conocida es TestNG). Aparece de la mano de Kent
Beck, el creador del Extreme Programming (Programacin Extrema),
y luego es migrada a Java y a casi todo lenguaje existente.
En JUnit se definen casos de prueba, representados por una clase que
contiene mtodos de prueba. Cada uno de estos mtodos tiene el objetivo
de probar uno o algunos ejemplos y aserciones. JUnit luego ejecuta los
casos y genera un reporte que informa cules pasaron exitosamente
y cules fallaron o dieron error. En Eclipse contamos con un plugin ya
instalado que nos permite utilizar JUnit con unos pocos clics.
BDD (desarrollo guiado por comportamiento) es una extensin a TDD que hace foco en escribir los test en
un lenguaje cercano al natural, con las especificaciones obtenidas del cliente y las que este puede entender.
De esta forma, la brecha entre el programador y el cliente se reduce, ya que comparten un mismo lxico.
Bdd o Behavior driven deveLopment
los tEsts
forman Una rEd
dE sEgUridad
al momEnto dE
cambiar El cdigo
02_Java_AJUSTADO.indd 37 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA38
Primeros cdigosVamos a trabajar en nuestros primeros cdigos en Java. Para eso
necesitamos crear un proyecto donde escribirlos. Ser necesario que
iniciemos Eclipse y posteriormente hacer clic en el men File o sobre
el botn New que se encuentra en la barra de herramientas. Tambin
podemos hacer clic con el botn derecho del mouse en el Package
Explorer y seleccionar la opcin New/Java Project.
Debemos elegir un nombre para el proyecto y escribirlo en la
ventana adecuada, luego presionar sobre Finish.
Con esto conseguiremos tener un proyecto y dentro de l la
carpeta src que ser donde alojaremos los archivos fuentes. En forma
predeterminada Eclipse agrega como dependencia las libreras que
vienen con la instalacin de Java. El paso siguiente es crear nuestro
primer caso de prueba (test case). En Java todo cdigo tiene que estar
contenido en una clase, nuestro test case no ser la excepcin.
Para crear un test case, en el men File seleccionamos New/JUnit
Test Case, elejimos la versin de JUnit que usaremos (JUnit 4), un
nombre de package (red.user.java) y un nombre para el Test Case
(UnitTests). Luego presionamos el botn Finish.
Eclipse alertar que no tiene la librera incluida y preguntar si
queremos agregarla, seleccionamos la opcin OK.
Figura 5. Pantalla de creacin de proyectos Java. De forma sencilla a travs de las opciones que ofrece el asistente, podemos controlar cada parmetro de la creacin.
02_Java_AJUSTADO.indd 38 8/18/11 8:26 PM
-
www.redusers.com
JAVA 39
Figura 6. La pantalla de
creacin de test cases nos permite elegir la versin de
JUnit con la que queremos trabajar
y la creacin de mtodos auxiliares
para los test.
Tenemos ya nuestra primera clase, que es un test case. Ahora vamos a
hacer una simple prueba, veamos si efectivamente cuando sumamos uno
ms dos obtenemos tres. Para esto debemos escribir el siguiente cdigo:
package red.user.java;
import org.junit.Test;
import static org.junit.Assert.*;
public class Cap2UnitTests {
}
@Test public void testAdd() {
assertEquals(1+2, 3);
}
}
En www.junit.org podemos encontrar ms informacin sobre JUnit, con documentacin y ejemplos que
nos ayudarn a mejorar la forma en que hacemos los test. La seccin de preguntas y respuestas es un
buen punto de partida para resolver todas las dudas que tengamos sobre los test. Tambin podemos
bajar el cdigo fuente y aprender del funcionamiento interno de JUnit.
Junit
02_Java_AJUSTADO.indd 39 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA40
Figura 7. En esta imagen vemos como luce nuestro cdigo en Eclipse, notemos los distintos estilos que utiliza el IDE para diferenciar los elementos que conforman el cdigo escrito.
La palabra class seguida del nombre de la clase indica el inicio de
esta. Luego tenemos el mtodo, cuyo nombre es testAdd, que no
devuelve ninguna respuesta (void) y que est marcado como un
mtodo de test (anotacin @Test). En el cuerpo del mtodo tenemos
una asercin que dice: Son iguales 3 y 1+2?. Para saber si es as,
vamos a ejecutar el test y ver qu resulta.
Presionamos el botn derecho sobre la clase y seleccionamos Run
As/JUnit Test. Aparece entonces el llamado runner de JUnit que nos
mostrar una barra verde si todo sali bien o roja si algo fall.
Si nos dirigimos con nuestro navegador al sitio web que se encuentra en la direccin www.javaworld.
com encontraremos abundante informacin sobre este lenguaje. All hallaremos las ltimas noticias,
artculos, tutoriales y tambin enlaces a distintos blogs que nos sern de gran utilidad y nos mantendrn
actualizados sobre los temas ms calientes del ambiente Java.
Java WorLd
02_Java_AJUSTADO.indd 40 8/18/11 8:26 PM
-
www.redusers.com
JAVA 41
Figura 8. Al correr un test case el resultado se ve reflejado en el panel del runner de JUnit. Si la barra es de color verde, todos los test pasaron, si es roja, significa que alguno fall.
Ahora investiguemos con ms profundidad qu hemos escrito y
cmo es que funciona:
package red.user.java;
Todo archivo fuente Java define una clase, toda clase pertenece a
un paquete. Un paquete es una forma de agrupar las clases en grupos
que tengan cierto sentido. Se estila que el prefijo del paquete sea el
dominio web de la organizacin a la que pertenece en orden inverso
Los lenguajes que no utilizan este mecanismo para administrar la memoria, como C++, requieren que el
programador, manualmente libere la memoria que no se va a utilizar ms. Esta tarea manual es la cau-
sante de muchos errores en los programas y del consumo de mucha memoria. Aquella que no se libera,
pero tampoco se usa, se conoce como memory leak.
GarBaGe coLLector
02_Java_AJUSTADO.indd 41 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA42
(ejemplo: com.google). En nuestro cdigo definimos el paquete red,
dentro de l el subpaquete user y dentro de ste el subpaquete java.
Java fuerza a que cada paquete est representado por un directorio en
el sistema de archivos. En nuestro caso Eclipse automticamente crea
un directorio red, dentro de l otro llamado user, adentro uno llamado
java y, finalmente, dentro de java el archivo Cap2UnitTests.java.
import org.junit.Test;
import static org.junit.Assert.*;
Estas sentencias indican que queremos importar la clase Test,
localizada en el paquete org.junit y tambin todos los mtodos estticos
(que pertenecen a la clase y no a las instancias de ella) de la clase
Assert. En Java los mtodos conocidos como estticos, veremos ms
adelante, son distintos de los de instancias.
public class Cap2UnitTests
Indica que estamos definiendo la clase Cap2UnitTests. Todo lo que est
entre la primera { y la ltima } corresponde con el cuerpo de la clase.
@Test public void testAdd()
Aqu definimos el mtodo que ejecutarn las instancias de la
clase Cap2UnitTests cuando se les enve el mensaje testAdd. Primero
tenemos la anotacin @Test que indica que el mtodo es un test. Las
anotaciones son un artefacto de Java para agregar informacin sobre
Es muy interesante tener en cuenta que hasta las versin 4, JUnit utilizaba la herencia para definir un
test case basndose en la clase TestCase. Recordemos que dicha clase se encargaba de realizar la
definicin de los distintos mtodos de asercin. Los mtodos de test se reconocan dado que requeran
obligatoriamente que tuvieran el prefijo test. En las nuevas versiones de Junit esto se flexibiliz al hacer
uso de las anotaciones, de esta forma tenemos ms flexibilidad a la hora de trabajar.
versiones anteriores de Junit
02_Java_AJUSTADO.indd 42 8/18/11 8:26 PM
-
www.redusers.com
JAVA 43
los distintos elementos del lenguaje, llamamos a esta informacin
metadata. Metadata significa datos sobre los datos, datos que dicen
algo respecto de los datos. Meta significa hablar en un nivel superior.
La anotacin dice que el mtodo es un test, no dice nada de lo que
hace, de eso habla el mtodo en s. Luego el mtodo esta marcado
como pblico, lo que significa que puede ser invocado (o sea que se les
puede mandar el mensaje a las instancias) desde instancias de otras
clases. Como ya dijimos anteriormente, el mtodo no devuelve ninguna
respuesta, de ah que est marcado como void. Al igual que en la clase,
el cuerpo del mtodo esta demarcado con las llaves.
assertEquals(1+2, 3);
Finalmente tenemos la asercin. En ella encontramos la invocacin
al mtodo esttico (perteneciente a la clase Assert, recordemos el
import static) assertEquals. Este mtodo recibe dos parmetros que
compara para saber si son iguales o no. En este caso recibe el resultado
de evaluar 1+2 (en Java esto no es un envo de mensaje, sino que lo
ejecuta directamente la mquina virtual) y el nmero 3. En Java, as
como en muchos otros lenguajes, se evalan primero los parmetros y
luego con los resultados se enva el mensaje.
A travs de este captulo pudimos conocer la historia de Java as como tambin algunas circunstancias
que rodearon su aparicin. Aprendimos los alcances de este lenguaje y vislumbramos el potencial que
alcanza el tope de las grandes empresas desarrolladoras de software. Para continuar analizamos las
caractersticas del entorno de desarrollo con la integracin de Eclipse y lo utilizamos para crear nuestra
primera aplicacin, de esta forma, nos acercamos a la programacin con Java.
resumen
02_Java_AJUSTADO.indd 43 8/18/11 8:26 PM
-
www.redusers.com
2. iniciAcin A JAVA44
test de autoevaLuacin
1 Qu es una mquina virtual?
2 Por qu triunf Java frente a otras tecnologas?
3 Cul es la diferencia entre el JRE y SDK?
4 Qu es y para qu sirve Eclipse?
5 Qu es TDD?
6 Cul es el principal beneficio de desarrollar utilizando TDD?
7 Que se utiliza JUnit?
8 Cmo se define un test case en JUnit?
9 De qu manera se define un test en JUnit?
10 En qu clase estn definidas las aserciones?
actividades prcticas
1 Investigue qu errores nos muestra Eclipse (en el panel de Problems, al salvar el cdigo fuente) cuando borra distintas partes del cdigo.
2 Trate de utilizar el compilador del SDK para el test que realizamos.
3 Pruebe ejecutar el resultado de la compilacin con el comando java. Le dar error.
4 Cambie el test case que ya tiene, agregando nuevos mtodos de test con diferentes aserciones. En el cdigo fuente, dentro del mtodo presione CTRL + BARRA ESPACIADORA para hacer aparecer el autocomplete y as ver las distintas clase de aserciones que hay.
5 Haga doble clic sobre el costado gris izquierdo del mtodo, aparecer un circulo azul, esto indica un breakpoint. Ejecute el test case en modo debug, eligiendo Debug en vez de Run Vea qu sucede.
Actividades
02_Java_AJUSTADO.indd 44 8/18/11 8:26 PM
-
Servicio de atencin al lector: [email protected]
La sintaxis es el conjunto de reglas que dan como resultado un
programa bien escrito. Estas reglas describen qu elementos
estn permitidos en determinados contextos y cul es la
relacin entre ellos. En este captulo nos encargaremos de
conocer y analizar la sintaxis bsica que necesitamos para
dominar la programacin en Java y de esta forma comenzar a
dar los primeros pasos en este interesante mundo.
Sintaxis
Palabras claves .........................46
Ciclos ........................................52
Declaraciones, expresiones,
sentencias y bloques ................58
Variables.......................................... 58
Sentencias ....................................... 60
Otras estructuras .....................60
Tipos primitivos y literales ......67
Operadores ...............................70
Paquetes ..................................72
Resumen ...................................73
Actividades ...............................74
03_Java_AJUSTADO.indd 45 8/18/11 8:37 PM
-
www.redusers.com
3. sintaxis46
Palabras clavesLas palabras claves o reservadas son palabras que Java no permite
que los programadores utilicen libremente en cualquier parte del
cdigo (por ejemplo, los nombres de variables), sino que tienen un
propsito determinado y un contexto especfico. Eclipse nos indicar
que una palabra est reservada porque estar resaltada con un color
distinto del texto normal. A continuacin encontraremos el listado de
palabras claves, su explicacin y uso:
abstract: se utiliza en clases y mtodos para indicar que son abstractos. Debemos tener en cuenta que en las clases esto significa
que sirven para formar una jerarqua y no pueden tener instancias.
En los mtodos sirve para indicar que la jerarqua que tiene
responde al mensaje, pero no define cdigo alguno.
assert: se utiliza para enunciar condiciones que se deben cumplir durante la ejecucin. No confundir con las aserciones de JUnit.
boolean: se encarga de representar al tipo primitivo booleano. Las variables de este tipo no son objetos y los nicos valores que
pueden tomar son true (verdadero) y false (falso).
break: es una etiqueta que se utiliza para salir de la ejecucin de los ciclos (for, while, do while) y de las estructuras switch (ambas
las veremos en detalle ms adelante).
byte: representa el tipo primitivo de nmeros de 8 bits, entre -128 y 127. Lo valores de este tipo no son objetos.
case: etiqueta usada en las estructuras switch para indicar un caso. catch: se utiliza en conjunto con la etiqueta try para indicar que
se espera una excepcin (las veremos ms adelante) en el cdigo
envuelto en la estructura del try.
Es interesante recordar que toda variable en el lenguaje de programacin Java tiene un valor por defecto
al momento de su creacin, de esta forma nunca obtendremos una variable vaca al momento de crearla.
En este sentido, los tipos primitivos numricos y carcter se inicializan con el valor 0 mientras que los
datos que corresponden al tipo denominado boolean se inicializan con el valor false. Por otra parte,
cualquier referencia a objeto se inicializa con el valor null.
Valores por defecto
03_Java_AJUSTADO.indd 46 8/18/11 8:37 PM
-
www.redusers.com
Java 47
char:seencargaderepresentareltipoprimitivodeloscaracteres.LasvariablesquecorrespondenaestetiponosonobjetosydeestaformapuedencontenercualquiercarcterUnicode.
class:defineelcomienzodeladeclaracindeunaclase. continue:aligualqueelbreak,esunetiquetaqueseutilizaenlos
ciclosysirveparahacerqueseinterrumpalaejecucindelcdigodelaiteracinactualdelcicloyquecontineconlasiguiente.
default:puedeserutilizadaparadefinirunalaaccinpordefectoenlasestructurasswitch.
do:debemostenerencuentaqueseutilizaencombinacinconelwhileparaformarlaestructuradeciclodowhile.
double:representaeltipoprimitivodelosnmerosdepuntoflotantededobleprecisin(64bits)definidosenelestndarIEEE 754.
else:seencargaderepresentarelcaminoalternativoenunatomadedecisin,seutilizaenconjuntoconelllamadoif.
enum:nospermitedeclararuntipoenumerado,clasesquetienenunnmerofijoydefinidodeinstanciasnombradas.
extends:seutilizaparaindicarqueunaclaseheredadeotra.Sinoseutiliza,pordefectotodaclaseheredadelaclaseObject.Tambinseutilizaparadeclararqueunainterfazextiendeotra(herenciaentreinterfaces).
final:esunmodificadorquepuedeaplicaraclases,mtodosvariablesyargumentos,ypuedetenerunsignificadodistintoencadacaso.Enlasclasessignificaquesepuedeextenderheredando.Encasodelosmtodos,quelassubclasesdelaclasequelocontienenopuedenredefinirlo.Enlasvariables(tantolasdeinstanciacomolasdeclase,ascomoenlasdefinidasenelcuerpodelosmtodos)significaquesepuedeasignarvalorslounavez.Finalmente,enelcasodelosargumentosdelosmtodos,quieredecirqueesavariablenosepuedeescribir(reasignarleunvalornuevo).
finally:recordemosqueseseusaenconjuntoconlaestructuratry,yseencargadeespecificarunbloquedecdigoqueseejecuta,sos,alfinalizarlaejecucindelbloquetry.
float:representaaltipoprimitivodelosnmerosdepuntoflotantedesimpleprecisin(32bits)definidosenelestndarIEEE 754.
Las paLabras
reservadas
no se pueden
utiLizar
Libremente
03_Java_AJUSTADO.indd 47 8/31/11 5:04 PM
-
www.redusers.com
3. sintaxis48
for: es la etiqueta que define a la estructura de ciclo ms usada. if: especifica una bifurcacin en la ejecucin del cdigo guiada
por una condicin. Si la condicin en verdadera (true) entonces se
ejecuta el cuerpo del if, si no se lo saltea.
implements: se trata de la manera de indicar que una clase implementa (hereda) de una o varias interfaces. La clase est
obligada a implementar los mtodos definidos por las interfaces
que utiliza (a menos que sea una clase abstracta, en cuyo caso las
encargadas sern las subclases que corresponden).
import: declara el uso (importacin) de clases y paquetes en un cdigo fuente. Mediante el agregado del modificador static, tambin
se pueden importar mtodos estticos de una clase.
instanceof: instruccin que sirve para preguntar si un objeto es instancia de una determinada clase (o superclase) o interfaz. El
resultado que se presenta es el valor true o false.
int: representa el tipo primitivo de nmeros de 32 bits, entre -2147483648 y 2147483647. Lo valores de este tipo no son objetos. interface: especifica el comienzo de la definicin de una interfaz. long: se encarga de representar el tipo primitivo de nmeros
de 64 bits, se encuentran entre -9223372036854775808 y
9223372036854775807. Lo valores de este tipo no son objetos.
native: modificador de mtodo que indica que este no est implementado en Java sino en otro lenguaje, generalmente en C++. Se
utiliza para hacer que Java se comunique con el exterior de la mquina
virtual (por ejemplo, para acceder al sistema de archivos o a la red).
new: es el operador de creacin de instancias. Se utiliza junto con el nombre de la clase no abstracta que se quiere incluir en la creacin
de la instancia y los parmetros necesarios para la inicializacin de
esta. Como resultado se obtiene una nueva instancia de la clase.
Tengamos en cuenta que esta tcnica es muy utilizada para cuando queremos acceder a enviar mensajes
a un objeto en una condicin, pero no sabemos si la referencia esta apuntando correctamente (o sea,
no utilizamos el valor null en esta operacin). Recordemos que la estructura que corresponde es la que
mencionamos a continuacin: if(referencia != null && referencia.hayQueSeguir()).
short circuit logic
03_Java_AJUSTADO.indd 48 8/18/11 8:37 PM
-
www.redusers.com
Java 49
package:instruccinquedefineaqupaquetepertenecelaclase.EnJavalaestructuradepaquetestienequecoincidirconlaestructuradedirectorios.
private:modificadorqueaplicaaclases,mtodosyatributos(deinstanciaydeclase).Indicaculeselniveldeaccesoalelemento.Aplicadoaunaclase(solamenteparaclasesdefinidasdentrodeclases)indicaquesoloselapuedeutilizardentrodelaclasequeladefini.Enmtodos,indicaquesoloselospuedeinvocardesdeotrosmtodosdelaclasequelosdefine.Enlosatributos,significaquenopuedenseraccedidos,salvoporlosmtodosdefinidosenlaclasequelosdefine.Tantoenelcasodelosmtodoscomoeneldelosatributos,nopuedenseraccedidosporotrasclases,nisiquieraporsubclasesdelaclasequeloscontiene.
protected:aligualqueprivate,esunmodificadordeaccesoyaplicaalosmismoselementos,conladiferenciaqueestepermitequeloselementosseantambinaccedidosporsubclases.
public:esunmodificadordeaccesoqueindicaqueelelementoencuestinespblicoypuedeseraccedidoporcualquiercdigo.Aplicaaclases,mtodosyatributos.
return:eslainstruccinqueindicaqueseterminala