[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

II Semestre 1998 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
#3  -  #4
#5
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: Dar formato HTML a los artículos escritos por estudiantes
# 2: Dar formato a los nombres en /etc/passwd [Perl]
# 3: Excepciones
# 4: Compilación de programas que usan STL
# 5: Dar formato a los nombres en /etc/passwd [C++]
Proyectos
# 1:
[<>] Una herramienta para ayudar a resolver el Y2K
[<>] Verificador de código para Caribana
[<>] Transformador HTML de Cartas al estudiante

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

[Aus­97] Austern, Matthew H.: The SGI Standard Template Library, Dr. Dobb's Journal, No.268, pp [18­20, 22­24, 26­27, 90], Agosto 1997.
      http://www.sgi.com/Technology/STL/
[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.
[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.
[Bou­91] Boundy, David: A taxonomy of programmers, ACM SigSoft, Vol.16 No.4, pp [23­30], Octubre 1991.
[Cha­96] David, Channon: Persistence for C++, Dr. Dobb's Journal, No.252, pp [46, 48­50, 52, 95, 96], Octubre 1996.
[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.
[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­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/adt/except.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.
[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.
[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.
[LG­86] Liskov, Barbara & Guttag, John: Abstraction and Specification in Program Development, McGraw-Hill, 1986.
[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.
[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.
[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.
[Mus­98] Musser, David R.: The C++ Standard Template Library (Internet reference index), 1998.
      http://www.cs.rpi.edu/~musser/stl-book/
[Rag­95] Ragen, Alex: C Database Programming with ODBC, C/C++ User's Journal, Vol.13, No.11, pp [73­78], Noviembre 1995.
[Ret­91] Rettig, Marc: Nobody Reads Documentation, Communications of the ACM, Vol.34 No.7, pp [19­24], Julio 1991.
[Rie­98] Riedel, Jost: Y2K Challenges, Dr. Dobb's Journal, No.285, pp [10­11], Mayo 1998.
[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.
[Sch­93] Schwartz, Randall L.: Learning Perl, O'Reilly & Associates, Inc. ISBN 1-56952-042-2, http://www.perl.com, 1994.
[Set­92] Sethi, Ravi: Lenguajes de Programación: conceptos y constructores, Addisson-Wesley Iberoamericana, ISBN 0­201­51858­9, 1992.
[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
[Swa­98] Swaine, Michael: A Chat with Bob Bemer, Dr. Dobb's Journal, No.285, pp [115­117], Mayo 1998.
[Van­95] van Hoff, Arthur: Java and Internet Programming, Dr. Dobb's Journal, No.244, pp [56, 58, 60, 61, 101, 102], Agosto 1995.
[Wil­91] Wilkes, Maurice V.: Software and the Programmer, Communications of the ACM, Vol.34 No.5, pp [23­24], Mayo 1991.

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.
[Mey­86] Meyer, Bertrand: Genericity vs Inheritance, OOPSLA'86 Conference Proceedings, pp [391­405], Portland, Oregon, 1986.
[Pra­97] Pratt, Terrence W.: Lenguajes de Programación: Diseño e implementación, 3ra edición, Prentice-Hall Hispanoamericana, ISBN 970­17­0046­5, 1997.
[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.

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