750081M INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Lunes 18:00-20:00, Edf. 331 Salón 2026 – MG Martes 18:00-20:00, Edf. 331 Sala 1 – MG MARISOL GOMEZ RAMIREZ. [email protected] Lugar de atención: Sala de profesores cátedra Horario de atención: Lunes 5 a 6 pm. ((Creativity Is Intelligence Having Fun.))Albert Einstein. Descripción del curso: Introducción a la programación orientada a objetos (IPOO) es un curso de primeros semestre de Ingeneirı́a de sistemas y de Tecnologı́a en sistemas de información de la Universidad del Valle. El curso es de 4 (cuatro) créditos, es decir: una intensidad horaria de 4 horas a la semana de clases y 8 horas a la semana de trabajo adicional, extra-clase. La materia no es habilitable, si es validable. En la siguiente tabla se resume la información. Asignatura Código Créditos Intensidad Habilitable Validable Prerrequisitos Areas ACM – IEEE INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS 750081M 4 3 horas magistrales + 1 hora taller a la semana No Si 750082M PF1’, PF2’, PF3’, PF4, PF5’, PF7’ Cuadro 1: Descripción del curso. Nota(s): La nota mı́nima para aprobar el curso es 3. 1 Textos guı́a: Eckel, B. (2000). Thinking in C++ Vol. 1 y Vol. 2. Se puede descargar desde: http://www. bruceeckel. com http://www. teleco. upct. es/docencia. Stroustrup, B. (2013). The C++ programming language. Pearson Education. Stroustrup, B. (2013). A Tour of C++. Addison-Wesley. Stroustrup, B. (2014). Programming: principles and practice using C++. Pearson Education. Villalobos, S., Jorge, A. (2006). Fundamentos de programación: aprendizaje activo basado en casos: un enfoque moderno usando Java, UML, Objetos y Eclipse. Naucalpán de Juárez, Pearson Educación. Booch, G. (2006). Object Oriented Analysis Design with Application. Pearson Education India. Objetivos: Objetivo general. Capacitar al estudiante para comprender y aplicar el paradigma OO en la solución de problemas, mediante la utilización de un lenguaje orientado a objetos. Objetivos especı́ficos. Al finalizar el curso el estudiante estará en capacidad de: 1. Analizar y explicar el comportamiento de programas sencillos, que involucren todas las construcciones de control fundamentales. 2. Abordar un problema, descomponiéndolo en pasos elementales, para solucionarlo. Desarrollar algoritmos para resolver problemas sencillos, e implementar, verificar y depurar algoritmos en un lenguaje orientado a objetos. 3. Depurar un programa. 4. Resolver problemas con base en el paradigma de programación orientada a objetos, siendo capaza de seleccionar y aplicar las estructuras de control más apropiadas en cada momento. 5. Identificar las estructuras de datos básicas que sirven para representar información y reconocer cuando se debe emplear cada una. 6. Resolver problemas con base en el concepto de recursión y que sea capaz de escribir, verificar y depurar programas recursivos sencillos. 7. Interpretar la documentación de APIs y biliotecas de objetos, y utilizarlas para resolver problemas. 8. Mantener un buen estilo de programación. Metodologı́a: Metodologı́a del curso: Las clases se dictan con video beam y se utiliza el campus virtual. En el curso se utilizan el lenguaje de programación C++. Se recomienda utilizar el compilador que trae Linux por defecto (la distribución puede ser Ubuntu), Se utilizará el IDE de programación Anjuta. 2 El curso está diseñado para trabajar en tres espacios de aprendizaje: clases donde se presentan los temas y se explica mediante ejemplos (ver temas del curso sección contenidos del curso). Los talleres que son espacios donde los estudiantes aprenden haciendo, es decir resuelven problemas en la clase con el acompañamiento del profesor; talleres en grupo y el juego programadores y novatos (este se describe a continuacion). Finalmente un proyecto donde el estudiante tiene la posibilidad de desarrollar con mayor autonomı́a un programa basado en programacion orientada a objetos. Juego Programadores y novatos descripción: Este juego se llevará a cabo cuatro veces en el semestre, en cada juego se acumulan máximo 5 puntos (es decir al final del semestre la actividad se califica sobre 20 puntos), para cada jugada los estudiantes inician en 0 puntos. En cada juego se propone un reto y todos los estudiantes tienen la posibilidad de resolverlo en 30 minutos, se juega la primera iteración del juego, la cual se conoce como Iteración Programadores Lı́der (IPL), los 5 primeros estudiantes que resuelvan el reto entran en el grupo de Programadores Lı́der (PL) y obtendrán 4 puntos. Después se juegan otras 3 iteraciones conocidas como Iteración Programadores Novatos (IPN). En cada una de ellas los estudiantes que resuelvan el reto entran en el grupo de Programadores Novatos (PN) y obtendrán 3 puntos (para cada iteración 5 estudiantes entran en el grupo de PN y cada iteración tiene una duración de 20 minutos). En estas iteraciones del juego tanto los PL como los PN pueden explicar a los otros estudiantes del curso—cómo resolver el reto. Si un estudiante resuelve el reto e informa que fué gracias a la explicación de uno de los PL o PN, llamémoslo Programador P, entonces P obtendrá 0.25 puntos adicionales. Finalmente se juega una última ronda donde todos los miembros de ese grupo que entreguen el reto resuelto se llamarán Novatos y obtendrán 2.5 puntos. Si un estudiante no resuelve el reto obtendrá la nota de 1. En esta iteración final, todos quienes ya resolvieron el reto pueden explicar a los estudiantes novatos y obtendrán 0.5 puntos adicionales, esto si, el estudiante informa que fué gracias a la explicación de uno de sus compañeros. En la siguiente tabla se presenta en resumen las iteraciones y los puntajes. Iteracion IPL IPN N No entrega Programador 4 3 X X Novato X X 2.5 X No entrega X X X 1 Explicar 0 0.25 0.5 X Cuadro 2: Descripcion puntos juego programadores y novatos 3 Evaluación del curso: Proyecto – Juego Programadores y novatos Proyecto Talleres en general y talleres preparcial Examen final - Primer parte Examen final - Segunda parte Total 20 puntos. 20 puntos. 20 puntos. 20 puntos. 20 puntos. 100 puntos Cuadro 3: Evaluación curso de introducción a la programación orientada a objetos Contenidos del curso: Sesión 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Actividad Presentación del curso, que es la POO, reglas del curso, presentación del programa, dinámica para conocimiento del grupo. Introducción a la POO, relaciones entre clases. Ejemplo para aterrizar conceptos. Problemas, soluciones y programas: motivación, problemas y soluciones, especificación del problema, procesos y herramientas, la solución a un problema. Ejemplo simulador bancario, triángulo. Clases en C++, tipos de datos, atributos, métodos (algoritmos), instrucciones de retorno, llamado a los métodos, instanciar objetos. Taller. Compilar y ejecutar programas, depuración, verificación y estilo. Organización de los elementos de trabajo. Juego Programadores y Novatos. Encapsulación. Uso constantes, operadores, expresiones. Condicionales simples y dobles. Instrucciones repetitivas, for while. Ciclos dobles. Práctica sesión 7, 8 y 9. Juego Programadores y Novatos. Arreglos, ejemplos (reserva vuelo, tienda libros) Clase Vector, Librerı́a estándar. Práctica sesión 12. Arreglos de objetos - Entrega enunciado taller preparcial 1. Práctica sesión 14 - Entrega enunciado proyecto. Parcial Primera Parte y entrega del taller preparcial 1. 4 Sesión 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 Actividad Paso de argumentos a métodos, referencias punteros. Práctica sesión 17. Sobrecarga de métodos y operadores, argumentos por defecto, constructor copia. Práctica sesión 19 - Juego Programadores y Novatos. Recursión y Práctica recursión. Primera entrega proyecto. Primera entrega proyecto. Objetos estáticos y dinámicos. Manejo dinámico de memoria y excepciones. Práctica sesión 24. Juego Programadores y Novatos. Relación entre objetos, copia superficial y copia profunda. Práctica sesión 27. Relaciones entre clases, herencia, constructores y destructores, lista de inicialización en constructor, función protected, funciones virtuales. Práctica sesión 29. Destructores virtuales, polimorfismo, herencia múltiple - Entrega enunciado taller preparcial 2. Práctica sesión 31. Entrega final del proyecto. Parcial Segunda Parte y entrega del taller preparcial 2. Opcional Parcial. Bibliografı́a adicional: Ricardo Devis Botella. Ç++. STL. Plantillas. Excepciones. Roles y Objetos”, Ed. Paraninfo, Madrid-España, 1997. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, ”Design Patterns”, Addison Wesley, 2000. Documentación de STL (Standard Template Library). Se consigue gratis en http://www.sgi.com/Technology/ James O. Coplien, .Advanced C++ Programming Styles and Idioms”, Addison-Wesley, 1992. Tom Cargrill, Ç++ Programming Style”, Prentice-Hall, 1992. S. Meyers, .Effective C++”, Addison-Wesley, 1998. S. Meyers, ”More Effective C++”, Addison-Wesley, 1996. D. R. Musser, A. Saini, ”STL Tutorial and Reference Guide”, Addison-Wesley, 1996. Herbert Schildt, Ç++ Manual de Referencia”, Mc Graw-Hill, 1995. 5