Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI1201 - Programación II
I semestre 2013. Grupo 03: K,V 15:00-17:00. 303-IF.
Profesor Jeisson Hidalgo-Céspedes
Casillero: 04. Correo: jeissonh@gmail.com
Carta al estudiante
Objetivos
Introducir los fundamentos teóricos de programación para entrenar a cada estudiante en las técnicas básicas de construcción de programas, en especial en la especificación e implementación de módulos y artefactos de programación reutilizables, con el fin de que puedan usar herramientas de programación y participar en cualquier equipo dedicado a construir programas de mediana complejidad.
Al finalizar el curso el estudiante será capaz de:
- Comprender los siguientes conceptos: memoria estática, memoria dinámica, enlace estático, enlace dinámico, flujos de entrada-salida, archivos de acceso aleatorio, recursividad, clases concretas, clases abstractas, clases parametrizadas o programación genérica, clases contenedoras e iteradores.
- Elaborar especificaciones de clases completas, correctas, precisas y sin ambigüedades, utilizando una herramienta automatizada para generación de documentación.
- Construir clases abstractas y clases que las derivan usando herencia y polimorfismo.
- Usar clases parametrizadas pertenecientes a una biblioteca de uso difundido o estandarizado.
- Construir programas basados en los algoritmos de inserción, eliminación y búsqueda sobre árboles binarios de búsqueda.
- Usar excepciones al construir clases y programas para mejorar su robustez incorporando validación de entrada de datos y manejo de errores.
- Aplicar casos de prueba para depurar clases concretas y abstractas.
- Aprovechar las fortalezas de varios paradigmas de programación a distintos problemas.
Contenidos
Generalidades
- Descripción del uso de la memoria estática y la memoria dinámica en el lenguaje de programación que se usará en el curso.
- Comparación de los tipos de memoria disponibles en el lenguaje de programación del curso.
- Descripción de la estructura de proyecto en los ambientes de programación que se usarán en el curso.
- Descripción del depurador disponible en al menos uno de los ambientes de programación que se usará en el curso.
- Descripción de los distintos mecanismos disponibles en el lenguaje de programación que se usará en el curso para pasar a los métodos de una clase datos de tipos preconstruidos y objetos.
- Definición de métodos de instancia y métodos de clase en el lenguaje de programación que se usará en el curso.
Especificación
- Pautas para la especificación de clases concretas y clases abstractas.
- Discusión de las pautas para la especificación de clases parametrizadas.
Herencia y polimorfismo
- Definición de clases abstractas.
- Definición de clases que derivan de otras, ya sea abstractas o concretas.
- Definición de tipos polimórficos.
- Definición de métodos (y operadores, si el lenguaje lo permite) polimórficos.
Parametrización de clases
- Descripción general de una biblioteca de clases parametrizadas de uso estándarizado en el lenguaje de programación que se usará en el curso.
- Descripción del uso de algunas clases parametrizadas de la biblioteca referida anteriormente, de acuerdo con las necesidades de los proyectos de programación y los ejemplos desarrollados en el curso.
Árboles
- Algoritmos de inserción, búsqueda, eliminación y el recorrido en orden para árboles binarios ordenados no balanceados.
Validación de entrada de datos y manejo de excepciones
- Definción de clases de excepciones.
- Descripción del levantamiento de excepciones.
- Descripción de la captura y tratamiento de excepciones.
Manejo de archivos planos
- Por medio de flujos de datos.
- Por medio de acceso aleatorio.
Pruebas de programas
- Pruebas de constructores y destructores.
- Pruebas de métodos modificadores.
- Pruebas de métodos observadores.
- Ordenamiento de los tipos de pruebas en un controlador de pruebas.
Metodología de trabajo
El curso se compone de 16 semanas durante las cuales el docente presentará los conceptos y las técnicas de programación principales.
Al lo largo del ciclo lectivo el estudiante llevará a cabo proyectos de programación con el fin de poner en práctica y aplicar los conceptos y las técnicas del curso.
Bibliografía
- Deitel, H.M.; Deitel, P.J. C++ How to Program, 8th edition.
Prentice-Hall, 2012. http://www.deitel.com/.
- Stroustrup, Bjarne. The C++ Programming Language, 3rd edition.
Addison-Wesley; 1998. http://www.research.att.com/~bs/3rd.html.
- Kernighan, Brian; Ritchie, Dennis. El lenguaje de programación C, 2da edición.
Pearson, México, 1991.
Evaluación
- 15%. Quices. Ejercicios cortos que deberá el estudiante resolver en forma individual al iniciar la clase. No se repondrán por llegadas tardías.
- 20%. Tareas cortas. Ejercicios que deberá resolver el estudiante individualmente de forma extraclase.
- 25%. Proyectos. Dos proyectos de mediana complejidad. El profesor indicará si se pueden realizar en parejas o individualmente. El profesor también indicará si la ponderación será en proporción a su dificultad.
- 40%. Exámenes parciales. Tres exámenes de igual ponderación, cuyas fechas serán comunicadas oportunamente por el profesor.
Observaciones
- En toda asignación, sea en papel o digital, se evaluará la indentación, uso correcto de paréntesis (redondos, cuadrados y llaves), la eficiencia, la elección de identificadores significativos, y las buenas prácticas de programación.
- La nota
N
de una tarea o proyecto entregado d
días tarde se calculará como N = x - 10*d2
, donde x
es la nota que habría obtenido si se hubiere entregado a tiempo.
- Cualquier asignación donde se detecte plagio, su calificación será anulada por completo (no sólo el o los ejercicios donde se detecte el plagio).