Post on 21-Nov-2015
description
educacion.es
AULA MENTOR
Programacin en Java inicial
Nipo: 820-10-530-5
Autor:Pilar Aranzazu Ocaa Diaz-Ufano y Jos Miguel Ordax Cass
Edicin y maquetacin de contenidos:Susana Prez Marn
Diseo grfico e ilustracin de portada: Mara Guija Medina
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
Diseo grfico e ilustracin de portada: Mara Guija Medina
Introduccin
Tema 1.1
MDULO A
ndice de la unidad:
1. Historia
2. Ventajas de la Orientacin a Objetos
Unidad 1.1 Introduccin
1
En esta unidad veremos el origen de la programacin Orientada a Objetos, y
cuales son sus principales caractersticas.
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:
Todo puede ser representado como un objeto, siendo capaz de almacenar cierta informacin y realizar operaciones sobre ella.
Un programa es un conjunto de objetos colaborando entre s, indicando que es lo que hay que hacer mediante el envo de
mensajes.
Cada objeto esta contruido en base a otros objetos, permitiendo alcanzar grados mayores de complejidad.
Cada objeto pertenece a un tipo, denominado clase.
Todos los objetos del mismo tipo pueden recibir los mismos mensajes.
MDULO 1
2
A continuacin, se muestra la evolucin de los lenguajes Orientados a Objetos
hasta la aparicin del lenguaje Java, objeto de nuestro estudio.
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.
Unidad 1.1 Introduccin
3
2. Ventajas de la Orientacin a Objetos
Habiendo visto la evolucin de los lenguajes de programacin en base a su nivel de abstraccin, el principal objetivo de los lenguajes Orientados a Objetos fue reducir la complejidad del desarrollo y mantenimiento del Software. As las principales ventajas de estos lenguajes son:
Suministra modelos similares a los del mundo real.
Facilita el desarrollo de sistemas complejos.
Facilita la reutilizacin
Permite el desarrollo iterativo de aplicaciones.
Facilita la interoperabilidad de aplicaciones.
2.1 Similitud con el mundo real
Mediante la abstraccin del mundo real, lo que se pretende es definirlo tal y
como es en base al problema a resolver y cindonos al mbito de la solucin.
Nos permitir definir que entidades como tales vamos a necesitar que existan
para solucionar nuestro problema y las relaciones entre ellas, tales como
relaciones jerrquicas, relaciones de interaccin.
Ejemplo: Tenemos que desarrollar un programa para una tienda de 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
4
2.2 Facilita el desarrollo de sistemas complejos.
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
tengamos toda esta informacin, ver las interrelaciones entre todos ellos y su
convivencia.
Este tipo de abstraccin nos permite realizar un tipo de programacin Botton-
Up (de abajo a arriba), donde partiendo de piezas ms pequeas se va
conformando el todo.
Se puede llegar a comparar con el mecanismo de contruccin del Hardware,
que para la construccin de un todo, es necesario la utilizacin de piezas
pequeas que se van ensamblando para conformar las piezas ms grandes,
que a su vez conforman el elemento Hardware final como puede ser un
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:
Abstraccin. Capacidad de definir los datos y operaciones que se necesitan, de las entidades de nuestro mundo real.
Unidad 1.1 Introduccin
5
Encapsulamiento. Permite ocultar que s lo que proporciona una entidad, sin necesidad de conocer como lo proporciona.
Modularidad. Divisin de las soluciones en componentes ms pequeos o mdulos independientes que se integran entre s. Una
solucin compleja desarrollada en un solo mdulo es imposible de
abarcar por un solo lector, debido al nmero de caminos de control,
variables ...
Herencia. Relacin de jerarqua entre las entidades, en cuanto a funcionalidad.
2.3 Facilita la reutilizacin
La reutilizacin de cdigo es una de las grandes ventajas de los lenguajes
Orientados a Objetos. Cules son las caractersticas que permiten obtener
dicha ventaja? Se consigue mediante la herencia (relaciones jerquicas de
entidades), composicin (creacin de entidades en base a otras) y
parametrizacin (reutilizacin de operaciones en funcin de los parmetros
que se les pasan a dichas operaciones).
La Orientacin a Objetos soporta la reutilizacin basada en la utilizacin de
libreras de componentes (agrupacin de entidades con un significado
relacionado), patrones de diseo (soluciones dadas a problemas ya
existentes) y arquitecturas software (tambin conocidas con el nombre de
framework).
2.4 Permite el desarrollo iterativo.
El desarrollo iterativo, permite ir paso a paso en el ciclo de desarrollo. No se
pretende empezar desde 0 y terminar el 100% del desarrollo en una sola
etapa.
Con el desarrollo iterativo, se van definiendo etapas e hitos a conseguir,
consiguiendo fases de pruebas y aprobacin de lo desarrollado hasta el
momento en fases mucho mas tempranas que en el desarrollo tradicional. De
MDULO 1
6
esta forma se consigue un prototipado controlado: se crea un prototipo al cual
se le aaden capacidades de forma incremental.
El cliente puede ir probando versiones mucho antes que en el desarrollo
tradicional. De esta manera se comprueba que la solucin dada al problema a
resolver es realmente lo que se est esperando y no tenemos que esperar a la
finalizacin del desarrollo, para verificar que la solucin final satisface el
problema a resolver en su totalidad.
Actualmente, el desarrollo iterativo, se basa en la utilizacin de Casos de
Uso, uno de los diagramas definidos por UML. Describen una visin externa
del comportamiento del Sistema desde el punto de vista del usuario,
constituyendo un modelo de lo que el Sistema har sin tener en cuenta el
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.
Unidad 1.1 Introduccin
7
2.5 Facilita la interoperabilidad
Las arquitecturas Orientadas a Objetos permiten un mejor aislamiento de las
dependencias de la topologa en la que se ejecuta la solucin. De esta manera
no nos tendremos que preocupar en que topologa se va a ejecutar nuestra
solucin, ni en el caso de que la solucin vaya a estar dividida en distintas
partes, las plataformas de ejecucin de las mismas. De esta manera la
entidad oficina, con la definicin de sus datos y de sus operaciones, ser la
misma independientemente de que se ejecute en un PC, en un Servidor o en
un Mainframe.
Es una diferencia a tener en cuenta, con respecto a C++ que s que necesita
saber en que topologa se va a ejecutar.
MDULO 1
Los lenguajes orientados a objetos, miden su nivel de abstraccin con respecto a la definicin del mundo real.
Las principales ventajas son: - Suministra modelos similares a los del mundo real.
- Facilita el desarrollo de sistemas complejos.
- Facilita la reutilizacin.
- Permite el desarrollo iterativo de aplicaciones.
- Facilita la interoperabilidad de aplicaciones.
- Facilita el desarrollo de sistemas complejos.
Conceptos bsicos. Objeto, atributo, mtodo, interfaz, clase
Tema 1.2
MDULO A
ndice de la unidad:
1. Conceptos bsicos
2. Objeto
3. Clase
Unidad 1.2 Conceptos bsicos
11
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
A continuacin veremos en ms detalle cada uno de estos conceptos bsicos.
2. Objeto
Hay muchas definiciones que pueden darse de un objeto, entre las cuales se en-
cuentran:
Es cualquier cosa que vemos a nuestro alrededor, algo tangi-ble y/o visible, animado o inanimado. Por ejemplo, un camin, un
perro, una cuenta bancaria ...
MDULO 1
12
Algo que puede comprenderse intelectualmente. Por ejemplo, una proceso de ordenacin
Una entidad Software. Por ejemplo una lista de cosas.
Definiciones dadas por creadores de metodologas Orientadas a Objetos como pue-
den ser:
Un objeto se caracteriza por un nmero de operaciones y un estado que recuerda el efecto de estas operaciones. Ivar Jacobson
Un objeto tiene un estado, comportamiento e identidad; la estructura y comportamiento de objetos similares se definen en sus
clases comunes. Grady Booch
Un objeto es una entidad que tiene un estado (cuya represen-tacin est oculta) y un conjunto definido de operaciones que ope-
ran sobre ese estado. Ian Sommerville
Un objeto es una identidad con unos lmites bien definidos que encapsulan estado y comportamiento. El estado se representa por
atributos y relaciones, el comportamiento es representado por ope-
raciones y mtodos. Object Management Group
Los trminos objeto e instancia son usados indistintamente.
Unidad 1.2 Conceptos bsicos
13
2.1 Caractersticas de un objeto
Todos los objetos, tienen intrnsecos las siguientes caractersticas, como se
han visto en alguna de definiciones del apartado anterior:
Identidad. Es un identificador unvoco para cada uno de los objetos. En el caso de que los valores de los atributos fueran los
mismos, es la nica manera de poder determinar cada uno de los ob-
jetos. As si tenemos dos cuentas corrientes con el mismo titular, y el
mismo importe, la nica forma de diferenciarlas es va dicha identi-
dad.
Comportamiento. Conjunto de operaciones o mtodos que proporcionan servicios a otros objetos que solicitan dichos servicios
cuando necesitan que se realice una cierta operativa.
Estado. Conjunto de propiedades o atributos que recuerdan el efecto de las operaciones.
Ejemplo: Para un reloj determinado, la identidad o identificador podra ser unReloj, con los atributos hora (horas, min, seg), dia (dia, mes, ao), modelo y
numSerie y cuyos mtodos u operaciones seran getHora, getDia, incrementar-
Hora, incrementarDia, limpiarPantalla y traducirFrecuencia.
2.2 Estructura de un objeto
En base a las caractersticas del objeto mencionadas anteriormente, todo ob-
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.
Los mtodos pueden clasificarse de la siguiente manera:
Modificador (setter): altera el estado de un objeto. Por ejem-plo, setHora()
Selector (getter): accede al estado de un objeto sin alterarlo. Por ejemplo getHora(X)
MDULO 1
14
Iterador: permite acceder a todas los elementos de un objeto. Solo disponible para colecciones de objetos.
Constructor: crea un objeto e inicializa su estado. Por ejemplo Reloj().
Destructor: limpia el estado de un objeto y lo destruye. Por ejemplo ~Reloj(). No existe en Java.
Propsito general: la lgica del programa. Por ejemplo, lim-piarPantalla(), incrementarDia().
Grficamente, se puede visualizar la estructura de un objeto de la siguiente ma-
nera:
Ejemplo: Para el objeto unReloj mencionado anteriormente, la estructura sera la siguiente:
Unidad 1.2 Conceptos bsicos
15
Atributo: Es una caracterstica fundamental de cada objeto y por lo tan-to como veremos posteriormente de una clase. Todos los atributos tie-
nen 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
Mtodo: Es una accin que se realiza sobre un objeto para consultar o modificar su estado.
2.3 El aspecto de los objetos.
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.
MDULO 1
16
Este aspecto exterior, es llamado tambin interfaz, siendo la parte visible y
accesible para el resto de objetos. Puede estar formado por uno o varios m-
todos. Tambin se le define como el protocolo de comunicacin de un objeto.
Es posible que exista algn mtodo que solo pertenezca al aspecto interno pe-
ro no pertenezca al interfaz. En este caso, estos mtodos no pueden ser lla-
mados desde otros objetos, sino que solamente pueden ser llamados desde
mtodos del propio objeto.
Ejemplo: Para el objeto unReloj, el interfaz estara formado por los mtodos getHora, getDia, incrementarHora e incrementarDia. Los mtodos limpiarPan-
talla y traducirFrecuencia solamente pertenecen (conjuntamente con los que
forman el interfaz) al aspecto interno. As el mtodo limpiarPantalla, es llamado
por getHora y getDia antes de mostrar la informacin pedida en el mtodo
Interfaz: Aspecto exterior que es visible al resto de objetos. Puede es-tar formado por uno o varios mtodos.
Unidad 1.2 Conceptos bsicos
17
3. Clase
Hasta ahora hemos visto que define a un objeto. Una de las definiciones ms senci-
llas 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 cla-
se 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 atribu-
tos que contiene y los mtodos que realiza.
Ejemplo: El objeto unReloj, pertenece a la clase Reloj, cuyo nombre es Re-loj, cuyos atributos son dia, hora, modelo y numSerie y cuyos mtodos son
getHora, getDia, incrementarHora, incrementarDia, limpiarPantalla y traducir-
MDULO 1
18
Frecuencia
Como se puede ver en la imagen anterior, en los diagramas UML, la definicin de
una clase, se realiza mediante un rectngulo, divido en tres partes y conteniendo
en el siguiente orden: Nombre, Atributos y Mtodos.
3.1 Clases versus Objetos.
Es importante saber diferenciar que es una clase y que es un objeto y en que
consiste cada una de ellas. Por ello, recapitulamos toda la informacin mos-
trada hasta el momento.
Una clase es un patrn para la definicin del estado y el comportamiento de
un tipo particular de objetos.
Todos los objetos de una clase dada son idnticos en estructura y comporta-
miento, pero tienen identidad nica.
Un objeto pertenece a una clase en particular.
Los objetos son creados y destruidos en tiempo de ejecucin. Residen en el
espacio de memoria.
Unidad 1.2 Conceptos bsicos
19
As para la clase Reloj descrita anteriormente, tendremos los objetos unReloj
(dia=01-03-2010, hora=13:01:03, modelo=Rolex, numSerie=123456)
y otroReloj (dia=01-03-2010, hora=13:01:03, modelo=Swatch, numSe-
rie=Sab748).
Pero si nos paramos a pensar, qu surge antes? La clase y por lo tanto
creamos los objetos del mundo real? O partiendo de los objetos del mundo re-
al podemos definir su estructura y comportamiento?.
Para solventar esta problemtica, aparece el concepto de Clasificacin. La cla-
sificacin es el medio por el que ordenamos el conocimiento, ya que funda-
mentalmente es un problema de bsqueda de similitudes. Al clasificar busca-
mos grupos de cosas que tengan una misma estructura o exhiban un compor-
tamiento comn.
La clasificacin dentro de la Orientacin a Objetos, sobre todo en las fases de
Anlisis y Diseo, permite que los objetos con la misma estructura de datos y
con el mismo comportamiento se agrupan para formar una clase.
MDULO 1
20
Decidir cual es el concepto o conceptos (Clase, Objeto, Mtodo, Atributo) que
cuadran con las siguientes definiciones. Pensar la solucin antes de pasar al
siguiente cuadro:
1. El valor de mis atributos puede ser distinto al de los de mi semejante: 2. Yo me comporto como una plantilla: 3. A mi me gusta hacer cosas: 4. Yo puedo tener muchos mtodos: 5. Yo represento el estado: 6. Yo represento el comportamiento: 7. Yo estoy en los objetos: 8. Yo vivo en memoria: 9. Yo soy usado para crear instancias: 10. Mi estado puede cambiar: 11. Yo declaro mtodos: 12. Yo puedo cambiar en ejecucin:
Las soluciones a las preguntas anteriores son:
1. El valor de mis atributos puede ser distinto al de los de mi semejante: Ob-jeto 2. Yo me comporto como una plantilla: Clase 3. A mi me gusta hacer cosas: Objeto, mtodo 4. Yo puedo tener muchos mtodos: Clase, objeto 5. Yo represento el estado: Atributo 6. Yo represento el comportamiento: Mtodo 7. Yo estoy en los objetos: Atributo, mtodo 8. Yo vivo en memoria: Objeto 9. Yo soy usado para crear instancias: Clase 10.Mi estado puede cambiar: Objeto 11.Yo declaro mtodos: Clase 12.Yo puedo cambiar en ejecucin: Objeto, atributo
Ttulo de unidad didctica
En esta Unidad hemos visto los conceptos bsicos en los que se apoya la Orientacin a objetos:
- Objeto.
- Atributo.
- Mtodo.
- Interfaz.
- Clase
Paradigmas de la OO
Tema 1.3
MDULO A
ndice de la unidad:
1. Paradigmas de la Orientacin a Objetos
2. Abstraccin
3. Encapsulacin y ocultamiento
4. Relaciones
5. Polimorfismo
Unidad 1.3 Paradigmas de la Orientacin a Objetos
25
En esta unidad veremos cuales son los paradigmas en los que se apoya la Orienta-
cin a Objetos, tanto a nivel de Anlisis y Diseo, como en la Programacin.
1. Paradigmas de la Orientacin a Objetos.
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.
El paradigma de la Orientacin a Objeto es una disciplina de ingeniera de desarro-
llo y modelado de Software que permite construir ms fcilmente sistemas comple-
jos a partir de los componentes individuales vistos en la Unidad 1.2, tales como ob-
jetos, clases, atributos, mtodos e interfaces, todos ellos utilizados para construir
un programa.
Esta disciplina y por tanto cualquier lenguaje de Orientacin a Objetos que perte-
nezca a ella, debe de cumplir con los siguientes paradigmas (aunque cada lenguaje
tenga sus propias peculiaridades al respecto):
Abstraccin
Encapsulacin y Ocultamiento
Herencia
Polimorfismo
A continuacin veremos en ms detalle cada uno de estos paradigmas.
2. Abstraccin
Consiste en la generalizacin conceptual de los atributos y comportamiento de un
determinado conjunto de objetos.
MDULO 1
26
La clave de la programacin Orientada a Objetos est en abstraer los mtodos y los
datos comunes a un conjunto de objetos y almacenarlos en una clase. As todos los
objetos de una clase, se diferenciaran solamente en el estado, teniendo todos ellos
el mismo comportamiento.
Primeramente hay que centrarse en lo que es y lo que hace un objeto (atributos y
comportamiento), antes de decidir cmo debera ser implementado. Nos centramos
por tanto en la definicin, en lugar de la implementacin.
Ejemplo de abstraccin: En nuestro mundo real, tenemos los siguientes objetos, miGato, miPerro, miLeon, miTigre y miLobo. Si abstraemos los atribu-
tos comunes que queremos tener contemplados en el mbito de nuestra solu-
cin, encontramos que en todos ellos, queremos tener una foto, que tipo de ali-
mentacin, donde habitan y su tamao, y como comportamiento, queremos sa-
ber 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 normal-
mente de forma simultnea.
Encapsular, significa reunir a todos los elementos que pueden considerarse perte-
necientes 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,
Unidad 1.3 Paradigmas de la Orientacin a Objetos
27
que es inaccesible para los dems. Permite tratar a un objeto como una caja ne-
gra, 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 ti-
pos o grados, que se enumeran a continuacin:
Asociacin: Relacin simple.
Agregacin: Contenido en ...
Composicin: Obligatoriedad. Uno no puede existir sin el otro.
Herencia: Relacin Jerrquica. Son del tipo de
Relaciones dinmicas: Mensajes.
4.1 Relacin de Asociacin
Representa la dependencia ms general entre clases, siendo una dependencia
de tipo semntico. Por defecto es bidireccional, aunque se puede restringir a
una sola direccin.
Esta relacin tiene multiplicidad (propiedad que expresa el nmero de instan-
cias de cada clase que participa en la relacin):
0..1 : cero o uno
1 : uno y solo uno
0..* o * : cero o muchos
MDULO 1
28
1..* : uno o muchos
En los diagramas UML, la linea recta se utiliza para
representar la asociacin bidireccional y la flecha (linea discontinua o conti-
nua) cuando es unidireccional.
Ejemplo de asociacin unidireccional: Un pedido puedo acceder a un producto, pero desde un producto no puedo acceder a un pedido. Otro ejemplo,
sera miPrograma puede acceder a un producto, pero un producto no puede ac-
ceder a miPrograma.
Ejemplo de asociacin bidireccional: Un cliente puede acceder a un pedi-do, y un pedido puede acceder a un cliente.
4.2 Relacin de Agregacin
Es una forma particular de asociacin que expresa un acoplamiento mas fuer-
te entre objetos.
Indica que los objetos de una clase contienen o estn formados por objetos de
otras clases, aunque no siempre precisa una contencin fsica, sino al menos
lgica.
Unidad 1.3 Paradigmas de la Orientacin a Objetos
29
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.
Ejemplo de agregacin: Una centralita puede contener llamadas. Pero puede existir sin ellas.
4.3 Relacin de Composicin
Se trata de una relacin de agregacin fuerte.
Un objeto no puede existir si no existen los objetos de los que est compues-
to.
En los diagramas UML, el rombo negro se utiliza para repre-
sentar la composicin.
Ejemplo de composicin: Un coche no puede existir, sin las partes que le componen, en este caso, las ruedas, la carrocera y el motor.
MDULO 1
30
4.4 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 operaciones de las clases superiores en la jerarqua.
Una clase puede tener sus propios atributos y operaciones adicionales a los
heredados y puede modificar los atributos y operaciones heredadas si necesita
cambiar su implementacin.
En los diagramas UML, la flecha cerrada blanca se utiliza para represen-
tar la herencia.
Ejemplo de herencia: En nuestro mundo real, estamos modelizando a los 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-
terminado en la clase Animal.
Unidad 1.3 Paradigmas de la Orientacin a Objetos
31
4.5 Relacin dinmica: Mensaje
Un mensaje es un comando o peticin que se le enva a otro objeto, para que
realice una operacin.
El objeto llamante requiere el conocimiento previo del interfaz del objeto re-
ceptor, porque sino no tiene manera de saber que peticiones tiene disponibles
y los formatos del mensaje a enviar.
Esta relacin se indica que es dinmica ya que se observa en ejecucin, no en
el diseo (en diseo solo se observan las interfaces y las relaciones). En una
clase, por tanto no se define, ningn tipo de mensaje. Es en ejecucin, donde
se aprecia los mensajes que un objeto llamante enva a uno receptor para que
modifique su estado o cambie su comportamiento.
Ejemplo de mensaje: El mensaje en este ejemplo es la llamada desde una-Persona al objeto unReloj, para que le de la hora mediante el mtodo getHora.
Para ello, el objeto unaPersona tiene que conocer el interfaz de unReloj, para
saber que mtodo es el que tiene que llamar, si tiene que pasarle parmetros,
de que tipos y si le va a devolver alguna informacin y una vez ms, de que ti-
po.
MDULO 1
32
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 implementa-
cin concreta de cada objeto.
Ejemplo de polimormismo: En el ejemplo, el Matemtico, solo va a tener relacin con Figura para calcularArea y calcularPerimetro. Pero realmente es ca-
da una de las figuras, la que sabe como tiene que calcularArea o calcularPeri-
metro. Por eso, cada una de ellas, Cuadrado, Triangulo y Circulo van a imple-
mentar cada uno de los mtodos de una manera mas especializada que el padre
Unidad 1.3 Paradigmas de la Orientacin a Objetos
33
Construir un Diagrama de Clases UML a partir de las siguientes observacio-
nes:
Una margarita es un tipo de flor. Una rosa es un tipo de flor. Las rosas rojas y las rosas amarillas son tipos de rosas. Un ptalo es una parte de ambos tipos de flores. Los pjaros se comen a ciertas plagas como los pulgones, que pueden
infectar a ciertos tipos de flores.
Del enunciado de la prctica, se pueden determinar distintas relaciones:
Existe una clase Flor que contiene Ptalos: Relacin de composicin. Aunque en el mundo real existen flores sin ptalos (sera una relacin de agrega-
cin) en el mbito de nuestro problema, solo contemplamos flores con ellos.
Las clases Rosa y Margarita tienen son Flores, por lo que tienen una rela-cin de herencia con Flor.
MDULO 1
34
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 apa-
recer 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.
35
Unidad 1.3 Paradigmas de la Orientacin a Objetos
En esta Unidad hemos estudiado los diferentes paradigmas de la programacin
Orientada a Objetos. Estos son:
Abstraccin Encapsulacin y Ocultamiento Relaciones
- asociacin
- agregacin
- composicin
- herencia
- mensaje
Polimorfismo
MDULO B
UNIDADES DIDCTICAS:
1. Introduccin a Java. Caractersticas del lenguaje
2. Entorno de desarrollo
3. Sintxis. Identificadores, keywords, variables,
tipos de datos, operadores, tipos de sentencias
4. Clases, objetos, herencia, polimorfismo
5. Otros conceptos. Paquetes, modificadores de
acceso, static, final, constantes
Introduccin a Java. Caractersticas del lenguaje
Tema 2.1
MDULO B
ndice de la unidad:
1. Introduccin
2. Caractersticas del lenguaje
3. La plataforma Java
Unidad 2.1 Introduccin a Java. Caractersticas del lenguaje
43
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 presen-
tado en sociedad en Enero de 1995 con una nueva orientacin: Internet. Fue pre-
sentado 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, co-
mo 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 indepen-
diente 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.
MDULO 2
44
2. Caractersticas del lenguaje
A continuacin enumeramos todas las caractersticas de este lenguaje de progra-
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:
Sencillo
Distribuido
Interpretado
Robusto
Seguro
Arquitectura neutra y portabilidad
Altas prestaciones
Multithread
Dinmico
A continuacin veremos en ms detalle cada una de las caractersticas mencio-
nadas.
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 lec-
tura y el mantenimiento de los programas. A continuacin se listan algunas de
las complejidades que se eliminaron:
No soporta tipos de datos: struct, union, y puntero
No soporta typedef ni #define
Unidad 2.1 Introduccin a Java. Caractersticas del lenguaje
45
No permite la sobrecarga de operadores.
No soporta la herencia mltiple.
No soporta destructores.
Posee una clase String, en vez del array de tipo char[] finali-zado con nulo.
Cuenta con un sistema automtico para asignar y liberar memoria: el Garbage Collector. Uno de los grandes problemas de
C++ es la reserva y liberacin de la memoria de forma programtica,
provocando indeseados memory leaks.
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, estable-
ciendo 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 pre-
viamente 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 ensam-
blador pero independiente de la mquina fsica en la que se ejecuta.
MDULO 2
46
Los bytecodes son interpretados (ejecutados) en cualquier entorno donde
exista un intrprete de Java generando cdigo mquina. El intrprete de Java
se llama Mquina Virtual Java o Java Virtual Machine (JVM) y este si que es
dependiente de la plataforma en la que se ejecuta, existiendo un instalable
para la mayora de sistemas operativos y arquitecturas como veremos en la
Unidad 2.2.
A continuacin se muestra cual sera el procedimiento a seguir, para poder
ejecutar un programa java.
Esta caracterstica es la que posibilita el propsito inicial de Write Once, Run
Everywhere.
Unidad 2.1 Introduccin a Java. Caractersticas del lenguaje
47
2.4 Robusto
Un software robusto es aquel que no se interrumpe fcilmente a consecuen-
cia 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 co-
rromper 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 in-
formacin 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 contro-
lado donde no se permite realizar ninguna ejecucin fuera de ella (como pue-
de 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 seguri-
dad para controlar de una manera ms precisa que puede o no puede hacer
(por ejemplo leer ciertos ficheros, poder abrir sockets ...).
2.6 Arquitectura neutra y portabilidad
Los bytecodes, resultados de la compilacin de los programas java, son inter-
pretados en cualquier plataforma donde exista una JVM, ya sea por ejemplo,
una plataforma Windows, Unix, Mac, entre otras.
MDULO 2
48
Son independientes de que su ejecucin se realicen en estaciones de trabajo,
o en servidores, o en arquitecturas fsicas con el mismo sistema operativo o
sistemas hetereogneos.
Por tanto, el cdigo bytecode es independiente no solo de la plataforma Soft-
ware en la que se ejecuta, sino tambin de la plataforma Hardware.
La portabilidad entre las plataformas, se consigue, debido a que la JVM espe-
cifica el tamao de sus tipos bsicos, el comportamiento de los operadores
aritmticos y el uso de estndares como UNICODE, IEEE 754 etc que per-
miten representar cualquier carcter mediante 2 bytes en lugar de uno solo,
como ocurre con el ASCII.
2.7 Altas prestaciones
Existen intrpretes JIT (Just-in-time) que interpretan el cdigo en el momento
de la ejecucin, generando cdigo mquina una sola vez y en las sucesivas
ejecuciones reutiliza dicho cdigo mquina en lugar de volver a generar cada
vez que pasa la ejecucin por ah.
A partir de la JVM 1.2.2 se introdujo un nuevo JIT llamado HotSpot.
Unidad 2.1 Introduccin a Java. Caractersticas del lenguaje
49
A pesar de todo, existe algn compilador real de Java (perdemos la portabili-
dad y ganamos en rendimiento). Es decir, que se compila antes de su ejecu-
cin, generando un ejecutable (no cdigo interpretable) atado a dicha plata-
forma. 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 tiem-
po real por el nmero de procesadores.
Ejemplo: Mientras que un thread se encarga de interactuar con el usuario, y otro thread realiza ciertos clculos. Por ejemplo, es bastante frecuen-
te 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 ejecutndo-
se ms el thread que sigue quedando a la espera de nuevas comunicaciones.
Cuando la ejecucin de cada operacin termine, el thread correspondiente ter-
minar 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 diver-
sas, 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
MDULO 2
50
clases va programtica, una clase denominada X, y una vez encontrada que
la ejecute. Este acceso se puede realizar tanto a nivel de clase, como a nivel
de mtodo y atributo.
3. La plataforma Java
Como hemos mencionado anteriormente, una plataforma es tanto el entorno hard-
ware y/o software donde se ejecuta un programa.
Ejemplo: Ejemplos de estas plataformas son:
1. Plataformas Intel, RISC, SPARC
2. Plataformas Win32, Linux, AIX, Solaris, HP-UX, z/OS
3. Plataformas IBM, Sun, HP, Microsoft
La plataforma Java es una plataforma solo software que se ejecuta sobre otra pla-
taforma hardware/software.
Tiene dos componentes diferenciables:
La mquina virtual Java (JVM) o intrprete de Java.
La Interfaz de Programacin de Aplicaciones (API). El API Ja-va es un conjunto de clases ya desarrolladas que ofrecen un gran
abanico de posibilidades al programador. El conjunto de las APIs son
controlados por el grupo JCP (Java Component Process)
Existen distintas ediciones de la plataforma Java:
Unidad 2.1 Introduccin a Java. Caractersticas del lenguaje
51
Java ME: Java Micro Edition. Orientado a entornos con recur-sos limitados como telfonos mviles, PDAs,
Java SE: Java Standard Edition. Orientados a entornos de gama media y estaciones de trabajo, como por ejemplo un usuario
medio en un PC de escritorio.
Java EE: Java Enterprise Edition. Orientados a entornos em-presariales distribuidos o Internet.
MDULO 2 PROGRAMACIN JAVA
En esta unidad se ha visto el origen del lenguaje de programacin Java y las
caractersticas que lo conforman:
- Orientado a Objetos
- Seguro
- Distribuido
- Interpretado
- Robusto
- Seguro
- Arquitectura neutra y portabilidad
- Altas prestaciones
- Multithread
- Dinmico
Adems se han categorizado los distintos tipos de plataformas Java:
- Java ME
- Java SE
- Java EE
Entorno de desarrollo
Tema 2.2
MDULO B
ndice de la unidad:
1. Java Development Kit
2. Contenido y componentes del JDK
3. IDE o Entorno integrado de desarrollo
Unidad 2.2 Entorno de Desarrollo
55
En esta unidad veremos el entorno de desarrollo de Java, denominado JDK (Java
Development Kit) y sus principales caractersticas.
1. Java Development Kit
Es el entorno de desarrollo de referencia para programas desarrollados del lenguaje
de programacin Java.
El JDK como tl, es un conjunto de especificaciones que son implementadas por
distintos proveedores, tales como:
Sun, que tiene una JDK para las siguientes plataformas: Win-dows en sus distintas versiones, Linux y Solaris (Sun). Descargable
de forma gratuita de la siguiente URL
http://java.sun.com/javase/downloads
IBM, que tiene una JDK para las siguientes plataformas: Win-dows en sus distintas versiones, Linux, AIX, OS/2, OS/400 y z/OS.
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 (Soft-
ware Development Kit), quedando de nuevo JDK como nombre actual. Tam-
bin 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).
MDULO 2
56
A partir de la versin 5 se ha quitado el 2 del nombre, quedando la nomencla-
tura Java SE, Java EE y Java ME respectivamente
Cada una de estas plataformas, contienen tanto una JDK (o entorno de desa-
rrollo y ejecucin) como un JRE (o Java Runtime Environment, solamente uti-
lizado en ejecucin), tambin llamado JVM. En este curso, solamente nos cen-
traremos en el JDK del Java SE.
Desde la versin 1.4 de J2SE, la evolucin del lenguaje de programacin Java
ha sido regulada por el JCP (Java Community Process), que utiliza Java Speci-
fication Requests (JSRs) para proponer y especificar cambios en la plataforma
Java. El lenguaje en s mismo est descrito en el Java Language Specification
(JLS), o Especificacin del Lenguaje Java. Los cambios en los JLS son gestio-
nados en JSR 901.
Veamos a continuacin un breve resumen de las versiones y los cambios im-
portantes que hubo en cada una de ellas:
JDK 1.0: Aparece el 23 de Enero de 1996.
JDK 1.1: Aparece el 19 de Febrero de 1997. Los cambios que incluye son:
Unidad 2.2 Entorno de Desarrollo
57
Una reestructuracin amplia del modelo de eventos AWT (Abstract Windowing Toolkit).
Clases internas (inner clases), JavaBeans, JDBC (Java Database Connectivity) para la integracin con bases de
datos, RMI (Remote Method Invocation)
SDK 1.2: Aparece el 8 de diciembre de 1998, con el nombre en clave Playground. Esta y las siguientes versiones fueron recogidas
bajo la denominacin Java 2. Otras mejoras aadidas incluan:
La palabra reservada (o keyword) strictfp,
Reflexin en la programacin (Reflection API)
La API grfica, Swing, fue integrada en las clases bsi-cas
La mquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in Time) por primera vez
El Java Plug-in para ejecucin de Java en los navegado-res.
Java IDL, una implementacin de IDL (Lenguaje de Descripcin de Interfaz) para la interoperabilidad con
CORBA
Colecciones (Collections)
SDK 1.3: Aparece el 8 de mayo de 2000 con el nombre clave Kestrel. Los cambios ms notables fueron:
La inclusin de la mquina virtual de HotSpot JVM (la JVM de HotSpot fue lanzada inicialmente en abril de 1999,
para la JVM de J2SE 1.2)
RMI fue cambiado para que se basara en CORBA
JavaSound API
MDULO 2
58
Se incluy el Java Naming and Directory Interface (JNDI) en el paquete de bibliotecas principales (anterior-
mente disponible como una extensin)
Java Platform Debugger Architecture (JPDA)
SDK 1.4: Aparece el 6 de febrero de 2002 con el nombre en clave Merlin. Este fue el primer lanzamiento de la plataforma Java
desarrollado bajo el JCP como JSR 59. Los cambios ms notables
fueron:
Palabra reservada o keyworkd assert
Expresiones regulares modeladas al estilo de las expre-siones regulares Perl
Encadenacin de excepciones Permite a una excepcin encapsular la excepcin de bajo nivel original.
Non-blocking NIO (New Input/Output)
Logging API
API I/O para la lectura y escritura de imgenes en for-matos como JPEG o PNG
Parser XML integrado y procesador XSLT (JAXP)
Seguridad integrada y extensiones criptogrficas (JCE, JSSE, JAAS)
Java Web Start incluido (El primer lanzamiento ocurri en marzo de 2001 para J2SE 1.3)
JDK 5.0: Aparece el 30 de septiembre de 2004 con el nombre clave Tiger. Los cambios ms notables fueron:
Plantillas (generics) que proporcionan conversion de ti-pos (type safety) en tiempo de compilacin para coleccio-
Unidad 2.2 Entorno de Desarrollo
59
nes y elimina la necesidad de la mayora de conversion de
tipos (type casting).
Metadatos, tambin llamados anotaciones, permite a estructuras del lenguaje como las clases o los mtodos,
ser etiquetados con datos adicionales, que puedan ser
procesados posteriormente por utilidades de proceso de
metadatos.
Autoboxing/unboxing o conversiones automticas entre tipos primitivos (como los int) y clases de wrapper para
tipos primitivos (como los Integer).
Enumeraciones; la palabra reservada enum crea una typesafe, lista ordenada de valores (como Dia.LUNES,
Dia.MARTES, etc.). Anteriormente, esto solo poda ser lle-
vado a cabo por constantes enteras o clases construidas
manualmente.
Varargs o nmero de argumentos variable. El ltimo parmetro de un mtodo puede ser declarado con el nom-
bre 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.
Bucle for mejorado. La sintaxis para el bucle for se ha extendido con una sintaxis especial para iterar sobre cada
miembro de un array o sobre cualquier clase que imple-
mente el interfaz Iterable, como la clase estndar Collec-
tion
JDK 6.0: Aparece el 11 de diciembre de 2006 con el nombre clave Mustang. Los cambios ms importantes introducidos en esta
versin son:
Incluye un nuevo marco de trabajo y APIs que hacen posible la combinacin de Java con lenguajes dinmicos
como PHP, Python, Ruby y JavaScript.
MDULO 2
60
Incluye el motor Rhino, de Mozilla, una implementacin de Javascript en Java.
Incluye un cliente completo de Servicios Web y soporta las ltimas especificaciones para Servicios Web, como
JAX-WS 2.0, JAXB 2.0, STAX y JAXP.
Mejoras en la interfaz grfica y en el rendimiento.
Incluye JavaDB (el conocido Derby de Apache).
2.Contenido y componentes del JDK
Antes de empezar a trabajar con un IDE (o Entorno Integrado de Desarrollo) que
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:
PATH: Variable de entorno del Sistema Operativo en la que se listan los directorios donde se encuentran los ejecutables de los pro-
gramas instalados en una mquina. En el caso del JDK, se encuen-
tran en el directorio bin de la instalacin.
CLASSPATH: Variable de entorno del Sistema Operativo en la que se le indican donde se van a encontrar las clases Java para la
compilacin y ejecucin de los programas. Esta variable solo ser ne-
cesaria en la ejecucin de los programas Java. Desde el JDK 1.4.0 si
no hay variable CLASSPATH definida, el JDK asume el . (punto), es
decir, el directorio desde donde ejecutemos las herramientas como
punto de partida para buscar.
2.1 Contenido
A continuacin se muestran que directorios contiene el JDK y para que se utili-
zan:
Unidad 2.2 Entorno de Desarrollo
61
/bin: las herramientas y utilidades del JDK (ejecutables).
/db: gestor de base de datos (nuevo de la versin 6.0).
/lib:las libreras del JDK, utilidadas por l mismo.
/include: los archivos C/C++ utilizados para construir la JVM.
/demo: una variedad de ejemplos escritos en Java.
/jre: la JVM sin herramientas de desarrollo
/src.zip: el cdigo fuente de las APIs Java.
2.2 Componentes
A continuacin se muestran los componentes que conforman el JDK.
javac.exe: Compilador de Java.
java.exe: Intrprete de Java (JVM).
appletviewer.exe: Intrprete de applets Java.
jdb.exe: Depurador de Java.
javadoc.exe: Generador de documentacin.
javah.exe: Integrador de C y C++ (JNI).
javap.exe: Desensamblador.
Existe documentacin online acerca del JDK en la siguiente URL
http://java.sun.com/javase/6/docs/api/index.html
3. IDEs o Entorno Integrado de Desarrollo
En el captulo anterior, hemos estado viendo el JDK no visual. Pero existen herra-
mientas grficas que simplifican el desarrollo, compilacin y ejecucin de los pro-
MDULO 2
62
gramas Java (al menos en entornos de desarrollo). Mencionamos a continuacin las
mas importantes y las URLs de referencia:
Eclipse: Es Open Source. Es la herramienta grfica que utiliza-remos durante el curso. http://www.eclipse.org (ver la Unidad Insta-
lacin 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.
NetBeans IDE: Es Open Source. http://www.netbeans.org
Sun Java Studio Creator: Es de Sun
http://developers.sun.com/jscreator
JBuilder: Es de Borland
http://www.codegear.com/products/jbuilder
IntelliJ IDEA: Es de jetBrains http://www.jetbrains.com/idea
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
Unidad 2.2 Entorno de Desarrollo
63
y javac.exe
En el caso de que no aparezcan correctamente la salida de los comandos mencio-nados anteriormente, verificar el valor de la variable de entorno PATH comprobando que contiene el directorio bin donde se haya instalado el JDK. PRCTICA B: Requiere instalar el JDK. Desarrollar un programa Java que muestre por pantalla el texto Hola Mundo! con el JDK de Sun.
MDULO 2
64
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 herra-mientas del JDK. Para respetar el valor que ya tuviese la variable PATH le aadimos %PATH%.
Creamos un directorio de trabajo donde guardar el programa Java.
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%.
Unidad 2.2 Entorno de Desarrollo
65
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.
Y aceptamos la creacin de un fichero nuevo.
MDULO 2
66
Escribimos el cdigo y salvamos los cambios. Cerramos el Notepad.
Compilamos el programa Java con el compilador javac. Al compilador hay que darle el nombre del fichero incluyendo su extensin.
Unidad 2.2 Entorno de Desarrollo
67
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.
MDULO 2
68
PRCTICA C: Requiere instalar Eclipse. Desarrollar un programa Java que mues-tre 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).
Cerrar la ventana de bienvenida si aparece (esta ventana aparece la primera vez que se arranca Eclipse).
Unidad 2.2 Entorno de Desarrollo
69
MDULO 2
70
Verificar que la perspectiva Java est abierta, y sino cambiar a ella
Crear un proyecto nuevo de nombre Practica2.
Darle el nombre y seleccionar Finish.
Unidad 2.2 Entorno de Desarrollo
71
Crear una clase Java nueva llamada Practica2 con el mtodo main.
MDULO 2
72
Seleccionar Finish
Escribir el cdigo dentro del mtodo main y salvar con Ctrl + S o File -> Save
Unidad 2.2 Entorno de Desarrollo
73
Por defecto, en eclipse, al salvar los cambios realizados en un fichero, se realiza la compilacin de las clases que estn en el worskpace. En el caso de producirse algn error de compilacin, se pueden ver en la vista Pro-blems
Seleccionando la clase Java, con el botn derecho del ratn ejecutarla como Java Application
MDULO 2
74
Y veremos como se abre una consola con el resultado.
Ttulo de unidad didctica
En este unidad hemos visto la historia del JDK desde su comienzo hasta el mo-
mento actual, viendo las distintas posiblidades de desarrollo, va el JDK directa-
mente (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.
Sintxis
Tema 2.3
MDULO B
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.
Unidad 2.3 Sintaxis
79
En esta unidad trataremos en detalle la sintaxis del lenguaje de programacin Java.
Dicha sintaxis es comprobada por el compilador y en caso de no ser correcta, este
nos indicar los errores o avisos existentes. Por defecto, no se pueden ejecutar
programas Java con errores de compilacin, por lo que la sintaxis del programa de-
be ser 100% correcta.
1. Comentarios
Los comentarios son lneas de cdigo que no son ejecutadas en tiempo de ejecu-
cin, ni siquiera son incluidas en el byte code compilado. Estos comentarios, permi-
ten incluir explicaciones acerca de qu es lo que est haciendo nuestro cdigo, do-
cumentacin, inhabilitar lneas de cdigo que ya no son necesarias en runtime, etc.
Existen tres formas distintas de escribir los comentarios:
// comentario de una sola lnea. Abarca desde el comienzo del comentario // hasta el final de lnea.
/* */ Comentario de una o ms lneas. Abarca desde el co-mienzo del comentario /* hasta el final del mismo */
/** */ Comentario de documentacin, utilizado por la herramienta javadoc.exe. Abarca desde el comienzo del comentario
/** hasta el final del mismo */.
Ejemplo: A continuacin se muestra un ejemplo con los distintos ti-pos de comentarios mencionados anteriormente.
MDULO 2
80
2. Puntos y coma, bloques y espacios en blanco
Uno de los caracteres ms importantes a tener en cuenta en Java es el punto y co-
ma o ;.
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.
Ejemplo: A continuacin se muestra un ejemplo con los distintos ti-pos de lneas simples de cdigo mencionados anteriormente.
Unidad 2.3 Sintaxis
81
Otro concepto importante a tener en cuenta en Java es el de bloque de cdigo. Un
bloque es un conjunto de sentencias (de 0 a n) agrupadas entre llaves ({ }). Los
bloques pueden estar anidados.
Suelen utilizarse conjuntamente con las sentencias de control de flujo (ver punto
8), pero tambin pueden utilizarse, por ejemplo, para minimizar el mbito de cier-
tas variables, como son las variables de bloque (ver punto 4.2).
Ejemplo: A continuacin se muestra un ejemplo de bloques de cdi-go con una o varias sentencias y anidamientos de bloques
Java permite los espacios en blanco entre elementos de cdigo fuente. Son utiliza-
dos 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).
Ejemplo: A continuacin se muestran ejemplos donde los espacios se utilizan como separadores de elementos de la sintaxis (entre int e i, y en-
tre int y j entre otros) y como mejoras para el entendimiento del cdigo:
MDULO 2
82
3. Identificadores
Son los nombres unvocos que se le dan a las clases, mtodos y variables. Hay que
tener presente las siguientes reglas:
El identificador debe empezar por una letra, subrayado (_) o dlar ($).
Despus del primer carcter se pueden usar nmeros.
Java distingue entre maysculas y minsculas (es case sensi-tive). Los identificadores VARIABLE y variable son dos identificado-
res distintos.
Nunca pueden coincidir con una keyword o palabra reservada del lenguaje. A continuacin se muestra un listado de las keyword
mas utilizadas en Java y que por tanto tienen un significado especial
para el lenguaje
Unidad 2.3 Sintaxis
83
Ejemplo: Los siguientes identificadores son vlidos: variable, $va-riable2, CONSTANTE, nombre_usuario, nombreUsuario, _variable_sistema
Ejemplo: Los siguientes identificadores no son vlidos: 1variable, int, #variable, variable%Final
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
MDULO 2
84
La declaracin es la sentencia mediante la cual se define una variable, asig-
nndola un tipo y un identificador. El formato es tipo identificador;
Ejemplo: int contador; // tendr el valor por defecto 0
Adicionalmente se le puede asignar un valor inicial mediante una asignacin.
El formato es tipo identificador = valor;
Ejemplo: int contador = 10;
En el caso de que no se le asigna un valor, se inicializar con el valor por de-
fecto para ese tipo (veremos los distintos tipos y sus valores por defecto en el
punto 5 Tipos de Datos).
4. 2 mbito de las variables
El mbito de una variable es la zona de cdigo donde se puede referenciar di-
cha variable a travs de su identificador.
El lugar de declaracin de una variable establece su mbito. Los distintos m-
bitos existentes son:
Atributos (o variables miembro de una clase). Se pueden utili-zar solamente asociados a la clase a la que pertenecen.
Parmetros de mtodo. Se pueden utilizar solamente en el mtodo del cual son parmetros.
Variables locales: (o de mtodo) siempre hay que inicializar-las. Solamente puede accederse a ellas, dentro del mtodo donde
han sido declaradas.
Variables de bloque: siempre hay que inicializarlas. Solamente puede accederse a ellas, dentro del bloque donde han sido declara-
das.
Unidad 2.3 Sintaxis
85
En el caso de que se declaren variables con el mismo identificador en mbitos
distintos (en el mismo no se puede), tienen preferencia las del mbito ms in-
terno. 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
son los atributos.
Ejemplo: El siguiente ejemplo muestra el error de compilacin al in-tentar referenciar una variable fuera de su mbito.
MDULO 2
86
Ejemplo: El siguiente ejemplo muestra cual es la variable utilizada, segn el mbito en el que est declarada.
Unidad 2.3 Sintaxis
87
5. Tipos de datos.
En Java existen dos tipos de datos genricos:
Tipos Primitivos. Existen ocho tipos de datos primitivos clasifi-cados en cuatro grupos diferentes:
Lgico: boolean. Carcter: char. Nmeros enteros: byte, short, int y long. Nmeros reales: double y float.
Tipos Complejos o clases. Existe un caso especial que es el de enumeracin: enum que aparece en Java JSE 5.0
5.1 Tipo de dato lgico
La keyword utilizada para definir un tipo de dato lgico es boolean. Sus posibles
valores son:
true: o verdadero
false: o falso. Es el valor por defecto.
Ejemplos: boolean switch1 = true;
boolean switch2; // Su valor es false.
Se suelen utilizar en las sentencias de control de flujo del tipo bifurcaciones del
tipo if-then-else (ver punto 8).
5.2 Tipo de dato carcter
La keyword utilizada para definir un tipo de dato carcter es char y representa
un carcter UNICODE, siendo su tamao de: 16 bits (2 bytes). Desde la versin
5.0 Java soporta UNICODE 4.0 que define algunos caracteres que no caben en
16 bits por lo que se necesita un int para representarlos (o dos char dentro de
un String).
Sus posibles valores son:
Un carcter entre comillas simples: a.
MDULO 2
88
Un carcter especial con \ por delante: \n, \t, etc.
Un cdigo UNICODE: \uxxxx (donde xxxx es un valor en hexadecimal).
El valor por defecto es \u0000 -> null. Nota: No es un espa-cio en blanco.
Ejemplos: char letra1 = a;
char letra2 = \n;
char letra3 = \u0041;
char letra4; // su valor es null
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 in-
dividuales dentro de un String, caracteres contenidos en un fichero, etc.
5.3 Tipo de datos enteros
Las keyword utilizadas para definir un tipo de dato entero son byte, short, int y
long. Sus tamaos son:
byte: 8 bits (1 byte), por tanto el rango de valores es de -128 a 127.
short: 16 bits (2 bytes), por tanto el rango de valores es de -32768 a 32767
int: 32 bits (4 bytes), por tanto el rango de valores es de -2147483468 a 2147483467
long: 64 bits (8 bytes), por tanto el rango de valores es de -enorme a enorme
Sus posibles valores son:
Unidad 2.3 Sintaxis
89
Un valor decimal entero: 2 (por defecto para tipo int) o 2L (para tipo long).
Un valor octal: 077 (comenzando por cero).
Un valor hexadecimal: 0xBAAC
El valor por defecto es 0.
Ejemplos: byte unByte = 12;
short unShort; // tiene el valor 0
short unShort; // tiene el valor 0
int unInt = -199;
int otroInt = 065;
long unLong = 2; (o long unLong = 2L;)
long otroLong = 0xABCD;
Se suelen utilizar en operaciones arimticas, en sentencias de control de tipo bu-
cle (en concreto la sentencia for y el tipo int), etc.
5.4 Tipo de datos reales
Las keyword utilizadas para definir un tipo de dato real son float y double. Sus
tamaos son:
float: 32 bits (4 bytes). Su precisin vara segn la platafor-ma.
double: 64 bits (8 bytes). Su precisin tambin vara segn la plataforma.
Sus posibles valores son:
Un valor decimal entero: 2 (por defecto para tipo int).
Un valor decimal real: 0.17 o 6.02E23 (por defecto double).
Un valor decimal real: 0.17F o 0.17D (redundante).
MDULO 2
90
El valor por defecto es 0.0 (cero).
Ejemplos: float unFloat = 0.17F;
double unDouble; // su valor es 0.0
double otroDouble = -12.01E30;
Se suelen utilizar en operaciones arimticas, etc.
5.5 Tipo de dato complejo
Las keyword es el nombre de la clase del objeto que va a contener la variable.
Sus posibles valores son:
Referencias a objetos (o instancias) en memoria.
El valor por defecto es null
Ejemplos: String unString = new String(Hola);
String otroString; // su valor es null
Se suelen utilizar para contener objetos de nuestro mundo real.
5.6 Tipo de dato enumeracin
La keyword utilizada para definir un tipo de dato enumeracin es enum.
Se trata de un tipo de dato complejo algo especial que surge con la versin 5.0
de Java. Implementa una clase que tiene un atributo que puede tomar varios va-
lores y solo esos.
Ejemplo: enum Semaforo { VERDE, AMBAR, ROJO }
Se suelen utilizar para tener una lista de posibles valores asociados a una varia-
ble y solamente dichos valores.
5.7 Ejemplos de variables con distintos tipos de datos
El siguiente ejemplo muestra el valor de variables de distintos tipos con sus va-
lores por defecto.
Unidad 2.3 Sintaxis
91
El siguiente ejemplo muestra el valor de variables de distintos tipos con sus va-
lores asignados en la declaracin
5.8 Conversiones entre tipos
MDULO 2
92
Un tipo de dato nmerico puede llegar a convertirse a otro tipo. Existen cuatro
entornos de conversin en Java:
Promocin aritmtica. Por ejemplo: de short a int y este a float.
Asignacin. Por ejemplo: long l = 42; // un int se convierte en long
Llamada a mtodos con parmetros. Por ejemplo: f(long p) -> f(5) //se llama a un mtodo con un int y se convierte a un long
Casting. Por ejemplo: int i = (int)42L //un long se convierte en int. Ver la explicacin de downcasting.
Las conversiones implcitas se resuelven en tiempo de compilacin. El upcasting
(de un tipo ms pequeo convertirlo a uno ms grande) se realiza implcitamen-
te.
El downcasting (de un tipo ms grande convertirlo a uno ms pequeo) se reali-
zan explcitamente (hay que indicar a que tipo se quiere convertir) y se resuelve
en tiempo de ejecucin. Nota: puede perderse informacin, por lo que se obliga
a que sean realizados explcitamente.
6. Variables primitivas versus complejas
Una variable de tipo primitivo contiene el dato directamen-
te:
Una variable de tipo complejo contiene una referencia (puntero) a la zona de me-
moria donde est el objeto:
Unidad 2.3 Sintaxis
93
7. Operadores
Los operadores realizan funciones sobre uno, dos o tres operandos (op). Por tanto,
una primera clasificacin puede ser esta:
Operadores unarios: pueden ser de tipo prefijos o postfijos. op operador u operador op.
Ejemplo: contador++; // operador postfijo de sumar 1 a la propia variable contador. La variable se queda con el valor sumado
Operadores binarios: operador op operador
Ejemplo: contador + 2; // operador de sumar un nmero a una va-riable. La variable en si misma no se queda con la suma.
Operadores ternarios: op ? op : op
Ejemplo: contador > 2 ? true : false; // es similar a un if-then-else de la siguiente manera if ? Then : else ;
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
MDULO 2
94
Lgicos
De asignacin
Otros
7.1 Operadores aritmticos
A similitud con el mundo mtematico, existen los siguientes operadores aritmti-
cos binarios:
+: suma dos operandos op1 + op2. Hay que tener cuidado con las variables de tipo String, porque en este caso concatena los
valores.
- : resta dos operandos op1 op2
* : multiplica dos operandos op1 * op2
/ : divide dos operandos op1 / op2
% : calcula el resto de la divisin op1 % op2
Los valores que devuelven estos operadores depende de los tipos de los ope-
randos:
int: cuando ninguno de los operandos es float, double o long. En el caso del operador % siempre devuelve un int.
long: cuando ninguno de los operandos es float o double y hay al menos uno que es long.
float: cuando ninguno de los operandos es double y hay al menos uno que es float.
double: cuando al menos hay uno de los operandos es double.
Tambin existen operadores aritmticos unarios (actan solo sobre un operan-
do):
Unidad 2.3 Sintaxis
95
+op: convierten al operando en int en caso de que fuese byte, short o char.
-op: cambia el signo al operando.
++op: incrementa al operando en 1 (evaluando el operando despus de incrementarse).
op++: incrementa el operando en 1 (evaluando el operando antes de incrementarse).
--op: decrementa el operando en 1 (evaluando el operando despus de decrementarse).
op--: decrementa el operando en 1 (evaluando el operando antes de decrementarse).
Ejemplo: En el ejemplo siguiente se muestran los operadores autoin-crementales, diferenciando si se evala el valor de la variable antes o des-
pus del incremento.
7.2 Operadores relacionales
Java tiene los siguientes operadores relacionales:
MDULO 2
96
>: compara si un operando es mayor que otro op1 > op2 =: compara si un operando es mayor o igual que otro op1 >= op2
Unidad 2.3 Sintaxis
97
>>: desplaza los bits del primer operando hacia la derecha tantas veces como indique el segundo operando op1 >> op2. Reali-
za la misma funcin que multiplicar por 2, tantas veces se desplace.
: desplaza los bits del primer operando hacia la derecha tantas veces como indique el segundo operando pero sin signo op1
>>> op2. Realiza la misma funcin que multiplicar por 2, tantas ve-
ces se desplace, pero sin tener en cuenta la posicin de signo.
Ejemplo: En los siguientes ejemplos se muestran los operadores de desplazamiento
MDULO 2
98
7.5 Operadores lgicos
Java tiene los siguientes operadores lgicos:
&: AND lgico a nivel de bit de los operandos (el resultado es uno si los bits de ambos operandos son uno) op1 & op2. Cuidado
con no confundir con el operador lgico &&
|: 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. Cui-
dado con no confundir con el operador lgico ||
Unidad 2.3 Sintaxis
99
^: XOR lgico a nivel de bit de los operandos (el resultado es uno si alguno de los bits de los operandos es uno, pero no los dos a
la vez) op1 ^ op2
~: complemento a nivel de bit del operando (cambia los ceros por uno y viceversa) ~op1
7.6 Operadores de asignacin
Java tiene los siguientes operadores de asignacin:
= : guarda el valor del segundo operando en el primero op1 = op2
+= : guarda la suma de los dos operandos en el primero op1 += op2
-= : guarda la resta de los dos operandos en el primero op1 -= op2
MDULO 2
100
*= : guarda la multiplicacin de los dos operandos en el pri-mero op1 *= op2
/=, %=, &=, |=, ^=, =, >>>=: Similar al anterior, para cada uno de los operadores indicados.
7.7 Otros operadores
Existen otros operadores en Java como son:
?: : se trata de una abreviatura de la estructura if-then-else (if op1? then op2 : else op3) op1?op2:op3
[] : utilizado para declarar, crear y acceder a arrays (se vern en la Unidad 3.1).
. : utilizado para acceder a los atributos y mtodos de los ob-jetos (se vern en la Unidad 2.4).
(parmetros) : utilizado para pasar parmetros a un mtodo.
(tipo) : utilizado para realizar castings (conversiones de tipo).
new : utilizado para crear objetos nuevos (se ver en la Uni-dad 2.4).
instanceof : utilizado para chequear si el primer operando es una instancia del tipo indicado en el segundo operando.
8. Sentencias de control de flujo
Sin las sentencias de control de flujo, el cdigo Java se ejecutara linealmente des-
de la primera lnea hasta la ltima.
Existen cuatro tipos de sentencias de control de flujo:
Bucles: while, do-while, for y for/in
Unidad 2.3 Sintaxis
101
Bifurcaciones: if-then-else y switch-case.
Gestin de excepciones: try-catch-finally y throw. Las veremos con ms detalle en la Unidad 3.5 Manejo de excepciones.
De ruptura: break, continue, label: y return.
8.1 Sentencias while y do-while
La sentencia while se utiliza para ejecutar continuamente un bloque de cdigo
mientras que la condicin del while sea cumpla (es decir la evaluacin de la
condicin sea true o verdadera).
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);
8.2 Sentencia for
La sentencia for facilita la ejecucin de un bloque de cdigo un nmero deter-
minado de veces, mientras la evaluacin de la expresin de terminacin se
cumpla o sea true.
for(inicializacin; terminacin; incremento) { sentencias; }
Las variables definidas en la sentencia de inicializacin son locales al bloque. Por
tanto dejan de existir una vez se haya terminado el bucle.
Ejemplo: se muestra un ejemplo de las sentencias de control de tipo bucles vistas hasta el momento
MDULO 2
102
8.3 Sentencia for/in
Esta nueva sentencia que aparece en el Java SE 5.0 nos facilita la iteracin por
los elementos de cualquier tipo de coleccin: arrays, listas, etc
for(inicializacin: coleccin) Nota: Se usa : en vez de ;. { sentencias; }
Las variables definidas en la sentencia de inicializacin son locales al bloque. Por
tanto dejan de existir una vez se haya terminado el bucle.
Ejemplo: se muestra un ejemplo de la sentencia de control for/in
public void listar(int[] param) { for(int i: param) System.out.println(i); }
Bsicamente, se trata de una simplificacin a la hora de codificar. Es decir, al fi-
nal, el compilador convierte el cdigo en una sentencia for convencional como la
siguiente:
Unidad 2.3 Sintaxis
103
public void listar(int[] param) { int i = 0; for(int j=0; j
MDULO 2
104
public void evaluar(int param) { if (param < 5) { //ejecutamos algo } else if (param >=5 && param < 10){ //ejecutamos algo } else { //ejecutamos algo } }
8.5 Sentencia switch
La sentencia switch es un caso particular de la sentencia if-then-else if-else.
Evala una expresin del tipo int o que pueda ser convertida a int de forma im-
plcita (como puede ser un char).
As se evala la expresin intExpresin y va comparando cada uno de los case a
ver si cumple la condicin. En el caso de que la comparacin sea true, se ejecu-
tan las sentencias siguientes hasta que se encuentre la siguiente sentencia
break o llegue al final de la sentencia switch.
En el caso de que todas las comparaciones sean false se ejecutar las senten-
cias del default (en el caso de existir, puesto que es optativo).
switch(intExpresin) { case intExpresin: sentencias; break; default: // es optativo sentencias; }
Ejemplo: se muestra un ejemplo de la sentencia de control switch
public void listar(int param) { switch(param){ case 1: // ejecutar algo break; case 2: // ejecutar algo break; default: // ejecutar algo break; }
Unidad 2.3 Sintaxis
105
}
8.6 Sentencia de ruptura
Java proporciona las siguientes sentencias de ruptura de ejecucin:
break: sirve para detener la ejecucin tanto de los bucles co-mo de la sentencia switch. Por tanto, salta a la siguiente lnea de c-
digo despus del bucle o switch.
continue: sirve para detener la ejecucin del bloque de cdigo de un bucle y volver a evaluar la condicin de este.
return: sirve para finalizar la ejecucin de un mtodo (y devol-ver un valor en el caso de ser necesario).
Nota: Las guas de programacin estructurada prohiben el uso de estas senten-
cias o aconsejan un uso muy lmitado para facilitar la legibilidad y mantenimien-
to del cdigo
MDULO 2
106
PRCTICA A: Identificar que sentencias son correctas y cules no (se irn utili-zando 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; PRCTICA B: Identificar si este cdigo compila bien. Si no compila solucionarlo. Si compila decir cul sera la salida.
public class Temp { public static void main(String[] args) { int x = 1;
Unidad 2.3 Sintaxis
107
while(x3) { 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(x3) { System.out.println("Hola");