[UCR]
[/\]

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

CI-1201 Programación II

II Semestre 2008 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. Antes de que termine el lunes de cada semana el estudiante debe instalar en una única página Internet al menos 8 filminas en las que resuma el material cubierto en la semana anterior. También debe enviarle al profesor la dirección Internet en donde dejó sus fichas de estudio, las que le servirán luego al estudiante y a todos sus compañeros para repasar la materia cubierta. Siempre debe usar formato HTML para las filiminas.
      Las filminas son responsabilidad individual de cada estudiante. Si al revisarlas se detectan copias, perderá los puntos tanto el alumno que copió como el que se dejó copiar.

      Al finalizar cada lección el estudiante debe revisar el libro de texto y también el libro de Bjarne Stroustrup para determinar los capítulos y secciones en donde se discute cada uno de los temas cubiertos en la lección. Como resultado de esta investigación cada estudiante debe incluir en sus filminas un reporte con 5 secciones claramente delimitadas y que contenga los siguiente:

  1. Al menos 8 Filminas de estudio.
  2. Número del capítulo o sección del libro de texto en el que se discute el tema.
  3. Número del capítulo o sección del libro de Stroustrup en el que se discute el tema.
  4. Número y página de los ejercicios del libro de texto relevantes al tema discutido en clase.
  5. Copia de un párrafo pequeño, de 2 o 3 renglones, tomado de alguno de estos libros.

      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.

INDICE DE MATERIALES DEL CURSO

Exámenes
P1 (r)  -  P2  -  Final (r)
Suficiencia
Tareas
#1  -  #2  -  #3  -  #4
#5  -  #6  -  #7
Tareas
# 1: Indentación y documentación de la clase Acumulador
# 2: Clase emplantillada de monedas
# 3: Versión mejorada de la Matriz Rala
# 4: La Matriz Rala implementada usando un Diccionario
# 5: Sincronizador de archivos
# 6: Sincronizador de archivos y directorios
# 7: Super-Mega-Giga Matriz SQLite

EVALUACION

      El peso de la evaluación estará en los exámenes, aunque es indispensable que todos los estudiantes realicen los proyectos.
Tareas, proyectos, quices   20%    (Prof. Di Mare)
Examen Parcial #1   20%    Miércoles 24 de setiembre (1pm)
Examen Parcial #2   25%    Viernes 7 de noviembre (1pm)
Examen Final   35%    Miércoles 26 de noviembre (1pm)

Examen Parcial #1   17%    Martes 16 de setiembre    (Prof. Gang)
Examen Parcial #2   17%    Viernes 24 de octubre    [Carta al Estudiante]
Examen Final   23%    Viernes 28 de noviembre    [Cronograma de Trabajo]
Tareas programadas 19%
Quices y tareas cortas   11%
Trabajo en clase 11%
 


 

LIBRO DE TEXTO

      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. Gran parte de la teoría del curso se está descrita en el libro de Liskov & Guttag. En los proyectos programados es necesario que los alumnos apliquen convenciones de programación, como las de Adolfo Di Mare o las de Sun Microsystems, Inc. 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

 

LECTURAS RECOMENDADAS

Di Mare, Adolfo
"Abstracción de Datos en Pascal" Reporte técnico PIBDC-01-89; ECCI-UCR; 1989.
      http://www.di-mare.com/adolfo/p/adts-91.doc
Di Mare, Adolfo
"¡No se le meta al Rep!" Reporte Técnico ECCI-2007-01,2007.
      http://www.di-mare.com/adolfo/p/Rep.htm
Di Mare, Adolfo
"Uso de Doxygen para especificar módulos y programas" Reporte Técnico ECCI-2007-02, 2007.
      http://www.di-mare.com/adolfo/p/Doxygen.htm
Stroustrup, Bjarne
"The C++ Programming Language"; 3rd edition; Addison-Wesley; 1998.
      http://www.research.att.com/~bs/3rd.html

 

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.
      http://www.di-mare.com/adolfo/p/adts-91.doc
Di Mare, Adolfo
"¡No se le meta al Rep!" Reporte Técnico ECCI-2007-01,2007.
      http://www.di-mare.com/adolfo/p/Rep.htm
Di Mare, Adolfo
"Uso de Doxygen para especificar módulos y programas" Reporte Técnico ECCI-2007-02, 2007.
      http://www.di-mare.com/adolfo/p/Doxygen.htm
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.
Hommel, Scott et al
"Code Conventions for the Java Programming Laguage", Sun Microsystems, Inc., Abril 20, 1999.
      http://java.sun.com/docs/codeconv/CodeConventions.pdf
Hunt, Lance
"C# Coding Standards for .NET", August 2004.
      http://home.comcast.net/~lancehunt/CSharp_Coding_Standards.pdf
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.
Sharon, Yonat
"Smart Pointers - What, Why, Which?"
      http://ootips.org/yonat/4dev/smart-pointers.html
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
Sun Microsystems, Inc
"Java Code Conventions", September 12, 1997.
      http://java.sun.com/docs/codeconv/CodeConventions.pdf
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 © 2008
Derechos de autor reservados © 2008
[home] <> [/\]