Programación JAVA Nivel Inicial
1 Explicando la Tecnología Java
Este módulo es la introducción al lenguaje Java. A lo largo del mismo describiremos los conceptos fundamentales del lenguaje de programación Java, aprenderemos de los tres grupos de productos de la tecnología Java y resumiremos sus etapas de ciclo de vida. 1.1 Objetivos Una vez finalizado este módulo, usted será capaz de: Describir los conceptos fundamentales del lenguaje de programación Java Listar los tres grupos de productos de la tecnología Java Resumir cada una de las siete etapas del ciclo de vida de un producto. Este módulo ofrece una visión general de la tecnología Java, de la programación basada en la tecnología Java y del ciclo de vida del desarrollo de una aplicación. 1.2 Verificación del Progreso Escriba un número (entre 1 y 5) en la columna "Al comenzar el módulo" para calificar su capacidad para llevar a cabo cada uno de los objetivos de este módulo. Una vez que haya finalizado este módulo, usted deberá reevaluar sus capacidades y determinar el aprendizaje adquirido para cada objetivo. El resultado de esta comparación ayudará a Sun Educational Services (SES) en la efectividad de esta capacitación. Diga a su profesor aquellos ítem con la menor calificación (un 0 o un 1 en la columna derecha), para determinar si es necesario presentar material adicional durante sus clases. Adicionalmente, esta información será reenviada al grupo de desarrollo de cursos de SES para futuras revisiones del curso.1.3 Relevancia Discusión – Las siguientes preguntas son relevantes para comprender de qué se trata la tecnología Java: ¿Cuál es su definición para las siguientes palabras? Seguridad Orientación a Objetos Independencia Dependencia Distribución ¿Cuáles son las etapas comprendidas en la construcción de alguna cosa, como por ejemplo una casa o un mueble? 1.4 Recursos Adicionales Recursos adicionales – Las siguientes referencias proporcionan información adicional sobre los temas descritos en este módulo: Java Technology: An Early History. (Online). Disponible en: http://java.sun.com/features /1999/05/birthday.html Una historia del quinto aniversario del grupo y las personas que participaron en el desarrollo de la tecnología Java. The Java Tutorial. (Online). Disponible en: http://java.sun.com/docs /books/tutorial/ Una guía práctica para programadores con cientos de ejemplos completos y en funcionamiento. 1.5 Conceptos Fundamentales del Lenguaje de Programación Java El lenguaje de programación Java se originó en 1991 como parte de un proyecto de investigación para desarrollar un lenguaje de programación, llamado "Oak", que permitiera hacer un puente para disminuir la brecha de comunicación entre varios tipos de dispositivos electrónicos, como por ejemplo reproductores de video casettes (VCR) y televisores. Específicamente, un equipo de desarrolladores de software altamente calificado (denominado el equipo Verde) quería crear un lenguaje de programación que permitiera a los dispositivos electrónicos con distintas unidades centrales de proceso (CPU) compartir los mismos beneficios del software. El concepto inicial falló después de varios intentos con las compañías fabricantes de dispositivos electrónicos. El equipo Verde fue entonces orientado a buscar otro mercado para el nuevo lenguaje de programación. Afortunadamente, comenzó la popularidad del
World Wide Web y el equipo reconoció que el lenguaje Oak era perfecto para desarrollar componentes multimedia para mejorar las páginas Web. Estas pequeñas aplicaciones, denominadas applets, constituyeron el primer uso del lenguaje Oak y los programadores usuarios de Internet adoptaron lo que se constituiría en el lenguaje de programación Java. El lenguaje de programación Java fue diseñado para ser: Orientado a objetos. Distribuido. Simple. Multihilo. Seguro. Independiente de la plataforma. 1.5.1 Orientado a Objetos El lenguaje de programación Java es un lenguaje de programación orientado a objetos (POO ) porque uno de los principales objetivos del programador en tecnologías Java es crear objetos, fragmentos de código autónomo, que puedan interactuar con otros objetos para resolver un problema. La POO comenzó con el lenguaje de programación SIMULA67 en 1967 y condujo a la creación de otros lenguajes de programación populares, como C++, en el que el lenguaje de programación Java está basado. La POO difiere de la programación procedural en que esta última hace hincapié en la secuencia de los pasos requeridos para resolver un problema, mientras que la POO hace hincapié en la creación y la interacción de los objetos.
1.5.2 Distribuido
El lenguaje de programación Java es un lenguaje distribuido porque ofrece soporte para tecnologías de redes distribuidas, tales como Remote Method Invocation (RMI),
Common Object Request Broker Architecture (CORBA), y Universal Resource Locator (URL). Adicionalmente, la capacidad de carga dinámica de clases de la tecnología Java permite que fragmentos de código sean descargados a través Internet y ejecutados sobre un computador personal. 1.5.3 Simple El lenguaje de programación Java es simple debido a que sus diseñadores quitaron algunas de las construcciones complejas y poco claras que se encuentran en otros lenguajes de programación populares. Por ejemplo, el lenguaje de programación Java no permite que los programadores puedan manipular directamente punteros a ubicaciones de memoria, lo que constituye una característica compleja de los lenguajes de programación C y C++, que frecuentemente es mal usada. En cambio, el lenguaje de programación Java sólo permite a los programadores manipular objetos usando referencias a objetos. El lenguaje de programación utiliza también una característica denominada "garbage collector" para controlar y eliminar aquellos objetos que ya no están referenciados.
Otra característica que hace simple al lenguaje de programación Java es que un tipo de datos boolean puede tener un valor true (verdadero) o false (falso), a diferencia de otros lenguajes de programación donde el valor también puede ser 1 o 0. 1.5.4 Multihilo El lenguaje de programación Java ofrece facilidades de multihilo, esto es, realizar varias tareas al mismo tiempo, tales como consultar una base de datos y desplegar una interfaz de usuario. La tecnología multihilo posibilita que un programa basado en la tecnología Java sea muy eficiente en el uso que hace de los recursos del sistema. 1.5.5 Seguro Los programas basados en la tecnología Java son seguros debido a que el lenguaje de programación Java, junto al entorno en el cual estos programas ejecutan, utilizan medidas de seguridad para proteger los programas de ataques externos. Estas medidas incluyen: Prohibir el manejo de la memoria usando punteros Prohibir a los programas distribuidos, tales como los applets, leer y escribir a un disco duro de un computador. Verificar que todos los programas basados en la tecnología Java contienen código válido.
Soportar firmas digitales. El código basado en la tecnología Java puede ser "firmado" por una compañía o por una persona de forma tal que otra persona que reciba el código pueda verificar la legitimidad del mismo. 1.5.6 Independiente de la Plataforma Los programas escritos en otros lenguajes requieren generalmente numerosas modificaciones para poder ejecutarse sobre más de un tipo de plataforma (computacional). Se entiende por plataforma computacional una combinación de una CPU y un sistema operativo. Esta dependencia de la plataforma se debe a que muchos lenguajes requieren que se escriba código específico para la plataforma subyacente. Los lenguajes de programación populares como C y C++ requieren que el programador compile y ensamble sus programas, obteniendo como resultado un programa ejecutable único para una determinada plataforma. A diferencia de C y C++, el lenguaje de programación Java es independiente de la plataforma. Programas dependientes de la plataforma: Un compilador es una aplicación que convierte un programa escrito por un programador, en un código específico para una CPU. A este código se le denomina código de máquina. Estos archivos específicos para cada plataforma (archivos binarios) se combinan frecuentemente con otros archivos, tales como bibliotecas que contienen código previamente escrito, usando un ensamblador para crear un programa dependiente de la plataforma (al que se le denomina ejecutable), y que puede ser ejecutado por un usuario final.
Programas independientes de la plataforma: Un programa basado en la tecnología Java puede ejecutar sobre varias combinaciones de CPUs y sistemas operativos diferentes, tales como: Solaris OS sobre un chip SPARC®, MacOS sobre un chip Motorola y Microsoft Windows sobre un chip Intel, generalmente con muy pocas o sin modificaciones Al igual que los programas C y C++, los programas basados en la tecnología Java también son compilados usando un compilador de la tecnología Java. Sin embargo, el formato resultante de un programa basado en la tecnología Java compilado es bytecode de la tecnología Java independiente de la plataforma, en lugar de código de máquina específico para una CPU. Luego que el bytecode es creado, es interpretado (ejecutado) por un intérprete de bytecode denominado la máquina virtual (o MV). Una máquina virtual es un programa para una plataforma específica que entiende bytecode independiente de la plataforma y que puede ejecutarlo sobre una plataforma particular. Por esta razón, el lenguaje de programación Java es frecuentemente referido como un lenguaje interpretado y los programas con tecnología Java son denominados portables o ejecutables sobre cualquier plataforma. Existen varios lenguajes interpretados, como por ejemplo Perl. Para que los programas con tecnología Java sean independientes de la plataforma, se requiere una máquina virtual, denominada la "Máquina Virtual Java", sobre cada plataforma donde los programas serán ejecutados. La Máquina Virtual Java es responsable de: interpretar el código basado en la tecnología Java, cargar las clases Java y ejecutar los programas basados en la tecnología Java. Sin embargo, un programa basado de la tecnología Java necesita más que una Máquina Virtual Java para poder ejecutar. Un programa basado en la tecnología Java necesita también un conjunto de bibliotecas de clases Java estándar para la plataforma. Las bibliotecas de clases Java son bibliotecas de código previamente escrito que pueden ser combinadas con el código que usted escriba para crear aplicaciones robustas. Conjuntamente, el software de la JVM y las bibliotecas de clase Java, son denominados el entorno de ejecución de Java (Java runtime environment JRE). Los entornos de ejecución de Java están disponibles en Sun Microsystems para muchas de las plataformas más comunes. La capacidad de los programas basados en la tecnología Java para ejecutar sobre todas las plataformas es central en el lema de Sun Microsystems "Escribir una vez, ejecutar en cualquier lugar™" ("Write Once, Run Anywhere™").
1.6 Grupos de Productos de la Tecnología Java
Sun Microsystems provee una línea completa de productos de tecnología Java que van desde kits que crean programas basados en la tecnología Java hasta entornos para emular dispositivos electrónicos y móviles (por ejemplo, teléfonos móviles).
1.6.1 Identificación de los Grupos de Productos de la Tecnología Java Las tecnologías Java, tales como la Máquina Virtual Java, están incluidas (en diferentes formas) en tres grupos de productos, cada uno de los cuales fue diseñado para satisfacer las necesidades de un mercado objetivo paricular: Java™ 2 Platform, Standard Edition (J2SE™) Permite el desarrollo de applets y aplicaciones que ejecutan en el navegador Web y sobre el escritorio del computador, respectivamente. Por ejemplo, usted puede utilizar el J2SE Software Developers Kit (SDK) para crear un programa procesador de palabras para un computador personal. Java™ 2 Platform, Enterprise Edition (J2EE™) Permite crear grandes aplicaciones empresariales distribuidas clienteservidor. Por ejemplo, se puede utilizar el J2EE SDK para crear una aplicación correspondiente al sitio web de una compañía de ventas al por menor, implementando sobre él una tienda virtual (eCommerce o Comercio Electrónico) Java™ 2 Platform, Micro Edition (J2ME™) Permite crear aplicaciones para dispositivos electrónicos con recursos restringidos. Por ejemplo, usted puede utilizar J2ME SDK para crear un juego que ejecute en un teléfono móvil. Entre otras tecnologías Java, cada edición incluye un kit de desarrollo de software (SDK) que permite a los programadores crear, compilar y ejecutar sus programas basados en la tecnología Java sobre una plataforma particular.
1.6.2 Selección del Grupo de Productos de la Tecnología Java Correctos Mientras que muchos programadores Java se especializan en el desarrollo de aplicaciones para un mercado objetivo particular, los programadores generalmente comienzan sus carreras creando aplicaciones y applets para computadores personales. Por lo tanto, el kit J2SE SDK es el grupo de productos más usado por los programadores mientras aprenden el lenguaje de programación Java™. 1.6.3 Uso de los componentes del SDK de la Plataforma Java 2, Standard Edition Sun Microsystems ha desarrollado una versión del SDK para la Plataforma Java 2, Standard Edition para: el sistema operativo Solaris OS sobre el chip SPARC (32 bits), el sistema operativo Microsoft Windows sobre el chip Intel (32 bits), el sistema operativo Linux sobre el chip Intel y el sistema operativo Solaris OS sobre el chip SPARC (64©\bits). El SDK para la Plataforma Java 2, Standard Edition incluye: El entorno de ejecución de Java: Una Máquina Virtual Java para la plataforma que usted seleccione. Las bibliotecas de clases Java para la plataforma que usted seleccione. Un compilador Java Documentación de la biblioteca de clases Java (API) (como un archivo para ser descargado en forma independiente). Utilidades adicionales, tales como programas para crear archivos JAR (Java archive) y para depurar programas basados en la tecnología Java. Ejemplos de programas basados en la tecnología Java.
Demostración Su profesor realizará demostraciones de cuatro tipos de aplicaciones basadas en la tecnología Java. Estas aplicaciones son: Una aplicación con tecnología J2SE SDK Un applet con tecnología J2SE SDK Una aplicación con tecnología J2EE SDK Una aplicación con tencología J2ME SDK Durante la demostración, usted debería poner especial atención a: Cómo se ejecutan el applet y la aplicación (si la ejecución se realiza a través del ingreso de comandos, haciendo clic sobre un ícono, etc.) Desde dónde se ejecutan el applet o la aplicación (si es dentro de un navegador Web, un dispositivo de consumidor, etc.) 1.7 Etapas del Ciclo de vida de un Producto El ciclo de vida de un producto (CVP) representa un conjunto de etapas aceptado por la industria, que usted debería seguir cuando desarrolle un nuevo producto. Hay siete etapas en el CVP. Estas etapas son: Análisis Diseño Desarrollo Prueba Implementación Mantenimiento Fin de Vida
1.7.1 Etapa de Análisis El análisis es el proceso de investigación de un problema que se quiere resolver con un producto. Entre otras tareas, el análisis consiste en: Definir claramente el problema que se quiere resolver, el nicho de Mercado al que está dirigido el producto o el sistema que desea crear. El límite de un problema es también conocido como el alcance del proyecto. Identificar los subcomponentes claves que componen el producto total.
1.7.2 Etapa de Diseño
El diseño es el proceso que consiste en aplicar los resultados obtenidos durante la etapa de análisis. La primera tarea durante la etapa de diseño consiste en desarrollar blueprints o especificaciones para los productos y componentes del sistema.
El Desarrollo consiste en la creación de los componentes propiamente dichos, a partir de las maquetas o blueprints creados durante la etapa de diseño. 1.7.4 Etapa de Prueba La Prueba consiste en el aseguramiento de que los componentes individuales, o el producto en su totalidad, satisfacen los requerimientos de la especificación creada durante la etapa de diseño. La Prueba es realizada generalmente por un equipo integrado por personas que no intervinieron en el desarrollo del producto. Este equipo asegura que el producto está probado, sin ninguna intromisión por parte del desarrollador.
1.7.5 Etapa de Implementación
1.7.6 Etapa de Mantenimiento
El Mantenimiento consiste en la reparación de los problemas que puedan surgir con el producto y liberar el producto como una nueva versión o revisión.
1.7.7 Etapa Fin de Vida Mientras que el CVP no tiene una etapa separada para el comienzo de un concepto o proyecto, tiene una etapa para el fin del proyecto. Esta etapa de fin de vida consiste en realizar todas las tareas necesarias para asegurar que los clientes y empleados están concientes de que el producto ya no será vendido, que ya no se ofrecerán servicios a los clientes y que está disponible un nuevo producto. 1.7.8 Por qué se debería seguir el CVP El CVP es una parte importante del desarrollo de un producto dado que ayuda a asegurar que los productos serán creados y entregados de forma tal que: el tiempo de salida al mercado sea reducido, el producto tenga alta calidad, y el retorno de la inversión sea maximizado Los desarrolladores que no siguen el CVP frecuentemente encuentran problemas con sus productos, ya que suelen ser costosos de reparar y hubiesen podido ser evitados.
2 El Análisis de un Problema y el Diseño de una Solución
En el transcurso de éste módulo aprenderemos a analizar un problema usando el análisis orientado a objetos, también diseñaremos las clases a partir de las cuales crearemos objetos. 2.1 Objetivos Una vez finalizado este módulo, usted debería ser capaz de: Analizar un problema usando análisis orientado a objetos.Diseñar las clases a partir de las cuales los objetos serán creados. Este módulo describe cómo analizar una situación y cómo desarrollar un diseño para una aplicación. 2.2 Verificación de Progreso Escriba un número (entre 1 y 5) en la columna "Al comenzar el módulo" para calificar su capacidad para llevar a cabo cada uno de los objetivos de este módulo. Una vez que haya finalizado este módulo, usted deberá reevaluar sus capacidades y determinar el aprendizaje adquirido para cada objetivo. El resultado de esta comparación ayudará a Sun Educational Services (SES) en la efectividad de esta capacitación. Diga a su profesor aquellos ítem con la menor calificación (un 0 o un 1 en la columna derecha), para determinar si es necesario presentar material adicional durante sus clases. Adicionalmente, esta información será reenviada al grupo de desarrollo de cursos de SES para futuras revisiones del curso. 2.3 Relevancia Discusión Las siguientes preguntas son relevantes para entender qué es el Análisis y Diseño Orientado a Objetos (OOAD): ¿Cómo decidir qué componentes son necesasrios para lo que usted debe construir, como por ejemplo una casa o un mueble? ¿Qué es una taxonomía? ¿Cómo se relacionan los elementos en una taxonomía? ¿Cuál es la diferencia entre atributos y valores? 2.4 Recursos Adicionales Recursos adicionales – Las siguientes referencias proveen información adicional sobre los temas descriptos en este módulo:
Larman, Craig. Applying UML and Patterns An Introduction to Object Oriented Analysis and Design. PrenticeHall, 1998. Este libro presenta el proceso de OOAD en detalle y sin excesiva complejidad. Eckel, Bruce. Thinking in Java. PrenticeHall, 2000. Fowler, Martin and Kendall Scott. UML Distilled. Addison Wesley Longman, Inc., 1997. 2.5 El Análisis de un Problema Usando Análisis Orientado a Objetos Caso de Estudio – El siguiente caso de estudio se presenta para ayudar a ilustrar los principios de OOAD. DirectClothing, Inc. vende camisas por catálogo. El negocio está creciendo 30 por ciento por año y por lo tanto, la empresa necesita un nuevo sistema de ingreso de órdenes de compra. Usted ha sido contratado por DirectClothing para diseñar este nuevo sistema. DirectClothing produce un catálogo de prendas de vestir cada seis meses y lo envía por correo a sus suscriptores. Cada camisa en el catálogo tiene un identificador de ítem (ID), uno o más colores (cada uno de ellos con un código de color diferente), uno o más tamaños, una descripción y un precio. DirectClothing acepta cheques y la mayoría de las tarjetas de crédito. Para ingresar una orden de compra, los clientes pueden llamar telefónicamente a DirectClothing desde un representante de servicio al cliente (RSC) para enviar las órdenes directamente o pueden enviar un formulario de orden de compra por correo o por fax a DirectClothing. Las órdenes de compra que son enviadas por correo o por fax son ingresadas por un RSC. A DirectClothing le gustaría dar la opción a los clientes de ingresar sus órdenes de compra en forma online a través de Internet. El precio de los ítem disponibles para ventas online es fijado de acuerdo al catálogo vigente. Cuando la orden de compra es ingresada en el sistema, se verifica la disponibilidad de cada ítem (disponibilidad real). Si uno o más ítem no están disponibles en ese momento (en el almacén de DirectClothing), entonces la orden de compra es colocada en estado "Pendiente" hasta que los ítem solicitados ingresen en el almacén. Después que todos los ítem solicitados estén disponibles, se verifica el pago y entonces la orden es enviada al almacén para armar el paquete correspondiente y enviarlo a la dirección del cliente. Si la orden se recibe por teléfono, el RSC informa al cliente el ID de la orden de compra, el cual puede ser utilizado para realizar el seguimiento de la orden a través del proceso. El RSC también le proporciona al cliente su número de extensión del número telefónico.
2.5.1 Identificación del Dominio del Problema Dado que el lenguaje de programación Java es un lenguaje orientado a objetos, uno de los principales objetivos del programador Java es crear objetos para construir un sistema o, más específicamente, para resolver un problema. Al alcance del problema a resolver se le denomina "dominio del problema". La mayoría de los proyectos comienzan definiendo el dominio del problema mediante el relevamiento de los requerimientos del cliente y escribiendo una declaración de alcance que describa brevemente lo que el desarrollador debe resolver. Por ejemplo, una declaración de alcance para el proyecto DirectClothing podría ser: "Crear un sistema que permita a las personas que ingresan órdenes de compra, entrar y aceptar pagos para una orden." Después que se ha determinado el alcance del proyecto, se puede comenzar a identificar los objetos que interactuarán para resolver el problema.
2.5.2 Identificación de Objetos Para validar los objetos en un dominio del problema se debe, en primer lugar, identificar las propiedades de todos los objetos: Los objetos pueden ser físicos o conceptuales Una cuenta de un cliente es un ejemplo de un objeto conceptual dado que no es algo tangible. Un cajero automático es algo que mucha gente puede tocar cada día y constituye un ejemplo de un objeto físico. Los objetos tienen atributos (características), tales como tamaño, nombre, forma etc. Por ejemplo, un objeto podría tener un atributo color. El valor de todos los atributos de un objeto se denomina frecuentemente el estado actual (o corriente) del objeto. Por ejemplo, un objeto puede tener un atributo color con el valor "rojo" y un atributo tamaño con el valor "grande". Los objetos tienen operaciones (las acciones que los objetos pueden realizar), tales como asignar un valor, desplegar una pantalla o incrementar la velocidad. Las operaciones generalmente afectan a los atributos del objeto. Al conjunto de las operaciones que un objeto realiza se conoce con el nombre de comportamiento del objeto. Por ejemplo, un objeto puede tener una operación que permita, a otros objetos, cambiar su atributo color de un estado a otro (por ejemplo, de rojo a azul). Su capacidad para reconocer los objetos de su realidad, le ayudará a definir mejor los objetos cuando aborde un problema usando análisis orientado a objetos. Por ejemplo, una puerta puede ser un objeto en el dominio del problema "construir una casa". Una puerta tiene al menos un atributo que tiene un valor (abierta o cerrada) y una operación, como por ejemplo "cerrar la puerta" o "abrir la puerta", que permite cambiar el estado de la misma.
2.5.3 Criterios adicionales para el Reconocimiento de Objetos Utilice los siguientes criterios para verificar si algo debería ser considerado un objeto en el dominio del problema: Relevancia para el dominio del problema. Existencia en forma independiente. Para determinar si el objeto es relevante para el dominio del problema, pregúntese a sí mismo lo siguiente: ¿Existe el objeto dentro de los límites del dominio del problema? ¿Se requiere el objeto para completar la solución del problema? ¿Es el objeto requerido como parte de la interacción entre el usuario y la solución? Existencia en Forma Independiente Para que un ítem sea un objeto y no un atributo de otro objeto, este debe existir en forma independiente en el contexto del dominio del problema. Los objetos pueden estar conectados y aún así tener existencia independiente. En el caso de estudio de DirectClothing, un cliente y una orden de compra están conectados pero son independientes entre sí, y por lo tanto, ambos podrían ser objetos. Durante la evaluación de los objetos potenciales, pregúntese si el objeto necesita existir en forma independiente, en lugar de ser un atributo de otro objeto.
2.5.4 Identificación de Atributos y Operaciones de Objetos Después de identificar los objetos, se deben identificar sus atributos y sus operaciones. Como se describió anteriormente, los atributos definen el estado de un objeto. Los atributos pueden ser: datos, como la identificación de un cliente y la identificación de la orden para un objeto Orden, otros objetos, un cliente podria tener como atributo un objeto Orden de Compra, en lugar de sólo su identificación. Como fue mencionado anteriormente, las operaciones establecen el comportamiento que usualmente modifica el estado de un atributo. Por ejemplo, una orden puede ser impresa, puede tener un ítem agregado o eliminado, etc. (El cliente o RSC debería iniciar estas acciones en la vida real, pero las operaciones pertenecen al objeto Orden.) Atributos que refieren a Otros Objetos
Un atributo puede ser una referencia a otro objeto. Por ejemplo, el objeto Cliente puede tener un atributo que sea un objeto Orden. Esta asociación podría, o no, ser necesaria dependiendo del problema que se está tratando de resolver.
2.5.5 Solución del Caso de Estudio
A continuación se presentan varias figuras que contienen una lista parcial de los objetos (incluyendo la mayoría de sus atributos y operaciones) para el caso de estudio
El objetivo de este ejercicio es listar los objetos, atributos y operaciones en el dominio del problema ejemplo. 2.6.1 Preparación Lea el siguiente caso de estudio y luego modele el sistema seleccionando los objetos, y sus atributos y operaciones. 2.6.2 Tarea Realizar el Análisis Su tarea es realizar un análisis orientado a objetos para una aplicación basada en la tecnología Java que realice el seguimiento de los resultados de los partidos de fútbol. El problema debe monitorizar: La lista de jugadores de cada equipo La cantidad de goles de cada jugador Los partidos jugados durante una temporada, incluyendo los equipos que jugaron entre sí, y el resultado final del partido. La aplicación debe permitir generar resultados estadísticos por equipos, jugadores y temporadas. Para completar el análisis, siga los siguientes pasos: Cree una lista de los objetos potenciales. Aplique las reglas vistas en este módulo para decidir si todos sus objetos son válidos. Cree una lista de atributos y operaciones para cada uno de sus objetos. 2.7 Ejercicio 1: Resumen Discusión – Tómese unos minutos para discutir qué experiencias, asuntos y descubrimientos ha realizado durante este ejercicio. Experiencias Interpretaciones Conclusiones Aplicaciones 2.8 Diseño de las Clases La identificación de los objetos ayuda en el diseño de las clases y en el prototipo de cada uno de los objetos en un sistema. Por ejemplo, los fabricantes de ventanas frecuentemente crean un único prototipo para cada uno de los estilos de ventanas que construyen. Estos prototipos definen un rango de colores y unos estilos que pueden ser elegidos cuando se compra una de sus ventanas. Dichos prototipos constituyen la base para la construcción de cualquier cantidad de ventanas con cualquier cantidad de combinaciones de color y estilo. En términos de diseño orientado a objetos, cada objeto (ventana) creado usando la clase (el prototipo genérico) es llamado una instancia de una clase. Más específicamente, cada objeto
creado a partir de una clase puede tener un estado específico (valores) para cada uno de sus atributos, pero tendrá los mismos atributos y operaciones. Los términos clases y objetos son usados frecuentemente en el campo de la Biología. Por ejemplo, un biólogo marino que estudia criaturas marinas se encarga de categorizar estas criaturas en una familia, o clase, de criaturas marinas. En términos de OOAD, cada animal (como por ejemplo una ballena azul) en una familia (por ejemplo ballenas) puede ser considerado una instancia del objeto de la clase ballena. Referido al caso de estudio DirectClothing: Una clase está relacionada a la definición que se realizó del objeto. Las clases son categorías descriptivas, plantillas o blueprints. Una Camisa puede ser una clase que defina todas las camisas que tienen una identificación, un tamaño, un código de color, una descripción y un precio. Los objetos son instancias únicas de las clases. La camisa polo, azul, grande, que cuesta $29.99 y que tiene la identificación 62467B es una instancia de la clase Camisa. También lo es la camisa verde, pequeña, que tiene el mismo precio y tiene la identificación 66889C, asi como la camisa estampada a $ 39.99 y con ID 09988A. Eventualmente se pueden tener dos objetos Camisa en la memoria con exactamente los mismos valores en los atributos. En el lenguaje de programación Java, los atributos son representados usando variables, y las operaciones son representadas usando métodos. Las variables constituyen el mecanismo del lenguaje de programación Java para almacenar datos. Los métodos constituyen el mecanismo del lenguaje de programación Java para ejecutar una operación.
2.8.1 El Modelado de Clases La primera fase de la etapa de diseño consiste en la organización visual, o modelado, de un programa y sus clases. Cada clase en un diseño debería estar modelada de forma tal que se incluya su nombre en la parte superior de un rectángulo, seguido por la lista de las variables de atributos (incluyendo el rango de los posibles valores) y la lista de los métodos. La siguiente figura ilustra el modelado de una clase. Los nombres de las variables y de los métodos están escritos de forma tal que comienzan con una letra en minúscula y las siguientes palabras en el nombre comienzan con mayúscula. Por ejemplo, el nombre para la operación "calcular el precio total" podría ser calcPrecioTotal() (o calcTotalPrice() en inglés). Los paréntesis al final indican que se trata de un método.
2.9 Ejercicio 2: Diseñar una Solución El objetivo de este ejercicio es modelar un objeto utilizando la notación similar a UML que se mostró en este módulo. 2.9.1 Tarea Realizar un Diseño Su tarea consiste en diseñar las clases para el sistema de seguimiento de resultados de partidos de fútbol presentado anteriormente. Recuerde: Utilice nombres de clases, atributos, variables y métodos como los descritos en este módulo. Identifique un rango de valores válidos para cada atributo (en aquellos casos que el rango sea conocido). Utilice los paréntesis para identificar los métodos.
2.10 Ejercicio 2: Resumen Discusión – Tómese unos minutos para discutir qué experiencias, asuntos y descubrimientos ha realizado durante este ejercicio. Experiencias Interpretaciones Conclusiones Aplicaciones
3 Desarrollo y Prueba de un Programa basado en la Tecnología Java
A lo largo de este módulo identificaremos los cuatro componentes de una clase en el lenguaje de programación Java. Usaremos el método main en una clase de prueba y compilaremos y ejecutaremos un programa. 3.1 Objetivos Una vez completado este módulo, usted debería ser capaz de: Identificar los cuatro componentes de una clase en el lenguaje de programación Java. Usar el método main en una clase de prueba para ejecutar desde la línea de comando un programa basado en la tecnología Java. Compilar y ejecutar un programa basado en la tecnología Java Este módulo ofrece una visión general de los componentes de una clase. También describe cómo compilar y ejecutar un programa que consiste en múltiple clases. 3.2 Verificación de Progreso Escriba un número (entre 1 y 5) en la columna "Al comenzar el módulo" para calificar su capacidad para llevar a cabo cada uno de los objetivos de este módulo. Una vez que haya finalizado este módulo, usted deberá reevaluar sus capacidades y determinar el aprendizaje adquirido para cada objetivo. El resultado de esta comparación ayudará a Sun Educational Services (SES) en la efectividad de esta capacitación. Diga a su profesor aquellos ítem con la menor calificación (un 0 o un 1 en la columna derecha), para determinar si es necesario presentar material adicional durante sus clases. Adicionalmente, esta información será reenviada al grupo de desarrollo de cursos de SES para futuras revisiones del curso.3.3 Relevancia Discusión – La siguiente pregunta es relevante para comprender de qué trata el desarrollo y prueba de clases: ¿Cómo prueba usted algo que ha construido, como por ejemplo una casa o un mueble? 3.4 Recursos Adicionales Recursos adicionales – Las siguientes referencias ofrecen información adicional sobre los temas descritos en este módulo: Farrell, Joyce. Java Programming: Comprehensive. 1999. Se trata de un excelente libro para no programadores. Explica conceptos que son pasados por alto en libros más avanzados. The Java Tutorial. [Online]. Disponible en: http://java.sun.com/docs/books/tutorial/?frontpagespotlight 3.5 Identificación de los Componentes de una Clase Las clases son los blueprints que se crean para definir los objetos de un programa. Por ejemplo, la siguiente figura ilustra algunos de los objetos que se necesitarían para el programa de ingreso de órdenes de compra para DirectClothing, Inc. Una aplicación de escritorio generalmente contiene un objeto que es el punto de comienzo del programa. A este objeto, frecuentemente se le denomina el objeto controlador, objeto principal u objeto de prueba. En la figura anterior, un objeto
OrderEntry podría interactuar con uno o más objetos Window, objetos Customer u objetos Order durante la ejecución del programa. Cada objeto en la figura es una instancia de una clase o blueprint. Por ejemplo, todos los objetos Window son instancias de la clase Window. Algunas clases, como la clase Window (usada para crear ventanas de interfaz gráfica de usuario [GUI]) son clases de propósito general y son provistas como parte de la API de la tecnología Java. Otras clases, como por ejemplo Shirt, son específicas de este programa y deben ser creadas por el programador. En este curso se describe cómo usar las clases ya existentes y cómo crear y usar clases propias. 3.5.1 La Estructura de las Clases Las clases están compuestas por código basado en la tecnología Java necesario para instanciar objetos, como por ejemplo los objetos de la clase Shirt. En este curso se divide el código en un archivo de una clase Java en cuatro secciones separadas: La declaración de la clase. La declaración e inicialización de las variables (opcional). Ls métodos. Los comentarios. El código del programa para una clase está contenido en un archivo de texto que debe seguir cierta estructura.
3.5.2 Declaración de una Clase Se debe declarar una clase por cada clase incluida en el diseño correspondiente al dominio del problema. Para cada clase del diseño, se debería escribir una declaración de clase. La sintaxis para declarar una clase es: [modificadores] class identificador_clase Los [modificadores] de la clase determinan la accesibilidad que otras clases tendrán sobre ella. Los modificadores se presentan en detalle más adelante en este curso. Los [modificadores] son opcionales en la declaración de la clase (lo cual es indicado por los corchetes) y puede tener los valores public, abstract o final. Por ahora, utilice el modificador public. La palabra clave class indica al compilador que el bloque de código es una clase. Las palabras clave son palabras que están reservadas para ciertas construcciones del lenguaje de programación Java.
El identificador_clase es el nombre que se le dará a la clase. Las reglas para nombrar una clase son las siguientes: • Los nombres de clase deberían ser sustantivos, con letras mayúsculas y minúsculas pero con la primera letra de cada palabra en mayúscula. Por ejemplo: MiClase. • Los nombres de clase deberían contener palabras completas. Se debe evitar usar acrónimos y abreviaturas (a menos que la abreviatura sea más utilizada o conocida que la forma larga, como por ejemplo JVM o UML). La declaración de clase (Línea 1) del código de la clase Shirt en el ejemplo anterior, tiene el modificador de clase public, seguido de la palabra clave class, y a continuación el nombre de clase (Shirt). Requerimientos para sus Archivo Fuente En este curso, usted desarrollará sus clases de forma tal que el código de los programas basados en la tecnología Java que escriba para cada clase se almacene en su propio archivo de texto o archivo con el código fuente. En el lenguaje de programación Java, los nombres de los archivos con el código fuente deben: coincidir con el nombre de la clase pública incluida en dicho archivo y tener extensión .java. Por ejemplo, la clase Shirt debe estar almacenada en un archivo llamado Shirt.java. La definición de clase es seguida por una llave izquierda ({) indicando el comienzo del cuerpo de la clase (cuerpo_clase), las variables atributo y los métodos que componen la clase. Las llaves {…} alrededor del cuerpo_clase definen dónde comienza y dónde finaliza la clase, respectivamente. 3.5.3 Declaración de Variables y Asignaciones La declaración de variables atributo y el bloque de asignaciones siguen a la primera llave izquierda ({). Generalmente, después es esta llave se inicializan todas las variables atributo de la clase. El código de la clase Shirt en el ejemplo, contiene cinco declaraciones de variables atributo: una para el identificador shirtID (línea 3), una para una descripción (description) (línea 4), una para el código de color (colorCode) (línea 7), una para el precio (price) (línea 9) y
una para la cantidad en stock (quantityInStock) (línea 11). 3.5.4 Comentarios Usted debería incluir comentarios en cada clase que escriba, para hacer más fácil la comprensión de lo que hace el programa. Comentar un programa es particularmente importante en programas grandes o desarrollados por grandes equipos donde muchos programadores necesitan leer el código. Los comentarios ayudan al mantenimiento de un programa cuando nuevos programadores necesitan determinar lo que hace el código. Estructura de los Comentarios Se pueden utilizar dos estilos principales de comentarios: Comentarios de una única línea La marca " //" indica al compilador que ignore todos los caracteres desde esta marca hasta el fin de la línea donde se encuentra. Por ejemplo, las líneas 3, 4 y 6 de la clase Shirt contienen comentarios de una única línea. public int shirtID = 0; // Default ID for the shirt public double price = 0.0; // Default price for all shirts // The color codes are R=Red, B=Blue, G=Green Muchos programadores también construyen sus programas usando comentarios de una única línea para comentar la primera y la última línea de cada clase o método. Por ejemplo, la clase Shirt contiene un comentario de fin de línea para indicar el fin del método display. (línea 22) } // end of display method En programas grandes, puede ser dificultoso encontrar la llave derecha que cierra una clase. Incluir un comentario en cada llave derecha de una estructura hace el código más legible y permite reparar errores más fácilmente. Comentarios tradicionales La combinación de los caracteres /* indica al compilador que ignore todo el texto hasta la marca de finalización del comentario (*/). Esta acción es realizada por el compilador, incluso a través de varias líneas. Los programadores utilizan frecuentemente los comentarios tradicionales para grandes bloques de código.
/********************* * Sección de Declaración de Variables Atributo *********************/ 3.5.5 Los métodos Los métodos de una clase se escriben a continuación de la declaración de las variables atributos. La sintaxis para los métodos es: [modificadores] tipo_retorno identificador_método ([argumentos]) { bloque_código_método } donde: Los [modificadores] representan palabras clave únicas de la tecnología Java que modifican la forma en que los métodos son accedidos. Los modificadores son opcionales (lo cual es indicado en la sintaxis por su inclusión entre corchetes). El tipo_retorno indica el tipo del valor (si existe) que el método devuelve. Si el método devuelve un valor, el tipo del mismo debe ser declarado. Los valores devueltos por un método pueden ser usados por el método que lo llama. Cualquier método puede devolver a lo sumo un valor. Si el método no devuelve ningún valor, se utiliza la palabra void en el lugar de tipo_retorno. El identificador_método es el nombre del método. Los [argumentos] representan una lista de variables cuyos valores son pasados al método para ser usados por él. Los argumentos son opcionales (indicado con su inclusión entre corchetes) dado que no se requiere que el método acepte argumentos. Notar que los paréntesis curvos no son opcionales. Un método que no acepta argumentos se declara incluyendo solamente el paréntesis curvo que abre y el que cierra. El bloque_código_método es la secuencia de sentencias que el método realiza. Una gran variedad de tareas pueden ser realizadas en el bloque de código, o cuerpo, del método. La clase Shirt contiene un método, el método displayShirtInformation (líneas 14 a 22), el cual despliega los valores de los atributos de una camisa.
public void displayShirtInformation() { System.out.println("Shirt ID: " + shirtID); System.out.println("Shirt description:" + description); System.out.println("Color Code: " + colorCode); System.out.println("Shirt price: " + price); System.out.println("Quantity in stock: " + quantityInStock); } // end of display method 3.6 Creación y Uso de una Clase de Prueba La mayoría de las clases que se crearán en este curso no pueden ser usadas (ejecutadas y probadas) por sí mismas. Sin embargo, se puede crear una clase que cree un objeto de dicha clase y ejecutar esta nueva clase para realizar la prueba. Durante este curso, usted utilizará una clase principal, o de prueba, para probar cada una de sus clases. El siguiente código es un ejemplo de una clase de prueba para la clase Shirt. A cada clase de prueba en este curso se le debería dar un nombre de forma tal que pueda ser reconocida como una clase de prueba para una clase particular. Específicamente, cada nombre de clase de prueba debería consistir del nombre de la clase que se desea probar, seguido por la palabra "Test". Por ejemplo, el nombre de la clase de prueba para la clase Shirt se debería llamar "ShirtTest". Las clases de prueba realizan dos tareas diferentes: Ofrecer un punto de comienzo, llamado el método main, para los programas. Crear un objeto de la clase y probar sus métodos.
3.6.1 El Método main El método main es un método especial que la Máquina Virtual de Java reconoce como el punto de comienzo de cualquier programa basado en la tecnología Java que se ejecuta desde la línea de comando o desde un "prompt". Cualquier programa que se desee ejecutar desde la línea de comando o desde un prompt debe tener un método main. La sintaxis para el método main es: public static void main (String args[]) El método main tiene la misma sintaxis que todos los métodos, la cual se describió anteriormente. Específicamente: El método main contiene dos modificadores requeridos: public y static El método main no devuelve ningún valor, por lo que el tipo de retorno es void. El método main tiene como identificador de método (nombre) a "main" El método main acepta cero o más objetos de tipo String (String args[]). Esta sintaxis le permite ingresar los valores a ser usados por su programa desde la línea de comandos durante la ejecución. 3.6.2 Compilación y Ejecución (Prueba) de un Programa Usted ha visto una clase básica de nombre Shirt basada en la tecnología Java y una clase de prueba con nombre ShirtTest. Estas dos clases conjuntamente, constituyen su primer programa basado en la tecnología Java. A continuación usted compilará y ejecutará (probará) su programa.
3.6.3 Compilar un Programa La compilación convierte los archivos con código fuente de las clases en bytecode, para que pueda ser ejecutado por una Máquina Virtual Java. Recuerde las reglas para el nombramiento de los archivos fuente Java. Si un archivo fuente contiene una clase pública, el archivo fuente debe tener el mismo nombre de la clase pública y extensión .java. Por ejemplo, la clase Shirt debe estar almacenada en un archivo con nombre Shirt.java. Para compilar los archivos de código fuente Shirt y ShirtTest, usted podría: Ir al directorio donde están almacenados los archivos con el código fuente. Ingresar el siguiente comando para cada archivo .java que quiera compilar: javac filename Por ejemplo: javac Shirt.java Luego de que la compilación haya finalizado, y asumiendo que no se produjeron errores de compilación, en ese directorio deberá haber un nuevo archivo con el nombre classname.class por cada archivo con código fuente que se haya compilado. Si se compiló una clase que referencia otros objetos, las clases correspondientes a estos objetos también serán compiladas (si no habían sido compiladas previamente). Por ejemplo, si se compila la clase ShirtTest.java (la cual referencia un objeto Shirt), se compilará también la clase Shirt.java y se generarán los archivos ShirtTest.class y Shirt.class 3.6.4 Ejecutar (Probar) un Programa
Después de compilar exitosamente los archivos con código fuente, se los puede ejecutar y probar usando la Máquina Virtual Java. Para ejecutar y probar el programa, se deben seguir los siguientes pasos: Vaya al directorio donde están almacenados los archivos de las clases Ingrese el siguiente comando para el archivo de la clase que contiene el método main: java nombreClase Por ejemplo: java ShirtTest Este comando ejecuta la clase ShirtTest. Como se mencionó previamente, la clase ShirtTest crea una instancia del objeto Shirt, usando la clase Shirt. Todos los objetos Shirt tienen un método, el método display, el cual despliega los valores de las variables atributo, por ejemplo: Shirt ID: 0 Shirt description:description required Color Code: U Shirt price: 0.0 Quantity in stock: 0 Sugerencias para la Depuración La mayoría de la veces, se tendrá al menos un error en el código. El término empleado para referir a la reparación de errores (o bugs) es depuración. Las siguientes son algunas sugerencias para llevar a cabo la depuración de un programa: Los mensajes de error indican el número de línea donde ocurre el error. Sin embargo, este número no necesariamente corresponde a la línea donde se encuentra el error, por lo que se deberían verificar las líneas de código anteriores y posteriores al número de línea que es desplegado. Asegúrese que existe un signo de punto y coma al final de cada sentencia. Asegúrese que hay una cantidad par de llaves: una llave derecha por cada llave izquierda. Asegúrese que utilizó en el código un modelo de sangrías como el visto en el este curso. De todas formas, los programas ejecutarán sin importar el tipo de sangría utilizado, pero lo harán más legible y fácil de depurar. También le posibilitará evitar errores mientras esté escribiéndolos. 3.7 Ejercicio: Escribir, Compilar y Probar un Programa Básico El objetivo de este ejercicio es familiarizarse con los pasos necesarios para escribir (o modificar), compilar y probar (ejecutar) sus programas basados en la tecnología Java. 3.7.1 Tarea Compilar y Ejecutar un Programa basado en la Tecnología Java En esta tarea, usted compilará y ejecutará su primer programa basado en la tecnología Java. Siga los siguientes pasos para compilar y ejecutar el programa ShirtTest:
Vaya al directorio getstarted. Abra un editor de texto e ingrese el código, siguiendo la sintaxis de la tecnología Java, para la clase Shirt presentada anteriormente en este módulo (el código fuente del programa). Guarde y cierre el archivo. Abra un editor de texto e ingrese el código fuente de la clase ShirtTest mostrado anteriormente en este módulo. Guarde y cierre el archivo. Abra una ventana de comandos. Navegue hasta el directorio donde se encuentran los archivos correspondientes a este módulo. Ingrese el siguiente comando para compilar el programa y generar un archivo bytecode ejecutable. javac Shirt.java De esta forma, se creará el archivo Shirt.class. Ingrese el siguiente comando para compilar el programa y generar un archivo bytecode ejecutable. javac ShirtTest.java El archivo creado será ShirtTest.class. Cuando reaparezca el símbolo de prompt, ingrese el siguiente comando para ejecutar el programa: java ShirtTest Abra nuevamente el archivo Shirt.java. Cambie el valor de la variable price a 14.99 y el shirtID a 112244. Guarde y cierre el archivo. Compile nuevamente el archivo Shirt.java. javac Shirt.java Ejecute nuevamente el archivo ShirtTest.class.
java ShirtTest 3.7.2 Tarea Crear, Compilar y Ejecutar Otro Programa basado en la Tecnología Java En esta tarea, usted creará, compilará y ejecutará su segundo programa basado en la tecnología Java. Siga los siguientes pasos para crear una clase de nombre Quotation para desplegar un texto: Vaya al directorio getstarted. Abra un editor de texto e ingrese la siguiente clase: public class Quotation { String quote = "Welcome to Sun!"; public void display() { System.out.println(quote); } } Guarde el archivo con el nombre Quotation.java. Desde una ventana de comandos, navegue hasta el directorio donde su programa está almacenado. Ingrese el siguiente comando en la ventana de comandos para compilar el programa: javac QuotationTest.java Si ocurre un error, abra el archivo y verifique que ha copiado el programa exactamente. Si no ocurre ningún mensaje de error, ingrese el siguiente comando en la ventana de comandos para ejecutar el programa: java QuotationTest Abra nuevamente el archivo Quotation.java y cambie el texto "Welcome to Sun!" por el que prefiera. Asegúrese que sólo cambió el texto y que las comillas no se modificaron. Compile y ejecute el programa nuevamente. 3.8 Resumen del Ejercicio Discusión Tómese unos minutos para discutir qué experiencias, temas y descubrimientos se realizaron durante este ejercicio. Experiencias Interpretaciones Conclusiones
Aplicaciones
4 Declaración, Inicialización y Uso de Variables
En éste módulo identificaremos los usos de las variables, listaremos los tipos de datos del lenguaje Java. Aprenderemos acerca de la promoción y conversión de tipos de datos. 4.1 Objetivos Una vez completado este módulo, usted debería ser capaz de: * Identificar los usos de las variables y definir la sintaxis para la declaración de una variable. * Listar los ocho tipos de datos primitivos del lenguaje de programación Java. * Declarar, inicializar y usar variables y constantes de acuerdo a la guía y los estándares de codificación para el lenguaje de programación Java. * Modificar valores de variables usando operadores. * Utilizar promoción y conversión de tipos de datos. Este módulo describe cómo crear variables usando tipos de datos primitivos y cómo modificar los valores de las variables usando operadores, promoción y conversión de tipos de datos. 4.2 Verificación de Progreso Escriba un número (entre 1 y 5) en la columna "Al comenzar el módulo" para calificar su capacidad para llevar a cabo cada uno de los objetivos de este módulo. Una vez que haya finalizado este módulo, usted deberá reevaluar sus capacidades y determinar el aprendizaje adquirido para cada objetivo. El resultado de esta comparación ayudará a Sun Educational Services (SES) en la efectividad de esta capacitación. Diga a su profesor aquellos ítem con la menor calificación (un 0 o un 1 en la columna derecha), para determinar si es necesario presentar material adicional durante sus clases. Adicionalmente, esta información será reenviada al grupo de desarrollo de cursos de SES para futuras revisiones del curso.4.3 Relevancia Discusión – Las siguientes preguntas son relevantes para comprender lo que respecta a variables: * Una variable refiere a algo que puede cambiar. Las variables pueden contener un valor o un conjunto de valores. ¿Dónde ha visto variables con anterioridad? * ¿Qué tipos de datos piensa que las variables pueden contener? 4.4 Recursos Adicionales Recursos adicionales – Las siguientes referencias pueden ofrecer detalles adicionales sobre los temas discutidos en este módulo: * Farrell, Joyce. Java Programming: Comprehensive. 1999. Se trata de un excelente libro para no programadores. Explica conceptos que son pasados por alto en libros más avanzados. * The Java Tutorial. [Online]. Disponible en: http://java.sun.com/docs/books /tutorial/?frontpagespotlight 4.5 Identificación del Uso de las Variables y la Sintaxis
Las variables se utilizan para almacenar y recuperar datos en un programa. El código en el siguiente ejemplo muestra una clase Shirt que declara varias variables. Las variables atributo (variables declaradas fuera de un método y sin la palabra clave static) también se denominan variables miembros o variables de instancia (como por ejemplo price, shirtID y colorCode en la clase Shirt). Cuando un objeto es instanciado a partir una clase, estas variables contienen datos específicos de una instancia de la clase particular. Cuando un objeto es instanciado desde una clase, estas variables son denominadas variables de instancia, porque pueden contener datos específicos para un objeto que sea una instancia particular de una clase. Por ejemplo, una instancia de la clase Shirt podría tener asignado el valor 7 a la variable atributo quantityInStock, mientras que otra instancia de la clase Shirt podría tener el valor 100 asignado a la variable atributo quantityInStock. Los programas pueden tener también variables definidas dentro de los métodos. Estas variables se denominan variables locales porque están disponibles localmente dentro del método en el cual fueron declaradas. No hay variables locales declaradas en la clase Shirt. Sin embargo, si se usaran variables locales, deberían ser declaradas en el método displayShirtInformation. 4.5.1 Uso de Variables
Las variables son usadas extensamente en el lenguaje de programación Java para realizar tareas tales como: * Almacenar datos correspondientes a los atributos para un objeto instancia particular (como se ha vista con las variables price y ID). * Asignar el valor de una variable a otra. * Representar valores en una expresión matemática. * Desplegar los valores en la pantalla. Por ejemplo, la clase Shirt usa las variables price y ID para desplegar el valor del precio y el ID de una camisa (shirt). System.out.println("Shirt price: " + price); System.out.println("Shirt ID: " + shirtID); * Almacenar referencias a otros objetos. Este curso muestra varios usos de variables en las clases de tecnología Java. 4.5.2 Declaración e Inicialización de Variable La declaración e inicialización de las variables atributo siguen la misma sintaxis general. La sintaxis para la declaración e inicialización de variables atributo es: [modificadores] tipo identificador [=valor]; Las variables locales pueden ser declaradas e inicializadas en forma separada (en líneas de código diferente) o en una única línea de código. La sintaxis para la declaración de variables dentro de un método es: tipo identificador; La sintaxis para la inicialización de variables dentro de un método es: identificador = valor; La sintaxis para la declaración e inicialización de una variable dentro de un método es: tipo identificador [= valor]; donde: * Los [modificadores] representan varias palabras clave especiales de la tecnología Java, como public y private, que modifican el acceso que otro código tiene para una variable atributo. Los modificadores son opcionales (lo cual se indica en la sintaxis por los corchetes). Por ahora, todas las variables serán creadas con el modificador public. * El tipo representa al tipo de información o datos cuyos valores puede contener la variable. Algunas variables pueden contener caracteres, otras número y otras valores booleanos. Todas las variables deben pertenecer a un tipo de datos. * El identificador es el nombre que se le da a la variable.
* El valor es el valor que se le quiere asignar a la variable. Este es opcional dado que no se necesita asignar un valor a una variable en el momento de su declaración. 4.6 Tipos de Datos Primitivos Muchos de los valores en los programas de tecnología Java están almacenados como tipos de datos primitivos. Hay ocho tipos de datos primitivos provistos por el lenguaje de programación Java. * Tipos enteros: byte, short, int y long * Tipos Punto Flotante: float y double * Tipo Texto: char * Tipo Lógico: bolean 4.6.1 Tipos Primitivos Enteros En el lenguaje de programación Java hay cuatro tipos de datos primitivos enteros, identificados por las palabras clave byte, short, int y long. Los conjuntos de datos de estos tipos de datos son conjuntos de números sin parte decimal. Si se necesita almacenar la edad de una persona, por ejemplo, se podría utilizar una variable de tipo byte, dado que el tipo de datos byte puede aceptar valores en este rango. Cuando especifique un valor entero para un tipo long, coloque una L a la derecha del valor para explicitar que es un valor de tipo long. El compilador asume que los literales enteros son de tipo int a menos que se utilice una L como se explicó, y en cuyo caso indica que pertenece al tipo long. La clase Shirt contiene dos atributos de tipo int para almcenar los valores del identificador y la cantidad en stock, y se utilizan valores literales para proporcionar un valor inicial 0 (cero) por defecto para cada uno. public int shirtID = 0; // Default ID for the shirt
public int quantityInStock = 0; // Default quantity for all shirts 4.6.2 Tipos Primitivos de Punto Flotante En el lenguaje de programación Java hay dos tipos de datos para los números de punto flotante: float y double. El conjunto de valores corresponde a números con valores a la derecha del punto decimal, tales como 12.24 y 3.14159. Los literales de punto flotante, por defecto pertenecen al tipo de datos double. Para explicitar que se trata de un literal perteneciente al tipo de datos float, se debe colocar una F al final del valor numérico. La clase Shirt muestra el uso de un valor literal double especificado en el valor por defecto para la variable atributo price: public double price = 0.0; // Default price for all shirts
4.6.3 Tipos Primitivos de Texto Otro tipo de datos utilizado para almacenar caracteres, tales como una 'a', es el tipo char, en el cual cada valor tiene un tamaño de 16 bits. La clase Shirt muestra el uso de un valor literal de texto para especificar el valor por defecto para colorCode: public char colorCode = 'U'; Cuando se asigna un valor literal a una variable char, como por ejemplo t, se debe encerrar entre el símbolo comilla simple. Un ejemplo de valor literal de tipo char es 't'. Si no se utilizaran las comillas simples, el compilador no podría determinar si se trata de un valor literal de tipo char o un identificador (el nombre de una variable por ejemplo). Los valores del tipo char son representados en el computador como una secuencia de bits que corresponden a un carácter. La correspondencia entre cada una de estas secuencias y el carácter que representa queda definida por el conjunto de caracteres que cada lenguaje de programación utiliza. La clase Shirt contiene una variable de tipo primitivo de texto, char, para almacenar el valor por defecto del color. public char colorCode = 'U';
4.6.4 Tipo Primitivo Lógico Los programas de computadores frecuentemente necesitan tomar decisiones. El resultado de una decisión es un valor verdadero o falso (true o false), y puede ser almacenado en variables de tipo boolean. En una variable de tipo boolean solamente se puede almacenar: * Los literales true y false del lenguaje de programación Java. * Los resultados de una expresión que evalúe a true o false. Por ejemplo, si la variable answer es igual a 42, entonces la expresión "if (answer < 42)" evaluará al resultado false. 4.6.5 Selección de un Tipo de Datos Una práctica común para los programadores experimentados es usar los tipos int, long y double para las variables numéricas a menos que existan restricciones que exijan