Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Java Inicial Aula Mentor
Manual Java Inicial Aula Mentor
AULA
MENTOR
educacion.es
Nipo: 820-10-530-5
Autor:
Pilar Aranzazu Ocaa Diaz-Ufano y Jos
Miguel Ordax Cass
Edicin y maquetacin de contenidos:
Susana Prez Marn
MDULO A
UNIDADES DIDCTICAS:
1. Introduccin
2. Conceptos bsicos. Objeto, atributo, mtodo,
interfaz, clase
3. Paradigmas de la Orientacin a Objetos:
Abstraccin, encapsulacin, ocultamiento,
herencia y polimorfismo.
Nipo: 820-10-530-5
Autor:
Pilar Aranzazu Ocaa Diaz-Ufano y Jos
Miguel Ordax Cass
Edicin y maquetacin de contenidos:
Susana Prez Marn
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:
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
de las soluciones. El mtodo ms utilizado a da de hoy es el UML (siglas de Unified
Modeling Language) sucesor de los mtodos de Anlisis y Diseo Orientado a
Objetos de finales de los 80 y comienzo de los 90, tales como: Booch, Rumbaugh
(OMT) y Jacobson.
UML es un mtodo visual, basado en diagramas, que permite modelar sistemas, en
base a Especificaciones, Arquitectura, Diseo y/o Implementacin.
Facilita la reutilizacin
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
el elemento Hardware
ordenador.
Los elementos fundamentales del modelo de Objetos, en el que se van a
basar el desarrollo de estos sistemas, y que se vern ms en profundidad en
la Unidad 1.3 son:
a funcionalidad.
entidades),
composicin
(creacin
de
entidades
en
base
otras)
patrones
de
diseo
(soluciones
dadas
problemas
ya
MDULO 1
MDULO 1
Facilita la reutilizacin.
MDULO A
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:
Objeto
Atributo
Mtodo
Interfaz
Clase
2. Objeto
Hay muchas definiciones que pueden darse de un objeto, entre las cuales se encuentran:
11
MDULO 1
Definiciones dadas por creadores de metodologas Orientadas a Objetos como pueden ser:
tacin est oculta) y un conjunto definido de operaciones que operan sobre ese estado. Ian Sommerville
12
unReloj, con los atributos hora (horas, min, seg), dia (dia, mes, ao), modelo y
numSerie y cuyos mtodos u operaciones seran getHora, getDia, incrementarHora, incrementarDia, limpiarPantalla y traducirFrecuencia.
plo, setHora()
MDULO 1
Reloj().
piarPantalla(), incrementarDia().
Grficamente, se puede visualizar la estructura de un objeto de la siguiente manera:
sera la siguiente:
14
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
15
MDULO 1
Ejemplo: Para el objeto unReloj, el interfaz estara formado por los mtodos
limpiarPan-
Interfaz: Aspecto exterior que es visible al resto de objetos. Puede estar formado por uno o varios mtodos.
16
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).
Instancia es el trmino utilizado para referirse a un objeto que pertenece a una clase concreta.
Una clase, por tanto es solamente la definicin. Mientras que un objeto o instancia
es algo real con la estructura y comportamiento de la clase a la que pertenece.
La estructura de una clase, por tanto, viene determinada por un nombre, los atributos que contiene y los mtodos que realiza.
loj,
cuyos atributos son dia, hora, modelo y numSerie y cuyos mtodos son
17
MDULO 1
Frecuencia
18
19
MDULO 1
20
Objeto.
Atributo.
Mtodo.
Interfaz.
Clase
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
objetos, miGato, miPerro, miLeon, miTigre y miLobo. Si abstraemos los atributos comunes que queremos tener contemplados en el mbito de nuestra solucin, encontramos que en todos ellos, queremos tener una foto, que tipo de alimentacin, donde habitan y su tamao, y como comportamiento, queremos saber como hacen ruido, como comen, como duermen y como rugen. As de una
realidad, hemos abstrado estado y comportamiento y hemos definido la clase
Animal.
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 pertenecientes a una misma entidad, al mismo nivel de abstraccin.
Ocultamiento, consiste en separar el aspecto externo del objeto o interfaz, al cual
pueden acceder otros objetos, del aspecto interno e implementacin del mismo,
26
que es inaccesible para los dems. Permite tratar a un objeto como una caja negra, la cual solo es tratada por el resto de objetos por su el interfaz.
Permite, por tanto que se modifique la implementacin interna de un objeto sin
afectar a los clientes que lo utilizan. De esta manera, mientras el interfaz no vare,
se puede modificar la implementacin o el aspecto interno, sin que los objetos con
los que interrelaciona se vean afectados.
4. Relaciones
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 tipos o grados, que se enumeran a continuacin:
27
MDULO 1
se utiliza para
nua)
a un
28
Por tanto, un objeto que representa el todo, est asociado con un conjunto
de objetos que representan sus componentes.
En los diagramas UML, el rombo blanco se utiliza
para repre-
sentar la agregacin.
para repre-
sentar la composicin.
29
MDULO 1
para represen-
tar la herencia.
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 determinado en la clase Animal.
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
respuesta a un mismo mensaje, en funcin del objeto que lo reciba.
En el polimorfismo, una vez creados los objetos, se abstraen a la clase padre que
proporciona el interfaz, para que el objeto llamante generalice su envo de mensaje
independientemente del tipo de objeto especfico o clase hija; solamente debe de
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.
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
en el mundo real existen flores sin ptalos (sera una relacin de agregacin) en el mbito de nuestro problema, solo contemplamos flores con ellos.
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.
Como los Pajaros se comen a las plagas, tienen relacin de asociacin con
ellas, con cualquier tipo, ya sea un Pulgon o en un futuro una AraaRoja.
34
Abstraccin
Encapsulacin y Ocultamiento
Relaciones
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
Sencillo
Distribuido
Interpretado
Robusto
Seguro
Altas prestaciones
Multithread
Dinmico
2.1 Sencillo
Los creadores de Java se basaron en el lenguaje de programacin C++, pero
eliminaron la mayora de sus complejidades, para facilitar su aprendizaje, su lectura y el mantenimiento de los programas. A continuacin se listan algunas de
las complejidades que se eliminaron:
44
No soporta destructores.
Posee una clase String, en vez del array de tipo char[] finali-
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.
2.3 Interpretado
Para que un programa Java puede ejecutarse, tiene que ser compilado previamente mediante un compilador. Es la principal diferencia con el resto de
lenguajes interpretados. Necesita ser vlidado y compilado en un paso previo
al de su ejecucin.
El compilador de Java traduce el cdigo fuente o programa java a un cdigo
intermedio (bytecode) o cdigo mquina similar a las instrucciones de ensamblador pero independiente de la mquina fsica en la que se ejecuta.
45
MDULO 2
46
2.4 Robusto
Un software robusto es aquel que no se interrumpe fcilmente a consecuencia de fallos. Al ser previamente compilado, todos los errores sintcticos son
detectados en este fase y obligatoriamente tienen que ser eliminados.
Un lenguaje de estas caractersticas suele tener ms restricciones a la hora de
programar y realiza numerosas comprobaciones tanto en compilacin como
en ejecucin. Facilita el manejo de excepciones, para poder tratar los fallos en
ejecucin (se vern en ms detalle en la Unidad 3.5).
El tratamiento automtico de la memoria impide poder sobrescribirla y corromper o modificar otros datos mediante punteros.
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 ...).
47
MDULO 2
A pesar de todo, existe algn compilador real de Java (perdemos la portabilidad y ganamos en rendimiento). Es decir, que se compila antes de su ejecucin, generando un ejecutable (no cdigo interpretable) atado a dicha plataforma. Este tipo de compilador se encuentran en desuso.
2.8 Multithread
El trmino multithread o multihilo en castellano, se refiere a la ejecucin de
varias tareas a la vez en un mismo proceso, limitadas estrictamente en tiempo real por el nmero de procesadores.
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.
Adems, Java permite la indireccin. Es decir, en lugar de indicarle de forma
directa que utilice la clase X, se le puede indicar que busque entre todas las
49
MDULO 2
3. La plataforma Java
Como hemos mencionado anteriormente, una plataforma es tanto el entorno hardware y/o software donde se ejecuta un programa.
La plataforma Java es una plataforma solo software que se ejecuta sobre otra plataforma hardware/software.
Tiene dos componentes diferenciables:
50
51
Orientado a Objetos
Seguro
Distribuido
Interpretado
Robusto
Seguro
Altas prestaciones
Multithread
Dinmico
Java ME
Java SE
Java EE
MDULO B
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
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
A partir de la versin 5 se ha quitado el 2 del nombre, quedando la nomenclatura Java SE, Java EE y Java ME respectivamente
Cada una de estas plataformas, contienen tanto una JDK (o entorno de desarrollo y ejecucin) como un JRE (o Java Runtime Environment, solamente utilizado en ejecucin), tambin llamado JVM. En este curso, solamente nos centraremos en el JDK del Java SE.
incluye son:
56
cas
res.
Colecciones (Collections)
JavaSound API
57
MDULO 2
Logging API
JSSE, JAAS)
58
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
usarse cualquier nmero de parmetros de ese tipo, que
sern almacenados en un array para pasarlos al mtodo.
MDULO 2
de Javascript en Java.
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.
2.1 Contenido
A continuacin se muestran que directorios contiene el JDK y para que se utilizan:
60
2.2 Componentes
A continuacin se muestran los componentes que conforman el JDK.
Existe
javap.exe: Desensamblador.
documentacin
online
acerca
del
JDK
en
la
siguiente
URL
http://java.sun.com/javase/6/docs/api/index.html
MDULO 2
remos durante el curso. http://www.eclipse.org (ver la Unidad Instalacin del JDK y Eclipse para su instalacin)
Rational
Application
Developer:
Es
de
IBM
http://www.ibm.com/software/awdtools/developer/application y est
construido sobre Eclipse.
http://developers.sun.com/jscreator
JBuilder: Es de Borland
http://www.codegear.com/products/jbuilder
62
y javac.exe
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.
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%.
Ajustar la variable 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%.
64
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.
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
Seleccionar la ubicacin del workspace (o rea de trabajo).
68
69
MDULO 2
70
Crear una clase Java nueva llamada Practica2 con el mtodo main.
71
MDULO 2
Seleccionar Finish
Escribir el cdigo dentro del mtodo main y salvar con Ctrl + S o File -> Save
72
Seleccionando la clase Java, con el botn derecho del ratn ejecutarla como Java
Application
73
MDULO 2
74
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 ...
Se han visto tambin el contenido y componentes que forman un JDK y dos
variables muy importantes a tener en cuenta en entornos de desarrollo Java que
son PATH y CLASSPATH.
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:
/*
/**
79
MDULO 2
80
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).
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:
81
MDULO 2
3. Identificadores
Son los nombres unvocos que se le dan a las clases, mtodos y variables. Hay que
tener presente las siguientes reglas:
dlar ($).
82
$va-
4. Variables
Una variable es un contenedor de datos identificado mediante un identificador o
nombre. Dicho identificador se utilizar para referenciar el dato que contiene.
Toda variable debe llevar asociado un tipo que describe el tipo de dato (ver punto
5) que guarda. Por tanto, una variable tiene:
Un tipo
Un identificador
Un dato o valor.
4. 1 Declaracin de variables
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;
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).
puede accederse a ellas, dentro del bloque donde han sido declaradas.
84
85
MDULO 2
86
5. Tipos de datos.
En Java existen dos tipos de datos genricos:
Lgico: boolean.
Carcter: char.
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
hexadecimal).
cio en blanco.
Para las cadenas de caracteres existe un tipo complejo: la clase String que se
ver en ms detalle en la Unidad 2.6 Clases bsicas.
Se suelen utilizar para el tratamiento de caracteres, ya sea como caracteres individuales dentro de un String, caracteres contenidos en un fichero, etc.
a 127.
32768 a 32767
2147483468 a 2147483467
enorme a enorme
Sus posibles valores son:
88
Se suelen utilizar en operaciones arimticas, en sentencias de control de tipo bucle (en concreto la sentencia for y el tipo int), etc.
ma.
plataforma.
Sus posibles valores son:
89
MDULO 2
Se suelen utilizar para tener una lista de posibles valores asociados a una variable y solamente dichos valores.
El siguiente ejemplo muestra el valor de variables de distintos tipos con sus valores asignados en la declaracin
MDULO 2
Un tipo de dato nmerico puede llegar a convertirse a otro tipo. Existen cuatro
entornos de conversin en Java:
float.
long
te:
Una variable de tipo complejo contiene una referencia (puntero) a la zona de memoria donde est el objeto:
92
7. Operadores
Los operadores realizan funciones sobre uno, dos o tres operandos (op). Por tanto,
una primera clasificacin puede ser esta:
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:
Aritmticos
Relacionales
Condicionales
De desplazamiento
93
MDULO 2
Lgicos
De asignacin
Otros
con las variables de tipo String, porque en este caso concatena los
valores.
Los valores que devuelven estos operadores depende de los tipos de los operandos:
94
short o char.
despus de incrementarse).
antes de incrementarse).
despus de decrementarse).
antes de decrementarse).
MDULO 2
>= op2
<= op2
Todos estos operandos devuelven un boolean indicando si cumple la comparacin.
tantas veces como indique el segundo operando op1 >> op2. Realiza la misma funcin que multiplicar por 2, tantas veces se desplace.
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. Realiza la misma funcin que multiplicar por 2, tantas veces se desplace, pero sin tener en cuenta la posicin de signo.
desplazamiento
97
MDULO 2
uno si los bits de ambos operandos son uno) op1 & op2. Cuidado
con no confundir con el operador lgico &&
uno si alguno de los bits de los operandos es uno) op1 | op2. Cuidado con no confundir con el operador lgico ||
98
uno si alguno de los bits de los operandos es uno, pero no los dos a
la vez) op1 ^ op2
op2
+= op2
= op2
99
MDULO 2
/=, %=, &=, |=, ^=, <<=, >>=, >>>=: Similar al anterior,
en la Unidad 3.1).
dad 2.4).
100
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);
101
MDULO 2
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;
}
La sentencia if-then-else sera
if(expresin)
{
sentencias;
}
else
{
sentencias;
}
Las sentencias if pueden estar concatenadas. Su sintaxis sera:
if(expresin)
{
sentencias;
}
else if (expresin2)
{
sentencias;
}else
{
sentencias;
}
das
103
MDULO 2
switch(intExpresin)
{
case intExpresin:
sentencias;
break;
default: // es optativo
sentencias;
}
104
mo de la sentencia switch. Por tanto, salta a la siguiente lnea de cdigo despus del bucle o switch.
105
MDULO 2
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;
while(x<10)
{
if(x>3)
{
System.out.println("Hola");
}
}
}
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
Solucin
108
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%.
109
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 %CLASS-
110
PATH%.
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
112
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.
113
MDULO 2
114
115
MDULO 2
116
Crear una clase Java nueva llamada PracticaE con el mtodo main.
117
MDULO 2
Seleccionar Finish
Escribir el cdigo dentro de la clase y salvar con Ctrl + S o File -> Save
118
119
MDULO 2
120
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:
tipos primitivos:
Lgico: boolean
Carcter: char.
Nmeros enteros: byte, short, int y long.
Nmeros reales: double y float.
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.
1. 1 Atributos y mtodos
La implementacin de una clase consiste en una serie de:
Atributos o datos.
Mtodos u operaciones.
125
MDULO 2
Ejemplo:
public int suma(int param1, int param2)
{
}
Java SE 5.0 aade una novedad a la definicin de un mtodo mediante la caracterstica: varargs.
Se permite definir un nmero indefinido de parmetros del mismo tipo mediante: ... Lo que recibimos es un array del tipo definido.
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
dicho parmetro y que tiene las siguientes restricciones:
126
cin.
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
Existe un tipo de mtodo especial en Java llamado constructor.
Se utiliza para la construccin (instanciacin) de objetos (o instancias) a partir
de esa clase.
En su implementacin se suele dar valores a los atributos para ese objeto para
asegurar que los atributos estn inicializados.
Su declaracin es idntica a la de los mtodos convencionales con dos salvedades:
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.
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:
El nuevo tipo de retorno sea hijo del tipo de retorno del mto-
1. 4 Convenciones en Java
129
MDULO 2
2. Objetos
Los objetos en Java no son mas que variables de tipo complejo, frente a las de tipo
primitivo.
El tipo de un objeto es la clase de la que se ha instanciado o creado.
La declaracin de un objeto es idntica a la declaracin de una variable de tipo primitivo:
tipo identificador;
130
tanciar.
La sintaxis de la inicializacin sera la siguiente:
tipo identificador = new tipo([parametro,]);
dato
directamen-
te:
Mientras que una variable de tipo complejo contiene una referencia (puntero)
a la zona de memoria donde est el objeto:
Ejemplo:
131
MDULO 2
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
Ejemplo: miCuenta.reintegro(13.7);
133
MDULO 2
Las llamadas a mtodos se pueden encadenar para evitar tener que crear variables intermedias entre distintas ejecucines de mtodos:
String s1 = new String(abc");
char c = s1.toUpperCase().charAt(0);
Equivaldra a:
String s1 = new String(abc");
String s2 = s1.toUpperCase();
char c = s2.charAt(0);
134
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 puede limpiar porque sigue referenciado por centro desde un atributo del objeto
referenciado
por
135
MDULO 2
cir.
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
mtodos de las clases superiores en la jerarqua. Es decir, definimos una especie de
interfaz (API) para un grupo de clases relacionados mediante la herencia.
Una clase puede tener sus propios atributos y mtodos adicionales a lo heredado.
Una clase puede modificar los atributos y mtodos heredados.
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:
La implementacin de la herencia se realiza mediante la keyword: extends. La sintaxis de la declaracin de la herencia es la siguiente:
modificador_acceso class nom_clase extends nom_clase
{
}
Ejemplo:
public class MiClase extends OtraClase
{
}
Ejemplo:
137
MDULO 2
138
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:
si son iguales.
un objeto.
tancia el objeto.
llector.
Ejemplo:
139
MDULO 2
3.2 Casting
El casting es una forma de realizar conversiones de tipos. Hay dos tipos de
casting:
rarqua de clases.
Se especifica precediendo al objeto a convertir con el nuevo tipo entre parntesis.
140
Ejemplo:
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.
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);
144
Ejemplo:
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.
146
147
MDULO 2
148
4. Polimorfismo
Es otro de los paradigmas de la Orientacin a Objetos.
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 referencia declarada como una de sus superclases. Ver punto 3.2 Casting para las
conversiones de tipos.
149
MDULO 2
150
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:
MDULO 2
Rediseo
Ahora nos diden que en el mismo proyecto tambin necesitamos almacenar dos gatos. Tenemos distintas alternativas:
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
{
}
154
Ejemplo:
MDULO 2
Ejemplo:
156
157
MDULO 2
158
Otra aproximacin sera introducir los nuevos mtodos solo en las mascotas.
As ya no nos tenemos que preocupar de que haya clases que sin ser mascotas tengan mtodos de estas.
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.
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.
As, ya no nos tenemos que preocupar de que haya clases que sin ser mascotas tengan mtodos de estas.
Todas las mascotas cumplirn forzosamente el API de las mascotas y el compilador nos ayudar a asegurarlo. Y tambin tendremos la posibilidad de usar
el polimorfismo con las mascotas.
Pero eso significa que habr clases que heredarn de dos clases a la vez y en
Java no existe la herencia mltiple.
160
5. Interfaces
Los interfaces en Java nos solucionan en parte la no existencia de la herencia mltiple; habilitando as las posibilidades del polimorfismo en la herencia mltiple sin los
problemas que esta conlleva.
Los interfaces son un tipo de clase especial que no implementa ninguno de sus mtodos. Todos son abstractos. Por tanto no se pueden instanciar.
La declaracin de un interface Java se realiza mediante la keyword: interface seguido de su nombre. La sintaxis de la declaracin de un interface es la siguiente:
modificador_acceso interface nombre_interface
{
}
Ejemplo:
public interface MiInterface
161
MDULO 2
{
}
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,]);
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.]
{
}
Ejemplo:
public class MiClase implements MiInterface
{
}
162
Ejemplo:
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
dicho interface.
163
MDULO 2
164
po genrico de clases y adems tengamos algunos mtodos implementados que reutilizar. Tambin cuando no queramos que nadie
instancie dicha clase.
165
MDULO 2
Solucin:
Estaba mal. No habamos creado el objeto r.
Solucin:
Estaba mal. Se estaba llamando a un mtodo inexistente.
166
Solucin:
Estaba mal. El objeto miRect no est inicializado, por tanto vale null. Con null no
podemos hablarnos.
167
MDULO 2
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
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
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
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.
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
174
Por ltimo crearemos nuestra clase truco con el mtodo main que guardaremos
en el fichero PracticaE.java
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
Crear una clase Java nueva llamada Punto sin el mtodo main
180
Seleccionar Finish
Escribir el cdigo dentro del bloque de la clase y salvar con Ctrl + S o File -> Save
181
MDULO 2
182
Crear una clase Java nueva llamada PracticaE con el mtodo main.
183
MDULO 2
184
Seleccionando la clase Java PracticaE, con el botn derecho del ratn ejecutarla
como Java Application
185
MDULO 2
186
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.
Existen ciertos mtodos especiales llamados Constructores, que permiten crear objetos.
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.
Se puede generalizar o especializar entre las superclases y subclases mediante los casting.
Los Interfaces, que proporcionan el API que cualquier clase que implemente dicho interface debe de desarrollar.
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;
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
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 nomenclatura de los paquetes Java:
en minsculas.
Ejemplos: com.ibm.test
es.miempresa.utilidades
es.practicas.tema1
Para poder utilizar una clase en nuestro cdigo tenemos que escribir su nombre
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
desarrollador que es el uso de la keyword: import. La sintaxis de la declaracin de
la sentencia es la siguiente:
import nombre_del_paquete.nombre_de_la_clase;
import nombre_del_paquete.*;
Ejemplos: es.java.aula.mentor.figuras.Circulo;
es.java.aula.mentor.figuras.*;
192
por
debajo
de
este,
como
es
el
caso
de
la
clase
es.java.aula.mentor.figuras.Circulo
Utilizar su
mediante el punto)
punto)
mediante el punto)
Un import no implica la inclusin de cdigo como ocurre en un #include de C++.
Simplemente son vas de acceso para buscar el cdigo. El cdigo se va cargando
segn se necesita.
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 paquetes Java.
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.
Ejemplo:
package es.java.aula.mentor.figuras;
public class Circulo {...}
Para compilar una clase que pertenece a un paquete tenemos distintas opciones:
Desde
c:\trabajo
ejecutamos:
javac
es\java\aula\mentor\figuras\Circulo.java
193
MDULO 2
Desde
c:\trabajo\es\java\aula\mentor\figuras
ejecutamos:
javac Circulo.java
Para ejecutar una clase solo tenemos una opcin posible:
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.
194
Ejemplo: Las clases estn en paquetes distintos y se utilizan las clases con el
nombre completo
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
196
MDULO 2
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
198
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
199
MDULO 2
Ejemplo: Necesitamos utilizar dos clases con el mismo nombre que estn en
200
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.
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.
201
MDULO 2
-> Privado.
paquete en castellano)
202
203
MDULO 2
clases
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
mtodos. Por ejemplo, la clase java.lang.Math:
redondeado.
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
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,..])
{
}
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.
Una
clase
puede
perfectamente
mezclar
mtodos
estticos
con
mtodos
Hay ciertas reglas que hay que tener en cuenta en el uso de mtodos estticos:
205
MDULO 2
206
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
propios de cada objeto.
Los atributos estticos son cargados en memoria cuando se carga la clase.
Siempre antes de que:
de la clase java.lang.System.
Ejemplo:
207
MDULO 2
208
Ejemplo:
4. final
final es una keyword que modifica el funcionamiento de:
Clases
Atributos
Mtodos
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:
209
MDULO 2
Ejemplo:
public final class MiClase
{
}
Ejemplo:
public final int suma(int param1, int param2)
{
return param1 + param2;
}
210
Ejemplo:
Ejemplo:
protected final boolean sw = true;
public final int i;
Ejemplo:
211
MDULO 2
212
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:
213
MDULO 2
214
Ejemplo:
Ejemplo:
de esas referencias.
215
MDULO 2
216
de forma implcita:
public abstract int miMetodo();
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
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.
218
Ejemplo:
Solucin:
219
MDULO 2
Solucin:
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
224
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
Seleccionar Finish
Escribir el cdigo dentro del bloque del interface y salvar con Ctrl + S o File -> Save
232
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.
233
MDULO 2
234
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.
235
MDULO 2
Por ltimo, creamos la clase que va a contener el main PracticaD, en el paquete java es.java.aula.mentor.practicad
236
Seleccionando la clase Java PracticaD, con el botn derecho del ratn ejecutarla
como Java Application
237
MDULO 2
238
En esta unidad hemos visto distintos conceptos que nos permiten organizar nuestro cdigo y modificar el acceso a nuestras clases, mtodos y atributos.
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.
Atributos finales: son atributos que una vez definidos no se puede cambiar su
valor. Si se utilizan conjuntamente con la keyword static, se convierten en constantes a nivel de clase.
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:
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:
str aadido al final del objeto String que realiza la llamada (es igual
que con el operador +).
de ch (devuelve -1 si no est).
245
MDULO 3
racteres.
culas.
ysculas.
de caracteres que representa d. Este mtodo est sobrecargado varias veces recibiendo como parmetro otros tipos primitivos (char,
int, float, long).
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/String.html#metho
d_detail
246
Ejemplo:
La clase String, sobreescribe el mtodo equals() de la clase java.lang.Object (recordemos que mtodo el equals de Object comparaba las posiciones de memoria, y
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:
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;
247
MDULO 3
No existe un solo objeto de tipo String al que se le ha ido cambiando su valor interno (atributos), sino que se han creado 10 objetos distintos.
Pero an hay ms la JVM reserva un espacio en memoria llamado String Pool
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.
Por este motivo, el uso de String es un tema no tan trivial como pudiera parecer.
Un uso indebido puede provocar problemas de rendimiento.
2. Clase java.lang.StringBuffer
StringBuffer es otra clase relacionada con las cadenas de caracteres. Pero en este
caso no son inmutables.
Existen distintas formas de crear un StringBuffer:
Otros
constructores:
http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html#
constructor_detail
248
de ch (devuelve -1 si no est).
racteres.
por el StringBuffer.
Reemplaza la cadena entre las posiciones start y end con str. Modifica el propio objeto que hace la llamada.
249
MDULO 3
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html#
method_detail
250
Ejemplo:
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();
Solo se han creado 2 objetos en memoria: un StringBuffer (el GC puede limpiarlo) y
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).
251
MDULO 3
una
informacin
ms
detallada
en
http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html
Ejemplo:
4. Clase java.lang.System
Se trata de una clase con utilidades genricas del sistema. Todos sus atributos y
mtodos son estticos.
Tiene tres atributos muy utilizados:
252
Para
ms
informacin
http://java.sun.com/javase/6/docs/api/java/lang/System.html#field_detail
Y entre sus mtodos ms utilizados se encuentran:
librera nativa libname. Se utiliza con la programacin JNI (Java Native Interface).
Otros
mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/System.html#meth
od_detail
Ejemplo:
253
MDULO 3
5. Clase java.lang.Math
Se trata de una clase con utilidades matemticas. Todos sus atributos y mtodos
son estticos.
Tiene dos atributos (constantes) muy utilizados:
logaritmos neperianos.
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:
mo base 10 de a.
254
yor comparando a y b. Este mtodo se encuentra sobrecargado recibiendo otros tipos: long, float
nor comparando a y b. Este mtodo se encuentra sobrecargado recibiendo otros tipos: long, float
da de a.
Otros mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Math.html#method
_detail
Ejemplo:
255
MDULO 3
6. Otras clases
A continuacin se enumeran otras clases importantes a tener en cuenta pertenecientes a otros paquetes
java.text.NumberFormat
Para
trabajar
con
expresiones
regulares:
va.util.regex.Pattern y java.util.regex.Matcher
256
Ms informacin: http://java.sun.com/javase/6/docs/api/
ja-
tivamente
Como norma a seguir, suelen tener los siguientes mtodos:
presentan:
Ejemplo: Integer a = new Integer(3);
toString
Ejemplo: String d = Integer.toString(c);
257
MDULO 3
todo XXXValue
Ejemplo: int e = b.intValue();
String s en un Boolean. Si s no vale true entonces siempre devuelve un Boolean con false.
boolean b en un String.
258
presenta.
Ms
informacin
mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html
un String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Character.html
value.
s.
259
MDULO 3
en un Byte.
s en un byte.
en un String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Byte.html
short value.
s.
en un Short.
String s en un short.
en un String.
260
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Short.html
int value.
String s.
s en un Integer.
en un int.
String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Integer.html
261
MDULO 3
value.
s.
en un Long.
en un Long.
un String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Long.html
float value.
s.
en un Float.
s en un float.
262
un String.
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Float.html
el double value.
String s.
s en un Double.
String s en un double.
ble d en un String.
public
double
doubleValue();
Extrae
el
double
que
representa.
263
MDULO 3
Ms informacin y mtodos:
http://java.sun.com/javase/6/docs/api/java/lang/Double.html
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
264
Ante esta nueva funcionalidad, nos podemos preguntar qu pasa con la sobrecarga de mtodos?
public void metodo(double param) { };
public void metodo(Integer param) { };
265
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) {
};
La cadena invertida.
266
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%
267
MDULO 3
268
269
MDULO 3
270
271
MDULO 3
272
llamado
PracticaA,
especificando
el
paquete
273
MDULO 3
274
275
MDULO 3
276
El valor de la hipotenusa.
Adicionalmente, habr que mostrar el tiempo que tarda en ejecutarse este mtodo.
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
En esta unidad se han visto una relacin de clases bsicas e imprescindibles de conocer a la hora de la programacin en Java.
java.lang.StringBuffer (sincronizada)
Adems se han estudidado las clases wrappers de los tipos primitivos, como son:
java.lang.Boolean
java.lang.Character
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
MDULO C
ndice de la unidad:
1. Arrays
2. Colecciones
3. Importancia de los mtodos equals() y hashCode()
4. Arrays vs. Colecciones
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];
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 determinado, igualndolo a un listado de elementos separados por comas entre { }.
El tamao del array ser el nmero de elementos del listado.
Ejemplos: numeros[2] = 3;
int a = numeros[0];
if(numeros[4] == 5)..
286
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.
287
MODULO 3
Es imposible acceder a una posicin fuera del array en tiempo de ejecucin. Llegado el caso se lanzar una excepcin del tipo ArrayIndexOutOfBoundException
(se vern en ms detalle en la Unidad 3.5).
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");
// 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]);
288
// 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. 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
for(inicializacin: coleccin)
{
sentencias;
}
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.
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][];
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.
290
}
}
// 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();
}
291
MODULO 3
Ejemplo:
public class Test
{
public static void main(String[] args)
{
for(int i=0; i<args.length; i++)
System.out.println("Argumento " + i + : " + args[i]);
}
}
292
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:
293
MODULO 3
En el caso de los Map, se utilizan siempre que necesitemos trabajar con parejas de
datos clave/valor.
Todas las colecciones se encuentran en el paquete java.util.*; siendo java.util.Collection y java.util.Map las raices de la jerarqua de las colecciones.
Existirn especializaciones que permitan elementos duplicados o no, que permitan
ordenar los elementos o no, etc.
Estas interfaces contiene la definicin de todos los mtodos genricos que deben
implementar las colecciones.
2.1 java.util.Collection
Los mtodos bsicos de este interfaz son:
mento.
294
ese elemento.
elementos.
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:
public Iterator iterator();
Sus mtodos son:
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.
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
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
297
MODULO 3
298
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
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:
299
MODULO 3
Los mtodos que aade este interfaz, para acceso posicional son:
300
tiempo de acceso ptimo cuando dicho acceso es para aadir o eliminar elementos del comienzo y final de la lista (tpico para pilas).
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
301
MODULO 3
302
while(it.hasNext())
System.out.println("Ciudad: " + it.next());
303
MODULO 3
2.4 java.util.Map
El interfaz Map no hereda del interfaz Collection. Representa colecciones con
parejas de elementos: clave y valor.
No permite tener claves duplicadas. Pero si valores duplicados.
Para calcular la colocacin de un elemento se basa en el uso del mtodo:
public int hashCode();
Los mtodos bsicos de este interfaz son:
ja.
Los mtodos que realizan operaciones masivas son:
en el parmetro t.
304
va.util.Set.
java.util. Collection.
A continuacin enumeramos las distintas implementaciones de este interfaz:
Map.
implementacin
que
los
elementos
hagan
del
interfaz
ja-
305
MODULO 3
306
Set s = codigos.keySet();
Iterator it = s.iterator();
while(it.hasNext())
{
String aux = (String)it.next();
System.out.println(aux + ": " + codigos.get(aux));
}
307
MODULO 3
}
}
308
Set s = codigos.keySet();
Iterator it = s.iterator();
while(it.hasNext())
{
String aux = (String)it.next();
System.out.println(aux + ": " + codigos.get(aux));
}
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>();
309
MODULO 3
partimento.
310
311
MODULO 3
312
313
MODULO 3
Tamao esttico.
jos.
314
Tamao dinmico.
clases
relacionadas
con
los
vehculos
se
guardarn
en
el
paquete
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%.
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
318
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
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
326
// 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;
}
public void retirarVehiculo(Vehiculo param)
{
for(int i=0; i<vehiculos.length; i++) {
if(vehiculos[i] == param) {
vehiculos[i] = null;
break;
}
}
}
public Vehiculo[] getVehiculos()
{
Vehiculo[] temp = new Vehiculo[this.getNumVehiculos()];
for(int j=0, i=0; j<temp.length && i<vehiculos.length; i++) {
if(vehiculos[i] != null) {
temp[j] = vehiculos[i];
j++;
}
}
return temp;
}
public double getKilometrajeMedio()
{
int cont = 0;
double acum = 0;
for(int i=0; i<vehiculos.length; i++) {
if(vehiculos[i] != null) {
cont++;
acum += vehiculos[i].getKilometraje();
}
}
return acum / cont;
}
public int getCosteTotal()
{
int acum = 0;
for(int i=0; i<vehiculos.length; i++) {
if(vehiculos[i] != null)
acum += vehiculos[i].getNumRuedas();
}
return acum * precio;
}
public int getNumVehiculos()
{
int cont = 0;
for(int i=0; i<vehiculos.length; i++) {
327
MODULO 3
if(vehiculos[i] != null)
cont++;
}
return cont;
}
}
Finalizamos creando la clase PracticaA, marcando que nos cree el mtodo main
328
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
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:
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.