37
1 CARRERA: Ingeniería en Desarrollo de Software Cuatrimestre 04 Programa de la asignatura: Programación Orientada a Objetos I Unidad 1. Introducción a JAVA Clave: 160920414 / 150920414

Unidad 1. Introduccion a JAVA

Embed Size (px)

Citation preview

  • 1

    CARRERA: Ingeniera en Desarrollo de Software

    Cuatrimestre 04

    Programa de la asignatura:

    Programacin Orientada a Objetos I

    Unidad 1. Introduccin a JAVA

    Clave: 160920414 / 150920414

  • 2

    Tabla de contenidos

    II. DESARROLLO DE CONTENIDOS POR UNIDAD ........................................................ 4

    a. Unidad 1. Introduccin a JAVA ................................................................................... 4

    Presentacin de la unidad .......................................................................................... 4

    Propsitos de la unidad .............................................................................................. 4

    Competencia especfica .............................................................................................. 4

    Actividad 1. Presentacin ........................................................................................... 4

    1.1. Caractersticas de la Programacin Orientada a Objetos ..................................... 5

    1.1.1. Abstraccin ....................................................................................................... 5

    1.1.2. Polimorfismo ..................................................................................................... 6

    1.1.3. Encapsulacin .................................................................................................. 6

    1.1.4. Herencia ........................................................................................................... 6

    1.1.5. Programacin orientada a objetos vs estructurada ........................................... 7

    Actividad 2. Diferencias entre Programacin estructurada y POO .............................. 8

    Actividad 3. Caractersticas de JAVA .......................................................................... 9

    1.2. Caractersticas del lenguaje JAVA ....................................................................... 9

    1.2.1. Generalidades de JAVA .................................................................................. 10

    1.2.2. Mquina virtual de JAVA ................................................................................. 14

    1.2.3. Entorno de desarrollo y configuracin ............................................................. 16

    1.2.4. Tipos de datos soportados en JAVA ............................................................... 19

    Actividad 4. Tipos de datos ....................................................................................... 20

    1.2.5. Operadores aritmticos, lgicos y relacionales ............................................... 21

    Actividad 5. Operadores ........................................................................................... 25

    1.2.6. Conversin de tipos de datos .......................................................................... 25

    1.3. Organizacin de un programa ............................................................................ 27

    1.3.1. Estructura General .......................................................................................... 27

    1.3.2. Convenciones de la programacin .................................................................. 30

    1.3.3. Palabras reservadas ....................................................................................... 31

    1.3.4. Estructura de una clase .................................................................................. 32

    1.3.5. Declaracin de objetos y constructores ........................................................... 33

  • 3

    Autoevaluacin ......................................................................................................... 34

    Evidencia de aprendizaje. Programa en JAVA .......................................................... 35

    Autorreflexiones ........................................................................................................ 35

    Cierre de la unidad ................................................................................................... 35

    Para saber ms ........................................................................................................ 36

    Fuentes de consulta ................................................................................................. 36

  • 4

    II. Desarrollo de contenidos por unidad

    a. Unidad 1. Introduccin a JAVA

    Presentacin de la unidad

    En esta 1 unidad de la materia Programacin Orientada a Objetos I (POO I), se

    aprender el concepto de la programacin orientada a objetos y la descripcin de los

    elementos que la integran as como del lenguaje a implementar, el cual ser JAVA, sus

    caractersticas y la estructura de un programa.

    Propsitos de la unidad

    En esta unidad el estudiante lograr:

    Distinguir entre programacin orientada a objetos y programacin estructurada.

    Reconocer las caractersticas de la programacin orientada a objetos.

    Determinar las caractersticas y especificaciones de la programacin en JAVA.

    Identificar la organizacin de un programa en JAVA.

    Desarrollar programas modulares.

    Competencia especfica

    Desarrollar un programa bsico para la solucin de problemas matemticos simples

    tomando en cuenta el entorno, caractersticas y especificaciones de los programas JAVA

    a travs de dicho lenguaje.

    Actividad 1. Presentacin

    Antes de comenzar el estudio de la asignatura, te invitamos a participar en un foro de

    discusin general, creado para que comentes cualquier asunto relacionado con la

    asignatura; en l, conocers a tus compaeros de grupo y entre todos podrn apoyarse

    para resolver dudas, inquietudes, externar comentarios, etctera.

    Para comenzar tu participacin, ingresa a la Actividad 1.Presentacin en el aula.

  • 5

    1.1. Caractersticas de la Programacin Orientada a Objetos

    Hoy en da podemos entender que en la vida diaria estamos rodeados de objetos y que

    estos objetos coexisten con nosotros, pero Qu es un Objeto?

    Podemos describir y nombrar los objetos para entender cules son las diferencias entre

    ellos, por ejemplo si vas a un supermercado, encontramos carritos de super y canastillas

    de mercado, ambos son objetos con propiedades o atributos en comn, espacio para

    cargar o transportar artculos pero a la vez tienen diferencias, la canastilla de mercado

    necesitamos cargarla y al carrito de super no, es decir cada uno es para un fin

    especfico y prctico.

    De tal modo, podemos definir a un objeto como una entidad compleja con propiedades

    (datos, atributos) y comportamiento (funcionalidad, mtodos). Con todas stas

    caractersticas es conveniente afirmar que todo lo que nos rodea se puede representar y

    que cada uno de estos objetos posee una interfaz que especifica cmo stos pueden

    interactuar con otros, dichos objetos tienen instrucciones propias (Joyanes, 2001).

    1.1.1. Abstraccin

    De acuerdo a Joyanes, la abstraccin es:

    La propiedad de los objetos que consiste en tener en cuenta slo los aspectos ms

    importantes desde un punto de vista determinado y no tener en cuenta los restantes

    aspectos que no son significativos. Durante el proceso de abstraccin es cuando se decide

    qu caractersticas y comportamiento debe tener el modelo. Un medio de reducir la

    complejidad es la abstraccin. Las caractersticas y los procesos se reducen a las

    propiedades esenciales, dejando de lado los dems detalles no sustanciales. De este modo,

    las caractersticas complejas se hacen ms manejables (Joyanes, 2001: 5).

    La abstraccin como tal nos sirva para poder pasar del plano material al plano mental.

    Ahora bien, cmo se relaciona la abstraccin con la POO? Imaginemos que tenemos un

    grupo de tornillos y de dicho grupo un tornillo se podra manejar con un desarmador

    especfico, pero tambin con cualquier otro desarmador aunque no sea nuestro, lo mismo

    pasa en un sistema software, los mdulos son independientes, pero a la vez funcionan

    como un gran modulo del software, es decir podemos partir un gran software para poder

    hacerlo en mdulos, esto har ms fcil la identificacin de sus caractersticas bsicas.

  • 6

    1.1.2. Polimorfismo

    La propiedad de polimorfismo es aquella en que una operacin tiene el mismo nombre en

    diferentes clases, pero se ejecuta de diferentes formas en cada clase. (Joyanes, 2001:

    6). Dicho de otro modo es la capacidad que tiene una clase para adaptarse a diferentes

    usos sin necesidad de modificarla. As, por ejemplo, la operacin copiar puede darse en

    diferentes clases: copiar un libro, copiar un archivo, copiar una actitud, copiar un

    comportamiento, copiar en un examen, etc. Siempre se ejecuta una operacin distinta

    pero con el mismo nombre copiar. Por tanto:

    El polimorfismo es la propiedad de una operacin de ser interpretada

    exclusivamente por el objeto al que corresponde.

    1.1.3. Encapsulacin

    Si bien externamente los objetos pueden parecer iguales, internamente pueden ser muy

    distintos. Por ejemplo, si sabes manejar un reproductor de DVD, puedes manejar

    cualquier otro reproductor como CD y BLUE RAY, esto es encapsular, los dos

    reproductores pueden ser parecidos por fuera, pero por dentro funcionan de diferente

    forma.

    Esta propiedad permite intercambiar objetos en una operacin; retomando el ejemplo de

    los reproductores puedes cambiar la carcasa por una ms moderna o llamativa sin que el

    funcionamiento interno se vea afectado.

    1.1.4. Herencia

    La herencia en el paradigma de la POO es un mecanismo que se utiliza para efectuar la

    reutilizacin del software, de modo tal que los programadores pueden crear clases nuevas

    a partir de clases ya existentes, tomndolas como base y creando una jerarqua de

    clases, de esta manera no se tiene que rehacer todo el cdigo de una clase.

    Si se ve de manera ms sencilla, la herencia en programacin funciona de manera similar

    a la herencia familiar, por ejemplo, si un pap tiene un hijo que se parece mucho

    fsicamente a l, entonces ambos comparten ciertas caractersticas, podemos decir

    entonces que el pap le hered sus caractersticas fsicas al hijo.

    Las caractersticas de un objeto pueden ser heredadas del objeto que est en el nivel

    superior, por ejemplo novillo tiene orejas y cola y su pelo es negro como el de un toro

    normal pero su cornamenta es ms delgada y ms fina, el toro y el novillo son parecidos

    pero no son iguales.

  • 7

    En programacin la herencia se aplica sobre las clases, y tenemos clases padre, de las

    cuales de despliegan las clases hijo, que heredar las caractersticas del padre y pueden

    tener otras caractersticas ms.

    Hasta este punto hemos visto solo los conceptos generales que dan cabida a la POO,

    ms adelante en el curso veremos cmo estos conceptos se implementan ya en la

    programacin.

    1.1.5. Programacin orientada a objetos vs estructurada

    Desde la concepcin de la programacin estructurada (y por su misma etimologa) se ha

    entendido de manera que se debe realizar de manera secuencial y haciendo el diseo

    como lo marcan los cnones: de arriba a abajo (Top-Down) o de abajo a arriba (Bottom-

    Up). De esta manera se comienza a pensar y escribir una secuencia de instrucciones que

    debern resolver el problema que se presenta y para el cual se escribe el programa

    deseado. Cuando la complejidad misma inherente al problema crece, por cualquiera que

    sea la razn, esta concepcin deja de ser til e inevitablemente se debe voltear la mirada

    a otro paradigma de programacin, que, no importando cun grande y complejo se torne

    la solucin del problema, sea capaz de manejarlo e implementarlo. Se est hablando de la

    Programacin Orientada a Objetos (POO).

    La POO tiene sin duda muchas de sus bases en la programacin estructurada, la principal

    diferencia entre estos dos paradigmas radica en que, en la programacin estructurada la

    atencin principal del programa (y del programador) est en la secuencia de las

    instrucciones, mientras que en la POO la atencin principal est en las partes (objetos)

    que la conforman, cmo interactan y las operaciones que se pueden hacer sobre los

    mencionados objetos. Para tener un panorama ms claro sobre lo explicado se sugiere al

    lector imaginar un archivo electrnico cualquiera. En trminos de la POO las acciones que

    se aplican sobre este objeto pueden ser imprimir, borrar, renombrar, escribir ms letras,

    entre otros. Aunque se piense que si se compara el cdigo generado para las mismas

    acciones en programacin estructurada y POO sea igual, no lo es; la principal diferencia

    estriba en que para la POO estas operaciones (mtodos) conforman al objeto en s, son

    parte de l y en la programacin estructurada son funciones aisladas que no tienen

    vnculo alguno, ms que desde donde son llamadas.

    A modo de lista, se presentan los siguientes puntos como principales diferencias entre

    ambos paradigmas:

    La POO se considera la evolucin de la programacin estructurada en cuanto a la

    atencin de problemas complejos y cambiantes.

  • 8

    La POO se basa en lenguajes que soportan descripcin y escritura de tipos de

    dato complejos (no slo primitivos) y las operaciones que se pueden efectuar

    sobre ellos: la clase.

    La POO incorpora niveles profundos de abstraccin que permiten utilizar (entender

    y aplicar) conceptos como el polimorfismo, la herencia, la sobrecarga, entre otros.

    Los creadores de la programacin estructurada encontraron solucin al problema

    presentado por sta (no dar el ancho ante la complejidad de los problemas a resolver) y

    fue el seguimiento de rigurosos mtodos de trabajo al utilizar la programacin

    estructurada, pero pocos fueron quienes aceptaron trabajar bajo tal presin.

    Sin embargo los problemas no son inherentes a la programacin estructurada, slo es

    mala aplicacin de sus conceptos a la resolucin de problemas, se listan a continuacin

    una serie de malas prcticas sobre la programacin estructurada:

    No se sigue completamente la forma en que trabaja el cerebro del ser humano, ya

    que ste capta la realidad en base a objetos y sus propiedades (atributos) y las

    cosas que puede hacer o que se hacen sobre l (mtodo).

    Dificultad para extender los programas existentes a las nuevas necesidades

    No se centra el modelo en el mantenimiento, se centra en la generacin de

    soluciones repetitivas para los mismos problemas.

    Las entidades funcionales no se sincronizan o lo hacen de manera difcil y

    tortuosa.

    Muchos lenguajes de programacin que se dicen orientados a objetos aun aceptan gran

    parte del paradigma de la programacin estructurada, dando pie a hacer una

    programacin mezclada y llevando lo peor de ambos mundos, se recomienda evitar esto.

    Actividad 2. Diferencias entre Programacin estructurada y POO

    Durante esta actividad reflexionars acerca de las diferencias existentes entre anlisis,

    programacin estructurada y programacin orientada a objetos tomando en cuenta los

    temas vistos y los comentarios de los compaeros(as) del grupo.

    Realiza lo siguiente:

    1. Previo a tu ingreso al foro, identifica las diferencias entre anlisis, programacin

    estructurada y programacin orientada a objetos.

    2. Ingresa al foro correspondiente a esta actividad y genera una nueva entrada en

    la que comentes las diferencias identificadas.

    3. Contribuye con algn comentario a por lo menos dos compaeros(as) sobre su

    discernimiento del tema.

    4. Con base en las aportaciones de tus compaeros(as), reelabora las diferencias

  • 9

    entre, la programacin estructurada y de la programacin Orientada a Objetos y

    publcalas como conclusin del foro.

    Actividad 3. Caractersticas de JAVA

    Esta actividad tiene como finalidad que a partir de un ejercicio colaborativo se

    identifiquen las caractersticas de JAVA. Para iniciar, realiza lo siguiente:

    1. Investiga respecto a las caractersticas y aplicaciones de JAVA.

    2. Ingresa a la wiki con el nombre de esta actividad e integra tu participacin

    respecto a las caractersticas de JAVA.

    *Recuerda incluir las fuentes de consulta utilizadas.

    3. Revisa las aportaciones de tus compaeros y contribuye en la elaboracin de

    las conclusiones del tema.

    1.2. Caractersticas del lenguaje JAVA

    Hasta el momento en que se escribe el presente documento hay varias versiones que

    describen el origen de Java como proyecto y como lenguaje de programacin que van

    desde situar sus orgenes entre finales de la dcada de los ochentas y 1990 (Zukowski,

    1997) hasta mediados de la dcada de los noventas. De manera general se describe

    como un lenguaje de programacin que fue pensado para desarrollar software que se

    utilizar dentro de la electrnica de consumo (refrigeradores, lavadoras, entre otros)

    desarrollado por el Green Team de Sun Microsystems liderado por Bill Joy, y aunque la

    idea original de usarlo en electrnicos fracas, fue rescatado tiempo despus para ser

    usado como lenguaje de propsito general y esta idea le dio la principal caracterstica que

    lo hizo popular y lo sigue manteniendo en el gusto generalizado; su capacidad

    multiplataforma. Adems con APIs que dan soporte a acceso a base de datos, objetos

    remotos y modelos de componentes de objetos, internacionalizacin, impresin y

    reporteo, encriptacin, procesamiento de seales digitales y muchas otras tecnologas y

    capacidades lo posicionan tomando gran parte de la tajada sobre los lenguajes de

    programacin ms utilizados.

  • 10

    1.2.1. Generalidades de JAVA

    En una de las primeras publicaciones que hacen referencia a Java (Zukowski, 1997), Sun

    lo describe como un sencillo, orientado a objetos, distribuido, interpretado, robusto,

    seguro, de arquitectura neutral, portable, de alto rendimiento, multihilo, y dinmico

    lenguaje.

    Sus creadores reconocen que estas palabras pueden llegar a ser pretenciosas, pero el

    hecho es que, en su totalidad, se describe acertadamente el lenguaje. Para tener una

    mejor comprensin de la descripcin hecha sobre Java, se revisar a las caractersticas

    del lenguaje detrs de cada palabra.

    Sencillo. Java es un lenguaje simple. La mayora de los lenguajes de programacin

    orientados a objetos no son ni cercanamente sencillos ni fciles de utilizar o comprender,

    pero Java es un poco ms fcil que C++, que se consideraba como el lenguaje de

    programacin ms popular hasta la implementacin de Java. Java ha puesto simplicidad

    en la programacin en comparacin con C++, incorporando caractersticas medulares de

    C++ y eliminando algunas de stas que hacen de C++ un lenguaje difcil y complicado.

    Haciendo referencia a la facilidad de Java y su sencillez, se dice que es simple porque

    consta slo de tres tipos de datos primitivos: nmeros, boolean y arrays. Todo en Java en

    una clase. Por ejemplo, las cadenas son objetos verdaderos y no arrays de caracteres.

    Otros conceptos que hacen la programacin en C++ ms complicada son los punteros y

    la herencia mltiple. Java elimina los punteros y reemplaza la herencia mltiple en C++

    con una estructura nica denominada interfaz (Joyanes y Fernndez, 2001).

    La utilizacin de asignacin de memoria y recoleccin de basura automticas son otro

    aspecto que abona a la sencillez de Java sobre otros lenguajes, por ejemplo con el ya

    citado C++, donde el programador debe realizar estas tareas de forma manual, con los

    posibles errores que esto puede conllevar. Otra facilidad que proporciona Java es la

    elegancia de su sintaxis que hacen ms fcil la lectura (comprensin) y escritura de

    programas.

    Orientado a Objetos. La programacin orientada a objetos permite de una manera muy

    sencilla modelar el mundo real o los problemas que en l se presenten y necesiten ser

    resueltos mediante programas, cualquier cosa del mundo real puede ser modelada como

    un objeto. Un libro es un objeto, un automvil es un objeto e incluso un prstamo o una

    tarjeta de crdito es un objeto. Un programa en Java se denomina orientado a objetos

    debido a que la programacin en Java se centra en la creacin, manipulacin y

    construccin de objetos (Joyanes y Fernndez, 2001).

    Java es un lenguaje de programacin orientado a objetos. Lo que significa que el trabajo

    real sobre la construccin de los programas se centra en un gran porcentaje (por no decir

  • 11

    la totalidad) en los datos de la aplicacin y los mtodos que manipulan estos datos, en

    lugar de pensar estrictamente en trminos de los procedimientos. Si se est

    acostumbrado a utilizar la programacin basada en procedimientos (por ejemplo con el

    lenguaje C o BASIC), es posible que sea necesario cambiar la forma de disear los

    programas o aplicaciones cuando se utiliza Java. Una vez que se experimente lo

    poderoso que resulta este paradigma (orientado a objetos), pronto se ajustar a l.

    Cuando se trabaja con el paradigma orientado a objetos, una clase es una coleccin de

    datos y tiene adems mtodos que operan sobre esos datos. En conjunto, los datos y

    mtodos describen el estado y el comportamiento de un objeto.

    Java cuenta con un amplio conjunto de clases organizadas en paquetes, que se pueden

    utilizar al programar. Proporciona paquetes de clases para la interfaz grfica de usuario

    (java.awt), clases que se encargan de la entrada y salida (java.io), funcionalidad de

    soporte de red (java.net), entre muchos otros paquetes.

    Desde la concepcin inicial del diseo de Java se pens en hacer de este un lenguaje

    totalmente orientado a objetos desde la base, a diferencia de otros lenguajes que fueron

    adoptando los lineamientos de este paradigma en sus caractersticas, como por ejemplo

    C++. La mayora de los elementos disponibles en Java con objetos, con excepcin de los

    tipos primitivos y los tipos booleanos. Las cadenas o arrays son en realidad objetos en

    java. Una clase es la unidad bsica de compilacin y ejecucin en Java, todos los

    programas de Java con clases.

    Interpretado. Java es un lenguaje interpretado y necesita un intrprete para ejecutar

    programas. El compilador de Java genera bytecode para la Mquina Virtual de Java

    (JVM), en lugar de compilar al cdigo nativo de la mquina donde se ejecutar. El

    bytecode es independiente de la plataforma y se puede hacer uso de l en cualquier

    mquina (no necesariamente una computadora) que tenga un intrprete de Java.

    En un entorno donde el lenguaje de programacin es interpretado, la fase estndar de

    enlace casi se vera desvanecida. Si java cuenta con esta fase como un todo, es slo

    porque el proceso de cargar clases nuevas en el ambiente de ejecucin se hace

    precisamente en esta fase, que es un proceso incremental y mucho ms ligero que se

    produce en tiempo de ejecucin. Contrastando con el ciclo ms lento y complicado de

    compilar-enlazar-ejecutar de lenguajes como C o C++. Los programas Java no necesitan

    ser recompilados en una mquina destino. Se compilan en un lenguaje ensamblador para

    una mquina imaginaria, denominada mquina virtual (Joyanes y Fernndez, 2001).

    Arquitectura Neutral y Portable. Debido a que el lenguaje Java se compila en un

    formato de arquitectura propia o mejor dicho neutra llamada bytecode, un programa en

    Java puede ejecutarse en cualquier sistema, siempre y cuando ste tenga una

    implementacin de la JVM y esta es la caracterstica tal vez ms notable que tenga Java.

  • 12

    Se pueden, por ejemplo, ejecutar applets desde cualquier navegador de cualquier sistema

    operativo que cuente con una JVM y ms all todava, hacer sistemas autnomos que se

    ejecuten directamente sobre el sistema operativo. Esto es particularmente importante

    cuando se trabajar con aplicaciones distribuidas por internet o cualquier otro medio de

    distribucin donde los usuarios no pueden (deben) tener un cierto sistema operativo

    funcionando en la computadora donde se ejecutar dicha aplicacin.

    En las aplicaciones que se desarrollan hoy en da, muy probablemente se necesite tener

    la misma versin ejecutndose en un ambiente de trabajo con UNIX, Windows o Mac. Y

    ms an, con las diferentes versiones de procesadores y dispositivos (celulares, celulares

    inteligentes, consolas de video juegos, entre muchos otros) soportados por estos

    sistemas, las posibilidades se pueden volver interminables y la dificultad para mantener

    una versin de la aplicacin para cada uno de ellos crece de igual manera, interminable.

    La misma definicin de bytecode hace que Java sea multiplataforma y no tenga la

    necesidad de complicados temas al portar la aplicacin entre dispositivos como tipos de

    datos y su longitud, caractersticas y capacidades aritmticas; caso contrario, por ejemplo,

    del lenguaje C donde un tipo int puede ser de 16, 32 64 bits dependiendo de la

    plataforma de compilacin y ejecucin. Los programadores necesitan hacer un solo

    esfuerzo por terminar sus asignaciones, esto se puede lograr apegndose al slogan que

    hizo tan famoso Sun: Write Once, Run Anywhere (Escribe una vez, ejecuta donde sea).

    Dinmico y Distribuido. Java es un lenguaje dinmico. Cualquier clase construida en

    Java puede cargarse en cualquier momento dentro del ejecutor en cualquier momento.

    As, si es cargada dinmicamente puede instanciarse de igual manera. Las clases en

    Java con representadas por la palabra reservada class se puede obtener informacin en

    cualquier momento sobre ellas mediante el run-time.

    En cualquier instante de la ejecucin Java puede ampliar sus capacidades mediante el

    enlace de clases que est ubicadas en la mquina residente, en servidores remotos o

    cualquier sitio de la red (intranet/internet). Caso contrario de lenguajes como C++ que

    hacen esto al momento de la compilacin, despus ya no se puede. Se puede extender

    libremente mtodos y atributos de una clase sin afectar la ejecucin corriente, las

    capacidades descritas se encuentran dentro del API Reflections.

    Robusto. Java fue diseado para ser un lenguaje de programacin que genere

    aplicaciones robustas. Java no elimina la necesidad del aseguramiento de calidad en el

    software; de hecho es muy posible y probable tener errores al programar en Java. No

    elimina tampoco la mayora de los errores que se comenten al utilizar cualquier lenguaje

    de programacin.

    Sin embargo al ser fuertemente tipado se asegura que cada variable o mtodo que se

    utilice corresponda en realidad a lo que el programador quiso utilizar y no que se escapen

  • 13

    errores en conversin de tipos de dato, por ejemplo. Java requiere declaracin explicita de

    mtodos, cosa que no se permite en otros lenguajes, como en C. Java ha sido pensado

    en la fiabilidad, eliminando la mayora (o todas) las posibles partes de otros lenguajes de

    programacin propensas a errores, por ejemplo elimina los punteros y soporta el manejo

    de excepciones en tiempo de ejecucin para proporcionar robustez a la programacin.

    Java utiliza recoleccin de basura en tiempo de ejecucin en vez de liberacin explcita de

    memoria. En lenguajes como C++ es necesario borrar o liberar memoria una vez que el

    programa ha terminado (Joyanes y Fernndez, 2001).

    Seguro. Uno de los aspectos ms sobresalientes de Java es el de ser un lenguaje

    seguro, lo que es especialmente interesante debido a la naturaleza de la distribucin de

    aplicaciones en Java. Sin un aseguramiento el usuario no estar tranquilo de bajar y

    ejecutar cdigo en su computadora desde internet o cualquier otra fuente. Java fue

    diseado con la seguridad como punto principal y tiene disponibles muchas capas que

    gestionan la seguridad de la aplicacin que se escribe, bloqueando al programador si

    intenta distribuir cdigo malicioso escrito en lenguaje Java.

    Los programadores de Java no tienen permitido cierto tipo de acciones que se consideran

    altamente vulnerables o que el tpico caso de ataque contra un usuario comn, por

    ejemplo el acceso a memoria, desbordamiento de arreglos entre muchos otros.

    Otra capa de seguridad dentro de Java es el modelo sandbox que hace una ejecucin

    controlada de cualquier bytecode que llega a la JVM, por ejemplo si se lograr evadir la

    regla del cdigo no malicioso al momento de compilar, este modelo en su ejecucin

    controlada evitara que las repercusiones lleguen al mundo real.

    Por otro lado, otra posible solucin al aspecto de seguridad en Java es que se aade una

    firma digital al cdigo de Java, el origen del software puede establecerse con esta firma y

    utilizando criptografa se oculta esta firma para que sea inaccesible e inmodificable por

    cualquier persona. Si hay confianza en una persona especfica de alguna organizacin,

    entonces el cdigo puede ser firmado digitalmente por dicha persona, dndonos la

    seguridad que el resultado que recibimos sea de quien debe ser y no haya introduccin de

    cdigo por terceras personas ajenas a l.

    Por supuesto la seguridad no puede entenderse ni manejar como una cosa que es

    totalmente blanca o totalmente negra, deben descubrirse los matices que pueda presentar

    y verificar todas las posibles vertientes que puedan tomar los matices, as nos

    aseguraremos que todo est controlado. Ningn programa puede dar al 100% la garanta

    de la ausencia de errores, tampoco un ambiente de compilacin o interpretacin puede

    dar esta garanta. Java no se centra en la correccin de seguridad, se basa en la

    anticipacin de los posibles errores que se puedan presentar.

  • 14

    Alto Rendimiento. Java es un lenguaje interpretado, por eso no ser igual de veloz en la

    ejecucin como un lenguaje compilado como C. En versiones tempranas de Java est

    an decenas de veces ms abajo que la velocidad de ejecucin que proporciona C. Sin

    embargo con el pasar del tiempo este aspecto ha ido mejorando sobre la base del

    compilador JIT (just in time) que permite programas en Java de plataforma independiente

    se ejecuten casi tan rpido como los lenguajes convencionales compilados.

    Multihilo. Es fcil imaginar cmo funciona una aplicacin que hace mltiples cosas a la

    vez, por ejemplo en un navegador web, donde, se hace la descarga al mismo tiempo del

    texto, imgenes, videos y dems componentes de la pgina que visitamos, pero esta

    descarga se hace por separado, donde una funcin especfica se hace cargo de

    descargar las imgenes, otra el texto y as con cada uno de los compontes. Obviamente

    lo hacen al mismo tiempo, por esto se dice que es multihilo. Java es un lenguaje multihilo

    ya que soporta la ejecucin de mltiples tareas al mismo tiempo y cada uno de esos hilos

    puede soportar la ejecucin de una tarea especfica diferente. Un beneficio importante de

    esta caracterstica multihilo es el aporte que da a las aplicaciones basadas precisamente

    en esto, ya que como se mencion, incrementa el rendimiento de la aplicacin, sobre todo

    en aplicaciones basadas en interfaces grficas de usuario.

    Aunado a lo anterior y haciendo referencia a la facilidad de Java, programar multihilo en

    Java es muy fcil, ya que si se ha tratado trabajar con hilos en C o C++ se notar la

    enorme dificultad que esto representa. La clase Thread da el soporte, la facilidad y los

    mtodos para iniciar y terminar la ejecucin y hacer uso de los hilos, que a su vez se

    encuentra contenida en el nombre de espacio java.lang. La sintaxis del lenguaje Java de

    igual manera tiene soporte directo sobre la palabra reservada synchronized la cual hace

    extremadamente fcil para marcar secciones de cdigo o mtodos completos que

    necesitan ser ejecutados de uno en uno o dicho de mejor manera sincronizados.

    1.2.2. Mquina virtual de JAVA

    Qu es la JVM?

    Una Mquina Virtual de Java (JVM), es un software de proceso nativo, es decir, est

    desarrollada para una plataforma especfica que es capaz de interpretar y ejecutar un

    programa o aplicacin escrito en un cdigo binario (el ya mencionado bytecode) que se

    genera a partir del compilador de Java.

    En otras palabras, la JVM es la piedra angular del lenguaje de programacin Java. Es el

    componente que hace que Java tenga su particular y muy mencionada caracterstica

    multiplataforma, generar un cdigo compilado tan compacto y la capacidad del lenguaje

    de proteger a sus usuarios de cdigo malicioso.

  • 15

    La JVM es una mquina de computacin de tipo abstracto. Emulando a una mquina de

    componentes reales, tiene un conjunto de instrucciones y utiliza diversas reas de

    memoria asignada para ella. La implementacin del primer prototipo de la JVM, hecho por

    Sun Microsystems, emulando todo su conjunto de instrucciones fue hecho sobre un

    hardware muy especfico, lo que hoy se podra conocer como los modernos Personal

    Digital Assistant (PDA). Las versiones actuales de la JVM estn disponibles para muchas

    (casi todas) las plataformas de computacin ms populares. Debe entenderse sin

    embargo que, la JVM no asume una tecnologa especfica o particular, esto es lo que la

    vuelve multiplataforma. Adems no es de por s interpretada, y que slo pueda funcionar

    de esta manera, de hecho es capaz de generar cdigo nativo de la plataforma especfica

    e incluso aceptar como parmetro de entrada, en lugar del bytecode, cdigo objeto

    compilado, por ejemplo funciones nativas de C. De igual manera puede implementarse en

    sistemas embebidos o directamente en el procesador.

    Cmo funciona la JVM?

    La JVM no sabe nada del lenguaje de programacin Java, no es de su inters, porque un

    compilador ya se encarg antes de ese proceso, slo le interesa un formato especfico de

    archivo, el formato de archivo de clase o entendido de otra manera, el bytecode ms una

    tabla de smbolos e informacin complementaria.

    Haciendo una apologa sobre la base de la seguridad la JVM impone formatos fuertes y

    limitaciones estructurales en el bytecode (por ejemplo los apuntadores a memoria, que ya

    se han mencionado en apartados anteriores). Sin embargo, cualquier lenguaje formal, con

    la funcionalidad que se pueda expresar en trminos de un archivo de bytecode vlido,

    puede ser organizado, interpretado y ejecutado por la JVM. Atrados por la gran

    caracterstica multiplataforma que imprime la JVM al lenguaje Java, los programadores de

    otros lenguajes de programacin han recurrido a ella como vehculo de entrega

    (ejecucin) de estos lenguajes, lo que nos da a entender que su capacidad

    multiplataforma puede extender la implementacin de casi cualquier lenguaje que cumpla

    con sus reglas para ser multiplataforma.

    La funcionalidad completa, a manera de esquema se presenta en la siguiente figura:

  • 16

    Figura 1.1. Funcionalidad de la Mquina Virtual de JAVA (Zukowski, 1997).

    1.2.3. Entorno de desarrollo y configuracin

    Cuando se est inmerso dentro del mundo de desarrollo de software en Java, hay varias

    opciones sobre la manera en que se pueden generar aplicaciones. Por ejemplo podemos

    utilizar un editor de texto cualquiera (notepad) para poder capturar el cdigo fuente y

    guardarlo en el disco duro con el formato y la extensin correctos, para despus en una

    segunda parte, compilar dicho cdigo fuente y que nos arroje el bytecode a travs de la

    lnea de comandos haciendo una invocacin al compilador de Java. Obviamente se

    deber tener configurado en la estacin de trabajo la manera en que sta reconozca qu

    estamos haciendo y de dnde lo estamos llamando.

    Para cualquier (o casi cualquier) lenguaje de programacin, afortunadamente incluido

    Java, hay una serie de herramientas que facilitan enormemente el poder producir

    aplicaciones completas y slo requiriendo el esfuerzo del programador en las partes

    importantes del sistema, dejando a estas herramientas la preocupacin de las cosas

    menos importantes. Para ejemplificar lo anterior se deber entender de la siguiente

    manera:

    Quien desarrolla slo deber preocuparse por los datos que involucren a su

    aplicacin, la manera de cmo obtenerlos, procesarlo y tal vez almacenarlos,

    preocuparse por entender las reglas del negocio al cual pretende generarle dicha

    aplicacin, cmo y en qu parte afectan estas reglas para su aplicacin y sus datos,

    la mejor manera de explotar el conocimiento que genere su aplicacin y no estar

    preocupado por configurar variables de entorno, preocupado por configurar

    conexiones a bases de datos ni aspectos especficos o variables complejas de los

  • 17

    servidores de aplicaciones web, entre muchas otras cosas inherentes al sistema, no

    a la aplicacin.

    Las herramientas antes mencionadas, cuando se trabajan en conjunto como una sola

    unidad operativa, se le conoce como Entorno Integrado de Desarrollo (EID) o IDE por sus

    siglas en ingls (Integrated Development Environment), que podemos entenderlo como un

    programa de tipo informtico que conjunta al mismo tiempo varias herramientas tiles

    para la programacin de aplicaciones. El IDE puede estar enfocado a un lenguaje

    especfico o soportar una coleccin de ellos, como es usual en los IDEs modernos; por

    ejemplo el IDE ms popular de Microsoft es el Visual Studio en su versin 2010 (al

    momento de escribir este documento) y tiene soporte nativo para una variedad muy

    amplia de lenguajes soportados, e inclusive que se pueden mezclar. Cuando

    transportamos este concepto del IDE a Java, existen de igual manera varios de donde se

    puede hacer una eleccin, por ejemplo:

    Eclipse

    Borland JBuilder

    Sun Java Studio Creator

    NetBeans

    IBM WebSphere Studio Site Developer for Java

    Dreamweaver

    WebLogic Workshop

    Oracle JDeveloper

    IntelliJ Idea

    JCreator

    Nota: Todas las marcas o nombres de productos son propiedad de sus respectivos

    dueos y slo se usan a manera de ilustrar el ejemplo expuesto.

    Componentes del IDE

    Los elementos bsicos de un IDE, pero no limitado a ellos, son:

    Un editor de texto, que es el programa o parte del IDE que nos permitir crear,

    abrir o modificar el archivo contenedor del cdigo fuente del lenguaje con el que

    estemos trabajando. Puede proporcionarnos muchas ventajas sobre un editor de

    texto separado del IDE, ya que por lo general cuentan con un resaltado de sintaxis

    sobre las partes que conforman el cdigo fuente de la aplicacin que se est

    construyendo.

    Un compilador, que es el programa o parte del IDE que nos permitir traducir el

    cdigo fuente escrito dentro del editor a lenguaje mquina (bytecode en el caso de

    Java). De tal manera que el programador pueda disear y programar una

    aplicacin utilizando palabras, frases o conceptos muy cercanos al lenguaje que

    utiliza normalmente, y el compilador se encargar de traducir estas sentencias en

    instrucciones comprensibles por el procesador de la computadora.

  • 18

    Un intrprete, que es el programa o parte del IDE que nos permitir hacer la

    interpretacin del cdigo compilado (como en el caso de Java), en donde se

    toma como entrada el bytecode y el resultado es la ejecucin de las instrucciones

    de lenguaje mquina o cdigo objeto contenidas en esta estructura de clases. El

    compilador e intrprete pueden trabajar en conjunto como se explica en este

    apartado o ser procesos independientes para la ejecucin de un programa.

    Un depurador, que es el programa o parte del IDE que nos permitir probar y

    localizar errores dentro del cdigo de la aplicacin (mayormente de tipo lgico o de

    omisin) haciendo una traza de la ejecucin completa del cdigo y sealando

    dnde ser un posible error del cdigo o vulnerabilidad no considerada.

    Un constructor de interfaces grficas, que es la parte del IDE que nos facilita una

    serie de componentes nativos del lenguaje con el que trabajamos (swing en Java)

    para poder ofrecer al usuario un ambiente amigable de tipo visual, en pocas

    palabras nos permite crear interfaces grficas de usuario y complementarlas con el

    cdigo fuente de nuestra aplicacin.

    Opcionalmente la posibilidad de trabajar conectado a un servidor de control de

    versiones, que nos permitir llevar un control preciso de cada versin de cada

    archivo que comprenda nuestra aplicacin, particularmente til cuando se trabaja

    con aplicaciones de tipo empresarial que conllevan, inclusive, miles de archivos de

    cdigo fuente y al estar trabajando en grupo se vuelve indispensable esta

    funcionalidad que ofrece el IDE.

    Configuracin del IDE

    Cuando se hace la instalacin de un IDE la configuracin que trae por defecto es la

    habitual y ser suficiente para poder comenzar a trabajar sobre l, la personalizacin que

    se haga de las distintas herramientas con las que cuenta depender del gusto de cada

    programador. Las posibles configuraciones que se hacen sobre el IDE van desde cosas

    tan simples como el tipo de letra y su tamao para mostrar el cdigo fuente, hasta

    opciones muy avanzadas donde consumimos servicios web de determinado sitio de

    internet.

    Otra posible opcin de configuracin interesante sobre cada proyecto que se maneja en el

    IDE es de qu parte toma las clases base (independientes a las que proporciona Java) y

    cmo ser la salida de la aplicacin (jar, jar compimido, entre otros).

  • 19

    1.2.4. Tipos de datos soportados en JAVA

    Tipo de dato Tamao en bits Rango de valores Descripcin

    Nmeros enteros

    Byte 8-bit complemento

    a 2 -128 a 127 Entero de un byte

    Short 16-bit

    complemento a 2 -32,768 a 32,767 Entero corto

    Int 32-bit

    complemento a 2

    -2,147,483,648 a

    2,147,483,647 Entero

    Long 64-bit

    complemento a 2

    -

    9,223,372,036,854,775,808L

    a

    9,223,372,036,854,775,807L

    Entero largo

    Nmeros reales

    Float 32-bit IEEE 754 +/- 3.4E+38F Coma flotante con

    precisin simple

    Doubl 64-bit IEEE 754 +/- 1.8E+308 Coma flotante con

    precisin doble

    Otros tipos

    Char 16-bit Carcter Conjunto de caracteres

    Unicode ISO

    Un solo carcter

    Booleano true o false Verdadero o falo Un valor booleano

    String Variable Conjunto de caracteres Cadena de

    caracteres.

    La manera de identificar qu tipo de dato utilizar es analizar qu datos almacenar esa

    variable para definir su tipo de datos en base al rango de valores y descripcin dados en

    la tabla anterior.

    Para utilizar un dato debemos colocar al inicio el tipo de dato que queremos, seguido el

    nombre que tendr ese dato y un punto y coma si no se quiere dar un valor inicial, pero si

    se va a dar un valor colocamos una asignacin con un igual y el valor.

    Ejemplo de utilizacin

    public class DataTypes

    {

    public static void main(String[] args)

    {

    int x; // un dato declarado pero sin valor inicial.

    boolean isReal=true; // Los nombres son sensibles a

  • 20

    // maysculas y minsculas,

    // deben empezar por una letra y

    // pueden contener nmeros,_,$

    byte a = 121; // Deben ser inferiores a 126

    short b = -10000; // Deben ser inferiores a 25000

    int c = 100000; // Deben ser inferiores a 2100 mill.

    long d = 999999999999L; // Deben poner L al final

    float e = 234.99F; // Deben ser < 3E38; F al final

    double f = 55E100;

    char charValue= '4'; // char '4' no es el entero 4

    //Las cadenas (strings) son objetos, no primitivos.

    //Ejemplo:

    String institucion = esad;

    }

    }

    Actividad 4. Tipos de datos

    Durante esta actividad identificars la aplicacin de los diferentes tipos de datos

    soportados por JAVA, en relacin con diferentes datos programables.

    1. En un archivo de texto, copia la Tabla 1 y analiza los datos que incluye.

    2. Identifica el tipo de datos que se requieren para programar como variable cada

    dato brindado.

    3. Guarda la actividad con el nombre POO_U1_A3_XXYZ, sustituye las XX por las

    dos primeras letras del primer nombre, la Y por la inicial del apellido paterno y la Z

    por la inicial del apellido materno.

    4. Enva el archivo a tu Facilitador(a) mediante la seccin Tareas para recibir

    retroalimentacin.

    Tabla 1

    Datos de

    una casa

    #_pisos #_cuartos #_ventanas #_baos Fondo

    Tipo

    Datos de #_puertas #_cilindros #_hp colorCarroceria #_placas

  • 21

    un auto

    Tipo

    Datos de

    una

    factura

    #_folio total nombreCliente nombreEmpresa Iva

    Tipo

    Datos de

    un

    zapato

    punto material Tacn color #_estilo

    Tipo

    Datos de

    una

    computa

    dora

    Marca procesador Memoria pantalla discoDuro

    Tipo

    1.2.5. Operadores aritmticos, lgicos y relacionales

    En el entorno Java, la palabra operador se le llama a un smbolo especfico que realiza

    una operacin determinada entre dos o ms valores, se puede entender con el

    procedimiento habitual que utilizamos para sumar, por ejemplo:

    3+5=8

    El operador de suma (representado por el smbolo +) est actuando sobre el 3 y el 5 para

    producir el 8. Como se puede ver, la evaluacin de los operadores y sus operandos

    siempre devuelve un valor, pues es la parte que define a las operaciones.

    Pueden tener notacin prefija o posfija, que se defina en la posicin que se coloquen los

    operadores respecto a sus operandos, as en la notacin prefija los operadores irn a la

    izquierda del operando (++a) y en la notacin posfija los operadores irn a la derecha de

    los operandos (a++).

    Existen varios tipos de operadores que se puede utilizar de distinta manera y arrojando

    resultados diferentes para la realizacin de operaciones, se listan a continuacin.

    Operadores aritmticos

    Operadores Significado Asociatividad

    ++ Incremento Derecha a izquierda

    -- Decremento Derecha a izquierda

    + Unario + (smbolo positivo) Derecha a izquierda

  • 22

    - Unario (smbolo negativo) Derecha a izquierda

    * Multiplicacin Izquierda a derecha

    / Divisin Izquierda a derecha

    % Resto (mdulo) Izquierda a derecha

    + Suma Izquierda a derecha

    - Resta Izquierda a derecha

    Utilizacin de operadores aritmticos

    public class opAritmeticos

    {

    public static void main(String[] args)

    {

    int j, k, m;

    int d= 123;

    j= d--; // j vale 122 y d vale 123

    System.out.println("j= " + j);

    k= ++d; // k vale 124 y d vale 124

    System.out.println("k= " + k);

    m= --d; // m vale 123 y d vale 123

    System.out.println("m= " + m);

    m= k % j; // operador Resto para los tipos int

    // k=124 y j=122, por tanto,

    m= 2 System.out.println("m= " + m);

    j= 5; k= 3; m= j/k; // Divisin entera: m= 1

    System.out.println("m= " + m);

    System.exit(0);

    }

    }

    Operadores lgicos

    Operador Descripcin

    == Igual (comparacin de igualdad)

    > Mayor que

    < Menor que

    && Conjuncin lgica (and)

    != Distinto

    >= Mayor o igual que

  • 23

    double c= 0.0, b= 3.0;

    if (c != 0.0 && b/c > 5.0){

    System.out.println(se cumple la condicin solicitada);

    }

    Operadores de asignacin

    Se deber en primer trmino, hacer la distincin entre la accin de asignacin y el

    operador de comparacin (igualdad), aunque aparentemente al inicio pueda resultar

    confuso por el parecido entre ambos, lo que distingue uno de otro es precisamente el

    concepto que cada uno de ellos representa y la forma de presentarse, as pues:

    El operador = no es lo mismo que el operador ==

    El operador bsico al utilizar la asignacin es =, que se utiliza para asignar un valor a

    otro. Como sigue:

    int contador = 0;

    Iniciando la variable contador con un valor de 0.

    Adems de las facilidades ya descritas que nos proporciona el lenguaje Java, proporciona

    una forma abreviada de representar este tipo de operadores, con la finalidad de agilizar la

    escritura para los programadores. Se describen en la siguiente tabla:

    Operador Uso Equivalente a

    += a += b a = a + b

    -= a -= b a = a b

    *= a *= b a = a * b

    /= a /= b a = a / b

    %= a %= b a = a % b

    &= a &= b a = a & b

    Operadores de bit

    Dan la posibilidad de manipular los bits de los datos, especialmente el desplazamiento.

    Operador Uso Operacin

    >> a >> b Desplaza los bits de a a la

    derecha b veces

    > a >>> b Desplaza los bits de a a la

    derecha b veces

    (omitiendo el signo)

  • 24

    La funcin especfica de este tipo de operadores es desplazar los bits del operando

    ubicado a la izquierda de la expresin el nmero de veces que indique el operador de la

    derecha. La direccin del operador indica hacia donde corrern los bits. La siguiente

    sentencia nos da a entender bien el concepto que se trata de implementar, al desplazar

    los bits del entero 25 a la derecha de su posicin:

    25 >> 2

    El nmero entero 25 est representado por el nmero 11001 en notacin binaria, al

    aplicarle el operador de desplazamiento el nmero 11001 ahora se convertir en 110 o el

    nmero entero 6. El lector debe notar que los bits que se desplazan a la derecha se

    pierden al efectuar esta operacin.

    Precedencia de operadores

    Java asigna (como se hace en las operaciones matemticas normales) una importancia

    muy alta a la precedencia de los operadores. En la siguiente tabla se lista esta

    precedencia y entre ms alta sea su posicin, ms importancia tendr:

    Operadores Representacin

    Operadores posfijos [], (), a++, a--

    Operadores unario ++a, --a, +a, -a, ~, !

    Creacin o conversin new(tipo) a

    Multiplicacin *, /, %

    Suma +, -

    Desplazamiento

  • 25

    Actividad 5. Operadores

    Durante esta actividad realizars un ejercicio donde recuperes lo que has aprendido

    acerca de los operadores soportados por JAVA. Realiza lo siguiente:

    1. En un archivo de texto, copia las operaciones dadas en la Tabla 2.

    2. Completa los datos que se solicitan en las columnas vacas. Para ello, identifica

    los operadores encontrados en cada operacin, su tipo de operador y el resultado

    de dicha operacin.

    3. Guarda la actividad con el nombre POO_U1_A4_XXYZ, sustituye las XX por las

    dos primeras letras del primer nombre, la Y por la inicial del apellido paterno y la Z

    por la inicial del apellido materno.

    4. Enva el archivo a tu Facilitador(a) para recibir retroalimentacin.

    Tabla 2

    # Operacin

    Operadores

    encontrados

    Tipo de

    operadores Resultado

    1 (3 + (2 *3) -12) / 3

    2

    P: Verdadero

    Q: Falso

    P y Q

    3 10> 5 >6

    4 (((200 +305)/56)*30)

  • 26

    public class EjamploCast {

    public static void main(String[] args) {

    int di=33;

    int dv=5;

    int c=di/dv;

    System.out.print(c+ "\n");

    }

    }

    Como vemos, el resultado se trunc hasta el valor entero.

    Pero si en el resultado es importante tomar en cuenta tambin los decimales para tener

    un resultado ms preciso debemos convertir el entero a flotante, eso se realiza de la

    siguiente manera.

    float c= (float) di/dv;

    Colocando el tipo de dato al que se convertir entre parntesis, ahora nuestro resultado

    mostrar los decimales que necesitamos.

    En este caso el resultado si tiene los decimales que necesitamos.

    En un ejemplo ms amplio si se tienen3 clases A, B y C que se pueden almacenar en un

    arreglo de la siguiente manera:

    Object [] array = new Object[3];

    array[0] = new A();

    array[1] = new B();

    array[2] = new C();

    Si ahora se quiere usar estos objetos, se tendr que hacer un cambio entre resultados

    que los tienes como array[i], que son Object, y no puedes llamar a mtodos especficos de

    las clases A, B y C. La forma de recuperar las clases originales es con un cast, que al

    igual que el ejemplo anterior debes colocar el tipo al que quieres convertir entre parnesis

    antes del dato que se convertir, entonces se pone el tipo A delante, entre parntesis.

  • 27

    ((A)array[0]).metodoDeA();

    Obviamente no puedes convertir cualquier tipo a cualquier tipo. Si intentas convertir

    array[0] a B, te dar error, salvo que A herede de B. Pero estos casos ms complejos los

    trataremos ms adelante.

    1.3. Organizacin de un programa

    Java guarda una enorme semejanza con C/C++ por lo que no es difcil poder entender ni

    interpretar su cdigo cuando se est familiarizado con estos lenguajes. De igual manera

    como Java sigue el paradigma de la Programacin Orientada a Objetos (POO) en cdigo

    del lenguaje se construye a partir de la escritura de clases.

    Durante esta unidad se sugiere que se realicen todos los ejemplos en el entorno de

    desarrollo para que lo tengas instalado y funcional desde esta primera unidad, ya que se

    estar utilizando a lo largo de toda la materia, adems se sugiere que escribas, compiles

    y ejecutes los ejemplos de programas que se desarrollaron en esta unidad, para que se

    comprenda mejor lo visto.

    1.3.1. Estructura General

    La estructura general se describe a continuacin:

    Todo parte de una clase. Partiendo desde la concepcin ms simple de un programa en

    Java, este se puede escribir a partir de una sola clase y conforme la complejidad de la

    aplicacin vaya en aumento, muy probablemente (de hecho lo es) el nmero de clases va

    a ir en aumento, se podra entender como una correlacin directa. Por definicin cada

    clase necesita un punto de entrada por donde comenzar la ejecucin del programa, y la

    clase escrita debe contenerlo como el programa, rutina o mtodo principal: main() y dentro

    de este mtodo contiene las llamadas a todas las subrutinas o dems partes de la clase o

    incluso de la aplicacin en general.

    Una estructura simple pero funcional de un programa en Java sera como sigue:

    public class inicio{

    public static void main(String[] args){

    Primer_sentencia;

    Sentecia_siguiente;

    Otra_sentencia;

    //

    Sentencia_final;

    } //cierre del mtodo main

    } // cierre de la clase

  • 28

    Al hacer la implementacin del ejemplo anterior a algo un poco ms real y palpable se

    sugiere como primer acercamiento un programa sencillo escrito en lenguaje Java que

    muestre en pantalla un mensaje de bienvenida a la programacin en Java.

    /**

    * La clase bienvenida construye un programa que

    * muestra un mensaje en pantalla

    */

    public class bienvenida {

    public static void main(String[] args) {

    System.out.println("Hola, ");

    System.out.println("bienvenido (a)");

    System.out.println("a la programacin en Java");

    }

    }

    Para comprender mejor lo que hace el programa y las partes que lo conforman se

    explicar. Bienvenida es el nombre de la clase principal y por tanto, del archivo que

    contiene el cdigo fuente (por convencin de Java, el archivo donde se guarda el cdigo

    fuente deber tener el mismo nombre de la clase principal). Como ya se ha explicado

    antes, todos los programas en Java tienen un mtodo principal de entrada conocido como

    main que a su vez contiene (encierra) un conjunto de sentencias que significan las

    instrucciones que deber ejecutar el programa, este conjunto de instrucciones o bloque de

    instrucciones en Java se indican con la utilizacin de llaves { }. En el programa contenido

    en la clase bienvenida el bloque se compone slo de tres instrucciones de impresin a

    pantalla.

    Utilizacin de comentarios. Desde el surgimiento de los lenguajes de programacin,

    junto con ellos, de igual manera naci la necesidad de hacer anotaciones sobre lo que

    hace tal instruccin, un mtodo completo o inclusive el programa entero. Esta necesidad

    se resolvi con la introduccin del soporte de comentarios (notas) dentro del mismo

    cdigo fuente que se pueden emplear de distintas formas, por ejemplo recordar para qu

    se us una variable especfica, para documentar los valores de retorno de un mtodo,

    entre muchos otros. Los comentarios que se utilizan en Java son del mismo estilo a los

    empleados en C/C++, as el compilador al comenzar a hacer su trabajo ignora por

    completo lo que est entre estos comentarios ya que no forman parte del cdigo del

    programa, slo son lneas de carcter informativo para el programador humano. Hay

    comentarios de una lnea y de varias lneas, por ejemplo:

    // Este es un comentario escrito en una sola lnea y para hacer comentarios breves y

    concisos.

    Como se puede observar el comentario comienza con un par de caracteres del tipo / y

    ntese que no se deja espacio alguna entre ellos, despus de esto se puede comenzar a

  • 29

    escribir el cuerpo del comentario de una sola lnea. Cuando hay la necesidad de hacer

    observaciones muy amplias y que una lnea no nos d el espacio suficiente se sugiere

    utilizar comentarios de varias lneas, por ejemplo;

    /*

    Este es un comentario muy amplio y se puede hacer con la utilizacin de varias lneas sin

    perder la continuidad de la idea e indicndole al compilador que ignore por completo todas

    las lneas que lo comprenden.

    */

    De igual forma que en los comentarios de una sola lnea, los comentarios multilnea

    comienzan con el par de caracteres /* y terminan con el par de caracteres */.

    Adems en Java existe un tercer tipo de comentario que se le conoce como comentario

    de documentacin y este tipo la funcin que tienes es que le indica al programa

    generador de documentacin que lo incluya a l e ignore de los dems, por ejemplo:

    /** Comentario de documentacin del programa */

    El lector debe notar que la forma de comenzar el comentario es ligeramente diferente al

    comentario multilnea, ya que ahora se incluye un asterisco ms, para quedar como /**.

    La forma de terminarlo es la misma.

    Como sugerencia sobre los comentarios se debe hacer notar que, la necesidad de escribir

    comentarios es para la aclaracin de ciertas partes del cdigo que no estn muy claras,

    por tanto si se exagera en el nmero de comentarios se entender que el cdigo no es

    claro y se deber considerar la necesidad de reescribirlo para hacerlo comprensible.

    Identificadores

    Se entender al identificador como aquella palabra o nombre que el programador le

    asigna a sus propias variables, mtodos e inclusive nombres de clases y tiene un mbito

    de aplicacin e injerencia slo dentro del cdigo fuente, escrito por el programador

    humano porque una vez que pasa por el proceso de compilacin, el compilador genera

    sus propios identificadores ms acorde y ms ptimos para su propia interpretacin

    dentro del bytecode. Como regla general del lenguaje Java se debe definir un identificador

    antes de ser utilizado. Siguiendo las reglas que Java establece para la creacin de

    identificadores se deber apegar a lo siguiente:

    Un identificador comienza por una letra o utilizando el carcter de guin bajo (_) e

    inclusive utilizando el smbolo de pesos ($) aunque esto ltimo no se recomienda

    ya que, como se explic, el compilador lo utiliza de forma muy frecuente para

    formar sus propios identificadores.

    Se pueden utilizar a continuacin nmeros (0 al 9). Pero no dejar espacios en

    blanco, signo de interrogacin (?) o smbolo de porcentaje (%).

    Un identificador puede contener la longitud que el programador asigne

    arbitrariamente o considere necesario para dejar perfectamente claro el propsito

    del identificador y qu tipo de dato alojar.

  • 30

    En Java, al ser sensible al contexto, se distinguen los caracteres en mayscula y

    minscula. As promedio, Promedio y PROMEDIO sern locaciones de memoria

    completamente diferentes.

    No se puede repetir el mismo identificador para dos variables o cualquier otra

    parte del cdigo (nombres de mtodos o clases por ejemplo) ya que como se ha

    mencionado, los identificadores hacen precisamente eso, identifican de manera

    nica a cada parte del cdigo.

    Aunque la escritura de identificadores no est normalizada en Java, se puede

    apegar a las siguientes recomendaciones:

    Identificadores autoexplicativos, para guiar al usuario (de cualquier tipo) a

    entender la utilizacin de dicho identificador sin la necesidad de utilizar

    comentarios. Por ejemplo para alojar el resultado del promedio de n nmeros

    enteros se sugiere utilizar el identificador resultadoPromedio o resAvg.

    Si el identificador est compuesto por dos o ms palabras, stas se agrupan, la

    primera de ellas se escribe totalmente en minscula y la primera letra de las

    subsecuentes se escribe con mayscula, por ejemplo:

    resultadoPromedioCalificaciones o longitudMedida.

    Como se mencion se puede utilizar el smbolo de guin bajo (_) pero por

    convencin slo se emplea al nombrar constantes, ya que estas (igual por

    convencin) debern escribirse en letra mayscula y dificulta la lectura y

    separacin de la misma, por ejemplo: VALOR_GENERAL_ANUAL.

    1.3.2. Convenciones de la programacin

    Paquetes (Packages): El nombre de los paquetes deben ser sustantivos escritos

    con minsculas. package shipping.object

    Clases (Classes): Los nombres de las clases deben ser sustantivos, mezclando

    palabras, con la primera letra de cada palabra en mayscula (capitalizada). class

    AccountBook

    Interfaces (Interfaces): El nombre de la interfaz debe ser capitalizado como los

    nombres de las clases. interface Account

    Mtodos (Methods): Los mtodos deben ser nombrados con verbos, mezclando

    palabras, con la primera letra en minscula. Dentro del nombre del mtodo, la

    primera letra de cada palabra capitalizada. balanceAccount()

    Variables (Variables): Todas las variables deben ser combinaciones de palabras,

    con la primera letra en minscula. Las palabras son separadas por las letras

    capitales. Moderar el uso de los guiones bajos, y no usar el signo de dlares ($)

    porque tiene un significado especial dentro de las clases. currentCustomer

    Las variables deben tener significados transparentes para exponer explcitamente

    su uso al lector casual. Evitar usar simples caracteres (i, j, k) como variables

    excepto para casos temporales como ciclos.

  • 31

    Constantes (Constants): Las constantes deben nombrarse totalmente en

    maysculas, separando las palabras con guiones bajos. Las constantes tipo objeto

    pueden usar una mezcla de letras en maysculas y minsculas. HEAD_COUNT

    MAXIMUN_SIZE.

    Estructuras de Control (Control Structures): Usar Llaves ({ }) alrededor de las

    sentencias, aun cuando sean sentencias sencillas, son parte de una estructura de

    control, tales como un if-else o un ciclo for (estas estructuras se explicarn a fondo

    en la siguiente unidad).

    if ( condicin ){

    Sentencia1;

    }

    else

    {

    Sentencia2;

    }

    Espaciado (Spacing): Colocar una sentencia por lnea, y usar de dos a cuatros

    lneas vacas entre sentencias para hacer el cdigo legible. El nmero de espacios

    puede depender mucho del estndar que se use.

    Comentarios (Comments): Utilizar comentarios para explicar los segmentos de

    cdigo que no son obvios. Utilizar // para comentar una sola lnea; para comentar

    extensiones ms grandes de informacin encerrar entre los smbolos delimitadores

    /* */. Utilizar los smbolos /** */ para documentar los comentarios para proveer

    una entrada al javadoc y generar un HTML con el cdigo.

    //Un comentario de una sola lnea

    /*Comentarios que pueden abarcas ms de

    una lnea*/

    /**Un cometario para propsitos de documentacin

    *@see otra clase para ms informacin

    */

    Nota: la etiqueta @see es especial para javadoc para darle un efecto de

    tambin ver a un link que referencia una clase o un mtodo.

    1.3.3. Palabras reservadas

    Se entiende como palabra reservada a un tipo especial de identificadores que slo puede

    emplear el lenguaje Java, es decir su uso es exclusivo del lenguaje y el programador no

    puede hacer uso de ellas para nombrar mtodos, clases, variables o cualquier otra parte

    del cdigo fuente, se presentan estas palabras reservadas en la siguiente tabla:

    Abstract Do implements protected Throw

    Boolean Doubl import Public Throws

    Break Else instanceof Rest Transient

  • 32

    Byte Extends Int return True

    Case False interface Short Try

    Catch Final long Static Void

    Char Finally native strictftp Volatile

    Class Float New Super While

    const* For Null switch

    continue goto* package synchronized

    Default If private This

    Aunque la definicin del lenguaje Java toma en cuenta todas estas palabras, en su

    implementacin no se toman en cuenta todas, las que estn marcadas con un asterisco

    an no tienen utilizacin.

    Tambin existen palabras reservadas de empleo especfico para nombres de mtodos y

    stas son:

    Clone Equals finalize getClass hashCode

    Notify notifyAll toString Wait

    1.3.4. Estructura de una clase

    Apegndose estrictamente a los lineamientos que genera la documentacin de Java, una

    clase deber contener las siguientes partes:

    Package: Es el apartado que contendr la definicin de directorios o jerarqua de

    acceso a donde estar alojada la clase.

    Import: Sentencia necesaria para poder invocar todos las paquetes necesarios

    (contenidos en otros packages) para que nuestra aplicacin funcione. Por ejemplo,

    al tratar de utilizar una conexin hacia una base de datos, necesitaremos importar

    los paquetes que me proporcionan la funcionalidad necesaria. Algunos paquetes

    de Java se importan automticamente, no es necesario hacer un import explcito,

    como la librera java.lang

    Class: Definicin del nombre de clase. Se determina el nombre identificador que

    contendr la clase.

    Variables de mbito de clase: Se determinan las variables que se usarn en la

    clase para guardar datos y hacer operaciones.

    Constructor de la clase: El constructor es un tipo especial de mtodo, que se

    invoca automticamente al hacer una instancia del objeto. Sirve para inicializar los

    objetos, las variables o cualquier configuracin inicial que necesite la clase para

    funcionar. Se puede sobrecargar.

    Mtodos: Bloques de cdigo que contienen las instrucciones y declaraciones que

    ejecutar el programa.

  • 33

    Ejemplo Uso

    package javaapplication1;

    import javax.swing.*;

    public class JavaApplication1 {

    public JavaApplication1(){}

    public static void main(String[] args) {

    //instrucciones

    }

    }

    Paquete

    import si se requiere

    declaracin de la clase

    constructor

    declaracin del mtodo

    cuerpo del mtodo

    cierre del mtodo

    cierre de la clase

    1.3.5. Declaracin de objetos y constructores

    El elemento bsico de la programacin en Java es la clase. Una clase define mtodos

    (comportamiento) y atributos (forma) de un objeto.

    Esto significa que se mapea la clase hacia un objeto. Allan Kay (citado en Zukowski,

    1997) describi las 5 principales caractersticas de Smalltalk, uno de los primeros

    lenguajes orientados a objetos y uno de los lenguajes en los cuales est basado Java:

    Todo es un objeto: Considere un objeto una variable especial, no solamente

    guarda datos, sino tambin se pueden hacer solicitudes a este objeto en s. En

    teora, cualquier elemento en el problema espacial (real) (edificios, servicios,

    automviles, u otra entidad) puede ser representado como un objeto en un

    programa.

    Un programa es un conjunto de objetos, envindose mensajes entre s: para

    realizar una solicitud a un objeto es necesario enviarle un mensaje.

    Concretamente se puede pensar que un mensaje es una solicitud para llamar una

    funcin que pertenece a cierto objeto.

    Cada objeto tiene su memoria, conformada por otros objetos: en otras palabras,

    es posible generar un tipo de objeto nuevo agrupando objetos existentes. De esta

    manera se pueden armar estructuras complejas en un programa, escondidas

    detrs de la simplicidad de objetos.

    Todo objeto tiene su tipo: en este sentido tipo se refiere a clase, donde cada

    objeto es una instancia de una clase en cuestin. La caracterstica ms importante

    de una clase es el tipo de mensajes que pueden ser enviados a ella.

    Todo objeto de un mismo tipo puede recibir los mismos mensajes: esto

    implica que si un objeto es del tipo crculo, un objeto del tipo figura ser capaz de

    recibir mensajes de crculo, puesto que un crculo es una Figura. Este concepto

    forma parte medular de todo lenguaje orientado a objetos y ser explorado en una

    seccin especfica de este curso. (Zulowski, 1997: 1)

  • 34

    empleado Nombre de la clase de la cual se

    instanciar el objeto

    objetoE Nombre del objeto

    = Asignacin

    New Palabra new para hacer la separacin de

    la memoria.

    empleado() Invocacin al constructor

    =new empleado(); Cierre de la instanciacin

    Quedando la instruccin como sigue:

    empleado objetoE=new empleado();

    Constructores

    Un constructor es un mtodo especial en Java empleado para inicializar valores en

    instancias de objetos, a travs de este tipo de mtodos es posible generar diversos tipos

    de instancias para la clase en cuestin; la principal caracterstica de este tipo de mtodos

    es que llevan el mismo nombre de la clase.

    Si la clase se llama empleado su declaracin sera:

    public class empleado { }

    El constructor debera quedar como sigue

    public empleado(){}

    Y se usan para poder crear instancias de la clase (objetos).

    Autoevaluacin

    Para reforzar los conocimientos relacionados con los temas que se abordaron en esta

    primera unidad del curso, es necesario que resuelvas la autoevaluacin de la unidad.

    Recuerda que es muy importante leer cuidadosamente los planteamientos indicados y

    elegir la opcin adecuada para cada uno.

    Ingresa al aula para realizar la actividad.

  • 35

    Evidencia de aprendizaje. Programa en JAVA

    Como parte de la evaluacin, desarrollars un programa bsico para la solucin de

    operaciones matemticas simples en el que aplicars los componentes de JAVA, que

    durante la unidad has revisado. Realiza lo siguiente:

    1. En NetBeans crea un nuevo proyecto, y dentro de la clase Main crea un

    programa, donde se definan dos nmeros, se resten y se multipliquen, para

    despus mostrar el resultado en la pantalla.

    2. Consulta la Escala de evaluacin que se encuentra en la seccin Material de

    apoyo, para conocer los criterios con que ser evaluado tu trabajo.

    3. Guarda la evidencia con el nombre POO_U1_A5_XXYZ. Sustituye las XX por las

    dos primeras letras del primer nombre, la Y por la inicial del apellido paterno y la Z

    por la inicial del apellido materno.

    4. Enva la carpeta del proyecto a tu Facilitador(a) mediante la herramienta

    Portafolio de evidencias para recibir retroalimentacin.

    *Recuerda que puedes volver a enviar tu archivo tomando en cuenta las

    observaciones de tu Facilitador(a).

    Autorreflexiones

    Adems de enviar tu trabajo de la Evidencia de aprendizaje, es importante que ingreses

    al foro Preguntas de Autorreflexin y consultes las preguntas que tu Facilitador(a)

    presente, a partir de ellas, debes elaborar tu Autorreflexin en un archivo de texto llamado

    POO_U1_ATR_XXYZ. Posteriormente enva tu archivo mediante la herramienta

    Autorreflexiones.

    Cierre de la unidad

    Has concluido la primera unidad del curso. A lo largo de sta te has introducido a la

    programacin orientada a objetos y sus principales caractersticas como abstraccin,

    polimorfismo, encapsulacin y herencia; tambin has estudiado la diferencia entre la

    orientacin a objetos y la programacin estructurada. Posteriormente te involucraste en

    las caractersticas del lenguaje JAVA, sus tipos de datos soportados, tipos de operadores

    y conversin de tipos de datos. Estos temas han servido para que vayas conociendo el

    ambiente de desarrollo de programas computacionales.

  • 36

    Al final de la unidad tambin vimos la estructura de un programa, palabras reservadas,

    estructura de una clase, declaracin de objetos y constructores, cuyo propsito fue

    proporcionarte un panorama general de programar.

    Es aconsejable que revises nuevamente la unidad en caso de que los temas que se

    acaban de mencionar no te sean familiares o no los recuerdes, de no ser este tu caso, ya

    ests preparado(a) para seguir con la unidad dos, en donde continuars con la revisin de

    los mtodos y las estructuras de control. Todo ello con el fin de obtener el conocimiento

    necesario para comenzar a realizar pequeos programas computacionales al final de la

    cuarta y ltima unidad del curso de Programacin Orientada a Objetos I.

    Para saber ms

    Es importante que instales un IDE en tu computadora personal para que pases todos los

    ejemplos de cdigo y veas cmo funcionan, de esta manera podrs analizar el

    funcionamiento de los cdigos presentados.

    *Nota: se recomienda que instales NetBeans 7.0, como IDE, por su facilidad de uso, este

    puede ser descargado gratuitamente de la siguiente liga:

    http://netbeans.org/downloads/

    Fuentes de consulta

    Bibliografa bsica

    Devis, R. (1993). C++/OOP: un enfoque prctico. Madrid, Espaa: Editorial

    Paraninfo. Recuperado el 1 de marzo de 2011, de:

    http://www.a4devis.com/articulos/libros/Programaci%C3%B3n%20Orientada-a-

    Objetos%20en%20C++.pdf

    Joyanes, L. (2001). OLC - Programacin en C++. Serie Schaum, Captulo 1:

    Programacin orientada a objetos versus programacin estructurada: C++ y

    algoritmos. Espaa: McGrawHill Interamericana de Espaa SL. Recuperado el 1

    de marzo del 2011, de:

    http://www.mcgraw-hill.es/bcv/guide/capitulo/8448146433.pdf

    Joyanes, L. y Fernndez, M. (2001). Java 2: manual de programacin. Espaa:

    McGrawHill Interamericana de Espaa SL.

    Zukowski. J. (1997). The Java AWT Reference (Java Series), version 1.2. O'Reilly

    & Associates. Recuperado el 1 de marzo de 2011, de:

    http://oreilly.com/openbook/javawt/book/index.html

  • 37

    Bibliografa complementaria

    Flanagan, D. (2005). Java in a NutShell. USA: O'Reilly & Associates.