0 calificaciones0% encontró este documento útil (0 votos) 54 vistas39 páginasJava Desde Cero PDF
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
desde cero
Programacién orientada a objetos + Conoapio de clases
con Java + Interpretacion de cdédigo + Excepciones
y genéricos + Maneio de errores + Librerias base
EIJava desde cero
Ignacio Vivona
Desde Cero
FORMATO: 19x 15m
PAGINAS: 192
Copyright © MMIXIV. Es una publicacién de Fox Andina en coedicién con DALAGA S.A. Hecho el depésito que
marca la ley 11723. Todos los derechos reservados. Esta publicacién no puede ser reproducida ni en todo
nien parte, por ningiin medio actual o futuro sin el permiso previo y por escrito de Fox Andina S.A. Su infrac:
cidn esta penad por las leyes 11723 y 25446. La editorial no asume responsabilidad alguna por cualquier
consecuencia derivada de la fabricacién, funcionamiento y/o ullizacién de los servicios y productos que se
deseriben y/o analizan, Todas las marcas mencionadas en este libro son propiedad exclusiva de sus respec:
tivos duefios. Impreso en Argentina. Libro de edicién argentina. Primera impresién realizada en Sevagrat,
Costa Rica $226, Grand Bourg, Malvinas Argentinas, Pcia. de Buenos Aires en Vl, MMXWV.
ISBN 978-987-1949-68-7
Vivona, Ignacio
Java desde cero / Ignacio Vivona ; coordinado por Gustavo Carballo.
la ed, - Ciudad Auténama de Buenos Aires : Fox Andina; Buenos Aires: Dalaga, 2014.
192 p. ; 19x15 cm. - (Desde cero; 38)
ISBN 978.987-1949.68.7
1. Informatica. |, Carballeiro, Gustavo, coord. I. Titulo
DD 005.3
>> [Link]EN NUESTRO SITIO PODRA ACCEDER AUNA PREVIEW DIGITAL DE CADA LIBRO Y TAMBIEN
OBTENER, DE MANERA GRATUITA, UN CAPITULO EN VERSION PDF, ELSUMARIO COMPLETO
EIMAGENES AMPLIADAS DE TAPA Y CONTRATAPA.
RedUSERS @[Link]
Meee setae uk Meche sear ee neat eee yes att
Ce ene ker el uence eet ici
Pie eus red ctooen
Ea"
"A ARGENTINA ff *# VALIDO EN TODO EL MUNDO
&
#5010 VALID EN LAPRELIMINARES
EI libro de un vistazo
A lo largo de esta obra conoceremos las técnicas y herramientas
indispensables para comenzar a programar en Java. Comenzaremos con los
conceptos fundamentales de la programacién orientada a objetos, el disefio
y el desarrollo de software. Luego, iremos exponiendo los procedimientos
con cédigo fuente de ejemplo y diagramas conceptuales.
*o
Dore RAZ
Antes de introducirnos por completo
en la programacién Java, necesitamos
conocer su historia y las fuerzas que
guiaron su creacién. En este primer
capitulo veremos también una introduccién
ala forma de trabajo que adoptaremos
alo largo det libro y conoceremos
la técnica Test Driven Development.
* “ee
La sintaxis es el conjunto de reglas
que dan como resultado un programa
adecuadamente desarrollado.
Describen que elementos estan
permitidos en determinados contextos
y como se relacionan. En este capitulo,
cconoceremos la sintaxis basica necesaria
para dominar la programacién en Java.
>> [Link]
* ve’
Las clases son los moldes para la
creacién de objetos, ya que definen
la forma y el comportamiento de las
instancias creadas. A lo largo de
este capitulo, veremos cémo se
crean y como se definen sus atributos
y métodos.
*Ag Yaa
eas
Serre ty
Existen mecanismos para reutilizar
cédigo sin caer en las trampas de
la herencia multiple. Un ejemplo son
las interfaces. Al terminar este tema,
conoceremos estructuras de cédigo
{que nos seran utiles para realizar
el desarrollo de nuestras aplicaciones:
las enumeraciones.JAVA DESDE CERO
*O wee
PCa nace ed
Cuando nuestro programa esta siendo
elecutado y ocurre alguna situacién
inesperada, el sistema lo notifica
mediante eventos denorninados
excepciones. Las excepciones son
la forma de avisar y detectar errores en
la ejecucién o acontecimientos extraiios.
xO vee
Gass
Quien desea aprender Java debe conocer
las clases e interfaces que se proven
desde la instalacién. No solo se ahora
trabajo al utilizar algo ya existente, sino
que el cédigo puede comunicar mejor
su propésito a otros programadores,
ya que usa elementos estandares.
INFORMACION COMPLEMENTARIA
Evens
Muchos sistemas y librerias requieren
de una gran cantidad de informacion
suplementaria al cédigo para poder
funcionar. Las anotaciones son un
mecanismo para poder unificar toda esta
informacion en una forma estandarizada
*AD ,,
Peco ety
wee
aS)
Para finalizar el eprendizaje, debemos
saber de qué manera combinar los,
elementos del lenguaje para construir
programas claros, extensibles y flexibles.
Eneste apéndice, conoceremos
ciertos conceptos de disefio
que nos resultaran muy tiles,
Alo largo de este manual, podré encontrar una serie de recuadras que le brindaran informacién
ccomplementaria: curiosidades, trucos, ideas y consejos sobre los temas tratados. Para que pueda
distinguirlos en forma més sencilla, cada recuadro esta identiicado con diferentes iconos’
‘CURIOSIDADES
EIDEAS
[ATENCION DaTos UTILES smmios
‘YNOVEDADES wes
[Link] «Contenido del libro
Prélogo al contenido,
El libro de un vistazo.
Informacién complementaria..
Introduccién
t
Histor
Requisitos para empezar a programar
Eclipse IDE.
Test Driven Development.
Primeros cédig
iacion a Java
Palabras clave.
Ciclos..
El ciclo for,
El ciclo while.
>> [Link]
PRELIMINARES
El ciclo do while...
El ciclo for each .
Declaracién de variables, expresiones,
sentencias y bloques..
Variables
Expresiones...
Sentencias...
Bloques
Otras estructura:
Iffelselelse
switch...
trylcatchfinally.
Operadores
Operadores aritmeéticos....
Operadores légieos
Operadores de bit... nad ST
Otros operadores.
Paquetes,
Resumen
Actividades
Clases
Definici
Atributos.
Métodos.
Herencia y métodos..
Constructores.JAVA DESDE CERO
this y super.
Métodos estaticos versus no estaticas.
Uso avanzada de clases.
Clases abstractas,
Cases anidadas .
Clases locales y clases anénimas..
Resumen.
eerie on eeeancrecrncniie
a
Interfaces y enumeraciones
Interfaces,
Uso. 2
Cases abstractas versus interfaces
Enumeracione
Uso..
Resumen...
Actividades.
Excepciones y genéricos
Excenciones 14
Uso. us
Excepciones chequeadas 121
Encepciones no chequeadas.. 122
‘Manejo de errores.. seas NS
123
129
130
Tipos restringidos.. 130
Genéricos en el alcance estéticO. nnn 132
Resumen. 133
Actividades 134
2)
Libreria base
Libreria y objetos basicos.
[Link].
136
[Link] «[Link] 138
[Link]. Number,
hijos y [Link]. Math. 138
[Link]
[Link] 140
Colecciones. wa
[Link]. Iterable
y [Link]. terator . a2
[Link].. 143
[Link]. 144
[Link] 145
[Link] 145
Ejercicio: colecciones diferentes 147
Clases tities. 149
[Link] y [Link].........149
javadlang StringBuilder
y [Link], StringBuffer
Ejercicio: alternativa a [Link] ...152
[Link] InputStream y su fai
[Link] y su familia.
[Link] Reader y [Link]. Writer.
Resumen.
Actividades.
Anotaciones
‘Qué son las anotaciones?
‘Algunas anotaciones conacidas..
Definicin..
>> [Link]
PRELIMINARES,
Herencia de anotaciones..
Anotaciones en tiempo de ejecu
Jerarquizar anotaciones:
Comportamiento en as anotaciones.
Usos de las anotaciones...
Validaciones.
Inyeccién de dependenias ue 184
Serializacién
Técnicas y disefio
Java Beans y creacion de ohjetos
Inyeccién de dependencias e inversion
de control
Creacién de objetos
‘Método factoria
Factoria abstracta
‘Uso de null
Resumen:
Actividades10 fuser) PRELIMINARES
Introduccién
{C6mo funciona esto? éEs posible hacer algo asi? Estas son
preguntas que todo aquel que se interesa por la tecnologia y la
computacion se hace. Y estas inquietudes son las que nos llevan
a embarcarnos en el camino de la programacién. Hoy en dia,
las computadoras estan 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 proxima gran idea millonaria.
La programacién orientada a objetos ha dominado el mer:
cado por sobre otros paradigmas durante los ultimos ajios,
y parece que va seguir dominandolo por mucho tiempo mas.
En particular, Java es el maximo referente de los programado-
res y existe una comunidad que constantemente genera pro-
ductos, librerias y frameworks. Aun asi, la demanda de nue-
vos programadores sigue creciendo. La orientacion a objetos
encabeza la dificil tarea de transmitir ideas y de plasmarlas
en la PC, de tal forma que un sistema pueda hacer lo que que-
ramos de una manera sencilla y tangible.
En este libro, el lector tendra la oportunidad de sumergirse en
el paradigma; tomar sus ideas, sus reglas y sus metodologias.
Luego, todos estos conocimientos se aplicaran a un lengua-
Je particular; en este caso, Java. Ira conociendo y aprendiendo
el lenguaje paso a paso, desde su sintaxis y semantica, para es-
cribir cédigo correcto y entender cémo plasmar y modelar ade-
cuadamente situaciones de su interés. Para esto, se usaran las
herramientas provistas por el lenguaje, como las clases y la he-
rencia, y también las interfaces y conceptos que provee Java.
El lector esta invitado a continuar, con la mente abierta a nue-
vas ideas, sin preconceptos ni prejuicios.
>> [Link]a TOT TSS
Iniciacion a Java
Antes de ingresar por completo en la programacién Java
necesitamos conocer su historia y las fuerzas que guiaron su
creacién. Veremos también una introduccién a la forma de trabajo
que adoptaremos a lo largo del libro y haremos un breve vistazo
a la técnica de Test Driven Development.
Histori 12 yPrimeros cédigos.
‘yRequisitos para empezar
A PFOGFAMAL ee ermrrernnninnee 1A
Eclipse IDE, 15
Test Driven Development wnn19
AAA2 losers) 1. INICIACION A JAVA,
a Historia
El lenguaje de programaci6n Java tiene sus origenes en el afo 1991,
cuando Sun empieza el proyecto Green. Este proyecto tenia como objetivo
controlar dispositivos hogarefios, para lo cual se creé un lenguaje llamado
Oak, cuyo nombre fue modificado por el actual, Java, en 1995.
Inicialmente, Java se lanz6 como un lenguaje cuyos programas podian
ejecutarse en cualquier plataforma. El slogan de Sun era “write once, run
anywhere" (‘escribir una vez, correrlo en cualquier parte’). Para lograrlo,
Java corre sobre una maquina virtual (virtual machine) 0 un programa que
simula una maquina abstracta, la cual funciona aislando al programa
que corre sobre ella de los distintos hardwares y sistemas operativos.
De esta forma, para el programa, la maquina donde corre es siempre igual.
James Gosling, padre de Java, quiso hacerlo parecido a C++ para
que los programadores de este lenguaje se sintieran comodos con Java
y optaran por él. Java se presentaba como un lenguaje parecido a C++
pero simplificado y con un manejo automatico de memoria (es decir,
el programador no era responsable de liberar la memoria no utilizada).
De esto se encargaria una funcién de la maquina virtual llamada
recolector de basura (garbage collector), un proceso que se ejecuta
paralelamente al de la aplicacion y se encarga de liberar la memoria
ocupada por los objetos que no son utilizados por el sistema
(1) ‘REDUSERS PREMIUM
Para obtener material adicional gratuito, ingrese a la seccion Publicaciones/Libros
Gentro de [Link] Ali encontrara todos nuestros titulos y podra
acceder a contenido extra de cada uno, como sitios web relacionados, programas reco-
mendados, ejemplos utiizados por el autor, apéndices y archivos editables 0 de codigo
fuente. Todo esto ayudar a comprender mejor las conceptos desarrollados en la obra.
>> [Link]JAVA DESDE CERO luseres) B
Java trlunfé gracias a internet. En un co-
. * . JAVA COMENZO
mienzo lo hizo a través de las applets, pe-
quefas aplicaciones embebidas en las paginas A IMPONERSE
web que se ejecutan en los navegadores, que CON LA PRIMERA
no triunfaron dado que competian con la tec- 5
nologia Shockwave (ahora conocida como VERSION DE
Flash). A partir de 1997, Java empezé a mi- LOS SERVLETS
grar hacia los servidores. Se lanz6 la primera
version de los Servlets y fue en esta area
donde el lenguaje se impuso y brillé.
Las tecnologias competidoras de ese enton-
ces eran CGI, ASP y PHP. Java superé a la competencia y se posicioné
como la tecnologia por excelencia para las aplicaciones web empre-
sariales. Desde entonces, es una de las tecnologias mas importantes,
disponible en casi todas las plataformas. Se encuentra en las desktops
(aplicaciones de escritorio), en servidores (paginas web y aplicaciones
web) y hasta en los dispositivos méviles (versién micro de Java).
Hoy, Java forma parte de uno de los sistemas operativos para celular mas
famosos y pujantes: Android. Este sistema fue creado por los desarrollado:
res de Google y est basado en Java, por lo cual, todas las aplicaciones para
celulares (y también netbooks y tablets) con Android estan hechas con este
lenguaje. En el 2009, Oracle, gigante de las bases de datos, compré Sun y,
por lo tanto, también asumio la responsabilidad sobre la evolucién de Java.
wee
6) aaa eli
Los lenguajes que no utiizan este mecanismo para administrar la memoria, como C++,
requieren que el programador libere manualmente la memoria que no se va a utilizar mas.
Esta es la causa de numerosos errores en los programas y del consumo de mucha memo-
ria, Aquella que no se libera, pero tampoco se usa, se conoce como memory leak.
[Link] <«€u fuser) 1. INICIACION A JAVA,
Figura 1.
Duke, la mascota de Java en los comienzos del lenguaje,
fue muy popular entre los programadores. Se la veia en
cada articulo, libro o sitio relacionado con este lenguaje.
a Requisitos para empezar
a programar
Para poder programar en Java, compilar y correr los programas,
necesitaremos instalar el kit de desarrollo, que podremos conseguir
en la seccién de descargas de Oracle
Figura 2. Podemos encontrar amplia variedad
de herramientas en la pagina de descargas de Oracle.
>> [Link]Sintaxis
La sintaxis es el conjunto de reglas que dan como resultado un
programa adecuadamente desarrollado. Estas reglas describen qué
elementos estén permitidos en determinados contextos y cual es
la relacién entre ellos. En este capitulo, conoceremos la sintaxis
basica necesaria para dominar la programacién en Java.
» |
+ Tipos primitivos y literales,
yOperadores
‘yDeclaracién de variables,
expresiones, sentencias
y bloques.
+yOtras estructuras...
AAA30 losers) 2. SINTAXIS
a Palabras clave
Las palabras clave o reservadas son palabras que Java no permite que
los programadores utilicen libremente en cualquier parte del cédigo (por
¢jemplo, los nombres de variables), sino que tienen un propésito determi-
nado y un contexto especifico. Para indicar que una palabra esta reservada,
Eclipse la resaltara con un color distinto del texto normal. A continuacion,
encontraremos el listado de palabras clave, su explicacién y uso.
© abstract: se utiliza en clases y métodos para indicar que son abstractos.
En las clases, significa que sirven para formar una jerarquia y no
pueden tener instancias. En los métodos, para indicar que la jerar-
quia que tienen responde al mensaje, pero no define codigo alguno.
© assert: se utiliza para enunciar condiciones que se deben cumplir du-
rante la ejecucion. No debe confundirse con las aserciones de JUnit.
© boolean: representa al tipo primitivo booleano. Las variables de este
tipo no son objetos, y los iinicos valores que pueden tomar son true
(verdadero) y false (falso).
© break: es una etiqueta que se utiliza para salir de la ejecucion
de los ciclos (for, while, do while) y de las estructuras switch.
© byte: representa el tipo primitive de numeros de 8 bits,
entre -128 y 127. Los valores de este tipo no son objetos.
6) ‘UNICODE
Caracter es la representacion de un simbolo, ya sea una letra, nimero o simbolo.
Lee
La referencia Unicode especifica un nombre e identificador numérico Unico para cada
caracter 0 simbolo disefiado, para faciltar el tratamiento informatico de miltiples
lenguajes y disciplinas técnicas, ademas de textos cldsicos de lenguas muertas.
El término proviene de las palabras universalidad, uniformidad y unicidad,
>> [Link]JAVA DESDE CERO luseres) 31
© case: etiqueta usada en las estructuras
, : CADA PALABRA
switch para indicar un caso.
© catch: se utiliza en conjunto con la etiqueta CLAVE 0 RESERVADA
try para indicar que se espera una excepcion TIENE UN USO
en el codigo envuelto en la estructura de try.
© char: representa el tipo primitivo de los YUN CONTEXTO
caracteres. Las variables de este tipo no ESPECIFICO
son objetos y pueden contener cualquier
caracter Unicode
© class: define el comienzo de la declaracion
de una clase.
© continue: al igual que break, es un etiqueta que se utiliza en los ciclos,
y Sirve para hacer que se interrumpa la ejecucion del cédigo de la ite-
racién actual del ciclo y que continte con la siguiente.
© default: se usa para definir la accion por defecto en las estructuras switch.
© do: este término se utiliza en combinacién con el while para formar
la estructura de ciclo do while.
e double: representa el tipo primitivo de los nimeros de punto flotante
de doble precisién (64 bits) definidos en el estandar IEEE 754.
© else: representa el camino alternativo en un toma de decisién;
se utiliza en conjunto con el if.
© enum: declara un tipo enumerado (clases que tienen un numero fijo
y definido de instancias nombradas).
© extends: se utiliza para indicar que una clase hereda de otra. Sino se utili-
za, por defecto toda clase hereda de la clase Object. También se usa para
declarar que una interfaz extiende otra (herencia entre interfaces).
© final: es un modificador que puede aplicar a clases, métodos varia-
bles y argumentos, y que puede tener un significado distinto en
cada caso. En las clases, significa que se puede extender heredando.
En el caso de los métodos, que las subclases de la clase que lo con-
tiene no pueden redefinirlo. En las variables (tanto las de instancia
como las de clase, asi como en las definidas en el cuerpo de los mé-
todos), significa que se puede asignar valor solo una vez.
[Link] <«€fuser) 2. SINTAXIS
Finalmente, en los argumentos de los méto-
dos, quiere decir que esa variable no se pue-
de escribir (0 sea, reasignarle un valor nuevo). FOR DEFINE
LA ETIQUETA
finally: se usa en conjunto con la estruc- LA ESTRUCTURA
tura try, y especifica un bloque de codigo
que se ejecuta, si o si, al finalizar la eje- DE CICLO
cuci6n del bloque try. MAS USADA
float: representa al tipo primitivo de los nu-
meros de punto flotante de simple precision
(32 bits) definidos en el estandar IEEE 754.
for: es la etiqueta que define la estructura
de ciclo mas usada.
if: especifica una bifurcaci6n en la ejecucién del codigo guiada por
una condici6n. Si la condicion es verdadera (true), entonces se ejecuta
el cuerpo del if; si no, se lo saltea.
implements: es la manera de indicar que una clase implementa (hereda)
de una o varias interfaces. La clase esta obligada a implementar los
métodos definidos por las interfaces que utiliza (a menos que sea una
clase abstracta, en cuyo caso las encargadas seran las subclases).
import: declara el uso (importacién) de clases y paquetes en un codigo
fuente. Mediante el agregado del modificador static, también se pueden
importar métodos estaticos de una clase.
instanceof: instruccion que sirve para preguntar si un objeto es
instancia de una determinada clase (o superclase) o interfaz.
El resultado es true o false.
int: representa el tipo primitivo de numeros de 32 bits, entre
-2147483648 y 2147483647. Los valores de este tipo no son objetos.
interface: especifica el comienzo de la definicion de una interfaz.
long: representa el tipo primitivo de nimeros de 64 bits,
entre -9223372036854775808 y 9223372036854775807.
Los valores de este tipo no son objetos.
native: modificador de método que indica que este no esta implementado
en Java sino en otro lenguaje (generalmente, en C++).
>> [Link]Clases
Las clases son los moldes para la creacion de objetos, ya que definen
la forma y el comportamiento de las instancias creadas. A lo largo de
este capitulo, veremos como se crean y como se definen sus atributos
Yy métodos. Sera de gran utilidad para los lectores haber repasado
antes la teoria sobre programacién orientada a objetos.
yMétodos estaticos os
‘yDefinicién
‘vAtributos
‘y Método:
‘yConstructores...
this y super
AAA62 fuser) 3. CLASES
a Definicion
Hemos visto cmo aparece una clase en nuestros Unit Test; ahora, en-
tenderemos en profundidad cada elemento de su definicion. Todo archivo
fuente Java requiere la existencia de una clase publica con el mismo nom-
bre. A continuacién, encontramos el caso mas simple de una clase:
public class Auto €
Indicamos que es piiblica con el modificador public, luego aparece class y,
finalmente, el nombre. Por defecto, toda clase hereda de Object, pero si quere
mos heredar de alguna otra, podemos especificarlo a continuacién del nom-
bre utilizando la palabra extends, seguida del nombre de la clase padre.
public class Auto extends Vehiculo {
Solamente se puede heredar de una clase: recordemos que Java
implementa herencia simple. Tratando de alivianar esta restriccién,
Java utiliza las interfaces para definir protocolos homogéneos a través
de jerarquias heterogéneas. Para decir que una clase implementa una
interfaz (0 varias), escribimos el nombre de esta (en el caso de ser va-
rias, separados por comas) después de la palabra implements
public class Auto extends Vehiculo implements VehiculoTerrestre {
>> [Link]JAVA DESDE CERO luseres) 3
clases INTERFACES
Figura 1. Relacion de herencia entre las clases y de implementacién con la interfaz.
La clase principal del archivo debe ser ptiblica 0, de lo contrario, no debe
indicarse nada, ya que no puede ser privada; a este tipo de clases se las Hama
de paquete. Las clases con la visibilidad de paquete solamente pueden ser
utilizadas por otras clases que estén dentro del mismo paquete. Las clases
publicas pueden ser utilizadas por cualquier otra clase y también pueden
ser marcadas como finales, utilizando ¢l modificador final antes del class
en la definicion (este modificador hace que no pueda existir una subclase de
lla). Finalmente, las clases pueden ser marcadas como abstractas (moldes
para otras clases) usando el modificador abstract. Las clases abstractas no
pueden tener instancias y sirven para agrupar el conocimiento y com-
portamiento en comin de las subclases de este tipo.
En Java, las clases son instancia de la clase Class. En ella estan definidos
los mensajes que entiende cada clase, como el tipo de mensajes que entien-
den sus instancias 0 qué constructores tienen, entre muchas otras cosas.
Para acceder a la instancia de Class correspondiente a una clase pode
mos utilizar el nombre seguido de .class, o podemos pedirsela a una ins-
tancia mediante el mensaje getClass(). Ambas formas devuelven un objeto
de tipo Class, que es el dato que nos interesa.
[Link] <«€Cy losers) 3. CLASES
— Sibatase de
Inctancia de
Figura 2. Vemos las relaciones entre las clases, la clase Class y las instancias.
a Atributos
Los colaboradores internos, también conocidos como variables de
instancia 0 atributos, se definen en el cuerpo de la clase. Su definicién es
similar a la de cualquier variable, con la particularidad de que se le pueden
agregar los modificadores de visibilidad. Como buena practica, siempre defini-
remos los atributos como privados, dado que son detalles de implementacion
que deberian estar siempre ocultos a los demas objetos (incluso a aquellos
wee
6) ‘PROPIEDADES Y JAVABEANS
Cuando un objeto tiene un getter y un setter piblicos para un determinado atributo,
se dice que tiene una propiedad. Llamaremos a la propiedad por el nombre del
atributo. Esta es una convencién nacida de los JavaBeans, objetos destinados a ser
manipulados graficamente, que nunca cumplieron su objetivo.
>> [Link]Q 74
Interfaces y
enumeraciones
Como mencionamos en capitulos anteriores, existen otros mecanismos
para reutilizar cédigo sin caer en las trampas de la herencia milltiple.
Uno de estos mecanismos son las interfaces. Al terminar este tema,
conoceremos algunas estructuras de cédigo que nos seran iitiles para
realizar el desarrollo de nuestras aplicaciones: las enumeraciones.
Clases abstractas
versus interfaces
AAA90 losers) 4. INTERFACES Y ENUMERACIONES
a Interfaces
Una interfaz es solamente la declaracion de los mensajes que sabe
responder un determinado tipo, es decir, la declaracién del protocolo
aceptado por los objetos de ese tipo. Las interfaces no suplantan a las
clases, sino que las complementan. Una clase, que es protocolo mas com-
portamiento, implementa una o varias interfaces, que solo son protocolo.
Para implementar una interfaz, una clase tiene que poder responder
los mensajes declarados en ella, ya sea implementandolos o definiéndo-
los como abstractos. Las interfaces, al igual que las clases abstractas, no
pueden tener instancias directamente. Es posible hacer que una interfaz
extienda otra, requiriendo que la clase que implementa tal interfaz Imple-
mente también la que extiende.
Las interfaces declaran la firma de los mensajes y no contienen imple-
mentaci6n alguna. De esta forma, no sirven para reutilizar codigo directa-
mente, pero si para otras funciones més importantes
Recordemos que, en el capitulo anterior, comentamos que una caracte-
ristica deseable de un sistema era el bajo acoplamiento. Podemos reducir el
acoplamiento disminuyendo la cantidad de clases de las cuales dependemos,
o haciendo que las dependencias sean con tipos de protocolo reducido.
Los protocolos reducidos no solo alivianan las dependencias, sino que tam-
bién hacen que un determinado tipo sea mas entendible, ya que hay que
comprender menos mensajes para saber como responde un objeto.
wee
ea ia rg
Una interfaz por si sola no puede tener instancias, sino que depende de una clase que la imple-
mente. Podemos probarlo tratando de instanciar una y ver qué nos responde el compilador 0
Eclipse. Por otro lado, pensemos lo siguiente: si una interfaz solo define protocolo, firmas de
métodos y mensajes que debe entender, zqué es lo que eecutaria una instancia de talinterfaz?
>> [Link]JAVA DESDE CERO luseres) a
Las interfaces son artefactos que permiten agrupar mensajes relaciona-
dos y separarlos de otros mensajes no relevantes para una determinada
funcionalidad. Una clase que implementa varias interfaces tiene la capaci-
dad de responder a varias funcionalidades, pero los clientes de dicha clase
no tienen por qué saber todo lo que ella puede hacer (solo deben conocer
la interfaz que les interesa). Asi, se evita engrosar las dependencias entre
los elementos, ya que los clientes son independientes de los cambios que
puedan ocurrir en los otros mensajes.
Un e-mail Solo Texto.
eit’? un e-mail
Destinatario
Interface
e@> almprimir
Interface
Imprimibie
Figura 1. Las interfaces permiten restringir
el protocolo usado por un objeto cliente a los mensajes
necesarios solamente para una funcionalidad
Para Java, las interfaces también son tipos como lo son las clases;
por Io tanto, los objetos pertenecen al tipo determinado por su clase y
a los tipos establecidos por las interfaces que implementan, Estos forman
jerarquias que no siguen la linea de las clases, sino que hay una jerarquia
por interfaz y por las clases que las implementan. Podemos decir que se
trata de una relacién de tipos que es transversal a la clasificacion.
[Link] <«€2 losers) 4. INTERFACES Y ENUMERACIONES
Uso
Para definir una interfaz en Java utilizamos la palabra interface en vez
de class. Esta acepta los distintos modificadores de visibilidad
public interface Mensaje {
}
La definicién del protocolo se realiza definiendo las firmas de los mé-
todos, sin cuerpo (sin cédigo), de igual forma que cuando definimos un
método abstracto. Todos los métodos Indicados en una interfaz son abs-
tractos, por lo que utilizar este modificador es redundante. Ocurre algo
similar con la visibilidad de los métodos: todos son piblicos.
public interface Mensaje (
Destinatario destinatario;
Eclipse nos facilita la tarea de crear una interfaz desde cero. Para ello,
deberemos hacer clic en el ment File o sobre el boton de New en la barra
de herramientas; también podemos hacer clic con el botén secundario del
LLe
ia ate ee be a
Sibien es posible defnir constantes en lasinterfaces, no es una practica del todo recomendable.
Generalmente, las interfaces que son puramente constantes pueden ser reemplazadas por
enumeraciones, 0 bien moviendo las constantes a alguna clase abstracta o a la clase que las
utiliza, Ademas, no es posible sobrescribir una constante ya que no se adaptan bien al cambio.
>> [Link]Excepciones
y geneéricos
Cuando nuestro programa esta siendo ejecutado y ocurre alguna
situacién inesperada, el sistema lo notifica mediante eventos
denominados excepciones. Las excepciones son la forma de avisar
y detectar errores 0 acontecimientos extrafios en la ejecucion.
ws
vExcepciones 14
Uso. 118 Tipos restringid
Excepciones chequeadas.ennunn121 Genéricos
Excepciones no chequeadas. en el alcance €stAtico..nnn 132
Manejo de errores
‘yGenéricos...
Subtipado .. 129
AAA14 oS 5. EXCEPCIONES Y GENERICOS
a Excepciones
Una excepcién es un evento no esperado que ocurre durante la ejecu-
cin de un programa y que interrumpe su flujo normal. Cuando ocurre un
error durante la ejecucién de un método, este crea un objeto con informa-
cidn sobre las causas del error en el contexto de la ejecucién, que es pasa-
do al sistema (a la maquina virtual) para que lo trate.
Esto se conoce como lanzar una excepcién. Cuando lanzamos una
excepcién, el sistema trata de encontrar algiin método en la cadena de lla-
mados que puede manejarla. Para entender cémo funciona esto, primero
tenemos que comprender como funcionan las llamadas a métodos.
Gjecuta
metodo
Regresa L
ejecucién A dune
métado
Regesa Ly
ejecucion B
Regresa
ejecueidn
Ejecuta
metodo
Figura 1. Un stack esté formado por invocaciones a métodos; ademas,
crece y decrece a medida que se termina la ejecucin particular de un método.
Cuando el sistema ejecuta un método asociado a un envio de mensa-
je (0 un método estatico), crea una estructura en la memoria con la in-
formacién relacionada, el método y los argumentos, entre otros datos,
Estas estructuras, llamadas registros de activacién (activation records),
>> [Link]JAVA DESDE CERO == os
se van enlazando a medida que Ilamamos de un método a otro. De esta
forma, cuando un método finaliza su ejecuci6n, se contintia con la ejecu-
cin del método anterior en la cadena.
A esta cadena se la conoce como pila de Hamadas (call stack), y pro-
viene de la representaci6n en la memoria de los registros de activacion.
Cuando lanzamos una excepcién, el runtime (la maquina virtual Java) va
buscando en el call stack, en orden reverso de ejecucion, si en alguno
de los métodos hay un exception handler (0 manejador de excepcio-
nes) asociado al tipo de excepcién lanzado.
Regresa
ejecucion
Ejecuts handler ———>
encontrado
aTiene
handler? Fak
éTiene handler?
Figura 2. En un stack se busca la primera activacién
con un handler adecuado, yendo hacia atras en la cadena.
Cuando encuentra el primer handler, ejecuta su cédigo asociado y regresa
la ejecuci6n al método al cual este pertenece, abortando la ejecucién de los
métodos del call stack que estan entre el punto de error y el handler.
[Link] <«€6 EES 5. EXCEPCIONES Y GENERICOS
Ejecuta
Lap | metodo
eTiene
handler?
8 Ejecuta
metodo
diene
handler?
Ejecuta
método
eTiene
handler?
G
Gliene handler?
4
Figura 3. Cuando se busca un handler en el stack, sino se lo encuentra se
sigue hasta llegar al handler por defecto, que termina la ejecucion del programa.
Cuando el sistema no encuentra ningiin handler apropiado, ejecuta
su propio handler existente por defecto, que aborta la ejecucion del pro-
grama. El hecho de encontrar un manejador apropiado y de ejecutarlo
se conoce como catcher o atrapar la excepcion.
En Java, los objetos que pueden ser lanzados como excepciones son
del tipo Throwable o una de sus subclases. Esta clase tiene dos subclases
que definen la estructura basica de todas las excepciones y errores.
Por un lado, se encuentran los errores graves de sistema -que no debe-
rian ser nunca de interés a una aplicacion- representados por la clase
Error y sus descendientes. Por otro, las situaciones excepcionales duran
te la ejecucién de una aplicacion, representadas por la clase Exception y
>> [Link]Libreria base
Conocer las herramientas disponibles para realizar un trabajo es
fundamental, ya que permite determinar cual se adecua mejor a la tarea.
Por este motivo, quien desea aprender Java debe conocer las clases e
interfaces que se proveen desde la instalacién. No solo se ahorra trabajo
al utilizar algo ya existente, sino que el digo puede comunicar mejor
Su propésito a otros programadores, ya que usa elementos estandares.
Libreria y objetos basicos..
AAA2360 EES 6. LIBRERIA BASE
a Libreria y objetos basicos
Java posee una amplia libreria base que esta disponible con la instala-
cidn inicial, ya sea del kit de desarrollo o del entorno de ejecucién. Esta
libreria provee lo necesario para desarrollar todo tipo de aplicaciones,
desde las de escritorio hasta aplicaciones web. Permite crear ventanas,
escribir archivos, conectarse a un servidor y muchas cosas mas.
Comenzaremos nuestra exploracién de la libreria por las clases que
conforman los ladrillos basicos sobre los cuales se construyen las de
ms clases del sistema.
[Link]
Esta clase, como ya sabemos, es la clase padre de Java, de la cual
todas las demas heredan. Aqui encontramos definidos los métodos
mas primitivos y generales que podemos esperar de los objetos. Lo
mas basico que podemos saber de un objeto en Java es lo siguiente:
si es igual a otro objeto (equals), a qué clase pertenece (getClass) y acce-
der a una representacién en texto (toString).
Class> getClass()
boolean equals(Object otroObjeto)
String toString@)
6) ae aU ae
Java offece la clase [Link], que brinda métodos estaticos para ordenar,
buscar, comparar, copiar y crear arrays facilmente. Estos tienen versiones sobrecargadas
para los arrays de tipos primitivos y versiones genéricas para los objetos.
>> [Link]JAVA DESDE CERO == (LT
Otro método muy importante, pero que a primera vista no nos trans-
mite su utilidad, es hashCode. Es un niimero entero (int) usado por ciertas
colecciones, generalmente los mapas (diccionarios), para guardar el objeto
de modo que el hashCode sea indice de este.
int hashCode()
Finalmente, Object provee otros métodos que no son muy utilizados,
al menos en la gran mayoria de las situaciones. Uno de ellos es el método
para clonar (duplicar) un objeto, no tan utilizado porque la clase de los
objetos por clonar debe implementar la interfaz Cloneable y tener ciertas
consideraciones. Los demas métodos definidos son para sincronizar, de
forma rudimentaria, varios hilos de ejecucién, pero es recomendable usar
otras maneras de sincronizacion mas avanzadas.
Implementar los métodos equals y hashCode
Los métodos equals y hashCode son especiales y requieren cuidado a
la hora de ser sobrescritos en las otras clases. El método equals requiere
que se implemente una relacion de equivalencia: reflexiva, simétrica y
transitiva. Es reflexiva si para todo objeto no nulo x, [Link](x) retorna
true, Es simétrica si se cumple que para todo par de objetos no nulos x
e y, [Link](y) es igual [Link](x). Finalmente, es transitiva si, y solo si,
para los objetos no nulos x, y yz se cumple que si [Link](y) regresa true
a su vez que [Link](x) también lo hace, entonces [Link](z) tiene que re-
gresar true. Se espera que el método sea consistente; esto quiere decir
que sucesivas invocaciones del método con los mismos parametros arro-
jen los mismos resultados (a menos que el objeto cambie). Finalmente,
todo objeto x no nulo es distinto a null y por lo tanto [Link](null) da false.
El método hashCode utiliza la informacion del objeto (sus atributos) y ge-
nera un niimero entero utilizado en las colecciones que usan tablas de hash
internamente. La idea es que, utilizando los atributos que definen la identidad
[Link] <«€B80 EES 6. LIBRERIA BASE
del objeto (generalmente, los mismos que se utilizan en el equals), se calcule
un niimero que sea bien distinto al generado por otro objeto ligeramente
parecido. Objetos iguales deben devolver el mismo nimero, pero objetos
que devuelven el mismo numero no tienen que ser necesariamente iguales
(siempre habra objetos distintos con el mismo numero cuando hay mas de
4294967295 objetos). El calculo debe ser rapido mientras el objeto no cambie.
[Link]
La clase Boolean modela los valores de verdad y falsedad booleanos y en
sus instancias encapsula los valores primitivos boolean, true y false. Esta clase
provee métodos estaticos para pasar de String a boolean y viceversa.
static String toString(boolean b)
static Boolean valueOf(boolean b)
static Boolean valueOf(String s)
static boolean parseBoolean(String s)
[Link], hijos y [Link]
Object
Number
Figura 1. Jerarquia de Number y los distintos tipos de numeros.
>> [Link]Anotaciones
Muchos sistemas y librerias requieren una gran cantidad de informacién
suplementaria al cédigo para poder funcionar. Las anotaciones son
un mecanismo para poder unificar toda esa informacion extra de
cédigo en una sola forma estandarizada. Esto permite no solo que los
programadores eviten inventar formas de volcar la informacién extra,
sino que también se ahorren la complicacién de manipularla.
‘y{Qué son las anotaciones?.
Algunas anotaciones
conocidas
Definicion
Herencia de anotaciones.
os
‘yAnotaciones en tiempo
yReSUMEN
Comportamiento Actividades scm
AAA164 EES 7. ANOTACIONES
a éQué son las anotaciones?
Durante la historia y evolucién de Java se inventaron muchas formas
de agregar informacién pertinente al cOdigo pero separada de él. Por
ejemplo, los JavaBeans (objetos originalmente pensados para ser edi-
tados graficamente) requerian la definicién de una clase acompahante
del tipo Beaninfo, donde se mantenia la descripcién de bean. Los famo
sos EJB 0 Enterprise Java Beans requerian en sus versiones anteriores
varias interfaces extras para poder ser usados en las aplicaciones de
servidores, y también antiguamente se utilizaban comentarios en el
c6digo, que seguian cierto formato y utilizaban algunas herramientas
(incluido el compilador) para funcionar.
Las anotaciones son artefactos que permiten especificar informacion
extra respecto de una clase, método o variable, directamente en el cédigo
y de forma tal que pueden ser accedidas como un objeto por el sistema,
La presencia de anotaciones no afecta, inicialmente, la semantica
del cédigo, pero una herramienta o libreria puede leer esta informacion
y actuar modificando el comportamiento de los elementos anotados
(es decir, aquellos afectados por las anotaciones).
En Java, las anotaciones se escriben junto con los modificadores del ele-
mento en cuestion y su formato ¢s el simbolo @ més el nombre de la anota-
cidn; opcionalmente, se escriben entre paréntesis una serie de argumentos.
6) Pe ei ae
Lee
Desde sus comienzos y antes de que aparecieran las anotaciones, existian comentarios
de cédigo que servian para el mismo propésito. Estos se conocian como xdoclet y
ofrecian una alta gama de tags para distintas funcionalidades. Se requeria utilizar una
herramienta extra que lefa el cédigo fuente y operaba en consecuencia a medida que
iba encontrando los tags en los comentarios.
>> [Link]JAVA DESDE CERO
5
‘Sting Buteoput Sean
unStream
etloss inte) Overide
Ssmgtnstme) | | Overide
Depeecated
igura 1. Las anotaciones no afectan la semantica
de una clase, sino que agregan informacién a sus elementos.
Algunas anotaciones conocidas
Hemos estado utilizando estas anotaciones en los codigos que se
encuentran en los capitulos anteriores. Repasemos algunas de ellas.
@Override
Esta anotacion puede, en principio, parecer
innecesaria, ya que el compilador sabe si
estamos sobrescribiendo un método o no.
Es conveniente utilizarla siempre, por varios
motivos. Por ejemplo, si queremos sobrescri-
bir un método y nos equivocamos al momento
de escribir el nombre, el compilador nos aler-
tard que no estamos sobrescribiendo ningun
método conocido sino que la anotacion sera
AUNQUE
PUEDA PARECER
INNECESARIO, ES
CONVENIENTE USAR
(@0VERRIDE SIEMPRE
IF
utilizada en tiempos de compilacién. También es una forma de asegurarnos
de que estamos implementando los métodos de una interfaz correctamente.
[Link] <«€16 OES 7. ANOTACIONES
@Test
Otra anotacion que utilizamos frecuentemente es @Test, usada en nuestros
‘Tests Cases para indicar qué métodos representan pruebas unitarias.
Esta anotacién puede aceptar algunos argumentos en su uso. Por ejem-
plo, si deseamos indicar que el test arroja una excepcion, lo hacemos con
el argumento expected:
@Test(expected=[Link])
‘También es posible indicar que la prueba debe tardar menos de una de
terminada cantidad de tiempo o, de lo contrario, fallara. Lo hacemos agre-
gando el argumento timeout y especificando, a continuacién, la cantidad de
milisegundos que se debe esperar:
@Testtimeout=1000)
1/ Esperamos un segundo o falla
Ambos argumentos pueden usarse al mismo tiempo. La anotacion @Test so-
lamente puede decorar métodos que sean publicos y no devuelvan nada (void).
@Deprecate
Esta anotacion es utilizada para indicar que un elemento (clase, in-
terfaz, método, etcétera) no debe utilizarse mas y que es posible que en
futuras versiones sea removido. Generalmente se usa cuando un disefio
es actualizado y se mantienen los elementos antiguos para mantener la
compatibilidad hacia atras.
Anteriormente, esta funcionalidad era ofrecida por un comentario
que contenia el texto @deprecated, y se esperaba que el compilador aler-
tara al programador de tales usos. @Deprecated puede ser utilizada para
decorar cualquier elemento.
>> [Link]'
Puedes comprar este impreso o en formato eBook u optar por
algunos de los titulos que conforman la biblioteca USERS.
En encontrards las ultimas novedades y
material informativo de cada titulo, que te ayudard a decidir la compra.
jRecibe promociones
semanales exclusivas
en tu
@ [Link]
Lettre ATODO EL MUNDO iN SLL Aaa a
ny:
STJava desde cero
En esta obra haremos un recomdo que comenzara con los Conceptos:
fundamentales de la programacion orientada a abjetos, dl disefo
ye desarrdilo de software. Todas los procedimientas san expuestas
conceptuales y la teoria necesaria para comprender en profundidad
Dentro del libro encontrara*:
Programacién onentada a objeios / Sintaxds dal lenguaje / Las clises y sus
diferentes uliizacones / Inferiaoes y enumeraciones / Excepciones y ganéricos
Libres base / Anotaciones
* Pato dl contenido do ania lite {ue pubicado provamonia ontas, do cris mirre odin
Otros titulos de la colecci6n:
1&5 js [| =a a
BPHP+Mygh PHP nebo
ed iho eee
Ban 978-067-1919-68-7
EN LINEA
Ennucarostiopod oncontrarnaticiss nto cusiquier conadta tacrics
rasonadss: y tarkian redacionads con of fir, puodo
RU «doin comunidad do tocrclogs mis ‘contactarse con nusedfos exports:
‘impertarte do Amérien Latins. . 9 >
También podría gustarte
Libro C
Aún no hay calificaciones
137 páginas
Chrome
Aún no hay calificaciones
19 páginas
? Nivel 1
Aún no hay calificaciones
15 páginas