[UCR]
[/\]

Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
[<=] [home] [<>] [\/] [=>

CI-1201 Programación II

I Semestre 2004 Profesor Adolfo Di Mare

REQUISITOS

CI-1101 Programación I Horas: 4
CI-1104 Estructuras Discretas I Créditos: 4

OBJETIVO GENERAL

      Proveer al estudiante la formación básica necesaria para su desempeño eficiente como programador de herramientas (PH) y como programador de aplicaciones (PA) de poca complejidad que requieran equipos de programación y el uso eficiente y efectivo de ambientes de programación orientados a objetos, cuyo uso apropiado implica la reutilización de software.

OBJETIVOS ESPECIFICOS

      Al finalizar el curso el estudiante será capaz de:

  1. Comprender la diferencia entre la especificación de una clase, de una función o de un procedimiento y su implantación. O lo que es lo mismo: comprender la diferencia entre abstracción e implementación.
  2. Especificar y documentar clases, funciones y procedimientos.
  3. Generar varias opciones de diseño dado un problema específico, valorarlas y escoger razonadamente una, con base en criterios tales como: simplicidad de las estructuras de datos, simplicidad de los algoritmos, ahorro evidente de memoria dinámica y de tiempo.
  4. Comprender y aprender a usar una biblioteca de clases contenedoras y sus correpondientes iteradores, en la producción de otros componentes reutilizables y programas de aplicación de poca complejidad.
  5. Diseñar e implantar clases contenedoras, en el contexto de una biblioteca de clases contenedoras preconstruida.
  6. Comprender, usar e implementar algún tipo de árbol balanceado.
  7. Comprender y aprender a usar una biblioteca de clases para la construcción de interfaces de programas de aplicación (sean estas gráficas o de texto).
  8. Comprender y aplicar los conceptos de la programación por eventos en el contexto del diseño e implantación de interfaces de programas de aplicación.
  9. Comprender y aplicar los siguientes conceptos: enlace dinámico, enlace estático, sobrecarga de operadores y de funciones, polimorfismo de objetos contenedores, herencia simple, composición de clases, clases abstractas y clases concretas.

CONTENIDOS

  1. Clases abstractas que usualmente son ancestros de clases contenedoras concretas, tales como: objeto, contenedor y colección.
  2. Clases contenedoras concretas y sus iteradores: listas simples, listas dobles, pilas, colas simples, colas de prioridad, arreglos, conjuntos, multi-conjuntos ("bag").
  3. Objetos contenedores compuestos por otros objetos contenedores (como por ejemplo multilistas, etc).
  4. Algún tipo de árbol de búsqueda balanceado: puede ser árboles AVL, o árboles 2-3, o árboles Btree en general, o árboles rojo-negro, etc.
  5. Clases de uso común para la implantación de interfaces de programas de aplicación.
  6. Programación por eventos: comunicación entre objetos en el contexto de la implementación de interfaces gráficas.
  7. Los siguientes conceptos: enlace dinámico, enlace estático, sobrecarga de operadores y de funciones, polimorfismo de objetos contenedores, herencia simple, composición de clases, clases abstractas y clases concretas, abstracción, encapsulamiento y ocultamiento de información.

 

CONTENIDOS ESPECIFICOS

      El curso integra la teoría y la práctica. La teoría es relativamente fácil de digerir, y está bien explicada en los libros de texto. La parte práctica es más difícil de dominar, pues requiere de una exposición en carne viva a problemas reales.

      Como complemento a las prácticas, durante el curso se hará especial incapié en aplicar el concepto de abstracción, según está definido en [LG-1986]. El curso consta de varios ingredientas altamente relacionados. Primero se exponen los conceptos de abstracción y especificación en el marco del lenguaje C++, y se discuten en el contexto de la programación por objetos. También se revisan algunas técnicas generales para depuración de programas. Durante todo el curso se estudian algunos tópicos básicos de estructuras de datos.

      Con el fin de introducir muchos de los algoritmos y estructuras de datos que serán usados en el curso siguiente (CI-1303 Estructuras de datos y análisis de algoritmos), en muchos casos las tareas cortas incluirán uso de listas, colas, pilas y árboles. Para esto en el curso se cubrirá el equivalente de los dos primeros capítulos de [AHU-1984]. Durante el curso el estudiante trabajará en diversos proyectos para que logre fluidez en conceptos como punteros, uso de archivos, manejo de pantallas y ventanas, y recursividad. El estudiante conocerá las herramientas básicas del programador profesional. Se espera del estudiante un buen dominio del C++. Se hará especial énfasis en lograr que el estudiante domine los conceptos de abstracción y especificación, y se hará un extenso uso de herramientas diversas de programación.

      Las tareas escritas consistirán en "premios", esto es, asignaciones cortas que cada estudiante debe cumplir. Es obligación del estudiante el realizar todas las lecturas asignadas, y también entregar un resumen de una página por cada una de las lecturas. En la medida de lo posible, el profesor asignará una lectura o tarea corta en cada lección.

      Los estudiantes deberán hacer al menos un programa grande (de más de 1500 líneas), y durante todo el semestre tendrán asignaciones cortas programadas. Después de tomar el curso, cada estudiante sabrá como hacer la documentación de un programa.

      Este curso requerirá de un gran esfuerzo de programación. Al terminar el curso, el estudiante será capaz de a producir programas de alta calidad.

EVALUACION

      El peso de la evaluación estará en los exámenes, aunque es indispensable que todos los estudiantes realicen los proyectos.
Tareas y proyectos 20%    (Prof. Di Mare)
Examen Parcial #1   25%    Jueves 22 de abril
Examen Parcial #2   25%    Jueves 3 de junio
Examen Final   30%    Miércoles 23 de junio
 


INDICE DE MATERIALES DEL CURSO

Exámenes
P1  -  P2  -  Final
Suficiencia
Tareas
#1  -  #2  -  #3  -  #4  -  #5
#6  -  #7  -  #8  -  #9
Tareas
# 1: Calculadora de números racionales
# 2: Clase vector implementada con base en la clase lista
# 3: El SelectionSort() para la lista
# 4: "ADH_lst2::move_before()" && "ADH_lst2::swap_value()"
# 5: El vector asociativo implementado con base en la clase lista
# 6: El vector asociativo implementado con base en la clase árbol
# 7: Iterador OrdVc
# 8: Herencia y polimorfismo
# 9: Contador de referencias para la clase Astring

 

LIBRO DE TEXTO

      La teoría del curso se tomará del libro de Liskov & Guttag. Como lenguaje de programación se usa C++, por lo que conviene que el estudiante adquiera un buen libro de texto para el lenguaje, como por ejemplo el de Deitel & Deitel, que está escrito en lengua inglesa, aunque la versión en español también se puede usar, pese a que no toma en cuenta todos los cambios y detalles que forman parte del C++ estándar. Es conveniente que cada estudiante tenga acceso al libro de Bjarne Stroustrup sobre C++, que es el lenguaje que se usar  como marco de referencia en todo el curso. Este libro tiene un costo de unos $ 45, y se puede conseguir en Internet. Algunos estudiantes encontrarán necesario consultar el libro de Musser & Saini sobre la biblioteca STL de C++, aunque puede ser que el libro Nelson sea más asequible. Cada estudiante es responsable de conseguir sus libros. Además, en el sitio Internet del curso habrá material adicional (como los FAQ's).


C++: FAQ's e Hiperenlaces

 

BIBLIOGRAFIA

Albahari, Ben
"A Comparative Overview of C#" (A comparison of C# to C++ and Java), 2000.
      http://www.genamics.com/visualj++/csharp_comparative.htm
Albahari, Ben & Drayton, Peter & Merril, Brad
"C# Essentials, 2nd Edition", O'Reilly, ISBN 0-596-00315-3, 2002.
Aho, Alfred V.; Hopcroft, John E.; Ullman, Jefrrey D.
"Data Structures and Algorithms"; Addisson Wesley Publishing Co.; 1984.
Ceballos, Francisco J.
"Programación Orientada a objetos con C++", Addison-wesley Iberoamericana,: 1993.
Daconta, Michael C.
"C++ pointers and dynamic memory management", John Wiley & Sons, EEUU, 1995.
Deitel, H.M.; Deitel, P.J.
"Cómo programar en C/C++, segunda edición", Prentice-Hall, 1994.
      ftp://ftp.prenhall.com/pub/deitel/C++_HTP/C++HTP2e/c++htp2e_examples.zip
Deitel, H.M.; Deitel, P.J.
"C++ How to Program, Second Edition", ISBN-0-13-528910-6, Prentice-Hall, 1997.
      ftp://ftp.prenhall.com/pub/deitel/C++_HTP/C++HTP2e/c++htp2e_examples.zip
Deitel, H.M.; Deitel, P.J.
"C++ How to Program, Third Edition", ISBN-0-13-089571-7, Prentice-Hall, 2001.
      http://www.deitel.com/
      http://deitelandassociates.com/oldsite/books/2001/cpphtp3/cpphtp3_examples.zip
Deitel, H.M.; Deitel, P.J.
"C++ How to Program, Fourth Edition", ISBN-0-13-038474-7, Prentice-Hall, 2002.
      http://www.deitel.com/
      http://www.deitel.com/books/cppHTP4/cppHTP4_examples.zip
Deitel, H.M.; Deitel, P.J.; Nieto, T.R.; Strassberger, E.T.
"Getting Started with Microsoft Visual C++ 6 with an Introduction to MFC", ISBN-0-13-016147-0, Prentice-Hall, 2001.
      http://deitelandassociates.com/oldsite/books/gsvcpp_mfc/MFC_examples.zip
Di Mare, Adolfo
"Convenciones de Programación para Pascal"; Reporte técnico ECCI-01-88; ECCI-UCR; 1988.
      http://www.di-mare.com/adolfo/p/convpas.htm
Di Mare, Adolfo
"Abstracción de Datos en Pascal" Reporte técnico PIBDC-01-89; ECCI-UCR; 1989.
Di Mare, Adolfo
"Reutilización de Contenedores Parametrizables con Lenguajes de Semántica Limitada", Tesis de Doctorado, Universidad Autónoma de Centro América, 1999.
      http://www.di-mare.com/adolfo/binder/index.htm
Heileman, Gregory
"Estructuras de Datos, Algoritmos y Programación Orientada a Objetos" Mc-Graw Hill, 1998.
Kernighan, Brian
"El lenguaje de programación C"; Prentice Hall; 1986.
Liskov, Barbara & Guttag, John
"Abstraction and Specification in Program Development"; McGraw-Hill; 1986.
Musser, David R.
"The C++ Standard Template Library" (Internet reference index), 1998.
      http://www.cs.rpi.edu/~musser/stl-book/
Osborne, John:
"Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg", 2000.
      http://windows.oreilly.com/news/hejlsberg_0800.html
Musser, David R. & Saini, Atul
"STL Tutorial and Reference Guide C++ Programming with the Standard Template Library", ISBN 0-201-63398-1, Addison-Wesley Professional Computing Series, 1996.
      http://www.awl.com/cseng/titles/0-201-63398-1
Myers, Glenford
"The Art of Software Testing"; John Wiley & Sons; 1978.
Nelson, Mark
"C++ Programmer's Guide to the Standard Template Library", IDG Books Worldwide, ISBN 1-56884-314-3, 1995.
Stepanov, Alexander & Lee, Meng
"The C++ Standard Template Library", Generic Programming Project, Hewlett Packard Research Labs, 1995.
      ftp://butler.hpl.hp.com/stl/stl.zip
Sedgewick, R.
"Algoritmos en C++", Addison-Wesley, 1995.
Stauggard, Andrew Jr.
"Técnicas estructuradas y orientadas a objetos", Prentice-Hall, 1998.
Stroustrup, Bjarne
"The C++ Programming Language"; 3rd edition; Addison-Wesley; 1998.
      http://www.research.att.com/~bs/3rd.html
Weis, Mark.
"Algorithms, Data Structures and Problem Solving with C++", Addison-Wesley Pub. Comp. CA, 1995.

 

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2004
Derechos de autor reservados © 2004
[home] <> [/\]