PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA Angel García Beltrán y José María Arranz Santamaría Sección de Publicaciones Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid 2ª Edición Septiembre de 2007
2 A. García-Beltrán y J.M. Arranz
Programación orientada a objetos con Java 3 Esta publicación impresa y sus capítulos online están registrados por los autores. Esto significa que los contenidos, de forma total o parcial, se pueden leer, imprimir, compartir y distribuir libremente aunque con las consideraciones indicadas a continuación: Autoría: debe indicarse el nombre de los autores originales Uso no comercial: No debe utilizarse para usos comerciales. Sólo se permite para uso educacional por instituciones públicas o sin ánimo de lucro El contenido no debe alterarse o transformarse para ser incluido en trabajos derivados Programación Orientada a Objetos con Java (C) Angel García Beltrán y José María Arranz Santamaría agarcia@etsii.upm.es; jmarranz@dii.etsii.upm.es Sección de Publicaciones de la Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid
4 A. García-Beltrán y J.M. Arranz
Programación orientada a objetos con Java 5 ÍNDICE 1. INTRODUCCIÓN...10 1.1. EL LENGUAJE DE PROGRAMACIÓN JAVA...10 1.2. INSTALACIÓN DEL KIT DE DESARROLLO JAVA...13 1.3. PRIMERAS PRÁCTICAS...15 2. ESTRUCTURA DE UN PROGRAMA EN JAVA...26 2.1. LA CLASE PRINCIPAL Y EL MÉTODO MAIN...26 2.2. COMENTARIOS...27 2.3. IDENTIFICADORES...28 3. TIPOS DE DATO...31 3.1. CATEGORÍAS DE TIPOS DE DATOS...31 3.2. TIPOS DE DATO PRIMITIVOS EN JAVA...31 3.3. LITERALES O CONSTANTES LITERALES DE TIPOS DE DATO PRIMITIVOS...32 3.4. FORMATO DE REPRESENTACIÓN DE LOS DATOS NUMÉRICOS REALES...34 3.5. DECLARACIONES DE VARIABLES...35 3.6. DECLARACIÓN DE VARIABLES FINAL O CONSTANTES...36 3.7. CONVERSIONES ENTRE TIPOS DE DATO...37 4. OPERADORES...42 4.1. OPERADOR ASIGNACIÓN...42 4.2. OPERADORES ARITMÉTICOS...43 4.3. OPERADORES ARITMÉTICOS INCREMENTALES...44 4.4. OPERADORES ARITMÉTICOS COMBINADOS...45 4.5. OPERADORES DE RELACIÓN...46 4.6. OPERADORES LÓGICOS O BOOLEANOS...47 4.7. EL OPERADOR CONDICIONAL...49 4.8. OPERADORES DE BIT...50 4.9. OPERADOR CONCATENACIÓN DE CADENAS...51 4.10. SEPARADORES...51 4.11. EXPRESIONES...52 4.12. PRIORIDAD ENTRE OPERADORES...52 5. SENTENCIAS SELECTIVAS O CONDICIONALES...59 5.1. SENTENCIAS DE CONTROL DEL FLUJO DE UN PROGRAMA...59 5.2. SENTENCIA IF-ELSE...59 5.3. SENTENCIA SWITCH...61 6. SENTENCIAS REPETITIVAS O BUCLES...69 6.1. SENTENCIA FOR...69 6.2. SENTENCIA WHILE...72 6.3. SENTENCIA DO-WHILE...73 7. OTRAS SENTENCIAS...82 7.1. SENTENCIA BREAK...82 7.2. SENTENCIA CONTINUE...83 7.3. TRATAMIENTO DE EXCEPCIONES...84 7.4. OPERACIONES DE ENTRADA Y SALIDA DE DATOS...86
6 A. García-Beltrán y J.M. Arranz 8. SENTENCIA RETURN Y MÉTODOS...88 8.1. DECLARACIÓN Y USO DE MÉTODOS...88 8.2. RETURN Y VOID...92 8.3. RECURSIÓN O RECURRENCIA...94 8.4. SOBRECARGA DE MÉTODOS...95 9. OBJETOS Y CLASES...99 9.1. CLASES...99 9.2. INSTANCIAS...99 9.3. MODIFICADORES DE VISIBILIDAD...103 9.4. CLASES ANIDADAS E INTERNAS...104 9.5. EL OPERADOR INSTANCEOF...104 9.6. JAVADOC...104 10. ALGUNAS CLASES ESTÁNDAR DE JAVA (I)...109 10.1. CLASES CONTENEDORAS O WRAPPERS...109 10.2. OBJETOS DE LA CLASE CHARACTER...109 10.3. OBJETOS DE LA CLASE STRING...110 10.4. OPERACIONES CON INSTANCIAS DE LA CLASE STRING...110 10.5. OTROS MÉTODOS PARA TRABAJAR CON OBJETOS DE LA CLASE STRING...112 11. ALGUNAS CLASES ESTÁNDAR DE JAVA (II)...117 11.1. OBJETOS DE LA CLASE ARRAY...117 11.2. OPERACIONES CON ARRAYS...118 11.3. ARRAY DE OBJETOS...121 11.4. ARRAYS MULTIDIMENSIONALES...123 12. TIPOS DE ATRIBUTOS...130 12.1. VARIABLES DE INSTANCIA...130 12.2. VARIABLES DE CLASE (STATIC)...131 12.3. CONSTANTES O VARIABLES FINALES (FINAL)...133 13. CONSTRUCTORES...139 13.1. CONSTRUCTORES...139 13.2. DECLARACIÓN DE UN CONSTRUCTOR...139 13.3. MÁS SOBRE LA DECLARACIÓN Y USO DE VARIOS CONSTRUCTORES...141 14. TIPOS DE MÉTODOS...147 14.1. MÉTODOS DE INSTANCIA...147 14.2. MÉTODOS DE CLASE...147 15. PARÁMETROS O ARGUMENTOS...155 15.1. USO ALTERNATIVO DE THIS COMO REFERENCIA AL PARÁMETRO IMPLÍCITO...156 15.2. PASO POR VALOR Y PASO POR REFERENCIA...157 15.3. VARIABLES LOCALES...158 16. HERENCIA...160 16.1. DEFINICIÓN DE HERENCIA...160 16.2. JERARQUÍA DE CLASES...161 16.3. SOBREESCRITURA DE MÉTODOS HEREDADOS...162
Programación orientada a objetos con Java 7 16.4. LA CLASE OBJECT...162 16.5. HERENCIA Y CONSTRUCTORES...163 16.6. CLASES Y MÉTODOS ABSTRACTOS...164 16.7. CLASES Y MÉTODOS FINALES...165 17. AGREGACIÓN Y ANIDACIÓN...172 17.1. AGREGACIÓN, ASOCIACIÓN O COMPOSICIÓN...172 17.2. ANIDACIÓN O DESCOMPOSICIÓN DE CÓDIGO...173 18. INTERFACES...180 18.1. DECLARACIÓN DE UNA INTERFAZ...180 18.2. IMPLEMENTACIÓN DE UNA INTERFAZ EN UNA CLASE...181 18.3. JERARQUÍA ENTRE INTERFACES...182 18.4. UTILIZACIÓN DE UNA INTERFAZ COMO UN TIPO DE DATO...184 19. PACKAGES O PAQUETES...190 19.1. CÓMO SE ORGANIZA UN CONJUNTO DE ARCHIVOS FUENTE DE JAVA?...190 19.2. IDENTIFICACIÓN DE UN PAQUETE...191 19.3. ACCESO A LOS COMPONENTES DE UN PAQUETE...191 19.4. MODIFICADORES DE ACCESO A LOS COMPONENTES...192 19.5. RECOMENDACIONES PARA LA GESTIÓN DE ARCHIVOS DE JAVA...193 20. TRATAMIENTO DE EXCEPCIONES...199 20.1. ERROR DE EJECUCIÓN DE UN PROGRAMA...199 20.2. TIPOS DE ERRORES...199 20.3. TRATAMIENTO DE ERRORES (PREVISIBLES)...202 20.4. TRATAMIENTO DE ERRORES CLÁSICO...202 20.5. TRATAMIENTO DE ERRORES MODERNO (EXCEPCIONES)...205 21. COLECCIONES...216 21.1. INTRODUCCIÓN...216 21.2. INTERFACES...216 21.3. INTERFAZ COLLECTION...218 21.4. INTERFAZ ITERATOR...219 21.5. INTERFAZ SET...220 21.6. INTERFAZ LIST...222 21.7. INTERFAZ MAP...226 21.8. TABLA RESUMEN...231 21.9. IDENTIDAD DE LOS ELEMENTOS DE UNA COLECCIÓN...231 21.10. ORDENACIÓN DE LOS ELEMENTOS DE UNA COLECCIÓN...233 21.11. ALGORITMOS PREDEFINIDOS...234 22. USO DE ARCHIVOS Y ENTRADA Y SALIDA DE DATOS...239 22.1. LA CLASE FILE...239 22.2. CLASES STREAMS...241 22.3. CLASES PARA TRABAJAR CON FLUJOS DE CARACTERES...243 22.4. CLASES PARA TRABAJAR CON FLUJOS DE BYTES...247 22.5. ENTRADAS Y SALIDAS ESTÁNDAR EN JAVA...249 22.6. SALIDA DE DATOS POR PANTALLA...249 22.7. LECTURA DE DATOS POR TECLADO...251 22.8. DATOS DE DISTINTOS TIPOS PRIMITIVOS EN ARCHIVOS...252
8 A. García-Beltrán y J.M. Arranz 22.9. SERIALIZACIÓN DE OBJETOS...255 23. CONCURRENCIA E HILOS...260 23.1. INTRODUCCIÓN...260 23.2. PROGRAMAS DE UN ÚNICO HILO O DE FLUJO ÚNICO...261 23.3. PROGRAMAS MULTIHILO O DE FLUJO MÚLTIPLE...261 23.4. LA CLASE THREAD...262 23.5. LA INTERFAZ RUNNABLE...264 23.6. CICLO DE VIDA DE UN HILO...266 23.7. PROGRAMACIÓN DE HILOS O SCHEDULING...268 23.8. EL MODIFICADOR SYNCHRONIZED...270 23.9. OTROS MÉTODOS DE UTILIDAD PARA HILOS SINCRONIZADOS...271 23.10. COMUNICACIÓN ENTRE HILOS...272 23.11. GRUPOS DE HILOS...275 24. APÉNDICE: EL LENGUAJE UNIFICADO DE MODELADO, UML...278 24.1. DIAGRAMA DE CLASES...278 24.2. REPRESENTACIÓN DE LAS CLASES...278 24.3. REPRESENTACIÓN DE LOS OBJETOS...279 24.4. RELACIONES ENTRE CLASES...279 24.5. RELACIÓN DE HERENCIA...280 24.6. RELACIÓN DE ASOCIACIÓN...280 24.7. RELACIÓN DE DEPENDENCIA...281 24.8. INTERFACES...281 25. PROGRAMACIÓN CON INTERFACES GRÁFICAS DE USUARIO (GUI)...282 25.1. JFC Y SWING...282 25.2. ELEMENTOS DE UNA APLICACIÓN GRÁFICA...283 25.3. UN PRIMER PROGRAMA QUE EMPLEA COMPONENTES SWING...283 25.4. COMPONENTES GRÁFICOS...285 25.5. LA CLASE JCOMPONENT...286 25.6. GENERACIÓN Y ORGANIZACIÓN DE COMPONENTES GRÁFICOS...290 25.7. UNA APLICACIÓN GRÁFICA CON INTERACCIÓN...291 25.8. UNA APLICACIÓN CON UTILIDAD...296 26. APÉNDICE. QUÉ ES EL JDK (JAVA DEVELOPERS KIT)?...305
Programación orientada a objetos con Java 9 PRÓLOGO Este pequeño manual sirve de referencia para el seguimiento de las asignaturas Programación en Java y Programación Orientada a Objetos con Java impartidas en la Escuela Técnica Superior de Ingenieros Industriales de la Universidad Politécnica de Madrid. Pero además puede servir como guía de autoaprendizaje o como material de referencia o de apoyo dentro de un primer curso de programación. Los capítulos han sido redactados por los profesores del Departamento de Automática, Ingeniería Electrónica e Informática Industrial: Ángel García-Beltrán (del capítulo 1 al 17 y del 21 al 24) y José María Arranz (del 19 al 20). Los objetivos principales de esta obra son la presentación de los elementos fundamentales del lenguaje de programación Java y la introducción a la metodología de la programación orientada a objetos. Dentro de cada capítulo se han descrito los diferentes elementos básicos de la programación con Java acompañados de ejemplos sencillos de utilización. Todos los programas de ejemplo son deliberadamente pequeños y sencillos para ilustrar cada concepto explicado. A pesar de la simpleza, todos los programas ejemplo pueden compilarse y ejecutarse de forma independiente. Al final de cada capítulo se han incluido algunas cuestiones y ejercicios propuestos que sirven de autoevaluación para los lectores de esta obra. Estos ejercicios son una parte muy importante de esta obra ya que si el estudiante los realiza, asimilará los conceptos mostrados en cada capítulo más eficazmente y ganará una experiencia muy valiosa en el empleo del compilador y del intérprete de Java. Asímismo, junto con la descripción de los diferentes elementos de programación en Java, se han incluido las correspondientes convenciones estándar de codificación seguidas por Sun y recomendadas para otros programadores 1. Estas convenciones abarcan los identificadores de archivos, la organización de archivos, la indentación, los comentarios, las declaraciones, las sentencias, los espacios en blanco, las convenciones para identificadores en general y otras prácticas de programación. Las convenciones de código son importantes para los programadores por varias razones: El 80% del coste del ciclo de vida del software se dedica a mantenimiento Prácticamente nunca el software es mantenido durante su vida útil por el autor original. Las convenciones de código facilitan la legibilidad del software permitiendo a los programadores entender el nuevo código más rápida y directamente. Si se envía el código fuente como un producto, es necesario asegurarse que está bien presentado y empaquetado como cualquier otro producto que se pudiera crear. El ordenador y el entorno de programación (compilador, intérprete...) son excelentes maestros. Es altamente recomendable experimentar con cada una de los elementos y características del lenguaje Java que vayan estudiándose y analizar los mensajes de error y de advertencia obtenidos al compilar y ejecutar los programas. Java es una marca comercial de Sun Microsystems Inc. 1 http://java.sun.com/docs/codeconv/index.html Revisado y actualizado el 20 de abril de 1999