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:

  1. 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.
  2. Elaborar especificaciones de clases completas, correctas, precisas y sin ambigüedades, utilizando una herramienta automatizada para generación de documentación.
  3. Construir clases abstractas y clases que las derivan usando herencia y polimorfismo.
  4. Usar clases parametrizadas pertenecientes a una biblioteca de uso difundido o estandarizado.
  5. Construir programas basados en los algoritmos de inserción, eliminación y búsqueda sobre árboles binarios de búsqueda.
  6. Usar excepciones al construir clases y programas para mejorar su robustez incorporando validación de entrada de datos y manejo de errores.
  7. Aplicar casos de prueba para depurar clases concretas y abstractas.
  8. Aprovechar las fortalezas de varios paradigmas de programación a distintos problemas.

Contenidos

  1. Generalidades

    1. 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.
    2. Comparación de los tipos de memoria disponibles en el lenguaje de programación del curso.
    3. Descripción de la estructura de proyecto en los ambientes de programación que se usarán en el curso.
    4. Descripción del depurador disponible en al menos uno de los ambientes de programación que se usará en el curso.
    5. 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.
    6. Definición de métodos de instancia y métodos de clase en el lenguaje de programación que se usará en el curso.
  2. Especificación

    1. Pautas para la especificación de clases concretas y clases abstractas.
    2. Discusión de las pautas para la especificación de clases parametrizadas.
  3. Herencia y polimorfismo

    1. Definición de clases abstractas.
    2. Definición de clases que derivan de otras, ya sea abstractas o concretas.
    3. Definición de tipos polimórficos.
    4. Definición de métodos (y operadores, si el lenguaje lo permite) polimórficos.
  4. Parametrización de clases

    1. 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.
    2. 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.
  5. Árboles

    1. Algoritmos de inserción, búsqueda, eliminación y el recorrido en orden para árboles binarios ordenados no balanceados.
  6. Validación de entrada de datos y manejo de excepciones

    1. Definción de clases de excepciones.
    2. Descripción del levantamiento de excepciones.
    3. Descripción de la captura y tratamiento de excepciones.
  7. Manejo de archivos planos

    1. Por medio de flujos de datos.
    2. Por medio de acceso aleatorio.
  8. Pruebas de programas

    1. Pruebas de constructores y destructores.
    2. Pruebas de métodos modificadores.
    3. Pruebas de métodos observadores.
    4. 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

  1. Deitel, H.M.; Deitel, P.J. C++ How to Program, 8th edition.
    Prentice-Hall, 2012. http://www.deitel.com/.
  2. Stroustrup, Bjarne. The C++ Programming Language, 3rd edition.
    Addison-Wesley; 1998. http://www.research.att.com/~bs/3rd.html.
  3. Kernighan, Brian; Ritchie, Dennis. El lenguaje de programación C, 2da edición.
    Pearson, México, 1991.

Evaluación

Observaciones

  1. 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.
  2. 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.
  3. 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).