manual java inicial aula mentor

343
educacion.es AULA MENTOR Programación en Java inicial

Upload: jorge-yomismo

Post on 21-Nov-2015

190 views

Category:

Documents


8 download

DESCRIPTION

Manual ofrecido por Aula Mentor para el Curso de Java Inicial

TRANSCRIPT

  • 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");