Nipo: 820-10-530-5
Autor:
Pilar Aranzazu Ocaa Diaz-Ufano y Jos
Miguel Ordax Cass
Edicin y maquetacin de contenidos:
Susana Prez Marn
AULA
MENTOR
educacion.es
MDULO A
Nipo: 820-10-530-5
UNIDADES DIDCTICAS:
1. Introduccin
2. Conceptos bsicos. Objeto, atributo, mtodo,
Autor:
Pilar Aranzazu Ocaa Diaz-Ufano y Jos
Miguel Ordax Cass
Edicin y maquetacin de contenidos:
Susana Prez Marn
interfaz, clase
3. Paradigmas de la Orientacin a Objetos:
Abstraccin, encapsulacin, ocultamiento,
herencia y polimorfismo.
MDULO A
Introduccin
Tema 1.1
ndice de la unidad:
1. Historia
2. Ventajas de la Orientacin a Objetos
1. Historia
Una de las caractersticas para poder clasificar los lenguajes de programacin es su
nivel de abstraccin. Este nivel puede ser expresado en base a la complejidad del
problema que se est intentando resolver. Por ejemplo, el lenguaje Ensamblador,
primer lenguaje de programacin, tiene un pequeo nivel de abstraccin
relacionado totalmente con la mquina en la que se est ejecutando, por lo que el
nivel de abstraccin que se aplicaba al mbito de la solucin era muy bajo.
Muchos de los lenguajes que siguieron al Ensamblador, llamados lenguajes
imperativos, como es el caso de Fortran, Basic y C, fueron abstracciones de este
primer lenguaje de programacin. El nivel de abstraccin de estos lenguajes es
mucho ms elevado que el del lenguaje original, pero siguen estando muy
relacionados con la estructura del ordenador en el que se ejecutan, en lugar de la
estructura del problema a resolver y del mundo real. Debido a esta relacin, los
programas desarrollados son difciles de escribir y bastante costosos de mantener.
As, acercando el modelo de abstraccin al problema a resolver y no a la mquina
fsica, aparecieron en los aos 60 los primeros lenguajes Orientados a Objetos,
tambin denominados O.O., tales como LISP (todos los problemas se reducen a
listas), APL (todos los problemas se reducen a algoritmos) y PROLOG (todos los
problemas se reducen a cadenas de decision).
El primer lenguaje considerado totalmente Orientado a Objetos y sobre el que se
basa Java, es Smalltalk. Este lenguaje recoge las cinco principales caractersticas
que tienen que tener estos lenguajes de programacin y que se vern ms en
profundidad en la Unidad 1.2:
x
Cada
objeto
esta
contruido
en
base
otros
objetos,
Todos los objetos del mismo tipo pueden recibir los mismos
mensajes.
1
MDULO 1
No hay que olvidar, que la Orientacin a Objetos aplica tambin al Anlisis y Diseo
Facilita la reutilizacin
Objetos de finales de los 80 y comienzo de los 90, tales como: Booch, Rumbaugh
(OMT) y Jacobson.
Nos permitir definir que entidades como tales vamos a necesitar que existan
para solucionar nuestro problema y las relaciones entre ellas, tales como
animales donde solo van a tratar mamferos y solo ciertos tipos de mamferos.
Por lo tanto, los peces, las aves ... quedan fuera del mbito de nuestro mundo
real.
MDULO 1
a funcionalidad.
El sistema de abstraccin del mundo real, permite centrarnos por una parte
en cuales son las entidades del dominio, qu informacin de toda la posible es
la que ayuda a solventar nuestro problema, que tipo de acciones u
operaciones son relevantes en estas entidades, etc. para una vez que
dicha
entidades),
composicin
(creacin
de
entidades
en
base
otras)
tengamos toda esta informacin, ver las interrelaciones entre todos ellos y su
convivencia.
Este tipo de abstraccin nos permite realizar un tipo de programacin BottonUp (de abajo a arriba), donde partiendo de piezas ms pequeas se va
conformando el todo.
relacionado),
patrones
de
diseo
(soluciones
dadas
problemas
ya
el elemento Hardware
ordenador.
etapa.
MDULO 1
un Mainframe.
Uso, uno de los diagramas definidos por UML. Describen una visin externa
del comportamiento del Sistema desde el punto de vista del usuario,
Es una diferencia a tener en cuenta, con respecto a C++ que s que necesita
cmo lo har.
A continuacin se muestra como sera el ciclo iterativo de desarrollo. Por cada
conjunto de casos de uso elegidos, se pasar por cada una de las fases,
permitiendo tener casos de usos finalizados mientras que otros estn
pendientes de iniciarse.
MDULO A
MDULO 1
Facilita la reutilizacin.
Tema 1.2
ndice de la unidad:
1. Conceptos bsicos
2. Objeto
3. Clase
En esta unidad veremos cuales son los conceptos bsicos en los que se apoya la
Orientacin a Objetos, tanto a nivel de Anlisis y Diseo, como en la Programacin.
1. Conceptos bsicos
Como se ha comentado en la Unidad 1.1, los lenguajes de programacin Orientados
a Objetos, se caracterizan por tener su nivel de abstraccin basado en el mundo
real. As, el nfasis est en la abstraccin de datos, y los problemas del mundo real
son representados por un conjunto de objetos de datos para los que se adjunta un
conjunto correspondiente de operaciones.
As, al igual que otros lenguajes de programacin, introducen un nuevo conjunto de
trminos, o conceptos bsicos que son esenciales comprender, para poder realizar
cualquier anlisis, diseo o desarrollo Orientado a Objetos:
x
Objeto
Atributo
Mtodo
Interfaz
Clase
2. Objeto
Hay muchas definiciones que pueden darse de un objeto, entre las cuales se encuentran:
x
11
MDULO 1
mismos, es la nica manera de poder determinar cada uno de los objetos. As si tenemos dos cuentas corrientes con el mismo titular, y el
mismo importe, la nica forma de diferenciarlas es va dicha identidad.
x
unReloj, con los atributos hora (horas, min, seg), dia (dia, mes, ao), modelo y
En base a las caractersticas del objeto mencionadas anteriormente, todo obUn objeto es una entidad que tiene un estado (cuya represen-
jeto est formado por atributos o estructura encapsulada de los datos y por
los mtodos u operaciones permitidas por dicho objeto, ya sean visibles para
el usuario o no.
plo, setHora()
x
13
MDULO 1
Reloj().
x
piarPantalla(), incrementarDia().
Grficamente, se puede visualizar la estructura de un objeto de la siguiente manera:
Atributo: Es una caracterstica fundamental de cada objeto y por lo tanto como veremos posteriormente de una clase. Todos los atributos tienen algn valor, siendo este una cantidad, una relacin con otro objeto
... Si el valor del atributo es un valor fijo para todos los objetos, se dice
que es un atributo esttico
sera la siguiente:
Cuando se habla del aspecto de los objetos, no nos estamos refiriendo a los
conceptos de buen o mal aspecto visual. Nos referimos a como el objeto se ve
internamente o aspecto interno y como ven al objeto desde otros objetos
tambin llamado aspecto exterior.
14
15
MDULO 1
3. Clase
Hasta ahora hemos visto que define a un objeto. Una de las definiciones ms sencillas es algo del mundo real, tangible o visible.
Hemos visto que los objetos estn formados por atributos y mtodos. La definicin
de estructura y comportamiento de un objeto es a lo que se denomina clase. Es por
tanto un patrn para la definicin de atributos y mtodos para un tipo particular de
objetos.
Todos los objetos de una clase dada son idnticos en estructura y comportamiento
pero son nicos (aunque tengan los mismos valores en sus atributos).
Este aspecto exterior, es llamado tambin interfaz, siendo la parte visible y
Instancia es el trmino utilizado para referirse a un objeto que pertenece a una cla-
accesible para el resto de objetos. Puede estar formado por uno o varios m-
se concreta.
ro no pertenezca al interfaz. En este caso, estos mtodos no pueden ser llamados desde otros objetos, sino que solamente pueden ser llamados desde
La estructura de una clase, por tanto, viene determinada por un nombre, los atribu-
Ejemplo: Para el objeto unReloj, el interfaz estara formado por los mtodos
limpiarPan-
loj,
cuyos atributos son dia, hora, modelo y numSerie y cuyos mtodos son
Interfaz: Aspecto exterior que es visible al resto de objetos. Puede estar formado por uno o varios mtodos.
16
17
MDULO 1
Frecuencia
Anlisis y Diseo, permite que los objetos con la misma estructura de datos y
con el mismo comportamiento se agrupan para formar una clase.
18
19
MDULO 1
x
Decidir cual es el concepto o conceptos (Clase, Objeto, Mtodo, Atributo) que
Objeto.
siguiente cuadro:
Atributo.
Mtodo.
Interfaz.
Clase
20
MDULO A
Paradigmas de la OO
Tema 1.3
ndice de la unidad:
En esta unidad veremos cuales son los paradigmas en los que se apoya la Orientacin a Objetos, tanto a nivel de Anlisis y Diseo, como en la Programacin.
Abstraccin
Encapsulacin y Ocultamiento
Herencia
Polimorfismo
2. Abstraccin
Consiste en la generalizacin conceptual de los atributos y comportamiento de un
determinado conjunto de objetos.
25
MDULO 1
que es inaccesible para los dems. Permite tratar a un objeto como una caja ne-
se puede modificar la implementacin o el aspecto interno, sin que los objetos con
4. Relaciones
tos comunes que queremos tener contemplados en el mbito de nuestra solucin, encontramos que en todos ellos, queremos tener una foto, que tipo de ali-
Las clases no existen de forma aislada sino que muchas veces tienen dependencias
entre ellas. Estas dependencias es a lo que se llama relacin y existen distintos ti-
ber como hacen ruido, como comen, como duermen y como rugen. As de una
3. Encapsulacin y Ocultamiento
Se tratan los dos paradigmas de forma conjunta, puesto que se utilizan normalmente de forma simultnea.
Encapsular, significa reunir a todos los elementos que pueden considerarse perte-
pueden acceder otros objetos, del aspecto interno e implementacin del mismo,
26
27
MDULO 1
Por tanto, un objeto que representa el todo, est asociado con un conjunto
se utiliza para
nua)
x
para repre-
sentar la agregacin.
x
a un
sera miPrograma puede acceder a un producto, pero un producto no puede acceder a miPrograma.
x
para repre-
sentar la composicin.
x
28
29
MDULO 1
clases.
El objeto llamante requiere el conocimiento previo del interfaz del objeto reLas clases se disponen en una jerarqua, donde una clase hereda los atributos
ceptor, porque sino no tiene manera de saber que peticiones tiene disponibles
Una clase puede tener sus propios atributos y operaciones adicionales a los
el diseo (en diseo solo se observan las interfaces y las relaciones). En una
cambiar su implementacin.
para represen-
tar la herencia.
x
animales. Todos ellos, deben de hacerRuido, comer, dormir y rugir. Cada una de
las especializaciones, tanto los Felinos como los Caninos saben como rugir. A su
vez, cada una de las especializaciones saben como comer, y como hacerRuido.
Todos ellos, realizan la operacin de dormir de la misma manera que se ha de-
30
31
MDULO 1
5. Polimorfismo
Permite implementar mltiples formas de un mismo mtodo, dependiendo cada una
de ellas de la clase sobre la que se realice la implementacin. Esta basado en el
concepto especializacin de la herencia, donde cada clase hija, sabe implementar
mejor que el padre alguno o todos sus mtodos.
Esto posibilita desencadenar implementaciones de operaciones diferentes como
ser consciente del interfaz del mismo, mediante la clase padre. Es en ejecucin,
cuando dependiendo realmente del tipo de objeto real, se ejecutar la implementacin concreta de cada objeto.
x
en el mundo real existen flores sin ptalos (sera una relacin de agrega-
relacin con Figura para calcularArea y calcularPerimetro. Pero realmente es cada una de las figuras, la que sabe como tiene que calcularArea o calcularPerimetro. Por eso, cada una de ellas, Cuadrado, Triangulo y Circulo van a implementar cada uno de los mtodos de una manera mas especializada que el padre
32
Existe una clase Flor que contiene Ptalos: Relacin de composicin. Aunque
Las clases Rosa y Margarita tienen son Flores, por lo que tienen una relacin de herencia con Flor.
33
MDULO 1
Como solucin tambin vlida, se podra tener una relacin de herencia con
Rosa, las clases RosaAmarilla y RosaRoja, pero de esta manera, teniendo un
atributo color permite una mejor reutilizacin en el caso de que pueda aparecer otra rosa de otro color.
A su vez, como tipos de Plaga que pueden asolar a nuestras Flores son los
Pulgones , por lo que tiene una relacin de herencia entre Plaga y Pulgon y
una relacin de asociacin entre Plaga y Flor. La Flor conoce a la Plaga pero
no a la inversa.
x
Como los Pajaros se comen a las plagas, tienen relacin de asociacin con
x
x
x
Abstraccin
Encapsulacin y Ocultamiento
Relaciones
34
asociacin
agregacin
composicin
herencia
mensaje
Polimorfismo
35
MDULO B
UNIDADES DIDCTICAS:
MDULO B
Tema 2.1
ndice de la unidad:
1. Introduccin
2. Caractersticas del lenguaje
3. La plataforma Java
En esta unidad veremos el origen del lenguaje de programacin Java y cuales son
sus principales caractersticas.
1. Introduccin
Fue creado por Sun Microsystems en el ao 1991 e inicialmente se denmino OAK y
se desarroll principalmente orientndolo a la programacin de microsistemas y
componentes electrnicos.
Tras el cambio de nombre y modificaciones de diseo, el lenguaje Java fue presentado en sociedad en Enero de 1995 con una nueva orientacin: Internet. Fue presentado conjuntamente con un navegador Web denominado HotJava.
Tiene una sintaxis muy similar a la de C++, pero tiene un modelo de objetos mas
simple y elimina elementos de bajo nivel que suelen inducir a muchos errores, como pueden ser la manipulacin directa de punteros o memoria.
Entre noviembre de 2006 y mayo de 2007, Sun Microsystems cedi la mayor parte
de sus tecnologas Java a GNU GPL, de tal forma que prcticamente todo el Java de
Sun es ahora Software libre.
La idea inicial del lenguaje se bas en el paradigma de Write Once, Run Anywhere
(Escribe una vez, ejecuta en cualquier lugar), proporcionando un lenguaje independiente de la plataforma en la que se ejecute.
Java ha sufrido numerosos cambios desde la versin inicial, JDK (Java Depelopment
Kit o entorno de desarrollo) 1.0, as como un aumento increble en el nmero de
clases y paquetes que componen la biblioteca estndar. Esta biblioteca estndar se
ha visto ampliada por numerosas bibliotecas de carcter especfico, como pueden
ser las bibliotecas visuales, comunicaciones, etc.
43
MDULO 2
No soporta destructores.
Posee una clase String, en vez del array de tipo char[] finali-
macin Orientado a Objetos, que adems de cumplir con los paradigmas de esta
disciplina de programacin (Abstraccin, Encapsulacin y Ocultamiento, Herencia,
Polimorfismo y Reutilizacin), posee las siguientes propiedades:
x
Sencillo
Distribuido
Interpretado
Robusto
Seguro
Altas prestaciones
Multithread
Dinmico
2.2 Distribuido
Est concebido para trabajar en un entorno conectado en red.
Cuenta con una amplia biblioteca de clases para comunicarse mediante los
protocolos de comunicaciones TCP/IP: HTTP, FTP abriendo sockets, estableciendo y aceptando conexiones con servidores o clientes remotos.
Permite manipular con gran facilidad recursos va URL.
nadas.
2.3 Interpretado
2.1 Sencillo
Para que un programa Java puede ejecutarse, tiene que ser compilado pre-
44
45
MDULO 2
2.4 Robusto
cia de fallos. Al ser previamente compilado, todos los errores sintcticos son
Unidad 2.2.
Un lenguaje de estas caractersticas suele tener ms restricciones a la hora de
A continuacin se muestra cual sera el procedimiento a seguir, para poder
2.5 Seguro
Por su naturaleza distribuida, donde por ejemplo, los applets se bajan desde
cualquier punto de la red y se ejecutan en local, el tema de la seguridad es
muy crtico. A nadie le gustara ejecutar en su propio ordenador programas
que tuvieran total acceso a su sistema, donde por ejemplo, pudieran coger informacin confidencial, tales como passwords o cuentas bancarias o incluso
poder formatear el ordenador personal.
Todos los navegadores poseen una sand box o entorno de ejecucin controlado donde no se permite realizar ninguna ejecucin fuera de ella (como puede ser acceso al sistema de ficheros) a menos que se indiquen explcitamente
excepciones por parte del usuario que lo ejecuta.
Estas excepciones pueden venir determinadas por tecnologas de firma digital
para confiar en un determinado cdigo Java y/o mediante polticas de seguridad para controlar de una manera ms precisa que puede o no puede hacer
(por ejemplo leer ciertos ficheros, poder abrir sockets ...).
46
47
MDULO 2
sistemas hetereogneos.
cin, generando un ejecutable (no cdigo interpretable) atado a dicha plataforma. Este tipo de compilador se encuentran en desuso.
Por tanto, el cdigo bytecode es independiente no solo de la plataforma Software en la que se ejecuta, sino tambin de la plataforma Hardware.
2.8 Multithread
aritmticos y el uso de estndares como UNICODE, IEEE 754 etc que per-
usuario, y otro thread realiza ciertos clculos. Por ejemplo, es bastante frecuente la existencia de un thread que espera que un usuario lance una peticin de
operacin y en el momento de la llegada se abra otro thread para ejecutar dicha
operacin, mientras el thread de comunicacin con el usuario queda a la espera
de nuevas peticiones. As, si tres usuarios realicen tres peticiones al mismo
tiempo el nmero total de threads seran 4, uno por cada operacin ejecutndose ms el thread que sigue quedando a la espera de nuevas comunicaciones.
Cuando la ejecucin de cada operacin termine, el thread correspondiente terminar y desaparecer.
Para poder realizar esta ejecucin simultanea de varias tareas, Java posee
una serie de clases que facilitan su utilizacin.
2.9 Dinmico
El cdigo C++, a menudo requiere una recompilacin y lincado completa si
cambia una clase.
Java utiliza una fase de linkado o utilizacin de clases en tiempo de ejecucin
en modo dinmico. As las clases solo son utilizadas cuando son necesitadas.
Permite utilizar nuevas clases bajo demanda, procedentes de fuentes diversas, inclusive internet.
Para conseguir esto, Java emplea un mtodo de interfaces para evitar estas
dependencias y recompilaciones.
directa que utilice la clase X, se le puede indicar que busque entre todas las
49
MDULO 2
la ejecute. Este acceso se puede realizar tanto a nivel de clase, como a nivel
de mtodo y atributo.
3. La plataforma Java
La plataforma Java es una plataforma solo software que se ejecuta sobre otra plataforma hardware/software.
Tiene dos componentes diferenciables:
x
50
51
MDULO B
Orientado a Objetos
Seguro
Distribuido
Interpretado
Robusto
Seguro
Altas prestaciones
Multithread
Dinmico
Java ME
Java SE
Java EE
Entorno de desarrollo
Tema 2.2
ndice de la unidad:
Sun, que tiene una JDK para las siguientes plataformas: Win-
forma
gratuita
de
la
siguiente
URL
http://java.sun.com/javase/downloads
x
IBM, que tiene una JDK para las siguientes plataformas: Win-
Apple, que tiene una JDK para las siguientes plataformas: Ma-
cintosh .
1. 1 Historia
La primera versin del JDK fu el JDK 1.0.0 que se retir de circulacin con la
aparicin del JDK 1.1.0
El nombre ha ido cambiando entre JDK (Java Development Kit) y SDK (Software Development Kit), quedando de nuevo JDK como nombre actual. Tambin ha ido cambiando el sistema de numeracin, cambiando a 5.0 en lugar de
1.5.
A su vez, y a partir de la versin 1.2, el nombre "J2SE" (Java 2 Platform,
Standard Edition), reemplaz a JDK para distinguir la plataforma base de J2EE
(Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition).
55
MDULO 2
Cada una de estas plataformas, contienen tanto una JDK (o entorno de desa-
lizado en ejecucin), tambin llamado JVM. En este curso, solamente nos cen-
cas
x
res.
x
CORBA
ha sido regulada por el JCP (Java Community Process), que utiliza Java Speci-
incluye son:
56
Colecciones (Collections)
JavaSound API
57
MDULO 2
x
x
metadatos.
fueron:
manualmente.
x
Logging API
parmetro de un mtodo puede ser declarado con el nombre del tipo seguido por tres puntos (por ejemplo: void
drawtext(String... lines)). En la llamada al mtodo, puede
JSSE, JAAS)
mente el interfaz Iterable, como la clase estndar CollecJava Web Start incluido (El primer lanzamiento ocurri
tion
x
58
59
MDULO 2
de Javascript en Java.
x
2.2 Componentes
facilita el desarrollo y ejecucin de los programas Java, vamos a trabajar con el JDK
directamente, para poder afianzar ciertos conceptos imprescindibles.
Ver la Unidad Instalacin del JDK y Eclipse para los detalles de la instalacin.
Hay dos variables de entorno de gran relevancia para el JDK, PATH y CLASSPATH:
javap.exe: Desensamblador.
listan los directorios donde se encuentran los ejecutables de los programas instalados en una mquina. En el caso del JDK, se encuentran en el directorio bin de la instalacin.
x
Existe
http://java.sun.com/javase/6/docs/api/index.html
documentacin
online
acerca
del
JDK
en
la
siguiente
URL
60
2.1 Contenido
En el captulo anterior, hemos estado viendo el JDK no visual. Pero existen herra-
zan:
MDULO 2
remos durante el curso. http://www.eclipse.org (ver la Unidad Instalacin del JDK y Eclipse para su instalacin)
x
Rational
Application
Developer:
Es
de
IBM
http://www.ibm.com/software/awdtools/developer/application y est
construido sobre Eclipse.
x
y javac.exe
http://developers.sun.com/jscreator
x
JBuilder: Es de Borland
http://www.codegear.com/products/jbuilder
En el caso de que no aparezcan correctamente la salida de los comandos mencionados anteriormente, verificar el valor de la variable de entorno PATH comprobando
que contiene el directorio bin donde se haya instalado el JDK.
PRCTICA A: Requiere instalar el JDK. Desde una sesin de DOS, ir a un directorio
distinto del de la instalacin del JDK y ejecutar los comandos java.exe -version
PRCTICA B: Requiere instalar el JDK. Desarrollar un programa Java que muestre
por pantalla el texto Hola Mundo! con el JDK de Sun.
62
63
MDULO 2
En el caso de que no est puesta la variable de entorno PATH, abrir una sesin DOS
y ajustar la variable PATH para que el Sistema Operativo sepa encontrar las herramientas del JDK. Para respetar el valor que ya tuviese la variable PATH le aadimos
%PATH%.
Ahora arrancamos un editor de texto (por ejemplo Notepad) para escribir el cdigo
fuente de nuestro programa que guardaremos en el fichero Practica1.java; el
nombre del fichero debe ser exactamente igual (incluyendo maysculas y
minsculas) al de la clase Java que vamos a desarrollar.
Creamos un directorio de trabajo donde guardar el programa Java.
64
65
MDULO 2
Si no sale ningn mensaje significa que todo ha ido bien y que ha creado el
bytecode, es decir, Practica1.class
Por ltimo, ejecutamos el programa Java con la JVM java. A la JVM hay que darle
el nombre del fichero del bytecode sin la extensin.
67
MDULO 2
PRCTICA C: Requiere instalar Eclipse. Desarrollar un programa Java que muestre por pantalla el texto Hola Mundo! con Eclipse
Arrancar Eclipse, ejecutando c:\eclipse3.5.2\eclipse.exe
68
69
MDULO 2
Crear una clase Java nueva llamada Practica2 con el mtodo main.
70
71
MDULO 2
Seleccionar Finish
Escribir el cdigo dentro del mtodo main y salvar con Ctrl + S o File -> Save
Seleccionando la clase Java, con el botn derecho del ratn ejecutarla como Java
Application
72
73
MDULO 2
En este unidad hemos visto la historia del JDK desde su comienzo hasta el momento actual, viendo las distintas posiblidades de desarrollo, va el JDK directamente (entorno no grfico) o va los entornos grficos o IDEs, tales como Eclipse,
Rational Application Development ...
74
MDULO B
Sintxis
Tema 2.3
ndice de la unidad:
1. Comentarios
2. Puntos y coma, bloques y espacios en blanco
3. Identificadores
4. Variables
5. Tipos de datos
6. Variables primitivas versus complejas
7.
1. Comentarios
Los comentarios son lneas de cdigo que no son ejecutadas en tiempo de ejecucin, ni siquiera son incluidas en el byte code compilado. Estos comentarios, permiten incluir explicaciones acerca de qu es lo que est haciendo nuestro cdigo, documentacin, inhabilitar lneas de cdigo que ya no son necesarias en runtime, etc.
Existen tres formas distintas de escribir los comentarios:
x
/*
/**
79
MDULO 2
El punto y coma define una sentencia Java o lo que es lo mismo una lnea simple de
cdigo terminada en un punto y coma. La lnea simple de cdigo puede o no estar
fsicamente formada en una lnea fsica.
x
Java permite los espacios en blanco entre elementos de cdigo fuente. Son utilizados principalmente para separar cada uno de los elementos de la sintaxis Java (al
menos un espacio en blanco como mnimo) y mejorar el entendimiento del cdigo
(el nmero de espacios utilizado para este propsito es irrelevante).
x
se utilizan como separadores de elementos de la sintaxis (entre int e i, y entre int y j entre otros) y como mejoras para el entendimiento del cdigo:
80
81
MDULO 2
3. Identificadores
Son los nombres unvocos que se le dan a las clases, mtodos y variables. Hay que
$va-
4. Variables
dlar ($).
Una variable es un contenedor de datos identificado mediante un identificador o
Toda variable debe llevar asociado un tipo que describe el tipo de dato (ver punto
5) que guarda. Por tanto, una variable tiene:
res distintos.
x
Un tipo
Un identificador
Un dato o valor.
4. 1 Declaracin de variables
82
83
MDULO 2
La declaracin es la sentencia mediante la cual se define una variable, asignndola un tipo y un identificador. El formato es tipo identificador;
x
En el caso de que no se le asigna un valor, se inicializar con el valor por defecto para ese tipo (veremos los distintos tipos y sus valores por defecto en el
punto 5 Tipos de Datos).
distintos (en el mismo no se puede), tienen preferencia las del mbito ms interno. Las variables de bloque tienen preferencia frente a las locales; estas tie-
nen preferencia frente a los parmetros y por ltimo las de menor preferencia
puede accederse a ellas, dentro del bloque donde han sido declaradas.
84
85
MDULO 2
5. Tipos de datos.
En Java existen dos tipos de datos genricos:
x
Lgico: boolean.
Carcter: char.
Nmeros enteros: byte, short, int y long.
Nmeros reales: double y float.
true: o verdadero
Se suelen utilizar en las sentencias de control de flujo del tipo bifurcaciones del
tipo if-then-else (ver punto 8).
MDULO 2
cio en blanco.
Para las cadenas de caracteres existe un tipo complejo: la clase String que se
Se suelen utilizar para el tratamiento de caracteres, ya sea como caracteres individuales dentro de un String, caracteres contenidos en un fichero, etc.
32768 a 32767
x
2147483468 a 2147483467
x
Se suelen utilizar en operaciones arimticas, en sentencias de control de tipo bucle (en concreto la sentencia for y el tipo int), etc.
a 127.
enorme a enorme
Sus posibles valores son:
88
hexadecimal).
ma.
x
plataforma.
Sus posibles valores son:
x
89
MDULO 2
El siguiente ejemplo muestra el valor de variables de distintos tipos con sus valores asignados en la declaracin
Se suelen utilizar para tener una lista de posibles valores asociados a una variable y solamente dichos valores.
MDULO 2
Un tipo de dato nmerico puede llegar a convertirse a otro tipo. Existen cuatro
entornos de conversin en Java:
x
float.
x
long
x
7. Operadores
Llamada a mtodos con parmetros. Por ejemplo: f(long p) ->
Los operadores realizan funciones sobre uno, dos o tres operandos (op). Por tanto,
Operadores ternarios: op ? op : op
Los operadores siempre devuelven un valor que depende del operador y del tipo
de los operandos.
Otra posible clasificacin es por la naturaleza del operador:
te:
Una variable de tipo complejo contiene una referencia (puntero) a la zona de memoria donde est el objeto:
92
Aritmticos
Relacionales
Condicionales
De desplazamiento
93
MDULO 2
Lgicos
De asignacin
Otros
con las variables de tipo String, porque en este caso concatena los
short o char.
despus de incrementarse).
x
antes de incrementarse).
x
despus de decrementarse).
valores.
antes de decrementarse).
Los valores que devuelven estos operadores depende de los tipos de los operandos:
x
94
95
MDULO 2
tantas veces como indique el segundo operando op1 >> op2. Realiza la misma funcin que multiplicar por 2, tantas veces se desplace.
x
tantas veces como indique el segundo operando op1 << op2. Realiza la misma funcin que dividir por 2, tantas veces se desplace.
tantas veces como indique el segundo operando pero sin signo op1
>= op2
>>> op2. Realiza la misma funcin que multiplicar por 2, tantas ve-
<= op2
desplazamiento
97
MDULO 2
uno si alguno de los bits de los operandos es uno, pero no los dos a
la vez) op1 ^ op2
uno si los bits de ambos operandos son uno) op1 & op2. Cuidado
con no confundir con el operador lgico &&
op2
x
|: OR lgico a nivel de bit de los operandos (el resultado es
uno si alguno de los bits de los operandos es uno) op1 | op2. Cuidado con no confundir con el operador lgico ||
+= op2
x
= op2
98
99
MDULO 2
en la Unidad 3.1).
x
dad 2.4).
x
while(expresin)
{
sentencias;
}
La sentencia do-while es parecida a la sentencia while pero asegura que como
mnimo el bloque de cdigo se ejecuta una vez.
do
{
sentencias;
}
while(expresin);
Sin las sentencias de control de flujo, el cdigo Java se ejecutara linealmente desde la primera lnea hasta la ltima.
Existen cuatro tipos de sentencias de control de flujo:
x
100
101
MDULO 2
if(expresin)
{
sentencias;
}
La sentencia if-then-else sera
for(inicializacin: coleccin)
{
sentencias;
}
Bsicamente, se trata de una simplificacin a la hora de codificar. Es decir, al final, el compilador convierte el cdigo en una sentencia for convencional como la
siguiente:
102
if(expresin)
{
sentencias;
}
else
{
sentencias;
}
Las sentencias if pueden estar concatenadas. Su sintaxis sera:
if(expresin)
{
sentencias;
}
else if (expresin2)
{
sentencias;
}else
{
sentencias;
}
x
das
103
MDULO 2
}
public void evaluar(int param)
{
if (param < 5)
{
//ejecutamos algo
} else if (param >=5 && param < 10){
//ejecutamos algo
} else {
//ejecutamos algo
}
}
mo de la sentencia switch. Por tanto, salta a la siguiente lnea de cdigo despus del bucle o switch.
to del cdigo
En el caso de que todas las comparaciones sean false se ejecutar las sentencias del default (en el caso de existir, puesto que es optativo).
switch(intExpresin)
{
case intExpresin:
sentencias;
break;
default: // es optativo
sentencias;
}
x
104
105
MDULO 2
while(x<10)
{
if(x>3)
{
System.out.println("Hola");
}
}
}
}
PRCTICA A: Identificar que sentencias son correctas y cules no (se irn utilizando las variables segn se va avanzando en el ejercicio):
1. int x = 34.5;
2. boolean boo = x;
3. int g = 17;
4. int y = g;
5. y = y + 10;
6. short s;
7. s = y;
8. byte b = 3;
9. byte v = b;
10. short n = 12;
11. v = n;
12. byte k = 128;
13. int p = 3 * g + y;
Solucin:
1. int x = 34.5; -> int x = (int)34.5; // Posible con downcasting
2. boolean boo = x; -> No hay solucin
3. int g = 17;
4. int y = g;
5. y = y + 10;
6. short s;
7. s = y; -> s = (short)y; // posible con downcasting
8. byte b = 3;
9. byte v = b;
10. short n = 12;
11. v = n; -> v = (byte)n; // posible con downcasting
12. byte k = 128; -> byte k = (byte)128; // posible con downcasting
13. int p = 3 * g + y;
Solucin:
El cdigo compila bien. Pero entra en un bucle infinito. Habra que modificarlo con
la lnea roja y saldra la palabra Hola siete veces por pantalla.
public class Temp
{
public static void main(String[] args)
{
int x = 1;
while(x<10)
{
x = x + 1;
if(x>3)
{
System.out.println("Hola");
}
}
}
}
107
MDULO 2
PRCTICA E: Desarrollar un programa Java que muestre por pantalla los nmeros
primos del 1 al 1000 y todos los aos bisiestos entre el ao 2000 y el 3000.
Vamos a realizar la prctica con el con el JDK de Sun.
En el caso de que no est puesta la variable de entorno PATH, abrir una sesin DOS
y ajustar la variable de entorno PATH para que el Sistema Operativo sepa encontrar
las herramientas del JDK. Para respetar el valor que ya tuviese la variable PATH le
aadimos %PATH%.
Solucin
108
109
MDULO 2
PATH%.
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o aadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el cdigo, o
aadir el directorio de trabajo y ejecutar las herramientas donde queramos. Para
respetar el valor que ya tuviese la variable CLASSPATH le aadimos %CLASS-
110
Ahora arrancamos un editor de texto (por ejemplo Notepad) para escribir el cdigo
fuente de nuestro programa que guardaremos en el fichero PracticaE.java; el
nombre del fichero debe ser exactamente igual (incluyendo maysculas y
minsculas) al de la clase Java que vamos a desarrollar.
111
MDULO 2
Si no sale ningn mensaje significa que todo ha ido bien y que ha creado el bytecode, es decir, PracticaE.class
Por ltimo, ejecutamos el programa Java con la JVM java. A la JVM hay que darle
el nombre del fichero del bytecode sin la extensin.
112
113
MDULO 2
114
115
MDULO 2
Crear una clase Java nueva llamada PracticaE con el mtodo main.
116
117
MDULO 2
Seleccionar Finish
Escribir el cdigo dentro de la clase y salvar con Ctrl + S o File -> Save
118
119
MDULO 2
En esta unidad hemos visto la sintaxis del cdigo Java, aprendiendo a utilizar comentarios, delimitar una sentencia Java con el ; y el uso de los espacios en
blanco.
Se han definido los Identificadores, las Keywords, las Variables y los mbitos
donde se pueden utilizar:
Atributos
Parmetros de mtodo.
Variables locales
Variables de bloque
Se han visto los distintos Tipos de datos:
x
tipos primitivos:
Lgico: boolean
Carcter: char.
Nmeros enteros: byte, short, int y long.
Nmeros reales: double y float.
x
120
MDULO B
ndice de la unidad:
1. Clases
2. Objetos
3. Relacin de herencia
4. Polimorfismo
En esta unidad veremos los cuatro paradigmas bsicos en los que se apoya los lenguajes orientados a objetos y por tanto el lenguaje de programacin Java.
1. Clases
Una clase representa la abstraccin de las operaciones y los datos (o atributos y
mtodos) comunes a un conjunto de objetos, en relacin a nuestro mundo real.
La implementacin de una clase Java debe ir en un fichero fsico en formato texto,
con la extensin *.java y nombre idntico a la clase implementada.
x
1. 1 Atributos y mtodos
La implementacin de una clase consiste en una serie de:
x
Atributos o datos.
Mtodos u operaciones.
125
MDULO 2
cin.
x
Ejemplo:
public int metodo(String param1, int param2, int params)
{
}
// en este ejemplo, siempre se recibir param1 y param2, mientras
que params ser una array de un tamao indeterminado hasta su
ejecucin.
1. 2 Constructores
La implementacin del mtodo ir contenida en un bloque { } justo despus
Existe un tipo de mtodo especial en Java llamado constructor.
de la declaracin.
x
Ejemplo:
de esa clase.
public int suma(int param1, int param2)
En su implementacin se suele dar valores a los atributos para ese objeto para
{
return param1 + param2;
Su declaracin es idntica a la de los mtodos convencionales con dos salveJava SE 5.0 aade una novedad a la definicin de un mtodo mediante la ca-
dades:
racterstica: varargs.
Se permite definir un nmero indefinido de parmetros del mismo tipo mediante: ... Lo que recibimos es un array del tipo definido.
x
Ejemplo:
public int suma(int params)
{
int acum = 0;
for(int num: params) { // He usado tambin el nuevo for/in
acum = acum + num;
}
return acum;
}
Hay que tener en cuenta que podemos recibir, cero, uno o varios valores en
Ejemplo:
public MiClase(int param1, boolean param2)
{
}
127
MDULO 2
1. 3 Sobrecarga de mtodos
Se dice que un mtodo est sobrecargado cuando existen dos mtodos con el
mismo nombre y tipo de retorno pero con parmetros distintos.
De esta manera podemos tener en una clase varios constructores.
x
Ejemplo:
public MiClase()
{
}
public MiClase(int param1, boolean param2)
{
}
Java SE 5.0 aade una novedad al respecto. Se permite la sobrecarga de mtodos cambiando tambin el tipo de retorno, pero siempre que:
x
El nuevo tipo de retorno sea hijo del tipo de retorno del mto-
1. 4 Convenciones en Java
128
129
MDULO 2
tanciar.
La sintaxis de la inicializacin sera la siguiente:
tipo identificador = new tipo([parametro,]);
x
dato
directamen-
te:
2. Objetos
Los objetos en Java no son mas que variables de tipo complejo, frente a las de tipo
Mientras que una variable de tipo complejo contiene una referencia (puntero)
primitivo.
Ejemplo:
La inicializacin de un objeto si que es algo distinta a la inicializacin de las variables de tipo primitivo:
x
130
MDULO 2
Ejemplo: miCuenta.reintegro(13.7);
A sus atributos.
A sus mtodos.
Ejemplo: miCuenta.saldo = 0;
La sintaxis para acceder a un mtodo (lo que en Orientacin a Objetos se denominaba mensaje) es la siguiente:
objeto.metodo([parametro,..])
132
133
MDULO 2
El parmetro args es un array (ver Unidad 3.1) donde permite pasarle argumentos al programa Java para su ejecucin, en caso de necesitarlos.
Si las clases representan entidades que participan en la resolucin de un problema. En qu entidad tiene sentido incluir el mtodo main?. En ninguna. Por
eso crearemos siempre una clase a parte (de ahi el denominarla truco), que
solo tenga el mtodo main. Debido a que no est relacionado con ninguna clase en concreto, no se necesita la creacin de ningn objeto para llamarla.
lidez.
jeto creado va new. Pero ojo!, el objeto al que referenciaba pun no se pue-
de limpiar porque sigue referenciado por centro desde un atributo del objeto
referenciado
134
por
135
MDULO 2
cir.
Ejemplo:
3. Relacin de herencia
Se basa en la existencia de relaciones de generalizacin/especializacin entre clases.
Las clases se disponen en una jerarqua, donde una clase hereda los atributos y
Las clases por encima en la jerarqua a una clase dada, se denominan superclases
o clases padre.
Las clases por debajo en la jerarqua a una clase dada, se denominan subclases o
clases hijas.
136
Ejemplo:
Ejemplo:
137
MDULO 2
Ejemplo:
public class MiClase extends Object
{
// Es redundante escribirlo puesto que el
// compilador lo har por nosotros.
}
Esto significa que nuestras clases siempre van a contar con los atributos y mtodos de la clase Object por lo que es importante conocerlos. Algunos de sus
mtodos ms utilizados son:
x
si son iguales.
x
un objeto.
x
tancia el objeto.
x
llector.
x
Ejemplo:
138
139
MDULO 2
3.2 Casting
El casting es una forma de realizar conversiones de tipos. Hay dos tipos de
casting:
x
rarqua de clases.
Ejemplo:
140
Ejemplo:
141
MDULO 2
142
143
MDULO 2
Habr que tener muy en cuenta los parmetros que se envan y las conversiones por defecto para saber qu mtodo se ejecuta.
x
ble:
public void miMetodo(float param) { }
miObjeto.miMetodo(1.3); //llamar sin problemas al mtodo anterior
Sobrecargamos el mtodo para que reciba un double.
public void miMetodo(double param) { }
miObjeto.miMetodo(1.3); //ya no llama al mtodo con float.
Recordemos que un nmero real por defecto es double.
Para seguir llamando al mtodo con float debemos especificarlo implcitamente:
miObjeto.miMetodo(1.3F); o miObjeto.miMetodo((float)1.3);
x
Ejemplo:
145
MDULO 2
Ejemplo: Lobo es mas especfico que Canino. Luego tiene sentido que Lobo
herede de Canino.
Ejemplo: Las clases Cuadrado, Circulo y Triangulo tiene que calcular su rea
y permetro luego tiene sentido poner esa funcionalidad en una clase genrica
como Figura.
No debemos usar herencia solo por el hecho de reutilizar cdigo. Nunca debemos romper las dos primeras reglas.
x
146
147
MDULO 2
4. Polimorfismo
this se utiliza para acceder desde un objeto a atributos y mtodos (incluyendo
constructores) del propio objeto.
Consiste en que una vez se ha definido una superclase para un grupo de subclases,
cualquier instancia de esas subclases puede ser usada en el lugar de la superclase.
Esto significa que podemos referenciar un objeto de una subclase mediante una re-
148
ferencia declarada como una de sus superclases. Ver punto 3.2 Casting para las
conversiones de tipos.
x
149
MDULO 2
Con el polimorfismo podemos desarrollar cdigo que no tiene que ser modificado
por la introduccin en el programa de nuevas subclases o tipos debido a:
x
150
MDULO 2
x
x
Rediseo
Aadir a MiLista dos atributos nuevos del topo Gato y otro mtodo
add() que reciba un Gato
152
153
MDULO 2
Ejemplo:
public abstract class MiClase
{
}
Ejemplo:
155
MDULO 2
Ejemplo:
156
157
MDULO 2
Otra aproximacin sera introducir los nuevos mtodos solo en las mascotas.
As todas las mascotas heredan el interfaz e implementan su comportamiento
As ya no nos tenemos que preocupar de que haya clases que sin ser masco-
Sin embargo esto implica otro tipo de problemas como que los programadores
de mascotas tendrn que ponerse de acuerdo en el interfaz de estas y siempre
llevarlo a raja tabla puesto que ahora no se hereda y el compilador no nos
ayuda con los posibles errores.
Otro inconveniente muy importante es que no tenemos posibilidad de usar el
polimorfismo con las mascotas.
158
159
MDULO 2
La solucin que parece ptima, sera tener otra clase abstracta llamada Mascota con los mtodos abstractos de las mascotas. Y que todas las mascotas
heredasen de ella.
5. Interfaces
As, ya no nos tenemos que preocupar de que haya clases que sin ser masco-
ple; habilitando as las posibilidades del polimorfismo en la herencia mltiple sin los
problemas que esta conlleva.
Todas las mascotas cumplirn forzosamente el API de las mascotas y el compilador nos ayudar a asegurarlo. Y tambin tendremos la posibilidad de usar
Los interfaces son un tipo de clase especial que no implementa ninguno de sus m-
Pero eso significa que habr clases que heredarn de dos clases a la vez y en
Ejemplo:
public interface MiInterface
160
161
MDULO 2
{
}
Ejemplo:
Siguen siendo clases Java por lo que su cdigo fuente se guarda en un fichero texto
de extensin *.java y al compilarlo se generar un *.class
Los mtodos se definen como abstractos mediante la keyword: abstract. La sintaxis
de la declaracin de un mtodo abstracto es la siguiente:
modif_acceso abstract tipo_retorno nombre([tipo param,]);
x
El objetivo de un mtodo abstracto es forzar una interfaz (API) pero no una implementacin.
De los interfaces tambin se hereda, aunque se suele utilizar ms el trmino implementa por la keyword utilizada. Se realiza mediante la keyword: implements.
La sintaxis de la declaracin de la herencia de un interface es la siguiente:
modif_acceso class nom_clase implements nom_interface[,nom_int.]
{
}
x
Un interface se trata como un tipo cualquiera. Por tanto, cuando hablamos de polimorfismo, significa que una instancia de una clase puede ser referenciada por un
tipo interface siempre y cuando esa clase o una de sus superclases implemente
Ejemplo:
dicho interface.
public class MiClase implements MiInterface
{
}
162
163
MDULO 2
po genrico de clases y adems tengamos algunos mtodos implementados que reutilizar. Tambin cuando no queramos que nadie
instancie dicha clase.
x
164
165
MDULO 2
Solucin:
Estaba mal. No habamos creado el objeto r.
Solucin:
Solucin:
Estaba mal. El objeto miRect no est inicializado, por tanto vale null. Con null no
podemos hablarnos.
166
167
MDULO 2
x
x
x
x
x
x
x
x
x
x
x
Solucin:
1.
2.
3.
4.
5.
6.
7.
168
Nota 1: No seremos rigurosos con las matemticas y supondremos que los tringulos siempre son rectngulos.
169
MDULO 2
Ahora arrancamos un editor de texto (por ejemplo Notepad) para escribir el cdigo
fuente de cada uno de nuestras clases java; el nombre del fichero debe ser
exactamente igual (incluyendo maysculas y minsculas) al de la clase Java que
vamos a desarrollar.
Empezamos con Punto.java
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o aadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el cdigo, o
170
171
MDULO 2
Todava no podemos ejecutar ningn programa Java, porque no tenemos un mtodo main al que llamar y nos faltan por desarrollar ms clases.
Los atributos les aplicamos el modificador de acceso private (los veremos en detalle
en la Unidad 2.5)
Creamos con el notepad las siguientes clases y las compilamos al igual que hemos
hecho con el Punto.java : Circulo.java y Triangulo.java
173
MDULO 2
Por ltimo crearemos nuestra clase truco con el mtodo main que guardaremos
en el fichero PracticaE.java
174
175
MDULO 2
Salvamos los cambios y compilamos la clase con javac. Debemos de tener los bytecode de todas las clases
176
177
MDULO 2
178
179
MDULO 2
Seleccionar Finish
Escribir el cdigo dentro del bloque de la clase y salvar con Ctrl + S o File -> Save
Crear una clase Java nueva llamada Punto sin el mtodo main
180
181
MDULO 2
Crear una clase Java nueva llamada PracticaE con el mtodo main.
182
183
MDULO 2
Seleccionando la clase Java PracticaE, con el botn derecho del ratn ejecutarla
como Java Application
184
185
MDULO 2
En esta unidad hemos visto los cuatro paradigmas bsicos en los que se apoya los
lenguajes orientados a objetos y por tanto el lenguaje de programacin Java.
x
Objetos, que son instancias de una clase determinada. Para poder acceder a sus atributos y mtodos se utiliza el operador punto.
-
El mtodo main se utiliza directamente sin la creacin de un objeto, para empezar la ejecucin de un
programa Java.
Object
Los Interfaces, que proporcionan el API que cualquier clase que implemente dicho interface debe de desarrollar.
186
PA-
MDULO B
Otros conceptos
Tema 2.5
ndice de la unidad:
1. Paquetes
2. Modificadores de acceso
3. Mtodos estticos
4. final
5. Paso por valor o por referencia
6. Cosas que ocurren por defecto
7. Instanceof
1. Paquetes
Los paquetes Java son una caracterstica ms del lenguaje que nos permite
organizar el cdigo en grupos.
Adicionalmente, ayudan a evitar colisiones en los nombres de las clases. De manera
que en un programa que va a usar un framework (conjunto de clases con un propsito en concreto) de un tercero, tenga un 99% de seguridad de que no tiene ninguna clase con el mismo nombre, que las del framework.
Para especificar el paquete al que pertenece una clase se utiliza la keyword: package. La sintaxis de la declaracin de un paquete es la siguiente:
package nombre_del_paquete;
x
Ejemplo: es.java.aula.mentor.figuras;
El nombre de una clase no se limita solamente al identificador utilizado en la definicin, sino a la suma del paquete al que pertenece ms el del identificador: Nombre
de paquete + Identificador de la Clase
x
Por tanto, al ir a utilizar una clase debemos conocer siempre el paquete al que pertenece para poder referenciarla porque si no el compilador no va a saber encontrarla.
Toda clase Java pertenece a un paquete. Si no se especifica nada, pertenece al paquete por defecto (que es un paquete raz sin nombre o nada, pero no est recomendado su uso). En el caso de especificarlo, la sentencia package tiene que ser la
primera lnea del fichero con el cdigo fuente de la clase.
191
MDULO 2
Existe una convencin aceptada por todos los desarrolladores en cuanto a la no-
por
es.java.aula.mentor.figuras.Circulo
debajo
de
este,
es
el
caso
de
la
clase
en minsculas.
mediante el punto)
Utilizar su
punto)
x
Ejemplos: com.ibm.test
mediante el punto)
es.miempresa.utilidades
es.practicas.tema1
como
Para poder utilizar una clase en nuestro cdigo tenemos que escribir su nombre
segn se necesita.
completo cada vez que la utilicemos: paquete + clase. Para mejorar la legibilidad
del cdigo, existe otro mecanismo para facilitar la codificacin y facilitar la vida al
Al igual que las clases Java tienen un reflejo en el Sistema de Archivos (una clase
Java equivale a un fichero texto de extensin *.java), lo mismo ocurre con los pa-
la sentencia es la siguiente:
quetes Java.
import nombre_del_paquete.nombre_de_la_clase;
import nombre_del_paquete.*;
x
Ejemplos: es.java.aula.mentor.figuras.Circulo;
Los paquetes Java equivalen a directorios. Es decir, cada miembro del paquete (separado por puntos) se traduce a un directorio en el Sistema de Archivos.
x
Ejemplo:
package es.java.aula.mentor.figuras;
public class Circulo {...}
es.java.aula.mentor.figuras.*;
Para compilar una clase que pertenece a un paquete tenemos distintas opciones:
x
Desde
c:\trabajo
ejecutamos:
javac
es\java\aula\mentor\figuras\Circulo.java
192
193
MDULO 2
Desde
c:\trabajo\es\java\aula\mentor\figuras
ejecutamos:
javac Circulo.java
Para ejecutar una clase solo tenemos una opcin posible:
x
Desde
cualquier
punto
del
sistema
es.java.aula.mentor.figuras.Circulo.java.
Nota:
ejecutamos:
el
java
directorio
Ejemplo: Ambas clases estn en el paquete por defecto y por tanto se en-
cuentran.
Ejemplo: Las clases estn en paquetes distintos y se utilizan las clases con el
nombre completo
194
195
MDULO 2
Ejemplo: Las clases estn en paquetes distintos y se utilizan las clases con la
sentencia import
Ejemplo: Las clases estn en paquetes distintos y se utilizan las clases con la
197
MDULO 2
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
paquetes distintos. Utilizamos la sentencia import genrico y en la clase conflictiva utilizamos el nombre completo.
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
198
199
MDULO 2
Hemos visto que existe el llamado paquete por defecto al que pertenecen
todas aquellas clases que no indican de forma explcita un paquete
determinado en su cdigo.
Desde la versin 1.4.x, el compilador no permite importar desde una clase que
pertenece a un paquete explcito, una clase que pertenece al paquete por
defecto.
Esto no tendra que ser un problema en la mayora de los casos porque
siempre deberamos ubicar las clase en paquetes Java de forma explcita.
Cuando consultamos el API, por ejemplo, via online en la documentacin de
SUN http://java.sun.com/javase/6/docs/api/index.html, podemos apreciar la
categorizacin de los paquetes y las clases que pertenecen a cada uno de
ellos.
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
2. Modificadores de acceso
Hasta ahora hemos visto que podemos utilizar cualquier clase, mtodo y atributo
desde cualquier punto de nuestro cdigo sin ningn tipo de problema. Pero el
lenguaje de programacin Java, nos permite poder delimitar quin o desde donde
se puede acceder a una clase, a un mtodo o a un atributo.
Existen cuatro tipos de modificadores de acceso y por tanto, cuatro keywords. Las
hemos ordenados de menor a mayor restriccin.
200
201
MDULO 2
x
x
-> Privado.
paquete en castellano)
202
203
MDULO 2
clases
La respuesta es no. Y para ello contamos en Java con los mtodos estticos. Estn
asociados a una clase solamente desde un punto de vista organizativo.
Para definir un mtodo esttico utilizamos la keyword: static. La sintaxis de la
declaracin es la siguiente:
modifi_acceso static tipo_retorno nombre([tipo parametro,..])
{
}
x
Ejemplo:
public static void miMetodo()
{
}
Para ejecutar por tanto un mtodo esttico no hace falta instanciar un objeto de la
clase. Se puede ejecutar el mtodo directamente sobre la clase.
x
3. Mtodos estticos
Existen casos en los que nos encontramos con clases cuyos mtodos no dependen
en absoluto de los atributo de la clase, y en todo caso de los parmetros de los
Una
clase
puede
perfectamente
mezclar
mtodos
estticos
con
mtodos
redondeado.
x
x
Son mtodos que parece no pertenecer a una entidad concreta. Son genricos,
globales, independientes de cualquier estado del objeto.
Tiene sentido instanciar un objeto para ejecutar algo que no depende de nada de
dicho objeto?
204
Hay ciertas reglas que hay que tener en cuenta en el uso de mtodos estticos:
x
205
MDULO 2
Hay que tratarlos con cuidado puesto que son fuente de problemas difciles de
detectar. Como todos los objetos de una misma clase comparte el mismo atributo esttico, si un objeto a modifica el valor del atributo, cuando el objeto
b vaya a usar dicho atributo, lo usa con un valor modificado.
Recordemos que sin embargo los atributos convencionales (de instancia) son
x
de la clase java.lang.System.
x
206
Ejemplo:
207
MDULO 2
4. final
3.2 Bloques de cdigo estticos
final es una keyword que modifica el funcionamiento de:
Los bloques de cdigo esttico son trozos de cdigo que se ejecutan al cargar
una clase en memoria (no al instanciar objetos de esa clase).
Clases
Atributos
Mtodos
Ejemplo:
Definiendo una clase como final conseguimos que ninguna otra clase pueda
heredar de ella.
Para definir una clase final utilizamos la keyword: final. La sintaxis de la declaracin es la siguiente:
208
209
MDULO 2
Ejemplo:
public final class MiClase
{
}
Ejemplo:
la declaracin es la siguiente:
protected final boolean sw = true;
public final int i;
Ejemplo:
Ejemplo:
public final int suma(int param1, int param2)
{
return param1 + param2;
}
210
Ejemplo:
211
MDULO 2
En ocasiones cuando se crea una clase solo con constantes, se suele hacer
mediante un interface, debido a que no es necesario tener ningn mtodo definido ni implementado.
Ejemplo:
Las constantes en Java se suelen definir mediante la combinacin de las keyword: static y final. La sintaxis de la declaracin es la siguiente:
modificador_acceso static final tipo nombre = valor;
x
212
213
MDULO 2
Ejemplo:
de esas referencias.
214
Ejemplo:
215
MDULO 2
de forma implcita:
public abstract int miMetodo();
216
217
MDULO 2
6. Instanceof
Se trata de un operador especial del lenguaje Java representado por la keyword:
instanceof. La sintaxis de la declaracin es la siguiente:
objeto instanceof clase
x
Este operador permite comprobar si un objeto es instancia de una clase o no. Devuelve un boolean por lo que puede utilizarse en expresiones lgicas (condiciones).
Bsicamente lo que hace es comprobar si un casting concreto se puede realizar o
no.
x
Ejemplo:
Solucin:
218
219
MDULO 2
Solucin:
PRCTICA D: Desarrollar, tanto en la JDK de Sun como en Eclipse, el comienzo de
un juego de rol donde tengamos distintas criaturas: Elfos, Trolls y Enanos. Inventad
una serie de atributos (entre ellos la fuerza), constructores y mtodos para todos
ellos. Debern estar en el paquete es.java.aula.mentor.practicad.criaturas.
Al mismo tiempo, tendremos un interfaz con los puntos de fuerza de cada una de
las
criaturas
definidas
como
constantes
en
el
paquete
es.java.aula.mentor.practicad.util. De esta manera un simple cambio en el interfaz
actualiza todo el juego.
La clase PracticaD que se encuentra en el paquete es.java.aula.mentor.practicad
tiene un mtodo main en el que se crean una serie de criaturas y se muestran por
pantalla.
Aunque en esta primera fase del desarrollo del juego no utilicemos las criaturas,
realizar un diseo lo mas genrico, reutilizable y fcil de mantener que se pueda.
PRCTICA C: Cul de estos programas compila sin errores?
Solucin:
220
221
MDULO 2
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o aadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el cdigo, o
aadir el directorio de trabajo y ejecutar las herramientas donde queramos. Para
respetar el valor que ya tuviese la variable CLASSPATH le aadimos %CLASSPATH%
222
223
MDULO 2
225
MDULO 2
Desde el directorio es\java\aula\mentor\practicad, escribimos la clase PracticaD.java que va a contener el mtodo main.
226
Vemos como han quedado las clases compiladas en cada uno de los directorios
227
MDULO 2
228
229
MDULO 2
230
231
MDULO 2
Crear las siguientes clases Troll , Enano, Elfo (sin mtodo main) dentro del mismo
paquete. Para no tener que volver a escribir el nombre del paquete, podemos seleccionarlo va el botn derecho del ratn y luego seleccionar el crear una nueva
clase.
Seleccionar Finish
Escribir el cdigo dentro del bloque del interface y salvar con Ctrl + S o File -> Save
232
233
MDULO 2
En Eclipse, cuando se salvan los cambios, se compila el cdigo, por lo que no hace
falta realizar este paso.
Crear el interface Constantes en el paquete es.java.aula.mentor.practicad.util.
234
235
MDULO 2
Seleccionando la clase Java PracticaD, con el botn derecho del ratn ejecutarla
como Java Application
Por ltimo, creamos la clase que va a contener el main PracticaD, en el paquete java es.java.aula.mentor.practicad
Vemos la salida por la consola
236
237
MDULO 2
En esta unidad hemos visto distintos conceptos que nos permiten organizar nuestro cdigo y modificar el acceso a nuestras clases, mtodos y atributos.
x
Paquetes: son una caracterstica del lenguaje que nos permite organizar
el cdigo en grupos. Fsicamente, cada uno de los subgrupos del paquete
se convierten en un directorio del sistema operativo.
Bloques estticos: son bloques de cdigo que se ejecutan una sola vez
cuando la clase es cargada en memoria.
238
MDULO C
UNIDADES DIDCTICAS:
MDULO C
Clases bsicas
Tema 3.1
ndice de la unidad:
1. Clase java.lang.String
2. Clase java.lang.StringBuffer
3. Clase java.lang.StringBuilder
4. Clase java.lang.System
5. Clase java.lang.Math
6. Otras clases
7. Wrapper de tipos primitivos
En el paquete java.lang, importado por defecto por el compilador en las clases Java, existen ciertas clases muy utilizadas a la hora de desarrollar un programa. Es
por este motivo, que es importante que se conozcan.
1. Clase java.lang.String
A diferencia de C++, en Java se usa la clase String para el manejo de cadenas de
caracteres. Existen distintas formas de crear un String:
x
Otros
constructores:
http://java.sun.com/javase/6/docs/api/java/lang/String.html#constr
uctor_detail
Es importante tener en cuenta que para la clase String, la primera posicin de la
cadena de caracteres es la cero (y no la uno).
Implementa una serie de mtodos muy tiles para el manejo de las cadenas de caracteres. Por ejemplo:
x
str aadido al final del objeto String que realiza la llamada (es igual
que con el operador +).
x
de ch (devuelve -1 si no est).
245
MDULO 3
racteres.
x
1.
x
culas.
x
no el contenido de los objetos). De esta forma, podemos saber si dos objetos String
distintos, representan la misma cadena de caracteres o no.
Ejemplo:
ysculas.
x
de caracteres que representa d. Este mtodo est sobrecargado varias veces recibiendo como parmetro otros tipos primitivos (char,
int, float, long).
x
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/String.html#metho
d_detail
x
246
Hay un concepto muy importante relacionado con el uso de Strings: son inmutables. Es decir, jams se modifica el valor de un String si no que se crean nuevos
objetos. En la ejecucin del siguiente cdigo
String s = "0";
for(int i=1; i <10; i++)
s = s + i;
Ejemplo:
247
MDULO 3
No existe un solo objeto de tipo String al que se le ha ido cambiando su valor inter-
(y no la uno).
donde va guardando todos los String. Y el Garbage Collector jams los elimina.
Cada vez que se crea un objeto nuevo del tipo String, la JVM mira antes si ese
String ya existe, y si es as lo reutiliza.
2. Clase java.lang.StringBuffer
de ch (devuelve -1 si no est).
StringBuffer es otra clase relacionada con las cadenas de caracteres. Pero en este
racteres.
(y no a ).
248
Otros
constructores:
por el StringBuffer.
public String substring(int beginIndex); Devuelve un
http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html#
Reemplaza la cadena entre las posiciones start y end con str. Modifi-
constructor_detail
249
MDULO 3
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html#
method_detail
x
Ejemplo:
El uso ms habitual es la creacin de Strings cuyo valor se calcula de forma dinmica. Al no ser inmutable, permite la creacin del String final sin otros objetos intermedios que consumirn memoria de forma innecesaria. En la ejecucin del siguiente cdigo
StringBuffer tmp = new StringBuffer(10);
for(int i=0; i <10; i++)
tmp.append(i);
String s = tmp.toString();
x
un String.
3. Clase java.lang.StringBuilder
Java SE 5.0 aade la clase StringBuilder al tratamiento de cadenas de caracteres.
Su funcionalidad (constructores y mtodos) es idntica a la de StringBuffer. La nica diferencia es que sus mtodos no estn sincronizados (veremos qu significa esto en la Unidad 3.7 Threads).
250
251
MDULO 3
Para
contrar
http://java.sun.com/javase/6/docs/api/java/lang/System.html#field_detail
una
informacin
ms
detallada
en
ms
informacin
http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html
x
4. Clase java.lang.System
del sistema.
tive Interface).
public static final PrintStream out; Representa por defecto
Otros
mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/System.html#meth
public static final InputStream in; Representa por defecto
od_detail
x
Ejemplo:
252
253
MDULO 3
yor comparando a y b. Este mtodo se encuentra sobrecargado recibiendo otros tipos: long, float
x
nor comparando a y b. Este mtodo se encuentra sobrecargado recibiendo otros tipos: long, float
x
5. Clase java.lang.Math
Se trata de una clase con utilidades matemticas. Todos sus atributos y mtodos
son estticos.
da de a.
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Math.html#method
public static final double E; Es el nmero e, utilizado en los
logaritmos neperianos.
x
_detail
x
Ejemplo:
trigonometra.
Para
obtener
ms
informacin:
http://java.sun.com/javase/6/docs/api/java/lang/Math.html#field_detail
Alguno de sus mtodos ms importantes son:
x
mo base 10 de a.
254
255
MDULO 3
tivamente
6. Otras clases
A continuacin se enumeran otras clases importantes a tener en cuenta pertene-
presentan:
x Ejemplo: Integer a = new Integer(3);
java.text.NumberFormat
Para
trabajar
con
expresiones
regulares:
va.util.regex.Pattern y java.util.regex.Matcher
x
ja-
Ms informacin: http://java.sun.com/javase/6/docs/api/
x
toString
x Ejemplo: String d = Integer.toString(c);
256
257
MDULO 3
todo XXXValue
x Ejemplo: int e = b.intValue();
presenta.
esta forma, podemos saber si dos objetos distintos de un mismo tipo de wrapper,
http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html
Ms
informacin
mtodos:
x Ejemplo:
String s en un Boolean. Si s no vale true entonces siempre devuelve un Boolean con false.
x
un String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Character.html
ve false.
s.
value.
public Byte(String s); Constructor de un Byte con el String
boolean b en un String.
258
259
MDULO 3
en un Byte.
x
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Short.html
s en un byte.
x
en un String.
x
int value.
Ms informacin y mtodos:
String s.
http://java.sun.com/javase/6/docs/api/java/lang/Byte.html
String s en un short.
x
en un Short.
x
String.
s.
x
s en un Integer.
en un int.
short value.
x
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Integer.html
en un String.
x
261
MDULO 3
value.
x
en un Long.
x
un String.
s.
x
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Float.html
en un Long.
x
un String.
x
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Long.html
el double value.
x
String s.
x
s en un Double.
String s en un double.
x
float value.
ble d en un String.
s.
x
en un Float.
x
public
double
doubleValue();
Extrae
el
double
que
representa.
s en un float.
262
263
MDULO 3
http://java.sun.com/javase/6/docs/api/java/lang/Double.html
boxing).
De igual forma, antes para extraer un tipo primitivo de su wrapper utilizbamos el siguiente mtodo:
Integer a = new Integer(1); int b = a.intValue();
Sin embargo ahora se puede hacer directamente:
int b = a;
El compilador se encarga de realizar la extraccin de forma automtica (autounboxing).
Esto nos permite tambin operar con los wrappers:
Integer a = 10; Integer b = 3; int c = a + b;
Tambin se permiten las comparaciones:
Integer a = 5; int b = 6;
if(a == b)
System.out.println(Iguales);
El wrapper Boolean tambin se ve favorecido por esta nueva funcionalidad.
Antes no poda participar en condiciones, pero ahora si:
7.9
Autoboxing/Auto-unboxing
Java SE 5.0 aade una novedad al respecto de los wrappers de tipo bsico,
permitiendo que las conversiones entre tipos
Ante esta nueva funcionalidad, nos podemos preguntar qu pasa con la sobrecarga de mtodos?
264
MDULO 3
int a = 5;
this.metodo(a);
Para evitar diferencias en la funcionalidad de una aplicacin al migrar de versiones anteriores, primero se busca el mtodo a ejecutar sin tener en cuenta
el autoboxing y auto-unboxing. Si no se encuentra ninguno, entonces de busca teniendo en cuenta el autoboxing y auto-unboxing. Se llamara por tanto a:
public void metodo(double param) {
};
x
x
x
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o aadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el cdigo, o
aadir el directorio de trabajo y ejecutar las herramientas donde queramos. Para
respetar el valor que ya tuviese la variable CLASSPATH le aadimos %CLASSPATH%
La cadena invertida.
266
267
MDULO 3
268
269
MDULO 3
270
271
MDULO 3
272
llamado
PracticaA,
especificando
el
paquete
273
MDULO 3
Para ejecutar la clase, pasndole un parmetro, seleccionamos la clase Java PracticaA, con el botn derecho del ratn ejecutarla como Run Configurations
274
275
MDULO 3
Adicionalmente, habr que mostrar el tiempo que tarda en ejecutarse este mtodo.
276
277
MDULO 3
278
279
MDULO 3
Y ejecutamos mediante Run Configurations, verificando que en el Main class aparece la clase PracticaB (en el caso de no aparecer cambiar el nombre o buscarla mediante el botn Search)
280
281
MDULO C
En esta unidad se han visto una relacin de clases bsicas e imprescindibles de conocer a la hora de la programacin en Java.
x
Tema 3.2
java.lang.StringBuffer (sincronizada)
ndice de la unidad:
java.lang.System: se trata de una clase con utilidades genricas del
sistema.
1. Arrays
java.lang.Math: e trata de una clase con utilidades matemticas.
2. Colecciones
Adems se han estudidado las clases wrappers de los tipos primitivos, como son:
x
x
x
x
x
x
x
x
java.lang.Boolean
java.lang.Character
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
En Unidades anteriores hemos estudiado los tipos de datos, tanto primitivos como
complejos. Hemos visto como trabajar con datos de ambos dos tipos, pero siempre
de una manera unitaria. En esta Unidad veremos como trabajar con los conjuntos
de datos, como una sola variable u objeto.
1. Arrays
Un array es una estructura de datos que permite albergar varios elementos del
mismo tipo.
La longitud de un array se establece durante su creacin y una vez establecida la
longitud de un array, ya no se puede modificar, por lo que se puede considerar que
tiene una longitud fija.
Un elemento de un array, es el valor de una de sus posiciones, y se identifica mediante un ndice.
Un array en Java, es un tipo de clase especial que hereda implcitamente de java.lang.Object.
La declaracin de un array se realiza mediante el tipo de datos que va a albergar y
los corchetes [ ]. La sintaxis de la declaracin de un array es la siguiente:
modificador_acceso tipo[] nombre [= valor_inicial];
x
Los arrays pueden albergar tanto tipos primitivos como tipos complejos y para poder utilizarlos, hay que inicializarlos. Un array sin inicializar, por defecto vale null.
La creacin de un array se realiza mediante la keyword: new, como con cualquier
otra clase, tanto para tipos primitivos como para tipos complejos. La sintaxis de la
creacin de un array es:
modificador_acceso tipo[] nombre = new tipo[longitud];
285
MODULO 3
Una vez hayamos creado un array, todas sus posiciones son inicializadas al valor
por defecto del tipo de variable que albergue.
Es decir, 0 o 0.0 si se trataba de un nmero, false si se trataba de un boolean y null
si se trataba de un tipo complejo.
Existe una forma de crear un array inicializando todas sus posiciones a un valor de-
Ejemplos: numeros[2] = 3;
int a = numeros[0];
length.
Al no ser dinmico, no podemos:
x
Ni eliminar posiciones.
Ni insertar posiciones.
El borrado ser algo lgico, como igualar a null, a -1, etc.. las posiciones que no
se quieran o se necesiten utilizar, dependiendo de la lgica que necesite el programa o de la propia eleccin del programador.
286
287
MODULO 3
Es imposible acceder a una posicin fuera del array en tiempo de ejecucin. Llega-
1. 1 Sentencia for/in
Esta nueva sentencia del Java SE 5.0 nos facilita la iteracin por los elementos
de cualquier tipo de coleccin: arrays, listas, etc
programa
public class Colecciones
{
public static void main(String[] args)
{
// Creacin e inicializacin.
String[] saludos = new String[4];
// Insercin.
saludos[0] =
saludos[1] =
saludos[2] =
saludos[3] =
new
new
new
new
String("Hola");
String("Adios");
String("Hello");
String("GoodBye");
for(inicializacin: coleccin)
{
sentencias;
}
// Extraccin.
String tmp = saludos[2];
// Borrado.
saludos[2] = null;
saludos[3] = null;
// Recorrido.
for(int i=0; i<saludos.length; i++)
System.out.println(saludos[i]);
// Bsqueda.
boolean sw = false;
for(int i=0; i<saludos.length; i++)
{
if(saludos[i] != null && saludos[i].equals("Adios"))
{
System.out.println("Adios ha sido encontrado en la posicin: "
+ i);
sw = true;
break;
}
}
}
}
1. 2 Arrays multidimensionales
Un array multidimensional es un array de arrays o desde un punto de vista
matemtico es una matriz. Es decir, una matriz de 4 x 2 en realidad en Java
est formada por 5 arrays: 1 array con 4 arrays.
Y si estuviramos hablando de tres dimensiones entonces tendramos un array
de arrays de arrays, aunque son bastante menos utilizados.
288
289
MODULO 3
Pero podemos tener arrays bidimensionales no cuadradas. Es decir, que la segunda dimensin tenga longitud diferente para cada posicin de la primera
dimensin.
La sintaxis de la creacin de un array bidimensional no cuadrado es la siguiente:
modificador_acceso tipo[][] nombre = new tipo[long][];
x
Ejemplo:
private int[][] numeros = new int[4][];
numeros[0] = new int[2];
numeros[1] = new int[10];
numeros[3] = new int[1];
Al igual que ocurriera en los arrays de una dimensin, los arrays bidimensionales tambin se pueden inicializar en la creacin con un listado de valores.
x
// Mostrar la matriz
for(int i=0; i<matriz.length; i++)
{
for(int j=0; j<matriz[i].length; j++)
System.out.print(matriz[i][j] + " ");
System.out.println();
}
}
}
290
291
MODULO 3
2. Colecciones
Una coleccin es simplemente un objeto que agrupa varios elementos en uno solo.
Se utilizan para guardar y manipular datos as como transmitir informacin entre
mtodos.
En Java tenemos un framework de colecciones, implementado mediante:
x
El mtodo main recibe un array de Strings que contine los argumentos enviados en el arranque de la aplicacin. La sintaxis del mtodo main es la siguien-
ma rpida de saber cual podra ser la elegida a utilizar en cada caso. En el caso de
Ejemplo:
los Collection, hay una clara diferenciacin en cuanto si permite duplicados accediendo por ndice java.util.List, o sin duplicados sin posibilidad de acceso va ndice,
java.util.Set
292
293
MODULO 3
En el caso de los Map, se utilizan siempre que necesitemos trabajar con parejas de
datos clave/valor.
ese elemento.
x
Estas interfaces contiene la definicin de todos los mtodos genricos que deben
2.1 java.util.Collection
Los mtodos bsicos de este interfaz son:
x
x
elementos.
x
mento.
294
295
MODULO 3
Hay que tener siempre en cuenta que las colecciones no permiten el uso de tipos primitivos. Por tanto, siempre que necesitemos trabajar con ellos habr
que hacer uso de los Wrappers de Tipos Primitivos.
2.2 java.util.Iterator
El interfaz Iterator representa un componente que permite iterar o recorrer
los elementos de una coleccin.
Todas las colecciones ofrecen una implementacin de Iterator por medio del
mtodo:
import java.util.*;
apuntando al siguiente. En la siguiente llamada, devolver el segundo elemento y apuntar al siguiente y as sucesivamente hasta el final de la coleccin que devolver un null.
x
Iterator it = ciudades.iterator();
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
}
}
2.2 java.util.Set
El interfaz Set hereda del interfaz Collection. Pero no aade la definicin de
ningn mtodo nuevo.
Representa colecciones que no permiten tener elementos duplicados. Para saber si un elemento est duplicado, hace uso del mtodo:
296
297
MODULO 3
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
}
}
import java.util.*;
public class TestLinkedHashSet
{
public static void main(String[] args)
{
LinkedHashSet ciudades = new LinkedHashSet();
ciudades.add("Madrid");
ciudades.add("Barcelona");
ciudades.add("Malaga");
ciudades.add("Vigo");
ciudades.add("Sevilla");
ciudades.add("Madrid"); // Repetido.
Iterator it = ciudades.iterator();
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
}
}
2.3 java.util.List
El interfaz List hereda del interfaz Collection. Representa colecciones con elementos en secuencia. Es decir, con orden.
Permite tener duplicados.
Es accesible mediante ndice, de manera que se puede:
x
298
299
MODULO 3
tiempo de acceso ptimo cuando dicho acceso es para aadir o eliLos mtodos que aade este interfaz, para acceso posicional son:
x
import java.util.*;
ciudades.add("Madrid");
ciudades.add("Barcelona");
ciudades.add("Malaga");
ciudades.add("Vigo");
ciudades.add(1,"Sevilla");
ciudades.add("Madrid"); // Repetido.
Iterator it = ciudades.iterator();
Los mtodos que aade este interfaz para operaciones de bsqueda son:
x
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
}
import java.util.*;
public class TestArrayList2
{
300
301
MODULO 3
ciudades.add("Madrid");
ciudades.add("Barcelona");
ciudades.add("Malaga");
ciudades.add("Vigo");
ciudades.add(1,"Sevilla");
ciudades.add("Madrid"); // Repetido.
Ejemplo: Utilizacin de java.util.LinkedList
for(int i=ciudades.size()-1; i >=0; i--)
System.out.println("Ciudad: " + i + " es: " +
ciudades.get(i));
import java.util.*;
}
public class TestLinkedList
{
public static void main(String[] args)
{
LinkedList ciudades = new LinkedList();
ciudades.add("Madrid");
ciudades.add("Barcelona");
ciudades.add("Malaga");
ciudades.add("Vigo");
ciudades.add(1,"Sevilla");
ciudades.add("Madrid"); // Repetido.
Iterator it = ciudades.iterator();
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
}
}
302
303
MODULO 3
2.4 java.util.Map
El interfaz Map no hereda del interfaz Collection. Representa colecciones con
va.util.Set.
java.util. Collection.
Para calcular la colocacin de un elemento se basa en el uso del mtodo:
A continuacin enumeramos las distintas implementaciones de este interfaz:
public int hashCode();
Los mtodos bsicos de este interfaz son:
x
ja.
Los mtodos que realizan operaciones masivas son:
x
en el parmetro t.
x
304
Map.
x
implementacin
que
los
elementos
hagan
del
interfaz
ja-
305
MODULO 3
x
x
}
}
}
}
306
307
MODULO 3
2.5 Generics
Se trata de una de las grandes novedades que introdujo Java SE 5.0
Permite tipar el contenido de las colecciones, de manera que se restringe el
tipo utilizado y se elimina el uso masivo de castings.
Para definir el tipo del contenido de una coleccin se utiliza <tipo>:
tipo_coleccion<tipo_contenido> identificador = null;
identificador = new tipo_coleccion<tipo_contenido>();
x
308
309
MODULO 3
Siempre que creemos nuestras propias claves para el uso de los Map, debemos sobreescribir los mtodos equals() y hashCode().
Lo sabe mediante el uso del mtodo equals() de la clave. Va iterando por todas las
claves de ese compartimento para encontrar la que se ha pedido.
El motivo es que los Map utilizan estos dos mtodos para llevar a cabo tanto las
inserciones como las extracciones de valores.
Imaginemos que hacemos un put en el Map con una clave ya existente. Cmo sabe que ya existe y que hay que machacar el valor anterior?
Para entender mejor el uso de estos dos mtodos por parte de los Map, veamos un
poco ms en detalle la estructura interna de este tipo de coleccin.
Lo sabe mediante el uso del mtodo equals() de la clave. Itera para comprobar si
ya existe.
Pero pueden ocurrir colisiones, es decir, que un compartimento ya est utilizado por
una pareja clave/valor. Esto puede ser debido a que:
x
partimento.
310
311
MODULO 3
obstante es lo deseable para evitar en la medida de lo posible las colisiones en los Map y por tanto ofrecer un mejor rendimiento.
Por ejemplo, cmo funcionan los mtodos contains(), add() y remove() de las colecciones?
312
busca de igual forma. Y para aadirlo en un Set que no permite duplicados, lo mismo.
x
313
MODULO 3
En el garaje se cambian las ruedas tanto de coches como de motos. El precio del
cambio de una rueda se fija al abrir el garaje, al igual que la capacidad mxima de
dad tanto de los Arrays como de las Colecciones, que nos permitirn poder discernir
nuevo, habr que tener contemplado un sistema de aviso para quien est dejando
su vehculo.
El sistema de gestin del garaje requiere un mecanismo para ingresar y retirar los
Tamao esttico.
jos.
x
que supondra cambiar todas las ruedas de todos los vehculos, y el kilometraje
Las
clases
relacionadas
con
los
vehculos
se
guardarn
en
el
paquete
Tamao dinmico.
La clase PracticaA tiene un mtodo main en el que se crea un Garaje, una serie de
vehculos que se irn recibiendo en el garaje y por ltimo se imprimir por pantalla
En el caso de que no est puesta la variable de entorno PATH, abrir una sesin DOS
y ajustar la variable de entorno PATH para que el Sistema Operativo sepa encontrar
las herramientas del JDK. Para respetar el valor que ya tuviese la variable PATH le
aadimos %PATH%.
314
315
MODULO 3
Ajustar la variable de entorno CLASSPATH para que las herramientas del JDK sepan
encontrar nuestras clases Java. Tenemos dos opciones, o aadir el . (punto) y
siempre ejecutar las herramientas en el directorio donde se encuentre el cdigo, o
aadir el directorio de trabajo y ejecutar las herramientas donde queramos. Para
respetar el valor que ya tuviese la variable CLASSPATH le aadimos %CLASSPATH%
316
317
MODULO 3
Ahora toca el turno a la clase Moto que tambin implementa el interface Vehiculo
Ya
podemos
implementar
la
clase
Garaje,
desde
el
directorio
es\java\aula\mentor\practicas31
318
319
MODULO 3
Por ltimo la clase PracticaA, que contiene el mtodo main podra quedar como sigue:
320
321
MODULO 3
322
323
MODULO 3
A continuacin creamos la clase Coche, en el mismo paquete que el interface Vehiculo e indicamos que vamos a implementar dicho interface
324
325
MODULO 3
// Constructores.
public Garaje(int param1, int param2)
{
vehiculos = new Vehiculo[param1];
precio = param2;
}
// Mtodos.
public boolean ingresarVehiculo(Vehiculo param)
{
boolean sw = false;
for(int i=0; i<vehiculos.length; i++) {
if(vehiculos[i] == null) {
sw = true;
vehiculos[i] = param;
break;
}
}
return sw;
}
326
327
MODULO 3
if(vehiculos[i] != null)
cont++;
}
return cont;
}
}
Finalizamos creando la clase PracticaA, marcando que nos cree el mtodo main
Verificar que todas las clases estn grabadas. Para ello utilizar Ctrl + S en cada clase o en File -> Save All
Para ejecutar la aplicacin, seleccionar encima de la clase PracticaA con el botn
derecho del ratn Run As -> Java Application
328
329
MODULO 3
330
331
MODULO 3
332
Ejecutamos la prctica
333
MODULO 3
334
335
En esta Unidad hemos visto como trabajar con los conjuntos de datos, como una sola variable u objeto. Los dos grandes grupos que permiten tratar con conjuntos de
datos son:
aleatorio.
Arrays:
-
Colecciones:
java.util.Collection que trabaja con elementos de tipos complejos de forma conjunta. Se clasifican a su vez en:
-
tener elementos duplicados. java.util.ArrayList utilizado para accesos aleatorios, java.util.LinkedList utilizado cuando se necesita aadir o eliminar elementos del comienzo y final de la lista y java.util.Vector
que es como el ArrayList, pero sincronizado.