P. 1
Libro I. IBM.

Libro I. IBM.

|Views: 134|Likes:
Publicado porsh3rlys

More info:

Published by: sh3rlys on Apr 24, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/28/2013

pdf

text

original

Sections

  • Volumen 1: Fundamentos de Java
  • Unidad 1: Visión General de Java
  • Objetivos del Aprendizaje
  • 1. Introducción
  • 2. Historia de Java
  • 3. Comparación entre Java y C++
  • 4. Características de Java
  • 5. La Plataforma Java
  • 6. Impacto de Java en la WWW
  • 7. Clases y Objetos
  • 8. Orientación a Objetos en Java
  • 9. Ejemplo de una Aplicación Java
  • 10. Ejemplo de Applet Java
  • Resumen
  • Unidad 1: Examen de Autoevaluación
  • Respuestas a la Unidad 1: Examen de Autoevaluación
  • 2. Tipos de Datos en Java
  • 3. Clases Envolventes
  • 4. Math Clases Colaboradoras sobre los Tipos de Datos
  • 5. Manejo de String
  • 6. Identificadores
  • 7. Declaración e Inicialización de Variables
  • Figura 2.4: Declaración e Inicialización de Variable
  • 8. Operadores en Java
  • 9. Conversión de Tipos
  • 10. Arreglos
  • 11. Estructuras de Control
  • Unidad 2: Examen de Autoevaluación
  • Respuestas a la Unidad 2: Examen de Autoevaluación
  • Unidad 3: Lab. de Operaciones, Expresiones y Control de Flujo
  • Ejercicios de Laboratorio
  • Volumen 2: Programación Orientada a Objetos
  • Unidad 1: Clases y Objetos
  • 2. Clases y Objetos
  • 3. Estructura de una Clase Java
  • 4. Variables
  • 5. Métodos
  • 6. Modificadores de Acceso
  • 7. Constructores de una Clase
  • 8. Sobrecarga de Método
  • 9. Clases Anidadas
  • 10. Argumentos de Línea de Comandos
  • 11. Ciclo de Vida de un Objeto
  • 12. Manejo de la Memoria en Java
  • 13. Enumeraciones
  • Respuestas a Unidad 1: Examen de Autoevaluación
  • Unidad 2: Laboratorio de Clases y Objetos
  • Unidad 3: Herencia
  • 2. Sintaxis para Declarar Clases Usando Herencia en Java
  • 3. Conceptos Esenciales de Herencia
  • Unidad 3: Examen de Autoevaluación
  • Respuestas a la Unidad 3: Examen de Autoevaluación
  • Unidad 4: Laboratorio de Herencia
  • Objetivos de Aprendizaje
  • 2. Clases Abstractas
  • 3. Uso de Clases Abstractas
  • 4. ¿Qué son las Interfaces?
  • 5. Usar Interfaces Como Referencias
  • 6. Heredar de una Interfaz
  • 7. Opciones de Herencia en Java
  • Unidad 5: Examen de Autoevaluación
  • Respuestas a la Unidad 5: Examen de Autoevaluación
  • Unidad 7: Paquetes
  • 2. Necesidad de los Paquetes
  • 3. Crear Paquetes en Java
  • 4. Representación del Paquete en el Sistema de Archivos
  • 5. Paquetes y Protección de Acceso
  • 6. Usar Miembros de Paquetes
  • 7. Agrupar Paquetes
  • 8. Despliegue de Paquetes
  • 9. Paquetes Incorporados en Java Usados Comúnmente
  • Unidad 7: Examen de Autoevaluación
  • Respuestas a la Unidad 7: Examen de Autoevaluación

Core Java

Código del Curso: CY420 Versión: 5.1

Guía del Estudiante

Libro 1: Core Java

IBM Training Worldwide Certified Material

Información Sobre la Publicación Esta publicación ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint 2000 para Windows. Marcas Registradas IBM ® es una marca registrada por International Business Machines Corporation. Otras compañías, productos, y nombre de servicios pueden ser marcas registradas o marcas de servicios de otros. Marcas Registradas de otras Compañías HotJava browser, Java Development Kit (JDK), Java, Java Servlet, Solaris, Enterprise Java Beans, Java Server Pages, JDK, JSP – Sun Microsystems, Microsoft MAKECAB, Windows operating system, ASP, VB, .NET, VC++, Microsoft Access, Microsoft SQL Server, Microsoft ODBC for Oracle – Microsoft Corp, WinZip – Nico Mak Computing, Inc., Time – Time Warner, JDBC – Javasoft, Oracle – Oracle Corporation, Sybase – Sybase Inc., UDB DB2 – IBM. Edición Octubre 2007 La información contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida básicamente “como es" sin ninguna garantía ya sea expresa o implícita. El uso de esta información o la implementación de cualquiera de estas técnicas es responsabilidad del comprador y dependerá de la habilidad de éste para su evaluación e integración en el ambiente operacional del comprador. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situación específica, no hay garantía de que obtener el mismo resultado o uno similar a éste en otra situación. Los compradores que intenten adaptar estas técnicas a sus propios ambientes lo hacen bajo su propio riesgo. Copyright International Business Machines Corporation, 2007. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de IBM. Instrucciones Especiales para la Impresión de este Curso: No elimine páginas en blanco que puedan aparecer al final de cada unidad o entre unidades. Estas páginas fueron insertadas intencionalmente.

.

Guía del Estudiante

Core Java

Contenido
Descripción del Curso: Core Java....................................................................iv Descripción de Unidades ................................................................................viii Volumen 1: Fundamentos de Java ....................................................................1 Unidad 1: Visión General de Java .....................................................................3
Objetivos del Aprendizaje 1. Introducción 2. Historia de Java 3. Comparación entre Java y C++ 4. Características de Java 5. La Plataforma Java 6. Impacto de Java en la WWW 7. Clases y Objetos 8. Orientación a Objetos en Java 9. Ejemplo de una Aplicación Java 10. Ejemplo de Applet Java Resumen Unidad 1: Examen de Autoevaluación Respuestas a la Unidad 1: Examen de Autoevaluación Objetivos del Aprendizaje 1. Introducción 2. Tipos de Datos en Java 3. Clases Envolventes 4. Math Clases Colaboradoras sobre los Tipos de Datos 5. Manejo de String 6. Identificadores 7. Declaración e Inicialización de Variables 8. Operadores en Java 9. Conversión de Tipos 10. Arreglos 11. Estructuras de Control Resumen Unidad 2: Examen de Autoevaluación
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

3 4 4 5 6 11 16 17 21 26 27 29 30 32 33 34 34 39 44 44 50 51 53 63 66 71 86 87
i

Unidad 2: Operadores, Expresiones y Control de Flujo................................33

Core Java

Guía del Estudiante

Respuestas a la Unidad 2: Examen de Autoevaluación Objetivos del Aprendizaje Ejercicios de Laboratorio

89 90 91

Unidad 3: Lab. de Operaciones, Expresiones y Control de Flujo.................90

Volumen 2: Programación Orientada a Objetos.............................................95 Unidad 1: Clases y Objetos..............................................................................97
Objetivos del Aprendizaje 1. Introducción 2. Clases y Objetos 3. Estructura de una Clase Java 4. Variables 5. Métodos 6. Modificadores de Acceso 7. Constructores de una Clase 8. Sobrecarga de Método 9. Clases Anidadas 10. Argumentos de Línea de Comandos 11. Ciclo de Vida de un Objeto 12. Manejo de la Memoria en Java 13. Enumeraciones Resumen Unidad 1: Examen de Autoevaluación Respuestas a Unidad 1: Examen de Autoevaluación Objetivos del Aprendizaje Ejercicios de Laboratorio Objetivos del Aprendizaje 1. Introducción 2. Sintaxis para Declarar Clases Usando Herencia en Java 3. Conceptos Esenciales de Herencia Resumen Unidad 3: Examen de Autoevaluación Respuestas a la Unidad 3: Examen de Autoevaluación Objetivos de Aprendizaje
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

97 98 98 101 103 108 113 121 124 127 130 131 136 136 138 139 141 143 144 147 148 148 152 177 178 180 181
ii

Unidad 2: Laboratorio de Clases y Objetos..................................................143

Unidad 3: Herencia .........................................................................................147

Unidad 4: Laboratorio de Herencia ...............................................................181

Guía del Estudiante

Core Java

Ejercicios de Laboratorio Objetivos de Aprendizaje 1. Introducción 2. Clases Abstractas 3. Uso de Clases Abstractas 4. ¿Qué son las Interfaces? 5. Usar Interfaces Como Referencias 6. Heredar de una Interfaz 7. Opciones de Herencia en Java Resumen Unidad 5: Examen de Autoevaluación Respuestas a la Unidad 5: Examen de Autoevaluación Objetivos de Aprendizaje Ejercicios de Laboratorio Objetivos de Aprendizaje 1. Introducción 2. Necesidad de los Paquetes 3. Crear Paquetes en Java 4. Representación del Paquete en el Sistema de Archivos 5. Paquetes y Protección de Acceso 6. Usar Miembros de Paquetes 7. Agrupar Paquetes 8. Despliegue de Paquetes 9. Paquetes Incorporados en Java Usados Comúnmente Resumen Unidad 7: Examen de Autoevaluación Respuestas a la Unidad 7: Examen de Autoevaluación

182 183 184 184 186 194 202 205 208 210 211 213 215 216 219 220 220 222 224 227 235 239 239 245 248 249 251

Unidad 5: Clases Abstractas e Interfaces.....................................................183

Unidad 6: Laboratorio de Clases Abstractas e Interfaces...........................215

Unidad 7: Paquetes.........................................................................................219

iii © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

los componentes Swing. Se ocupa de las clases y contenedores de AWT. . los flujos de caracteres. declaración de variables y su inicialización. El segundo volumen del curso se ocupa de la programación orientada a objetos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. También aprenderán sobre los paquetes incorporados comúnmente usados de Java. Los estudiantes aprenderán sobre los fundamentos de la herencia. métodos abstractos y las interfaces. El cuarto volumen del curso proporciona una descripción de las capacidades para entrada/salida. El primer volumen del curso se ocupa de los fundamentos de Java. Los estudiantes aprenderán sobre los administradores de diseño. Proporciona una descripción de los miembros de una clase Java. Los estudiantes estudiarán la clase ObjectOutputStream y la clase ObjectInputStream. el API de Java 2D y la representación en 2D. También aprenderán sobre cómo crear y usar excepciones definidas por el usuario. El quinto volumen del curso provee una descripción de las interfaces de usuario usando AWT y Swing. convenciones de nombres. la orientación a objetos en Java. Los estudiantes aprenderán sobre las características de Java. además de los archivos de acceso aleatorio. las clases lectoras y escritoras. carga de un applet. Propósito Este curso ofrece a los estudiantes un estudio del lenguaje Java. obtendrán información sobre el modelo de delegación de eventos y el manejo de eventos. las diferencias entre AWT y Swing. además de asociarlos al contenedor. dibujo y actualización de los componentes de la interfaz del usuario. del impacto de Java en la Web. Se ocupa de la arquitectura MVC y las clases Swing. Los estudiantes aprenderán cómo distinguir entre las excepciones verificadas y no verificadas. Adicionalmente. También se ocupa de la serialización de objetos. prueba de applets. métodos de dibujo y manejo de eventos. Se ocupa del ciclo de vida de un applet.Core Java Guía del Estudiante Descripción del Curso: Core Java Nombre del Curso Core Java Duración La duración del curso es de 108 horas. del uso de los métodos de clase y del manejo de la memoria en Java. Se proporciona una introducción a ciertas clases fundamentales de Java. de la interfaz serializable y de la interfaz externalizable. El sexto volumen del curso introduce a los applets. Trata de los archivos y los flujos. El tercer volumen del curso trata de las excepciones y los métodos para lanzar excepciones. de clases. iv © Copyright IBM Corp. También trata los métodos heredados por los componentes de AWT de las clases componente y contenedor. operadores y estructuras de control.

Profesionales y Gente de Negocios. mostrar documentos en un navegador web. entre otras funcionalidades de JDBC. envío y recepción de datagramas. soporte de cursores. Prerrequisitos CY410. Los estudiantes aprenderán sobre el trabajo con URLs y programación de conectores. manejo de la transacción. CY350 v © Copyright IBM Corp. El octavo volumen de este curso presenta una descripción del API de colecciones. procesamiento de múltiples conjuntos de resultados. Estudia el ciclo de vida de los hilos. localizar y cargar archivos de datos. El curso incorpora varias sesiones de laboratorios donde los estudiantes obtendrán experiencia práctica en los conceptos de Core Java. además de la comunicación entre hilos. tales como: las consideraciones de seguridad cuando se trabaja con programas Java. de los métodos y sentencias sincronizadas. . El séptimo volumen del curso contiene una introducción a multihilos y redes. Se ocupa del marco de trabajo para colecciones de Java. los Java beans y los conceptos de la internacionalización. comunicación con otros applet y restricciones de seguridad en applets. además de los pasos que implica el acceso a base de datos. Audiencia Estudiantes.Guía del Estudiante Core Java Los estudiantes aprenderán conceptos tales como: usar el API de applet. Presenta la conectividad a la base de datos en Java y las sentencias SQL usadas en los programas Java. Para finalizar se discute acerca de las características avanzadas. realizar subclases de la clase de hilo e implementar la interfaz Runnable. creación y funcionamiento. Los estudiantes aprenderán sobre procedimientos almacenados. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. de las interfaces e implementaciones de las colecciones. También se ocupa de la sincronización de hilos. clases orientadas a conexión en Java.

Describir las interfaces de colecciones. Describir el manejo de excepciones en Java. Describir los métodos para agregar componentes de UI. Describir la arquitectura MVC. Explicar los diferentes flujos de caracteres y de byte. Explicar la interfaz Serializable y la clase ObjectInputStream. Explicar cómo crear hilos desde la clase Thread y desde la interfaz Runnable. Explicar la necesidad y el uso de los constructores de una clase.Core Java Guía del Estudiante Objetivos Al completar este curso. Describir algunas clases útiles y algunos GUI en AWT. Explicar el manejo de excepciones en JDBC. Describir el concepto de sincronización. Explicar los métodos y sentencias sincronizadas. Describir cómo se realiza el manejo de la memoria en Java. Describir cómo crear jerarquías de herencia. Establecer las diferencias entre un applet y una aplicación. Describir los algoritmos polimórficos del JDK que operan en las colecciones. usted será capaz de: • Entender las características principales de Java. capturadas y manejadas. Explicar los conectores orientados a conexión y no orientados a conexión. Discutir el API de JDBC. • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Explicar los principios de orientación a objetos en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar la variable classpath y describir su uso. Exponer la clase File. vi © Copyright IBM Corp. Examinar las diferentes formas en las que las excepciones pueden ser lanzadas. Exponer los URLs y las excepciones de URL. Mencionar las ventajas del API Applet. Explicar los conceptos de hilos y multihilos. Explicar cómo implementar el mecanismo de delegación de eventos. Definir y explicar cómo implementar una interfaz. Describir las propiedades de la apariencia de Swing. Explicar los administradores de diseño definidos en Swing. Explicar cómo escoger un administrador de diseño y sus responsabilidades. Explicar las diferentes estructuras de control usadas en Java. . Discutir las excepciones y las técnicas tradicionales para el manejo de errores.

Exponer las características de seguridad cuando se trabaja con programas Java. Explicar el empaquetamiento de componentes Java. Explicar la manipulación de objetos de una clase. Exponer el API Java 2D. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java • • • • • • Explicar el uso de PreparedStatement y CallableStatement en JDBC. . Mencionar algunas de las clases de soporte de JDBC en Java. Agenda Cada unidad en este curso es de 2 horas de duración. vii © Copyright IBM Corp.

También le permite al estudiante tener una visión general de los paquetes intrínsecos de Java más usados. Expresiones y Flujo de Control Esta unidad se ocupa de los elementos fundamentales de Java: tipos de datos y variables. miembros de paquetes y cómo importar paquetes. cómo crear la herencia multi-nivel y los fundamentos del método de sobreescritura. . Finalmente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. incluyendo la historia del desarrollo de Java. Unidad 3: Herencia El principal objetivo de esta unidad es entender los aspectos básicos de la herencia. Volumen 2: Programación Orientada a Objetos Unidad 1: Clases y Objetos El concepto de una clase. Esta actividad se realiza a través de un pequeño conjunto de ejercicios. viii © Copyright IBM Corp. También proporciona una ruta de experiencia práctica acerca de los paquetes.Core Java Guía del Estudiante Descripción de Unidades Volumen 1: Fundamentos de Java Unidad 1: Visión General de Java Esta unidad introductoria proporciona una visión general de Java. llamar métodos de una clase y sobrecargar métodos de una clase. cómo utilizar el modificador súper. cómo declarar variables miembro. También se discute el uso de la palabra clave final para evitar la sobreescritura y para evitar la herencia. la protección de acceso mientras se usan los paquetes. Expresiones y Flujo de Control Esta unidad de Laboratorio permite al estudiante poner en práctica algunos de los aspectos fundamentales de Java. fundamentos básicos de la Programación Orientada a Objetos y aspectos básicos de Java. Unidad 2: Laboratorio de Clases y Objetos En esta unidad se desarrollan ejercicios de laboratorio para crear clases y objetos. Esta unidad también examina las especificaciones para el control del acceso. Unidad 2: Operadores. se ofrece una visión general sobre el recolector de basura. el CLASSPATH y su utilización. como operaciones aritméticas. métodos sobrecargados y argumentos en la línea de comandos. También cubre la plataforma de Java y su efecto en la WWW. operadores de bits y lazos en Java. métodos miembro. el ciclo de vida de un objeto y los constructores de una clase son algunos de los tópicos tratados en esta unidad. Unidad 3: Laboratorio de Operadores. diferentes tipos de operadores en Java y de la precedencia de operadores. También se discuten las conversiones de tipo y las estructuras de control en Java. la manera de acceder a las clases utilizando métodos estáticos.

en comparación con otros lenguajes de programación modernos. Esta unidad establece qué es una excepción y discute la importancia del manejo de excepciones. Unidad 6: Laboratorio de Clases Abstractas e Interfaces Esta unidad de laboratorio le ofrece parcialmente al estudiante una exposición del uso de las clases abstractas y la necesidad de usar interfaces. También explica cómo utilizar los paquetes miembro. Se examinan los tipos de excepciones. Proporciona una breve visión del manejo de excepciones en los lenguajes de programación y cómo se aplica en Java. esta unidad de Laboratorio proporciona una ruta para experimentar en forma práctica cómo manejar excepciones. el CLASSPATH y su utilización. como usar las cláusulas ix © Copyright IBM Corp. así como la cláusula finally en Java. Unidad 2: Lanzamiento y Manejo de Excepciones Esta unidad trata con los métodos de lanzamiento de excepciones. su implementación total o parcial. las declaraciones try y catch. También se discute el método mediante el cual se crean y usan las excepciones definidas por el usuario. su jerarquía en Java. capturadas y manipuladas. Unidad 7: Paquetes Los paquetes son un aspecto importante en el estudio de Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. También se discuten las interfaces. En esta unidad se define qué es un paquete. Volumen 3: Manejo de Excepciones Unidad 1: Manejo de Excepciones y Tipos de Excepciones El lenguaje Java proporciona algunos mecanismos sofisticados para el manejo de excepciones. las variables de una interfaz y cómo heredar desde una interfaz. Unidad 5: Clases Abstractas e Interfaces En esta unidad se discute acerca del modificador abstract y las clases y métodos abstractos. además de la protección de acceso mientras se usan los paquetes. métodos para manejar excepciones y las diferentes formas en que las excepciones pueden ser lanzadas. Proporciona una visión de las excepciones en tiempo de ejecución (runtime) y los diferentes métodos para el lanzamiento y propagación de excepciones.Guía del Estudiante Core Java Unidad 4: Laboratorio de Herencia Esta unidad de laboratorio permite al estudiante tener una mejor comprensión del concepto de herencia y cómo llamar a los métodos de la clase base. . Unidad 3: Laboratorio de Lanzamiento y Manejo de Excepciones Basándose en las unidades 1 y 2. el uso de interfaces y referencias. cómo importar paquetes y se explican algunos de los paquetes intrínsecos de Java más utilizados.

flujos de caracteres. flujos byte y acceso aleatorio de archivos. flujos. Menu y FileDialog. x © Copyright IBM Corp.Core Java Guía del Estudiante throw y catch aparte de dominar el uso de la cláusula throws. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 2: Laboratorio de Componentes y Contenedores AWT Este laboratorio le permite al estudiante aprender a usar varios controles que se incluyen en el AWT.(grupo de programas de ventana abstracta). Unidad 3: Serialización de Objetos La serialización de Objetos es un tópico importante en Java y esta unidad trata sobre ese tema. Unidad 3: Administradores de Diseño (Layout Managers) Esta unidad ofrece una amplia cobertura de los manejadores de diseño y su selección. la interfaz Externalizable. FileDescriptor. lectura y escritura desde y hacia archivos. También provee ejercicios para acceder a directorios y subdirectorios. a crear y manejar ventanas y a usar las clases MenuBar. Se discuten los diferentes administradores de diseño. la clase ObjectOutputStream y la clase ObjectInputStream. algunas clases útiles en AWT y algunos componentes GUI en AWT. Unidad 4: Laboratorio de Serialización de Objetos Esta unidad de laboratorio se construye sobre la base conceptual de la unidad 3 y le permite al estudiante aprender a realizar la serialización de Objetos en Java. Unidad 2: Laboratorio de Archivos y Flujos Esta unidad provee un conjunto de ejercicios para aprender acerca de creación de archivos. . la interfaz Serializable. También permite al estudiante aprender a escribir excepciones definidas de usuario. Volumen 5: Crear Interfaces Usando AWT y Swing Unidad 1: Componentes y Contenedores AWT En esta unidad se discute el ‘abstract window toolkit –AWT. Volumen 4: Facilidades de Entrada / Salida Unidad 1: Archivos y Flujos Esta unidad trata los conceptos File. sus responsabilidades y las reglas para su aplicación y uso.

Unidad 5: Modelo de Delegación de Eventos y Manejo de Eventos Esta unidad examina el Modelo de Conducción de Eventos. Esta unidad establece qué es un applet y lo que puede hacer. las propiedades look y feel (Apariencia) de Swing y el API Java 2D. Se incluyen detalles de todas las clases y ejemplos dados. CheckboxGroup y Button. los métodos para añadir componentes UI y la aplicación y ventajas del API en un applet. los applets son uno de los tópicos más interesantes y significativos. TextArea. Se discuten los métodos para responder a eventos (milestones). Unidad 9: Laboratorio de Componentes Swing En esta unidad de Laboratorio. También provee una manera de implementar el mecanismo de conducción de eventos. con ejemplos ilustrativos. Volumen 6: Applets Unidad 1: Escribir y Desplegar Applets En el lenguaje Java. se espera que los estudiantes entiendan el uso del componente Swing y las características de las clases Swing. Unidad 2: Laboratorio de Escribir y Desplegar Applets En esta unidad. Unidad 7: Arquitectura MVC y Clases Swing En esta unidad se discuten en gran detalle la arquitectura MVC y los componentes Swing. . Unidad 6: Laboratorio de Modelo de Delegación de Eventos y Manejo de Eventos En esta unidad de laboratorio el estudiante aprende el mecanismo de manejo de eventos y el uso de la clase PopupMenu. los estudiantes practican el uso de varios manejadores de diseño y trabajan en la creación de varios controles como TextField. Provee un resumen de los applets. Unidad 8: Componentes Swing Esta unidad trata con las clases swing. los ‘Listeners’ (Oyentes) y ‘Adapters’ (Adaptadores). el uso de los métodos para dibujar y manejar eventos. su ciclo de vida y cada una de sus fases significativas. xi © Copyright IBM Corp. los estudiantes aprenden a desarrollar applets sencillos.Guía del Estudiante Core Java Unidad 4: Laboratorio de Administradores de Diseño (Layout Managers) En esta unidad de laboratorio. La mayoría de los componentes se analizan en detalle. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. los cuales interactúan con el usuario y realizan comunicaciones entre applets a través del programa Cliente-Servidor.

el ciclo de vida de los hilos. xii © Copyright IBM Corp.0. leyendo directamente desde un URL. También se discuten los interbloqueos o puntos muertos (deadlocks) y provee una visión de comunicación entre hilos.Core Java Guía del Estudiante Volumen 7: Multihilos y Sistema de Redes Unidad 1: Crear Hilos Java es conocido por su poder en términos de hilos. métodos sincronizados y sentencias sincronizadas. cómo leer desde un objeto URLConnection. . También se discuten los tópicos de MalformedURLException. el modo orientado a conexiones de operación de sockets. Unidad 2: Laboratorio Crear Hilos Esta unidad proporciona ejercicios para fortalecer la base conceptual presentada en la unidad 1 de creación de hilos y ayudar a escribir programas que apliquen hilos en Java. Volumen 8: Conceptos Avanzados Unidad 1: API de Colecciones Esta unidad ayuda a entender el marco de trabajo de las colecciones de Java. y cómo escribir a un objeto URLConnection. Unidad 6: Laboratorio de URLs y Programación de Conectores Esta unidad de laboratorio permite a los estudiantes practicar el uso de Java trabajando con URLs y realizar trabajos con conectores en el ámbito de programación. En esta unidad se discuten los conceptos de hilos y multihilos (threads y multithreading). cómo analizar un URL. Unidad 4: Laboratorio de Sincronización de Hilos Esta unidad ha sido diseñada para bosquejar el entorno teórico en términos de sincronización de hilos y reforzar el aprendizaje del uso de la sincronización de hilos en la solución de problemas usando Java. También se cubren propiedades especiales de los hilos como establecer prioridades y el ThreadGroup. etc. cómo conectarse a un URL. las interfaces de colecciones y el impacto que produjo la inclusión de los Genéricos en Java 5. Unidad 5: URLs y Programación de Conectores (Sockets) Esta unidad trata acerca del ‘Uniform Resource Locators –URLs’ (Localizadores de Recursos Uniformes). También discute algunos algoritmos polimórficos de JDK operando en colecciones y algunas implementaciones de colecciones. abarca los diferentes modos de operaciones de socket. Por otra parte. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. el API Thread y el método de crear hilos de la clase Thread y la interfaz Runnable. la creación de un URL y la creación de un URL relativo a otro URL. Unidad 3: Sincronización de Hilos En esta unidad se examinan los conceptos de sincronización.

Unidad 7: Características Avanzadas En esta unidad. Unidad 6: Laboratorio de JDBC Avanzado Esta unidad permite al estudiante escribir código en Java para crear y usar los procedimientos almacenados. y el uso de las interfaces SortedSet. HashSet y TreeSet. incorporar elementos de seguridad mientras se trabaja con programas en Java y aprender el concepto de internacionalización en Java. xiii © Copyright IBM Corp. cómo usar ArrayList. También ayuda a usar la clase iterator y sus métodos. Unidad 4: Laboratorio de JDBC Existen algunos ejercicios en esta unidad para ayudar a los estudiantes a conectarse a una base de datos a través de un programa Java. También se explican los Java beans y cómo realizar la invocación remota de métodos. Unidad 3: JDBC Esta unidad trata la conectividad de base de datos en Java y el API JDBC de Java. . procedimientos almacenados (stored procedures) y otras funcionalidades JDBC. Unidad 5: JDBC Avanzado Se explican algunos conceptos avanzados de JDBC tales como usar las clases heredadas de Statement. Discute las sentencias SQL usadas en los programas de Java y cómo funciona el manejo de excepciones.Guía del Estudiante Core Java Unidad 2: Laboratorio del API de Colecciones Esta unidad proporciona ejercicios para ayudar a entender la interfaz collection. además de entender cómo acceder a la base de datos una vez que se establece una conexión. los objetivos consisten en la capacitación del trabajo con imágenes y gráficos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. además de facilitar la comprensión acerca de la forma en que trabaja la administración de transacciones. los estudiantes aprenderán a convertir un programa Java usando internacionalización y trabajarán con la invocación de métodos remotos. como por ejemplo el manejo de transacciones. Unidad 8: Laboratorio de Características Avanzadas En esta unidad.

.

Guía del Estudiante Core Java Volumen 1: Fundamentos de Java Libro 1: Core Java Volumen 1: Fundamentos de Java 1 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .

.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Describir el impacto de Java en WWW. usted será capaz de: • • • • • • • Discutir la evolución de Java. Comparar Java con C++. . Discutir las características principales de Java. Explicar los principios de orientación a objetos en Java. Definir clases y objetos. Libro 1: Core Java Volumen 1: Fundamentos de Java 3 © Copyright IBM Corp. Explicar la plataforma Java.Guía del Estudiante Core Java Unidad 1: Visión General de Java Objetivos del Aprendizaje Al final de esta unidad.

C y C++ eran los lenguajes de programación más usados. La Internet tenía una configuración de red similar al *7. Aunque Java no fue diseñado como solución a los problemas encontrados en C o C++. antes de continuar. para dar margen de maniobra al equipo responsable del proyecto. Este grupo intentó mercadear él *7 a la industria de televisión por cable. . transformándolo en un lenguaje que permitía al programador escribir programas que corrían en una gran variedad de dispositivos. Estos dos lenguajes de programación son complejos y tienen algunas limitaciones inherentes. pero simple. Desarrollaron un dispositivo llamado StarSeven (*7). se presenta un breve resumen de la evolución de Java. gráficos y video. pero la tecnología usada para desarrollar él *7 estaba adelantada a la tecnología existente en la industria de televisión por cable y por esto no fue aceptado. Otra ventaja fundamental es que Java trajo el concepto de la independencia de plataforma. Java ha simplificado muchas de las estructuras complicadas y ambiguas de C++. esencialmente datos estáticos. mientras que C++ brinda soporte tanto a la programación estructurada como a la programación orientada a objetos. El equipo decidió intentar introducirse en el mercado de la electrónica de consumo y desarrollar programas para pequeños dispositivos electrónicos. este nuevo lenguaje evolucionado fue llamado Java. Adicionalmente. Historia de Java Patrick Naughton. C es un lenguaje de programación estructurada. permitía transferir pequeñas aplicaciones dinámicas a través de la red en la forma de applets de Java.. a un lenguaje que permitía escribir código ejecutable que podía ser distribuido en Internet. Sun decidió crear una filial. Se aprenderá acerca de estas características en detalle en las próximas secciones. Uno de los objetivos principales detrás de la creación de Java fue tener un lenguaje orientado a objetos que fuera poderoso. *7 usaba un procesador independiente del lenguaje llamado Oak para adaptarse a una variedad de plataformas y dispositivos de uso doméstico.Core Java Guía del Estudiante 1. Sin embargo. En el año 1995. Mike Sheridan y James Gosling de SUN Microsystems iniciaron un proyecto secreto llamado "Proyecto Verde" (Green Project) a finales de 1990. El equipo FirstPerson amplió Oak. 2. Java permitía a los usuarios de Internet transferir contenido estático a través de la misma. denominada FirstPerson Inc. y estaba siendo usada cada vez más para la transferencia de texto. Internet se estaba volviendo popular en ese momento. además de mostrar animaciones simultáneamente. Algunos de los miembros del grupo FirstPerson mostraron el lenguaje Unidad 1: Visión General de Java Libro 1: Core Java 4 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Afortunadamente para el grupo creador del *7. El objetivo de este proyecto era anticiparse a la revolución en el mundo de la computación que estaba por llegar. Introducción Antes que Java existiera. Tras unos comienzos dudosos. algunas de sus características han solventado las limitaciones de estos dos lenguajes. este dispositivo era capaz de controlar una variedad de plataformas de entretenimiento y dispositivos de uso doméstico.

necesita ser compilado de nuevo. una vez escrito. Una clase puede heredar directamente de más de una clase. puede ser ejecutado en cualquier plataforma. que es un lenguaje puramente orientado a objetos. No se soporta características como sobrecarga de operadores y conversiones automáticas en ambos sentidos. El código Java. Tiene rutinas de librerías extensibles. Esto ha sido eliminado en Java.Guía del Estudiante Core Java y sus nuevas características. Da soporte a características como sobrecarga de operadores y conversiones automáticas en ambos sentidos. ya que la tecnología proveía un método más sencillo para transferir datos en la Internet. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. en la Conferencia de Diseño.1. para descubrir que ha hecho a Java tan popular. y publicó el código fuente Java gratuitamente en Internet. Es un lenguaje puramente orientado a objetos. El lenguaje es independiente de la plataforma. No es necesario para un programa en C++ tener una clase. Se da soporte a la herencia múltiple usando interfaces. una vez escrito para una plataforma. El equipo pronto construyó el navegador HotJava. 3. el número de usuarios de la tecnología Java se incrementó rápidamente. Todas las declaraciones de variables y métodos deben estar dentro de la definición de la clase. ambos lenguajes de programación orientado a objetos. Se ha visto con anterioridad las ventajas del paradigma de programación orientada a objetos. Tecnología y Entretenimiento en Monterrey. . al mismo tiempo. y el código objeto reenlazado para ser ejecutado en otra plataforma diferente. incluyendo la transferencia de animaciones a través de la Internet. Da soporte tanto a la programación estructurada como a la programación orientada a objetos. C++ Es sólo un lenguaje de programación. Comparación entre Java y C++ Java simplifica muchas de las ambigüedades encontradas en C++. Una clase no puede heredar directamente de más de una clase. Las declaraciones de variables y funciones pueden estar presentes fuera de las definiciones de las clases. El código C++. Existen algunas deficiencias en C++. un lenguaje de programación igualmente poderoso. Maneja la memoria automáticamente. Libro 1: Core Java Volumen 1: Fundamentos de Java 5 © Copyright IBM Corp. por el hecho de que permite programación estructurada. Los programadores tienen que hacerse cargo de liberar la memoria no utilizada. Las principales diferencias entre C++ y Java se listan en la Tabla 1. Java Es tanto un lenguaje de programación como una plataforma de software. Sus rutinas de librerías no son extensibles. Sus características y funcionalidades asombraron a los participantes. En poco tiempo. y es. A continuación se va a comparar Java y C++.

Los programadores no pueden usar apuntadores. 4. El equipo FirstPerson contó con programadores expertos para asegurar que Java permitiera a los programadores tener un control completo sobre la ejecución del programa. Unidad 1: Visión General de Java Libro 1: Core Java 6 © Copyright IBM Corp. Tabla 1. La Figura 1. Implementa arreglos verdaderos. y pueden ejecutarse en un navegador web con soporte para Java. Características de Java Java puede usarse para desarrollar dos tipos de programas: Aplicaciones: Las aplicaciones son programas independientes que pueden correr en una computadora. C++. es un lenguaje. Los programadores pueden usar apuntadores. . Las aplicaciones Java y los applets pueden ser compilados y ejecutados usando el Kit de Desarrollo de Java (Java Development Kit JDK). Los applets pueden ser incrustados en una página HTML usando la etiqueta Applet. Guía del Estudiante La programación para redes es compleja. Se implementan los arreglos con aritmética de apuntadores. usando la plataforma Java con el soporte del sistema operativo de la computadora.1 muestra las diferentes características de Java. ni como un reemplazo para C++. Ahora se estudiarán las diversas características ofrecidas por Java. excepto por las restricciones inherentes al ambiente de Internet. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. que no brinda soporte incorporado para programación de redes. Los apuntadores se usan internamente. a menos que se usen APIs de terceros. Java no debe ser interpretado como la versión Internet de C++. que pueden usarse para transmitir información en Internet. Los applets pueden adaptarse a la entrada del usuario inteligentemente. Los objetos pueden ser accedidos a través de la red usando URLs. Applets: Los applets son programas especiales Java.1: Comparación entre C++ y Java Aunque las construcciones de programación de Java (sintaxis) son similares a las de C++.Core Java La programación de redes es más fácil.

4. del sistema de archivos local. Las personas que descargaban archivos eran muy cautelosas de revisar estos archivos cuidadosamente antes de usarlos. Esto fue. De aquí que. y soporta la mayoría de las características ofrecidas por C++. cuando la Internet comenzó y Java no era tan conocido. Java proporcionó un modelo de seguridad. palabras clave. 4.Guía del Estudiante Core Java Figura 1.3 Portabilidad Existen muchas ocasiones en donde los usuarios de Internet pueden querer descargar programas y ejecutarlos dinámicamente. ya que se implementan los conceptos en una forma mucho más sencilla que en C++. etc. y así bloquear cualquier intento malicioso.2 Seguridad Inicialmente.1 Simple de Usar El estilo de programación en Java está basado en C++. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . Un programador con un buen conocimiento de los conceptos de orientado a objetos puede sacar el máximo provecho a Java. Los usuarios pueden estar usando diferentes Libro 1: Core Java Volumen 1: Fundamentos de Java 7 © Copyright IBM Corp.1: Características de Java 4. los usuarios de Internet temían descargar programas ejecutables debido al daño alarmante causado por la difusión de virus. Había también programas maliciosos que recababan información acerca de tarjetas de crédito. los programadores no encontrarán Java muy difícil de entender y usar. desastroso para las personas que navegan por la Internet. por supuesto. que previene el acceso a los recursos del sistema.

java) a bytecodes (archivo con extensión . La Figura 1. El sistema de tiempo de ejecución de Java es específico a la plataforma en la cual se ejecuta.2: JVM e Independencia de la Plataforma Unidad 1: Visión General de Java Libro 1: Core Java 8 © Copyright IBM Corp. estos bytecodes son interpretados por el intérprete de Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El ambiente de tiempo de ejecución de Java es el ambiente en donde es posible que los programas puedan ser compilados y ejecutados.2.class). . Este ambiente administra el manejo de la memoria y otras necesidades en tiempo de ejecución durante la ejecución del programa. para permitirles descargar programas y ejecutarlos dinámicamente. porque los bytecodes son interpretados antes de la ejecución. Figura 1. a una forma entendible por la máquina. El compilador Java (javac) primero convierte el código fuente (archivo con extensión . Java soporta la portabilidad. Realiza la funcionalidad de traducir los bytecodes de Java. Existe otro componente llamado el compilador ‘Just-In-Time (JIT)’. Java solventa este inconveniente de portabilidad con el uso de bytecodes. haciéndolos más rápidos que la interpretación hecha por la JVM. y convertidos a una forma ejecutable que la entiende la plataforma en la cual el sistema de tiempo de ejecución de Java se está ejecutando.Core Java Guía del Estudiante tipos de plataformas. que puede entender el sistema de tiempo de ejecución de Java o la Máquina Virtual de Java (Java Virtual Machine JVM). El compilador JIT compila los bytecodes a código máquina. explica cómo Java logra la portabilidad. La Máquina Virtual de Java (JVM) es la capa entre el microprocesador y los archivos class de Java. se necesita de un mecanismo para crear código ejecutable que sea portable entre varias plataformas.

Java fue diseñado para brindar soporte TCP/IP. en vez de ser interpretado como actualmente lo es. Los bytecodes de Java también son útiles al mejorar el nivel de seguridad ofrecido por Java. Estas plataformas diversas tenían demandas diferentes por parte de las aplicaciones para que se ejecutaran apropiadamente y por tanto. sus diseñadores y desarrolladores no quisieron que Java fuera compatible al nivel de código fuente con ningún otro lenguaje. creció también la necesidad de ejecutar una aplicación en diversas plataformas. La Figura 1. Por lo anterior. Figura 1. . Para poder hacer esto. Esto se debe a que la ejecución del programa está todavía en manos del sistema de tiempo de ejecución de Java. El soporte a redes de Java permite construir aplicaciones cliente/servidor. asegurando un alto rendimiento. Este método de compilación usado para convertir bytecodes a código nativo se llama compilación ‘justo a tiempo’ (Just In Time JIT). 4. De este modo. la aplicación tenía que ocuparse de todas estas demandas. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Cuando Java estaba siendo diseñado.5 Orientado a Objetos C++ tenía que mantener las características y ser compatible con C. Aún si Java hubiese sido diseñado para ser compilado justo antes de la ejecución. 4.4 Distribuido La computación distribuida es muy útil en el ambiente de la Internet.Guía del Estudiante Core Java El sistema de tiempo de ejecución Java previene que el código acceda a cualquier recurso fuera de él. el sistema de tiempo de ejecución mejora las características de seguridad ya provistas por Java. soportaría la portabilidad.3 muestra como trabaja el compilador JIT. adicionalmente Java tiene el paquete de Invocación de Métodos Remota (Remote Method Invocation RMI).3: Compilador JIT y la JVM 4.6 Robusto A medida que los usuarios de Java en Internet comenzaron a incrementarse en número. donde los módulos de los programas pueden estar presentes en diferentes computadoras alrededor del mundo. la aplicación debía de ser robusta Libro 1: Core Java Volumen 1: Fundamentos de Java 9 © Copyright IBM Corp. tuvieron la opción de crear un lenguaje orientado a objetos que hace uso de un modelo de objetos simple. Este permite a programas que se ejecutan en una JVM invocar un método en una clase Java ejecutándose en otra JVM. y usa tipos de datos simples no objetos.

4. La robustez del manejo de excepciones de Java ayuda a construir programas confiables. Este código es interpretado por diferentes computadoras de igual manera.9 Interpretado Los bytecodes de Java son interpretados por la JVM en el lenguaje nativo de la plataforma subyacente. Java está diseñado para ser un lenguaje estrictamente tipado. El código puede ser revisado para asegurar confiabilidad colocando restricciones en ciertas áreas claves de la programación y teniendo un diseño para evitar los errores más comunes de programación. Funciones como la recolección automática de basura en Java hace que los programas sean menos propensos a errores relacionados con la memoria. .Core Java Guía del Estudiante El diseño de Java hace posible que los programadores identifiquen errores en la misma etapa de desarrollo. Java fue diseñado de forma que si se comete cualquier error en una invocación de método.8 Fuertemente Tipificado Java es fuertemente tipificado. Por esta razón. 4. De esa manera Java logra ser un lenguaje que no depende de una arquitectura computacional definida. los programadores no necesitan preocuparse de cometer errores no detectables en las invocaciones de métodos. Esto a su vez da seguridad a los programadores para predecir el comportamiento del programa en diversas situaciones. el código resultante es un tipo de código binario conocido como bytecode. Java fue implementado para usar los datos disponibles en los archivos class en tiempo de ejecución. 4. Los lenguajes interpretados tienen limitaciones de rendimiento comparados con los lenguajes que son compilados. Esta característica es útil cuando se quiere actualizar el bytecode en un sistema en ejecución. El compilador Java JIT puede ayudar a superar las limitaciones de rendimiento asociadas a la JVM. Unidad 1: Visión General de Java Libro 1: Core Java 10 © Copyright IBM Corp. solamente hay que implementar un intérprete para cada plataforma. se mostrará un mensaje de error al programador en tiempo de compilación.10 Arquitectura Neutral Al compilar un programa en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Java provee manejo de excepciones para ocuparse de los errores de una manera sofisticada. Por lo tanto. 4.7 Dinámico Java enlaza el código dinámicamente. Los objetos que se crean y usan en un programa son verificados y resueltos en tiempo de ejecución. verifica errores de codificación tanto en tiempo de compilación como en tiempo de ejecución. Java combina las ventajas de la compilación e interpretación.

que es escrita para operar en un entorno particular. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.4. que permite que un único programa lleve a cabo varias tareas concurrentemente. como se muestra en la Figura 1.4: Los dos Componentes de la Plataforma Java 5. que a su vez facilitan la programación interactiva. Ahora que se conocen las características principales de Java. llamados la JVM y el API de Java. La Plataforma Java Una plataforma es el entorno sobre el cual se ejecutan los programas. El sistema en tiempo de ejecución de Java (JVM) se implementó de forma eficiente.Guía del Estudiante Core Java 4. aún brindará soporte al API general de Java.1 JVM La JVM es una aplicación ejecutable que representa a un procesador genérico en el cual corren los bytecodes de Java.11 Ambiente Multihilos Java brinda soporte a la programación multihilos. la cual se puede ejecutar en varias plataformas de hardware así como en varios sistemas de operativos. se discute a continuación la plataforma de Java. Libro 1: Core Java Volumen 1: Fundamentos de Java 11 © Copyright IBM Corp. . una plataforma de hardware o una combinación de ambos. Una plataforma puede ser una plataforma de software. para permitir la fácil sincronización de hilos. La plataforma Java esta conformada por dos componentes. Una implementación particular de esta máquina virtual. Esto es lo que hace a Java independiente de la plataforma. 5. Figura 1. Los programadores pueden hacer uso de esto para crear aplicaciones de red interactivas. La plataforma Java es una plataforma de sólo software.

los archivos .class. Figura 1.class son portables a cualquier implementación de la máquina virtual. De aquí que. . se va a mostrar brevemente el flujo de un programa Java.class) por el compilador Java. Para entender la diferencia entre los archivos . Unidad 1: Visión General de Java Libro 1: Core Java 12 © Copyright IBM Corp. Instancia en tiempo de ejecución. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La implementación concreta de la JVM es la implementación actual de la especificación abstracta.5. Implementación concreta. Esto se muestra en la Figura 1. Estos bytecodes son luego convertidos a código de máquina nativo por alguna JVM que sea específica a una plataforma en particular. que se necesita para permitir que los programas se ejecuten en ella.java) es convertido en bytecodes (archivo .Core Java Guía del Estudiante La JVM consta de los siguientes tres aspectos: • • • Especificación abstracta. La instancia de tiempo de ejecución (la instancia de una JVM que está en ejecución actualmente) soporta la ejecución de los programas Java.java y .5: Diferentes Aspectos de la JVM La especificación Java define la especificación abstracta de la JVM. El código fuente de Java (archivo .

ésta protege a las aplicaciones y applets Java de ser atacados por virus.java) a bytecodes. y si la operación se realiza dentro de un contexto de seguridad que permita a la aplicación llevar a cabo esa operación. uso ilegal de objetos. Libro 1: Core Java Volumen 1: Fundamentos de Java 13 © Copyright IBM Corp. Dado que la confiabilidad del código fue verificada. El administrador de seguridad (clase java. entonces el bytecode es tratado como un código confiable. Actualmente. por lo que estos bytecodes pueden estar erróneos. el administrador de seguridad de Java juega un papel fundamental. Si no se encuentran ninguna de las violaciones anteriores. el bytecode es objeto del mismo proceso de verificación.SecurityManager) es una clase definida en Java. los fragmentos del bytecode son probados para verificar su validez. es una operación insegura o sensible. los bytecodes descargados no tienen que haber sido producidos por un compilador Java estándar. tiene la capacidad de determinar si la operación que está a punto de realizarse.class. una vez que el bytecode sea descargado. Para resolver este problema. el programador debe regresar al editor. esto asegura la confiabilidad del código y también protege al intérprete Java. que compila el código fuente Java (archivo . Cuando surge un aspecto vinculado con la seguridad en Java. Cuando una aplicación Java implementa esta política de seguridad. corregir los problemas. Durante este proceso. y para ejecutar el archivo . suponiendo que no hay errores en tiempo de compilación. Una vez compilado. También se pueden obtener más detalles de la operación. etc. El comando javac se usa para iniciar el compilador Java.Guía del Estudiante Core Java • • El código fuente Java se ingresa usando un editor.class que podrá ser usado con cualquier JVM ejecutándose en cualquier plataforma. y ejecutar nuevamente javac hasta que todos los errores sean solucionados y se obtenga una compilación limpia. El modelo de seguridad de Java provee una ‘caja de arena’ (sandbox) que es configurable. Si existe un error. El bytecode puede provenir del sistema local o haber sido descargado de la Internet. que permite a las aplicaciones Java implementar una política apropiada de seguridad. • • Se ha discutido que los bytecodes Java obtenidos después de la compilación en cualquier JVM pueden ser transferidos a cualquier otra JVM ejecutándose en cualquier otra plataforma y ser ejecutado allí. violación de restricciones colocadas para acceder a las variables y métodos de las clases. la JVM en la máquina del usuario inicia un proceso de verificación del bytecode.lang. El comando java se usa para iniciar el intérprete Java. . Sin importar la fuente. y si el bytecode descargado pasa todas las otras pruebas que el verificador impone. Se revisa cualquier manipulación ilegal de apuntadores. Esta característica ayudará a los usuarios a descargar bytecodes Java de la Internet y ejecutarlos en sus JVM sin riesgos de seguridad. el verificador de bytecode no realiza ninguna suposición acerca del bytecode que recibe. se produce un archivo . hay un pequeño problema. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Sin embargo. el intérprete Java opera a toda capacidad sin tener que revisar cualquier aspecto de seguridad.

Estas dos clases son actualmente cargadas a través del mismo cargador de clases que ha cargado a MiClase. se usa la caja de arena que viene con el navegador Web. mientras que el objeto cargador de clase es un objeto que se usa para cargar una clase. A continuación se discute el cargador de clases que es el otro componente que puede personalizarse de la caja de arena. En este modelo de caja de arena. La ventaja del modelo de caja de arena es que la aplicación Java no necesita revisar si el código es confiable. El cargador de clases primordial es actualmente una parte de la implementación de la JVM. . la caja de arena revisa si viene de una máquina confiable o no. No se tienen que escribir nuestra propia caja de arena personalizada para las aplicaciones y applets Java que se escriben día a día. el cargador de clases y el verificador de archivos class. por ejemplo. las aplicaciones y applets Java pueden descargar cualquier código de cualquier máquina. Objetos Cargadores de Clases. se evita realizar cualquier operación que pueda dañar al sistema. son estos: el administrador de seguridad y el cargador de clases. Es posible escribir objetos cargadores de clases propios. ni necesita revisar por virus en el código. incluyendo las clases definidas en el API Java que están disponibles en el sistema local. Las aplicaciones y applets Java pueden realizar cualquier operación que este bajo la supervisión de la caja de arena y nada más. Unidad 1: Visión General de Java Libro 1: Core Java 14 © Copyright IBM Corp. El cargador de clases primordial en principio no confía de las clases cargadas por estos objetos cargadores de clases.lang. El cargador de clases carga las clases en la JVM. La caja de arena se puede personalizar en dos de sus componentes. El código no se revisa por virus. el administrador de seguridad. Si el código proviene de una máquina no confiable. simplemente se puede usar las cajas de arena estándar que otros crean. La caja de arena de Java incluye las características de seguridad provistas por la JVM. El administrador de seguridad puede ser personalizado al escribir clases definidas por el usuario. porque mientras se ejecuta el código. Estos administradores de seguridad personalizados son útiles cuando se quieren cargar clases que no son completamente confiables. que pueden ser personalizados para cargar clases específicas. Las clases definidas por el usuario pueden ser creadas derivando de la clase java. Actualmente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Considere una clase MiClase que es cargada por un objeto cargador de clases. estos objetos cargadores de clases son sólo aplicaciones Java que se ejecutan en la JVM. Los cargadores de clases pueden ser de dos tipos: • • Cargador de Clases Primordial.SecurityManager y sobrescribiendo los métodos necesarios.Core Java Guía del Estudiante que son difundidos a través de programas descargados de máquinas no confiables. El cargador de clases primordial carga solamente clases confiables. Si se quiere ejecutar un applet en un navegador Web. La caja de arena evita que un virus o código no confiable realicen operaciones maliciosas. Asuma que MiClase carga otras clases tales como OtraClase1 y OtraClase2.

Guía del Estudiante Core Java En Java. las clases son agrupadas dentro de paquetes.6: Características Provistas por el Núcleo del API Java Libro 1: Core Java Volumen 1: Fundamentos de Java 15 © Copyright IBM Corp. applets y Servlets. Dentro de un espacio de nombres en particular. Cada cargador de clases puede estar asociado a un espacio de nombre diferente. a menos que el cargador de clase expresamente permita esa interacción. La misma clase puede ser cargada a través de diferentes cargadores de clases que están asociados a diferentes espacios de nombres. El término espacio de nombres se refiere a la entidad que mantiene los nombres de las clases. Así. El soporte de las diversas características de Java se realiza a través del API. Éstas son básicamente librerías o paquetes de componentes relacionados. No puede haber ninguna interacción entre cargadores de clases que están presentes en diferentes espacios de nombres.2 El API de Java El API (Application Programming Interface) de Java es una muy buena colección de componentes de software apropiadas para el desarrollo de programas Java. La Figura 1. cada paquete tiene un conjunto de clases. 5. es decir. Sin embargo. se puede usar esta arquitectura de cargador de clase para evitar cualquier daño causado por código malicioso.6 muestra las características provistas por el núcleo del API de Java. Figura 1. En Java hay diferentes tipos de programas tales como aplicaciones. El API de Java ayuda al desarrollo y ejecución de estos diferentes tipos de programas mediante una amplia librería. A estas clases se les restringirá el acceso a otra clase que esté en un nombre de espacios diferente. sólo puede existir una clase con un nombre dado. . Se pueden diferenciar las clases descargadas de la red desde diferentes máquinas en diferentes espacios de nombres. puede existir cualquier número de cargadores de clases dentro de una JVM. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Java usa paquetes para este propósito.

Unidad 1: Visión General de Java Libro 1: Core Java 16 © Copyright IBM Corp. Por ejemplo. La información no necesita ser replicada para soportar diferentes plataformas. Considere la Figura 1. A continuación se discute el impacto que Java ha tenido sobre Internet y la WWW. el mismo programa puede ser ejecutado en diferentes plataformas. Los programas Java no tienen permiso de acceder a cualquier recurso fuera del alcance de la JVM. Debido a que Java permite la portabilidad. la JVM controla los intentos de romper la seguridad a través de programas Java. han otorgado al programador mucho más poder para construir aplicaciones robustas y escalables para Internet. tecnologías como los Java Servlets.7. etc. Enterprise Java Beans (EJB). Java comenzó de una manera modesta al permitir que los programas se ejecutaran en la Internet usando los applets de Java. El otro tema principal de los usuarios de la WWW enfrentan es la seguridad.. . Debido a la amplia difusión de los virus y programas que pueden capturar información como palabras claves y detalles de las tarjetas de crédito del sistema de archivos local. los usuarios hasta hace poco. la cual muestra como las diferentes tecnologías Java se usan para alcanzar varias funcionalidades en un ambiente Internet. Así que el problema clave es hacer que la información en la Internet sea compatible con todas las plataformas. se logra este punto. estaban temerosos de descargar cualquier programa ejecutable desde máquinas no confiables. Usando la característica de portabilidad.Core Java Guía del Estudiante Se ha visto cómo Java evolucionó como una aplicación de Internet. Existen varias tecnologías basadas en Java que se usan para obtener funcionalidades especializadas. y tienen diferentes plataformas. Java Server Pages (JSP). con resultados predecibles. Java también hace la programación de aplicaciones interactivas muy fácil. Por esto. las cuales se usan en muchos portales en Internet para atraer clientes. esto ha crecido hasta alcanzar un mayor poder de funcionalidad. 6. Sin embargo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Impacto de Java en la WWW Los usuarios de la WWW hacen uso de varios tipos de máquinas.

sólo los applets tienen restricciones en acceder los recursos del sistema fuera de la JVM. Similarmente. . Libro 1: Core Java Volumen 1: Fundamentos de Java 17 © Copyright IBM Corp. Las variables se usan para representar las características de los objetos y los métodos se usan para representar el comportamiento de los objetos. 7. Por lo tanto.Guía del Estudiante Core Java Figura 1.7: Tecnologías Java en Internet Nota: Todas las tecnologías listadas en la Figura 1. excepto la tecnología applet. Clases y Objetos Una clase es un prototipo que se usa para definir las características y los comportamientos que son comunes a todos los objetos de un mismo tipo. int a. están basadas en la ejecución sobre la JVM de una máquina en vez de la JVM de un navegador. Computador comp. A continuación se estudian las diferentes clases y objetos en Java. se puede declarar objetos especificando lo siguiente: • Tipo (nombre de clase). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. • Nombre de Objeto.7. Se puede declarar una variable especificando su tipo de datos y el nombre de la variable.

mantiene los datos del cliente. La Figura 1. como el ID del cliente. e int es su tipo de datos.8 muestra una clase llamada Cliente y objetos con los nombres ObjetoA. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. es decir. a es el nombre de la variable. Figura 1.8. el nombre del cliente. Se pueden declarar muchas variables del mismo tipo de datos. y Computador es el tipo del objeto. Se define una clase en Java usando la palabra reservada class. Similarmente. la clase tendrá variables miembro para mantener información. . se pueden declarar muchos objetos del mismo tipo (muchos objetos de la misma clase). Típicamente. Similarmente.8: Clases y Objetos Java La Figura 1. ObjetoB y ObjetoC de este tipo. etc. el nombre de la clase. La sintaxis es la siguiente: class NombreClase { // variables miembro // funciones miembro } Unidad 1: Visión General de Java Libro 1: Core Java 18 © Copyright IBM Corp. comp es el nombre del objeto. La clase Cliente es una representación orientada a objetos del cliente del mundo real. muestra más de un objeto de una misma clase.Core Java Guía del Estudiante En el fragmento de código anterior.

el main()de Java puede tomar estos argumentos. Los constructores en Java pueden aceptar nombres de variables y tipos de variables como argumentos. debe estar presente dentro de una clase Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. En este momento. En Java. los programas Java pueden aceptar parámetros por la línea de comandos. y la definición de la función miembro apareciendo libremente. Unidad 1 . se pueden tener parámetros de la línea de comandos usando int argc y char* argv[]. En Java. Objetos y Referencias.1. y las funciones miembros como los métodos de una clase. Los objetos en Java se crean usando la palabra clave new.Clases. Nota: La función main() en Java no puede ser global. Observe el Ejemplo 1. como en C y C++. la sintaxis del código no es importante. Las variables miembro son conocidos como miembros. Los constructores en Java tienen la misma funcionalidad que en C++. se tiene que main() es el punto de inicio del programa Java también. Ambos deben aparecer dentro del bloque de definición de la clase. . mientras en C o C++ es opcional para la función main() tomar argumentos desde la línea de comandos. La sintaxis es la siguiente: NombreClase objecto = new NombreClase(). La palabra clave public es un tipo de especificador de acceso en Java. como en C++. Se pueden crear dos instancias de la clase Computador que tengan diferentes valores para estos atributos. Estas dos instancias están representadas por comp1 y comp2. como en C o C++. No se puede tener la declaración de la clase separada. que tiene el código Java para la clase Computador. monitor. Se verán otros tipos de especificadores de acceso en el Volumen 2. Libro 1: Core Java Volumen 1: Fundamentos de Java 19 © Copyright IBM Corp. se toman como un arreglo de objetos String.Guía del Estudiante Core Java Considere la clase Computador. A su vez. dado que el punto ahora es entender la relación entre clases y objetos. donde la función main() es el punto de inicio del programa. teclado y mouse. que tiene los atributos cpu. Además. es obligatorio que los argumentos de la línea de comandos estén declarados en la función main() de Java. En C o C++. La función main() tiene la siguiente declaración de función: public static void main(String args[]){ // El código principal va aquí } Así como en C y C++.

}/*Definicion de la clase Computador termina aqui*/ /*Definicion de la clase ComputadorEjemplo comienza aqui*/ public class ComputadorEjemplo { /*El metodo main comienza aqui */ public static void main(String[] args) { //Crear la instancia de la clase Computer Computador comp1 = new Computador(). comp1. 11. 13.monitor = "Negro". 7. 4. String monitor. 2. comp2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.. y Unidad 1: Visión General de Java Libro 1: Core Java 20 © Copyright IBM Corp.teclado = true. 17. Computador y ComputadorEjemplo. comp1. 14. 16. La clase Computador define el prototipo para un conjunto de objetos que tienen los mismos atributos. . 18. El código Java comienza aquí.teclado = true. comp2. 21. comp2. 12. 15. comp1. }/* El metodo main termina aqui */ 25. 6.mouse = false. 8. La clase ComputadorEjemplo crea dos objetos de tipo Computador. 9.mouse = true. /*Definicion de la clase Computador comienza aqui*/ class Computador { boolean cpu. se tienen dos clases.1 Aquí. mouse.. 5. }/*Definicion de la clase ComputadorEjemplo termina aqui*/ El código Java termina aquí Fin del Ejemplo 1. 19. Computador comp2 = new Computador(). 24. comp2. 23.monitor = "Blanco y negro". 3.cpu = true.cpu = true. 10. 1. 1 El siguiente programa representa una computadora.Core Java Guía del Estudiante Ejemplo 1. comp1. teclado. 20. 22.

Orientación a Objetos en Java Se sabe que Java brinda soporte a la programación orientada a objetos.9 para entender mejor el código anterior. Similarmente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. que son: Libro 1: Core Java Volumen 1: Fundamentos de Java 21 © Copyright IBM Corp. Similarmente se describen los objetos de software usando variables y métodos. Figura 1.9: Múltiples Objetos de una Clase A continuación se discuten los principios de la programación orientada a objetos usados en Java. Se tiene un prototipo a partir del cual se crean objetos del mismo tipo del mundo real. 8. Se describen los objetos del mundo real usando sus atributos y comportamiento. los programadores crean objetos de software. Java implementa la orientación a objetos a través de tres importantes propiedades. de la cual se pueden crear muchos objetos de software del mismo tipo. se tiene un prototipo llamado clase.Guía del Estudiante Core Java también se muestra que estos dos objetos pueden contener diferentes valores para sus atributos. que son modelados como los objetos del mundo real. En la programación orientada a objetos. . Considere la Figura 1.

Si se introducen datos por la entrada automáticamente obtendrá un resultado en la salida. No necesita conocer ningún detalle del funcionamiento interno de la caja. Unidad 1: Visión General de Java Libro 1: Core Java 22 © Copyright IBM Corp. ocultando la información que contienen (aquella que es necesaria para su funcionamiento interno. A continuación se discuten en detalle cada uno de ellos.10. • Se puede imaginar la encapsulación como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida. Estos atributos se denominan privados y tienen como marco de aplicación únicamente a las operaciones asociadas al objeto. . Herencia. Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos. El término encapsulación indica la capacidad que tienen los objetos de construir una cápsula a su alrededor.1 Encapsulación La capacidad de presentación de información dentro de un objeto se divide en dos partes bien diferenciadas: • Interna: la información que necesita el objeto para operar y que es innecesaria para los demás objetos de la aplicación. Estas propiedades se denominan públicas y corresponde a la información que necesitan conocer los restantes objetos de la aplicación respecto del objeto definido para poder operar. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. pero innecesaria para los demás objetos) a las otras clases que componen la aplicación. 8.Core Java Guía del Estudiante • • • Encapsulación. Polimorfismo. Esto se ilustra en la Figura 1.

11. Ellos no saben cómo estas funcionalidades están implementadas. Considere la Figura 1. Estas son las funcionalidades proporcionadas a los usuarios.Guía del Estudiante Core Java Figura 1. Se puede ir a un ATM a retirar dinero. Los usuarios pueden acceder a la información pertinente solo a sus cuentas. Tome el ejemplo de un ATM. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Ellos no pueden acceder a la información de otros usuarios. Libro 1: Core Java Volumen 1: Fundamentos de Java 23 © Copyright IBM Corp. Un objeto Direccion es instanciado y un método es invocado. y depositar dinero. El código que es privado en la clase Direccion no es visible para la clase ServicioCliente. . y no están preocupados por la implementación. revisar el saldo de una cuenta. telecajero.10: Encapsulación en una Clase Esta característica está disponible en Java y se llama encapsulación. que muestra como la encapsulación se lleva a cabo en una clase Java. a los usuarios no se les da acceso a saber cómo trabaja el ATM. La clase que se muestra es Direccion.

12 muestra un ejemplo de herencia. Unidad 5 – Clases Abstractas e Interfaces. En Java.11: Encapsulación en el Objeto Direccion 8. MonoPatin y Moto tienen propiedades que son comunes a todos los Unidad 1: Visión General de Java Libro 1: Core Java 24 © Copyright IBM Corp. se puede tener una clase llamada Profesor que defina todos los atributos y comportamiento comunes a todos los profesores. Subsecuentemente. que hereden los atributos y comportamiento comunes a todos los profesores. una clase sólo puede tener una súper clase. Java soporta herencia múltiple indirectamente usando interfaces. desde la clase Profesor. Las interfaces serán tratadas en detalle en el Volumen 1. Ambos pertenecen a una categoría general llamada profesores. De esta figura. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La Figura 1. Esto significa que una clase en Java no puede directamente derivar de varias clases.Core Java Guía del Estudiante Figura 1. se puede deducir que Bicicleta.2 Herencia Considere el ejemplo de un profesor de física y uno de matemáticas. En este caso. . la clase Profesor será la súper clase de las clases ProfesorFisica y ProfesorMatematica y estas serán subclases de la clase Profesor. Algunos lenguajes como C++. Adicionalmente. Sin embargo. Ellos tienen ciertos atributos y comportamiento que son comunes a todos los profesores. ellos tienen ciertos atributos especiales que son comunes a todos los profesores de física y matemáticas. Cuando se modela este ejemplo usando objetos de software. se pueden definir dos clases ProfesorFisica y ProfesorMatematica. permiten la herencia múltiple en la cual una clase puede heredar de varias clases.

Ahora. mientras que Carro. .3 Polimorfismo Se pueden tener muchas situaciones cuando se quieren hacer varias operaciones similares unas con otras dependiendo de la entrada que se obtenga. polimorfismo significa una sola interfaz y múltiples implementaciones. a este método se le llamará desplazar(). que no se han visto en detalle hasta ahora. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Se encontrará entonces conque para algunos mamíferos el desplazamiento se realizará por medio de caminar. Se usa el mismo nombre del método para invocar sus diferentes implementaciones.12: Herencia: Clases Como Especialización de la SuperClase Vehiculo 8. Suponga que se desea implementar a la clase Mamiferos. formado de dos raíces griegas. a su vez. ‘poly’ y ‘morphus’. los vehículos de dos y cuatro ruedas. En otras palabras. como en el caso de los delfines e inclusive para otros. como sucede con los murciélagos. el desplazamiento se logrará por medio de volar.3 tienen algunos elementos sintácticos. suponga también que uno de los métodos que se desea implementar para esta clase. tienen propiedades que son comunes a los vehículos. los nombres de métodos son los mismos. Autobus y Camion tienen propiedades que son comunes a todos los vehículos de cuatro ruedas. En programación orientada a objetos. que escribe la cadena Hola Mundo en la salida estándar. Esto se denomina polimorfismo.Guía del Estudiante Core Java vehículos de dos ruedas. como es en el caso de las personas. Libro 1: Core Java Volumen 1: Fundamentos de Java 25 © Copyright IBM Corp. pero tienen diferentes implementaciones basadas en los parámetros que le son pasados.2 y 1. se va a comenzar la programación en Java escribiendo la aplicación HolaMundo. Los Ejemplos 1. La palabra ‘poly’ significa muchos y 'morphus' significa formas. o en los objetos sobre los cuales son invocados. para otros el desplazamiento natural será nadar. Estos ejemplos simplemente ayudarán a exponer al usuario a la sintaxis Java. es el que permita a tales mamíferos desplazarse de forma natural. Figura 1. Además. Estos elementos serán cubiertos en las próximas unidades.

Esta clase define un prototipo.. Todo archivo Java puede tener solamente una clase. El próximo paso es compilar el programa para obtener los bytecodes (archivo . que contiene los bytecodes. Ejemplo de una Aplicación Java Observe el Ejemplo 1.class.java Esto produce un archivo con el nombre HolaMundo. Este método tiene una instrucción que imprime Hola Mundo! en la salida estándar (el monitor) cuando se ejecuta.2 El código Java comienza aquí.Core Java Guía del Estudiante 9. }/*Definicion de la clase HolaMundo termina aqui*/ El código Java termina aquí En este programa. El archivo tendrá una extensión .java. que sea public. el nombre del archivo será el mismo que el nombre de la clase que contiene el método main(). 1. El intérprete Java se inicia usando el comando java. HolaMundo es el nombre de la clase. /*Definicion de la clase HolaMundo comienza aqui*/ 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. public static void main(String[] args) { 5. La aplicación Java HolaMundo de este ejemplo imprime la cadena de caracteres Hola Mundo! en la salida estándar. 6.out. }/* El metodo main termina aqui */ 7.2. Ahora que se tiene el código fuente listo. Ejemplo 1.class). y se puede crear cualquier número de objetos de este tipo instanciando esta clase.. /*El metodo main comienza aqui */ 4. como se muestra a continuación: java HolaMundo La salida del programa en el monitor será: Hola Mundo! Unidad 1: Visión General de Java Libro 1: Core Java 26 © Copyright IBM Corp. ya que la ejecución del programa usualmente comienza con el método main(). tienen un método (comparable a una función en C o a una función miembro en C++) con el nombre main. se debe compilar el programa y ejecutarlo. Estos bytecodes son interpretados por el interprete Java.println("Hola Mundo!"). . System. y entonces ejecutados. Usualmente. El programa debe ser almacenado en un archivo bajo el nombre HolaMundo. como sigue: javac HolaMundo.java. La compilación se realiza usando el comando javac. public class HolaMundo { 3.

se tiene la definición de la clase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El código de este ejemplo también muestra el uso de los comentarios en Java. Esta definición de la clase usa la palabra reservada extends.. Unidad 1 Applets.applet. Esto significa que la clase HolaMundo hereda sus características de la clase Applet. Hay básicamente tres tipos de comentarios que se usan en Java. 9. Esta clase tiene un método con el nombre de paint. Unidad 3 Herencia. 7. /*Definicion de la clase HolaMundo comienza aqui*/ 5. Se aprenderá más acerca de herencia en el Volumen 2. }/*Definicion de la clase HolaMundo termina aqui*/ El código Java termina aquí En este applet Java. 2.awt. . 11. 10. con el nombre de la clase HolaMundo. 25.Guía del Estudiante Core Java Fin del Ejemplo 1. 25). 4. se presenta cómo escribir un applet Java que imprime la cadena de caracteres Hola Mundo!.Applet. 3. Luego. 10. Estas son esenciales para un programa applet. La programación de Applets será discutida en el Volumen 6. que se usan para importar las clases Applet y Graphics. que imprime Hola Mundo!. Son los siguientes: Libro 1: Core Java Volumen 1: Fundamentos de Java 27 © Copyright IBM Corp. Ejemplo de Applet Java El applet Java HolaMundo que se presenta a continuación. imprime la cadena de caracteres Hola Mundo! en el área del applet. seguida del nombre de la clase Applet. public class HolaMundo extends Applet { 6.3 El código Java comienza aquí. Ejemplo 1.drawString("Hola Mundo!".. import java. import java. 8. primero se tienen las instrucciones import. }/* El metodo paint termina aqui */ 12. 1.Graphics. /*El metodo paint comienza aqui */ public void paint(Graphics g) { // Llamar al metodo drawString // del objeto Graphics g.2 En la próxima sección.

. una vez hecho esto. Estos comentarios se usan típicamente dentro de la implementación del método para explicar una expresión o una lógica de implementación compleja. Este archivo se llamará HolaMundo. <html> <head> <title>Hola Mundo</title> <body> <applet code="HolaMundo.. y la salida del applet será la siguiente: Hola Mundo! Fin del Ejemplo 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Se necesita tener ambos el applet(archivo ..html La ventana del visualizador de applet se abre. Estos comentarios se usan para generar documentación en las clases en Java.3 Unidad 1: Visión General de Java Libro 1: Core Java 28 © Copyright IBM Corp.class) y el archivo HTML en el mismo directorio.Core Java Guía del Estudiante Comentarios de Documentación: Encerrados dentro de /** … */.class. se puede ejecutar el applet usando el siguiente comando: appletviewer HolaMundo. El código para el archivo HTML requerido para ejecutar el applet HolaMundo se muestra a continuación: El código HTML comienza aquí.class" width=200 height=50> </applet> </body> </html> El código HTML termina aquí El parámetro incluido en la etiqueta <applet> se usa para invocar el archivo HolaMundo. Comentarios de Implementación: Comienzan con //. Bloques de Comentarios: Encerrados dentro de /* */. y ejecutarlo. Se necesita escribir un archivo HTML para visualizar este applet.html. Estos comentarios se usan típicamente antes de un método o clase para describir su funcionalidad.

Describir el impacto de Java en la WWW. Libro 1: Core Java Volumen 1: Fundamentos de Java 29 © Copyright IBM Corp. Mencionar las principales características de Java. Comparar Java con C++. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar la plataforma Java. . que ha completado esta unidad. Explicar los principios de orientación a objetos en Java. usted debe ser capaz de: • • • • • • • Discutir la evolución de Java.Guía del Estudiante Core Java Resumen Ahora. Definir clases y objetos.

una clase puede tener cualquier número de súper clases. a) Verdadero b) Falso 6) ¿Cuáles de los siguientes programas puede acceder a recursos fuera de la JVM? a) Aplicaciones Java b) Applets Java c) Servlets Java d) Ninguno de los anteriores Unidad 1: Visión General de Java Libro 1: Core Java 30 © Copyright IBM Corp. .Core Java Guía del Estudiante Unidad 1: Examen de Autoevaluación 1) ¿Cuál de los siguientes lenguajes visualiza los componentes del programa como objetos? a) Lenguaje Procedimental b) Lenguaje Orientado a Objetos c) Lenguaje de Máquina d) Ninguno de los anteriores 2) ¿Cuál de las siguientes características describe la arquitectura del lenguaje Java? a) Orientado a Procedimientos b) Abstracto c) Independiente de Plataforma d) Específico 3) ¿Cuál método deben tener todos los programas de aplicación Java? a) start() b) begin() c) main() d) main(String args[]) 4) ¿Cuál es el comando para ejecutar un programa compilado en Java? a) javac b) java c) run d) execute 5) En Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante Core Java 7) ¿Cuál es la extensión usada para guardar los archivos fuente Java? a) .javac c) .java b) . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.javax d) . .src 8) ¿Cuál de los siguientes es usado para referirse a una subclase? a) Clase Interna b) Clase Anidada c) Clase Derivada d) Clase Oculta 9) ¿Cuál de las siguientes opciones ha hecho popular a Java a través de la Internet? a) Applets Java b) Aplicaciones Java c) Bytecodes Java d) Ninguna de las anteriores 10) ¿Cuál de las siguientes afirmaciones es cierta acerca de Java? a) Tiene solo un compilador b) Tiene solo un interpretador c) Tiene ambos un compilador y un interpretador d) Interpreta y luego compila Libro 1: Core Java Volumen 1: Fundamentos de Java 31 © Copyright IBM Corp.

Core Java Guía del Estudiante Respuestas a la Unidad 1: Examen de Autoevaluación 1) b 2) c 3) d 4) b 5) b 6) a y c 7) a 8) c 9) a 10) c Unidad 1: Visión General de Java Libro 1: Core Java 32 © Copyright IBM Corp. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Expresiones y Control de Flujo Objetivos del Aprendizaje Al final de esta unidad. usted será capaz de: • • • • • • Mencionar los tipos de datos primitivos usados en Java. Explicar la precedencia de operadores en Java. Describir la declaración e inicialización de variables en Java. Explicar las diferentes estructuras de control usadas en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 1: Fundamentos de Java 33 © Copyright IBM Corp. . Discutir los diferentes operadores usados en Java. Definir los tipos de conversiones automáticas y explícitas en Java.Guía del Estudiante Core Java Unidad 2: Operadores.

2.2 etc. se encontrarán muchas similitudes entre la sintaxis de Java y C++. La Figura 2. se discute la sintaxis básica de Java. se discuten los tipos de datos que provee el lenguaje Java. también existen los genéricos que nos permiten especificar el tipo de elemento de un Colección en tiempo de compilación. Figura 2. Tipos de Datos en Java Los tipos de datos en Java son de dos tipos: • • Tipos Primitivos: Tipos de datos que mantienen valores primitivos como 10. Tipos Referencias: Tipos de datos que mantienen valores de referencia como objetos y arreglo de referencias.1 muestra los tipos de datos que Java soporta. Expresiones y Control de Flujo Libro 1: Core Java 34 © Copyright IBM Corp. por ejemplo: Double (doble). . Además de los tipos de datos en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Antes de aprender acerca de la sintaxis de programación de Java. En lugar de especificar una lista. 12. ‘a’. Introducción En esta unidad.Core Java Guía del Estudiante 1.1: Tipos de Datos en Java Unidad 2: Operadores. especificamos su contenido.

se tienen ocho tipos de datos. se les coloca identificadores definidos por el usuario al escribir código Java. 2.1 Tipos Primitivos Los tipos de datos primitivos se usan para definir variables en Java.1: Tamaño Ocupado por los Tipos de Datos Primitivos en la Memoria A continuación se discute cada uno de los ocho tipos de datos en Java.Guía del Estudiante Core Java En la Figura 2. es decir. Los nombres mostrados en la figura son las palabras claves usadas en Java para denotar estos tipos de datos. 2. short. bajo los tipos primitivos. La Figura 2. arreglos. Libro 1: Core Java . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. clases e interfaz. y char. Por ejemplo. Los tres tipos referencia. long.1. estos son: byte.1 muestra cinco tipos diferentes de tipos de datos enteros. comenzando con los tipos de datos enteros. A continuación se verá en detalle los tipos de datos primitivos usados en Java. El rango de valores que estos tipos de datos primitivos pueden almacenar se muestra a continuación: • • byte short -27 hasta 27 – 1 -215 hasta 215 – 1 Volumen 1: Fundamentos de Java 35 © Copyright IBM Corp.1. La Tabla 2.1 Tipos de Datos Enteros Los tipos de datos enteros se usan para almacenar valores enteros. El tipo de dato especificado junto con un identificador en el momento de la declaración de la variable define el rango de valores que puede ser almacenado en esta variable.1 proporciona el nombre del tipo de dato primitivo y el tamaño ocupado por cada tipo de dato primitivo en memoria. nombre[20] denota a nombre definido por el usuario como tipo arreglo. Java provee ocho tipos de datos primitivos. Tipo de Dato Primitivo boolean byte char short int Long Float Double Tamaño Ocupado en Memoria 1 byte 1 byte 2 bytes 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes Tabla 2. int.

caracter \ \’ – comilla simple ’ \" – comilla doble ” Unidad 2: Operadores. char ch = ‘a’. Una secuencia de escape es un conjunto especial de caracteres que tienen algún significado especial. Unicode provee números únicos a los caracteres.Core Java Guía del Estudiante • • int long -231 hasta 231 – 1 -263 hasta 263 – 1 Las diferentes variables de los tipos de datos enteros se declaran como se muestra en el siguiente código: byte b = 1. Todas las secuencias de escape en Java comienzan con el caracter ‘\’. el tipo de datos char esta dentro de la categoría de tipos de datos enteros. Los literales son valores constantes que son asignados a las variables. en los caracteres. El tipo de dato char se usa para almacenar caracteres. Estos caracteres deben ser caracteres Unicode. int i = 1. Expresiones y Control de Flujo Libro 1: Core Java 36 © Copyright IBM Corp. Java también usa secuencias de escape. El siguiente código muestra la declaración de una variable char. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. short s = 1. A continuación se muestran algunas secuencias de escape en Java: • • • • • • • • \r – retorno de carro \n – nueva línea \t – tabulador \b – borrado a la izquierda \f – comienzo de página \\ . Debido a que se usan números para almacenar caracteres en la máquina. En las declaraciones anteriores. mientras que las cadenas de caracteres se definen usando comillas dobles. Los literales de carácter se definen usando la comilla simple. . El rango del tipo de datos char se muestra a continuación: char 0 hasta 215 Java reserva 2 bytes para almacenar el valor de un char. que permanecen igual en cualquier plataforma o lenguaje. long l = 1. a todas las variables se les ha asignado el valor del literal entero 1.

Figura 2. La Figura 2. . Las variables literales float deben terminar con f o F.1. true o false.1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 1: Fundamentos de Java 37 © Copyright IBM Corp. double d = 1. El rango de estos tipos de datos primitivos es el siguiente: float double -3. El siguiente código muestra la declaración de una variable boolean.4 * 1038 -1.2: Literales Asignados a float y double 2. float a = 1.Guía del Estudiante Core Java Un programa Java puede interactuar con caracteres internacionales. La palabra clave boolean se usa para denotar el tipo de datos booleano.2 muestra literales que se pueden asignar a float y double.4 * 1038 hasta 3. boolean bool = true.8 * 10308 El siguiente código muestra la declaración de dos variables pertenecientes al tipo de datos de punto flotante. a menos que se programen cada conjunto de caracteres separadamente.8 * 10308 hasta 1.3 Tipo de Datos boolean El tipo de datos boolean se usa para almacenar valores booleanos.2 Tipos de Datos de Punto Flotante Los tipos de datos de punto flotante se usan para almacenar valores de punto flotante.1. lo cual no es posible en C o C++.1f. Los dos tipos de tipos de datos para punto flotante son float y double. 2. es decir.

2.1. Los identificadores usados para Unidad 2: Operadores. Para los tipos de datos enteros.2 muestra algunos ejemplos de valores aceptables para los diferentes tipos de datos primitivos en Java. Tipo de Datos Valor Aceptable 2 (se asume int) 2L 0777 (octal) 0xa5fd (hexadecimal) ‘a’. Estos serán tratados en detalle en una sección posterior en esta unidad. Por ejemplo. . el tamaño del tipo de datos es independiente de la plataforma en la cual la aplicación se ejecuta. Expresiones y Control de Flujo Libro 1: Core Java 38 © Copyright IBM Corp. clases e interfaz.12E4 2e12 2. El valor por defecto para los boolean es false. ‘\udddd’ 3. el valor por defecto es 0. donde el identificador que se usa para identificar al arreglo contiene la dirección del arreglo. Los arreglos son tipos referencia. En Java. el valor por defecto es siempre 0. el valor por defecto es \u0000.5 Tamaños de los Tipos de Datos en C. sin embargo.0F Entero Punto Flotante Boolean true. C++.2: Algunos Ejemplos de Valores para los Tipos de Datos en Java 2.14 (se asume double) 3. el tamaño del tipo de datos puede variar entre plataformas y es dependiente de la máquina. que son similares a las clases. El tamaño de cada tipo de datos primitivo es el mismo sin importar la plataforma.0d 2. Java es un lenguaje de programación orientado a objetos. el tipo de datos entero ocupa 2 bytes en ciertos compiladores de C. Por ejemplo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.4 Valores Aceptables Para Diferentes Tipos de Datos Primitivos en Java La Tabla 2. en cambio ocupa 4 bytes en otros.1. y por esto todo el esfuerzo en la programación esta alrededor de la creación de clases. Java también permite la creación de interfaces.0. Para los tipos de datos caracteres. y Java En lenguajes como C y C++. Los arreglos en Java no son referidos como tipos de datos estructurados como en C o C++. solo se mencionará que una referencia es un elemento de datos que mantiene la dirección de una posición de memoria. Un valor por defecto está siempre asociado con los tipos de datos primitivos. el tipo de datos entero siempre ocupa 4 bytes en cualquier implementación válida de la JVM. No se entrará en una discusión detallada de estos tres tipos de datos ahora.2 Tipos de Referencia Los tres tipos de referencia provistos por Java son los arreglos. Para los tipos de datos de punto flotante.Core Java Guía del Estudiante 2. false Tabla 2. ‘\n’.

Objetos y Referencias y las interfaces en el Volumen 2. Los genéricos le permiten hacer abstracciones de tipos de datos.Object. Las clases son analizadas en detalle en el Volumen 2.Conceptos Avanzados.Boolean La clase Boolean es la representación en objeto del tipo de dato primitivo boolean. se usan las clases envolventes y se proveen funciones primitivas dentro de las clases envolventes. cuando se quiere proveer algunas funciones utilitarias para un tipo de dato en particular. 2.3 Genéricos Java 5. que vienen como parte de la librería de Java. Estos serán tratados en detalle en el Volumen 8 . que requieren de un objeto en vez de una variable de tipo de dato primitivo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Java provee clases envolventes para los ocho tipos de datos primitivos. toString() y hashCode() que son sobrescritos de la clase java. También tiene ciertos métodos que se pueden usar para manipular el valor del boolean almacenado internamente. Una clase envolvente da la funcionalidad de una clase para un tipo de datos primitivo. Se discute a continuación las ocho clases envolventes en Java. Una de esas funcionalidades son los genéricos. Esta clase. es una clase envolvente para el tipo primitivo boolean. Unidad 1 – API de Colecciones. tiene un miembro del tipo boolean.1 La Clase java. Hay ciertas clases. Clases Envolventes Se han discutido varios tipos de datos primitivos de Java. Los tipos de datos primitivos tienen conjuntos de operaciones que se pueden usar con ellos. que retorna el valor del boolean que está envuelto en este objeto. Seguidamente. Unidad 1 – Clases. Los objetos de las clases envolventes se pueden usar también para este propósito. que esencialmente envuelven los tipos de datos primitivos en clases. comenzando por la clase envolvente Boolean. También tiene los métodos equals(). Puede que usted encuentre construcciones similares en otros lenguajes pero verá que hay diferencias importantes entre ellas. Unidad 5 – Clases Abstractas e Interfaces. por lo tanto. . A continuación se muestra una breve descripción sobre los genéricos.lang.Guía del Estudiante Core Java identificar a las clases e interfaces mantienen la dirección de la posición de la memoria. 3. se va a aprender acerca de clases envolventes (wrapper classes). Libro 1: Core Java Volumen 1: Fundamentos de Java 39 © Copyright IBM Corp. La clase Boolean tiene el método booleanValue().lang. Java también provee clases envolventes para cada uno de estos tipos de datos primitivos. 3.0 introduce nuevas funcionalidades al lenguaje de programación Java. Estas clases envolventes tienen métodos que permiten manipular el tipo de dato primitivo correspondiente que ellos envuelven. Sin embargo.

int. por ser una clase envolvente para el tipo primitivo short. toString() y hashCode() que son sobrescritos de la clase java. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. int. Esta clase tiene métodos que permiten obtener el valor del short almacenado en el objeto Short en la forma de byte. Esta clase.Byte La clase Byte es la representación en objeto del tipo de dato primitivo byte.2 La Clase java. la clase Byte tiene el método static valueOf() para convertir una representación de objeto String en un valor byte. Esta clase. float o double. short. Esto se hace usando los métodos: • • • • • byteValue() shortValue() intValue() floatValue() doubleValue() La clase Short también tiene los métodos equals(). 3. short.Object.lang. tiene un miembro del tipo byte. 3.Short La clase Short es la representación en objeto del tipo de dato primitivo short. Esta clase tiene métodos que permiten obtener el valor del byte almacenado en el objeto Byte en la forma de byte.lang. Unidad 2: Operadores. Estos métodos son los siguientes: • • • equals() toString() hashCode() Además de estos métodos.lang.lang. float o double. por ser una clase envolvente para el tipo de dato primitivo byte.Core Java Guía del Estudiante La clase Boolean tiene el método static valueOf() para convertir una representación de objeto String en un valor Boolean.Object. Esto se hace usando los siguientes métodos: • • • • • byteValue() shortValue() intValue() floatValue() doubleValue() de la clase La clase Byte también tiene métodos que son sobrescritos java. tiene un miembro del tipo short. Expresiones y Control de Flujo Libro 1: Core Java 40 © Copyright IBM Corp.3 La Clase java.

Libro 1: Core Java Volumen 1: Fundamentos de Java 41 © Copyright IBM Corp. floatValue() y doubleValue() respectivamente. Cuando la JVM encuentra valores int en el código.4 La Clase java. float o double usando los métodos byteValue(). al ser una clase envolvente. Así. Es posible usar los métodos provistos por esta clase para manipular variables que mantienen valores del tipo primitivo int. Cuando se usa un número como 2. ‘a’ es el carácter a. se debe usar una "L" después del entero. Esta tabla asocia a cada código Unicode definido con un nombre. Algunas de las funciones más importantes provistas por esta clase son la posibilidad de convertir un int a un String con el método toString(). convertirá 120 de int a byte. La clase Character. Se pueden obtener caracteres especiales usando secuencias de escape.lang. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . Si se quiere que la JVM lo interprete como algo diferente a un int. 3. int. Los métodos definidos en la clase Character están basados en la tabla de atributos Unicode. y de un String a un int usando el método parseInt(String s). tiene un campo del tipo primitivo char. siempre y cuando el valor pertenezca al rango válido para un byte. Así. la sentencia byte b = 120. Estos serán convertidos al momento de la asignación de valores.5 La Clase java. intValue().Integer La clase Integer es la representación en objeto del tipo de dato primitivo int. los interpretará como enteros. Los caracteres están encerrados dentro de comillas simples. Se puede usar el método charValue() de esta clase para obtener el valor char almacenado por el objeto en la forma del tipo de dato primitivo char. Un objeto Integer tiene un campo. se debe proveer información más específica. short.Character La clase Character es la representación en objeto del tipo de dato primitivo char. ‘\n’ es la secuencia de escape para el carácter de nueva línea. 3. que es del tipo primitivo int. Algunas de las funciones importantes provistas por esta clase dan la posibilidad de determinar el tipo de carácter y convertir un carácter en minúscula a mayúscula y viceversa.lang. Se pueden usar los métodos provistos por esta clase para manipular variables que mantienen valores del tipo primitivo char. Esta clase tiene métodos que permiten obtener el valor del int almacenado en el objeto Integer en la forma de byte.Guía del Estudiante Core Java La clase Short tiene el método static valueOf() para convertir una representación del objeto String en un valor Short. Si se quiere que la JVM “piense” que es del tipo long. shortValue(). la JVM asume que es del tipo int. Los otros tipos de datos enteros byte y short no pueden ser especificados.

Core Java

Guía del Estudiante

3.6 La Clase java.lang.Long
La clase Long es la representación en objeto del tipo de dato primitivo long. Esta clase, por ser una clase envolvente del tipo primitivo long, tiene un miembro del tipo long. Esta clase tiene métodos que permiten obtener el valor del long almacenado en el objeto Long en la forma de byte, short, int, float o double usando los métodos byteValue(), longValue(), intValue(), floatValue() y doubleValue() respectivamente. La clase Long tiene también los métodos equals(), toString() y hashCode() que son sobrescritos desde la clase java.lang.Object. La clase Long tiene un método static valueOf() para convertir una representación del objeto String en un valor Long.

3.7 La Clase java.lang.Float
La clase Float es la representación en objeto del tipo de dato primitivo float. Esta clase, por ser una clase envolvente del tipo primitivo float, tiene un miembro del tipo float. También tiene métodos que permiten obtener el valor del float almacenado en el objeto Float en la forma de byte, short, int, float o double usando los métodos byteValue(), shortValue(), intValue(), floatValue(), longValue() y doubleValue() respectivamente. La clase Float también tiene los métodos equals(), toString() y hashCode() que son sobrescritos de la clase java.lang.Object. La clase Float tiene el método static valueOf() para convertir una representación del objeto String en un valor Float.

3.8 La Clase java.lang.Double
La clase Double es la representación en objeto del tipo de dato primitivo double. Esta clase, por ser una clase envolvente para el tipo primitivo double, tiene un miembro del tipo double. También tiene métodos que nos permiten obtener el valor del double almacenado en el objeto Double en la forma de byte, short, int, float o double usando los métodos byteValue(), shortValue(), intValue(), floatValue() y doubleValue() respectivamente. La clase Double también tiene los métodos equals(), toString() y hashCode() que son sobrescritos de la clase java.lang.Object, así como el método static valueOf() para convertir una representación del objeto String en un valor Double. Considere el Ejemplo 2.1, que muestra el uso de las clases envolventes en Java. Ejemplo 2.1 El código Java comienza aquí...
Unidad 2: Operadores, Expresiones y Control de Flujo Libro 1: Core Java 42

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

1. /*Definicion de la clase EnvolventesEjemplo comienza aqui*/ 2. public class EnvolventesEjemplo { 3. /*El metodo main comienza aqui */ 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. public static void main(String args[]) { Integer i = new Integer(5); String s = "250.47"; System.out.println("Valor de i es: " + i.toString()); System.out.println("Valor de s es: " + Float.parseFloat(s)); Float f = Float.valueOf(s); float primitivoFloat = f.floatValue(); int primitivoInt = f.intValue(); System.out.println("Valor del primitivo float es: " + primitivoFloat); System.out.println("Valor del primitivo int es: " + primitivoInt); }/* El metodo main termina aqui */ }/*Definicion de la clase EnvolventesEjemplo termina aqui*/

El código Java termina aquí El código anterior usa varios métodos estáticos y métodos de instancia en las clases envolventes. El programa muestra el uso de las clases envolventes para Integer y Float. La salida del código anterior es la siguiente: Valor de i es: 5 Valor de s es: 250.47 Valor del primitivo float es: 250.47 Valor del primitivo int es: 250 Fin del Ejemplo 2.1 Existen otras dos clases en Java, una de ellas se ocupa de los enteros de precisión arbitraria inmutables, y la otra de números decimales con signo de precisión arbitraria inmutables. La primera clase esta representada por java.math.BigInteger y la segunda clase por java.math.BigDecimal. Dado, que ambas clases tratan también con números en Java, se van a discutir acerca de ellas brevemente.

Libro 1: Core Java

Volumen 1: Fundamentos de Java 43 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

4. Math Clases Colaboradoras sobre los Tipos de Datos
Java provee un número de paquetes. Los paquetes son contenedores para las clases, los cuales serán tratados en detalle en el Volumen 2, Unidad 7 – Paquetes. Los tipos primitivos enteros de Java no pueden efectuar operaciones sobre números largos, por esto Java provee un paquete llamado Math, que tiene dos clases, son estas: BigInteger y BigDecimal, para realizar operaciones matemáticas sobre números largos. Se aprenderá a continuación acerca de estas dos clases, BigInteger y BigDecimal.

4.1 La Clase java.math.BigInteger
Esta clase provee la abstracción de enteros de un ‘tamaño de palabra infinito’ representados por el tipo de datos int. Esta clase es inmutable, lo que significa que el valor representado por esta clase no puede cambiar; representa enteros de precisión arbitraria. BigInteger se representa usando la forma de complemento a dos, como en el caso del tipo de dato primitivo int. Todos los operadores que se pueden usar con el tipo de dato primitivo entero tienen operadores análogos que se pueden usar con BigInteger. Usando BigInteger, se pueden realizar manipulaciones de bits, verificar si un número es primo, generar un número de primo, calcular el Máximo Común Divisor, etc.

4.2 La Clase java.math.BigDecimal
Esta clase se usa para representar dígitos a la derecha del punto decimal en una escala de un entero de 32-bit. BigDecimal usa un valor sin escala que es entero de precisión arbitraria. Esta clase provee métodos que permiten realizar operaciones aritméticas básicas y manipulaciones de escala, también ayuda a comparar dos valores BigDecimal y a convertir el formato de los valores BigDecimal. La clase BigDecimal también permite especificar el comportamiento del redondeo para los valores decimales proporcionando ocho modos de redondeo. En C o C++, se usan arreglos de caracteres para representar cadenas de caracteres (strings). Java, por el contrario, provee la clase String, que se puede usar para almacenar y manipular cadenas de caracteres. Se va a examinar el manejo y manipulación de String.

5. Manejo de String
El manejo de cadenas de caracteres (string) en Java se hace usando las clases String o StringBuffer, ambas clases se usan para almacenar y manipular cadenas de caracteres. Sin embargo, hay una diferencia principal entre estas dos clases en la forma en la que son manejados por el sistema de tiempo de ejecución de Java. Se va a profundizar en estas dos clases para entender la diferencia.

Unidad 2: Operadores, Expresiones y Control de Flujo

Libro 1: Core Java 44

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

5.1 La Clase String
El literal string se usa para almacenar valores string (cadena de caracteres). La clase String se usa para denotar un literal string. Se puede especificar strings al encerrar el texto dentro de comillas dobles, es importante notar la diferencia entre comillas simples y dobles: ‘z’ no es equivalente a “z”. La primera es el carácter z, la segunda es una cadena de caracteres (string) de un carácter. El siguiente código muestra la declaración de una variable String. String str = "Hola"; El fin de una cadena de caracteres es usualmente indicado por ‘\0’. La clase String es inmutable, lo que significa que su valor no puede ser cambiado una vez que se crea un objeto del tipo String. Se pueden usar métodos definidos en la clase String para hacer lo siguiente: • • • • Examinar los diferentes caracteres que componen una cadena de caracteres. Buscar una sub-cadena dentro de una cadena de caracteres. Comparar dos cadenas de caracteres. Crear otra cadena de caracteres que tenga todos los caracteres de la primera cadena de caracteres en mayúsculas o minúsculas.

Dos cadenas de caracteres pueden ser concatenadas usando el operador "+" como se muestra en la Figura 2.3. Como String es inmutable, esta concatenación es actualmente implementada usando internamente la clase StringBuffer por Java. En la próxima sección, se discute la clase StringBuffer. String uno = "abcde"; String dos = "fghij"; String tres; tres = uno + dos; System.out.println(tres);
Figura 2.3: Uso de la Clase String

El objeto tres es creado y tiene el valor abcdefghij. 5.1.1 El paquete java.util.regex Este paquete está constituido por dos clases: la clase Matcher y la clase Pattern y por una excepción, PatternSyntaxException. Las clases son usadas para hacer corresponder secuencias de caracteres con patrones especificados por expresiones regulares.

Libro 1: Core Java

Volumen 1: Fundamentos de Java 45 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Una instancia de la clase Pattern representa una expresión regular que es especificada en forma de secuencias de caracteres con una sintaxis similar a la usada por Perl. Las instancias de la clase Matcher son usadas para hacer corresponder secuencias de caracteres con un patrón dado. La entrada (Input) es proporcionada a las clases Matcher a través de la interface CharSequence con el fin de soportar la correspondencia con caracteres procedentes de una amplia variedad de fuentes de entrada (archivos, string, etc). 5.1.2 Las clases Pattern y Matcher La clase Pattern: Es una representación compilada de una expresión regular, es decir, representa la expresión regular que necesita ser compilada. Pertenece al paquete java.util.regex. La clase Pattern implementa la interfaz Serializable. Para crear una instancia de la clase Pattern, se puede compilar una expresión regular, especificada como una cadena de caracteres (String). El patrón resultante luego puede ser usado para crear un objeto Matcher que puede hacer corresponder secuencias de caracteres arbitrarios con la expresión regular. Todo el estado involucrado en la realización de una correspondencia (match) reside en el objeto. Por lo tanto, muchos objetos Matcher pueden compartir el mismo patrón. Una secuencia de invocación típica es: Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); El método matches esta definido por esta clase como un recurso para cuando una expresión regular sea usada sólo una vez. Este método compila una expresión y hace la correspondencia (match) de una secuencia de entrada con ésta, en una invocación sencilla. La siguiente sentencia
boolean b = Pattern.matches("a*b", "aaaaab");

es equivalente a las tres sentencias anteriores aunque para correspondencias repetidas es menos eficiente ya que no permite que el patrón compilado sea reutilizado. Las instancias de la clase Pattern son inmutables y seguras para ser usadas por múltiples hilos concurrentes. Las instancias de la clase Matcher no son seguras para tal uso.

Unidad 2: Operadores, Expresiones y Control de Flujo

Libro 1: Core Java 46

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

.Guía del Estudiante Core Java La clase Matcher: La clase Matcher implementa MatchResult. • El método find. o si una invocación anterior del método fue exitosa y el matcher no ha sido reestablecido (reset) desde entonces. Si la correspondencia tiene éxito. end. en el primer caracter no correspondido por la anterior correspondencia. entonces se puede obtener más información por intermedio de los métodos start. Este método retorna verdadero si y sólo si una subsecuencia de la secuencia de entrada se corresponde con el patrón de este Matcher. Una instancia de la clase Matcher es creada a partir de un patrón mediante la invocación del método matcher de la clase Pattern. La diferencia de ese método es que no requiere que el patrón completo sea correspondido. Este método retorna verdadero si y sólo si la secuencia de entrada completa se corresponde con este patrón de Matcher. Se puede obtener más información acerca de una correspondencia exitosa haciendo una consulta del estado del matcher. y group. • El método lookingAt intenta hacer corresponder la secuencia de entrada. Como el método matches. end. una clase Matcher puede ser usada para realizar tres tipos diferentes de operaciones de correspondencia: • El método matches intenta hacer corresponder la secuencia de entrada completa con el patrón. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y group. intenta encontrar la próxima subsecuencia de la secuencia de entrada que se corresponde con el patrón. Una vez creada. y group. entonces se puede obtener más información por intermedio de los métodos start. Si la correspondencia tiene éxito entonces se puede obtener más información por medio de los métodos start. Este método retorna verdadero si y sólo si la secuencia de entrada se corresponde con este patrón de Matcher. con el patrón. end. este método siempre comienza al principio de la región. Esta clase es un motor que realiza operaciones de correspondencia sobre una secuencia de caracteres interpretando un patrón. Este método comienza al principio de la región de la clase Matcher. Si la correspondencia tiene éxito. Cada uno de estos métodos retorna un boolean indicando éxito o fracaso. comenzando desde el principio de la región. Libro 1: Core Java Volumen 1: Fundamentos de Java 47 © Copyright IBM Corp.

la cual es inicialmente cero y es actualizada por el método appendReplacement. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El estado explícito de una clase Matcher inicialmente no está definido. y luego Unidad 2: Operadores.Core Java Guía del Estudiante Una clase Matcher encuentra correspondencias en un subconjunto de su entrada (input) llamado la región. su método reset(CharSequence). La clase Matcher también define métodos para reemplazar subsecuencias correspondidas con nuevas cadenas de caracteres cuyos contenidos pueden ser. El estado implícito de una clase Matcher incluye la secuencia de caracteres de entrada así como la posición append. actualmente se implementa a través de la creación de objetos StringBuffer. Es posible que una clase Matcher sea reestablecida explícitamente al invocar su método reset() o. . si se desea. El estado explícito de una clase Matcher es computarizada de nuevo por cada operación de correspondencia. La forma en que los límites de la región interactúan con algunos constructores de patrones puede ser cambiada. se elimina la información de su estado explícito y se establece la posición append en cero. Las instancias de esta clase no deben ser usadas por múltiples hilos concurrentes. Sin embargo. El estado explícito de una clase Matcher incluye los índices de inicio y culminación de la correspondencia exitosa más reciente. Los métodos appendReplacement y appendTail pueden ser usados sucesivamente para recoger el resultado dentro de un buffer de cadena de caracteres existente. También incluye los índices de inicio y culminación de la subsecuencia de entrada capturada por cada grupo de captura en el patrón así como un conteo total de tales subsecuencias. Como una conveniencia. si se desea una nueva secuencia de entrada. o el método replaceAll más conveniente puede ser usado para crear una cadena de caracteres en la cual cada subsecuencia correspondida en la secuencia de entrada es reemplazada. ya que no son seguras. Por defecto. a diferencia de la clase String. la región contiene toda la entrada de Matcher. Cuando se reestablece una clase Matcher.2 La Clase StringBuffer La clase StringBuffer es similar a la clase String y se usa para denotar a un literal string. Expresiones y Control de Flujo Libro 1: Core Java 48 © Copyright IBM Corp. La región puede ser modificada por intermedio del método region y consultada a través de los métodos regionStart and regionEnd. StringBuffer es mutable. computados a partir del resultado de la correspondecia. Esto significa que los valores almacenados por objetos de esta clase pueden ser cambiados. StringBuffer juega un rol vital en la concatenación de cadenas de caracteres. también se proveen métodos para retornar estas subsecuencias capturadas en forma de caracteres de cadena. Ver useAnchoringBounds y useTransparentBounds para más detalles. 5. Si se intenta hacer una consulta de cualquier parte de éste antes de una correspondencia exitosa esto causará que una IllegalStateException sea lanzada.

no es necesario asignar un nuevo buffer interno.Guía del Estudiante Core Java se usa el método append() sobre los objetos creados. si x refiere a un objeto StringBuilder que contiene “lava”. . Los objetos StringBuffer se pueden usar en aplicaciones multihilos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. los cuales representan varios tipos de valores que se pueden usar en programas Java. el método insert agrega los caracteres en un punto especificado. Libro 1: Core Java Volumen 1: Fundamentos de Java 49 © Copyright IBM Corp. Las operaciones principales en StringBuilder son los métodos append e insert. Los nombres de las variables o identificadores se usan para localizar estos valores. cuando son sobrecargados para aceptar datos de cualquier tipo.insert(sb. se recomienda que esta clase sea utilizada preferiblemente en lugar de StringBuffer pues será más rápida en la mayoría de los casos. Mientras la longitud de la secuencia de caracteres contenida en el StringBuilder no exceda la capacidad. pero no se garantiza su uso bajo escenarios de sincronización. Unidad 3 – Sincronización de Hilos.“nos”) alteraría la construcción de la secuencia para contener “lavanosmanos”.length(). entonces sb. Las instancias StringBuilder no son seguras para el uso con múltiples hilos. Se aprenderá acerca de los interbloqueos en detalle en el Volumen 7. automáticamente se hace más grande.append(“manos”) del método haría que la secuencia construida contenga “lavamanos”.3 La Clase StringBuilder Esta clase proporciona un API compatible de StringBuffer. Por ejemplo. Cada constructor de StringBuilder tiene una capacidad de almacenamiento. A continuación se discuten los nombres de variables o identificadores. 5. x). Generalmente si sb refiere a una instancia de StringBuilder.append(x) tiene el mismo efecto que sb. El método append agrega siempre estos caracteres al final de la secuencia de caracteres en construcción. Cada uno convierte con eficacia un dato dado a un string y añade o inserta los caracteres de ese string al string en construcción. Fue diseñada para usarla como el reemplazo de StringBuffer en donde el string sea utilizado por un solo hilo (generalmente es el caso). Esto es una alternativa mejor que usar el operador + sobre dos objetos String. Se han discutido varios tipos de datos soportados por Java. En lo posible.insert(4. y se pueden cambiar cualquier número de veces dentro de un mismo programa Java. Si desborda el buffer interno. Estos valores son almacenados usualmente en la memoria de la pila. mientras que x. después de la llamada x. Si se necesita o requiere la sincronización entonces se recomienda que StringBuffer sea utilizado. ya que los métodos que operan en estos objetos pueden ser sincronizados para evitar la ocurrencia del interbloqueo.

La primera letra de la variable será siempre en minúsculas y las primeras letras de las palabras subsecuentes en mayúsculas (Ejemplo: numeroCuenta). Identificadores Cuando se escribe un programa se necesita almacenar los valores usados en el programa. Las palabras clave de Java no pueden usarse como nombres de variables. Por esto se usa un identificador o variable para referirnos a estas posiciones en memoria. StringBuilder es más eficiente que StringBuffer. subrayado (_) o dólar ($). StringBuffer y StringBuilder: • • • Si el texto no va a cambiar usar la clase String porque un objeto String es inmutable. No debe haber espacio entre los caracteres. Para una mejor legibilidad. No hay límite en la longitud del nombre de la variable. Estas son: • • • • • • Los nombres de variables deben comenzar con una letra. los nombres de variables deben componerse de dos o más palabras significativas. Por lo tanto cuando una aplicación necesita funcionar solamente con un hilo entonces es mejor utilizar StringBuilder. Si el texto puede cambiar. Si el texto puede cambiar y es accedido solamente por un hilo. StringBuilder y StringBuffer String es inmutable mientras que StringBuffer y StringBuilder pueden cambiar sus valores. 6. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La única diferencia entre StringBuffer y StringBuilder es que StringBuilder es asíncrono mientras que StringBuffer es síncrono. 6. utilizar un StringBuffer porque StringBuffer es síncrono. el subrayado (_) y el carácter dólar ($). Sin embargo. Estos valores se almacenan en la memoria. Los nombres de variables pueden contener letras. no hay restricción en el número de letras que se pueden usar.1 Convenciones de Nombres Hay algunas reglas que tienen que seguirse al momento de nombrar variables en Java. Expresiones y Control de Flujo Libro 1: Core Java 50 © Copyright IBM Corp. Criterios para elegir entre String. Unidad 2: Operadores. se necesita tener un método simple para acceder a estas posiciones en la memoria.Core Java Guía del Estudiante 5. y es accedido por múltiples hilos. . números.4 Diferencias entre String. utilizar un StringBuilder porque StringBuilder no es síncrono.

es decir. como se muestra en la Figura 2. Se pueden combinar ambas. 7. Unidad 7 – Paquetes). 7. la declaración y la inicialización de la variable. en un mismo paso. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.1 Alcance de una Variable Todas las sentencias de Java están especificadas dentro de un bloque (excepto para las sentencias package e import. que serán discutidas en el Volumen 2. Ahora. La declaración e inicialización consiste de los dos pasos siguientes: • Especificar el tipo de dato de la variable. para usar las variables. Aquí. seguido por el identificador.4: Declaración e Inicialización de Variable A continuación se discute el alcance de las variables. Figura 2. y edad es el identificador. La inicialización de la variable se muestra a continuación: edad = 18. Libro 1: Core Java Volumen 1: Fundamentos de Java 51 © Copyright IBM Corp. int es el tipo de dato de la variable.4. toda variable debe tener un tipo de dato asociado. Esto ayuda a saber el tipo del dato almacenado dentro de la variable o el tipo de dato que necesita ser almacenado dentro de la variable. Declaración e Inicialización de Variables Java es un lenguaje fuertemente tipificado. Se discute a continuación cómo se usa una variable. todas las palabras que son parte del nombre de la clase deben comenzar con una letra mayúscula (Ejemplo: StringBuffer). donde el valor inicial es especificado. • Inicializar la variable. como se muestra a continuación: int edad. éstas tienen que ser declaradas.Guía del Estudiante Core Java • En el caso de nombres de clase.

7.2 ilustra el alcance de una variable en un programa Java Ejemplo 2. pero no dentro del bloque externo. 5. 6. con el correspondiente carácter ‘}’.println(c). System. System. estos se denominan bloques anidados. y el fin del bloque. 1.2 El código Java comienza aquí..5: Alcance de Variables El bloque externo contiene al bloque del medio.Core Java Guía del Estudiante El inicio de un bloque se marca con un carácter ‘{‘. }/* Fin del 1er bloque */ El código Java termina aquí Del código anterior. System. que a su vez contiene al bloque interno. public class BloquePrueba { 2. b = 20.5. 8. El rango de bloques dentro de la cual una variable se puede usar se conoce como alcance de una variable.. Expresiones y Control de Flujo Libro 1: Core Java 52 © Copyright IBM Corp. Un bloque puede contener otro bloque (o cualquier número de bloques) dentro de él. /* Comienza el 1er bloque */ static int a = 10. 9. El Ejemplo 2. 3. se puede ver que las variables a y b.println(a). entonces puede ser usada dentro del bloque del medio y del interno. }/* Fin del 2do bloque */ 11.out. declaradas en el primer bloque (el bloque externo).println(b). Figura 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. 10. como se muestra en la Figura 2. 4. Suponga que una variable llamada edad se declara dentro del bloque del medio. public static void main(String args[]) { /* Comienza el 2do bloque */ int c = 30. .out. también son visibles en el segundo bloque (el bloque Unidad 2: Operadores. Considere el caso de tres bloques anidados.

multiplicación.6. +). Figura 2.Guía del Estudiante Core Java interno).? :). Los operadores aritméticos se muestran en la Figura 2. La palabra clave static se usa para especificar que estas variables son variables de clase. Operadores en Java Cuando se escribe un programa.1 Operadores Aritméticos Los operadores aritméticos se usan para indicar operaciones aritméticas como adición. Las variables usadas en estas expresiones se llaman operandos. las variables declaradas dentro del segundo bloque no son visibles dentro del primer bloque. Estas expresiones hacen uso de varios operadores y son similares a expresiones aritméticas que usan muchos operadores. Operadores de Bits. son llamados operadores unarios (ejemplo: ++). Operadores Relacionales. Java soporta los siguientes tipos de operadores: • • • • • • Operadores Aritméticos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Operadores de Asignación. Operadores Ternarios. división y módulo. lo contrario no es cierto. El alcance de una variable está limitado al bloque en la cual es declarada. Operadores Condicionales. substracción. se usan numerosas expresiones para calcular algunos valores específicos. y los operadores que requieren tres operandos se llaman operadores ternarios (ejemplo:. . 8. 8. Los operadores que requieren dos operandos se llaman operadores binarios (por ejemplo. Fin del Ejemplo 2. Sin embargo.6: Operadores Aritméticos Libro 1: Core Java Volumen 1: Fundamentos de Java 53 © Copyright IBM Corp. Existen algunos operadores que solo necesitan un operando.2 Se discute a continuación acerca de varios operadores usados en Java.

Permite multiplicar valores almacenados en dos variables. String str2 = str1 + dias. Permite substraer un valor almacenado en una variable de un valor almacenado en otra variable. String str2 = "Pedro Perez tuvo una gran caida". Permite adicionar valores almacenados en dos o más variables. Este operador se usa para concatenar dos cadenas de caracteres. La siguiente expresión ilustra el uso del operador %: a % b • • • • Entre estos operadores aritméticos. ".Core Java Guía del Estudiante • +: El operador + se usa para indicar la operación de adición. Se puede concatenar un entero con un string. ambos str3 y str4 tendrán ambos el string "Pedro Perez apoyado sobre una pared. int dias = 7.b *: El operador * se usa para indicar la operación de multiplicación. Pedro Perez tuvo una gran caida". Aquí str2 tendrá el string "Numero de dias de la semana es: 7". . String str4 = "Pedro Perez apoyado sobre una pared. Expresiones y Control de Flujo Libro 1: Core Java 54 © Copyright IBM Corp. " + "Pedro Perez tuvo una gran caida". La siguiente expresión ilustra el uso del operador +: a + b -: El operador – se usa para indicar la operación de substracción. La siguiente expresión ilustra el uso del operador –: a . La siguiente expresión ilustra el uso del operador /: a / b %: El operador % se usa para indicar la operación de módulo. Permite dividir un valor almacenado en una variable entre un valor almacenado en otra variable. como se muestra en el siguiente código: String str1 = "Numero de dias de la semana es: ". Unidad 2: Operadores. En el código anterior. El siguiente fragmento de código ilustra esto: String str1 = "Pedro Perez apoyado sobre una pared. String str3 = str1 + str2. Permite encontrar el residuo resultante de dividir un valor almacenado en una variable entre el valor almacenado en otra variable. el operador + está sobrecargado. La siguiente expresión ilustra el uso del operador *: a * b /: El operador / se usa para indicar la operación de división. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

35 y 65. dos números. el resultado de esta operación es ‘true’. caso contrario el resultado es ‘false’. La siguiente expresión ilustra el uso de este operador: a == b !=: El operador de no igual != se usa para determinar si el valor almacenado en una variable es diferente al valor almacenado en otra variable. caso contrario el resultado es ‘false’. el resultado de esta operación es ‘true’. el resultado de esta operación es ‘true’. Cuando esta condición se satisface. La siguiente expresión ilustra el uso de este operador: a <= b >=: El operador mayor o igual que >= se usa para determinar si el valor almacenado en una variable es mayor o igual que el valor almacenado en otra variable. La siguiente expresión ilustra el uso de este operador: a < b >: El operador mayor que > se usa para determinar si el valor almacenado en una variable es mayor que el valor almacenado en otra variable. Cuando esta condición se satisface. Cuando esta condición se satisface. Los diferentes operadores relacionales se listan a continuación: • <: El operador menor que < se usa para determinar si el valor almacenado en una variable es menor que el valor almacenado en otra variable. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. caso contrario el resultado es ‘false’. el resultado de esta operación es ‘true’. La siguiente expresión ilustra el uso de este operador: a >= b ==: El operador de igualdad == se usa para determinar si el valor almacenado en una variable es igual al valor almacenado en otra variable. caso contrario el resultado es ‘false’. Cuando esta condición se satisface. La siguiente expresión ilustra el uso de este operador: a > b <=: El operador menor o igual que <= se usa para determinar si el valor almacenado en una variable es menor o igual que el valor almacenado en otra variable. el resultado de esta operación es ‘true’. el resultado de esta operación es ‘true’. Cuando esta condición se satisface. y determine que sucede cuando se usan los diferentes operadores relacionales en ellos. . caso contrario el resultado es ‘false’. caso contrario el resultado es ‘false’. • • • 35 < 65 35 > 65 resulta en true resulta en false 35 <= 65 resulta en true Libro 1: Core Java Volumen 1: Fundamentos de Java 55 © Copyright IBM Corp. Cuando esta condición se satisface.Guía del Estudiante Core Java 8.2 Operadores Relacionales Los operadores relacionales se usan para comparar dos valores almacenados en variables. La siguiente expresión ilustra el uso de este operador: a != b • • • • • Tómese como ejemplo.

3 Operadores Condicionales Generalmente los operadores condicionales se usan en combinación con los operadores relacionales para determinar si una condición es true o false. Primero se evalúa el resultado de la condición a la izquierda del operando.Core Java Guía del Estudiante • • • 35 >= 65 resulta en false 35 == 65 resulta en false 35 != 65 resulta en true A veces durante la ejecución. el operador instanceof se usa como sigue para saber si mc es una instancia de la clase MiClase. Considere este ejemplo. Si la condición a la izquierda del operador resulta en false. la condición a la derecha del operador no es evaluada. Si ambas condiciones resultan en true. si esta última condición resulta en true. Si la condición a la izquierda de este operador es true. El operador instanceof devuelve true o false basado en si el operando izquierdo es una instancia del operando derecho. y el resultado de la operación es true. Si el resultado de una operación es true. entonces la condición a la derecha es evaluada. y la operación completa resulta en false. si resulta en true. puede ser necesario encontrar la clase a la que un objeto pertenece. 8. Expresiones y Control de Flujo Libro 1: Core Java 56 © Copyright IBM Corp. entonces esta operación también resulta en true. entonces el resultado de la condición a la derecha del operador es evaluado. Si la condición a la izquierda de este operador resulta en false. y al contrario. la operación completa es true. entonces la condición a la derecha no es evaluada. La siguiente expresión ilustra el uso de este operador: (a < b) && (b < c) ||: El operador || (OR) se usa para determinar si al menos uno de las dos condiciones en alguno de los lados de este operador es true. false en caso contrario. mc instanceof MiClase La sentencia anterior retorna true si es una instancia. el caso que la operación es false. La siguiente expresión ilustra el uso de este operador: (a < b) || (b < c) !: El operador ! (NOT) se usar para negar el resultado obtenido en una operación. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. entonces el resultado de la operación es true. . La siguiente expresión ilustra el uso del operador NOT: !(a < b) • • Unidad 2: Operadores. entonces el resultado de esta operación después de aplicar el operador ! es false. asumiendo que mc es un objeto definido y MiClase es una clase Java. Los tres operadores condicionales se listan a continuación: • &&: El operador && (AND) se usa para determinar si las condiciones a ambos lados del operador resultan en true o false.

La expresión var1 > var2 evalúa a false ya que 12 es mayor que 6. La operación resulta en un conjunto de bits donde las posiciones de los bits que tienen 1 indica que las posiciones correspondientes en los operandos izquierdo y derecho también tienen el valor de 1.e. 12. La sintaxis general de este operador es la siguiente: variable = expresion ? operando1 : operando2 Aquí. el valor de var1. var1 = 5 y var2 = 3. expresion es evaluada. . se quiere calcular cuál de las dos es más grande. La tabla de la verdad de un operador da el resultado de aplicar ese operador a las diferentes combinaciones de entradas. Por lo tanto. Si expresion retorna false. Java tiene un solo operador ternario llamado operador ? : . var1 = 6 y var2 = 12. 8. y asignarla a mayor. se le asigna a mayor. Si expresion retorna true. i. por esto se denominan operadores binarios. La Tabla 2. en un operador ternario aparecen tres operandos. Los operadores de bits son los siguientes: • &: El operador & (AND) se usa para comparar los patrones de bits de los operandos a la izquierda y a la derecha bit-por-bit.4 Operador Ternario Como se mencionó anteriormente. entonces operando1 se le asigna a variable. el valor de var2. Se presenta un ejemplo de código para entender mejor este operador. Por lo tanto. 5.2 muestra la tabla de la verdad para el operador de bits &. Se tienen dos variables var1 y var2.Guía del Estudiante Core Java Estos operadores requieren dos operandos. entonces operando2 se le asigna a variable. 8.5 Operadores de Bits Los operadores de bits se usan para realizar operaciones de bits (operaciones sobre diferentes conjuntos de bits). La expresión var1 > var2 evalúa a true ya que 5 es mayor que 3. es decir. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. mayor = (var1 > var2) ? var1 : var2 Se entenderá el uso del operador ternario al tomar diferentes valores para var1 y var2. se le asigna a mayor. Libro 1: Core Java Volumen 1: Fundamentos de Java 57 © Copyright IBM Corp.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La Tabla 2. como se muestra en la Figura 2. c = a & b. El resultado se obtiene al realizar la operación & en cada bit de a con el correspondiente bit de b. el resultado almacenado en c es 2 cuyo patrón de bits es 00000010. sea b = 10 cuyo patrón de bits es 00001010. Cuando se efectúa la operación de bits &. El resultado se obtiene al realizar la operación Unidad 2: Operadores. .2: Tabla de la Verdad del Operador de Bits AND (&) Sea a = 3 cuyo patrón de bits es 00000011.7: Operador de bits & • |: El operador | (OR) se usa para comparar bit-por-bit los conjuntos de bits a ambos lados del operador. Cuando se efectúa la operación de bits |. el resultado almacenado en c es 11 cuyo patrón de bits es 00001011. c = a | b. Figura 2.Core Java Guía del Estudiante Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 0 0 1 Tabla 2.3: Tabla de la Verdad del Operador de Bits OR (|) Sea a = 3 su patrón de bits es 00000011.7. y resulta en un conjunto de bits que indica si uno de los patrones de bits tiene 1 en esa posición.3 muestra la tabla de verdad para el operador de bits OR Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 1 1 1 Tabla 2. Expresiones y Control de Flujo Libro 1: Core Java 58 © Copyright IBM Corp. sea b = 10 su patrón de bits es 00001010.

9: Figura 2.4 muestra la tabla de la verdad para el operador de bits ^. c = a ^ b.9: Operador de bits ^ Operadores de desplazamiento de bits: Los tres tipos de operadores de desplazamiento se basan en el mismo concepto que consiste en desplazar los bits del operando de la izquierda (A) tantas veces como lo indica el operando de la derecha (B). como se muestra en la Figura 2. El resultado se obtiene al realizar la operación ^ en cada bit de a con el correspondiente bit de b.8. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sea b = 10 su patrón de bits es 00001010. como se muestra en la Figura 2.Guía del Estudiante Core Java OR en cada bit de a con el correspondiente bit de b. La Tabla 2. y resulta en un conjunto de bits que indica en que posiciones solo uno de los patrones de bits tiene un 1. .8: Operador de bits | • ^: El operador ^ (XOR) se usa para evaluar los conjuntos de bits a ambos lados del operador. Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 1 1 0 Tabla 2. Libro 1: Core Java Volumen 1: Fundamentos de Java 59 © Copyright IBM Corp. Cuando se efectúa la operación de bits ^.4: Tabla de la Verdad del Operador de Bits XOR (^) Sea a = 3 su patrón de bits es 00000011. el resultado almacenado en c es 9 cuyo patrón de bits es 00001001. Figura 2.

Expresiones y Control de Flujo Libro 1: Core Java 60 © Copyright IBM Corp. >>: El operador de desplazamiento hacia la derecha >> desplaza a la derecha un conjunto de bits una determinada cantidad de veces. Vea los ejemplos mostrados en la Figura 2. hay que recordar que el tipo de dato int es de 32 bits. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. en cada desplazamiento el bit de mayor orden se pierde y se coloca un cero a la derecha del número. la cantidad (n) de bits a mover supera o iguala el máximo de bits representable por el tipo de dato (32 bits para int y 64 bits para long). Unidad 2: Operadores. 64 bits y tanto short como byte son promovidos a int para ser representados en 32 bits para estas operaciones. • Si al desplazar bits de un valor numérico. >>>: El operador de desplazamiento hacia la derecha >>> desplaza a la derecha un conjunto de bits una determinada cantidad de veces. y el tipo long. sin signo Desplaza los bits de Desplaza los bits de A A hacia la izquierda B hacia la derecha B veces veces Tabla 2.5: Tabla de Operadores de Desplazamiento de bits Para realizar cualquier tipo de desplazamiento. este desplazamiento se denomina “Desplazamiento sin Signo”. en cada desplazamiento el bit de menor orden se pierde y se coloca un 0 a la derecha del número. • • <<: El operador de desplazamiento hacia la izquierda << desplaza a la izquierda un conjunto de bits una determinada cantidad de veces. los bits a desplazar serán n módulo (%) de 32 o de 64. que muestra el uso de los operadores de desplazamiento de bits. Si él operando (A) es un número negativo entonces la representación de A se hace a través de complemento a dos.10.Core Java Guía del Estudiante Operador Sintaxis Operación << A<<B >> A>>B >>> A>>>B Desplaza los bits de A hacia la derecha B veces. en cada desplazamiento se rellena el bit más significativo con su contenido previo y el bit menos significativo se pierde.

var2 var1 = var1 * var2 var1 = var1 / var2 var1 = var1 % var2 var1 = var1 & var2 var1 = var1 | var2 var1 = var1 ^ var2 var1 = var1 << var2 var1 = var1 >> var2 var1 = var1 >>> var2 Tabla 2. Por lo tanto se necesita evaluar la expresión para encontrar su valor.6: Tabla de Operadores de asignación A continuación se discute el orden de precedencia entre estos operadores.7 Precedencia Entre Operadores Una expresión puede estar compuesta de muchos operadores y operandos. El lado izquierdo de la asignación es la variable a la cual se le quiere asignar un valor.6: Operador = += -= *= /= %= &= |= ^= <<= >>= >>>= Uso var1 = var2 var1 += var2 var1 -= var2 var1 *= var2 var1 /= var2 var1 %= var2 var1 &= var2 var1 |= var2 var1 ^= var2 var1 <<= var2 var1 >>= var2 var1 >>>= var2 Equivalente var1 = var2 var1 = var1 + var2 var1 = var1 . A mayor número de operadores y operandos en una expresión mayor su complejidad.6 Operadores de Asignación Los operadores de asignación se usan para asignar valores a las variables. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Existe una convención Libro 1: Core Java Volumen 1: Fundamentos de Java 61 © Copyright IBM Corp.Guía del Estudiante Core Java Figura 2. En el lado derecho se puede tener un valor o una expresión que resultará en el valor requerido. Los diferentes operadores de asignación se muestran en la Tabla 2.10: Operadores de desplazamiento de bits 8. 8.

El operador con más alta precedencia encabeza la lista. el primer operador. la precedencia decrece. Esto se llama precedencia de operadores.11 ilustra la precedencia de los diferentes operadores en Java. Cuando se tienen operadores con igual precedencia en una expresión. Unidad 2: Operadores.Core Java Guía del Estudiante que se sigue que especifica la precedencia de cada operador sobre los otros. Figura 2. Se aprenderá a continuación cómo se permiten las conversiones en Java.11: Precedencia de Operadores en Java Las conversiones de un tipo de datos en otro es un punto importante en la programación en Java. Conforme se baja en la lista. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . de izquierda a derecha en la expresión. La lista siguiente muestra la precedencia de operadores. Expresiones y Control de Flujo Libro 1: Core Java 62 © Copyright IBM Corp. Los operadores con igual precedencia se muestran en la misma línea. La Figura 2. tiene mayor precedencia.

Esto se llama conversión de tipos. Esta conversión de tipos también es conocida como coerción automática. . 9. se puede querer asignar el valor de una variable de punto flotante a una variable entera. el compilador Java automáticamente convierte el valor del tipo de dato más pequeño al valor correspondiente en el tipo de dato más grande.1 Conversión Automática Cuando se intenta asignar un valor de un tipo de dato más pequeño a un tipo de dato más grande. Se puede querer convertir un valor de un tipo en otro tipo. Conversión Explícita. El ejemplo será como sigue: int a. Observe la Figura 2. Considere una variable b. que muestra los tipos de datos donde la coerción automática de tipos toma lugar. se quiere realizar una operación entre dos valores de diferentes tipos. El compilador Java automáticamente convierte el valor byte de b a un valor int y se lo asigna a a. pero tiene que ser asignado a una variable de un tipo diferente. y asignarlo a la variable del tipo de dato más pequeño. del tipo byte.12. y se puede hacer de dos formas: • • Conversión Automática. Algunas veces. Conversión de Tipos Puede haber situaciones donde el resultado de una expresión será de un tipo en particular.Guía del Estudiante Core Java 9. además de cuando se requiere la conversión explícita. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Cuando se intenta asignar esta variable b a una variable a del tipo int. Libro 1: Core Java Volumen 1: Fundamentos de Java 63 © Copyright IBM Corp. Esto se llama casting de tipos. Por ejemplo.2 Conversión Explícita Para asignar un valor de un tipo de dato de un tamaño más grande a un tipo de dato más pequeño. byte b = 1. no hay que preocuparse por errores de incompatibilidad de tipos. el programador tiene que explícitamente especificar que el valor debe ser convertido al valor correspondiente en el tipo de dato más pequeño. a = b. y le asigna el valor a la variable del tipo de dato más grande. //Valor de b convertido a int automáticamente 9. que tiene el valor de 1.

y se lo asigna a a.//Valor de b convertido a int explícitamente La Figura 2. al realizar la conversión explícita. el compilador Java convierte el valor int de b a un valor byte. a = (byte) b. Cuando se intenta asignar esta variable b a una variable a del tipo byte.Core Java Guía del Estudiante Figura 2.13 muestra varios ejemplos de combinaciones de tipos de datos. Expresiones y Control de Flujo Libro 1: Core Java 64 © Copyright IBM Corp. no hay que preocuparse por errores de incompatibilidad de tipos. del tipo int. int b = 1. en otros se requiere la conversión de tipos explícita. .13: Conversión Automática y Conversión Explícita Unidad 2: Operadores.12: Conversión Automática y Casting Explícito Considere una variable b. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. en algunos se aplica la coerción automática. La expresión será la siguiente: byte a. Figura 2. que tiene el valor de 1.

public class ConversionEnvolventePrimitivoEjemplo { 3. // Comparacion sobre objeto Integer if (vuelta > 5) break.Guía del Estudiante Core Java Java 5..0.5.print("Vuelta: " + vuelta++). /*Definicion de la clase comienza aqui*/ 2. // Contador de vueltas como objeto con // asignacion de un primitivo Integer vuelta = 0. // Parametros double kilometros = 2. 10. 11.out. 16. 12. /*El metodo main comienza aqui */ 4. 1.out. public static void main(String[] args) { 5. 19. while (true) { // Utilizando auto-incremento sobre objeto Integer System. 14. por ello fueron integrados los mecanismos de auto-boxing y auto-unboxing para permitir la conversión de valores primitivos hacia sus respectivos objetos envolventes de manera directa y sin mayores complicaciones. 15. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 22. 21. Libro 1: Core Java . 13. 20. 17. 8.print(" Distancia: " + vuelta * kilometros).println(" Tiempo: " + vuelta * tiempo). 6. // Operacion entre objeto Integer y primitivo int System. 7. Ejemplo 2. Bajo este esquema se introducen los siguientes terminos: Auto-boxing: Se refiere a las conversión automática de un tipo de dato primitivo a su correspondiente clase envolvente. Este tipo de conversión se realizaba manualmente por métodos proporcionados en las clases envolventes (clases Wrappers).0 ha incorporado un nuevo tipo de conversión automática entre las clases envolventes y los tipos de datos primitivos. } // Fin del ciclo While Volumen 1: Fundamentos de Java 65 © Copyright IBM Corp. int tiempo = 2.3 El código Java comienza aquí.out. Auto-unboxing: Se refiere a las conversión automática de una clase envolvente a su correspondiente tipo de dato primitivo. 9. 18.. El Ejemplo 2. // Operacion entre objeto Integer y primitivo double System.3 ilustra el uso auto-boxing y auto-unboxing en Java 5.El proceso manual se tornaba mecánico y tedioso.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5 Tiempo: 6 Vuelta: 3 Distancia: 10. Luego. Por lo tanto.0 Tiempo: 8 Vuelta: 4 Distancia: 12. }/* El metodo main termina aqui */ 24. Vea la Figura 2.14. y así sucesivamente.5 Tiempo: 10 Vuelta: 5 Distancia: 15. el índice del segundo. Si no se usan arreglos. Asuma que se necesita almacenar los nombres de 100 empleados de una compañía.5 Tiempo: 2 Vuelta: 1 Distancia: 5. Arreglos Los arreglos se usan para almacenar varios valores de un mismo tipo de datos. se tendrían que usar 100 variables diferentes para almacenar los nombres de los empleados. Los arreglos son útiles en estas situaciones. inicializar y recordar 100 nombres de variables.0 Tiempo: 4 Vuelta: 2 Distancia: 7. que representa los índices en arreglos en Java. el índice del primer elemento será 0.3 Se han estudiado los tipos de datos primitivos en Java. }/*Definicion de la clase termina aqui*/ El código Java termina aquí Salida: Vuelta: 0 Distancia: 2. Unidad 2: Operadores.0 Tiempo: 12 Del código anterior se puede observar que no fue necesario hacer ningún tipo de conversión explicita entre un primitivo y un objeto envolvente en varias ocasiones. El índice en un arreglo se usa para identificar cada elemento del arreglo. El índice del 100th elemento será 99. será 1. dentro del bloque while se realizan operaciones matemáticas e incremento en reiteradas ocasiones. . para finalizar con la comparación sobre el objeto Integer con un primitivo de tipo int.Core Java Guía del Estudiante 23. En el ejemplo anterior. sin la necesidad de usar el operador new. debido a que no se tiene que declarar. Lo primero fue la asignación de un entero de tipo int al objeto Integer. Fin del Ejemplo 2. A continuación se aprenderá acerca de los arreglos que son uno de los tipos referencias en Java. Expresiones y Control de Flujo Libro 1: Core Java 66 © Copyright IBM Corp. 10. se puede acceder al nombre de un empleado específico fácilmente usando el índice correspondiente al empleado.

donde tipo es cualquier tipo de datos presente en Java. Similarmente. Por lo que. Los arreglos sólo pueden almacenar un tipo de valor. Los arreglos son objetos propios de Java. se tiene más de una forma de crear un arreglo.7: Arreglo de Pago Básico a Empleados (Una Dimensión) La Tabla 2.14: Índices de Arreglos en Java En los arreglos también se pueden realizar funciones como ordenamiento.Guía del Estudiante Core Java Figura 2. La Tabla 2. 800 1000 2400 1200 1500 Tabla 2. Considere el caso de un arreglo de enteros. La Renta Permitida se calcula como el 20% del pago básico del empleado. int x[] = new int[5]. Por lo que ellos deben crearse usando la palabra clave new. mezcla. . a diferencia en C o C++. elementos adyacentes en el arreglo. los elementos adyacentes están separados por 2 bytes. etc. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.1 Crear Arreglos en Java En Java. cada entero toma 4 bytes en la memoria. si se tiene un arreglo de caracteres. búsqueda. Libro 1: Core Java Volumen 1: Fundamentos de Java 67 © Copyright IBM Corp. ya que el carácter ocupa 2 bytes cuando se almacena en la memoria. están separados por 4 bytes.8: Arreglo de Renta Permitida por Empleado (Una Dimensión) 10.8 muestra un arreglo de enteros usado para almacenar la Renta Permitida para cada empleado.7 muestra un arreglo de enteros usada para almacenar el pago básico de cinco empleados. 4000 5000 12000 6000 7500 Tabla 2.

12000. La Renta Permitida de cada empleado se almacena en el segundo arreglo en el índice correspondiente donde se almacena el salario base. "dos"}. String[] s1 = {"uno". Se puede también simultáneamente crear y asignar valores en los arreglos. Nota: Los arreglos en Java mantienen sus tamaños individuales. int size = x. 0}. Ejemplo 2. a diferencia de en C o C++.length. {5. El tamaño está implícito en este caso. que resume las diferentes formas de crear arreglos en Java. Expresiones y Control de Flujo Libro 1: Core Java 68 © Copyright IBM Corp. 6. Unidad 2: Operadores.15. int x[] = {5. 2.4 ilustra como acceder a cada elemento del arreglo.2.15: Crear de Arreglos en Java El programa a continuación declara dos arreglos unidimensionales. Considere lo siguiente: int x[] = int []x = {5. El siguiente comando retornará la longitud del arreglo x. Hay también otras formas de crear arreglos en Java.2. Un arreglo se usa para almacenar el pago básico de cinco empleados (inicializados con su salario base). 5000. El Ejemplo 2. public class ArregloUnidimensionalEjemplo { 3. Considere la Figura 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. "dos"}.Core Java Guía del Estudiante Los arreglos necesitan ser inicializados antes de ser usados. public static void main(String args[]) { 5. "dos"}. Figura 2.0}. /*Definicion de la clase comienza aqui*/ 2.4 El código Java comienza aquí… 1. que ya ha sido creado. String[] s2 = new String[]{"uno". float arregloFloat[] = new float[10]. que retorna el tamaño del arreglo. Las instrucciones anteriores inicializan un arreglo con tres valores enteros. /*El metodo main comienza aqui */ 4.0}. // Arreglo sueldo basico emppleado double empSueldo[] = {4000. . Esto se hace de la siguiente manera: String [] s = new String[] {"uno". Los arreglos tienen un miembro llamado length.

0 2400. 6000. }// Fin del ciclo for System. En lugar de usar dos arreglos unidimensionales. 9. i < 5. 7500}. 14. i < 5.println("Detalle Sueldo basico y Renta"). 20.println(empSueldo[i] + "\t" + empRenta[i]). 17. puede usar un arreglo bidimensional. 18. 12. // Arreglo renta permitida por emppleado double empRenta[] = new double[5].0 1000.2 * empSueldo[i]. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del código anterior es la siguiente: Detalle Sueldo basico y Renta 4000.0 800.Guía del Estudiante Core Java 7. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 19. 13.4 En el programa anterior se usan dos arreglos separados para almacenar el salario base y la Renta Permitida de los empleados. for (i = 0. for (i = 0. como se muestra en la Tabla 2.0 Fin del Ejemplo 2.0 1200. 8.0 1500.out. i++) { empRenta[i] = .0 6000. 15.0 5000. 16. 11.0 12000. i++) { System. Este arreglo bidimensional puede ser visualizado como una tabla con cinco filas (una por cada empleado) y dos columnas (una para el salario base y otra para la Renta Permitida). Libro 1: Core Java Volumen 1: Fundamentos de Java 69 © Copyright IBM Corp. 10.0 7500.9.out. }// Fin del ciclo for }/* El metodo main termina aqui */ 21. int i. Estos son arreglos unidimensionales. .

0}. i < 5. 22. 19. { 5000. }// Fin lazo for Unidad 2: Operadores. {12000. 15. 20. 16.0. i++) { for (j = 0. 9.. public static void main(String args[]) { 5. 0}. 12.9: Arreglo de Salario Base y Renta Permitida por Empleado (Bidimensional) El Ejemplo 2. 10. 7. /*Definicion de la clase comienza aqui*/ 2. 0}. 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. j++) { if (j == 0) basico = empArreglo[i][j]. int i. double basico = 0. /* Metodo main comienza aqui */ 4. .Core Java Guía del Estudiante 4000 5000 12000 6000 7500 800 1000 2400 1200 1500 Tabla 2. else empArreglo[i][j] = 0. 21. 8. 17. 6. j. 0}. 11. 13.2 * basico. 0} }. { 7500. 14. { 6000.5 muestra como trabajar con arreglos de dos dimensiones en Java. Expresiones y Control de Flujo Libro 1: Core Java 70 © Copyright IBM Corp. j < 2. 23. Ejemplo 2. 18. // Arreglo sueldo basico y renta // permitida por emppleado double empArreglo[][] = { { 4000.. for (i = 0.5 El código Java comienza aquí. public class ArregloBidimensionalEjemplo { 3.

out. 31.5 El programa anterior ilustra la creación y el uso de un arreglo bidimensional en Java.Guía del Estudiante Core Java 24. 26. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 30. Si la condición evaluada es verdadera.0 800.0 5000. break y continue. Estructuras de Control Las estructuras de control en Java le permiten al programador controlar el flujo de ejecución del programa. Seguidamente se estudiará la forma en la cual se pueden añadir más dimensiones a un arreglo en Java.0 1000.print(empArreglo[i][j] + "\t"). Java provee estructuras de control como otros lenguajes de programación. 33.0 6000.out.out.println().0 12000. 29. while. for. la sentencia que sigue a la construcción if es ejecutada. 25.0 Fin del Ejemplo 2. do while y switchcase. }// Fin lazo for }/* Metodo main termina aqui */ }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del código anterior es como sigue: Detalle Sueldo basico y Renta 4000.0 7500. 27. Asociadas con estas construcciones están las sentencias.1 La Construcción if–else La construcción if-else se usa cuando se necesita decidir cual de los caminos disponibles va a ser tomado basados en cierta condición. 11.0 1200.0 1500. Libro 1: Core Java Volumen 1: Fundamentos de Java 71 © Copyright IBM Corp. System. 11. Las diferentes estructuras de control (llamadas también construcciones) disponibles en Java son: if-else. i < 5. 28. .0 2400. j < 2. }// Fin lazo for System. A continuación se aprenderá acerca de ellos. j++) System. i++) { for (j = 0. 32. for (i = 0.println("Detalle Sueldo basico y Renta").

Esto se conoce como sentencias if-else anidadas. por el otro lado. Una sentencia que termina con un punto y coma se llama una sentencia simple. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } Nota: El punto y coma se usa como delimitador para todas las sentencias en Java. La sintaxis de la construcción if…else es como sigue: if (booleanExp) sentencia1. Las sentencias compuestas son un conjunto de sentencias simples que tienen una funcionalidad común. Se puede tener una construcción if-else dentro de otra. . Si la condición que es evaluada es falsa. . .Core Java Guía del Estudiante La sintaxis de la construcción if es como sigue: if (booleanExp) sentencia. Java requiere que el resultado de booleanExp sea de tipo Booleano. else sentencia2. sentenciaN. . Expresiones y Control de Flujo Libro 1: Core Java 72 © Copyright IBM Corp. sentencia2. . . entonces las sentencias que siguen a la construcción else son ejecutadas. y por esto se les considera como un bloque. No existe restricción en el nivel de complejidad de esta Unidad 2: Operadores. . en caso contrario el compilador de Java genera un error. conjuntos de sentencias que están encerradas dentro de llaves se denominan sentencias compuestas. La estructura general de la sentencia if-else se muestra a continuación: if(booleanExp){ sentencia1. sentenciaN. sentencia2. } else{ sentencia1.

} else{ if(booleanExp2){ sentencia1. sentencia2. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentenciaN. Libro 1: Core Java Volumen 1: Fundamentos de Java 73 © Copyright IBM Corp. else sentencia1.16. . . if(condicion2){ sentencia1. . } Considere el segmento de código mostrado en la Figura 2.Guía del Estudiante Core Java construcción. . que ejemplifica el uso de la construcción if-else. sentenciaN. . } else sentencia1. . La estructura general de una sentencia if-else anidada se muestra a continuación: if(booleanExp1){ .

incrementoExp){ sentencia1. . El ciclo for puede también tener sentencias compuestas. booleanExp.Core Java Guía del Estudiante Figura 2. Si la condición resulta Unidad 2: Operadores. expresión de incremento y cuerpo. booleanExp. El contador es revisado contra la condición requerida antes que las sentencias en el cuerpo del ciclo sean ejecutadas. . Expresiones y Control de Flujo Libro 1: Core Java 74 © Copyright IBM Corp. sentencia2. expresión booleana. Este contador es inicializado a un valor apropiado en la parte de inicialización. . . El ciclo for usa un contador para llevar el número de veces que el ciclo ha sido ejecutado. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La sintaxis general del ciclo for se muestra a continuación: for (inicializacion. y es actualizado en la parte de actualización.2 El Ciclo for El ciclo for se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición se satisfaga o para realizar un conjunto de operaciones infinitamente. } Se puede ver que el ciclo for tiene cuatro partes. siendo éstas: inicialización. La estructura general de un ciclo for con más de una sentencia se muestra a continuación: for(inicializacion. encerradas dentro de { }. La sintaxis anterior muestra sólo una sentencia dentro del ciclo for. sentenciaN.16: Uso de la Construcción if-else 11. donde el incremento toma lugar. incrementoExp) sentencia.

booleanExp. ){ sentencia1. Figura 2. la sentencia siguiente al final del ciclo for se ejecuta. sentenciaN. i++){ suma = suma = a[i]. for (int i = 0. y si resulta en false. . sentencia2. for(inicializacion.println("suma = " + suma). . La estructura general de un ciclo for anidado se da a continuación: for(inicializacion. } . Se pueden tener ciclos for anidados. como sigue: for( . int suma = 0. booleanExp. } System. . 4. incrementoExp){ sentencia1.17. i<a.out. incrementoExp){ sentencia1. No hay restricción en el número de ciclos for que se pueden tener dentro de un ciclo for. . 3. El ciclo for que se muestra a continuación calcula la suma de todos los elementos de un arreglo. que muestra el uso del ciclo for en Java. 2. en los cuales se tiene un ciclo for dentro de otro. . sentenciaN. 5}. sentencia2. int a[] = {1. las sentencias en el cuerpo del ciclo for son ejecutadas.Guía del Estudiante Core Java en true. . . Libro 1: Core Java Volumen 1: Fundamentos de Java 75 © Copyright IBM Corp.length.17: Uso del Ciclo for Se puede tener un ciclo infinito también. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } Considere la Figura 2.

También se puede alcanzar la misma funcionalidad de ciclos usando los ciclos while en Java. pero esta expresión también puede ser usada para decrementar este contador.Core Java Guía del Estudiante sentencia2. 3. //suma += numero.out. Java 5.0 ha incorporado una nueva sintaxis para el ciclo for. que muestra el uso del ciclo for en Java 5. Unidad 2: Operadores. La nueva sintaxis del ciclo for se muestra a continuación: for ([Tipo] identificador : arreglo|coleccion){ sentencia1. El ciclo for que se muestra a continuación hace lo mismo que el ejemplo de la Figura 2. 2. } En la discusión de la construcción for. 5}. se ha estado usando incrementoExp. El uso de las Colecciones serán tratadas en detalle en el Volumen 8 – Conceptos Avanzados. sentenciaN. sentenciaN. . . } Observe el siguiente ejemplo.0 con la nueva sintaxis. Expresiones y Control de Flujo Libro 1: Core Java 76 © Copyright IBM Corp.17. . int a[] = {1. sentencia2. .println("suma = " + suma). } System. for (int numero : a) { suma = suma + numero. int suma = 0. con el cual se pretende simplificar su uso. . 4. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 1 – API de Colecciones. para hacer referencia a la expresión de incremento del contador del ciclo.

La estructura general del ciclo while. Libro 1: Core Java Volumen 1: Fundamentos de Java 77 © Copyright IBM Corp. La Figura 2. el ciclo while puede también tener más de una sentencia en el cuerpo del ciclo.Guía del Estudiante Core Java 11. o para realizar un conjunto de operaciones infinitamente. las sentencias en el cuerpo del ciclo son ejecutadas. sentenciaN. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. la sentencia que sigue al final del ciclo while es ejecutada. sentencia2. . es la siguiente: while(booleanExp){ sentencia1. } Si la condición booleanExp resulta en true. Un segmento de código escrito usando el ciclo for puede ser convertido en un ciclo while y viceversa.18 muestra el uso del ciclo while para encontrar la suma de todos los elementos de un arreglo. La sintaxis general del ciclo while es la siguiente: while (booleanExp) sentencia. y si resulta en false. donde el cuerpo del ciclo tiene más de una sentencia.3 El Ciclo while El ciclo while se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición es satisfecha. Como en el ciclo for. . .

. sentencia2. int suma = 0. sentenciaN. Figura 2.length){ suma = suma + a[i]. en los que se tiene un ciclo while dentro de otro. } System.Core Java Guía del Estudiante int a[] = {1. Expresiones y Control de Flujo Libro 1: Core Java 78 © Copyright IBM Corp. 4. sentencia2. while(booleanExp2){ sentencia1. i = i + 1.println("suma = " + suma). } También se puede tener un ciclo while infinito. 2. while (i < a. 3. sentencia2. Unidad 2: Operadores. . como sigue: while( true ){ sentencia1.18: Uso del Ciclo while Se pueden tener ciclos while anidados. 5}. . La estructura general de esta forma del ciclo while se da a continuación: while(booleanExp){ sentencia1. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentenciaN. } . No hay restricción en el número de ciclos while que se pueden tener dentro de un ciclo while. // suma += a[i++].out. . . int i = 0. .

} 11. El código escrito usando el ciclo do-while puede ser convertido en un ciclo while o a un ciclo for y viceversa. Considere la Figura 2.Guía del Estudiante Core Java . . Libro 1: Core Java Volumen 1: Fundamentos de Java 79 © Copyright IBM Corp. } while (booleanExp). La estructura general de un ciclo do-while que tiene más de una instrucción en su cuerpo se da a continuación: do{ sentencia1.19. las sentencias en el cuerpo del ciclo do-while son ejecutadas nuevamente. Esto garantiza que las sentencias en el cuerpo del ciclo do-while son ejecutadas al menos una vez. y si el resultado es false. a diferencia del ciclo while y el ciclo for. Se puede comparar el ciclo do-while con el ciclo for. }while(booleanExp). sentencia2. Note que las sentencias se ejecutan antes de preguntar por la condición. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentenciaN.4 El Ciclo do-while El ciclo do-while se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición sea satisfecha. o para realizar un conjunto de operaciones infinitamente. . La siguiente instrucción muestra la sintaxis general del ciclo do-while. en donde si la condición no es cumplida la primera vez nunca se ejecutan las sentencias ubicadas dentro de estos ciclos. o un ciclo while. Si la condición resulta en true. do { sentencia. sentenciaN. la sentencia que esta después del final del ciclo do-while es ejecutada. muestra el uso del ciclo do-while para calcular la suma de todos los elementos de un arreglo.

// suma += a[i++]. . . La estructura general de los ciclos dowhile anidados se muestra a continuación: do{ sentencia1. } while(booleanExp2). do{ sentencia1. }while (i < a. No hay restricción en el número de ciclos do-while que se pueden tener dentro de otro ciclo do-while. Figura 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Libro 1: Core Java 80 © Copyright IBM Corp. sentenciaN. i = i + 1. en el cual se tienen ciclos dowhile dentro de otros. 4. sentencia2. como sigue: do { sentencia1. Unidad 2: Operadores. int suma = 0. . . . . Se puede tener un ciclo do-while infinito también.length). sentenciaN } while(booleanExp). int i = 0. sentencia2. do{ suma = suma + a[i]. . sentencia2. 3.println("suma = " + suma). 2. 5}.Core Java Guía del Estudiante int a[] = {1.19: Uso del Ciclo do-while Se pueden tener dos o mas ciclos do-while anidados. System.out.

.Guía del Estudiante Core Java . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentencia2. . } while( true ). sentenciaN. . sentenciaN break. sentenciaN break. 11.5 La Construcción switch-case La construcción switch-case se usa para realizar una (o algunas) de varias operaciones basadas en el resultado de una condición. case val2: sentencia1 sentencia2 . Libro 1: Core Java Volumen 1: Fundamentos de Java 81 © Copyright IBM Corp. sentenciaN break. default: sentencia1. . . . . case valN: sentencia1 sentencia2 . La estructura general de la construcción switch-case se da a continuación: switch(valor){ case val1: sentencia1 sentencia2 .

if(condicion) continue.20. 11. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La sentencia break ocasiona que el flujo de control salga de la construcción switch-case. } 11. i++){ sentencia1 . if(booleanExp) break. for(int i = 0. sentenciaN. todas las sentencias que están después del case que concuerde hasta el fin del bloque. sentenciaN } Considere la Figura 2.7 La Sentencia continue La sentencia continue se usa para regresar el flujo de ejecución al inicio del bloque más interno donde es ejecutada. se usa la sentencia break después de que todas las instrucciones dentro de un case particular son ejecutadas. .6 La Sentencia break La sentencia break se usa para sacar el control del flujo de ejecución del bloque más interno donde es ejecutado de forma que la sentencia siguiente al bloque sea ejecutada. sentenciaN. } Aquí. for(int i = 0. Lleva el flujo de control al inicio del ciclo.Core Java Guía del Estudiante . Expresiones y Control de Flujo Libro 1: Core Java 82 © Copyright IBM Corp. i++){ sentencia1. Unidad 2: Operadores. que muestra las sentencias break y continue. serán ejecutadas. Si no se usa la sentencia break. i<10. El siguiente código muestra el uso de la sentencia break en un ciclo for para sacar el flujo de control fuera del ciclo. A continuación se aprenderá acerca de las sentencias break y continue. . i<10. El siguiente código muestra el uso de la sentencia continue en un ciclo for.

.20: Uso de las Sentencias break y continue 11. El siguiente extracto de código muestra como se utilizan el break y el continue con etiquetas. Como se recordará la sentencia break cambia el control del flujo de ejecución para que se dirija fuera del ámbito donde se ubicaba dicha sentencia. La sentencia que se identifica se refiere a cualquier sentencia simple o bloque de sentencias. Existe otra modalidad de break que hace que el flujo de control salte fuera de un ciclo identificado con una etiqueta. Libro 1: Core Java Volumen 1: Fundamentos de Java 83 © Copyright IBM Corp.. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Ya se ha estudiado el uso de la sentencia break. .8 Las Sentencias break y continue con Etiquetas Las etiquetas permiten identificar las sentencias. El código Java comienza aquí. //etiquetaUno identifica a un ciclo De igual manera la sentencia continue se puede utilizar como una sentencia etiquetada. Esto se hace ubicando antes de la sentencia un nombre seguido por dos puntos (:). La sintaxis general se muestra a continuación: break etiquetaUno. La sintaxis de una sentencia continue con etiqueta es la siguiente: continue etiquetaDos. Su forma general es: etiqueta:sentencia. //etiquetaDos identifica a un ciclo Una particularidad de la sentencia continue en comparación con la sentencia break es que siendo o no etiquetada sólo puede estar ubicada dentro de ciclos iterativos. La diferencia es que esta instrucción hace que el flujo de control se dirija a una sentencia identificada mediante una etiqueta.Guía del Estudiante Core Java Figura 2.

9. permitiendo que el ciclo más externo realice las dos iteraciones establecidas por su condición.i++){ System.println("En Ciclo Uno"). Si la línea (10) del fragmento de código anterior se sustituye por la línea: break etiquetaDos. La variable j nunca valdrá 2. if(j==1) break etiquetaUno.println("En Ciclo Dos"). } El código Java termina aquí Salida: En Ciclo Uno En Ciclo Dos En Ciclo Dos Cuando j sea igual a 0. 5. para i =0 e i =1 respectivamente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. if(j==2) 12. 7.i<2. es decir.j++ ){ System. continue etiquetaUno. La salida al ejecutar dicha aplicación será: En En En En En En Ciclo Ciclo Ciclo Ciclo Ciclo Ciclo Uno Dos Dos Uno Dos Dos Cuando j es igual a 1. Expresiones y Control de Flujo Libro 1: Core Java 84 © Copyright IBM Corp. 8. el control de flujo permanecerá en el ciclo más interno y continuará la ejecución para la iteración donde j es igual a 1. if(j==0) continue. 2. terminado así con la ejecución del código. Unidad 2: Operadores.out. 10.Core Java Guía del Estudiante 1. 6. } 14. etiquetaDos: for(int j=0. 3. etiquetaUno: for(int i=0.out. Cuando j es igual a 1. el control de flujo sale fuera del ciclo más interno únicamente. 4.j<2. 11. . el control de flujo sale fuera del ciclo principal y en consecuencia fuera del ciclo más interno. 13.

.Guía del Estudiante Core Java Nota: Sí la línea (8) del fragmento de código anterior se sustituye por la línea: continue etiquetaUno. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La salida al ejecutar dicha aplicación será: En En En En Ciclo Ciclo Ciclo Ciclo Uno Dos Uno Dos Libro 1: Core Java Volumen 1: Fundamentos de Java 85 © Copyright IBM Corp.

Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Definir los tipos de conversiones automática y explícita en Java. Mencionar los diferentes operadores usados en Java. Explicar las diferentes estructuras de control usadas en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Libro 1: Core Java 86 © Copyright IBM Corp. Unidad 2: Operadores. Explicar la precedencia de operadores en Java. . usted debe ser capaz de: • • • • • • Discutir los tipos de datos primitivos en Java. Describir la declaración e inicialización de variables en Java.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. una variable boolean puede almacenar un valor de 0 o 1. . a) Verdadero b) Falso 2) ¿Cuáles de los siguientes pertenecen al tipo de datos entero? a) array b) double c) char d) byte 3) ¿Cuál de las siguientes codificaciones se usa para codificar caracteres en Java? a) Unicode b) ASCII c) Bytecode d) Codificación Internacional 4) ¿Qué tipo de operador es '|'? a) Operador de Bits b) Operador Lógico c) Operador Condicional d) No existe este operador 5) ¿Cuál de los siguientes grupos de operadores tienen una prioridad más alta que los operadores de igualdad? a) Unarios b) Relacionales c) De Bits d) De desplazamiento 6) ¿Para cuál de los siguientes tipos primitivos están disponibles clases envolventes? a) int b) byte c) float d) char Libro 1: Core Java Volumen 1: Fundamentos de Java 87 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 2: Examen de Autoevaluación 1) En Java.

.) en un programa Java? a) Ocurre un error de compilación b) No se entra al ciclo c) El ciclo se ejecuta infinitas veces d) Ninguna de las anteriores 8) ¿Cuál de las siguientes sentencias se usa para salir de un ciclo? a) break b) continue c) exit d) Todas las anteriores 9) ¿Cuál ciclo en Java evalúa la expresión boolean al final del ciclo? a) while b) for c) switch d) do-while 10) Un ciclo do-while se ejecuta al menos una vez aún si la condición revisada es false.Core Java Guía del Estudiante 7) ¿Qué pasa cuando se usa for(. Expresiones y Control de Flujo Libro 1: Core Java 88 © Copyright IBM Corp. a) Verdadero b) Falso Unidad 2: Operadores. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante Core Java Respuestas a la Unidad 2: Examen de Autoevaluación 1) b 2) c y d 3) a 4) a 5) a. . b. b y d 6) a. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. c y d 7) c 8) a 9) d 10) a Libro 1: Core Java Volumen 1: Fundamentos de Java 89 © Copyright IBM Corp.

Trabajar con ciclos en Java. Expresiones y Control de Flujo Libro 1: Core Java 90 © Copyright IBM Corp.Core Java Guía del Estudiante Unidad 3: Lab. . Usar arreglos en Java. de Operaciones. Usar operadores de bits. de Operaciones. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Objetivos del Aprendizaje Al final de esta unidad. Unidad 3: Lab. usted será capaz de: • • • • Trabajar con operadores aritméticos.

Sume. Inicialice las variables con cualquier valor aceptable de su elección y demuestre el uso de estos operadores. multiplique y divida estas dos variables e imprima los resultado en la salida estándar. Verifique si la suma de los cubos es igual a la variable contadora.) en una forma adecuada! : 31 : 0 Unidad 3: Lab. etc. Eleve al cubo cada uno de los dígitos y súmelos. Extraiga cada dígito de la variable contadora. 2) Escriba un programa en Java usando.*. | y ^). reste. Si son iguales. de Operaciones. Realice un AND (&). La oración puede contener letras.. un ciclo while o un do-while. Expresiones y Control de Flujo 91 © Copyright IBM Corp. Consejos Útiles: • • • • Cree una clase llamada Calculadora. Se requiere que se escriba un programa de Java que cuente el número de letras. Declare dos variables enteras e inicialícelas con dos valores (por ejemplo 10 y 5). imprima el mensaje ‘Este es un número Armstrong’.Guía del Estudiante Core Java Ejercicios de Laboratorio 1) Escriba un programa para crear una clase llamada Calculadora que usa operadores aritméticos y también operadores de bits (&. Un número Armstrong es aquel que satisface la siguiente condición: a3 + b3 + c3 = abc. dígitos y caracteres especiales. Este es un ejemplo de un número Armstrong : 13 + 53 + 33 = 153 Consejos Útiles: • • • • • • Cree una clase llamada NumerosArmstrong. 3) Se da como entrada para un programa Java una oración larga terminada con un carácter nuevalinea. para imprimir el conjunto completo de los números Armstrong de tres dígitos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . espacios en blanco. OR (|) y un XOR (^) bits en estas dos variables e imprima los resultado en la salida estándar. además de otros caracteres y los muestre de la siguiente forma: Ejemplo : Entrada Salida : Letras Dígitos Libro 1: Core Java : ¡Muéstrelos (:. Escriba un ciclo for con el valor de la variable contadora variando desde 100 hasta 999. dígitos.

El programa debe imprimir: Monedas de 500: 2 Monedas de 100: 2 Monedas de 50: 0 Monedas de 20: 1 Monedas de 10: 1 Monedas de 5: 1 Monedas de 2: 2 Monedas de 1: 0 Unidad 3: Lab.. y 1 dólar están disponibles.100. Use el método Character. de Operaciones. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.isDigit() para revisar si un carácter en el arreglo es un dígito y cuente el número de dígitos. ni un espacio en blanco. “¡Muéstrelos (:. Use el método Character.50. espacios en blanco y otros caracteres en la salida estándar.2. • • • • • 4) Escriba un programa que encuentre el mínimo número de billetes tipo moneda requeridos para formar un monto específico (no se necesita tomar la entrada del usuario) asuma que los billetes moneda de denominaciones 500.*. etc. dígitos. Declare una variable String.) en una forma adecuada!\n”. Use el método Character.isLetter() para revisar si un carácter en el arreglo es una letra y cuente el número de letras. .isWhitespace() para revisar si un carácter en el arreglo es un espacio en blanco y cuente el número de espacios en blanco. Cuente el número de caracteres clasificados como otros. usando el método toCharArray() de String.5. se clasifica como otros. ni un dígito. Expresiones y Control de Flujo Libro 1: Core Java 92 © Copyright IBM Corp.20.10. Cree un ciclo for (haciendo uso de su nueva sintaxis). Si el carácter en el arreglo no es ni una letra.Core Java Guía del Estudiante Espacios en blanco : 6 Otros : 10 Consejos Útiles: • • • • Escriba una clase llamada Contador. Imprima el número de letras. str e inicialícela con la oración por ejemplo. Si el monto es 1239. que opere con el arreglo de caracteres y asigne cada uno de los elementos en una variable Character llamada caracter. Forme un arreglo de caracteres a partir de la variable str.

Guía del Estudiante Core Java Consejo: Puede usar algunos métodos relacionados a caracteres en la cuarta pregunta. Escriba una clase llamada MinimoMonedas. Declare una variable entera llamada numero e inicialícela con un entero válido (por ejemplo 54321). 10. 20. de Operaciones. Libro 1: Core Java Unidad 3: Lab. .lang. Expresiones y Control de Flujo 93 © Copyright IBM Corp. 50. Consejos Útiles: • • • 5) Calcule la denominación de 500. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. la cual requiere de la clase Character que está disponible en el paquete java. 100. 2 y 1 billetes de dólar que formarán el 54321 e imprímalos en la salida estándar. 5.

.

Guía del Estudiante Core Java Volumen 2: Programación Orientada a Objetos Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 95 © Copyright IBM Corp. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

.

Describir el manejo de memoria en Java. usted será capaz de: • • • • • • • • • • • Explicar los conceptos de clases y objetos. Discutir acerca de la estructura y miembros de una clase Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar la necesidad de y uso de constructores para una clase. Exponer el uso de Enumeraciones. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 97 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 1: Clases y Objetos Objetivos del Aprendizaje Al final de esta unidad. Explicar los modificadores de acceso. Explicar el ciclo de vida de un objeto. Discutir cómo Java maneja los argumentos de línea de comandos. Definir y usar clases anidadas. Definir variables y métodos en Java. . Explicar cómo los métodos en una clase Java pueden ser sobrecargados.

Ambos tienen algunos atributos en común como el nombre. se discuten clases y objetos en Java. Introducción En el volumen anterior. Los atributos se representan como variables y el comportamiento como métodos en una clase Java. los valores de los atributos serán diferentes y específicos para cada persona. dado anteriormente. nombre. en clases y objetos de software. Se estudiaron los operadores. Todos los días. John Davenport y Edna Smith son estudiantes en una universidad. edad. Cualquier instancia creada a partir de la plantilla se denomina un objeto. cursos registrados. A continuación se aprenderá más acerca de clases y objetos. En esta unidad. 2. se les va a definir formalmente. Aunque ellos comparten este conjunto de atributos. se tuvo una visión general de la programación en Java. calificaciones obtenidas y otros. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. etc. nombre. número de identidad. son empleados numerosos objetos en nuestras vidas. El proceso a través del cual una instancia (objeto) se crea se llama instanciación.1 muestra el modelo de software de un estudiante en una clase Estudiante. número de estudiante. nombre de la universidad. cursos registrados. tipo de carro. En un escenario orientado a objetos. Por ejemplo. John y Edna son objetos de la clase estudiante y sus carros son objetos de la clase carro. La Figura 1. estatus del estudiante. Similarmente. carrera estudiando. Algunos de los atributos comunes a esta categoría son: número de placa del carro. Clases y Objetos Una vez vistos algunos ejemplos del mundo real de clases y objetos. calificaciones obtenidas. y así sucesivamente. algunos de los cuales tienen ciertas características comunes que los hacen pertenecer a una categoría particular. . carrera estudiante. Una clase es una entidad auto contenida que provee una plantilla (framework) para definir atributos y comportamiento encontrados comúnmente en objetos de software pertenecientes a un tipo en particular. fecha de fabricación. Se puede modelar el ejemplo de Estudiante. edad. número de identificación del estudiante. el carro de John y el de Edna pertenecen a una categoría llamada carro. Unidad 1: Clases y Objetos Libro 1: Core Java 98 © Copyright IBM Corp. Se tendrá una clase Estudiante que define atributos como: género. expresiones y sentencias de control de flujo. que son comunes a cualquier estudiante. estatus.Core Java Guía del Estudiante 1.

se pueden crear cualquier número de objetos de ella. El código Java que permite hacer esto se muestra a continuación: Estudiante estudiante = new Estudiante(“Edna Smith”). El género del estudiante se almacena como carácter (m para indicar masculino y f para indicar femenino). se muestra en la Figura 1. El atributo nombre de este objeto será el nombre de estudiante Edna Smith. llamado estudiante. se necesita un constructor. Aquí una variable String se usa para almacenar el nombre del estudiante. Un constructor es un método (un método es similar a una función en C o C++). Una variable entera se usa para almacenar la edad del estudiante. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 99 © Copyright IBM Corp. Un constructor también inicializa el objeto con valores por defecto. para representar a la estudiante Edna Smith. .1: Modelo de un Estudiante del Mundo Real como Clase En la figura anterior.2. Una vez modelada la clase. que tiene el mismo nombre de la clase. En el ejemplo anterior. Esto se verá en detalle en la sección Constructores de una Clase.Guía del Estudiante Core Java Figure 1. Para crear un objeto de la clase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Un objeto creado de esta forma. que pueden ser definidos dentro del constructor. se listan algunos de los atributos de la clase Estudiante. se puede usar el método Estudiante() para crear un objeto de la clase Estudiante.

McDonald and T.3: Objetos Creados de la Clase Estudiante Estos objetos son diferentes entre sí. Los métodos que están disponibles en estos objetos son los mismos. De aquí que sean llamadas instancias de la clase. como: setNombre.Core Java Guía del Estudiante Figure 1. Figura 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los datos en cada uno de estos objetos son diferentes.) y se les puede asignar valor a los atributos mediante los métodos setter (métodos que comienzan con la palabra set. La Figure 1. etc. etc. Hughes.3 muestra tres objetos creados de la clase Estudiante para representar tres estudiantes: Edna Smith. como: getNombre. Se ha visto que una clase tiene variables y métodos. aunque las variables en las que se almacenan tengan el mismo nombre. setEdad. Unidad 1: Clases y Objetos Libro 1: Core Java 100 © Copyright IBM Corp. A continuación se presenta la estructura de una clase Java. . getEdad.).2: Un Objeto de la Clase Estudiante Se pueden obtener los atributos del objeto estudiante usando los métodos getter (métodos que comienzan con la palabra get. J.

sentencia import. Estructura de una Clase Java Una clase Java consiste de una sentencia package. De éstas. La sentencia package es la primera sentencia de un programa Java. En estos casos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 101 © Copyright IBM Corp.java siempre y cuando esta clase sea declarada como public. La sentencia import va a continuación de la sentencia package. De acuerdo a la sintaxis general de una clase.Paquetes. . para que la ejecución del programa comience con esa clase. se requiere sólo la palabra reservada class seguida por el nombre de la clase. La Figura 1. Un archivo Java debe tener el mismo nombre que la clase que tenga el método main(). Las sentencias import son seguidas por la definición de la clase.Guía del Estudiante Core Java 3. La sentencia import importa otras clases Java que la clase que esta siendo definida puede querer usar. Se profundizará la definición package en la Unidad 7. y una definición de clase. Estas clases pueden estar relacionadas unas con otras. se debe tener una clase con el método main().4 muestra la estructura general de la definición de una clase Java. como sigue: class NombreClase{ } Un programa Java puede tener más de una clase. Las otras clases son importadas usando la siguiente sintaxis: import NombreClase. Puede haber más de una sentencia import en el mismo programa Java. las sentencias package e import son opcionales. con la extensión .

se continúa con los miembros de una clase Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.4: Estructura de Definición de una Clase Java Habiendo comprendido la estructura de una clase Java. .Core Java Guía del Estudiante Figura 1. Unidad 1: Clases y Objetos Libro 1: Core Java 102 © Copyright IBM Corp.

Figura 1. métodos y modificadores de acceso. Un modificador de acceso especifica el acceso a una a variable. Esencialmente. como: Edna Smith. Variables Las variables disponibles en una clase pueden ser de varios tipos. Un objeto permite que otros objetos tengan acceso a sus datos a través de métodos. La Figura 1. variables. 4. Observe cada una de ellas en detalle.5 muestra los miembros de una clase. la variable nombre en la clase Estudiante tiene diferentes valores para objetos diferentes. variables de instancia.5: Miembros Principales de una Clase Se discuten a continuación en las secciones siguientes los miembros principales de una clase. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 103 © Copyright IBM Corp.1 Variables de Instancia Algunas variables tienen diferentes valores para diferentes instancias de la clase. Aquí. son estos. método o clase. los objetos creados a partir de una clase almacenan sus datos en variables. Por ejemplo. 4. La Figura 1. son estos. .1 Miembros de una Clase Java Una clase Java tiene variables miembro y métodos miembro. Una clase Java usa modificadores de acceso para otorgar permiso a otras clases para acceder a una variable o método en particular. variables transient y variables volatile.Guía del Estudiante Core Java 3. J McDonald and T Hughes. nombre es una variable de instancia. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Un objeto puede también esconder datos a otros objetos a través de varios modificadores de acceso.6 muestra una definición de variables de instancia en una clase Java. Estas son llamadas variables de instancia. variables de clase. variables final.

Así si el valor es cambiado en alguna instancia. es incrementado cuando un nuevo estudiante ingresa a la universidad.2 Variables de Clase En algunas ocasiones es necesario tener una variable que tenga el mismo valor para todas las instancias de la clase. Para tener acceso a una variable de clase no se necesita crear una instancia de la clase. Unidad 1: Clases y Objetos Libro 1: Core Java 104 © Copyright IBM Corp. Se puede acceder a una variable de clase directamente por su nombre junto con el nombre de la clase. . que asigne un único ID a cada estudiante. Se usa el modificador static para declarar que una variable es una variable de clase. se reflejará en todas las instancias de la clase.6: Variables de Instancia en una Clase Java Las variables de instancia se usan para representar los atributos de datos de un objeto particular.Core Java Guía del Estudiante public class Estudiante { // Variables de Instancia String nombre. nombre. que es almacenado en algún sitio. En la Figura 1. El ID de estudiante es un número secuencial. genero y edad son variables de instancia del objeto Estudiante.7 muestra como una variable de clase es creada y accedida en Java. Las variables de clase a veces se les llaman variables static. el máximo ID de estudiante asignado hasta ahora se mantiene como una variable de clase y se incrementa en cada instanciación. Así independientemente del número de objetos creados. Las variables static son usualmente privadas en la clase. char genero. } Figura 1. La Figura 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Sólo habrá una copia de una variable de clase en la memoria independientemente del número de instancias creadas de la clase. maxIdAsignado se mantiene como una variable de clase y se incrementa en el constructor del objeto luego de asignar su valor al ID del estudiante. int edad. Estas variables se denominan variables de clase. Estas se acceden usando la instancia o el objeto creado. Una variable llamada maxIdAsignado podría crearse para este caso. considere una universidad. ¿Por qué se necesitan variables de clase cuando se puede obtener la misma funcionalidad usando variables de instancia? Puede haber situaciones en las cuales una variable necesita ser especificada como una variable de clase. Por ejemplo.6. 4. Las variables de instancia son creadas cuando el objeto es instanciado.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los valores por defecto para los ocho tipos de datos en Java. } } Figura 1.Guía del Estudiante Core Java public class Estudiante { // Variables de clase static int maxIdAsignado. para variables de clase y de instancia son los siguientes: boolean char byte short integer long float double 0 0 0 0. Java provee valores por defecto para las variables de instancia y las variables de clase. // Variables de Instancia int id. Note que aquí se coloca el nombre de la clase seguido por un punto y luego el nombre de la variable de clase.id = maxIdAsignado++. realiza muchas optimizaciones para mejorar el desempeño de un programa.7: Variables de Clase en Java El valor de maxIdAsignado también podría accederse fuera del ámbito de la clase como se muestra a continuación: Estudiante. .0 0.maxIdAsignado++. en tiempo de compilación. Los valores por defecto son aquellos que son asignados cuando el programador no inicializa explícitamente una variable.0 false (carácter en blanco) 0 4. Recuerde que para acceder a las variables de clase no es necesario crear una instancia de la misma. // Contructor para la clase Estudiante public Estudiante() { this. El modificador volatile previene al Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 105 © Copyright IBM Corp.3 Variables Volátil (Volatile) El compilador Java.

La sintaxis se muestra a continuación: volatile int var = 100. 4. Por ejemplo. los campos no transient de un objeto son almacenados usando una clase llamada DataOutputStream. Un miembro con un valor constante no puede ser modificado. Esta variable miembro se denomina variable volatile. El objeto puede ser de-serializado recuperando el dato almacendo usando la clase DataInputStream. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Un objeto puede contener ambas variables transient y no transient. Cada hilo puede tener su propia copia privada de una variable compartida. . no realiza optimizaciones en estas variables. La sintaxis para declarar variables transient en Java es la siguiente: transient int var = 100.5 Variables Final El modificador final indica que el miembro tiene un valor constante. Este tipo de variable se denomina una variable final. Así. Una variable que no puede ser serializada y que tiene especificado el modificador transient. Unidad 3 – Serialización de Objetos. El compilador. dos o más hilos pueden compartir la misma variable de instancia. Un objeto puede tener datos basura.Core Java Guía del Estudiante compilador de realizar ciertas optimizaciones sobre una variable miembro. La copia maestra de la variable reflejará su estado actual. se denomina variable transient. Las variables transient se pueden usar para almacenar datos que no serán usados durante el proceso de serialización. El nombre de una variable final se representa en letras mayúsculas por convención. La serialización es un proceso mediante el cual. los procesos de serialización y de-serialización pueden acelerarse si variables cuyos datos que no se desea serializar se declaran como transient. Le dice al compilador que el valor de la variable puede ser cambiado inesperadamente por otras partes del programa. Como se muestra aquí: Unidad 1: Clases y Objetos Libro 1: Core Java 106 © Copyright IBM Corp. que no son necesarios al momento de reconstruir el objeto desde flujos a través de la de-serialización. La serialización y de-serialización serán tratados en detalle en el Volumen 4.4 Variables Transitorias (Transient) El modificador transient se usa en una declaración de variable para especificar al sistema de tiempo de ejecución de Java que la variable no debe ser serializada. 4. El modificador volatile se coloca antes de la declaración de la variable. En caso de que se trate de cambiar el valor de una variable final en el programa. entonces se generará un error en tiempo de compilación. El acceso a la copia maestra debe ser autorizado en el mismo orden en el que se acceden las copias privadas. en un programa multihilos.

public static final double E = 2. se va estudiar cómo declarar estas variables.. Figura 1..Guía del Estudiante Core Java final float PI = 3.}. … } Aquí. public static final long redondear(double a){. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 107 © Copyright IBM Corp. double b){..718281828459046. public static final double PI = 3. y su tipo de dato es String. El modificador static puede ser combinado con la variable final para declarar constantes de librerías. . A continuación se examinan los métodos en Java. Si no. etc. public static final double potencia(double a. nombre es declarada como una variable miembro. La Figura 1. porque la declaración se hace dentro del cuerpo de la clase y fuera de cualquier método o constructor de la clase. el compilador arrojará un mensaje de error.141592653589793. El modificador private indica que nombre como una variable sólo puede ser accedida dentro de los constructors y métodos de la clase Estudiante. Las variables miembro final deben ser inicializadas con un valor en el momento de su declaración. El nombre de la variable miembro es nombre.6 Declaración de Variables Miembro En la clase Estudiante (referirse a la Figura 1.8 muestra el uso de los modificadores final y static para declarar constantes de librerías.14.. vimos que la variable nombre fue declarada como sigue: public class Estudiante { private String nombre. Esta combinación es particularmente útil al declarar constantes como: PI. 4.}.6).8: Uso de los Modificadores static and final para Constantes de Librería A continuación. diciendo que la variable puede no haber sido inicializada. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. E.

out. . Métodos Los métodos en Java se usan para tener acceso y manipular las variables.0 se permite establecer un número variable de parámetros en los métodos. Seguidamente.println(arg). El compilador genera un error.getNombre(). Los parámetros pasan a ser variables locales del método.println("a: " + a).println(arg). recuperar. Para lograr esto. Ellas no pueden ser referenciadas antes de ser declaradas y no pueden usarse sin haber sido inicializadas. no se puede usar mc. los métodos se usan para asignar.Core Java Guía del Estudiante 5. En Java 5. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. Usualmente.. Un ejemplo se presenta a continuación. mc = new MiClase().. int … args) { System.out. mc. } Unidad 1: Clases y Objetos Libro 1: Core Java 108 © Copyright IBM Corp. se hace uso de la expresión . public void hacerCualquierCosa() { MiClase mc. La definición de métodos establece el tipo y nombre de los parámetros de entrada. for (int arg : args) System. con la restricción de que la declaración del parámetro variable solo se puede hacer al final de la lista de argumentos del método. } Observe que el identificador args se convierte en un arreglo que contiene los valores que fueron enviados cuando fue invocado el método hacerCualquierCosa(). Se presenta un ejemplo de lo dicho anteriormente: public void hacerCualquierCosa(String a. Las variables locales pueden ser de tipo primitivo o referencias a objeto. o cambiar los valores almacenados en una variable. al igual que C. se presenta un ejemplo de ello: // Error // OK public void hacerCualquierCosa(int … args) { for (int arg : args) System.getNombre(). mc.. también el método puede declarar otras variables locales dentro de ella. También se puede combinar el uso de parámetros variables con parámetros no variables. } Antes de inicializar mc.

1 Métodos de Instancia Ciertos métodos definidos en una clase operan en variables de instancia de la instancia actual de una clase. public String getNombre(){ return nombre. además de realizar otras actividades para la clase. public void setNombre(String nuevoNombre){ nombre = nuevoNombre. La Figura 1. Métodos de clase.10: Método Setter Que Asigna un Valor a una Variable de Instancia Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 109 © Copyright IBM Corp. 5. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java En Java. . Las siguientes variables y métodos pueden ser accedidos por un método de instancia: • • • • Variables de instancia. Estos métodos se denominan métodos de instancia. Se verán estos dos tipos en detalle a continuación.9: Método Getter para Recuperar el Valor de una Variable de Instancia Un método setter se usa para asignar valor a variables privadas.10 muestra como el método setter se usa para asignar valor a la variable nombre. Otros métodos de instancia. los métodos son de diferentes tipos. puede obtener y asignar valores a las variables de instancia. } Figura 1. Un método getter se usa para obtener el valor de una variable de instancia y normalmente comienza con la palabra get. Los métodos setter se inician con la palabra set. La Figura 1. Ellos también pueden tener acceso a las variables de clase de esa clase. métodos de instancia y métodos de clase. Variables de clase. } Figura 1. Un método de instancia. son estos.9 muestra como el método getter se usa para recuperar el valor almacenado en la variable nombre.

int radio = Integer.5. i<valores. no se necesita crear una instancia de la clase.5.2 Métodos de Clase Otros métodos definidos en la clase operan solo en variables de clase. Para acceder a un método de clase. for(int i=0. double valores[] = {11. 12.length.println("Valor: "+actual). La Figura 1. System. Acceder a variables o métodos no estáticos desde un método estático genera un error en tiempo de compilación. La librería Math y las clases envolventes (wrapper) tienen varios métodos estáticos.println("Redondeo hacia arriba: "+Math. System.parseInt("6"). Un método de clase no puede acceder a variables de instancia o métodos de instancia.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. System.ceil(actual)).11 muestra el uso del método estático parseInt definido en la clase Integer. -12.miMetodoDeClase() El modificador static se usa en la declaración del método de clase.println("Redondeo: "+Math. -13. } Figura 1.out.12 muestra el uso de métodos estáticos definidos en la clase Math.floor(actual)).12: Uso de Métodos Estáticos Definidos en la Clase Math Unidad 1: Clases y Objetos Libro 1: Core Java 110 © Copyright IBM Corp.println("Redondeo hacia abajo: "+Math. Se puede acceder al método de clase directamente. La Figura 1. //PI es una constante (variable de la clase puplica Math) Figura 1. Estos métodos se conocen como métodos de clase o métodos estáticos. aunque un método de clase puede ser accedido a través de una instancia.out. i++){ double actual = valores[i]. que también están definidas como métodos estáticos. los métodos definidos en la clase Math pueden usarse directamente.5}. //parseInt() es un metodo de la clase Integer double circunferencia = 2 * radio * Math.PI.out.11: Uso del Método Estático parseInt()Definido en la Clase Integer La clase Math tiene muchas funciones de librería. Así. Por ejemplo. un método de clase miMetodoDeClase() de MiClase puede ser invocado como: MiClase.5.Core Java Guía del Estudiante 5. .round(actual)+"\n"). Se pueden invocar éstos métodos directamente usando el nombre de la clase sin necesidad de crear una instancia. System.

1. }/* El metodo agregar termina aqui */ /*El metodo main comienza aqui */ public static void main(String[] args) { 13. que es un método estático. El código Java comienza aquí. 5. Sea el Ejemplo 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. /*Definicion de la clase StaticEjemplo comienza aqui*/ 2. y debe ser usado antes de que cualquier objeto de la clase sea creado. 9. otros objetos pueden ser instanciados. }/* El metodo main termina aqui */ 15. se puede acceder a métodos estáticos para usar los métodos y variables disponibles en la clase. public class StaticEjemplo { 3. Java supera esto proveyendo el método main. 8. static int n. Los métodos estáticos solo pueden invocar otros métodos estáticos Si el constructor de una clase se declara como private. 10. Un método de clase se puede usar independientemente del objeto. 11.Guía del Estudiante Core Java Cuando un usuario inicia una aplicación.3 Uso de Métodos de Clase para Acceder a la Clase Cuando una declaración de un método tiene el modificador static. .1.. 6. Este método estático main es independiente de un objeto. System. }/*Definicion de la clase StaticEjemplo termina aqui*/ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 111 © Copyright IBM Corp. No se tiene que instanciar la clase para usar sus métodos estáticos.println(n). Un método de instancia solamente se puede usar cuando se crea un objeto. /*El metodo agregar comienza aqui */ static public void agregar(int j. algún código debe ser ejecutado.out. pueden ser invocados directamente sin ninguna referencia a un objeto de la clase. 12. 7. 5. Dentro del método main. agregar(53. 4. 74). indica que el método es un método de clase y no un método de instancia.1 El siguiente código muestra el uso de métodos estáticos. Sin una referencia a objetos. El método main de la clase es un método estático. En este caso. que muestra como los métodos estáticos se pueden usar en un programa Java. int k) { n = j + k. 14.. no se puede crear un objeto de la clase. Ejemplo 1. A continuación se aprenderá a cómo usar los métodos de clase para acceder a la clase. no habrá código a ser ejecutado.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Aunque los métodos abstractos son métodos de instancia. 5. Antes de concluir la discusión de métodos en Java. los otros tres pueden ser métodos de instancia o de clase. podría ser accedido desde otras clases como se muestra a continuación: StaticEjemplo. Métodos Sincronizados. . Una subclase puede proveer una implementación diferente para un método heredado de su superclase. Fin del Ejemplo 1. que son usados para propósitos específicos: • • • • Métodos Abstractos. Dentro del método agregar. Esto se conoce como sobre Unidad 1: Clases y Objetos Libro 1: Core Java 112 © Copyright IBM Corp.agregar(). La clase desde la cual las variables y métodos son heredados se denomina superclase. Este método es llamado método abstracto. que son los que no pueden ser sobrescritos por una subclase.Core Java Guía del Estudiante El código Java termina aquí En la clase anterior. La clase que hereda se denomina subclase. se puede acceder directamente al método agregar() de la clase StaticEjemplo sin crear un objeto de la clase ya que el método agregar() ha sido declarado como estático. Métodos Final. A continuación se discuten los métodos final. 5. se resume brevemente como Java permite a los programadores trabajar con los siguientes tipos de métodos.5 Métodos Final Una clase puede heredar variables y métodos definidos en otra clase.1 Si el método agregar() en el ejemplo anterior fuese declarado como público. se suman dos enteros pasados como argumentos y se almacena en una variable estática n de la clase. No hay necesidad de crear un objeto StaticEjemplo para invocar al método estático.4 Métodos Abstractos El modificador abstract se usa para denotar que la implementación de un método no está en la clase en la cual el método es declarado. Finalmente se imprime el valor de n en la salida estándar. Métodos Nativos. Los métodos abstractos son declarados solo dentro de una clase abstracta (una clase declarada con el modificador abstract) como se muestra a continuación: public abstract int mostrarSalida(int a).

public native int mostrarSalida(int a). Si no se quiere que un método sea sobreescrito por sus subclases.Guía del Estudiante Core Java escritura de método.7 Métodos Sincronizados En un ambiente multihilos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los modificadores de acceso permitidos por Java son: public. Se discuten a continuación. estos son modificadores de acceso. puede también acceder a variables y métodos public de una clase. que Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 113 © Copyright IBM Corp. se puede usar el modificador final en la declaración del método. Una clase sin ninguna relación. que permiten que se use el código escrito en otro lenguaje. Se debe tener cuidado antes de declarar una variable o método como public para asegurar que no habrá ningún acceso malicioso por parte de un objeto de una clase externa. public synchronized int mostrarSalida(int a). para asegurar que la información accedida por los hilos está controlada y realizada a salvo de hilos. 5. varios hilos pueden estar operando sobre los mismos datos simultáneamente. protected. Se va a iniciar la revisión con el modificador de acceso public. como sigue: public final int mostrarSalida(int a). . que juegan un papel fundamental en aplicaciones multihilos. La clase que esta haciendo el acceso no necesita ser una subclase de la clase accedida o estar presente en el mismo paquete que la clase accedida.1 El Modificador de Acceso public El modificador public no coloca ninguna restricción en las variables y métodos de una clase. se usa el modificador native para especificar que la implementación de este método no fue hecha en Java. A continuación se discuten los métodos sincronizados. 5. Cuando las variables y métodos de una clase son declarados como public.6 Métodos Nativos Cuando se quiere usar una librería de funciones escritas en otro lenguaje como C o C++. 6. Los métodos que se usan para operar sobre los mismos datos simultáneamente se declaran como synchronized. A continuación se discute acerca de los métodos nativos. package y private. Modificadores de Acceso Se pueden usar los modificadores de acceso de Java para proteger las variables y métodos de una clase de ser accedidos sin garantía por parte de otras clases. que está en un paquete diferente. los objetos de cualquier clase pueden accederlos. Se ha visto el uso de los modificadores public y private en algunos de los ejemplos anteriores. 6.

/*Definicion de la clase PublicEjemplo comienza aqui*/ 3. package miPaquete. El código Java comienza aquí. 2. package otroPaquete.out. que es totalmente diferente del paquete en el cual está la clase PublicEjemplo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.2. //Definicion de la clase ClaseNoRelacionada comienza aqui 6.Core Java Guía del Estudiante pueden colocar a los objetos de la clase accedida en un estado inconsistente.. class ClaseNoRelacionada { 7. }//Definicion de la clase ClaseNoRelacionada termina aqui El código Java termina aquí Unidad 1: Clases y Objetos Libro 1: Core Java 114 © Copyright IBM Corp. El código Java comienza aquí. }/*Definicion de la clase PublicEjemplo termina aqui*/ El código Java termina aquí Se va a escribir una clase llamada ClaseNoRelacionada en otroPaquete. } 8.2 La clase PublicEjemplo que se muestra a continuación tiene una variable y un método public. pe. PublicEjemplo pe = new PublicEjemplo(). 9. 10. 5.*.. 6. 11.. 1. 5. pe. public int secretoAbierto. 4. public class PublicEjemplo { 4. import miPaquete.println("abrirMetodoSecreto"). public void abrirMetodoSecreto() { System.secretoAbiert = 35.abrirMetodoSecreto(). . que ilustra el uso de variables y métodos public. 3. Considere el Ejemplo 1. void accesoSecreto() { 8. } 12. 7. Ejemplo 1.. 1. 2.

En este caso. Observe: Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 115 © Copyright IBM Corp.println("metodoSecretoFamiliar"). el modificador protected puede ser usado.3. protected int secretoFamiliar.2 El Modificador de Acceso protected Este modificador permite que variables y métodos de una clase en particular sean accedidas por la clase en la que están definidas. El código Java comienza aquí. pero que está presente en un paquete otroPaquete que es diferente del paquete en el cual ProtectedEjemplo fue declarada.. 6. package miPaquete. Por ejemplo. 8. Tiene una variable protected y un método protected.out. que no es tan permisivo como el modificador de acceso public.3 Considere el siguiente ejemplo de la clase ProtectedEjemplo. se puede acceder a la variable y al método public definidos en la clase PublicEjemplo. 1. } 9. Esto se explica en el Ejemplo 1. Fin del Ejemplo 1.. 6. /*Definicion de la clase ProtectedEjemplo comienza aqui*/ 4. que extiende de la clase ProtectedEjemplo. public class ProtectedEjemplo { 5. . }/*Definicion de la clase ProtectedEjemplo termina aqui*/ El código Java termina aquí Ahora. protected void metodoSecretoFamiliar() { System.2 A continuación se discute el modificador de acceso protected. considere la clase ProtectedHijo. 2. 7. pero la clase ProtectedHijo no puede acceder la variable protected o invocar al método protected de un objeto de la clase ProtectedEjemplo. la clase ProtectedHijo implícitamente obtiene todos los métodos definidos en ProtectedEjemplo. sus subclases y las clases presentes en el mismo paquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Cuando se representa este tipo de información como objetos de software creados usando Java.Guía del Estudiante Core Java La clase ClaseNoRelacionada no tiene ninguna relación con (no es una subclase de) la clase PublicEjemplo. A pesar de esto. se puede querer que cierta información sea compartida solo por nuestra familia o amigos cercanos. Ejemplo 1. No se quiere que nadie más sepa acerca de esto. 3.

Fin del Ejemplo 1. 1. }//Definicion de la clase AmigoDeLaFamilia termina aqui El código Java termina aquí Se puede ver que AmigoDeLaFamilia puede acceder legalmente a las variables y métodos protected de ProtectedEjemplo.3 Unidad 1: Clases y Objetos Libro 1: Core Java 116 © Copyright IBM Corp. 2. 6. // error ph.metodoSecretoFamiliar().Core Java Guía del Estudiante El código Java comienza aquí. 11. 8. } 13. 1. ph.metodoSecretoFamiliar(). 10. El código Java comienza aquí. pe. pe.. class ProtectedHijo extends ProtectedEjemplo { 7. //Definicion de la clase AmigoDeLaFamilia comienza aqui 4. package otroPaquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } 10. void accederSecreto() { ProtectedEjemplo pe = new ProtectedEjemplo().*. //Definicion de la clase ProtectedHijo comienza aqui 6. 3.secretoFamiliar = 53. 4. ProtectedHijo ph) { 8. 3. class AmigoDeLaFamilia { 5. 9. // error 9. 7. pe. 5. ...secretoFamiliar = 53.. 12. package miPaquete. 2.metodoSecretoFamiliar(). void accederSecreto(ProtectedEjemplo pe.secretoFamiliar = 33. pe. import miPaquete. }//Definicion de la clase ProtectedHijo termina aqui El código Java termina aquí Ahora se va a considerar otra clase AmigoDeLaFamilia que está en el paquete miPaquete y no es una subclase de ProtectedEjemplo.

que ilustra el modificador de acceso package.4. entonces. void metodoSecretoEntreAmigos(){ 7.4 La clase PackageEjemplo que se muestra a continuación tiene una variable y un método con acceso package. El código Java comienza aquí. El código Java comienza aquí.. por defecto. ni private como nivel de acceso. ni protected. int secretoEntreAmigos. Si no se especifica el nivel de acceso de una variable o un método o una clase usando un modificador de acceso. package miPaquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java 6. 8. que está presente en miPaquete. 2. Todas las clases presentes en el paquete miPaquete tienen acceso a la variable secretoEntreAmigos y al método metodoSecretoEntreAmigos(). 3.println("metodoSecretoEntreAmigos"). 2.out. 1. 6.. . Ejemplo 1. /*Definicion de la clase PackageEjemplo comienza aqui*/ 4. public class PackageEjemplo { 5..3 El Modificador de Acceso package El modificador de acceso package se usa cuando no se especifica ni public. Considere el Ejemplo 1. el nivel de acceso se asume como package. Ahora. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 117 © Copyright IBM Corp. considere la clase PackageAmigo.. } 9. package miPaquete. }/*Definicion de la clase PackageEjemplo termina aqui*/ El código Java termina aquí La clase PackageEjemplo tiene acceso a la variable secretoEntreAmigos y al método metodoSecretoEntreAmigos(). Un paquete es similar a un módulo. Ada fue uno de los primeros lenguajes en introducir el concepto de un paquete en los lenguajes de programación. Esto significa que todas las clases que están presentes en el mismo paquete pueden acceder a las variables y métodos de la clase accedida. 1. System.

Fin del Ejemplo 1. entonces no podrá acceder a secretoEntreAmigos o metodoSecretoEntreAmigos de PackageEjemplo. } 10. }/*Definicion de la clase PackageHijo termina aqui*/ El código Java termina aquí El código anterior muestra que si hay una subclase de PackageEjemplo en un paquete diferente. 5.4 Unidad 1: Clases y Objetos Libro 1: Core Java 118 © Copyright IBM Corp.secretoEntreAmigos = 25. void accederSecretoPackage(){ 6. pe. 10.Core Java Guía del Estudiante 3. 9. /*Definicion de la clase PackageHijo comienza aqui*/ 6. class PackageHijo extends PackageEjemplo { 7. 8. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.metodoSecretoEntreAmigos(). class PackageAmigo{ 5. 9.. // error 11..metodoSecretoEntreAmigos(). PackageEjemplo pe = new PackageEjemplo(). /*Definicion de la clase PackageAmigo comienza aqui*/ 4. } 12. void accederMiembrosDePackage(){ 8. Considere el siguiente código. package otroPaquete. 7.secretoEntreAmigos = 25. }/*Definicion de la clase PackageAmigo termina aqui*/ El código Java termina aquí La clase PackageAmigo puede acceder a secretoEntreAmigos y metodoSecretoEntreAmigos porque PackageAmigo y PackageEjemplo están en el mismo paquete. . PackageEjemplo pe = new PackageEjemplo(). 3. import myPackage. El código Java comienza aquí. 2. pe. pe. // error pe. 4.*. 1.

1. 1. 6. } // error Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 119 © Copyright IBM Corp. 5.Guía del Estudiante Core Java A continuación se discute el modificador de acceso private.metodoSecreto(). Puede haber ocasiones cuando no se quiere que métodos o variables de una clase en particular accedan a ciertas variables o métodos de otra clase específica.println("metodoSecreto"). 6. Ejemplo 1. 4. /*Definicion de la clase NivelAccesoEjemplo comienza aqui*/ 2. class Hacker { 3. .5. El código Java comienza aquí. la clase Hacker. no puede acceder a secreto o a metodoSecreto de NivelAccesoEjemplo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.secreto = 364. System.... Esto se explica en el Ejemplo 1. Por ejemplo. Usando variables y métodos privados en una clase se provee la máxima protección. 7. private void metodoSecreto(){ 5..4 El Modificador de Acceso private El modificador de acceso private se usa para proteger información muy confidencial. 6. public static void main(String[] args) { NivelAccesoEjemplo nae = new NivelAccesoEjemplo().out. /*Definicion de la clase Hacker comienza aqui*/ 2. que es el más restrictivo de todos los modificadores de acceso. El código Java comienza aquí. } 7. private int secreto. nae. // error nae. definida a continuación. public class NivelAccesoEjemplo { 3.5 Aquí la clase NivelAccesoEjemplo tiene una variable private y un método private. 4. El código dentro de otra clase no puede acceder o modificar la variable secreto o invocar a metodoSecreto(). }/*Definicion de la clase NivelAccesoEjemplo termina aqui*/ El código Java termina aquí Sólo el código dentro de la clase NivelAccesoEjemplo puede leer o modificar la variable secreto e invocar metodoSecreto().

Core Java

Guía del Estudiante

8. }/*Definicion de la clase Hacker termina aqui*/

El código Java termina aquí Cuando se intenta compilar la clase Hacker, el compilador imprimirá un mensaje de error, similar a este: Hacker.java:4: secreto has private access in NivelAccesoEjemplo nae.secreto = 364; // error ^ Hacker.java:5: metodoSecreto() has private access in NivelAccesoEjemplo nae.metodoSecreto(); // error ^ 2 errors

Nota: Un objeto del tipo NivelAccesoEjemplo puede acceder a los miembros private de otro objeto de NivelAccesoEjemplo. Esto se muestra en el siguiente fragmento de código: El código Java comienza aquí... 1. /*Definicion de la clase PrivateEjemplo comienza aqui*/ 2. class PrivateEjemplo { 3. private int secreto; 4. boolean verificarAccesoPrivado(PrivateEjemplo pe){ 5. 6. 7. if (this.secreto == pe.secreto) return true; else

8. return false; 9. } 10. }/*Definicion de la clase PrivateEjemplo termina aqui*/

El código Java termina aquí En este caso, la clase PrivateEjemplo tiene un método de instancia que compara el objeto actual PrivateEjemplo (this) con otro objeto PrivateEjemplo pe, basado en sus variables secreto. Esto es posible porque objetos del mismo tipo pueden acceder a miembros private del otro siempre y cuando estén dentro de la clase. Fin del Ejemplo 1.5
Unidad 1: Clases y Objetos Libro 1: Core Java 120

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Se van a discutir a continuación los constructores en Java.

7. Constructores de una Clase
Un constructor se usa esencialmente para inicializar un nuevo objeto creado de un tipo en particular. Se puede identificar fácilmente el constructor y diferenciarlo de otros métodos en la clase porque el constructor tiene el mismo nombre de la clase. Los constructores también son métodos, pero están definidos para realizar la tarea de inicialización al momento de creación de objetos. Todas las clases en Java tienen al menos un constructor. Si el programador no define ningún constructor para una clase, entonces la clase tendrá un constructor por defecto creado por el sistema de tiempo de ejecución de Java. El constructor por defecto no acepta ningún argumento. Tiene una implementación vacía y no realiza nada. Java permite tener tantos constructores como se requiera para una clase, la única diferencia será en el número o el tipo de argumentos para una clase. Esto se denomina sobrecarga del constructor, que será discutida en detalle en la próxima sección. La Figura 1.13 muestra los constructores para la clase Student. Se definen tres constructores, cada uno toma diferentes parámetros.

public Estudiante(){} public Estudiante(int nuevoId){ id = nuevoId; } public Estudiante(int nuevoId, String nuevoNombre){ id = nuevoId; nombre = nuevoNombre; }
Figura 1.13: Constructores para la Clase Estudiante

Si el programador define un constructor para una clase, el constructor por defecto no estará disponible para la clase. Si una clase necesita un constructor que no acepte argumentos, el programador debe explícitamente definir un constructor sin argumentos. En la clase Estudiante anterior, se proveen los constructores Estudiante(int), Estudiante(int, String), por esto el constructor por defecto sin argumentos no estará disponible, y se encontrará el constructor Estudiante() sin parámetros explícitamente definido. Se va a considerar otro ejemplo para entender mejor los constructores en Java. Para una clase llamada Fibonacci, se tiene el siguiente constructor:

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 121 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

public Fibonacci() { n = 0; }

// constructor

Este es un ejemplo de un constructor sin argumentos. Se va a definir otro constructor para Fibonacci: public Fibonacci(int numeroDeTerminos) { n = numeroDeTerminos; } // constructor

Ambos constructores tienen el mismo nombre, la única diferencia es la lista de parámetros aceptada por estos constructores. El compilador los diferencia dependiendo del número y tipos de argumentos que aceptan. El primer constructor no acepta ningún parámetro, mientras que el segundo constructor acepta un argumento de tipo int . Usualmente el constructor usa sus argumentos para inicializar las variables (estado) del nuevo objeto creado. Cuando se instancia una clase para crear un objeto, se debe escoger el constructor cuyos argumentos reflejen mejor la forma en que se quiere inicializar el nuevo objeto. Dependiendo del número de argumentos y el tipo de argumentos que se pasa al constructor, el compilador busca el constructor apropiado para usarlo. Por ejemplo, cuando se usa el siguiente código, el compilador sabe que debe elegir el constructor sin argumentos. new Fibonacci(); De manera similar, cuando se usa la expresión new Fibonacci(53); el compilador escoge el constructor que acepta un sólo entero como su argumento. El código que se presenta a continuación invoca el constructor de la superclase de la clase Fibonacci. void Fibonacci() { super(); } No se ha hecho a Fibonacci una subclase de otra clase. Por defecto, todas las clases creadas en Java son subclases de la clase Object disponible en el paquete java.lang. Así, en el código anterior, el constructor de la clase Object es invocado. Usualmente el constructor de una clase toma ventaja del código proporcionado en el constructor de su superclase. Suponga que se quiere usar el constructor de la superclase, entonces la sentencia que invoca al constructor de su superclase debe ser la primera sentencia de su constructor, debido a que debe realizar primero un nivel superior de inicialización. De la discusión en esta sección, se puede ver que en la declaración de una clase, es obligatorio especificar la palabra reservada class y también el nombre de la clase. El resto de los componentes de una declaración de clase son opcionales. Si una
Unidad 1: Clases y Objetos Libro 1: Core Java 122

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

declaración de clase no tiene estos elementos opcionales, los valores por defecto que usa el compilador Java son: no-public, no-final, no-abstract y sub-clase de la clase Object. La clase java.lang.Object es la superclase de todas las clases Java por defecto. Se estudiará en detalle super clases en la Unidad 3 - Herencia de este volumen. El compilador Java también asume que una clase no implementa ninguna interfaz. Considere el Ejemplo 1.6, un programa que imprime los primeros cinco términos de la serie de Fibonacci. Ejemplo 1.6 Se va a crear una clase en este programa de ejemplo. Se usará esta clase en las siguientes secciones. El código Java comienza aquí... 1. /*Definicion de la clase Fibonacci comienza aqui*/ 2. public class Fibonacci { 3. public int a = 0, n; /* variable */ 4. private int b = 1, c, contador = 2; /* variables */ 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. /* Constructor Fibonacci comienza aqui */ public Fibonacci(int numeroDeTerminos) { n = numeroDeTerminos; }/* Constructor Fibonacci termina aqui */ /* Metodo cambiarNumeroDeTerminos comienza aqui */ void cambiarNumeroDeTerminos(int numeroDeTerminos) { n = numeroDeTerminos; }/* Metodo cambiarNumeroDeTerminos termina aqui */ /* Metodo mostrarSeries comienza aqui */ public void mostrarSeries() { if (n <= 0) { System.out.println("Entrada invalida"); System.exit(0); } if (n >= 1) System.out.println(a); if (n >= 2) System.out.println(b); while (contador < n) {
Volumen 2: Programación Orientada a Objetos 123 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Libro 1: Core Java

Core Java

Guía del Estudiante

27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.

c = a + b; System.out.println(c); a = b; b = c; contador++; } }/* Metodo mostrarSeries termina aqui */ /* Metodo main comienza aqui */ public static void main(String args[]) { Fibonacci fib = new Fibonacci(5);// 5 términos

38. fib.mostrarSeries(); 39. }/* Metodo main termina aqui */ 40. }/* Definicion de la clase Fibonacci termina aqui */

El código Java termina aquí Este programa de ejemplo imprime los números de la serie de Fibonacci, hasta el número de términos que son requeridos (cinco, en este caso). El número de términos de la serie a ser impresos se pasa como argumento al constructor. El constructor asigna el parámetro recibido a una variable de instancia n. cambiarNumeroDeTerminos() se usa para cambiar el valor de n, si se desea hacerlo después que el objeto ha sido creado. El método mostrarSeries() se usa para imprimir la serie de números Fibonacci en la salida estándar. Se puede ver que hay dos componentes principales que nos dan la implementación de la clase, que son, la declaración de la clase y el cuerpo de la clase. La declaración del ejemplo anterior es simple. Indica que el nombre de la clase es Fibonacci y que es una clase public. A veces de la declaración, se puede también identificar la superclase de esa clase y si esta clase puede ser derivada. Fin del Ejemplo 1.6 Así como los constructores pueden ser sobrecargados, otros métodos también pueden ser sobrecargados en Java. Se va a discutir la sobrecarga de métodos, mediante la cual se pueden tener varias implementaciones para el mismo método.

8. Sobrecarga de Método
En la sección anterior se vio que más de un constructor puede ser creado para una clase. De manera similar, Java permite tener dos o más métodos con el mismo nombre dentro de la misma clase. Como con los constructores, los métodos sobrecargados

Unidad 1: Clases y Objetos

Libro 1: Core Java 124

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

14. 13. y tipo de argumentos aceptados por el método.out.out. si existen dos métodos que aceptan el mismo número de argumentos y el mismo tipo de argumentos..println(a). 16. y el orden en el cual son aceptados.println(a). 10. son iguales. } void mostrarEnPantalla(int a. Los métodos sobrecargados pueden tener diferentes tipos de datos de retorno. 4.println(b+"\n")..println(a). el nombre. pero difieren en el orden de los tipos de datos aceptados por los dos métodos. 12. esto no se considera una sobrecarga de métodos. System. System. 5. char b){ System. 11.7 El siguiente programa ilustra la sobrecarga de métodos.println(b+"\n"). Esta característica de Java se llama sobrecarga de métodos. void mostrarEnPantalla(int a. entonces sí se considera una sobrecarga de métodos. 15.Guía del Estudiante Core Java deben también tener un número diferente de parámetros o diferentes tipos de datos en los parámetros. 9. Si dos métodos son diferentes solo en sus tipos de retorno.println(b+"\n"). int b){ System. el compilador no distinguirá entre los dos métodos. 6. Ésta es una forma de lograr polimorfismo en Java. El código Java comienza aquí. System.out. 18. número. 8.out. } void mostrarEnPantalla(char a. int b.out. public class MetodoSobrecargadoEjemplo { 3. 19. El compilador detectará un error en tiempo de compilación si dos métodos en una clase tienen el mismo nombre y el mismo número y tipo de parámetros. 17.out.out. Pero si la diferencia entre dos métodos es sólo en cuanto a sus tipos de retorno. System. Sin embargo.println(b). char c){ System. int b){ System. 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. Volumen 2: Programación Orientada a Objetos 125 © Copyright IBM Corp.println(a). 7. Libro 1: Core Java . } void mostrarEnPantalla(int a. 20. /*Definicion de la clase comienza aqui*/ 2. Ejemplo 1.

33.8965). 'd'. String d){ System.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. 36. 74).println(c+"\n"). 'g'). msce. msce. 37.3. (float) 745.mostrarEnPantalla('f'.println(a). 38. msce. msce.Core Java Guía del Estudiante 21. 'h'). 35. 29.println(c). 32.mostrarEnPantalla(64. 24. char b. System. }/*Definicion de la clase termina aqui*/ El código Java termina aquí La salida del programa se muestra a continuación: 53 8965 68 g f 74 64 36 h Unidad 1: Clases y Objetos Libro 1: Core Java 126 © Copyright IBM Corp.out.println(d+"\n"). "true").out. } public static void main(String[] args) { MetodoSobrecargadoEjemplo msce = new MetodoSobrecargadoEjemplo(). System. System. 28. System.mostrarEnPantalla(85.println(b). 31. } 40. float c. } void mostrarEnPantalla(int a. 34. 30.out.mostrarEnPantalla(68. msce. 27. 39. 26. 22. .mostrarEnPantalla(53. 23. 36. 25.

hubo una correspondencia con la versión del método mostrarEnPantalla. En un programa. Sin embargo. de int a char y viceversa). Si una clase contiene a una clase anidada. Ellas pueden ser final o abstract. . protected. Las clases anidadas tienen acceso total a los miembros de su clase exterior. es conocida como clase exterior. no existe una correspondencia directa cuando dos enteros y un carácter son pasados como argumentos. ese carácter no se imprimió y que en su lugar se imprimió el valor ASCII del carácter. siempre que esa conversión se permita en Java. Esto se debe a que el compilador primero busca por la correspondencia exacta de ambos. el compilador busca por una correspondencia exacta para el conjunto de tres tipos de datos. esta versión particular del método sobrecargado será invocada. Se invocó esa versión y por lo tanto se obtuvo la salida anterior. se llama a esa versión particular del método. tanto del número de argumentos como del tipo de dato de los argumentos. 9. Fin del Ejemplo 1. cuando ambas condiciones corresponden con una versión sobrecargada particular del método.7 A continuación se va a entender el concepto de clases anidadas. Así que el tercer argumento se convirtió implícitamente a un int (Java permite tal conversión. además de public o package que es una posibilidad para cualquier clase. la cual toma tres enteros como argumentos. Ahora como miembro también puede ser private. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La forma general de una clase exterior que contiene a una clase anidada se muestra a continuación: class ClaseExterna{ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 127 © Copyright IBM Corp. que es 104. incluso a los miembros privados. el compilador convierte implícitamente el tipo de dato de los argumentos a algún otro tipo de dato. En la ausencia de tal correspondencia. Estas clases son consideradas miembro de la clase contenedora.Guía del Estudiante Core Java 85 d 745. Clases Anidadas Una clase anidada es una clase cuya definición está dentro de otra clase. Si se encuentra esa correspondencia. En el ejemplo anterior.3 true En la salida del programa anterior se puede ver en la línea 37 de la clase MetodoSobrecargadoEjemplo que a pesar que el tercer argumento pasado al método fue el carácter ‘h’.

6. 8. private int velocidadActual.Core Java //miembros de ClaseExterna public static class ClaseAnidadaEstatica { //miembros de ClaseAnidadaEstatica } private class ClaseInterna { //miembros de ClaseInterna } } Guía del Estudiante Existen dos tipos de Clases Anidadas: • Clase Anidada Estática: esta clase se declara como miembro estático (static) de la clase exterior y tiene todas las características de cualquier otro miembro estático. 7. 5. El código Java comienza aquí. private String placa. Acelerador() { velocidadMaxima = 180. } Unidad 1: Clases y Objetos Libro 1: Core Java 128 © Copyright IBM Corp. 4. Clase Interna: Esta clase se declara como miembro no-estático de la clase exterior y tienen todas las características de cualquier otro miembro de instancia. 10. 11.. private String nombre.8 El siguiente programa ilustra una clase anidada. • Un ejemplo de clase anidada se muestra a continuación: Ejemplo 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Una instancia de alguna clase interna sólo puede existir si una instancia de la clase contenedora existe. 12. /*Definicion de la clase Carro comienza aqui*/ 2. 13.. . 14. public class Carro { 3. /* Definición de clase anidada */ class Acelerador { private int velocidadMaxima. private String marca. 1. 9. La clase interna no puede tener miembros estáticos propios.

}/* Definicion de la clase Carro termina aqui */ El código Java termina aquí Note que en la línea 38 se necesita la instancia de la clase Carro para poder crear una instancia de Acelerador. 40. nombre = nom. 39. Fin del Ejemplo 1. miAcelerador. 37. 23. 35.8 Una clase interna también puede estar definida dentro de algún método de una clase externa. Esta representación es como sigue: public class ClaseExterna{ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 129 © Copyright IBM Corp. "KAA-87X"). 28. } } public void imprimirVelocidad() { System. String pla) { marca = mar.println("Velocidad: " + velocidadActual). velocidadActual = 0. 22. 27. miAcelerador. 17. . 21. 31. 38. 33.acelerar(100). 41. 20. 36. Acelerador miAcelerador = miCarro. 16. "Focus". 19. public void acelerar(int velocidad) { if ((velocidad + velocidadActual) < velocidadMaxima){ velocidadActual = velocidadActual + velocidad. 29. 32. 24. placa = pla. 30. 26.Guía del Estudiante Core Java 15. }/* Metodo main termina aqui */ 42. 25. } }/* Fin de la clase anidada Acelerador */ /* Constructor Carro comienza aqui */ Carro(String mar. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. debido a que esta última es un miembro de instancia de la clase Carro.out. 18. }/* Constructor Carro termina aqui */ /* Metodo main comienza aqui */ public static void main(String[] args) { Carro miCarro = new Carro("Ford".new Acelerador(). 34. String nom.imprimirVelocidad().

6. 1..Core Java int x.9 El siguiente programa ilustra el uso de los argumentos de línea de comandos: El código Java comienza aquí. Ejemplo 1.out. for (int i = 0. 10. Es posible declarar clases internas con o sin nombre. System. Argumentos de Línea de Comandos Los argumentos de línea de comandos se pueden usar para suministrar entradas a un programa durante su ejecución. public void metodoExterno(final int y){ final int z=12.print("Argumento " + (i+1)). System. en el ejemplo.println(x). Sin embargo sólo tiene acceso a las variables final del método que la contiene. Estos argumentos de línea de comando se guardan en un arreglo de string pasado al método main(). public static void main(String[] args) { 4.. ‘y’ y ‘z’. . A continuación se va a entender cómo tomar entradas del usuario a través de argumentos de la línea de comandos.out. } } } } Guía del Estudiante Este tipo de clase interna puede acceder a todos los miembros de la clase contenedora. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. public class LineaDeComandosEjemplo { 3. class ClaseInterna{ public void metodoInterno(){ x=3-y+z. Las clases internas sin nombre son conocidas como Clases Internas Anónimas y serán discutidas para el manejo de eventos en la Unidad 5 – Modelo de Delegación de Eventos y Manejo de Eventos del Volumen 5. i++) { 5. System. Libro 1: Core Java 130 Unidad 1: Clases y Objetos © Copyright IBM Corp.out.print(" es args[" + i + "]"). /*Definicion de la clase comienza aqui*/ 2.length. i < args. La construcción general para los argumentos de línea de comandos es como sigue: java nombreClase argumento1 argumento2 etc… Se pueden dar cualquier número de argumentos de línea de comandos. inclusive puede modificarlos.

9. }/* Definicion de la clase termina aqui */ El código Java termina aquí El programa se ejecuta como sigue: java Estos son argumentos pasados por linea de comandos La salida del programa se muestra a continuación.Guía del Estudiante Core Java 7.println(": " + args[i]). El programador puede usar las funciones de conversión para convertirlos a sus valores numéricos usando los métodos proporcionados en la clase String. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 131 © Copyright IBM Corp.9 Todos los argumentos de la línea de comandos son interpretados como strings en Java. Ciclo de Vida de un Objeto Usualmente. System.out. Una vez que se completa el objetivo para el cual fue creado el objeto. . Una vez que el recolector de basura toma el objeto. A continuación se discuten las diferentes etapas en el ciclo de vida de un objeto. en un programa Java. se crean objetos de varias clases. Salida: Argumento 1 es args[0]: Estos Argumento 2 es args[1]: son Argumento 3 es args[2]: argumentos Argumento 4 es args[3]: pasados Argumento 5 es args[4]: por Argumento 6 es args[5]: linea Argumento 7 es args[6]: de Argumento 8 es args[7]: comandos Fin del Ejemplo 1. 11. La Figura 1. El objeto es entonces destruido. los recursos que mantenía son liberados. para permitir que otros objetos puedan hacer uso de ellos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Estas clases interactúan entre sí a través de mensajes. está listo para recolección como basura. 8.14 muestra el ciclo de vida de un objeto. } } 10.

la primera línea es la declaración del objeto y la segunda. la variable fib sirve para guardar objetos del tipo Fibonacci. como se muestra a continuación. se crea una variable que puede guardar los objetos del tipo definido por la clase. Al invocar al constructor inicializa el nuevo objeto creado. Unidad 1: Clases y Objetos Libro 1: Core Java 132 © Copyright IBM Corp.1 Crear Objetos Como se mencionó anteriormente. El operador new que se usa para instanciar una clase. El operador new es seguido por el constructor de la clase instanciada. El objeto de una clase se conoce como instancia. Fibonacci fib. La segunda línea usa el operador de instanciación new para crear un nuevo objeto del tipo Fibonacci. En la etapa de declaración. son estas. Aquí. reserva la memoria requerida pare el nuevo objeto creado. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.14: Ciclo de Vida de un Objeto A continuación se verá la creación e instanciación de objetos. La declaración del objeto y la instanciación del objeto pueden realizarse en pasos separados. Java permite usar clases e interfaces en forma similar para tipos de datos. La inicialización del objeto se hace usando la parte de código después del operador new. En el ejemplo anterior. declaración del objeto. Esta parte del código invoca al constructor de la clase Fibonacci. que efectúa la inicialización. 11. Esto es posible dado que ambos son tipos referencia.6. Esta variable no puede ser usada para referenciar otro objeto simultáneamente. línea la instanciación del objeto. el proceso de crear objetos de una clase se denomina instanciación. Se puede usar el operador new para instanciar una clase.Core Java Guía del Estudiante Figura 1. instanciación del objeto e inicialización del objeto. es decir. El código anterior realiza tres acciones. como sigue: Fibonacci fib = new Fibonacci(). Fibonacci(). Tome de nuevo el Ejemplo 1. fib = new Fibonacci().

. luego por el nombre de la variable. es similar a acceder a variables a través de un método. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. o el constructor). también se puede modificar el valor de la variable invocando al constructor de la clase. se puede modificar el valor de la variable n accediéndola directamente. Considere las siguientes líneas de código: Fibonacci fib1 = new Fibonacci(10).n es 20). 11. El primer método es acceder a la variable directamente. Observe de nuevo la clase Fibonacci del Ejemplo 1. porque ha sido implementado para asignar el valor de su argumento a n. si se quiere cambiar el valor de la variable n del objeto fib. En este caso. En este caso. Instanciando la clase Fibonacci como sigue: Fibonacci fib = new Fibonacci(15). se muestra a continuación: int valorN = new Fibonacci(20). Esencialmente. se puede usar el objeto para obtener alguna información. Se pueden manipular sus variables a través de los métodos definidos en su clase. es la sintaxis usada para acceder a la variable. Fibonacci fib2 = new Fibonacci(20). cambiar el estado de sus variables. a la variable n se le asigna el valor de 15 por el constructor. pero su referencia no es almacenada. Se examinará la segunda forma de acceder a variables en la próxima sección.3 Variables Referencia en un Objeto Hay dos formas de tener acceso a la variable n.6.n. se crea un nuevo objeto.n = 20. Ahora. Las referencias a objetos apuntando al mismo tipo de objetos. se puede acceder a ella como sigue: fib.2 Uso de Objetos Una vez que se crea un objeto de un tipo en particular (clase).’. se tiene la referencia al objeto. porque la referencia no será usada posteriormente. seguida por ‘. la referencia al objeto (fib en este caso).Guía del Estudiante Core Java 11.n es 10) y la variable n de fib2 tendrá un valor de 20 (el valor de fib2. la variable n del objeto fib1 tendrá un valor de 10 (el valor de fib1. no necesariamente tienen el mismo valor en sus variables. La segunda forma es a través de un método (el método cambiarNumeroDeTerminos(). que es parte de la instancia de la clase Fibonacci. Otra forma de acceder a una variable sin que la referencia al objeto sea creada. o realizar alguna tarea. Esta es una manera de acceder a la variable. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 133 © Copyright IBM Corp. Aquí. Aquí.

fib. y se asigna como el nuevo valor para n. En la siguiente sentencia.4 Invocando los Métodos de un Objeto En la sección anterior se estudió cómo se puede cambiar el valor de la variable n accediéndola directamente. Se accede al método dentro del objeto en forma similar a la que se usa para acceder las variables del objeto. se crea un objeto del tipo Fibonacci y se tiene la variable fib como la referencia al objeto creado.6. En esta sección se presenta cómo lograr lo mismo invocando el método disponible en el objeto de la clase. la tercera forma es invocando a un método de la clase que permita cambiar el valor de n. con un punto entre ellos. para imprimir 10 términos de la serie de números Fibonacci como se muestra a continuación: Unidad 1: Clases y Objetos Libro 1: Core Java 134 © Copyright IBM Corp. En caso de que el método no tome argumentos. Hay tres formas de asignarle valor a n. se obtiene la referencia al objeto. como se muestra a continuación: new Fibonacci(10). El método cambiarNumeroDeTerminos() es un método provisto por la clase Fibonacci para modificar el valor de n. 11. con un punto entre la referencia al objeto y el nombre del método. es accediéndola directamente. para acceder a los métodos de un objeto también se puede usar una expresión que retorne una referencia a un objeto.cambiarNumeroDeTerminos(64). seguida por el nombre del método con un punto entre ellos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se usa la referencia seguida por el nombre del método. Este método asigna el valor 64 a la variable n del objeto. Se puede asignar un valor entero a la variable n pasándole un valor entero como un argumento al constructor. Primero. Una vez que el valor ha sido asignado a la variable usando el constructor. fib es la referencia al objeto Fibonacci.Core Java Guía del Estudiante A continuación se aprenderá a invocar métodos en un objeto. Los paréntesis que abren y cierran () deben seguir al nombre del método. . mediante la referencia al objeto accedemos al método cambiarNumeroDeTerminos() del objeto. Una forma es cuando se instancia el objeto. Como en el caso de las variables. y se pasa 64 (un valor entero) como argumento del método. Estos para indicar que el nombre que le sigue a la referencia al objeto es de un método y no de una variable. Aquí. se usa el nombre del método seguido por su lista de argumentos.cambiarNumeroDeTerminos(64). la segunda forma de poder cambiar el valor de la variable n. En este ejemplo. Considere la misma clase Fibonacci del Ejemplo 1. Después del nombre de la referencia. Se puede llamar al método printSeries() del objeto Fibonacci directamente. Fibonacci fib = new Fibonacci(10). Un valor entero es pasado como argumento del método.

mostrarSeries().mostrarSeries(). Invocar un método en un objeto es similar a enviar un mensaje a ese objeto.out. b=c. Si se quiere guardar el valor retornado por el método en una variable. se puede hacer como se muestra a continuación: (Asuma que el método mostrarSeries() retorna un valor entero). a=b. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println(a).mostrarSeries().out. o 0 para indicar lo contrario. if(n>=2) System. Suponga que se tiene un método que retorna un valor y se quiere guardar el valor retornado.out. } return(1). contador++. return(0). } El código Java termina aquí En el caso anterior el método mostrarSeries() retorna 1 para indicar que la operación fue exitosa. System. En el segundo caso.println(c). se hace como sigue: int exito = new Fibonacci(10). la referencia al objeto Fibonacci debe ya estar disponible en la variable fib como se discutió anteriormente en esta sección.. Si se tienen dos variables de Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 135 © Copyright IBM Corp.println("Entrada invalida").Guía del Estudiante Core Java new Fibonacci(10). El método mostrarSeries() no retorna ningún valor (indicado por la palabra clave void)..println(b). int exito = fib.out. } if(n>=1) System. public int mostrarSeries() { // método if(n<=0) { System. o Fibonacci fib = new Fibonacci(10). . while(contador<n) { c=a+b. El código Java comienza aquí.

SABADO} Unidad 1: Clases y Objetos Libro 1: Core Java 136 © Copyright IBM Corp. LUNES. invocar el mismo método en ambos objetos puede retornar resultados diferentes. Este proceso es conocido como recolección de basura.mostrarSeries(). int exito1 = fib1. A continuación se estudia el recolector de basura en detalle. Una referencia al objeto se usa para encapsular la referencia de los nuevos objetos creados. la memoria se asigna cuando un objeto es creado a partir de una clase. es reclamado para destrucción. debido a que fib y fib1 son referencias a diferentes objetos de la misma clase. exito y exito1 pueden tener diferentes valores. el recolector de basura lo reclama y la memoria asignada a éste es liberada. fib y fib1) apuntando a diferentes objetos de la misma clase Fibonacci. mientras el objeto este siendo usado en el programa Java. La memoria asignada al objeto es liberada y puede ser usada por otros objetos. Un objeto es alcanzable si es accesible en el programa. Se mantiene revisando que un objeto sea alcanzable por cualquier tipo de referencia. Un objeto que está actualmente en uso en un programa es accesible por alguna parte del programa en su etapa actual de ejecución. A continuación se discute el manejo de la memoria en Java. En Java.1 El Recolector de Basura Para usar un objeto en un programa Java.Core Java Guía del Estudiante referencia (digamos. Se puede usar esta referencia para examinar y manipular al objeto. Después que el objeto se usa en un programa.mostrarSeries(). el recolector de basura se encarga de liberar la memoria no utilizada. Esto significa que la memoria asignada a un objeto está disponible para este. 12. la memoria dinámicamente asignada tiene que ser explícitamente liberada. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Enumeraciones En Java 5.0. Cuando el objeto se torna inalcanzable por cualquier tipo de referencia. 13. El recolector de basura es un hilo de baja prioridad que se mantiene ejecutando en segundo plano en una JVM. aparece la palabra reservada enum que permite definir un conjunto de valores constantes bajo un mismo espacio de nombres que lo hace ser más coherente y legible. int exito = fib. se presenta un ejemplo de ello: enum Semana {DOMINGO. VIERNES. Manejo de la Memoria en Java En Java. En este caso. MIERCOLES. se necesita una referencia al objeto. JUEVES. . En lenguajes de programación como C y C++. Java da soporte a un manejo de memoria automático. Seguidamente. MARTES. 12.

Cada constante de enumeración tiene su propia copia de las variables de instancia. Las enumeraciones implementan java.io.1 Características de las Enumeraciones A continuación se presentan las características más relevantes de las enumeraciones: • • Las enumeraciones son clases: Cada constante de enumeración es un objeto del tipo de la clase enumeración. Sólo aquellas instancias definidas por enum están disponibles para su uso. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 137 © Copyright IBM Corp. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Comparable y • • • • • • Las enumeraciones definen el método valueOf(): Devuelve el valor de la constante de enumeración basado en el String pasado por parámetro.lang. No es posible crear una enumeración que herede de otra clase debido a la definición de la clase Enum: abstract class Enum<E extends Enum<E>> • • Sus valores no son tipo de datos enteros: Cada valor declarado es una instancia de la clase enumeración en sí mismo. static y final: Impide que sus valores puedan ser sobreescritos o cambiados.println(dia). impide que estos objetos sean superclases de otras.lang. } 13. Las enumeraciones proveen el método values(): Retorna un arreglo con la lista de las constantes de la enumeración. java. Sus valores son public. Las enumeraciones pueden tener constructores. Sus valores pueden ser comparados con == o equals().out. Además.Guía del Estudiante Core Java public void diasSemana() { for (Semana dia : Semana.Serializable.Enum. variables de instancia y métodos: Los contructores son llamados automáticamente cuando se declara cada constante de enumeración. Las enumeraciones extienden de java.values()) System.lang.Enum: Todas las enumeraciones extienden implicitamente de java. No tienen un constructor público: Esto elimina la posibilidad de crear instancias adicionales no definidas en tiempo de compilación.

usted debe ser capaz de: • • • • • • • • • • Explicar los conceptos de clases y objetos. Discutir acerca de la estructura y miembros de una clase Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Exponer el uso de Enumeraciones. Explicar el ciclo de vida de un objeto.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Describir el manejo de la memoria en Java. Explicar la necesidad y uso de los constructores de las clases. Explicar los modificadores de acceso. Definir variables y métodos en Java. Unidad 1: Clases y Objetos Libro 1: Core Java 138 © Copyright IBM Corp. Explicar cómo los métodos en una clase Java pueden ser sobrecargados. Mencionar cómo Java maneja los argumentos de la línea de comandos. .

es obligatorio declarar la variable que será usada para contener la referencia al objeto. La clase Y. a) Verdadero b) Falso 3) Para una clase llamada MiClase.Guía del Estudiante Core Java Unidad 1: Examen de Autoevaluación 1) Cuando se crea una instancia de una clase. a) Verdadero b) Falso 2) Se puede usar el valor de retorno del operador new para acceder a las variables del objeto recién creado como sigue: new Fibonacci(10). . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. está definida en el paquete p2. que es una subclase de X.n. ¿cuál de las siguientes es la forma correcta de definir un constructor sin argumentos? a) int MiClase() {…} b) void MiClase() {…} c) MiClase(int miObjetoDeClase) {…} d) MiClase() {…} 4) ¿Cuál de los siguientes debe estar necesariamente presente en una definición de una clase? a) Sentencia import b) Nombre de la superclase c) Palabra reservada class d) Interfaces implementadas 5) La clase X está definida en el paquete p1. ¿Qué tipo de variables declaradas en X pueden ser accedidas por un objeto de Y? a) private b) protected c) public d) package Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 139 © Copyright IBM Corp.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. int j).Core Java Guía del Estudiante 6) ¿Cuál de los siguientes tipos de variables en Java no pueden ser serializadas? a) transient b) volatile c) final d) protected 7) ¿Cuál de los siguientes tipos de métodos pueden usar código en C en un programa Java? a) static b) volatile c) final d) native 8) ¿Qué tipo de método puede invocar un método estático? a) final b) volatile c) private d) static 9) ¿Es posible para una clase tener dos métodos como los siguientes? void metodo1(int j. . "java MiClase hola mundo. a) Verdadero b) Falso 10) Cuando un programa Java con una clase MiClase es ejecutado usando la expresión. int metodo1(int k. int k)." ¿Cuál de las siguientes es correcta? a) args[0] tiene "MiClase " b) args[0] tiene "hola" c) args[1] tiene "hola" d) Ninguna de las Anteriores Unidad 1: Clases y Objetos Libro 1: Core Java 140 © Copyright IBM Corp.

Guía del Estudiante Core Java Respuestas a Unidad 1: Examen de Autoevaluación 1) b 2) a 3) d 4) c 5) b y c 6) a 7) d 8) d 9) b 10) b Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 141 © Copyright IBM Corp. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

.

Guía del Estudiante Core Java Unidad 2: Laboratorio de Clases y Objetos Objetivos del Aprendizaje Al final esta unidad. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 143 © Copyright IBM Corp. usted será capaz de: • • • Crear clases y objetos. Invocar métodos de una clase. Sobrecargar métodos en una clase.

Empleado tiene los siguientes detalles acerca del empleado: nombre.5 * base * altura Área del rectángulo = largo * ancho Área del cilindro = 3. Empleado y CalcularSueldo.14 * radio * radio * altura • • • • • Unidad 2: Laboratorio de Clases y Objetos Libro 1: Core Java 144 © Copyright IBM Corp. 2) Escriba un programa en Java que tenga las clases Area y Usuario.Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escriba un programa en Java que tenga dos clases. horas trabajadas y pago por hora. Declare variables para almacenar el nombre del empleado. CalcularSueldo crea instancias de la clase Empleado. código de empleado. obtiene los detalles del empleado para calcular los pagos y los imprime en la salida estándar. horas trabajadas y pago por hora. Usuario usa los métodos de Area para calcular el área de diferentes figuras geométricas y la imprime en la salida estándar. rectángulo y cilindro. rectángulo y un cilindro. Sugerencias Útiles: • • Cree una clase llamada Area. La clase Area tiene métodos estáticos sobrecargados con el nombre area()que pueden ser usados para calcular el área de un circulo. . • • El sueldo del empleado se calcula a partir de los detalles del empleado y se imprime en la salida estándar. El valor retornado se imprime en la salida estándar. código. Área del Círculo = 3. Cree una instancia de Empleado y valores de muestra de los detalles del empleado se pasan como parámetros al constructor. triángulo.14 * radio * radio Área del triangulo = 0. triangulo. Escriba cuatro métodos sobrecargados llamados area que tomen diferentes números y tipos de datos como parámetros. El constructor de Empleado toma las variables declaradas como parámetros y tiene el código para inicializar estas variables. Use el constructor de la clase Empleado para asignar valores a las diferentes variables. Estos métodos se usan para calcular el área de un círculo. Sugerencias Útiles: • • Escriba una clase llamada Empleado. Escriba una clase llamada CalcularSueldo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Escriba una clase llamada Usuario que invoque las diferentes versiones de area() en la clase Area con valores de prueba como parámetros.

Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables.. Declare variables para almacenar el nombre del instructor. Libro 1: Core Java .. Escriba métodos que le permitan guardar y obtener los datos. Cree una clase llamada Programa. Escriba una clase llamada CursoInstructor Declare variables para almacenar el número del curso y el ID del instructor. número de curso y número de ID del instructor. Curso tiene número del curso y el nombre del curso. Curso y CursoInstructor Use el método setter para inicializar las variables de cada clase con valores de prueba. Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables. Cree instancias de las clases Instructor. Escriba el método main que cree objetos de las tres clases y establezca datos en todos estos objetos. En la clase anterior. Sugerencias Útiles: • • • • • • • • • • • • Escriba una clase llamada Instructor. El programa debe ser capaz de buscar e imprimir el nombre de un instructor que enseña un curso. Cree una clase llamada Programa y defina un método estático que reciba un número variable de cursos e imprima un mensaje particular para cada uno. Declare variables para almacenar el número y nombre del curso. dado el número de curso. son estos. ID y disciplina. número de ID del instructor y disciplina. 4) Cree una enumeración llamada Curso con los nombres de los cursos de su preferencia. Considere un número de curso de prueba como entrada y use la clase CursoInstructor para encontrar al instructor que enseña ese curso e imprimirlo en la salida estándar. Escriba métodos para guardar y obtener los datos.’. Cree una clase llamada CursoInstructor que tenga dos miembros de datos. Instructor tiene el nombre del instructor.Guía del Estudiante Core Java 3) Cree dos clases llamadas Instructor y Curso. Escriba una clase llamada Curso. Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables. Volumen 2: Programación Orientada a Objetos 145 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Sugerencias Útiles: • • • Escriba una enumeración llamada Curso y definale los cursos de su preferencia. defina un método estático que reciba varios cursos usando la notación ‘.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. cree un switch que muestre un mensaje en particular para cada curso definico en la enumeración Curso. Pruebe el funcionamiento del método pasandole varias enumeraciones de Curso.Core Java Guía del Estudiante • • Escriba un for que recorra el conjunto de cursos. Dentro del cuerpo de la anterior estructura iterativa. • Unidad 2: Laboratorio de Clases y Objetos Libro 1: Core Java 146 © Copyright IBM Corp. .

Explicar el uso de la palabra reservada final. Explicar el uso de las palabras reservadas this y super. Describir cómo crear una jerarquía de herencia. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Unidad 3: Herencia Objetivos del Aprendizaje Al final de esta unidad. usted será capaz de: • • • • • Entender los fundamentos de la herencia. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 147 © Copyright IBM Corp. Explicar cómo sobrescribir los métodos.

usando el concepto de herencia. la clase ArbolDePino obtiene implícitamente todas las variables y métodos que tengan acceso protected. además de algunas características adicionales. que tiene las mismas características que la clase Arbol. .Core Java Guía del Estudiante 1. Unidad 3: Herencia Libro 1: Core Java 148 © Copyright IBM Corp. A continuación se discute cómo declarar clases usando la herencia en Java. Asuma que quiere crear una clase llamada ArbolDePino. y luego añadir las características especiales a la clase ArbolDePino. Se va a entender que es la herencia tomando un ejemplo de la vida real. Se puede tener una clase que define los atributos y comportamiento comunes a un grupo específico de clases. Cada subclase de una clase será una forma especializada de su superclase. Adicionalmente. Java proporciona una forma elegante de hacer lo anterior. La clase que define los atributos y el comportamiento común se denomina superclase. Todas las clases que son parte de este grupo específico pueden heredar los atributos y el comportamiento de esta clase común. la clase ArbolDePino puede ser una subclase de la clase Arbol. Sintaxis para Declarar Clases Usando Herencia en Java La sintaxis general para declarar una clase que hereda de una superclase es la siguiente: class NombreSubClase extends NombreSuperClase { // cuerpo de la SubClase } Una clase no puede ser su propia superclase. Así. ArbolDePino puede añadir sus propias características especiales además de las características de la clase Arbol. public y package. Permite crear una jerarquía entre un grupo de clases que tiene características similares. 2. De acuerdo con este concepto. Una superclase es una clase que es heredada por otras clases. también en la clase ArbolDePino. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Una clase puede tener cualquier número de subclases. Una forma de hacerlo es rescribiendo las variables miembro (atributos) y los métodos (comportamiento) que ya estaban disponibles en la clase Arbol. Sin embargo. Dado que ArbolDePino hereda de la clase Arbol. pero sólo puede tener una única superclase. puede ser llamado un ‘tipo de’ Arbol. Introducción La herencia es uno de los fundamentos de la programación orientada a objetos. Las clases que heredan atributos y comportamiento de la clase general (superclase) se denominan subclases.

6.. class Arbol { 3. /*Definicion de la clase Arbol comienza aqui*/ 2. 1. El código Java comienza aquí. private String nombre. Libro 1: Core Java . 7. 18. Para especificar que la clase ArbolDePino hereda de Arbol. private boolean conFlores. 21. } Volumen 2: Programación Orientada a Objetos 149 © Copyright IBM Corp. 11. 9. 15.Guía del Estudiante Core Java En el ejemplo anterior. la clase Arbol se llama superclase de la clase ArbolDePino. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 20. 16. private int edad. public String getNombre() { return nombre.. 24. 13. } public boolean isConFlores() { return conFlores. y la clase ArbolDePino se llama una subclase de Arbol. que hereda de la clase Arbol. } public void setEdad(int nuevaEdad) { edad = nuevaEdad. 10. 23. } public int getEdad() { return edad. 14. 8.1 El ejemplo ilustra como se realiza la herencia en Java. 17. 22. Ejemplo 3. 12. } public void setNombre(String nuevoNombre) { nombre = nuevoNombre. 4. 5. se debe usar la siguiente declaración de clase: class ArbolDePino extends Arbol {…} Se va a volver a revisar el ejemplo de la clase ArbolDePino.1 muestra la declaración de ambas clases. La clase ArbolDePino hereda de la clase base Arbol. 25. El código en el Ejemplo 3. 19.

out. /* Definicion de la clase ArbolDePino comienza aqui */ 33. nombreSub = subClase. 55. 60. superClase. public void setConFlores(boolean nuevoConFlores) { conFlores = nuevoConFlores. System. String nombreSuper. . 27. 40. 52. 39. } 44. 51.getNombre(). 57. 43.setEdad(36). 56. 42. String nombreSub. 35. /* Definicion de la clase HerenciaEjemplo comienza aqui */ 47. Arbol superClase = new Arbol(). subClase. public class HerenciaEjemplo { 48.setEdad(68). 46. public ArbolDePino() { setNombre("Pino"). System.getEdad()).println("Contenido de Super Clase:"). 54. conifero = true. 41. 36. Unidad 3: Herencia Libro 1: Core Java 150 © Copyright IBM Corp. 62. 58. System. } 30. 29. }/* Definicion de la clase Arbol termina aqui */ 31. }/* Definicion de la clase ArbolDePino termina aqui */ 45.out. 32.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 37. public static void main(String[] args) { 49. class ArbolDePino extends Arbol { 34.println("Nombre Arbol: " + nombreSuper). 28. ArbolDePino subClase = new ArbolDePino(). nombreSuper = superClase. 50. 53. } public boolean isConifero() { return conifero.Core Java Guía del Estudiante 26.println("Edad Arbol: " + superClase. 38. private boolean conifero. 61. 59.getNombre().

65. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 64. una superclase de una subclase puede ser usada por su cuenta. . ArbolDePino tiene su propia característica especial. Adicionalmente.out. que muestra una jerarquía de herencia.getEdad()).1 Se ha visto como se hereda de una clase en Java. en su declaración.println("\nContenido de Sub Clase:"). Por lo tanto.println("Nombre Arbol: " + nombreSub). Considere la Figura 3. System. Fin del Ejemplo 3.Guía del Estudiante Core Java 63.isConifero()). Por eso la subclase ArbolDePino también tiene las variables de instancia nombre. usa la palabra reservada extends. edad y conFlores de su superclase. System.out. El atributo conifero es una característica especial de la clase ArbolDePino. Esto se llama jerarquía de herencia. 66.println("Edad Arbol: " + subClase. 67.out. System.println("Conifero: " + subClase.out. Una subclase. seguida por el nombre de la superclase para especificar su superclase. System. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 151 © Copyright IBM Corp. Se puede construir la jerarquía de subclases de una superclase en particular. }/* Definicion de la clase HerenciaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es como sigue: Contenido de Super Clase: Nombre Arbol: null Edad Arbol: 36 Contenido de Sub Clase: Nombre Arbol: Pino Edad Arbol: 68 Conifero: true De la salida del programa anterior se puede ver que la subclase ArbolDePino obtiene implícitamente todos los miembros de su superclase Arbol.1. } 68. También se puede ver que la clase Arbol es una clase autónoma completamente independiente.

El primer concepto que se va a entender es qué componentes de una clase son heredados. La jerarquía mostrada en la Figura 3. Los constructores de la clase base no son heredados. La herencia no implica automáticamente visibilidad o accesibilidad a los miembros de la clase base en la clase que hereda. . A continuación se examinan algunos de los principales conceptos de herencia en Java. ExamenPractico y ExamenCertificacion. Sólo usando un método getter provisto en la clase base. Conceptos Esenciales de Herencia La herencia en Java tiene los mismos conceptos que en C++.1 se puede implementar en Java usando la palabra reservada extends. 3. y otros conceptos de herencia. también conocidas como campos y los métodos de la clase base son heredados. Sin embargo. se puede acceder a este miembro privado. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los modificadores de acceso controlan la accesibilidad de los miembros. ExamenPracticoAleatorio es una subclase de ExamenPractico. 3. en Java están más simplificados y existe menos ambigüedad que en C++.1 ¿Qué es Heredado? Las variables miembro. Note que ExamenPractico es la superclase de ExamenPracticoAleatorio.1: Jerarquía de Herencia En esta figura. Así. un miembro de datos privado de la clase base a pesar de que es heredado por la subclase no es accesible en forma directa por la subclase. la clase Examen es la superclase de ExamenSimple. Unidad 3: Herencia Libro 1: Core Java 152 © Copyright IBM Corp.Core Java Guía del Estudiante Figura 3.

Hay varios métodos útiles definidos en java. el método equals() retorna false.out. Ejemplo 3. 11. El código Java comienza aquí… 1. iguales = sb1. /*Definicion de la clase CompararEjemplo comienza aqui*/ 2. Si las dos referencias a objetos comparadas usando el método equals() apuntan a objetos diferentes. Considere el Ejemplo 3. }/* Definicion de la clase CompararEjemplo termina aqui */ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 153 © Copyright IBM Corp. ampliamente utilizados son: equals() y toString().Object por defecto. }/* Metodo main termina aqui */ 15.2.2 La Clase Object Todas las clases en Java heredan de la clase java.out. Así.equals(sb2). /* Metodo main comienza aqui */ public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("Palabra").lang. de lo contrario devuelve false.equals(sb2). 10. que tienen el mismo valor. 12. Dos de ellos.Object.lang. 3. 3. System. 14. . Este método devuelve true sólo si las dos referencias a objetos que son comparadas refieren al mismo objeto. 8. Dado que Object es la clase base de todas las clases Java. StringBuffer sb2 = sb1. 4. sb2 = new StringBuffer("Palabra"). 6.Guía del Estudiante Core Java Se aprenderá ahora acerca de la clase Object. Java provee ciertos métodos en la clase Object. boolean iguales = sb1. que están disponibles para todas las clases.1 El Método equals() El método equals() se usa para comparar dos referencias a objetos en relación con los valores que mantienen los objetos. que compara dos referencias a objeto StringBuffer sb1 y sb2. cualquier clase creada por el programador es una subclase de la clase Object. se estudiaran estos dos métodos.println(iguales).2.2 El ejemplo muestra el uso del método equals(). System. 13. 5. 9. public class CompararEjemplo { 3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println(iguales). 7.

StringBuffer sb2 = new StringBuffer("Palabra"). /* Metodo main comienza aqui */ Libro 1: Core Java 154 Unidad 3: Herencia © Copyright IBM Corp. la clase String tiene una implementación sobrecargada de equals() para comparar el valor en estos objetos. Considere el siguiente código: String s1 = "Hola".3 Este ejemplo muestra como el método equals() se usa en la clase String. Después de ejecutar la sentencia sb2 = new StringBuffer("Palabra").3.Object.equals(sb2). iguales tendrá el valor false. En este caso iguales tendrá true ya que s1 y s2 refieren a la misma instancia de la cadena de caracteres "Hola" creada en el repositorio de constantes de string. y no sólo la referencia. Por defecto. En este caso. puede ser sobreescrito para revisar los valores almacenados en los objetos. que determina si dos referencias hacen referencia al mismo objeto o no. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Considere el Ejemplo 3. 1.. El código Java comienza aquí. public class StringEjemplo { 3. compara los valores almacenados por dos objetos. iguales tendrá un valor true.. Se puede sobreescribir la implementación de equals que está en la clase java. considere el siguiente código: StringBuffer sb1 = new StringBuffer("Palabra"). /*Definicion de la clase StringEjemplo comienza aqui*/ 2. el operador == retornará true. Fin del Ejemplo 3. . que muestra este concepto. boolean iguales = (sb1 == sb2). boolean iguales = (s1 == s2). Por ejemplo. sb2 tiene una nueva referencia a objeto.Core Java Guía del Estudiante El código Java termina aquí Después de ejecutar la sentencia sb1. El método equals compara las dos referencias a objeto. String s2 = "Hola". Ejemplo 3. y retorna el valor como true. aún cuando el valor almacenado es el mismo ("Palabra"). Por ejemplo. Sin embargo. creados usando dos operaciones new. de aquí que sb1. Si dos referencias apuntan a la misma instancia de objeto.lang. porque sb1 y sb2 refieren a dos objetos StringBuffer diferentes. Otra forma de comparar objetos es usar el operador ==.equals(sb2) retorne false.2 El método equals() realiza una comparación profunda. chequeará la referencia a objeto de dos objetos.

out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Se considera a continuación el uso de las palabras reservadas this y super. str2 tiene una nueva referencia a objeto.println(iguales).equals(str2). 5. se han visto los diferentes métodos dentro de la clase Object.3 3. System. Cuando se escriben las clases se puede sobrescribir este método para dar información textual acerca de la clase de la forma que se quiera. Hasta ahora. 9. 11. ellas tienen los valores por defecto proporcionados por el sistema. 8. str2 = new String("Palabra").equals(str2) devuelve true. después de ejecutar la sentencia str2 = new String("Palabra"). Fin del Ejemplo 3. }/* Metodo main termina aqui */ 15. 3. String str2 = str1. Este ejemplo no usa ningún constructor para inicializar sus variables miembro. 13. los valores son comparados.println(iguales). 12.3 Palabras Reservadas super y this En el ejemplo de las clases Arbol y ArbolDePino discutido anteriormente. iguales retorna true.2 El Método toString() El método toString() se usa para obtener información textual acerca de un objeto. . que a su vez es seguido por la representación hexadecimal sin signo del código hash asociado con el objeto. las variables miembro no son inicializadas con ningún valor por defecto en el programa. 10. 6.2. ArbolDePino es una subclase de la clase Arbol. }/* Definicion de la clase StringEjemplo termina aqui */ El código Java termina aquí Después de ejecutar la segunda sentencia str1.Guía del Estudiante Core Java 4. 14. Por lo tanto. La palabra reservada super se usa para acceder a los miembros de la superclase desde la subclase. Aún en este caso. System. iguales = str1. 7.equals(str2). y la palabra reservada this se usa para acceder a los miembros del Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 155 © Copyright IBM Corp. str1.out. De ahí que. boolean iguales = str1. La implementación de toString() en la clase Object da el nombre de la clase seguido por el carácter @.equals(str2). public static void main(String[] args) { String str1 = new String("Palabra").

Se hizo llamando a super(new Date()).Core Java Guía del Estudiante objeto actual. Figura 3. Ahora se rescriben las clases Arbol y ArbolDePino ya discutidas para incluir constructores en ellas. la clase Arbol tendrá algunos valores por defecto establecidos para los objetos de tipo Arbol. En este caso. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. que se muestra en la Figura 3. La variable de instancia fecha está definida como un miembro privado en Examen. ArbolDePino hereda las variables de instancia nombre y edad de Arbol. Considere por un momento otro ejemplo. La clase ArbolDePino puede reutilizar los valores por defecto establecidos en la clase Arbol.2: Uso de la Palabra Reservada super() La clase ExamenCertificacion extiende de la clase Examen. para entender el uso de la palabra reservada super. . usando la palabra reservada super. El constructor de ExamenCertificacion inicializa variables de instancia como idVale y idEstudiante. Desde el constructor de ArbolDePino se puede acceder a la variable de Unidad 3: Herencia Libro 1: Core Java 156 © Copyright IBM Corp. Por lo tanto. se puede utilizar la palabra reservada super para invocar al constructor de la superclase.2. Ésta ha sido inicializada llamando al constructor de la superclase.

15. porque el parámetro no pertenece al objeto. se accede a la variable de instancia nombre usando la palabra reservada this (this. private int edad.nombre.edad = arbol. sino que es una variable local del método. 9. la variable nombre es pasada como parámetro a uno de los constructores de la clase Arbol. 8. public Arbol(String nombre. Para diferenciar entre la variable de instancia y el parámetro. Libro 1: Core Java . El código Java comienza aquí… 1. 14. Similarmente. int edad) { this. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 17. no hay necesidad de usar la palabra reservada this para acceder a las variables de instancia.Guía del Estudiante Core Java instancia nombre declarada en Arbol usando la palabra reservada super. this. 16. 10.4 Este ejemplo ilustra como trabajan las palabras reservadas super y this en la clase que hereda. 18. 19. 12. 6.4. /*Definicion de la clase Arbol comienza aqui*/ 2.nombre = arbol. Si el nombre de una variable de instancia no es el mismo que el de un parámetro de un constructor.edad = edad. Ejemplo 3. se puede acceder a la variable de instancia nombre heredada por ArbolDePino desde Arbol. En el programa en el Ejemplo 3.nombre). this. private boolean conFlores. } public Arbol() { this. private String nombre. Volumen 2: Programación Orientada a Objetos 157 © Copyright IBM Corp. 5. 7.nombre = "Roble".edad = 100. 13. 4. 11. usando la palabra reservada this en la superclase. El parámetro nombre se accede sin usar la palabra reservada this. } public Arbol(Arbol arbol) { this.nombre = nombre. Dentro del constructor se puede acceder tanto a la variables nombre como al parámetro nombre. this. class Arbol { 3.edad. se puede también usar la palabra reservada super dentro del constructor para invocar a un método declarado en la superclase.

} public void setEdad(int edad) { this.nombre = nombre. } public int getEdad() { return edad. 31. 35. 41. 22. } public boolean isConFlores() { return conFlores. 50. class ArbolDePino extends Arbol { 49. 23. .Core Java Guía del Estudiante 20. Unidad 3: Herencia Libro 1: Core Java 158 © Copyright IBM Corp. }/* Definicion de la clase Arbol termina aqui */ 46. 34. 26. 37. 24. 30. 27. } public void setConFlores(boolean conFlores) { 43. } 45. } public void setNombre(String nombre) { this. 25. 39. 21. 55. 29. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.edad = edad. 38. 51. } private boolean conifero. public ArbolDePino() { super(). 44. 33. 47. 54. 42. 36.conFlores = conFlores. 40. 52. /* Definicion de la clase ArbolDePino comienza aqui */ 48. 56. 28. conifero = true. setNombre("Pino"). 53. this. } public String getNombre() { return nombre. 32.

} public ArbolDePino(ArbolDePino arbolDePino) { super(arbolDePino). 64). 60.out. 65.println("\nContenido de arbol2:"). System. } public boolean isConifero() { 68.out. 82.getNombre()). 81. public static void main(String[] args) { Arbol arbol1 = new Arbol(). 88. public class SuperEjemplo { 74. 86.println("Nombre Arbol: " + arbol2. System.Guía del Estudiante Core Java 57. conifero = arbolDePino. Libro 1: Core Java . 90.println("Nombre Arbol: " + arbol1. 61. 79. 63. 83.println("Edad Arbol: " Volumen 2: Programación Orientada a Objetos 159 © Copyright IBM Corp. 62. 87. 69.conifero. 76. 75.out.out.out. 58.println("Contenido de arbol1:").out. System. System. 72. 78. boolean conico) { super("Pino". 67. /* Definicion de la clase SuperEjemplo comienza aqui */ 73. 59. 64.println("Edad Arbol: " + arbol1. System. 92. 77. 93. System. 80.println("Nombre Arbol: " + arbol3.println("\nContenido de arbol3:"). System. 85. System.out. Arbol arbol2 = new Arbol("Mango". public ArbolDePino(int edad.getEdad()).getNombre()). 91. return conifero.println("Edad Arbol: " + arbol2. } 70.out. 89.out. edad). }/* Definicion de la clase ArbolDePino termina aqui */ 71.getEdad()). 66. 84.getNombre()). Arbol arbol3 = new Arbol(arbol2). System. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. conifero = conico.

isConifero()).getEdad()).getEdad()). 111.isConifero()). 115. System. 106. 103. 116.getEdad()).isConifero()).out. 108.println("Edad Arbol: " + pino2.getNombre()).out.println("Conifero : " + pino3. + arbol3. 120. 121.getNombre()).out.out. System.getEdad()).println("\nContenido de pino2:"). 114. System. 99. ArbolDePino pino2 = new ArbolDePino(35.out. ArbolDePino pino3 = new ArbolDePino(pino2). System.out. 105.out. 100.println("Nombre Arbol: " + pino2.println("Edad Arbol: " + pino3.out. System. 117. System.out. . System.println("\nContenido de pino1:"). 101.getNombre()).println("Conifero : " + pino1. 102.out.println("Nombre Arbol: " + pino3. System. 95. 96. 104.out.Core Java Guía del Estudiante 94.println("Conifero : " + pino2. }/* Definicion de la clase SuperEjemplo termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Contenido de arbol1: Nombre Arbol: Roble Edad Arbol: 100 Unidad 3: Herencia Libro 1: Core Java 160 © Copyright IBM Corp. 107.println("Edad Arbol: " + pino1. 109. 112. System. 122.out. 98. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 118. System. ArbolDePino pino1 = new ArbolDePino(). 97. true). System. 119. 113. System. 110. } 123.println("Nombre Arbol: " + pino1.println("\nContenido de pino3:").

ArbolDePino usa los tres constructores cuando define sus constructores usando super().1 Usar super en Clases Derivadas – Un Enfoque Detallado En términos generales. una subclase se puede referir a su superclase inmediata usando la palabra reservada super. La primera forma se usa cuando se invoca al constructor de la superclase.Guía del Estudiante Core Java Contenido de arbol2: Nombre Arbol: Mango Edad Arbol: 64 Contenido de arbol3: Nombre Arbol: Mango Edad Arbol: 64 Contenido de pino1: Nombre Arbol: Pino Edad Arbol: 100 Conifero : true Contenido de pino2: Nombre Arbol: Pino Edad Arbol: 35 Conifero : true Contenido de pino3: Nombre Arbol: Pino Edad Arbol: 35 Conifero : true En este programa. 3. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 161 © Copyright IBM Corp.4 se vio que el uso de la primera forma de la palabra clave super. El uso de la segunda forma de la palabra clave super será ilustrado posteriormente.4 Teniendo una idea general de la palabra reservada super. se verá en detalle su uso en la herencia. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Fin del Ejemplo 3. mientras que la segunda se usa para acceder a las variables miembro de la superclase que han sido ocultadas por las variables miembro de la subclase. la clase Arbol define tres constructores sobrecargados diferentes. .3. La palabra reservada super puede usarse en dos formas diferentes. En el programa del Ejemplo 3.

La herencia tiene un comportamiento diferente cuando se usa junto a un modificador de acceso. nombreDeMiembro puede referir tanto a una variable como a un método de instancia de la superclase. se puede pasar el objeto ArbolDePino al constructor Arbol(Arbol arbol).conifero. como se ilustró en el programa del Ejemplo 3. Aquí super() permite referir al constructor de la superclase inmediata (Arbol) de la clase actual (ArbolDePino). La forma general del uso de super se da a continuación: super. de lo contrario el compilador generará un error. el compilador busca por la correspondencia exacta en la lista de parámetros de los diferentes constructores de la superclase.4. Unidad 3: Herencia Libro 1: Core Java 162 © Copyright IBM Corp. De esta forma. La palabra reservada super también sirve para referir a las variables miembro o a los métodos miembro de la superclase. Pero aún así. La forma general de la palabra reservada super usada por el constructor de la subclase para llamar al constructor de la superclase es como sigue: super(listaDeParametros).nombreDeMiembro Aquí. En este caso. esto se debe a que una variable referenciando a un objeto de la superclase también puede usarse para referenciar al objeto de una clase que deriva de ella. el miembro conifero se le asigna valor por separado en el constructor ArbolDePino() después de invocar al constructor de la clase Arbol mediante super(). entonces será la primera sentencia en el constructor de una subclase. Cuando una subclase usa la palabra reservada super en la forma descrita. conifero = ap. A continuación se considera ese aspecto. . ArbolDePino(ArbolDePino ap) { super(ap). Se verá en un ejemplo como acceder a un método de la superclase desde un método en la subclase en la sección Sobrescritura de Métodos. Véase el siguiente constructor definido por la clase ArbolDePino.Core Java Guía del Estudiante Una subclase puede ocultar una variable de su superclase teniendo su propia variable con el mismo nombre que el de la superclase. No conoce acerca de los miembros adicionales de la clase ArbolDePino. super() se usa con un objeto del tipo ArbolDePino y no del tipo Arbol. se invoca al constructor de la forma Arbol(Arbol arbol). se usa ese constructor particular. Por lo tanto. Usualmente si se usa super(). el objeto arbol puede acceder solamente a los miembros presentes en la clase Arbol. Este uso de la palabra reservada super es similar al uso de la palabra reservada this. } En este código. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Si se encuentra una correspondencia.

pero dado que Arbol provee una forma de acceder al atributo nombre a través de los métodos getNombre() y setNombre().1.3. ArbolDePino puede. En el Ejemplo 3. En la Figura 3. Las variables declaradas como private no pueden accederse desde la clase derivada. Figura 3. Para más información sobre éstos modificadores de acceso refiérase a la Unidad 1 – Clases y Objetos de este volumen. entonces la subclase puede acceder a todas las variables y métodos declarados como package en su superclase.2 Herencia y Modificadores de Acceso A continuación se va a entender si una subclase tiene acceso o no a todas las variables (atributos) y métodos (comportamiento) declarados en su superclase. Una solución mejor será usar el método setNombre. esto no está permitido. y así sucesivamente. porque está declarado como private. el constructor de ArbolDePino accede a la variable private nombre de Tree. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Si la superclase está presente en el mismo paquete que la subclase. el atributo nombre de Arbol no es accesible por ArbolDePino.3. o la superclase de su superclase.3: Herencia y Modificadores de Acceso Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 163 © Copyright IBM Corp.Guía del Estudiante Core Java 3. . indirectamente acceder al atributo. y asignarle el valor de "Arbol" dentro de su constructor. Una subclase puede acceder a todas las variables y métodos declarados como public y protected de su superclase.

16. y ArbolDePino será una subclase de ArbolConifero . 3.4 Jerarquía de Herencia Se aprendió acerca de jerarquía de herencia simple. 13. en la cual una clase que es una subclase de una clase. . Sin embargo.nombre = nombre.edad = edad. public Arbol(String nombre. } Libro 1: Core Java 164 Unidad 3: Herencia © Copyright IBM Corp. Los métodos se proporcionan para destacar los puntos esenciales de la herencia multinivel. 17. 12.Core Java Guía del Estudiante A continuación se discute acerca de herencia múltiple y jerarquía de herencia en Java. } public int getEdad() { return edad. 15. ArbolConifero será una subclase de Arbol. 11. 1. protected int edad. } public String getNombre() { return nombre. 14. 8. /*Definicion de la clase Arbol comienza aqui*/ 2. 3. Esto será tratado en detalle en la Unidad 5 – Clases Abstractas e Interfaces en este volumen.. this.5 Este ejemplo muestra como crear una jerarquía de herencia multinivel usando tres clases. 5.3 Herencia Múltiple en Java Java no soporta directamente la herencia múltiple. 6. 4. Este ejemplo da una completa descripción para las tres clases. 7. 9. será una superclase de otra. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se verá como escribir programas Java que construyen una jerarquía de herencia multinivel.. protected String nombre. class Arbol { 3. Ejemplo 3. Esto significa que una clase no puede tener más de una superclase directa.3. Se va a alterar el programa del ejemplo anterior para ilustrar una jerarquía de herencia multinivel. 10. que consiste de una superclase y una subclase. En esta sección. Java indirectamente ayuda a implementar la herencia múltiple a través del uso de interfaces. int edad) { this. El código Java comienza aquí.

23. 39. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. this. 48. . int edad.Guía del Estudiante Core Java 18. /* Definicion de la clase ArbolConifero comienza aqui */ 21. } public boolean isConifero() { return conifero. 50. private boolean conifero. }/* Definicion de la clase Arbol termina aqui */ 19. } public String getLugarDondeCrece() { return lugarDondeCrece. public ArbolConifero(String nombre. 37. edad). String lugarDondeCrece) { super(nombre. } public ArbolDePino( String nombre. 49. private String lugarDondeCrece. conifero = true. /* Definicion de la clase ArbolDePino comienza aqui */ 35. 43.lugarDondeCrece = lugarDondeCrece. class ArbolConifero extends Arbol { 22. /* Definicion de la clase comienza aqui */ 53. 24. 28. 44. }/* Definicion de la clase ArbolDePino termina aqui */ 51. public static void main(String[] args) { Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 165 © Copyright IBM Corp. class ArbolDePino extends ArbolConifero { 36. 31. }/* Definicion de la clase ArbolConifero termina aqui */ 33. 52. 34. 20. 27. 26. int edad) { super(nombre. public class JerarquiaHerenciaEjemplo { 54. edad). 25. } 32. 41. 42. 29. 47. 38. 40. 46. 45. 30.

out. Se puede ver del programa anterior que super()se refiere a la superclase inmediata de la clase que invoca. Fin del Ejemplo 3. System. 63.isConifero()).out. desde el nivel más bajo al más alto nivel en la jerarquía. 59.println("Lugar donde crece: " + pino. a pesar de que el constructor de la subclase puede no requerir todos estos parámetros. 58. El constructor de ArbolDePino invoca al constructor de su superclase usando super(nombre. 57. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println("Edad: " + pino.println("Conifero: " + pino. En el método main se crea un objeto ArbolDePino. Estos parámetros son pasados hacia arriba. seguido por los constructores de las subclases.getNombre()).println("Arbol: " + pino.getEdad()). 56.getLugarDondeCrece()). 23. 62. El constructor de la clase base (superclase) se llama primero. La clase ArbolDePino hereda las características de ambas clases Arbol y ArbolConifero y añade su variable miembro lugarDondeCrece. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Arbol: Pino Edad: 23 Conifero: true Lugar donde crece: Malaysia Del programa anterior se puede ver que la clase ArbolConifero hereda todas las características de la clase Arbol y añade aquellas características que le resultan especiales (boolean conifero).Core Java Guía del Estudiante 55. cuando un objeto de una subclase se crea en la jerarquía. en el mismo orden en el cual las subclases fueron creadas. es importante saber el orden de construcción de los objetos. 3. } 65.out.4. System. edad).5 Se discute a continuación el orden de construcción de los objetos. ArbolDePino pino = new ArbolDePino( "Pino". 61.out.1 Orden de Construcción de los Objetos En una jerarquía de herencia. "Malaysia"). System. . también se puede ver que todos los parámetros del constructor de la superclase son pasados cuando se invoca. System. Unidad 3: Herencia Libro 1: Core Java 166 © Copyright IBM Corp. 60. 64.

System. public X() { 4.out. } 27. 22. 5. /*Definicion de la clase X comienza aqui*/ 2.out. }/* Definicion de la clase Y termina aqui */ 14.println("Objeto de la clase Y construido!"). } 13. }/* Definicion de la clase Z termina aqui */ 21. public static void main(String[] args) { 25.out.println("Objeto de la clase X construido!"). 11.6 El ejemplo muestra como se construyen los objetos. /*Definicion de la clase comienza aqui*/ 23. class Z extends Y { 17. /*Definicion de la clase Y comienza aqui*/ 9. 12. public class OrdenConstruccionObjetosEjemplo { 24. 26. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* Definicion de la clase X termina aqui */ 7. class X { 3. public Z() { 18. }/* Definicion de la clase termina aqui */ El código Java termina aquí… La salida del código anterior será la siguiente: Objeto de la clase X construido! Objeto de la clase Y construido! Objeto de la clase Z construido! Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 167 © Copyright IBM Corp. System. public Y() { System. } 20. 19.println("Objeto de la clase Z construido!"). 15. El código Java comienza aquí… 1. /*Definicion de la clase Z comienza aqui*/ 16. . 8.Guía del Estudiante Core Java Ejemplo 3. } 6. class Y extends X { 10. new Z().

donde una clase es una subclase de otra clase. 1. int n. class Y extends X { 17.Core Java Guía del Estudiante Fin del Ejemplo 3.. 7.. X(int m. 10. } 13. int n) { a = m. int a. Cuando se invoca un método sobrescrito desde la subclase.6 El ejemplo anterior muestra que el objeto de la clase base X se construye primero. 9. int d.7 Este ejemplo ilustra cómo se sobrescriben los métodos en las clases heredadas. . class X { 3. El sobrescribir métodos es otro concepto importante en herencia. 6. siempre se refiere al método definido dentro de la subclase. int o) { Libro 1: Core Java 168 Unidad 3: Herencia © Copyright IBM Corp. c. /*Definicion de la clase X comienza aqui*/ 2. 12. el mismo número de argumentos y los mismos tipos de argumentos en el mismo orden). 15. b. /* Definicion de la clase Y comienza aqui */ 16. 19. 4. }/* Definicion de la clase X termina aqui */ 14. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. si un método en la subclase tiene la misma firma (el mismo nombre de método. seguidos por los objetos de Y y Z. La versión del método que se encuentra en la superclase que está sobrescrita (oculta) puede ser accedido usando la palabra clave super dentro de la subclase. b = n. entonces el método en la superclase se dice que está sobrescrito (ocultado) por el método en la subclase. Ejemplo 3. 18. 8. 5. 11.5 Sobrescritura de Métodos En una jerarquía de clases. } public int add() { return (c = a + b). Y(int m. que un método en la superclase. 3. El código Java comienza aquí.

41. d = o. System. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. public static void main(String[] args) { X x = new X(42. 24. 21. 25. 36. Fin del Ejemplo 3. } /* Metodo sobrescrito */ public int add() { int s = super. n). 32. 40. 28. 27.println( "Suma en la sub-clase: " + y. pueden usar la palabra reservada super como se mostró en el programa anterior. } 30. se puede ver que cuando se invoca el método add() en el objeto de la clase Y. public class SobrescrituraMetodosEjemplo { 34. 38.Guía del Estudiante Core Java 20. 23. // return (c = super.35). Y y = new Y(42. super(m. 29. 35.out.out. 43. 26. El método add() definido en su superclase está sobrescrito u oculto.add(). 39. se invoca al método add() definido en Y. } 44. 42. return (c = s + d). 22.7 Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 169 © Copyright IBM Corp. /* Definicion de la clase comienza aqui */ 33. .23).println( "Suma en la super clase: " + x.add() + d). 37. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Suma en la super clase: 77 Suma en la sub-clase: 100 Del programa anterior. Cuando los métodos dentro de la clase Y quieren acceder al método sobrescrito de la clase X.add()).add()). }/* Definicion de la clase Y termina aqui */ 31.35. System.

Core Java

Guía del Estudiante

Si un método en la superclase y en la subclase tienen el mismo nombre, pero sus firmas son diferentes, entonces los métodos son sobrecargados y no sobrescritos. En este caso, el método en la superclase no está oculto y es accesible directamente, sin usar la palabra reservada super.

3.6 Comportamiento Virtual y Herencia
En Java todos los métodos son virtuales por defecto. Por virtual se entiende que todos los métodos en Java son polimórficos por naturaleza. El comportamiento asociado con los métodos polimórficos se denomina comportamiento virtual, ya que el comportamiento correcto es determinado en tiempo de ejecución. La Figura 3.4 muestra dos clases, Examen y ExamenPractico que tienen una relación de herencia (es decir, la clase ExamenPractico hereda de la clase Examen). Referencias al objeto ExamenPractico pueden ser asignadas a objetos del tipo Examen. Ahora, cuando se invoca a un método de este objeto Examen, se llama al método de la clase derivada (ExamenPractico). El enlace se realiza en tiempo de ejecución. A una referencia a objeto de la superclase se le puede asignar una referencia a cualquier objeto de su subclase. Esto se usa ampliamente especialmente en el manejo de excepciones, que será discutido en el Volumen 3, Unidad 1 – Manejo de Excepciones y Tipos de Excepciones.

Unidad 3: Herencia

Libro 1: Core Java 170

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Figura 3.4: Comportamiento Virtual en Java

El programa en el Ejemplo 3.8 se usa para ilustrar el comportamiento virtual discutido anteriormente, usando el ejemplo 3.1 de las clases Arbol y ArbolDePino. Ejemplo 3.8 Este ejemplo muestra como usar comportamiento virtual en un programa Java. El código Java comienza aquí... 1. /* Definicion de la clase comienza aqui */ 2. public class ComportamientoVirtualEjemplo { 3. public static void main(String[] args) { 4. ArbolDePino ap = new ArbolDePino(); 5. 6. 7. Arbol a = new Arbol(); ap.setEdad(75);

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 171 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.

System.out.println( "Valores de la referencia de la sub clase: "); System.out.println("Nombre: " + ap.getNombre()); System.out.println("Edad: " + ap.getEdad()); System.out.println("Conifero: " + ap.isConifero()); /* Asignando la referencia del objeto ArbolDePino a la referencia del tipo Arbol */ a = ap; System.out.println( "Valores de la referencia de la super clase: "); System.out.println("Nombre: " + a.getNombre()); System.out.println("Edad: " + a.getEdad()); // Esto generaria un error // System.out.println("Conifero: " + a.isConifero()); }

25. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Valores de la referencia de la sub clase: Nombre: Pino Edad: 75 Conifero: true Valores de la referencia de la super clase: Nombre: Pino Edad: 75 En este programa, ap es una referencia al objeto ArbolDePino, y a es una referencia al objeto Arbol. En la primera parte del programa, se usa directamente ap para acceder a sus métodos. En la segunda parte del programa, se le asigna ap a a en la línea 16 como sigue: a = ap; ArbolDePino es una subclase de Arbol y por eso se le puede asignar ap a a. Esto implica que la referencia a un objeto de la superclase se le puede asignar la referencia de su subclase. Cuando se accede a los métodos de ArbolDePino usando a, no se puede acceder a isConifero(), porque no está presente en la superclase Arbol.

Unidad 3: Herencia

Libro 1: Core Java 172

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Todos los métodos definidos en la clase base son accesibles a través de a. Por lo tanto, cuando se asigna la referencia a la subclase a una referencia de superclase, solamente aquellos métodos que están disponibles en la superclase pueden ser accedidos usando la referencia. Fin del Ejemplo 3.8 El punto a destacar aquí es que la referencia al objeto de superclase que actualmente referencia a su subclase permite acceder solamente a aquellas variables de la subclase que han sido heredadas de la superclase. Por esto la referencia a no puede acceder al miembro conifero, que está presente solamente en ArbolDePino, y no en Arbol. Esto es así, porque la superclase no conoce de las características especiales añadidas por la subclase. Esta es la razón por la que la línea 23 de la función main, a.isConifero() está comentada. La asignación a = new ArbolDePino() es conocida como upcast y es legal en Java. Sin embargo, no se puede tener ap = new Arbol(), que es referido como downcast. Si se desea asignar a a ap después de hacer a = new ArbolDePino(), se debe realizar una conversión explícita como se muestra a continuación: ap = (ArbolDePino) a; A continuación se aprenderá acerca del uso de la palabra reservada final en el contexto de herencia.

3.7 Herencia y la Palabra Reservada final
Se puede declarar una variable que tenga un valor constante a través del programa usando el modificador final sobre la variable. Una variable final puede ser inicializada solamente una vez dentro de un programa Java, y mantendrá el mismo valor a través de todo el programa. No se puede cambiar el valor asignado a una variable final más adelante en el programa. Ejemplo 3.9 Este ejemplo ilustra como la palabra clave final se puede usar en las clases. El código Java comienza aquí… 1. /* Definicion de la clase comienza aqui */ 2. public class VariableFinalEjemplo { 3. /* El metodo main comienza aqui */ 4. 5. 6. 7. public static void main(String[] args) { final int contador = 10; int a = 10; System.out.println(

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 173 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

8. 9. 10. 11. 12. 13. 14. 15. 16.

"Valor de la variable contador es: " + contador); a = a + contador; System.out.println( "Valor de la variable a es: " + a); contador++; // Error de compilacion contador = 25; // Error de compilacion }/* El metodo main termina aqui */

17. }/* Definicion de la clase termina aqui */ El código Java termina aquí En este programa se puede inicializar la variable final contador sólo una vez y usarla subsecuentemente dentro del programa sin alterar su valor. Cuando se intenta actualizar contador o asignarle un nuevo valor, se lanza un error de compilación como ocurre en las líneas 14 y 15. Fin del Ejemplo 3.9 El Ejemplo 3.9 muestra el uso de la palabra clave final para declarar constantes. El uso de final con las clases derivadas tiene un impacto diferente, que se verá a continuación. Uso de la Palabra Reservada final para prevenir la Herencia Cuando se quiere evitar que una clase se herede, se puede usar el modificador final en la declaración de la clase. Cuando se declara una clase como final, Java declara implícitamente todos los métodos de la clase también como final. No se puede declarar una clase abstract como final, dado que la clase abstracta requiere que sus subclases proporcionen las implementaciones completas para todos sus métodos. Este concepto será estudiado en detalle en la Unidad 5 – Clases Abstractas e Interfaces de este volumen. Ejemplo 3.10 El programa ilustra el uso del modificador final para una clase. El código Java comienza aquí… 1. 2. 3. 4. 5. 6. final class X { private int a; X(int m) { a = m; } public void setA(int m) {

Unidad 3: Herencia

Libro 1: Core Java 174

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

10. 9. Fin del Ejemplo 3. Generalmente el compilador Java resuelve la invocación de métodos en tiempo de ejecución. public int b. puede haber situaciones donde no se quiere que un método sea sobrescrito por sus subclases para mejorar el desempeño del programa. el compilador sabe que estos métodos final no serán sobrescritos por sus subclases. mejorando el rendimiento del programa. 11. Y no puede ser subclase de X */ 15. esto se llama enlace tardío (late binding).Guía del Estudiante Core Java 7. 12. } . Se puede usar el modificador final al declarar métodos para conseguir el enlace temprano. 17. } El código Java termina aquí Como se discutió.11 Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 175 © Copyright IBM Corp. } public int getA() { return (a). Ejemplo 3.10. 18.1 Uso de la Palabra Reservada final Para Prevenir la Sobrescritura En esta sección veremos el uso de la palabra reservada final en la declaración de los métodos para evitar que el método sea sobrescrito.11. Se modificará el programa del Ejemplo 3. 20.7. class Y extends X { 16. porque X fue declarada como final. 14. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. para ilustrar el uso de final en la declaración de métodos para prevenir el sobrescribir. Esto se debe a que. una característica importante en Java. } 13. y directamente remplaza el código fuente por el bytecode. b = n. 3. Considere el Ejemplo 3. Esto se llama enlace temprano (early binding). A pesar de que sobrescribir métodos es sin duda. 21. 19. } a = m. /* error de compilación. int n) { super(m). en este caso. 8. Y(int m. la clase Y no puede heredar de la clase X.10 A continuación se discute el uso de la palabra reservada final para evitar la sobrescritura de métodos de una superclase por su subclase.

int o) { super(m.11 Unidad 3: Herencia Libro 1: Core Java 176 © Copyright IBM Corp. se obtiene un error de compilación. } 14. 13. 3. 2. El código Java termina aquí En este ejemplo. } } Y(int m. d = o. 17. X(int m. n). 12. 30. } final int add() { c = a + b. 22. 11.. b. 5. . class X { int a. int n) { a = m. que se extiende de la clase X. dado que el método add() ha sido declarado como final en la clase X. 6. return (c). 8. 21. int n. 27.Core Java Guía del Estudiante El código Java comienza aquí. no puede ser sobrescrito en la clase Y. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 28. 26. 7. c. 1. 20. 25. 23. class Y extends X { 16. } 15.. 18. 4. return (c). 10. 29. b = n. 9. Fin del Ejemplo 3. } /* Error de compilacion: Metodo final no puede ser sobrescrito */ public int add() { int s = super. c = s + d. 24. 19. Por lo tanto. int d.add().

usted debe ser capaz de: • • • • • Explicar los fundamentos de la herencia. Explicar el uso de la palabra reservada final. Discutir cómo sobrescribir métodos. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 177 © Copyright IBM Corp.Guía del Estudiante Core Java Resumen Ahora que ha completado esta unidad. . Describir cómo crear una jerarquía de herencia. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar el uso de las palabras reservadas super y this.

el acceso está disponible sólo para los miembros que se definen en la superclase. a) Verdadero b) Falso 5) Si X es la superclase de Y. Y y = new Y(). ¿desde cuál de las siguientes heredan todas las clases en Java? a) Clase Base b) Clase Super c) Clase Object d) Ninguna de las anteriores 4) Una clase puede tener cualquier número de superclases directas y subclases. a) Verdadero b) Falso Unidad 3: Herencia Libro 1: Core Java 178 © Copyright IBM Corp. y = x. . a) Verdadero b) Falso 3) Por defecto. x = y. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 6) Cuando a una variable de referencia de una superclase se le asigna una referencia a una subclase. ¿cuál de las siguientes es un uso correcto? a) X x = new X().Core Java Guía del Estudiante Unidad 3: Examen de Autoevaluación 1) ¿Cuál modificador debe usarse para modificar una variable para hacerla inaccesible por la subclase? a) protected b) public c) package d) private 2) Una clase que es subclase de una clase puede ser una superclase de alguna otra clase. b) X x = new X(). Y y = new Y().

Guía del Estudiante Core Java 7) Cuando se usa el objeto de una subclase Y que deriva de una clase X. a) Verdadero b) Falso Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 179 © Copyright IBM Corp. Cuando un objeto de C es creado. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y B es la superclase de C. Constructor de B. Constructor de A c) Constructor de A. en una clase externa Z. Constructor de C 9) ¿Cuál es la palabra clave usada en Java para detener la sobrescritura de métodos en subclases? a) static b) stop c) final d) private 10) Cuando se usa la palabra clave final con una variable. ésta no puede ser ocultada por una subclase con una variable con el mismo nombre. a) Verdadero b) Falso 8) A es la superclase de B. Constructor de B. se puede hacer referencia a los métodos de la clase X usando la palabra clave super con el objeto de la clase Y. Constructor de C d) Constructor de A. . ¿cuál es el orden en el que los constructores se invocan? a) Sólo el constructor de C es invocado b) Constructor de C.

. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Core Java Guía del Estudiante Respuestas a la Unidad 3: Examen de Autoevaluación 1) d 2) a 3) c 4) b 5) a 6) a 7) b 8) c 9) c 10) b Unidad 3: Herencia Libro 1: Core Java 180 © Copyright IBM Corp.

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 181 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 4: Laboratorio de Herencia Objetivos de Aprendizaje Al final de esta unidad. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. usted será capaz de: • • Trabajar con herencia. Invocar métodos de una superclase. .

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Naranja y Rojo e imprime en la salida estándar sus atributos colorNombre. Azul. Este método verifica si el atributo colorName de r. Si es verdadero. una después de la otra.Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escribir un programa en Java. La clase AntiPrisma tiene el siguiente método. Índigo. Verde v). La clase Cientifico usa las clases Prisma y AntiPrisma. String getColor(). "amarillo". También tiene un método llamado incrementaVelocidadCaja que realiza los cambios desde 1 hasta 4 y un método llamado decrementaVelocidadCaja que realiza los cambios desde 4 hasta 1. a y v son "rojo". Verde. “verde”. frenoDelantero. La clase Bicicleta también tiene un método llamado indicaGiro() que cambia el valor de la variable indicador en forma concordante. Amarillo. // la cadena retornada da el color La clase Blanco hereda de la clase Color y tiene su atributo (private) colorNombre establecido en “Blanco”. Unidad 4: Laboratorio de Herencia Libro 1: Core Java 182 © Copyright IBM Corp. 2) Escribir un programa en Java que tenga una clase llamada Bicicleta con ruedas. respectivamente. Todas estas clases tienen una variable privada llamada colorNombre que es inicializada con "violeta". "azul" y "verde". "naranja" y "rojo". Azul. Amarillo. Este método verifica si el método getColor() retorna "blanco". velocímetro. Si la verificación resulta en falso. final void setColor(String color). crea instancias de las clases Violeta. asiento. Si es verdadero. crea un nuevo objeto Blanco e imprime el valor de su atributo colorNombre en la salida estándar. que tenga una clase llamada Color. Naranja y Rojo heredan de la clase Blanco. . void activatePrisma(Color c). Verde. frenoTrasero y velocidadCajaActual como atributos. y el método decrementaVelocidadCaja se sobrescribe para hacer los cambios desde 5 hasta 1. Índigo. Un Conductor (otra clase) maneja la Bicicleta y la BicicletaCarrera. Las clases Violeta. respectivamente. "índigo". La clase Prisma tiene el siguiente método. void activateAntiPrisma(Rojo r. Una clase llamada BicicletaCarrera es subclase de la clase Bicicleta y sobrescribe el método incrementaVelocidadCaja para hacer los cambios desde 1 hasta 5. "azul". Azul a. indicador. La clase Color tiene un atributo colorNombre que es privado y los siguientes métodos.

Explicar cómo las interfaces son implementadas y usadas como referencia. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 183 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 5: Clases Abstractas e Interfaces Objetivos de Aprendizaje Al final de esta unidad. Definir una interfaz. Diferenciar entre clases abstractas y clases concretas. . usted será capaz de: • • • • • Explicar clases abstractas. Describir cómo definir clases y métodos abstractos en Java.

Usualmente. hasta la Unidad 3 – Herencia. esto se debe a que un mamífero puede tener el aspecto de una jirafa. Sin embargo. Las clases abstractas se usan para definir las características generales de un concepto abstracto. llamadas. En esta unidad. Delfin y Ballena. y podemos visualizar cada uno de ellos.Herencia. sin embargo. se pueden crear instancias de sus subclases. los delfines y las ballenas pertenecen a la categoría llamada mamíferos. Las clases abstractas tienen las definiciones de métodos que justifican su comportamiento. Clases Abstractas En todas las unidades anteriores. Las jirafas. Estas clases se denominan así porque se pueden instanciar objetos de ellas. obteniéndose una implementación parcial de su comportamiento. No. Una clase abstracta puede implementar algunos de los métodos definidos en ella. 2. se tratará el tema de clases abstractas e interfaces. Una clase abstracta se usa para definir los atributos comunes y el comportamiento general de un grupo de clases. las clases abstractas pueden implementar todos los métodos definidos en ella. no se implementa una gran parte de la clase (no se da la implementación de los métodos). Existe otro grupo de clases que no pueden instanciarse.Core Java Guía del Estudiante 1. se han discutido solamente las clases concretas. algunas veces. Considere tres especies de mamíferos: jirafas. el operador new no puede usarse en las clases abstractas. Las clases que heredan de una clase abstracta implementan los métodos abstractos definidos en esa clase. la subclase misma se declara como una clase abstracta y la clase que herede de esta subclase abstracta debe proporcionar la implementación para sus métodos abstractos. Por lo tanto. en nuestro ejemplo. delfines y ballenas. Se va a entender el concepto de clases abstractas con dos ejemplos generales. . Introducción Se estudió la herencia en Java en la Unidad 3 . no se pueden crear instancias de Mamifero. un delfín o una ballena. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 184 © Copyright IBM Corp. ¿Cuándo se piensa en un mamífero se puede visualizar cómo luce?. se pueden modelar estas especies como clases de software: Jirafa. Delfin y Ballena. las cuales pueden usarse por la herencia. se denominan clases abstractas. Se conoce el aspecto de estos tres animales. De lo contrario la cadena de clases abstractas continúa. En caso de que la subclase no proporcione la implementación para todos los métodos abstractos definidos en la clase abstracta. Jirafa. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Una clase abstracta puede ser usada para representar entidades que no pueden ser visualizadas. Se pueden representar las características de los mamíferos en la forma de una clase llamada Mamifero. Mamifero puede ser una clase abstracta.

Estas características pueden ser abstraídas en una clase llamada Numero. que forma la clase base para las subclases Entero. ya que existe también sólo en abstracción en el mundo real.1: Clases Abstractas vs. Clases Concretas Se va a mencionar a continuación como Java provee mecanismos para definir y usar clases abstractas en programas. No pueden ser instanciadas.. Clases Abstractas Se usan concretas. Otras clases concretas heredan de clases abstractas para concretizar su definición abstracta. Clases Concretas La Tabla 5. Pueden ser instanciadas. sus métodos. delfines y ballenas dan a luz a sus pequeños en ambientes diferentes.1 ilustra las diferencias entre clases abstractas y concretas. El concepto de número es un concepto abstracto porque no existe un objeto llamado número en la realidad. se van a resumir las diferencias entre clases abstractas y concretas. Los dos ejemplos que se han discutido muestran como las clases abstractas son útiles para definir conceptos abstractos en Java. Definen métodos abstractos para los No definen métodos abstractos. . números reales. Antes de avanzar más en lo concerniente a clases abstractas. 2. De la discusión anterior está claro que existen algunos patrones genéricos de comportamiento de entidades del mundo real que pueden ser abstraídos en una sola clase. La clase Numero se define como clase abstracta. etc. la cual forma la clase base para la herencia. lo que se tiene en el mundo real son enteros. Pueden o no proveer implementación para Deben proveer implementación para todos cualquiera de los métodos. Tabla 5. No se puede usar para definir donde ellos dan a luz a sus pequeños. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 185 © Copyright IBM Corp. Considere otro ejemplo.1 Clases Abstractas vs. En el ejemplo anterior. Sin embargo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Real. etc. las jirafas.Guía del Estudiante Core Java Una de las características comunes a los mamíferos es que ellos dan a luz a sus pequeños. un delfín y una ballena dan a luz en el agua. que forma la clase base. Mientras la jirafa da a luz a su pequeño en tierra. cuyos atributos y métodos podrán ser heredados por otras clases. cuales la implementación no es provista. la clase Mamifero se puede usar solo para definir las características que ellos dan a luz a sus pequeños. Mamifero es la clase abstracta. para generalizar Clases Concretas clases Se usan para representar objetos del mundo real. Por lo tanto. que comparten características o propiedades comunes.

al cual el método abstracto pertenece. se denomina clase abstracta. // error ^ 1 error Las clases abstractas pueden tener dos tipos de métodos: métodos que tienen implementación y métodos que no tiene implementación. . Indica que las subclases que hereden de la clase abstracta. Los métodos implementados en una clase abstracta son métodos concretos. El modificador abstract se usa con una clase para indicar que la clase no puede ser instanciada.java:6: ClaseAbstracta is abstract. El modificador indica que la implementación del método no es provista en la clase. entonces la subclase también se debe definir como una clase abstracta. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 186 © Copyright IBM Corp. 3. cannot be instantiated ClaseAbstracta ca = new ClaseAbstracta(). proporciona un método abstract. Se van a definir los métodos abstractos en Java. se puede usar de dos formas. Uso de Clases Abstractas El modificador abstract que se aprendió en la Unidad 1 – Clases y Objetos. La palabra clave abstract se usa antes de la palabra clave class para definir una clase como clase abstracta. cuando se usa en una declaración de método. como se hizo en la clase InstanciacionClaseAbstractaEjemplo.Core Java Guía del Estudiante 3.1 Definición de Métodos Abstractos El modificador abstract. . el compilador mostrará el siguiente mensaje de error: InstanciacionClaseAbstractaEjemplo. El siguiente código muestra como declarar una clase abstract: abstract class ClaseAbstracta{ // . deben proveer la implementación para el método. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . Si la subclase inmediata no provee implementación para el método abstracto de su superclase. ya sea con una clase o con un método. // error } } Cuando se intenta instanciar una clase abstract. Los métodos que no tienen implementación son métodos abstractos. Cuando una clase tiene el modificador abstract en la declaración de la clase. } class InstanciacionClaseAbstractaEjemplo{ public static void main(String args[]){ ClaseAbstracta ca = new ClaseAbstracta().

no necesariamente debe contener un método abstracto. 3. La siguiente es la estructura general de la declaración de un método abstracto: abstract tipoRetorno nombreMetodo(argumentos). Considere el siguiente fragmento de código: abstract class Abstracta { abstract void m1(). Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 187 © Copyright IBM Corp. Una clase abstracta puede contener cualquier número de métodos abstractos. /* Referencia a la clase Abstracta */ Abstracta referenciaAbstracta. } class Concreta extends Abstracta { void m1() { System. referenciaAbstracta = c. } } public class AbstractaEjemplo { public static void main(String args[]) { Concreta c = new Concreta().println("En m1").Guía del Estudiante Core Java Los métodos abstractos pueden estar presentes solamente dentro de una clase abstracta. Sin embargo cuando existe un método abstracto dentro de la clase. Antes de avanzar con ejemplos de clases y métodos abstractos. la clase debe ser declarada como abstracta. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Esto es posible porque Java soporta polimorfismo. se puede crear una referencia a ésta. Como se mencionó anteriormente.println("En m2"). que permite que un objeto de una clase sea referenciado por una referencia a su superclase. . } void m2() { System. Cuando una clase es declarada como abstracta.2 Clases Abstractas y Referencias Aunque no se puede instanciar una clase abstracta. La palabra reservada abstract se usa antes de especificar el tipo de retorno del método. también es posible tener una clase abstracta que de la implementación para todos los métodos definidas en ella y así no tenga ningún método abstracto.out. lo que significa que la implementación del método no se proporciona en la clase. Se puede ver que el cuerpo del método está ausente. se va a ver como una referencia se puede usar para una clase abstracta.out.

se va a considerar dos clases llamadas CuentaDeAhorros y CuentaCorriente. La representación gráfica de la clase CuentaDeAhorros y el código Java que la implementa se muestra en la Figura 5. Usando referenciaAbstracta en el código anterior.2: Representación de la Clase CuentaDeAhorros En el diagrama de la clase CuentaCorriente y el código Java que la implementa se muestran en la Figura 5.3. CuentaDeAhorros numero:String saldo:double tasaInteres:double cerrar():void calcularIntereses():double credito(double):void debito(double):void getSaldo():double public class CuentaDeAhorros { private String numero.Core Java Guía del Estudiante referenciaAbstracta. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.2. Una vez aprendido como definir clases y métodos abstractos. CuentaCorriente numero:String saldo:double comisionMensual:double cargarComision():double cerrar():void credito(double):void debito(double):void getSaldo():double public class CuentaCorriente { private String numero. a esta referencia se le pueden asignar referencias de subclases de Abstracta. Esta característica es muy útil para lograr el polimorfismo. private double saldo. private double saldo. private double comisionMensual public public public public public } double cargarComision() {…} void cerrar() {…} void credito(double cantidad){…} void debito(double cantidad){…} double getSaldo() {…} Figura 5. } } En el código anterior. private double tasaInteres.3: Representación de la Clase CuentaCorriente Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 188 © Copyright IBM Corp. se crea una referencia referenciaAbstracta de la clase Abstracta. se puede hacer referencia al método m1() definido en la clase abstracta. .m1(). public public public public public } void cerrar() {…} double calcularIntereses() {…} void credito(double cantidad){…} void debito(double cantidad){…} double getSaldo() {…} Figura 5.

3.2 y 5. Las similitudes entre estas clases permite definir una jerarquía de herencia. se puede crear una clase en común llamada CuentaBancaria. public abstract void cerrar().4: Clase Abstracta CuentaBancaria La definición en Java de la clase CuentaBancaria se muestra en la Figura 5. La forma de implementar las funcionalidades. Las definiciones abstractas están en letra itálica. . private double saldo. esta clase se convierte en candidata para una clase abstracta. se pueden hacer las siguientes observaciones: • • • • Ambas clases tienen algunas funcionalidades en común. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. que tenga funciones definidas en ella. El diagrama de la clase CuentaBancaria se muestra en la Figura 5.5: Definición en Java de la Clase CuentaBancaria Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 189 © Copyright IBM Corp. Es posible crear instancias para ambas clases. Para estas clases. Figura 5.5. public abstract class CuentaBancaria { private String numero. public double getSaldo() {…} } Figura 5. public void credito(double cantidad) {…} public abstract void debito(double cantidad). es sin embargo drásticamente diferente para ambas clases.Guía del Estudiante Core Java De las Figuras 5. sin la implementación.4.

CuentaCorriente y CuentaDeAhorros. Las implementaciones de los métodos se muestran en puntos suspensivos.7: Definición en Java de la Clase CuentaCorriente Se van a escribir dos programas Java que usan clases y métodos abstractos. Figura 5. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 190 © Copyright IBM Corp. El código fuente para la clase CuentaCorriente se muestra en la Figura 5. Figura 5. .Core Java Guía del Estudiante Las dos clases. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. pueden ahora ser derivadas de la clase abstracta CuentaBancaria.7.6: Derivando de la Clase Abstracta CuentaBancaria Las dos clases: CuentaDeAhorros y CuentaCorriente extienden de la clase abstracta y proveen la implementación para los métodos definidos como abstractos.

public static void main(String[] args) { V subClase = new V().metodo1(). void metodo2() { System. se puede ver que a pesar de que no se creó un objeto de la clase U. 25. .out. }/* Definicion de la clase AbstractaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es la siguiente: Dentro de metodo1 en la clase V Dentro de metodo2 en la clase U De la salida del programa anterior. } 8. subClase. /* Definicion de la clase V comienza aqui */ 11. 10. }/* Definicion de la clase V termina aqui */ 17. class V extends U { 12. 22.out. public class AbstractaEjemplo { 20. /* Definicion de la clase AbstractaEjemplo comienza aqui */ 19. 18. 14. 4. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } 16. }/* Definicion de la clase U termina aqui */ 9.println( "Dentro de metodo2 en la clase U"). 5. /* El metodo main comienza aqui */ 21. 6. subClase. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 191 © Copyright IBM Corp.Guía del Estudiante Core Java Ejemplo 5. la clase V implícitamente tiene la implementación para el metodo2.1 Este ejemplo muestra como un método abstracto se implementa en la subclase V.println( "Dentro de metodo1 en la clase V"). 24. System. 23. abstract void metodo1(). 15. 7.metodo2(). El código Java comienza aquí… 1. abstract class U { 3. }/* El metodo main termina aqui */ 26. /* Definicion de la clase U comienza aqui */ 2. void metodo1() { 13.

float y) { dimension1 = x. 19. 20. /* Definicion de la clase Poligono comienza aqui */ 2. /* Definicion de la clase Cuadrado comienza aqui */ 15. } float area() { 21. 5. float dimension2. 6. 14. se instancian tres objetos de estas tres clases y usando la referencia a la clase abstracta se invoca a los métodos en las subclases. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Core Java Guía del Estudiante Más aún. class Cuadrado extends Poligono { 16. El código Java comienza aquí… 1. no puede crearse un objeto de la clase U. También se puede notar que la clase abstracta proporciona la implementación para el método metodo2. float dimension1. 12. dimension2 = y. /* Definicion de la clase Triangulo comienza aqui */ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 192 © Copyright IBM Corp.2 Usando la clase abstracta Poligono. Cuadrado(float side) { 17. 9. return (dimension1 * dimension2). se crean tres subclases. Ejemplo 5. pues es una clase abstracta. 4. 8. side). } 23. 25. Poligono(float x. . abstract class Poligono { 3.1 El próximo ejemplo ilustra como usar una referencia a una clase abstracta. super(side. 7. }/* Definicion de la clase Poligono termina aqui */ 13. }/* Definicion de la clase Cuadrado termina aqui */ 24. } abstract float area(). 11. Fin del Ejemplo 5. lo cual es perfectamente aceptable. 22. 18. 10.

14 * dimension1 * dimension1 * dimension2). 59. /* El metodo main comienza aqui */ 51. 36. public class AbstractaEjemplo { 50.out. 33. 41. poligono = t. } float area() { 32. 31. public static void main(String[] args) { 52. class Cilindro extends Poligono { 38. 55. 29. return ((float) 0. 60. Cilindro(float radio. altura). 3).println( "Area del cuadrado es: " + poligono. System. Libro 1: Core Java . Cuadrado cu = new Cuadrado(7).area()). }/* Definicion de la clase Cilindro termina aqui */ 47. 56. 45. 5).Guía del Estudiante Core Java 26. } float area() { return ((float) 3. class Triangulo extends Poligono { 27. 43. Triangulo(float base. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Volumen 2: Programación Orientada a Objetos 193 © Copyright IBM Corp. 61. 57. /* Definicion de la clase AbstractaEjemplo comienza aqui */ 49. 58. float altura) { 28. /* Definicion de la clase Cilindro comienza aqui */ 37. 48. Poligono poligono. Cilindro ci = new Cilindro(6. 62. super(radio. 40. float altura) { 39. altura). }/* Definicion de la clase Triangulo termina aqui */ 35. 53. poligono = cu. } 46. 54. super(base. Triangulo t = new Triangulo(4. } 34. 42. 44. 30.5 * dimension1 * dimension2).

System. Tanto las clases abstractas como las concretas pueden Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 194 © Copyright IBM Corp.2 En el programa anterior. ¿Qué son las Interfaces? Las interfaces son similares a las clases. pero no soportan ninguna variable de instancia. Por lo tanto. es decir. No se puede tener una implementación significativa del método area() en un polígono de dos dimensiones. .out. 64. Fin del Ejemplo 5. }/* Definicion de la clase AbstractaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior sería así: Area del cuadrado es: 49. en términos de sintaxis. es sólo una referencia a la clase abstracta Poligono. 66. 67. se crea una referencia a la clase abstracta Poligono. System.0 Area del triangulo es: 10.println( "Area del cilindro es: " + poligono.out. Una interfaz especifica el prototipo o comportamiento de una clase.0 Area del cilindro es: 339. 69. el método area() se declara como abstracto y su implementación se deja para sus subclases. }/* El metodo main termina aqui */ 72.area()). La variable poligono del programa anterior. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. esta variable permite referenciar objetos de sus subclases. poligono = ci. Una interfaz no puede ser instanciada. Los métodos sobrescritos se resuelven en tiempo de ejecución usando la variable de referencia de la superclase. 65. Una interfaz esencialmente captura los roles que juegan las diferentes clases que implementan las interfaces. 70. no se les proporciona implementación.12 En el programa anterior se puede ver que las características de la clase abstracta Poligono son más significativas con la implementación que proporcionan sus subclases para el método abstracto area().println( "Area del triangulo es: " + poligono. 71. pero no se crea un objeto del tipo Poligono.area()). Declarar el método area() como abstracto obliga a que todas sus subclases no abstractas implementen el método. 68.Core Java Guía del Estudiante 63. Todos los métodos declarados en una interfaz son métodos abstractos. 4.

Una interfaz puede extender de otra interfaz. Las Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 195 © Copyright IBM Corp. que es un identificador válido. } Usualmente. De tal forma que. . Clases no relacionadas pueden implementar la misma interfaz. Todas las funcionalidades requeridas por diferentes aplicaciones se guardan dentro de una interfaz. La definición de interfaz es similar a la definición de clases. . . tipoDeRetorno nombreMetodoN(listaDeArgumentos). Sin embargo. Si la implementación no se proporciona para aunque sea uno de los métodos definidos en la interfaz entonces la clase deber ser declarada como clase abstracta. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El nombre de una interfaz se especifica en nombreInterfaz. . Cuando el modificadorDeAcceso no se menciona. Una clase concreta que implemente la interfaz tiene que proveer la implementación para todos los métodos declarados en la interfaz. También una misma interfaz puede ser implementada por cualquier número de clases. Una clase puede implementar cualquier número de interfaces. tipoDeDato nombreVar2 = valor. introduciéndose cierta relación entre las clases. cualquier otra interfaz o clase presente en cualquier paquete puede usarla. La estructura general se muestra a continuación: modificadorDeAcceso interface nombreInterfaz { tipoDeDato nombreVar1 = valor. Cuando una interfaz se declara como public. . ésta es una de las ventajas de usar interfaces. Las interfaces pueden declarar variables que son final y static. tipoDeRetorno nombreMetodo2(listaDeArgumentos). . de lo contrario no es mencionado. las interfaces actúan como sustitutos de la herencia múltiple. una interfaz no puede implementar otra interfaz. ya que la implementación no es provista por ninguno de los métodos declarados en la interfaz. el modificadorDeAcceso usado es public. las clases que implementen la interfaz no pueden cambiar sus valores. lo que significa que se puede crear una jerarquía de interfaces.Guía del Estudiante Core Java implementar una interfaz. Por lo tanto. Las interfaces implementadas por una clase especifican la interfaz que puede ser usada para la comunicación entre la clase y otros objetos. tipoDeRetorno nombreMetodo1(listaDeArgumentos). se considera package por defecto. tipoDeDato nombreVarN = valor. .

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.8. Si la interfaz se declara como public. todas las variables y métodos en la interfaz tienen acceso público.8: Definición de la Interfaz List en Java 1. UML es un lenguaje de modelación para el análisis y diseño orientado a objetos. La Figura 5. Considere la Figura 5. que muestra la definición de la interfaz List de Java 1. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 196 © Copyright IBM Corp. Figura 5. Esta figura sólo muestra algunos de los métodos más usados de la interfaz List. Se discute el marco de trabajo para colecciones en el Volumen 8.8 muestra la interfaz List definida en el paquete java.4. .4 La Figura 5. Unidad 1 – API Colecciones.util.4 en formato UML (Unified Modeling Language). que es parte del marco de trabajo para colecciones de Java.Core Java Guía del Estudiante variables definidas en una interfaz deben ser inicializadas con un valor constante.9 presenta la definición de la interfaz List de java 1.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . que implementa la interfaz List. Figura 5. que implementa la interfaz List.10 muestra la clase Vector.9: Definición de la interfaz List en Formato UML UML hace uso del estereotipo <<interface>> para indicar que List es una interfaz y no una clase. La Figura 5.Guía del Estudiante Core Java Figura 5.11 muestra la representación en UML para la clase Vector.10: Definición de la Clase Vector que Implementa la Interfaz List La Figura 5. se puede ver una línea punteada seguida Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 197 © Copyright IBM Corp. En esta figura.

Dos otras clases. Se escoge implementar la interfaz como una mejor alternativa porque las interfaces definen un protocolo. implementan también List. Las funcionalidades pueden ser implementadas como métodos en la clase Vector. Se debe notar que la implementación de los métodos no se proporciona aquí.Core Java Guía del Estudiante por un triangulo hueco. } Esta es una declaración simple de interfaz con dos métodos. Una clase Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 198 © Copyright IBM Corp.1 ¿Por qué usar Interfaces? En la sección anterior. De manera que si se entiende la interfaz List. así. Las clases que implementen esta interfaz deben proporcionar la implementación de los métodos. String getMensajeGrabado(). El siguiente código da un ejemplo de declaración de interfaz: interface ContestadorAutomatico { void grabarMensaje(String mensaje). A continuación se entenderá por qué se usan las interfaces. Figura 5. sin tener que implementar la interfaz. se asegura que todas las clases que implementan la interfaz se adhieren al protocolo definido en la interfaz. se aprendió que la clase Vector implementa la interfaz List. También se sabe que la clase Vector puede contener toda la funcionalidad que provee la interfaz List. getMensajeGrabado() y grabarMensaje() en ella. 4. se puede fácilmente entender la operación de las clases Vector. . ya que todos los métodos definidos en una interfaz son abstractos por definición. esta es la notación UML para indicar que Vector implementa la interfaz List. LinkedList y ArrayList. LinkedList y ArrayList. Una interfaz puede ser implementada por muchas clases.11: Representación UML de la Clase Vector que Implementa List No es obligatorio para los métodos definidos en una interfaz usar la palabra reservada abstract. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

isEmpty etc. this.Guía del Estudiante Core Java Vector. 5. implementa la interfaz Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 199 © Copyright IBM Corp. 6.mensaje = mensaje. 7.] { // cuerpo de la clase } Considere el Ejemplo 5.3 para entender cómo una clase implementa una interfaz. Los métodos que implementan las clases deben ser declarados como public y sus firmas del método deben coincidir con la firma del método declarado en la interfaz que ellas implementan. /* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. los nombres de las interfaces se separan por comas.. String mensaje. Ejemplo 5. Una vez que la declaración de la interfaz se completa. se aprendió a declarar una interfaz. 8. 9.println("Mensaje grabado: " + mensaje). Si la clase implementa múltiples interfaces. interfaz2. puede ser implementada por una clase. String mensajeSaludo = "Regreso despues de las 11pm". La clase usa la cláusula implements para especificar las interfaces que implementa. /* Definicion de la clase Telefono comienza aqui */ 2. contains. .out.. 4. la clase sólo necesita proveer una implementación para la declaración del método. get. La siguiente es la estructura general de la declaración de clase para la clase que implementa una interfaz: modificadorDeAcceso class nombreClase [extends nombreSuperClase] [implements interfaz1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. una clase HashTable y cualquier otra clase que requiera el protocolo definido en la interfaz List puede implementar la interfaz List. remove. . Los usuarios de estas clases saben que todas las clases que implementen la interfaz List proveerán los métodos add. Si dos o más interfaces implementadas por una clase tienen la misma declaración de método. 4. public class Telefono implements ContestadorAutomatico{ 3.. porque la interfaz List declara estos métodos.2 Implementación de Interfaces En la sección previa.3 El ejemplo muestra como la clase Telefono ContestadorAutomatico antes mencionada. El código Java comienza aquí… 1.

16. 12. }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. 16. 6. se sabe que implementa la interfaz ContestadorAutomatico. 9. 11.out. String mensaje. El ejemplo anterior. 13. boolean interlocutor2 = false.mensaje = mensaje. boolean respuestaEncendido = false. 4. return mensajeSaludo.println("Mensaje Saludo: " + mensajeSaludo). muestra a la clase Telefono implementando los dos métodos declarados en la interfaz ContestadorAutomatico. 7. 14. 15. También es posible que la clase Telefono desee definir otras funcionalidades además de los métodos declarados en la interfaz. boolean interlocutor1 = false. 12. . /* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. // .println("Mensaje grabado: " + mensaje). 8. . Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 200 © Copyright IBM Corp. 15.out. 10. lo que asegura que los dos métodos declarados en ContestadorAutomatico serán implementados. 14. }/* Definicion de la clase Telefono termina aqui */ El código Java termina aquí Se debe notar que los métodos en la clase anterior Telefono se declaran como public dado que implementan los métodos de la interfaz ContestadorAutomatico. }/* El metodo getMensajeGrabado termina aqui */ 17. esto se ilustra en el siguiente extracto de código: El código Java comienza aquí… 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. this. String mensajeInterlocutor1.Core Java Guía del Estudiante 10. 5. /* Definicion de la clase Telefono comienza aqui */ 2. Cuando se observa la declaración de la clase Telefono. 13. public class Telefono implements ContestadorAutomatico{ 3. String mensajeSaludo = "Regreso despues de las 11pm". String mensajeInterlocutor2. . String mensajeBasico = "Hola". 11.

32. }/* El metodo recibirMensajeInterlocutor2 termina aqui */ /* El metodo enviarMensajeInterlocutor2 comienza aqui */ void enviarMensajeInterlocutor2(String mensaje) { mensajeInterlocutor1 = mensaje. Fin del Ejemplo 5. }/* El metodo enviarMensajeInterlocutor1 termina aqui */ /* El metodo recibirMensajeInterlocutor2 comienza aqui */ String recibirMensajeInterlocutor2() { return(mensajeInterlocutor2). 26. 29.Guía del Estudiante Core Java 17. 19. 39. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 201 © Copyright IBM Corp. }/* El metodo enviarMensajeInterlocutor2 termina aqui */ 44. 30. 18. 42. 21.println("Mensaje Saludo: " + mensajeSaludo). 24. 22. }/* El metodo recibirMensajeInterlocutor1 termina aqui */ /* El metodo enviarMensajeInterlocutor1 comienza aqui */ void enviarMensajeInterlocutor1(String mensaje) { mensajeInterlocutor2 = mensaje. 35. 38. enviarMensajeInterlocutor1(). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 33. etc. return mensajeSaludo. son estos. 31. 27. 25.3 A continuación se muestra cómo se usa una referencia a una interfaz. }/* El metodo getMensajeGrabado termina aqui */ /* El metodo recibirMensajeInterlocutor1 comienza aqui */ String recibirMensajeInterlocutor1() { return(mensajeInterlocutor1). }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. 43. 36.out. }/* Definicion de la clase Telefono termina aqui */ El código Java termina aquí El segmento de código anterior muestra que la clase Telefono tiene otros métodos. . 23. 34. 37. recibirMensajeInterlocutor1(). 28. 20. 40. 41.

8.out.4 El ejemplo muestra como se usa una referencia a una interfaz.println("Mensaje recibido: " + mensaje). ContestadorAutomatico ca = new Telefono().4. Cualquier otro método definido en la clase Phone no puede ser accedido por la variable ca. mensaje = ca. }/* Definicion de la clase InterfazEjemplo termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Mensaje Saludo: Regreso despues de las 11pm Mensaje grabado: Llegare a las 11am – Pedro Mensaje recibido: Regreso despues de las 11pm En este programa.grabarMensaje("Llegare a las 11am – Pedro"). se puede tener una variable de tipo interfaz. a pesar de que es asignado el objeto de la clase Telefono. 5. . System. Ejemplo 5. public static void main(String[] args) { String mensaje. Considere el Ejemplo 5.Core Java Guía del Estudiante 5. 9. ca. public class InterfazEjemplo { 3. }/* El metodo main termina aqui */ 11. Esto se muestra en el siguiente código: El código Java comienza aquí… 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La variable ca sólo puede usarse para acceder a los métodos definidos por la interfaz ContestadorAutomatico. El programa dado no ilustra el poder polimórfico de una variable de referencia de interfaz. class Telefono2 implements ContestadorAutomatico{ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 202 © Copyright IBM Corp. 7. 10. se le asigna el objeto de la clase Telefono. 6. a pesar que la variable ca se declara del tipo de la interfaz ContestadorAutomatico. /* Definicion de la clase Telefono2 comienza aqui */ 2. /* Definicion de la clase InterfazEjemplo comienza aqui */ 2. Usar Interfaces Como Referencias Se ha visto como declarar una variable que referencia a un objeto de una clase. /* El metodo main comienza aqui */ 4. que referencia a una instancia de una clase que implementa esa interfaz. El código Java comienza aquí… 1.getMensajeGrabado(). Similarmente.

grabarMensaje("Nos encontramos a la 1 pm – David"). ca = t2. }/* El metodo getMensajeGrabado termina aqui */ 22. 6. String mensaje. 29. .out. 16.println("Mensaje recibido: " + mensaje). 4. // . public class InterfazEjemplo2 { 26. .out. 38.getMensajeGrabado(). 17. /* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. 19. Volumen 2: Programación Orientada a Objetos 203 © Copyright IBM Corp. 32. ContestadorAutomatico ca = new Telefono(). 34. ca. 37. /* Definicion de la clase InterfazEjemplo2 comienza aqui */ 25. }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System.getMensajeGrabado().grabarMensaje("Nos encontramos a las 11am – Pedro"). }/* Definicion de la clase Telefono2 termina aqui */ 23. 21. 31.println( "Mensaje Saludo de Telefono2: " + mensajeSaludo).out. Telefono2 t2 = new Telefono2(). 11. 10. /* El metodo main comienza aqui */ public static void main(String[] args) { String mensaje. mensaje = ca. 12. 35. ca. 36. 5. 24.println("Mensaje recibido: " + mensaje). 39. 8.println( "Mensaje grabado en Telefono2: " + mensaje). 27. 14. 28. System. String mensajeSaludo = "Regreso despues de 1 hora". 30. mensaje = ca.mensaje = mensaje. 18. Libro 1: Core Java . 15. 20. System.Guía del Estudiante Core Java 3. this. 13. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 33.out. 9. return mensajeSaludo. 7.

Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 204 © Copyright IBM Corp. Se muestra esto con un ejemplo. }/* Definicion de la clase InterfazEjemplo2 termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Mensaje Saludo: Regreso despues de las 11pm Mensaje recibido: Regreso despues de las 11pm Mensaje grabado: Nos encontramos a las 11am – Pedro Mensaje Saludo de Telefono2: Regreso despues de 1 hora Mensaje recibido: Regreso despues de 1 hora Mensaje grabado en Telefono2: Nos encontramos a la 1 pm – David Del programa anterior se puede ver que la versión de la implementación de ContestadorAutomatico llamada depende del tipo de objeto al que la variable ca esté haciendo referencia en tiempo de ejecución. implements ContestadorAutomatico { String mensajeSaludo = "Regreso despues de 1 hora". abstract public class Telefono3 3. /* Definicion de la clase Telefono3 comienza aqui */ 2. 8.4 Cuando una clase implementa una interfaz.out. 4. El código Java comienza aquí… 1. 9. .Core Java Guía del Estudiante 40. ya que sólo se realiza una implementación parcial de la interfaz. 7. 6. Esta clase entonces debe ser declarada como una clase abstracta. }/* El metodo main termina aqui */ 41. 11.println( "Mensaje Saludo de Telefono3: " + mensajeSaludo). Ejemplo 5. puede escoger proveer implementación sólo para algunos de los métodos declarados en la interfaz. Fin del Ejemplo 5. return mensajeSaludo.5 Este ejemplo ilustra como una clase que provee implementación parcial de una interfaz. resulta en una clase abstracta. 5. 12. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. 10.

Sólo una interfaz puede heredar de otra interfaz. }/* Definicion de la clase Telefono3 termina aqui */ El código Java termina aquí La clase Telefono3 implementa sólo el método getMensajeGrabado() de la interfaz ContestadorAutomatico. Como Telefono3 sólo da una implementación parcial de la interfaz ContestadorAutomatico. La interfaz derivada añade sus propias variables y métodos. porque ninguna existe. Esto permite que la clase tenga la funcionalidad para la cual se define la interfaz. en la cual una interfaz puede heredar de otra interfaz usando la palabra reservada extends. y no tiene acceso a ninguna variable declarada como final en la interfaz. . seguida por el nombre de la interfaz marcadora. A continuación se explica cómo crear una jerarquía de interfaces.6 que consta de un programa Java que extiende una interfaz de una interfaz existente. debe declararse como una clase abstracta. puede crear clones (copias exactas) de objetos de la clase. Serializable y Cloneable son ejemplos de interfaces marcadoras.5 Se discute a continuación qué son las interfaces marcadoras.6 Este ejemplo muestra como una interfaz se extiende de una interfaz existente y añade variables y métodos. Fin del Ejemplo 5. Una clase que implemente una interfaz marcadora no necesita implementar ningún método. Considere el Ejemplo 5. Una clase no puede heredar de una interfaz. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 205 © Copyright IBM Corp. La clase sólo necesita usar la palabra clave implements. No implementa el método grabarMensaje() que está definido en la interfaz ContestadorAutomatico. sus objetos pueden ser serializados y deserializados. en su definición de clase. }/* El metodo getMensajeGrabado termina aqui */ 14. Ejemplo 5. Si una clase implementa la interfaz Serializable. K puede añadir sus propias variables y métodos a las que ha heredado de J. Asuma que una interfaz K extiende de una interfaz J. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Entonces.1 Interfaces Marcadoras Las interfaces marcadoras son interfaces vacías sin ninguna declaración de variables o métodos. 5.Guía del Estudiante Core Java 13. Heredar de una Interfaz Se puede crear una jerarquía de interfaces (similar a una jerarquía de clases). 6. K implícitamente obtiene todas las variables y métodos declarados en J. Si una clase implementa la interfaz Cloneable.

3. interface J { void metodo1().out.println("Dentro de metodo3"). 6. 18. 28. 31. 30. interface L extends K { 12. /* El metodo metodo1 comienza aqui */ 23. interface K extends J { 7. void metodo6(). interface M { 17. void metodo3(). public void metodo1() { 24. } 19. }/* El metodo metodo2 termina aqui */ /* El metodo metodo3 comienza aqui */ public void metodo3() { System. void metodo2(). 15. 14. }/* El metodo metodo1 termina aqui */ /* El metodo metodo2 comienza aqui */ public void metodo2() { System. . class InterfazPrueba implements L. } 10. 2. 26. }/* El metodo metodo3 termina aqui */ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 206 © Copyright IBM Corp. 34. 11.println("Dentro de metodo1"). System.out. void metodo6(). void metodo4(). 25. 16. 9. 32. 20. M { 22. 13. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 36. 29. 33.Core Java Guía del Estudiante El código Java comienza aquí… 1. 27. } 5.out. 35. /* Definicion de la clase InterfazEjemplo comienza aqui */ 21. 8.println("Dentro de metodo2"). } void metodo4(). 4.

/* El metodo main comienza aqui */ 51. 39. 58. ip. Esto es similar a sobrescribir métodos en el caso de clases. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. 41. 44. 48. 45. dado que los hereda de las interfaces J y K. ip. ip. /* Definicion de la clase InterfazEjemplo comienza aqui */ 49. /* El metodo metodo4 comienza aqui */ public void metodo4() { System. }/* Definicion de la clase InterfazEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es la siguiente: Dentro de metodo1 Dentro de metodo2 Dentro de metodo3 Dentro de metodo4 Dentro de metodo6 En este programa. }/* El metodo main termina aqui */ 59. 43. 55. 53.metodo1().Guía del Estudiante Core Java 37. public static void main(String[] args) { InterfazPrueba ip = new InterfazPrueba().println("Dentro de metodo6").metodo2(). sin embargo Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 207 © Copyright IBM Corp. Tanto la interfaz L como M declaran el método metodo6. }/* El metodo metodo6 termina aqui */ 46.println("Dentro de metodo4"). metodo2. 42.metodo4().metodo6(). ip. ya que la interfaz L declara implícitamente todos los métodos anteriores. La clase InterfazPrueba implementa las interfaces L y M. Esta clase tiene que proporcionar la implementación de los métodos metodo1.metodo3(). public class InterfazEjemplo { 50. metodo3. 57. 54. 52.out. a pesar que la interfaz L hereda el metodo4 definido por K. ip. }/* Definicion de la clase InterfazEjemplo termina aqui */ 47. . metodo4 y metodo6. 38. 40. }/* El metodo metodo4 termina aqui */ /* El metodo metodo6 comienza aqui */ public void metodo6() { System. se ve que la interfaz K y la interfaz L declaran el mismo método metodo4. 56.

La superclase abstracta no puede ser instanciada. de otro modo ocurre un error de compilación (duplicate method declaration error). La superclase concreta puede ser instanciada y además debe implementar todos los métodos definidos en ella. . Herencia con clases abstractas. Figura 5. puede proveer implementación para algunos de los métodos definidos en ella. aunque no se requiere que proporcione implementaciones para ninguno de sus métodos. abstractas y las interfaces. La superclase concreta puede tener variables de instancia definidas en ella. Fin del Ejemplo 5. La Figura 5. se van a resumir las opciones de herencia en Java. “Herencia” Implementación de interfaces. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Opciones de Herencia en Java Existen tres tipos de opciones de herencia en Java: • • • Herencia con clases concretas. usa la palabra clave extends. usa la palabra reservada extends. entonces tiene que ser declarada como abstracta.12: Opciones de Herencia en Java Cuando una clase hereda de otra clase concreta. La superclase abstracta puede tener variables de instancia definidas en ella.6 Una vez discutidas las clases concretas. 7.Core Java Guía del Estudiante la clase InterfazPrueba tiene que proporcionar sólo una implementación del método metodo6. Cuando una clase hereda de una clase abstracta. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 208 © Copyright IBM Corp. En caso de que la clase InterfazPrueba no proporcione implementación para alguno de los métodos declarados en las interfaces que implementa.12 ilustra las tres opciones de herencia.

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 209 © Copyright IBM Corp. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La interfaz no puede definir variables de instancia. Una clase puede implementar múltiples interfaces.Guía del Estudiante Core Java Cuando una clase implementa una interfaz. usa la palabra reservada implements. La interfaz no puede ser instanciada y no provee implementación para ninguno de los métodos en ella.

Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 210 © Copyright IBM Corp. Explicar cómo las interfaces son implementadas y usadas como referencias. usted debe ser capaz de: • • • • • • Diferenciar entre herencia y agregación. Describir cómo se definen las clases y métodos abstractos en Java.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Diferenciar entre clases abstractas y clases concretas. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Discutir sobre clases abstractas. Definir una interfaz. .

. c) X x. b) No se proporciona su implementación. d) Ninguna de las anteriores 4) La variable de referencia que hace referencia a una clase abstracta puede ser inicializada con _______. a) Verdadero b) Falso 3) ¿Cuál de las siguientes es la forma correcta para crear una referencia a una clase abstracta X? a) X x. a) Un objeto de la clase abstracta b) Un objeto de la subclase de la clase abstracta c) La clase abstracta d) La subclase de la clase abstracta 5) Los métodos abstract de clases pueden estar presentes sólo dentro de una clase abstract. 2) Una clase abstracta debe contener al menos un método abstracto. d) Nunca pueden ser invocados. x = new X(). a) Verdadero b) Falso 6) ¿Cuál de las siguientes son las maneras correctas de declarar una interfaz? a) public class X implements interface {} b) public interface X {} c) interface X{} d) public X implements interface {} Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 211 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 5: Examen de Autoevaluación 1) ¿Cuál de las siguientes opciones es falsa acerca de los métodos abstract? a) Pueden ser accedidos directamente sin crear un objeto de la clase que los contiene. b) X x = new X(). c) Su implementación es proporcionada por sus subclases. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

b) Una variable de tipo interfaz puede hacer referencia a un objeto de la clase que la implementa c) Una interfaz que contenga un método abstract declarado en ella no debe tener el modificador abstract en su declaración. todas las variables en una interfaz son de la forma final y static.Core Java Guía del Estudiante 7) Las interfaces pueden declarar métodos abstract. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . a) Verdadero b) Falso 8) ¿Cuál de las siguientes es sintácticamente correcta cuando se implementa una interfaz X que declara dos métodos void m1() y m2()? a) class Y extends X { public void m1() {} public void m2() {} } b) class Y implements X { public void m1() {} } c) class Y extends X { void m1() {} } d) class Y implements X { public void m1() {} public void m2() {} } 9) Implícitamente. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 212 © Copyright IBM Corp. a) Verdadero b) Falso 10) ¿Cuál de las siguientes opciones es falsa acerca de una interfaz? a) Es posible crear una jerarquía de interfaces. d) Las interfaces pueden ser instanciadas.

. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Respuestas a la Unidad 5: Examen de Autoevaluación 1) a 2) b 3) c 4) b 5) a 6) b y c 7) a 8) d 9) a 10) d Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 213 © Copyright IBM Corp.

.

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 215 © Copyright IBM Corp. Usar interfaces. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Unidad 6: Laboratorio de Clases Abstractas e Interfaces Objetivos de Aprendizaje Al final de esta unidad. usted será capaz de: • • Usar clases abstractas.

void setClaridad(int claridad). velocidadSyn y velocidadPelicula. Tiene los métodos: void setAncho(int ancho). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. // el int retornado es usado para establecer abertura • Dos clases llamadas Canon y Nikon heredan de la clase Camara. • La clase Escena tiene los atributos ancho. Tiene el método: public static void setVelocidadSyn(int velocidadSyn). alto. contraste y enfoque y tiene los siguientes métodos: // No se proporciona implementación abstract Escena capturaEscena(Escena). void setYCoordenada(int ycoord). void setAlto(int alto). Escena marcoFoto(Escena). coordenadaX y coordenadaY.Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escribir un programa en Java que tenga una clase abstracta llamada Fotografia y una interfaz llamada Clicking. void buenaAfinaciónAbertura(int abertura). void setEnfoque(int enfoque). Camara setVelocidadObturador(Camara). La clase Nikon tiene el método: void buenaAfinacionVelocidadObturador(int velocidadObturador). void setXCoordenada(int xcoord). // el int retornado es usado para establecer velocidadObturador int velocidadObturadorPrioridad(int velocidadObturador). La interfaz Clicking tiene los siguientes métodos en ella. • La clase Fotografia tiene los atributos escena. void setContraste(int contraste). void setEnfoque(int enfoque). • La clase Camara tiene los atributos abertura. Camara setVelocidadPelicula(Camara). . velocidadObturador. claridad. int aberturaPrioridad(int abertura). Unidad 6: Laboratorio de Clases Abstractas e Interfaces Libro 1: Core Java 216 © Copyright IBM Corp. Camara setAbertura(Camara). La clase Canon tiene el método. Escena focoFoto(Escena).

Guía del Estudiante Core Java • La clase MiFotografia hereda de Fotografia. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La clase Fotografo implementa la interfaz Clicking y usa las clases mencionadas para tomar una fotografía. • Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 217 © Copyright IBM Corp. Cree una clase Prueba para verificar el funcionamiento de la Camara y el método de Fotografia.

.

Discutir las protecciones de acceso en los paquetes. usted será capaz de: • • • • • • • Definir y crear un paquete.Guía del Estudiante Core Java Unidad 7: Paquetes Objetivos de Aprendizaje Al final de esta unidad. Describir los miembros de los paquetes. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar cómo se representan los paquetes en el sistema de archivos. Explicar los paquetes más usados que vienen incorporados con Java. Libro 1: Core Java Unidad 7: Paquetes 219 © Copyright IBM Corp. Explicar las variables classpath y describir su uso. . Discutir cómo importar paquetes.

permite de una manera segura almacenar una clase dentro de él. Los paquetes son un medio para agrupar clases. . Un paquete es básicamente un mecanismo provisto por Java que ayuda a dividir el espacio de nombre de clase en bloques manejables. muchos programadores desarrollan varias clases Java simultáneamente. se explicaron las clases abstractas e interfaces en Java. Es un mecanismo de denominación así como de control de visibilidad. Necesidad de los Paquetes Existen varias razones por las cuales se necesita agrupar clases. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Un paquete Java es como un directorio.1 Conflictos de Nombres Alrededor del mundo. Se va a explicar la necesidad del uso de los paquetes y las tareas involucradas en el uso de paquetes. y una aplicación MiAplicacion usa ambas librerías. En esta unidad se aprenderá acerca de cómo las clases e interfaces pueden ser agrupadas usando el concepto de paquetes. Considere la Figura 7. Un programador puede no estar al tanto de las clases desarrolladas por otro programador. Un paquete es un contenedor que almacena la funcionalidad relacionada con clases e interfaces y otros paquetes.Core Java Guía del Estudiante 1. 2. Introducción En la unidad anterior. proporcionando acceso protegido y manejo de nombres de espacio. Existe entonces la posibilidad de un conflicto de nombres entre clases desarrolladas por diferentes programadores. 2. Un paquete no puede tener dos clases con el mismo nombre. interfaces y otros paquetes en una categoría particular.1. donde se muestran dos conjuntos de librerías que tienen ambas una clase Texto. Unidad 7: Paquetes Libro 1: Core Java 220 © Copyright IBM Corp. Por lo que dos o más programadores pueden desarrollar clases con el mismo nombre.

Documento. Si se le asigna a cada clase a un paquete diferente.1: Conflictos de Nombres en Aplicaciones Cuando se usa la clase Texto en MiAplicacion. esto ayudará al despliegue de los componentes fácilmente. Asuma que dos librerías diferentes. el sistema de tiempo de ejecución de Java no sabrá a cual clase llamar.2 Clasificación Suponga que se tiene que desarrollar varias aplicaciones Java. sino que permitirá en forma fácil reutilizar clases entre las aplicaciones Java. Se deben crear clases para realizar operaciones matemáticas y operaciones de transferencias de archivos para estas aplicaciones. Una clase Documento. Ellos eliminan los conflictos de nombres. 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Figura 7. La aplicación completa comprende varios módulos y por tanto se tendrán muchos archivos de clases (. Todas las clases requeridas para desplegar un componente en particular de la aplicación pueden ser agrupadas bajo un paquete determinado. . las clases desarrolladas por un programador para una aplicación específica pueden ser agrupadas bajo un cierto paquete. Las clases se identifican por nombres de paquete. Para evitar estos conflictos de nombres. Libro 1: Core Java Unidad 7: Paquetes 221 © Copyright IBM Corp. A y B. tienen el mismo nombre de clase X.class). no se tendrán conflictos de nombres entre las dos librerías. seguidas por el nombre de la clase en un programa Java. puede ser útil agrupar todas las clases relacionadas a las funciones matemáticas en un paquete y agrupar todas las clases relacionadas con las transferencias de archivos en otro paquete. Por lo tanto. 2. Este tipo de clasificación no solo nos ayudará a localizar una clase fácilmente. por ejemplo en un paquete p se identifica como p. Los paquetes Java son similares a los nombres de espacio usados en C++.3 Despliegue Asuma que se tiene que desarrollar una aplicación y entregarla al cliente.

y dar acceso de paquete a los datos. 3.4 Alcance de Clases Restringido A veces se quiere encapsular ciertos datos importantes usados por una aplicación. . se pueden agrupar todas las clases que mantienen datos en un paquete. Esto restringirá a otras clases de acceder a los datos. las ventajas provistas por los paquetes se representa en la Figura 7. Crear Paquetes en Java El primer paso en la creación de un paquete es asignarle un nombre que sea universalmente único. Figura 7. se tiene que restringir el acceso a las clases que mantienen estos datos. Para esto.Core Java Guía del Estudiante 2. Para resumir. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. En este caso.2. asignar un nombre aleatorio y esperar que sea Unidad 7: Paquetes Libro 1: Core Java 222 © Copyright IBM Corp.2: Ventajas de los Paquetes en Java Ahora se procederá a ver como crear paquetes en Java. Sin embargo.

Por ejemplo. Cuando la instrucción de paquete es eliminada del archivo.ils. Por ejemplo. 3.ibm. el nombre del paquete creado es directorio. También. Una instrucción de paquete define un espacio de nombres para almacenar clases.examen.Guía del Estudiante Core Java universalmente único no es buena idea.ibm. por lo general. Se pueden usar el paquete por defecto para correr programas de prueba. hay ciertos lineamientos que deben seguirse para nombrar un paquete. ambos examen y monitor estarán al mismo nivel en la jerarquía de nombres del paquete. Usar la declaración de paquete al inicio del archivo asegura que todas las clases definidas dentro del archivo serán parte del paquete nombrado. Así.). Aunque se permiten las letras mayúsculas. 3.monitor. Por ejemplo. .ils. Este llevará el nombre de com. usando un punto (. es por convención el tener todas las letras en minúsculas. Después se añade el nombre del departamento interno al cual el paquete pertenece. IBM Learning Services (ILS) se añade a com. los nombres de clases son colocados en el paquete por defecto (default package). La siguiente es la forma de una instrucción de paquete multinivel: Libro 1: Core Java Unidad 7: Paquetes 223 © Copyright IBM Corp.ils.1 Nombrar un Paquete Las guías para nombrar un paquete son: • • Los nombres de los paquetes deben ser jerárquicos. las librerías de clases que provee IBM tiene paquetes que comienzan por com. El nombre de paquete debe comenzar con el nombre de dominio Internet en reversa. • Después. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El paquete por defecto no tiene nombre y no es útil. Ahora el nombre del paquete es com. • Nota: El nombre del paquete no tiene ninguna letra en mayúscula. un programador puede crear una jerarquía de paquetes. para aplicaciones finales. el nombre de la aplicación se añade al nombre del paquete.ibm.2 Declaración de Paquetes Un paquete es declarado con la palabra reservada package. com. Puede existir otro paquete dentro de ils llamado monitor.ibm. El nombre puede contener más de una parte separada por puntos.ibm. Esto puede hacerse dividiendo el nombre del paquete desde el paquete superior de uno directamente por encima. La siguiente es la forma general de la instrucción de paquete: package directorio. En esta instrucción. En el ejemplo anterior. Una declaración de paquete debe ser la primera instrucción en el archivo fuente Java cuando se crea un paquete. el paquete exam puede contener varias clases o interfaces relacionadas funcionalmente.

Core Java

Guía del Estudiante

package directorio.lista.miembros; Cuando se especifica un nombre de paquete en un archivo, todas las clases definidas en el archivo pertenecen al paquete especificado. No es obligatorio tener una instrucción de paquete antes de toda definición de clase. Sin embargo, un archivo solamente puede tener una instrucción de paquete. Dentro de un programa Java, la instrucción de paquete aparece antes de las instrucciones import, que se usan para importar las clases requeridas por la aplicación, como se muestra en la Figura 7.3.

Figura 7.3: Declaración de Paquete en un Archivo Java

En la Figura 7.3, el paquete com.ibm.ils.examen.dominio contiene la clase PreguntaExamen. La figura ilustra solo una clase en el paquete. Sin embargo, puede haber más de una clase definida en un paquete. Todas las clases definidas, entonces, pertenecen al mismo paquete com.ibm.ils.examen.dominio. A continuación se discute como los paquetes se representan en el sistema de archivos.

4. Representación del Paquete en el Sistema de Archivos
Los paquetes se almacenan usualmente en directorios del sistema de archivos. Ellos están directamente relacionados a la estructura física de las carpetas. Por ejemplo, considere la clase C, que pertenece a un paquete, x.y a través de la siguiente instrucción: package x.y; public class C {
Unidad 7: Paquetes Libro 1: Core Java 224

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

} La clase C es compilada y colocada en la carpeta X\Y\ bajo algún directorio en el sistema, por ejemplo: C:\Ejemplos\x\y\C.class Así, los paquetes corresponden a la estructura física de carpetas. Una excepción a esto es cuando las clases son empaquetadas dentro de archivos JAR. Se aprenderá acerca de archivos JAR en la Unidad 9 – Características Avanzadas del Volumen 8. El nombre del directorio debe coincidir con el nombre del paquete letra por letra. Esta correspondencia es sensible a mayúsculas y minúsculas. Más de un archivo puede incluir la misma instrucción de paquete, porque la instrucción de paquete simplemente indica donde las clases definidas pertenecen, y no evita que otras clases en otros archivos pertenezcan al mismo paquete. Las clases en los desarrollos del mundo real están usualmente repartidas en varios archivos. Por ejemplo, considere el siguiente fragmento de código: package x.y; public class AA { } class BB { } class CC { } Este código se almacenará en un archivo llamado AA.class, que es diferente del anterior C.class, pero ambos tienen la misma instrucción de paquete al comienzo, y AA.class estará presente en la carpeta física C:\Ejemplos\x\y\. Así, es posible tener cualquier número de archivos con diferentes definiciones de clases perteneciendo al mismo paquete. Todo lo que se necesita es el mismo nombre de paquete al inicio del archivo. Los paquetes pueden ser comparados a los directorios usados para almacenar archivos en el sistema de archivos de un sistema de operativo. En el sistema de archivos, es posible tener subdirectorios dentro de un directorio. Pueden existir subdirectorios con el mismo nombre bajo diferentes directorios. Sin embargo, no se pueden tener dos subdirectorios con el mismo nombre bajo un mismo directorio. Reglas similares son aplicables para los paquetes. Considere la Figura 7.4, que representa los paquetes en el directorio en forma de árbol. El paquete representado en la figura es com.ibm.libreria.a, este paquete tiene dos archivos: Texto.java y Texto.class.

Libro 1: Core Java

Unidad 7: Paquetes 225 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Figura 7.4: Representación de Paquete en el Sistema de Archivos

Asuma que hay un directorio llamado Root que tiene un subdirectorio llamado MiDirectorio, que a su vez tiene otro subdirectorio llamado MiSubDirectorio. Este subdirectorio tiene un archivo llamado miArchivo.txt. Se puede representar esta estructura como sigue: Root\MiDirectorio\MiSubDirectorio\miArchivo.txt Considere una estructura de paquete que tenga un paquete raíz com que tiene un subpaquete ibm, que a su vez tenga otro subpaquete libreria, con dos subpaquetes a y b. Esta estructura de paquete se puede representar como: com.ibm.libreria.a com.ibm.libreria.b A continuación se estudia como referenciar a las clases definidas en los paquetes.

4.1 Referencia a las Clases Definidas en los Paquetes
En un programa Java, si se quiere usar una clase ubicada en un paquete en particular, se debe usar con el nombre completamente calificado, usando el nombre del paquete. Considere dos clases, ambas llamadas Texto que están en dos paquetes diferentes, como se presenta a continuación: com.ibm.libreria.a com.ibm.libreria.b Estas dos clases son distintas y pueden contener dos implementaciones diferentes. Se debe referir a estas clases dentro del programa Java, como sigue: com.ibm.libreria.a.Texto com.ibm.libreria.b.Texto Esto se representa en la Figura 7.5.
Unidad 7: Paquetes Libro 1: Core Java 226

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Figura 7.5: Referencia a Clases por su Nombre de Paquete

El programador tiene que tener en cuenta que la jerarquía de paquete también tiene que ser mantenida en el sistema de archivos del desarrollo en Java. Ahora, se estudiará como los paquetes ayudan a proteger el acceso a las clases.

5. Paquetes y Protección de Acceso
Los paquetes y las clases son maneras de encapsular datos importantes. Los paquetes encapsulan varias clases y las clases encapsulan variables y métodos. Como hemos mencionado, los paquetes son receptáculos para las clases y los sub paquetes que son parte de él, mientras que las clases mantienen datos y código. La visibilidad y la accesibilidad de los miembros de clase se ubican en una de las siguientes cuatro categorías: • • • • Sub-clases presentes en el mismo paquete. No sub-clases presentes en el mismo paquete. Sub-clases presentes en diferentes paquetes. Clases no relacionadas presentes en diferentes paquetes.

Existen diversas formas de producir los diferentes niveles de acceso requeridos por las categorías antes descritas. Los tres especificadores de acceso, private, public y protected, proveen los diferentes niveles de acceso. Cualquier miembro de clases declarado como public puede ser accedido desde cualquier sitio.

Libro 1: Core Java

Unidad 7: Paquetes 227 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Un miembro en una clase sin especificación de acceso explícita será visible a las subclases y otras clases dentro del mismo paquete. Cuando un elemento se declara protected, será visible fuera del paquete actual, pero sólo para las clases que son subclases de la clase actual. Cualquier miembro de clases declarado como private no será visto fuera de su clase. Estos modificadores de acceso aplican a los miembros de las clases. Una clase (no anidada) solo tiene dos posibles niveles de acceso: default y public. Cuando no se indica el modificador de acceso en la declaración de la clase, implica que el nivel de acceso es el acceso por defecto. De aquí que todas las clases que son parte del paquete donde la clase esta presente, tienen acceso al código de esa clase. Si una clase es declarada como public, puede ser accedida por cualquier código fuera del paquete. No se puede declarar una clase (no anidada) como protected o private. Considere la Figura 7.6, donde se muestra un conjunto de clases en paquetes diferentes.

Figura 7.6: Clases en Paquetes Diferentes

En la figura anterior se definen cinco clases dentro de dos paquetes, com.ibm.ils.control y com.ibm.ils.modelo. Las clases A, B, y E están en com.ibm.ils.control y las clases C y D, en com.ibm.ils.modelo. La clase A tiene cuatro métodos con diferentes niveles de acceso, especificados por los modificadores de acceso public, protected y private. A continuación se explicará cuál de estos cuatro métodos puede ser accedido desde las clases A, B, C, D y E.
Unidad 7: Paquetes Libro 1: Core Java 228

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

22. 8. tres() y cuatro(). Se presenta un ejemplo para entender mejor los especificadores de acceso. Desde la clase E tres métodos pueden accederse: uno().. 7. 18. Desde la clase C dos métodos pueden accederse: uno() y dos(). System. dos(). protected int variableProtegida = 30. 9. System. Ejemplo 7. 1. 13. y tres().. 10. 20. Desde la clase B tres métodos pueden accederse: uno(). Los métodos declarados como protected en la clase A pueden accederse por clases que sean subclases de A.println( "variablePublica = " + variablePublica).println( "variablePrivada = " + variablePrivada). 3. dos(). 12. . 21. y tres(). System. 14.out. System. 6.println( "variableDePaquete = " + variableDePaquete). 16. dos().out. public class MiClase { 5. /* Constructor MiClase comienza aqui */ public MiClase() { System. public int variablePublica = 40. El código Java comienza aquí. 2. }/* Constructor MiClase termina aqui */ 23.out.Guía del Estudiante Core Java • • • • • • Desde la clase A los cuatro métodos pueden ser accedidos: uno().out. int variableDePaquete = 10. private int variablePrivada = 20. /* Definicion de la clase MiClase comienza aqui */ 4. 15.out. package paquete1.1 El siguiente programa ilustra el efecto de diferentes especificadores de acceso sobre clases en diferentes paquetes.println( "Dentro del constructor de MiClase").println( "variableProtegida = " + variableProtegida). }/* Definicion de la clase MiClase termina aqui */ Libro 1: Core Java Unidad 7: Paquetes 229 © Copyright IBM Corp. 17. Desde la clase D solo un método puede accederse: uno(). 11. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 19.

38. 42. System. 25. 43. 41.out. public class DeribadaDelMismoPaquete extends MiClase { 28. /* Las variables private son accesibles * solo dentro de la misma clase */ // System. 26. 31. }/* Definicion de la clase termina aqui */ 48. 56. 57. 36. public DeribadaDelMismoPaquete() { System.out. System. 44.println( "Dentro del constructor de DeribadaDelMismoPaquete").println( // "variablePrivada = " + variablePrivada). /* Constructor SinRelacionDelMismoPaquete comienza aqui */ 53. 46. }/* Constructor DeribadaDelMismoPaquete termina aqui */ 47. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println( "Dentro del constructor de " + "SinRelacionDelMismoPaquete"). 45. /* Definicion de la clase comienza aqui */ 27. package paquete1. public SinRelacionDelMismoPaquete() { 54. package paquete1. 50. System. public class SinRelacionDelMismoPaquete { 52.println( "variablePublica = " + variablePublica).out.println( "variableDePaquete = " + variableDePaquete). 49. 34.out.println( Libro 1: Core Java 230 Unidad 7: Paquetes © Copyright IBM Corp.println( "variableProtegida = " + variableProtegida). 30. 33. 39. 35. 55. 59.Core Java Guía del Estudiante 24. 58. System. 37. /* Definicion de la clase comienza aqui */ 51. 40. /* Constructor DeribadaDelMismoPaquete comienza aqui */ 29.out.out. MiClase mc = new MiClase(). System.out. . 32.

out. 78. 66.variablePublica). /* Definicion de la clase comienza aqui */ 79. 88. 93. 77. 68.println( Unidad 7: Paquetes 231 © Copyright IBM Corp. 67. /* Las variables private son accesibles * solo dentro de la misma clase */ // System. 61.out. /* Las variables Package son accesibles solo dentro * de la misma clase o dentro del mismo paquete */ //System. public class DeribadaDeDiferentePaquete extends MiClase{ 80. 85. 72. Libro 1: Core Java . 95. System. 89. }/* Definicion de la clase termina aqui */ 74. 96. /* Constructor DeribadaDeDiferentePaquete comienza aqui */ 81.variableDePaquete). 76.out.println( "variableProtegida = " + mc. 70. "variableDePaquete = " + mc. }/* Constructor SinRelacionDelMismoPaquete termina aqui */ 73.out. package paquete2. 84. 94. 75. 86. import paquete1.out.println( // "variableDePaquete = " + variableDePaquete).println( 71.println( // "variablePrivada = " + mc.*.out. 62. 91. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.variablePrivada). 69. System. public DeribadaDeDiferentePaquete() { 82.Guía del Estudiante Core Java 60. 63.variableProtegida). System. "variablePublica = " + mc. 92. 87. 90. 64.println( // "variablePrivada = " + variablePrivada).out. /* Las variables private son accesibles * solo dentro de la misma clase */ // System.println( "Dentro del constructor de " + "DeribadaDeDiferentePaquete"). System. 65. 83.

114.variablePrivada). public SinRelacionDeDiferentePaquete() { 111. 128. 115.out. 101. 98. /* Constructor SinRelacionDeDiferentePaquete aqui*/ 110. 112. 99.variableDePaquete). 119. /* Las variables private son accesibles * solo dentro de la misma clase */ // System.Core Java Guía del Estudiante 97. 106. 122.out. System. public class SinRelacionDeDiferentePaquete { 109. import paquete1. System. 104. 129. 116. 121. 126.println( "Dentro del constructor de " + "SinRelacionDeDiferentePaquete").out. 130. 107. 124. 117. 127. 120. }/* Definicion de la clase termina aqui */ 103.println( // "variableDePaquete = " + mc. 105.println( aqui 100. 125. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println( // "variableProtegida = " + mc. "variablePublica = " + variablePublica). /* Las variables protected son accesibles dentro de * la misma clase o dentro del mismo paquete o dentro * de una la clase derivada */ //System. 123.variableProtegida). . /* Las variables Package son accesibles solo dentro * de la misma clase o dentro del mismo paquete */ comienza //System. package paquete2. "variableProtegida = " + variableProtegida).println( // "variablePrivada = " + mc. MiClase mc = new MiClase(). 113.*. /* Definicion de la clase comienza aqui */ 108. }/* Constructor DeribadaDeDiferentePaquete termina */ 102. Unidad 7: Paquetes Libro 1: Core Java 232 © Copyright IBM Corp. 131.out.out. 118.

137. 145. SinRelacionDelMismoPaquete srm = 146. public static void main(String[] args) { MiClase mc = new MiClase(). }/* Definicion de la clase MainPaquete1 termina aqui */ 149. }/* Definicion de la clase termina aqui */ 136. new SinRelacionDelMismoPaquete(). /* El metodo main comienza aqui */ 154. /* Definicion de la clase MainPaquete2 comienza aqui */ 152. /* El metodo main comienza aqui */ 141. }/* Constructor SinRelacionDeDiferentePaquete aqui*/ 135. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* El metodo main termina aqui */ 160. "variablePublica = " + mc. 134. public class MainPaquete1 { 140. /* Definicion de la clase MainPaquete1 comienza aqui */ 139. 150. public class MainPaquete2{ 153. DeribadaDelMismoPaquete dmp = new DeribadaDelMismoPaquete().out. 143. 142. public static void main(String[] args) { DeribadaDeDiferentePaquete ddp = new DeribadaDeDiferentePaquete(). package paquete2.java se obtiene la siguiente salida: Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 Libro 1: Core Java Unidad 7: Paquetes 233 © Copyright IBM Corp. 144. . 156.Guía del Estudiante Core Java 132. 147.variablePublica). 151.println( 133. package paquete1. termina 138. System. }/* Definicion de la clase MainPaquete2 termina aqui */ El código Java termina aquí Al ejecutar el programa MainPaquete1. 155. 158. 159. 157. SinRelacionDeDiferentePaquete srd = new SinRelacionDeDiferentePaquete(). }/* El metodo main termina aqui */ 148.

Core Java Guía del Estudiante variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de DeribadaDelMismoPaquete variableDePaquete = 10 variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de SinRelacionDelMismoPaquete variableDePaquete = 10 variableProtegida = 30 variablePublica = 40 Al ejecutar el programa MainPquete2. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.java se obtiene la salida: Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de DeribadaDeDiferentePaquete variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de SinRelacionDeDiferentePaquete variablePublica = 40 Unidad 7: Paquetes Libro 1: Core Java 234 © Copyright IBM Corp.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.LinkedList ll = new java. como se muestra a continuación: java. En tales situaciones.examen. Fin del Ejemplo 7. ninguna clase estándar existe en el paquete por defecto. considere una situación donde se quiere usar un miembro perteneciente a un paquete diferente. Para evitar esto.Guía del Estudiante Core Java De esta salida se puede ver que el constructor de la clase MiClase se invoca cada vez que una clase intenta acceder a sus variables. con lo que se puede referenciar ciertas clases. 6. a través del siguiente enfoque que se va a considerar donde se importan todas las clases definidas en un paquete en particular. o inclusive paquetes enteros. pero sin haber importado el paquete java.util.util. sea una subclase o una clase no relacionada. Si se quiere invocar a las clases con sus nombres de paquetes. Se puede solventar. el nombre largo del miembro debe usarse.dominio. o si el miembro del paquete se ha importado. Java tiene la sentencia import. Libro 1: Core Java Unidad 7: Paquetes 235 © Copyright IBM Corp. Importar el paquete completo del miembro.ils. Estos nombres se pueden usar en situaciones donde la clase que se está usando está presente en el mismo paquete que la clase actual. En ese caso. se tiene que ingresar el nombre largo para cada clase. 6.LinkedList(). las clases son referidas por sus nombres cortos. en vez de solo dominio Importar el miembro del paquete. es decir. A pesar de que los nombres largos hacen a un programa más difícil de leer y escribir.1 Se va a discutir a continuación cómo usar las clases definidas en el mismo paquete. Cada uno de los procedimientos dados se ajusta a un tipo particular de situación. que no ha sido importado. . Usar Miembros de Paquetes Sólo los miembros públicos de un paquete son accesibles fuera del paquete en el que están definidos. Para acceder a un miembro público del paquete desde fuera de su paquete. Considere una situación en la que se quiere usar la clase LinkedList.*. el nombre especificado en su declaración.util. Usualmente. se debe seguir alguno de los siguientes pasos: • • • Referirse al miembro por su nombre completamente calificado como com. Sin embargo. se tiene que usar el nombre largo de la clase LinkedList.ibm.1 Importar un Paquete Las clases estándar se almacenan en paquetes con nombres.

print("PI("). import static java. 10. Puede usarse en cualquiera de las siguientes formas. La jerarquía de paquetes no tiene un límite de profundidad en la práctica.869604401089358 Unidad 7: Paquetes Libro 1: Core Java 236 © Copyright IBM Corp. como se muestra a continuación: import java.println(pow(PI..lang. El código Java comienza aquí. se puede importar tanto las variables estáticas como los métodos estáticos que posee una clase. En Java 5.out.Core Java Guía del Estudiante Una vez que la clase es importada. Ejemplo 7.util. public class Principal { 5. 6. puede ser referida directamente por su nombre. la instrucción import viene inmediatamente después de la instrucción package. System. /* Definicion de la clase Principal comienza aqui */ 4.0. Debe tenerse en cuenta. }/* El metodo main termina aqui */ 12.2 El siguiente programa ilustra el uso del import estático. se presenta un ejemplo. es un paquete subordinado dentro del paquete externo.util.print(PI). Esto indica que el compilador Java debe importar la clase especificada o el paquete completo. 11. 3. A continuación.out. y antes de cualquier definición de clase. Aquí. paquete1 es el nombre del paquete de más alto nivel y paquete2. 1.paquete2]. }/* Definicion de la clase Principal termina aqui */ La salida del código anterior es esta: PI(3.out.. 2)).out. Después de paquete2. 9. más que el que impone el sistema de archivos.141592653589793) elevado a la 2 es: 9. 7. Esto nos ahorra colocar como prefijo el nombre de la clase que posee la variable o método estático. es un método conveniente de programación.print(") elevado a la 2 es: "). un nombre de clase explícito o (*) se especifica. A continuación se da la forma general de la instrucción import: import paquete1[.Random.(nombreClase/*).*. sin embargo. o import java. . En un archivo fuente de Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Math. System.*. /* El metodo main comienza aqui */ public static void main(String[] args) { System. 2. 8. System. que la sentencia import no es obligatoria para el programador.

Cuando las clases Date definidas en los dos paquetes se usa dentro del mismo programa.* Asuma que se quiere importar una clase cuyo nombre es el mismo que otra. Considere el caso de la clase Date que está disponible en java. Usualmente. .Random.sql. El formato general para importar java. a pesar de que no afecta en ninguna forma el rendimiento en tiempo de ejecución o el tamaño de la clase.lang se da a continuación: import java.Guía del Estudiante Core Java El código Java termina aquí Se puede ver que no fue necesario colocar la clase Math para hacer uso de la variable estática PI y del método estático pow. ocurre un conflicto de nombres. En vez de eso. Para evitar esto. como se muestra a continuación: import java.util. El compilador Java se confunde entre las dos clases. Todas las clases estándar incluidas en Java son guardadas en un paquete llamado java. especificando también la jerarquía del paquete. Considere que se quiere usar las clases Vector y Random del paquete java. Ejemplo 7. no pueden ejecutarse sin la funcionalidad de java. cada paquete/clase a ser usado tiene que ser importado. se pueden importar sólo las clases Vector y Random del paquete java.Vector. Esto es especialmente cierto si el usuario tiene que importar grandes paquetes.3 para ver como el nombre del paquete se usa junto con el nombre de la clase durante la creación de una instancia de la clase. Por lo tanto.util.lang para todos los programas.2 Un punto importante a tener en cuenta es que el uso del método asterisco import java.* puede incrementar el tiempo de compilación.lang.Date java. Las funciones básicas del lenguaje son guardadas en otro paquete llamado java. como sigue: java.util. pero el compilador implícitamente importa java.Date Observe el Ejemplo 7.util.util y java. Como se discutió no será eficiente importar todas las clases del paquete java.util.sql. puede ser mejor nombrar las clases a ser usadas en vez de importar paquetes completos.util. Esto es porque los programas Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.3 Libro 1: Core Java Unidad 7: Paquetes 237 © Copyright IBM Corp. Fin del Ejemplo 7. hay que referirse a estas dos clases a través de sus nombres completamente calificados. import java.util.lang.lang. existente en un paquete diferente.

}/* Definicion de la clase B termina aqui */ 19. }/* El metodo main termina aqui */ 32.println("Mensaje: " + mensaje). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 26. 12. 30. El código Java comienza aquí. /* Definicion de la clase Principal comienza aqui */ 24. package paquete1. 31.out. }/* Definicion de la clase Principal termina aqui */ Unidad 7: Paquetes Libro 1: Core Java 238 © Copyright IBM Corp. public class B { 14.B objPaquete2 = new paquete2. import paquete1. 28. 11. } 9. 20. 8. String mensaje = "Clase en paquete1". 29. 2. ..println("Mensaje: " + mensaje). 15. public class Principal { 25.A.B(). /* El metodo main comienza aqui */ public static void main(String[] args) { /* Uso del nombre largo de la clase B */ paquete2.out. /* Uso del nombre de la clase A sin su paquete */ A objA = new A(). 3. 16. }/* Definicion de la clase A termina aqui */ 10. 1. String mensaje = "Clase en paquete2". } 18.. package paquete3. public A() { 7. package paquete2. /* Definicion de la clase B comienza aqui */ 13. 17. 23. 6. 21.Core Java Guía del Estudiante Se usaran clases contenidas en diferentes paquetes para ilustrar lo que se discutió anteriormente. 22. public B() { System. public class A { 5. System. 27. /* Definicion de la clase A comienza aqui */ 4.

en el momento de cargar las clases empaquetadas. Winzip y otros programas crean archivos zip. que pueden ser visualizados usando WinZip.Guía del Estudiante Core Java El código Java termina aquí Se puede ver del programa anterior en la línea 3 de la clase Principal la sentencia import paquete1. Libro 1: Core Java Unidad 7: Paquetes 239 © Copyright IBM Corp. El empaquetamiento de paquetes es útil durante el despliegue. Despliegue de Paquetes Un paquete puede ser desplegado como una única unidad.3 A continuación se discute el empaquetado de paquetes que permite preservar la estructura de paquetes. 8. 7. JAR comprime los datos usando un formato ZIP. El cargador de clases de Java sabe como buscar otros dos tipos de empaquetados archivos zip y cab. Pkzip. La mayoría de las características de los JAR son similares a las de los archivos TAR usados en UNIX. Por otro lado. Los archivos cab son creados con el utilitario de Microsoft MAKECAB. estos paquetes usan una estructura de árbol de directorios cuando son instalados. adicionalmente permite tener una unidad pequeña y sencilla para el despliegue (un único archivo de empaquetado). Los cargadores de clase. A continuación se discute cómo el paquete es desplegado. entonces éstos miembros interdependientes deben ser desplegados juntos. JView. . cab es un acrónimo para archivos cabinet. Es difícil almacenar y manejar esta estructura de árbol del directorio de árbol debido a los aspectos de almacenamiento y rendimiento a considerar. en la línea 10 se puede acceder a esta clase usando su nombre largo paquete2. extraen la estructura de árbol del directorio desde el archivo plano. Por esto. Agrupar Paquetes Las clases Java se almacenan en paquetes en aplicaciones de tiempo real. a pesar de que no hay una sentencia import para la clase B del paquete paquete2.A. Se puede también empaquetar varios paquetes y desplegarlos juntos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Fin del Ejemplo 7. la estructura de árbol de directorios se almacena dentro de un archivo plano que preserva la estructura del directorio. El empaquetado (archives) es ventajoso porque permite reducir los tiempos de carga de las clases. El empaquetado que soporta la mayoría de los ambientes de desarrollo Java es el JAR. estos archivos se usan normalmente cuando se trabaja con la implementación Java de Microsoft. Si un paquete tiene miembros interdependientes con otros paquetes. Comprimen las clases y por tanto ocupan menos memoria. esto permite luego en la línea 9 usar el solo el nombre de la clase para acceder a ella.B..

Las Figuras 7.Core Java Guía del Estudiante Si una aplicación la componen varios paquetes. Los objetivos para el despliegue pueden referirse a cualquier directorio o empaquetado para localizar miembros de un paquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El cargador de clases de la aplicación especifica los miembros de paquetes a través de un classpath.7: La Caja de Diálogo de Propiedades de Sistema en Windows 2000 Unidad 7: Paquetes Libro 1: Core Java 240 © Copyright IBM Corp. . Figura 7. la aplicación o el servidor de aplicaciones actuará como un objetivo para el despliegue.7 y 7. Se puede especificar el classpath mediante una variable de ambiente (environment).8 muestran como definir el classpath usando una variable de ambiente.

como sigue: java –cp c:\ilscs01\lib com. Libro 1: Core Java Unidad 7: Paquetes 241 © Copyright IBM Corp. se procede a crear la variable de ambiente de la siguiente forma: • • Edite el archivo ~/. se sustituyen por las rutas específicas de los paquetes que se deseen incluir. Ejemplo: /home/estudiante1 En el archivo agregamos la siguiente línea. export CLASSPATH=ruta1:ruta2 Donde ruta1 y ruta2. .bash_profile.Guía del Estudiante Core Java Figura 7.8: Definición del classpath Usando la Variable de Ambiente Bajo ambiente Linux. donde ~ significa la ruta al directorio home del usuario. Nótese que cada ruta esta separada por el carácter : También se puede especificar el classpath usando las opciones –cp o –classpath.EjecutarExamen Esto ejecutará el método main de la clase EjecutarExamen en el paquete com.prueba.ibm.ils.ibm.prueba. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El cargador de la clase buscará el paquete en c:\ilscs01\lib.ils.

para guardar el archivo MiClase. el programador crea un directorio llamado miDirectorio bajo el directorio actual. El tipo de despliegue puede ser un subárbol de directorio. El paquete por defecto se hace corresponder con la carpeta física que está en el directorio actual de trabajo Esto es factible debido a que el directorio actual de trabajo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. En vez de eso. Luego compila MiClase. Unidad 7: Paquetes Libro 1: Core Java 242 © Copyright IBM Corp. que es definida por defecto por el sistema de tiempo de ejecución de Java.MiClase. se muestra el siguiente mensaje de error: Exception in thread "main" java. Las tres opciones se pueden usar en la misma aplicación Java y no necesitan estar en el mismo directorio. como se sabe. La razón para esto estriba en la definición de la variable classpath del sistema del programador. 8. establece el tope de la jerarquía de clase. también crean dificultades al compilar y ejecutar programas. está usualmente en la variable de entorno classpath. Por lo tanto. tiene que ser referida nombrando su jerarquía de paquetes.lang.lang.).NoClassDefFoundError: MiClase (wrong name: miDirectorio/MiClase). El classpath. Se ha introducido el término classpath. . Se va a aprender qué son y qué hacen en la próxima sección. MiClase.java en él. un jar o un zip. la estructura de directorios debe coincidir con el nombre del paquete.1 ¿Qué es el classpath? Un classpath almacena la ubicación particular que será usada por Java como la raíz de la jerarquía de paquetes. Sin embargo. es decir. Asuma que un programador crea una clase llamada MiClase en el paquete miDirectorio. aún esto mostrará un mensaje de error: Exception in thread "main" java. como miDirectorio. Los archivos de clase (.class) pueden existir en el directorio. o como un archivo zip o como un archivo JAR. Esto ocurre porque la clase ahora está almacenada en un paquete llamado miDirectorio. Aunque los paquetes resuelven problemas desde el punto de vista de control de acceso y conflictos de nombres. por defecto (. Ahora. Idealmente.java después de hacer a miDirectorio su directorio actual. No sucede lo mismo con paquetes. siempre que estén disponibles en el classpath. y ya no puede ser llamada simplemente MiClase. cuando se ejecuta MiClase. Esto les permite compilar el código fuente y luego ejecutar el intérprete de Java usando el nombre de la clase en la línea de comandos.class está ahora guardado en miDirectorio. Usualmente los programadores mantienen todas las clases en el paquete por defecto (sin nombre).NoClassDefFoundError: miDirectorio/MiClase.Core Java Guía del Estudiante Existen varios tipos de despliegue que una aplicación Java puede usar.

9. y luego usar java miDirectorio. entonces C:\Java\Ejemplos se debe añadir a la variable classpath. }/* Definicion de la clase Interes termina aqui */ 14. 21. public static void main(String[] args) { 20. 15. Ejemplo 7. p = (float) (Math. package inversiones. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.. }/* El metodo calcularInteres termina aqui */ 13. t. /* El metodo calcularInteres comienza aqui */ 6. 3. Esto le permite al programador usar java miDirectorio.MiClase sin importar el valor de la variable de ambiente. 8.random() * 100000). /* El metodo main comienza aqui */ 19. 11. no existe un directorio llamado miDirectorio en el directorio actual de trabajo debido a que el directorio actual del programador es miDirectorio. Libro 1: Core Java . 2. a. float calcularInteres( float principio. 10. si miDirectorio es un subdirectorio de C:\Java\Ejemplos. /* Definicion de la clase Interes comienza aqui */ 4. float p. subiendo un nivel.. float anos. 1. Unidad 7: Paquetes 243 © Copyright IBM Corp.MiClase o java miDirectorio/MiClase en la línea de comandos para ejecutar el programa. Por ejemplo. Observe el Ejemplo 7. class Interes { 5.4. el programador puede hacer una de dos cosas: ya sea añadir el tope de su jerarquía de clases de desarrollo a la variable classpath. 7. El otro método es cambiar de directorio. 16. /* Definicion de la clase Inversionista comienza aqui */ 17. 12. package inversiones. El código Java comienza aquí. float tarifa) { return (float) principio * anos * tarifa / 100. si.4 El siguiente programa ilustra los conceptos involucrados en torno al usar paquetes en Java. public class Inversionista { 18.Guía del Estudiante Core Java En este caso. Ante esta coyuntura.

println("Tarifa de interes: " + t). si = in. no se necesita importar el paquete java. Luego se puede compilar el programa de dos formas.Core Java Guía del Estudiante 22.out. 24.lang se usa para generar números aleatorios. 31. Por lo tanto.out. se tiene que guardar en un directorio llamado inversiones. 32. Interes in = new Interes().Inversionista Unidad 7: Paquetes Libro 1: Core Java 244 © Copyright IBM Corp. 27. 30. 29.lang al inicio del programa para poder acceder a la clase Math disponible en el paquete. el compilador de Java importa implícitamente el paquete java. 25. java inversiones/Inversionista o java inversiones. System. Después de escribir el programa.println("Principio: " + p). System. 26. el número de años de inversión y la tasa de interés.lang en tiempo de compilación de cualquier programa Java. t).random() * 20). a. Sin embargo. Ahora se compila y ejecuta el programa para ver cómo trabaja. Se puede compilar el programa desde el directorio inversiones como sigue: javac Inversionista. }/* El metodo main termina aqui */ 33.java Después que el programa es compilado exitosamente. . 28. es compilarlo desde un directorio un nivel superior al directorio investments como sigue: javac inversiones/Inversionista. a = (float) (Math. 23.out. t = (float) (Math.random() * 10).out.println("Interes simple: " + si). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El método random() disponible en la clase Math del paquete java. se debe ir un nivel superior del directorio inversiones para ejecutar el programa y dar el siguiente comando en la línea de comandos.calcularInteres(p.println("Numero de anos: " + a). que es creado como un subdirectorio del directorio actual. }/* Definicion de la clase Inversionista termina aqui */ El código Java termina aquí El programa anterior calcula el interés simple cuando se da el monto principal. System. Se debe importar el paquete java.java Otra forma. System.lang para que el programa trabaje.

9.77 Fin del Ejemplo 7. observe algunos paquetes comúnmente usados en programas Java. son también útiles cuando se usan gráficos e imágenes en las aplicaciones. Paquetes Incorporados en Java Usados Comúnmente En esta sección se presenta una visión general de los paquetes que son ampliamente usados en Java. Para el desarrollo y ejecución de estos componentes reutilizables se deben usar las clases disponibles en el paquete java.2 java.io Se puede obtener entrada del usuario del teclado usando flujos de entrada.awt para diseñar interfaces de usuario para aplicaciones. Estos flujos también son útiles durante la serialización y la deserealización de objetos. La salida del programa anterior puede ser como sigue (dependiendo de los números aleatorios que son generados): Principio: 35830. 9. Estas clases también permiten que un applet se comunique con su contexto de applet.3 java.applet Las clases disponibles en el paquete java.applet definen las características de los applets de Java y permite que se programen. adicionalmente se puede enviar la salida al monitor usando flujos de salida.4 Ahora. así como cuando se lee de o se escribe a un archivo.Guía del Estudiante Core Java No se puede ejecutar el programa desde el mismo directorio inversiones. Se debe ir un nivel superior y luego ejecutar el programa. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.awt Se pueden usar las clases que están disponibles en el paquete java. El marco de trabajo de applets comprende el applet y el contexto del applet.558226 Interes simple: 5469.io definen los diferentes flujos de entrada y salida usados para las funciones descritas anteriormente. . 9. Libro 1: Core Java Unidad 7: Paquetes 245 © Copyright IBM Corp.beans Los componentes Java beans son reutilizables y ampliamente usados en aplicaciones y applets Java.4 java.254 Numero de anos: 3.1 java.349063 Tarifa de interes: 4.beans. La compilación puede hacerse desde cualquier directorio. Las clases en java. 9. El contexto del applet es la aplicación que carga y corre el applet. 9.

Provee dos clases BigInteger para enteros y BigDecimal para números decimales. para esto se tiene las clases envolventes (wrapper).util Este paquete tiene esencialmente varias clases utilitarias que hacen el esfuerzo de la programación más simple. exponente.Core Java Guía del Estudiante 9.8 java. NumberFormat. . seno. números y mensajes. 9. hashCode(). Las clases están diseñadas para trabajar independientemente del lenguaje natural usado. buscar la fecha y hora local de acuerdo a la región de la fecha y hora del sistema.math El paquete math en Java contiene clases que nos ayudan a trabajar con aritmética sobre números enteros y decimales de precisión arbitraria.lang tiene las clases que proveen la funcionalidad básica de Java. Algunos métodos en esta clase proveen implementaciones estándares de algoritmos para equals(). Las clases String y StringBuffer de este paquete tienen varias operaciones que pueden realizarse sobre cadenas de caracteres. etc.util permiten generar números aleatorios. tangente. coseno. que es la superclase de todas las otras clases en Java. Algunas de las clases utilitarias disponibles en el paquete java. etc. double. Este paquete tiene también muchas clases que permiten realizar operaciones de sistema. Puede haber situaciones cuando los tipos de datos primitivos como integer. que permite manejar una colección (grupo) de objetos. etc.6 java. float. Este paquete tiene la clase Object. fechas. se necesitan en la forma de objeto. que se usa en las interfaces de usuario de las aplicaciones.lang El paquete java. Este paquete también tiene la clase Math.text Este paquete contiene clases para manipular texto.5 java. 9. También proporciona dos interfaces que realizan recorridos sobre datos textos. DateFormat. que proporciona la implementación estándar para muchas funciones matemáticas útiles como: raíz cuadrada. 9. como aplicar las políticas de seguridad. etc. Provee la clase Vector que almacena una colección de referencias a objetos. crear procesos externos. Algunas de las clases provistas en este paquete son: Annotation. que tienen un campo para almacenar el valor del tipo de dato primitivo. Este paquete tiene la clase Throwable. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. MessageFormat. etc. tiene clases que soportan el modelo de evento. puede variar en tamaño y contener objetos de diferentes tipos. que es la raíz de todas las clases de errores y excepciones. Unidad 7: Paquetes Libro 1: Core Java 246 © Copyright IBM Corp. y toString().7 java. También tiene el marco de trabajo Collections.

Usando las clases Socket y ServerSocket se pueden implementar un sistema cliente/servidor. . La clase URL y otras clases relacionadas permiten enviar datos a un URL así como recibir datos fácilmente. se pueden desarrollador aplicaciones para un servidor y host en la Internet.9 java.rmi La Invocación a Métodos Remota (Remote Method Invocation RMI) permite a un objeto ejecutándose en una JVM invocar a un método de otro objeto (objeto remoto) que se está ejecutando en una JVM diferente. 9.Guía del Estudiante Core Java 9. Libro 1: Core Java Unidad 7: Paquetes 247 © Copyright IBM Corp. También. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.net Este paquete tiene varias clases que permiten construir aplicaciones en red.10 java. Se pueden desarrollar aplicaciones para que un cliente se comunique con cualquier servidor disponible en la Internet.

Discutir cómo importar paquetes. Discutir acerca de protección de acceso en paquetes. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. usted debe ser capaz de: • • • • • • • Definir y crear un paquete. . Explicar las variables classpath y describir su uso. Explicar los paquetes incorporados más usados en Java. Describir los miembros del paquete. Unidad 7: Paquetes Libro 1: Core Java 248 © Copyright IBM Corp.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Explicar cómo los paquetes se representan en el sistema de archivos.

y p2. a) Verdadero b) Falso 3) ¿Cuáles de las siguientes sentencias son verdaderas acerca de la instrucción package? a) Debe ser la primera instrucción declarada en un archivo fuente Java. . y p1. c) Se termina con un punto y coma. b) Debe ir después de las instrucciones import.p3.p2.C es el nombre del paquete d) p1 es el nombre del directorio.nombre b) Un paquete con el mismo nombre que el directorio actual c) El paquete por defecto (Default package) d) Ninguna de las anteriores Libro 1: Core Java Unidad 7: Paquetes 249 © Copyright IBM Corp.C es el nombre del paquete 5) Cuando no se especifica el paquete en un archivo fuente.C.p3 es el nombre del paquete c) p1. y el resto son simplemente nombres de directorios b) C es el nombre de la clase.p2.p2. 4) Un programa Java tiene la siguiente instrucción: package p1. a) Verdadero b) Falso 2) Se puede usar el mismo nombre de paquete para diferentes definiciones de clases en diferentes archivos. la clase se almacena en _____________.p3.Guía del Estudiante Core Java Unidad 7: Examen de Autoevaluación 1) Se pueden tener dos clases con el mismo nombre en dos paquetes diferentes en Java.p3. a) El paquete java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. ¿Cuál de las siguientes es verdadera acerca de la instrucción? a) C es el nombre del paquete. d) Asegura que todas las clases definidas en el archivo fuente pertenecen al paquete.

java en un paquete llamado miPaquete.lang? a) k=new lang.lang.lang. a) Verdadero b) Falso 7) ¿Cuál de los siguientes paquetes es importado implícitamente por el compilador de Java para cualquier programa Java? a) java. ¿cuál de los siguientes niveles de acceso se asume que tiene? a) public b) protected c) package d) private 10) ¿Cuál de las siguientes instrucciones se pueden usar para crear un objeto de la clase Float que está en el paquete java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se puede ejecutar el programa desde el directorio miPaquete.awt b) java.lang.Float() d) k= new java.Float.Float() b) Float f = new Float() c) Float f= new java.net 8) ¿Para cuál de los siguientes será visible un miembro sin especificación de acceso explícito en la definición de su clase? a) Subclases en otro paquete b) Clases en el mismo paquete c) Ambas 9) Si se tiene una clase sin ningún modificador para especificar su acceso.rmi d) java. Unidad 7: Paquetes Libro 1: Core Java 250 © Copyright IBM Corp.lang c) java. .Core Java Guía del Estudiante 6) Suponga que existe un programa llamado MiClase. sin importar el paquete java.

Guía del Estudiante Core Java Respuestas a la Unidad 7: Examen de Autoevaluación 1) a 2) a 3) a. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. c y d 4) b 5) c 6) b 7) b 8) b 9) c 10) b y c Libro 1: Core Java Unidad 7: Paquetes 251 © Copyright IBM Corp. .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->