Atributos
Sigla: 
CI-0113
Créditos: 
4
Horas: 
5
Requisitos: 
Clasificación: 
Curso propio
Énfasis y ciclo: 
Tronco común 1.II
Descripción: 

En este curso el estudiante extiende su conocimiento en la programación de computadoras aprendiendo técnicas de abstracción que le ayuden a construir software de mayor complejidad y calidad. Las técnicas de abstracción son dependientes del lenguaje de programación, por ejemplo, las plantillas y el polimorfismo. El curso se concentra en técnicas de abstracción para construir software reutilizable y genérico. Se entiende por software reutilizable aquel que puede ser usado en diversos contextos, por ejemplo, las funciones de biblioteca. Se entiende por software genérico al software reutilizable que además puede utilizarse con tipos de datos arbitrarios, por ejemplo, un contenedor. En el curso el estudiante aprende tanto a reutilizar software como a crear software reutilizable y genérico.

Objetivo general: 

El objetivo general del curso es que el estudiante aprenda a resolver problemas de programación aplicando técnicas de abstracción para la creación y uso de software genérico y reutilizable. 

Objetivos específicos: 

Durante este curso el estudiante desarrollará habilidades para:

  1. Explicar el modelo de ejecución del lenguaje de programación (máquina nocional) para implementar programas de forma correcta.
  2. Aplicar diversas técnicas de abstracción para crear software genérico y reutilizable.
  3. Utilizar software genérico para resolver problemas de forma eficiente.
  4. Generar y aplicar pruebas unitarias a software genérico.
  5.  Aplicar buenas prácticas de programación (por ejemplo, documentación de código, programación defensiva y manejo de excepciones).
Contenidos: 
Objetivo específico Eje temático Desglose
1 Generalidades a. Descripción del uso de la memoria estática, memoria automática y la memoria dinámica en el lenguaje de programación a usar en el curso.
b. Descripción y comparación de los tipos de memoria disponibles en el lenguaje de programación del curso.
c. Descripción de la estructura de proyecto en los ambientes de programación a usar en el curso.
d. Descripción del depurador disponible en al menos uno de los ambientes de programación a usar en el curso.
e. Descripción de los distintos mecanismos disponibles en el lenguaje de programación a usar en el curso para pasar a los métodos de una clase datos de tipos preconstruidos y objetos.
f. Definición de métodos de instancia y métodos de clase en el lenguaje de programación a usar en el curso.
2 Especificación a. Pautas para la especificación de clases concretas, clases abstractas y clases parametrizadas.
2 Herencia y polimorfismo a. Definición de clases abstractas.
b. Definición de clases que derivan de otras, ya sean abstractas o concretas.
c. Definición de tipos polimórficos.
d. Definición de métodos (y operadores, si el lenguaje lo permite) polimórficos.
3 Parametrización a. Mecanismos de abstracción provistos por el lenguaje de programación para crear código genérico.
b. Descripción general de una biblioteca de clases parametrizadas de uso estandarizado en el lenguaje de programación a usar en el curso.
c. 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.
2,3 Estructuras de datos y algoritmos a. Implementación de al menos una estructura de datos compleja, mediante asignación dinámica de memoria, y sus algoritmos.
5 Manejo de excepciones a. Definición de clases de excepciones.
b. Descripción del levantamiento de excepciones.
c. Descripción de la captura y tratamiento de excepciones.
2,3 Manejo de archivos planos a. Lectura y escritura de archivos de texto y binarios.
b. Manejo de archivos secuenciales y de acceso aleatorio.
4 Pruebas de programas a. Pruebas de constructores y destructores.
b. Pruebas de métodos modificadores.
c. Pruebas de métodos observadores.
d. Ordenamiento de los tipos de pruebas en un controlador de pruebas.
2 Bibliotecas a. Creación y utilización de bibliotecas estáticas (ej: .lib, .a) y dinámicas (ej: .dll, .so) como medios de distribución de código reutilizable.
  Temas opcionales (a convenir entre el profesor y los estudiantes) a. Programación de interfaces gráficas de usuario (GUI).
b. Programación de videojuegos.
c. Programación orientada a eventos.
d. Programación de bases de datos (ej: SQLite).
e. Programación procedimental (ej: C)
f. Sobrecarga de operadores (ej: clase Fracción, String)
g. Control de versiones (ej: Git, Subversion)
h. Herramientas de generación de código (ej: compilador, linker, makefiles)
i. Programación de expresiones regulares para procesamiento de texto
Bibliografía: 

Libro de texto recomendado:

  1. Stroustrup, Bjarne; "The C++ Programming Language"; 3rd edition; Addison-Wesley; 1998. http://www.research.att.com/~bs/3rd.html
  2. Deitel, Harvey M.; Deitel, Paul J.; "C++ How to Program, 9/e"; Prentice-Hall; 2015.

 
Otra bibliografía de apoyo:

  1. Osherove, Roy. “The art of Unit Testing”; 2nda edición; Manning Pub; 2014.
  2. Myers, Glenford J.; "The art of software testing 2nd ed"; Revised and updated by Tom Badgett and Todd Thomas, with Corey Sandler; ISBN-0-471-46912-2; John Wiley & Sons, Inc.; 2004.
     
LIberación de responsabilidad: 

Este no es un documento oficial. Documentos oficiales se entregan en la secretaría de la escuela.