PROGRAMACIÓN ORIENTADA POR OBJETOS EN JAVA Introducción El paradigma de Programación Orientada a Objetos ha estado vigente desde hace muchos años en el mundo del software. A través de los años este paradigma ha sido soportado por variados lenguajes siendo Java el más utilizado en la actualidad. En este curso se presentan los conceptos fundamentales de la Programación Orientada a Objetos, tales como clases, objetos, herencia y polimorfismo. Estos conceptos se ponen en práctica para programar aplicaciones utilizando el lenguaje Java. Adicionalmente en el curso se enseñan buenas prácticas y disciplinas de programación para implementar soluciones de software a partir de diseños materializados en diagramas de clases. Objetivos Desarrollar la habilidad para implementar en el lenguaje Java los diseños ilustrados en diagramas de clases. Aplicar buenas prácticas de programación como son la buena asignación de responsabilidades y el buen encapsulamiento. Promover la reutilización de código. Escribir código claro que sea fácilmente mantenible. Duración y Metodología El curso tiene una duración de 60 horas de las cuales cerca de la mitad son prácticas dirigidas que serán realizadas por los participantes. Los diversos conceptos serán ilustrados con demostraciones por parte de la profesora. Durante las sesiones prácticas se pretende que los participantes apliquen los conceptos para desarrollar programas sencillos. Se entregarán abundantes herramientas y ejemplos para que los participantes puedan seguir practicando por su cuenta. Orientado a El curso está orientado a ingenieros de sistemas y afines con poco o ningún conocimiento previo en los conceptos de la Programación Orientada por Objetos aplicados mediante el lenguaje de programación Java. Se espera que los participantes estén comprometidos en labores de desarrollo de aplicaciones. Contenido del curso Tema 1: Elementos básicos de la programación Orientada por Objetos utilizando el lenguaje Java Importancia del paradigma POO Historia del lenguaje Java Repaso de algorítmica y de programación: Estructuras de secuencia (operadores de asignación y casting) Estructuras de selección: if, if-else, switch, operador ternario?, if-else anidadas, operadores lógicos
Estructuras de repetición: while, do while, for, sentencias de repetición anidadas, break, continue, ciclos sobre arreglos de tipos primitivos Práctica inicial con un IDE: Compilar y ejecutar un programa en Java Ejercicios con ciclos y condicionales sobre arreglos de tipos primitivos Entrada y salida por consola (utilizando Scanner y println y printf) Tema 2: Conceptos de Objetos Clases Paquetes de clases: creación y visibilidad Objetos y atributos Visibilidad de atributos Métodos modificadores y analizadores Visibilidad de métodos Encapsulamiento de atributos Instanciación de objetos Constructores por defecto y constructores con parámetros Usando los objetos La propiedad this y la notación punto (.) Arreglos de objetos Práctica de Definición canónica de una clase: Tema 3: Atributos y Métodos Atributos de clase (estáticos) y atributos final Métodos Métodos de instancia Parámetros Encapsulamiento de métodos Sobrecarga de métodos Métodos de clase (estáticos) Métodos final Práctica con atributos y métodos: Compilar y Ejecutar un programa en Java con varias clases: una clase de negocio y un test que trabaja con arreglos de objetos de negocio. Práctica de atributos y métodos de instancia y de clase: manejo de cadenas, fechas y calendarios a través de clases utilitarias (String, StringTokenizer y LocaDateTime) Tema 4: Diagrama de Clases y relaciones entre clases Diagrama de Clases Elementos de un diagrama de clases Java Diferentes tipos de relaciones entre clases Relación de asociación Concepto Representación
Navegabilidad Cardinalidad Roles y /o calificadores Atributos de relación Otros tipos de relaciones entre clases: Agregación/Composición, Dependencia, Herencia Práctica de relaciones simples entre clases (relaciones 1-1 y alguna relación 1-muchos modelada con arreglos) Tema 5: Persistencia mediante archivos Persistencia básica: lectura y escritura de archivos de texto Persistencia avanzada Archivos binarios, Archivos de datos primitivos Serialización (archivos de objetos) Práctica de persistencia con archivos de texto y binarios: Un programa en Java con varias clases: una clase de negocio y un test que trabaja con arreglos de objetos de la clase de negocio, leyendo datos de archivos y generando reportes Manejo de menú (con opciones de salvar y cargar) Documentación de clases (javadoc) Generación del jar ejecutable de un programa Tema 6: Colecciones para manejar relaciones 1 a muchos y relaciones bidireccionales Relación de Agregación/Composición relaciones de Cardinalidad 1 a muchos colecciones/contenedores: List (ArrayList, Vector) Diseño de la interacción de objetos Descubriendo métodos Visibilidad entre objetos Relaciones bidireccionales muchos a muchos Asignación de responsabilidades a las clases Práctica de asignación de responsabilidades con listas para manejar relaciones 1 a muchos y relaciones bidireccionales (1-1 y muchos a muchos) Tema 7: Ordenamiento de listas mediante clases utilitarias Ampliación de Colecciones Ordenamiento de Colecciones Iteradores: sentencia for mejorada Facilidades ofrecidas por el IDE: Navegación de fuentes correspondientes a clases relacionadas Refactoring Depuración paso a paso Práctica de ordenamiento de listas
Tema 8: Manejo de Maps Concepto de Map Clases implementadoras: Hashtable, HashMap Práctica con Maps Tema 9: Relación de Herencia Concepto de Herencia Beneficios de la Herencia Reconociendo la herencia Superclases y Subclases Visibilidad protegida Reglas de Herencia Herencia con clases concretas Constructores en la herencia Uso de this y super Práctica de herencia básica Tema 10: Polimorfismo y herencia avanzada Polimorfismo Concepto Beneficios Declarando e instanciando clases polimórficas Conversión entre clases en una relación de herencia Herencia avanzada Clases abstractas Métodos abstractos Sobre-escritura de métodos Clase final Práctica de polimorfismo y clases abstractas Tema 11: Relación de Realización Concepto de Interfaces Clases abstractas vs interfaces Herencia múltiple con interfaces Combinación de interfaces y clases abstractas Práctica de Interfaces combinadas con clases abstractas Tema 12: Enumerados y excepciones Uso de enumerados Manejo de excepciones Chequeo de errores Manejo de excepciones: try/catch, try/catch/finally, throws Sentencia exit Excepciones personalizadas
Práctica de enumerados y excepciones Tema 13: GUI: Interfaz gráfica de usuario simple Componentes GUI en Java (Swing, AWT) Contenedores: JFrame, JApplet, JPanel Layouts: null, border, etc. Componentes básicos: Etiquetas, campos de entrada de texto, botones de comando Práctica de GUI simple con elementos básicos Tema 15: GUI: Modelo de eventos Swing Elementos del modelo de eventos Swing Interfaz Gráfica de Usuario avanzada JOptionPane Botones de radio Eventos de mouse y teclado Contenedores combinados: JFrame con JPanel JTable dentro de Scroll Manejo de un JTable Tarjetero (JTabbedPane) Práctica de GUI avanzado con JTable y JTabbedPane Tema 16: GUI: Interfaz Gráfica de Usuario avanzada Elementos del modelo de eventos Swing Interfaz Gráfica de Usuario avanzada Cajas de chequeo Listas (combos) Seleccionador de archivo menus Práctica de GUI avanzado con elementos adicionales