|
|
Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
|
CI-1201 Programación II
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:
-
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.
-
Especificar y documentar clases, funciones y procedimientos.
-
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.
-
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.
-
Diseñar e implantar clases contenedoras, en el contexto de
una biblioteca de clases contenedoras preconstruida.
-
Comprender, usar e implementar algún tipo de árbol
balanceado.
-
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).
-
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.
-
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
- Clases abstractas que usualmente son ancestros de clases
contenedoras concretas, tales como: objeto, contenedor y
colección.
- Clases contenedoras concretas y sus iteradores: listas
simples, listas dobles, pilas, colas simples, colas de prioridad,
arreglos, conjuntos, multi-conjuntos ("bag").
- Objetos contenedores compuestos por otros objetos contenedores
(como por ejemplo multilistas, etc).
- 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.
- Clases de uso común para la implantación de
interfaces de programas de aplicación.
- Programación por eventos: comunicación entre
objetos en el contexto de la implementación de interfaces
gráficas.
- 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.
INDICE DE MATERIALES DEL CURSO
- Tareas
-
# 1:
La Clase Lista
-
# 2:
La Clase Lista con Plantillas
-
# 3:
Simulación de la Rotonda de Guadalupe
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
- 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, 2000.
http://www.deitel.com/
http://deitelandassociates.com/oldsite/books/2000/cpphtp3/cpphtp3_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, 2000.
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/
- 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.
Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2000
Derechos de autor reservados © 2000