|
|
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.
|
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 entregar un reporte
escrito de una página con 4 secciones claramente
delimitadas y que contenga los siguiente:
- Número del capítulo o sección del
libro de texto en el que se discute
el tema.
- Número del capítulo o sección del
libro de Stroustrup en el que se discute el tema.
- Número y página de los ejercicios del
libro de texto relevantes al tema
discutido en clase.
- 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.
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:
Compilación de
HerenciaOrdenada.cpp
-
# 2:
Cinco formas diferentes de explicar la recursividad
-
# 3:
HerenciaOrdenada.cpp
-
# 4:
HerenciaOrdenada.cpp
con los números racionales
-
# 5:
Calculadora de polinomios
-
# 6:
Una clase para usar números primos
-
# 7:
Una mejor clase para usar números primos
-
# 8:
Arquitectura de Tres Capas
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.
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
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.
- 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.
- 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.
Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2006
Derechos de autor reservados © 2006