7507 - Algoritmos y Programación III PLANIFICACIONES Planificaciones 7507 - Algoritmos y Programación III Docente responsable: FONTELA MOISES CARLOS 1 de 8 Actualización: 1ºC/2016 7507 - Algoritmos y Programación III PLANIFICACIONES Actualización: 1ºC/2016 OBJETIVOS - Desarrollar el paradigma de programación orientada a objetos (POO). Su aplicación en distintos tipos de problemas. - Brindar los conocimientos para la programación interactiva con interfaces gráficas. - Estudiar una arquitectura que permita la separación de incumbencias. - Estudiar la programación guiada por eventos. - Conocer y aplicar elementos de documentación y prueba de programas orientados a objetos. - Evaluar los problemas de concurrencia y persistencia. - Introducir el concepto de usabilidad y del diseño de interfaces gráficas de usuario. - Conocer y aplicar lenguajes de programación de POO. - Adquirir un manejo integral de las técnicas estudiadas mediante la resolución de trabajos prácticos por computadora. CONTENIDOS MÍNIMOS - PROGRAMA SINTÉTICO DESARROLLO DE SOFTWARE Y PROGRAMACIÓN OBJETOS CLASES REUTILIZACIÓN POLIMORFISMO DOCUMENTACIÓN DE SOFTWARE EN EL PARADIGMA DE OBJETOS PRUEBAS DE SOFTWARE EN EL PARADIGMA DE OBJETOS EXCEPCIONES PROGRAMACIÓN ORIENTADA A OBJETOS: OTROS CONCEPTOS CALIDAD DE CÓDIGO TEMAS BÁSICOS DE DISEÑO DISEÑO DE INTERFACES GRÁFICAS DE USUARIO INFORMACIÓN DE TIPOS EN TIEMPO DE EJECUCIÓN Y DISTINTOS MODELOS DE DATOS CONCLUSIONES Y ESTADO DEL ARTE PROGRAMA ANALÍTICO UNIDAD 1: DESARROLLO DE SOFTWARE Y PROGRAMACIÓN Desarrollo de software. Disciplinas del desarrollo. Programas y sistemas. Problemas de los proyectos de desarrollo de software. UNIDAD 2: OBJETOS Objetos y mensajes. Objetos y clases. Estado, comportamiento, identidad. Paquetes. Historia hacia la POO. POO vs. Procedural. Uso en Java, C# y Smalltalk. UNIDAD 3: CLASES Implementación de clases: atributos, métodos y propiedades, constructores, excepciones. Diseño contractual. TDD o diseño guiado por las pruebas. Objetivos de la orientación a objetos. Abstracción y ocultamiento de información: encapsulamiento. Atributos de clase. Métodos de clase. Implementación en Java, C# y Smalltalk. UNIDAD 3: COLABORACIONES Y REUTILIZACIÓN Delegación. Herencia. UML: clases, paquetes, secuencias. Cuándo usar herencia y cuándo delegación. Redefinición. Clases abstractas. Herencia múltiple como concepto. Constructores, destructores, herencia y composición. Atributos y métodos protegidos. Implementación en Java, C# y Smalltalk. UNIDAD 4: POLIMORFISMO Métodos virtuales. Métodos abstractos. Polimorfismo como concepto. Polimorfismo y vinculación tardía. Métodos abstractos. Interfaces. Clases internas. Implementación en Java, C# y Smalltalk. UNIDAD 5: 2 de 8 7507 - Algoritmos y Programación III PLANIFICACIONES Actualización: 1ºC/2016 DOCUMENTACIÓN DE SOFTWARE EN EL PARADIGMA DE OBJETOS Objetivos de la documentación de software. Tipos de documentación según a quién va dirigida. Documentación para desarrolladores, para usuarios y para administradores y soporte. Diagramas de clases, de secuencia, de estados y de actividades (notación UML). Autodocumentación de código: comentarios y estándares de nomenclatura. Documentación en línea. Buena calidad de código. UNIDAD 6: PRUEBAS DE SOFTWARE EN EL PARADIGMA DE OBJETOS Objetivos de las pruebas. Técnicas de prueba: caja blanca y caja negra. Tipos de pruebas: revisiones de código, unitarias, de integración, de sistema, de aceptación. Pruebas en POO y en entornos interactivos: su diferencias frente a las pruebas tradicionales. Axiomas sobre datos adecuados de pruebas. Automatización de pruebas. UNIDAD 7: EXCEPCIONES Dependencia de estados: enfoques conservadores y optimistas. Errores y excepciones. Los modelos primitivos de excepciones. Los modelos de excepciones de los lenguajes orientados a objetos: lanzamiento y captura. Excepciones en Java, C# y Smalltalk. Ventajas y desventajas cada modelo de excepciones. UNIDAD 8: PROGRAMACIÓN ORIENTADA A OBJETOS: OTROS CONCEPTOS Colecciones e iteradores. Genericidad. Programación guiada por eventos. Estados, transiciones y diagramas de estados. Persistencia: objetivos, principios, limitaciones de los lenguajes de POO; tipos de persistencia en función de la forma de manejar objetos complejos. Concurrencia: introducción. Implementación en Java, C# y Smalltalk. UNIDAD 9: CALIDAD DE CÓDIGO Calidad en general. Temas de legibilidad. Guías para mejora de desempeño. Otros temas. Implementación en Java, C# y Smalltalk. UNIDAD 10: TEMAS BÁSICOS DE DISEÑO Modularización. Principios de diseño. Modularización de clases. Modularización de paquetes. Modularización de métodos. Entropía y diseño. Refactorización. Concepto de patrón. MVC como patrón macro. Implementación en Java, C# y Smalltalk. UNIDAD 11: DISEÑO DE INTERFACES GRÁFICAS DE USUARIO Interacción humano-computadora (HCI). Por qué centrarse en el usuario. Importancia de la interfaz de usuario. Aceptación práctica de un sistema. Concepto de usabilidad. Consecuencias de la falta de usabilidad. Estilos de interfaces. Metodologías de diseño de interfaces. Guías de diseño. Uso de texto y caracteres. Uso de colores e imágenes. Metáforas y símiles. Colores. Legibilidad. Elementos de control. La atención del usuario. Estándares externos e internos. Definición de objetivos de usabilidad. Evaluación heurística de la usabilidad. UNIDAD 12: INFORMACIÓN DE TIPOS EN TIEMPO DE EJECUCIÓN Y DISTINTOS MODELOS DE DATOS Transformación de tipos. Uso de información de tipo en tiempo de ejecución. Reflexión. Ventajas y riesgos. Objetos estáticos y referencias a objetos. Inicialización y liberación de memoria. Copia y clonación. Igualdad e identidad de objetos. Closures y lambdas. Los casos de Java, C# y Smalltalk. UNIDAD 13: CONCLUSIONES Y ESTADO DEL ARTE Análisis global del paradigma. Objetos en otros lenguajes: C++, Python, otros. Metodología de desarrollo de software: el caso de los métodos ágiles. Tendencias en desarrollo de software: software como servicio, cloud computing y SOA. Prácticas y estado del arte en Test-Driven Development. BIBLIOGRAFÍA Principal: Carlos Fontela, “Orientación a objetos, diseño y programación”. Stephane Ducasse, "Pharo By Example". Kent Beck, “Test Driven Development: By Example”. 3 de 8 7507 - Algoritmos y Programación III PLANIFICACIONES Actualización: 1ºC/2016 Opcional: Steve McConnell, “Code Complete”. Kent Beck, “Implementation Patterns”. Bertrand Meyer, “Desarrollo de software orientado a objetos”. Robert Martin, “UML para programadores Java”. Carlos Fontela, "UML". Bruce Eckel, “Thinking in Java, 3rd. edition”. Bjarne Stroustrup, "El lenguaje de programación C++", edición especial. Jakob Nielsen, “Usability Engineering”. Donald Norman, “The Design of Everyday Things”. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, “Design Patterns”. Elizabeth Freeman, “Head-First Design Patterns”. Martin Fowler, “Refactoring: Improving the Design of Existing Code”. Kent Beck, “Extreme Programming Explained”. Fred Brooks, “The Mythical Mon-Month”. RÉGIMEN DE CURSADA Metodología de enseñanza - Clases teórico-prácticas con desarrollo de los temas incluidos en el programa. - Clases de resolución de problemas y consulta. - Desarrollo de trabajos prácticos sobre computadora, individuales y en equipos. - Resolución de ejercicios individuales y en grupo. Modalidad de Evaluación Parcial Examen teórico–práctico que incluye la resolución de ejercicios y teoría, con 2 oportunidades de recuperación. Coloquio integrador, que incluye resolución de ejercicios y teoría, con 3 oportunidades. 4 de 8 7507 - Algoritmos y Programación III PLANIFICACIONES Actualización: 1ºC/2016 CALENDARIO DE CLASES Semana Temas de teoría Resolución de problemas <1> 15/08 al 20/08 Presentación de la materia. Qué se vio en las Algo I y II y qué se pretende en esta. Diferencias entre POO y estructurada. Objetos y su uso. Trabajo con objetos predefinidos. Todo en Smalltalk y Java. <2> 22/08 al 27/08 Laboratorio Otro tipo Fecha entrega Informe TP Bibliografía básica Presentación de la modalidad de las clases prácticas. Introducción a Smalltalk. Resolución en código de un ejercicio simple. No determinado aún Ver bibliografía en datos generales de la materia Implementació n de objetos con clases. Diseño por contrato. Uso de excepciones sin herencia. TDD y pruebas unitarias. Todo en Smalltalk y Java. El caso de JavaScript. Uso de clases y objetos. Construcción de clases. No determinado aún Ver bibliografía en datos generales de la materia <3> 29/08 al 03/09 Colaboracion es de objetos. Delegación. Diagramas de clases y paquetes. Un ejercicio de POO antes de explicar herencia, con varias clases y delegación. Diagrama de secuencia. Herencia. Delegación vs.herencia. Discusión de la pila y el vector. Herencia y delegación. Polimorfismo. No determinado aún Ver bibliografía en datos generales de la materia <4> 05/09 al 10/09 Polimorfismo con herencia en Java. Clases y métodos abstractos. Polimorfismo sin herencia en Smalltalk. Polimorfismo en JavaScript. Repaso No determinado aún Ver bibliografía en datos generales de la materia <5> 12/09 al 17/09 Excepciones y clases de excepciones: lanzamiento y captura. Excepciones y temas básicos de codificación. No determinado aún Ver bibliografía en datos generales de la materia 5 de 8 7507 - Algoritmos y Programación III Semana Temas de teoría Resolución de problemas PLANIFICACIONES Laboratorio Otro tipo Actualización: 1ºC/2016 Fecha entrega Informe TP Bibliografía básica Diagrama de estados de UML. Discusión del problema del círculo y la elipse. <6> 19/09 al 24/09 Calidad de código. Algunas buenas prácticas tomadas de XP: refactoring, TDD, simplicidad. Repaso No determinado aún Ver bibliografía en datos generales de la materia <7> 26/09 al 01/10 Repaso. Repaso No determinado aún Ver bibliografía en datos generales de la materia <8> 03/10 al 08/10 Primer parcial 1ra. Fecha Resolución del parcial No determinado aún Ver bibliografía en datos generales de la materia <9> 10/10 al 15/10 Repaso de conceptos de POO en lenguajes de comprobación estática. Genericidad. Trabajo en Java. No determinado aún Ver bibliografía en datos generales de la materia <10> 17/10 al 22/10 Principios de diseño. MVC. Nociones de patrones de diseño, como concepto. MVC No determinado aún Ver bibliografía en datos generales de la materia <11> 24/10 al 29/10 Recuperatorio 1er parcial Temas de diseño. Persistencia. No determinado aún Ver bibliografía en datos generales de la materia <12> 31/10 al 05/11 RTTI, reflexión. Closures, lambdas. Copia, clonación. Recolección de basura. Por qué hay que usar estas cosas con cuidado. Todo en Smalltalk y Java. Modelos de objetos de distintos lenguajes. Repaso No determinado aún Ver bibliografía en datos generales de la materia <13> 07/11 al 12/11 Desarrollo de software y programación. Otras disciplinas de desarrollo. Principales problemas del desarrollo de software y de la administración Repaso No determinado aún Ver bibliografía en datos generales de la materia 6 de 8 7507 - Algoritmos y Programación III Semana Temas de teoría Resolución de problemas PLANIFICACIONES Laboratorio Otro tipo Actualización: 1ºC/2016 Fecha entrega Informe TP Bibliografía básica de proyectos de software. Métodos ágiles. Scrum y equipos de trabajo. <14> 14/11 al 19/11 Buffer Repaso No determinado aún Ver bibliografía en datos generales de la materia <15> 21/11 al 26/11 Repaso general Repaso No determinado aún Ver bibliografía en datos generales de la materia <16> 28/11 al 03/12 FERIADO Repaso No determinado aún Ver bibliografía en datos generales de la materia 7 de 8 7507 - Algoritmos y Programación III PLANIFICACIONES Actualización: 1ºC/2016 CALENDARIO DE EVALUACIONES Evaluación Parcial Oportunidad Semana Fecha Hora 1º 8 25/04 16:00 2º 11 16/05 16:00 3º 16 27/06 16:00 Aula 4º Observaciones sobre el Temario de la Evaluación Parcial Hace foco en programación orientada a objetos sobre Smalltalk, con énfasis en modelado con UML, decisiones de diseño entre formas de reutilización (delegación, herencia), polimorfismo y excepciones. 8 de 8