[UCR]
[/\]

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

CI-1402 Organización de Lenguajes de Programación

I Semestre 1999 Profesor Adolfo Di Mare

REQUISITOS

CI-1306 Horas: 4
CI-1302 Créditos: 4

OBJETIVO

      El objetivo del curso es estudiar los lenguajes de programación con el fin de:

OBJETIVOS ESPECIFICOS

      Al finalizar el curso el estudiante será capaz de:

CONTENIDOS

  1. Conceptos formales
  2. Ciclos
  3. Secuenciación
  4. Módulos
  5. Abstracción de procedimientos
  6. Registros de activación
  7. Recursividad
  8. Tipos y objetos
  9. Encapsulamiento de datos
  10. Ocultamiento de datos
  11. Constructores y destructores
  12. Sobrecarga de identificadores
  13. Sobrecarga de operadores
  14. Entrada y salida de datos
  15. Manipulación de hileras
  16. Excepciones
  1. Herencia
  2. Polimorfismo
  3. Parametrización
  4. Procesos
  5. Concurrencia
  6. Programación funcional
  7. Programación lógica
  8. Programación para bases de datos
  9. Interpretadores y compiladores
  10. Eficiencia y recolectores de basura
  11. Ambientes de programación
  12. Control de versiones
  13. Compilación separada
  14. Bibliotecas de programación
  15. Reutilización

METODOLOGIA

      En el curso se discute sobre las cualidades principales disponibles en los lenguajes de programación modernos. Por eso, y también para evitar discusiones puramente teóricas, los estudiantes programarán sus proyectos en los lenguajes C++, Perl, Ada y Java. Se hará énfasis en las cualidades de la biblioteca de plantillas STL, para C++. Como referencia se se usarán los lenguajes Pascal, Lisp, Prolog y Smalltalk.

      Para un curso posterior, el de construcción de compiladores por ejemplo, se deja el estudio histórico de la evolución de los lenguajes, el detalle de los conceptos teóricos que se requieren para especificar lenguajes, o los trucos que han sido desarrollados para implementar compiladores e interpretadores.

      Para complementar las clases magistrales, a lo largo del curso los estudiantes deberán desarrollar dos proyectos. El Primer proyecto consiste en implementar un programa que tenga que manipular código fuente para darle al estudiante la oportunidad de manipular archivos de manera que aprecie, por lo menos superficialmente, cuál es el tipo de trabajo que realiza un compilador. Importa trabajar más en el nivel de la manipulación simbólica que en la computación numérica o de sistemas de información, que es la usual en otros cursos de la carrera. Para este proyecto los estudiantes se organizarán en grupos. El Segundo proyecto consistirá en escribir un artículo de alrededor de 5,000 palabras, en parejas, sobre un tema relevante al curso. Los dos proyectos deben entregarse una semana antes de que termine el curso.

      Todos los trabajos deben entregarse en formato HTML, para se instalados en el sitio Internet del curso:
      http://www.ecci.ucr.ac.cr/~ci1402

FOTOS DEL GRUPO

LIBRO DE TEXTO

      La mayor parte de las lecturas obligatorias del curso son artículos de revista, aunque es conveniente que cada estudiante tenga acceso al libro de Bjarne Stroustrup sobre C++ [Str­98], que es el lenguaje que se usar  como marco de referencia en todo el curso. Este libro tiene un costo de unos $ 40, y puede conseguirse en Internet en Amazon.com o en Barnes && Noble. Además, hay otros lugares más baratos en donde adquirir libros, como Book Pool [http://www.bookpool.com]. (Un índice muy completo de bibliotecas electrónicas está en Book Wire). Cada estudiante es responsable de conseguir sus libros. Además, en el sitio Internet del curso habrá material adicional.

[Str­98] Stroustrup, Bjarne: The C++ Programming Language, 3rd edition, ISBN 0­201­88954­4; Addison-Wesley, 1998.
      http://www.research.att.com/~bs/papers.html


INDICE DE MATERIALES DEL CURSO

Exámenes
P#1  -  P#2
Final
Tareas
#1  -  #2
Artículos
#1  -  #2  -  #3  -  #4  -  #5  -  #6  -  #7
#8  -  #9  -  #10  -  #11  -  #12  -  #13
01.zip  -  02.zip  -  03.zip  -  04.zip  -  05.zip  -  06.zip  -  07.zip
08.zip  -  09.zip  -  10.zip  -  11.zip  -  12.zip  -  13.zip
Otros
Proyecto
Tareas
# 1: Cálculo de las notas de clase
# 2: Lisp y Prolog
Proyectos
# 1: Indentador de programas


C++: FAQ's y Links

EVALUACION

      El peso de la evaluación estará en los exámenes, aunque es indispensable que todos los estudiantes realicen los proyectos.
Examen Parcial #1   20%      Proyecto #1   10%
Examen Parcial #2   20%      Artículo 10%
Examen Final   30%      Otros: 10%

LECTURAS OBLIGATORIAS

[GR­98] Gothard, William & Rodner, Les: Strategies for Solving the Y2K Problem, Dr. Dobb's Journal, No.285, pp [26, 28, 30, 32, 109], Mayo 1998.
[MF­98] Moore, Robert L. & Foley, D. Gregory: Date Compression and Year 2000 Challenges, Dr. Dobb's Journal, No.285, pp [20­22, 24, 109], Mayo 1998.
[Rie­98] Riedel, Jost: Y2K Challenges, Dr. Dobb's Journal, No.285, pp [10­11], Mayo 1998.
[Swa­98] Swaine, Michael: A Chat with Bob Bemer, Dr. Dobb's Journal, No.285, pp [115­117], Mayo 1998.
 
[Bec­98] Becker, Pete: C++ Standard Approved, C/C++ User's Journal, Vol.16, No.2, pp [89­93], Febrero 1998.
[Bou­91] Boundy, David: A taxonomy of programmers, ACM SigSoft, Vol.16 No.4, pp [23­30], Octubre 1991.
[Pla­97] Plauger, P. J.: Embedded C++, C/C++ Users Journal, Vol.15 No.2, pp [35­39], Febrero 1997.
[Ret­91] Rettig, Marc: Nobody Reads Documentation, Communications of the ACM, Vol.34 No.7, pp [19­24], Julio 1991.
[Wil­91] Wilkes, Maurice V.: Software and the Programmer, Communications of the ACM, Vol.34 No.5, pp [23­24], Mayo 1991.
 
[DiM­99a] Di Mare, Adolfo: C Iterators, Técnico ECCI-98-01, Escuela de Ciencias de la Computación e Informática, Universidad de Costa Rica, Abril, 1999.
      http://www.di-mare.com/adolfo/p/c-iter.htm
[Mus­98] Musser, David R.: The C++ Standard Template Library (Internet reference index), 1998.
      http://www.cs.rpi.edu/~musser/stl-book/
[Zig­95] Zigmond, Dan: Generic Programming and the C++ STL, Dr. Dobbs's Journal, No.233, pp [18­20, 22, 24, 96, 98­100], Agosto 1995.
[Zig­96a] Zigmond, Dan: STL Iterators, Dr. Dobbs's Journal, No.248, pp [24, 26­28, 30, 31, 84], Junio 1996.
[Zig­96b] Zigmond, Dan: STL Algorithms, Dr. Dobbs's Journal, No.250, pp [32, 34­36, 92­94], Agosto 1996.
[STL­95] 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.
 
[All­97a] Allison, Chuck: Error Handling with C++ Exceptions, Part 1, C/C++ User's Journal, Vol.15, No.11, pp [73­80], Noviembre 1997.
[All­97b] Allison, Chuck: Error Handling with C++ Exceptions Part 2, C/C++ User's Journal, Vol.15, No.12, pp [57­61, 63, 65­67], Diciembre 1997.
[DiM­94j] Di Mare, Adolfo: Manejo de excepciones en Turbo Pascal, Reporte Técnico ECCI­94­10 (Revisión 4), Proyecto 326­89­019, Escuela de Ciencias de la Computación e Informática (ECCI), Universidad de Costa Rica (UCR), 1994.
      http://www.di-mare.com/adolfo/p/except.htm
 
[Bet­95] Betz, Mark: Networking Objects with CORBA, Dr. Dobb's Journal, No.236, pp [18­20,22,25,26], Noviembre 1995.
[Bey­98] Beyer, Malcom: Encapsulating the ODBC API, C/C++ User's Journal, Vol.16, No.7, pp [19, 20, 24, 26, 28, 30, 32, 34, 35], Julio 1998.
[BDG­93] Biliris, A. & Dar, S. & Gehani, N.H.: Making C++ Objects Persistent: the Hidden Pointers, Software Practice and Experience, Vol.23(12), pp [1285­1303], Diciembre 1993.
[Cha­96] David, Channon: Persistence for C++, Dr. Dobb's Journal, No.252, pp [46, 48­50, 52, 95, 96], Octubre 1996.
[Rag­95] Ragen, Alex: C Database Programming with ODBC, C/C++ User's Journal, Vol.13, No.11, pp [73­78], Noviembre 1995.
[RL­98] Resendes, Robert & Laukien, Marc: Introduction to CORBA Distributed Objects, C/C++ User's Journal, Vol.16, No.4, pp [55­58, 60­66], Abril 1998.
 
[Cel­97] Celko, Joe: Underwhelmed by New Technology, DBMS September 1997, SQL for Smarties (Volume 10, #10, pp 18).
      http://www.bmsmag.com/9709d06.html
[Lin­97a] Linthicum, David S.: Fun with Partitioning, DBMS September 1997, Application Architect (Volume 10, #10, pp 24).
      http://www.dbmsmg.com/9709d07.html
[Lin­97b] Linthicum, David S.: Next-Generation Middleware, DBMS September 1997, (Volume 10, #10, Pg 69).
      http://www.dbmsmag.com/9709d14.html
[Spi­97] Spitzer, Tom: Component Architectures, DBMS September 1997, (Volume 1, #10, pp 56).
      http://www.dbmsmag.com/9709d13.html
 
[Set­92] Sethi, Ravi: Activación de Procedimientos, Capítulo 4 del libro Lenguajes de Programación: conceptos y constructores, pp [121­172], Addisson-Wesley Iberoamericana, ISBN 0­201­51858­9, 1992.
 
[CW­85] Cardelli, Luca & Wegner, Peter: On Understanding Types, Data Abstraction, and Polymorphism, ACM Computing Surveys, Vol.17 No.4, pp [471­522], Diciembre 1985.
[MDC­91] Morrison, P. & Dearle, A. & Connor, R. C. H. & Brown, A. L.: An Ad Hoc Approach to the Implementation of Polymorphism, ACM Transactions on Programming Languages and Systems, Vol.13 No.3, pp [342­371], Julio 1991.
[Mey­86] Meyer, Bertrand: Genericity vs Inheritance, OOPSLA'86 Conference Proceedings, pp [391­405], Portland, Oregon, 1986.
 
[Set­92] Sethi, Ravi: Programación Funcional, Capítulo 7 del libro Lenguajes de Programación: conceptos y constructores, pp [259­303], Addisson-Wesley Iberoamericana, ISBN 0­201­51858­9, 1992.
[PZ­98] Pratt, Terrence W. & Zelkowitz, Marvin V.: Lenguajes Funcionales, Capítulo 13 del libro Lenguajes de Programación: Diseño e implementación, 3era edición, pp [581­619], Prentice-Hall Hispanoamericana, ISBN 0­13­678012­1, 1998.
[Set­92] Sethi, Ravi: Programación Lógica, Capítulo 8 del libro Lenguajes de Programación: conceptos y constructores, pp [353­389], Addisson-Wesley Iberoamericana, ISBN 0­201­51858­9, 1992.
[PZ­98] Pratt, Terrence W. & Zelkowitz, Marvin V.: Lenguajes de Programación Lógica, Capítulo 14 del libro Lenguajes de Programación: Diseño e implementación, 3era edición, pp [620­631], Prentice-Hall Hispanoamericana, ISBN 0­13­678012­1, 1998.
 
[DiM­88a] Di Mare, Adolfo: Convenciones de Programación para Pascal, Reporte Técnico ECCI­01­88, Proyecto 326­86­053, Escuela de Ciencias de la Computación e Informática (ECCI), Universidad de Costa Rica (UCR), 1988.
      http://www.di-mare.com/adolfo/p/convpas.htm
[DiM­96b] Di Mare, Adolfo: Tres formas diferentes de explicar la recursividad; Revista Ingeniería, Facultad de Ingeniería, Universidad de Costa Rica, Volumen 6, Número 2, pp [31­44], 1996.
      http://www.di-mare.com/adolfo/p/recursol-ea-1.htm
[DiM­96d] Di Mare, Adolfo: Tipografía de artículos en Internet, Revista Ingeniería, Facultad de Ingeniería, Universidad de Costa Rica, Volumen 6, Número 2, pp [55­70], 1996.
      http://www.di-mare.com/adolfo/p/typeset0.htm.
[Din­92] Dinesh, T B: Extending Compound Assignments for C++, OOPS Messenger, Vol.3 No.1, pp [45­49], Enero 1992.
[Gon­91] González, Dean W.: "=" Considered Harmfull, Ada Letters, Vol.XI No.2, pp [56­59], Marzo/Abril 1991.
[HU­79] Hopcroft, John E. & Ullman, Jefrrey D.: Introduction to Automata Theory, Languages and Computation, Addisson-Wesley Publishing Co., ISBN 0-201-02988-X, pp [1­37, 46­54, 77­94], 1979.
[Kim­97] Kimball, Ralph: A Dimensional modeling (DM) Manifesto, DBMS Magazine, pp [58­60, 69, 70], Agosto 1997.
      http://www.dbmsmag.com/9708d15.html
[LG­86] Liskov, Barbara & Guttag, John: Abstraction and Specification in Program Development, McGraw-Hill, 1986.
[ML­85] Marcotty, Michael & Ledgard, Henry F.: Programming Language Landscape Syntax, Semantics, and Implementation (second edition), Science Research Associates, INC., ISBN 0-574-21945-5, 1985.
[PZ­98] Pratt, Terrence W. & Zelkowitz, Marvin V.: Lenguajes de Programación: Diseño e implementación, 3era edición, Prentice-Hall Hispanoamericana, ISBN 0­13­678012­1, 1998.
[Sch­93] Schwartz, Randall L.: Learning Perl, O'Reilly & Associates, Inc. ISBN 1-56952-042-2, http://www.perl.com, 1994.
[Str­88a] Stroustrup, Bjarne: What is Object-Oriented Programming, IEEE Software, pp [10­20], Mayo 1988.
      http://www.research.att.com/~bs/papers.html
[Str­98] Stroustrup, Bjarne: The C++ Programming Language, 3rd edition, ISBN 0­201­88954­4; Addison-Wesley, 1998.
      http://www.research.att.com/~bs/papers.html
[Str­99] Stroustrup, Bjarne: Bjarne Stroustrup's FAQ, 1999. Disponible en Internet en:
      http://www.research.att.com/~bs/bs_faq.html
[Van­95] van Hoff, Arthur: Java and Internet Programming, Dr. Dobb's Journal, No.244, pp [56, 58, 60, 61, 101, 102], Agosto 1995.


C++: FAQ's y Links

OBRAS DE CONSULTA

[ADA­86] Ada Joint Program Office: The Rationale for the Design of the Ada Programming Language (1986), 1986.
      http://sw-eng.falls-church.va.us/AdaIC/standards/
[ADA­95] Ada 9X Project Office, The Rationale for the Design of the Ada Programming Language and Standard Libraries, 1995.
      ftp://ajpo.sei.cmu.edu/public/ada9x/mrtcomments/rm9x/v5.95
[BI­88] Borland International: Turbo Pascal version 5.5 Object Oriented Programming Guide, Borland International, California (U.S.A.), 1988.
[CM­83] Clocksin & Mellish: The Prolog Language, Springer-Verlag, 1983.
     http://www.cis.ohio-state.edu
          hypertext/faq/usenet/prolog/faq/faq.html

[ED­98] Edwards, Jeri & DeVoe, Deborah: 3-tier Client/Server at Work, ISBN 0­471­18443­8, John Wiley & Sons, INC., 1988.
[Mac­86] MacLennan, Bruce J.: Principles of Programming Languages: Design, Evaluation, and Implementation second edition, CBS College Publishing, ISBN 0-03-005163-0, 1986.
[PZ­98] Pratt, Terrence W. & Zelkowitz, Marvin V.: Lenguajes de Programación: Diseño e implementación, 3era edición, Prentice-Hall Hispanoamericana, ISBN 0­13­678012­1, 1998.
[Set­92] Sethi, Ravi: Lenguajes de Programación: conceptos y constructores, Addisson-Wesley Iberoamericana, ISBN 0­201­51858­9, 1992.
[Win­81] Winston, P & Horn, B.: LISP, Addisson-Wesley Publishing Co., Reading MA, 1981.

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