Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1402
II Semestre 1998
[<=] [home] [<>] [\/] [=>]
CI-1402 Organización de Lenguajes de Programación

Examen #2 [solución]

      Duración: dos horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta el buen estilo, la redacción y la ortografía. Puede hacer el examen con lápiz. ¡No haga más de lo que se le pide! ¡Conteste, en cualquier orden, exactamente cuatro [4] preguntas! Use su lenguaje predilecto en cada pregunta.

1) [25 pts] Perl

      La compañía Sin-Ton acaba de descubrir que necesita renovarse tecnológicamente, pues sus programas usan bases de datos obsoletas. Para eso lo contratan a usted, pues necesitan cambiar los nombres de los campos y registros usados en la base de datos.

      Cualquier campo que aparece en una relación debe estar calificado por el nombre de la relación. En un programa siempre se sustituye el nombre de una relación aunque aparezca solo, pero no ocurre lo mismo con el nombre de un campo, como se puede ver en el siguiente trozo de código:

{ Trabaja sobre el registro EMPLE }
Procese("EMPLE", "KEY=EMPLE.NOM03", "SX");

      Usted ha sido contratado para escribir un programa Perl que transforme los nombres de campos y relaciones de acuerdo a una tabla de traducción. Esa tabla es un diccionario contenido en un archivo de texto que tiene renglones de dos hileras, o más. El nombre de una relación siempre aparece cargado a la izquierda (a partir de la columna uno), y el de un campo aparece luego de la columna uno. Un ejemplo de esta tabla de traducción es el siguiente:

EMPLE    R_empleado      // Esto es un comentario:
  NOM03    nombre        //   su programa sólo procesa
  APE=#    apellido      //   las primeras dos hileras
  SX       tip_sexo
  DPT00    cod_depto     // Ignore los renglones en blanco

SAL      R_salario       // SAL es nombre de relación
  KID      cod_empleado  //   pues está en la columna 1
  MONT     mon_salario   // MONT es el nombre de un campo de SAL
  FECHA    fch_salario   //   pues está después

      Si se usa su programa Perl para traducir los programas fuente de los sistemas de la compañía Sin-Ton, el bloque de código que aparece arriba quedaría traducido así:

{ Trabaja sobre el registro R_empleado }
Procese("R_empleado", "KEY=R_empleado.nombre", "SX");

      Cuide de evitar traducir una hilera ("SX") en un contexto en que no esté calificada por el nombre de relación ("EMPLE"). Note que las comillas no afectan el resultado final de su programa.

2) [25 pts] Biblioteca STL.

      Los iteradores de la clase de plantillas estándar de C++ son punteros disfrazados, por lo que no sirven para denotar a los valores almacenados en un conjunto de bits, en la clase bitset<N> ([Str­98] pp 492).

2.a) [10 pts] Defina la clase bitset<N>::iterator para la clase bitset<N>. En el Rep puede usar varios campos de dato, inclusive uno que contenga el valor referenciado.

2.b) [10 pts] Implemente la operación bitset<N>::iterator::operator*(). Asuma que la derreferencia del iterador se usará solo a la derecha de una asignación. Recuerde que el Rep de bitset<N> es un vector de enteros sin signo, de tipo "unsigned int", en donde cada entero tiene WORD_BIT bits:

#define CHAR_BIT  8  // definido en <limits.h>
#define WORD_BIT (int(CHAR_BIT*sizeof(unsigned int)))

2.c) [5 pts] Explique porqué es complicado implementar el operador de derreferencia si se permite derreferenciar el iterador a la izquierda en una asignación.

[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

3) [25 pts] Arquitectura de tres capas

3.a) [15 pts] Explique qué es y cuáles son las ventajas de implementar sistemas usando una arquitectura de tres capas. Incluya un diagrama explicativo.

3.b) [10 pts] Suponga Usted que debe escribir un programa que permita revisar archivos de mensajes de correo electrónico para extraer de ellos información relevante a una problemática específica (posiblemente para construir automáticamente un FAQ). Argumente las ventajas y desventajas de implementar este programa en el lenguaje Perl, pero usando una arquitectura de tres capas.

4) [25 pts] Compilación separada en C++

4.a) [15 pts] Explique el mecanismo que se usa en C++ para compilar separadamente los módulos que conforman un sistema. Incluya un ejemplo con al menos dos módulos.

4.b) [10 pts] Critique el mecanismo C++ de compilación separada. En su argumentación no olvide hacer alusión a las bibliotecas de plantillas.

5) [25 pts] Y2K

      El problema del Año 2000 trae de cabeza a más de uno. Vale la pena usar C++ para aliviarlo.

5.a) [10 pts] Defina la clase Date_02 que incluye operaciones para manipular fechas de dos dígitos, usando un ventana de 50 años, como la descrita en [MF­98]. Implemente el operador de resta de fechas como una función amiga de la clase.

5.b) [10 pts] Defina la clase Date<N,M> que pueda manipular fechas usando ventanas, pero almacenando la fecha en "N" dígitos con una ventana de "M" años. Implemente el operador de resta de fechas como una función amiga.

5.c) [5 pts] Discuta las ventajas y desventajas de usar polimorfismo paramérico para esta aplicación.

[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.

SOLUCION

      Los errores más comunes que cometieron los estudiantes al resolver la pregunta número uno son los siguientes:

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