Universidad de Costa Rica
|
|
1) [25 pts] OOP = Herencia + polimorfismo
Escriba un programa que use herencia y polimorfismo. Luego reprográmelo pero sin usar herencia. Trabaje de manera que su respuesta muestre por qué la programación orientada a los objetos debe incluir ambas facilidades de sintácticas. Use su lenguaje predilecto.
2) [25 pts] Excepciones
+---+-------+ +->| n | sp |--+ | +---+-------+ | | | | | | +-------+ | +----| @sp |<---+ +-------+ |
TYPE TSelfPoint = OBJECT n : INTEGER; { Rep } pBlock : ^^TSelfPoint; { Rep } ... CONSTRUCTOR Init; DESTRUCTOR Done; ... END; { TSelfPoint } PROCEDURE Recursivo( n: INTEGER ); |
2.a) [0 pts] Defina el tipo TSelfPoint
, que
tiene la particularidad de que cada instancia incluye en su
Rep un puntero
(pBlock
) a un bloque de memoria en el que está
almacenado un
puntero que apunta
de vuelta a la instancia, como se muestra en el diagrama. Use su
lenguaje predilecto.
2.b) [10 pts] Implemente el procedimiento
Recursivo(n)
. Inclúyale un manejador de
excepciones. Puede usar la biblioteca de exepciones descrita en:
[DiM94] | Di Mare, Adolfo:
Manejo de excepciones en Turbo Pascal,
Reporte Técnico ECCI9410
(Revisión 4),
Proyecto 32689019,,
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
|
2.c) [15 pts] Use el procedimiento
Recursivo(n)
para mostrar por qué, cuando
ocurre una excepción, es necesario invocar los destructores
de los objetos. No está de más que en su respuesta
incluya un diagrama simple de la pila de ejecución del
programa.
3) [25 pts] Perl vs Parametrización + polimorfismo
Considere el lenguaje Perl cuya fortaleza principal es la manipulación de archivos e hileras. Para efectos de esta pregunta, concéntrese en la versión del lenguaje discutida en el libro que se ha usado en el curso:
[Sch93] | Schwartz, Randall L.:
Learning Perl,
O'Reilly & Associates, Inc.
ISBN 1-56952-042-2,
http://www.perl.com ,
1994.
|
3.a) [8 pts] Explique el grado de parametrización de Perl. Luego argumente si Perl soporta polimorfismo.
3.b) [8 pts] Mencione las restricciones, o deficiencias, de Perl, que le impiden ser un lenguaje que soporta por completo polimorfismo uniforme.
3.c) [9 pts] Sustenten sus respuestas anteriores con unos programas ejemplo pequeños.
4) [25 pts] Comparación de lenguajes
4.a) [18 pts] Haga una tabla en que incluya, en la columna izquierda, tres situaciones en que conviene más usar Perl en lugar de Pascal o C++. En la columna derecha, menciones tres situaciones en que ocurre precismamente lo contrario, pues conviene más usar Pascal o C++ en lugar de Perl.
4.b) [7 pts] En pocas palabras, explique cuál lenguaje es mejor: Perl, o uno de Pascal y C++.
5) [25 pts] Programación
Haga un programa que lea un grupo de archivos ASCII, y traduzca a
enfatizado las palabras reservadas Pascal que contengan. Suponga
que las palabras reservadas siempre se escriben con letras
mayúsculas, y que se encuentran en un archivo llamado:
/bin/perl/turbo/strong
Para que la palabra quede en formato enfatizado debe quedar
rodeada por las hileras <STRONG>
y
</STRONG>
. Cuide, sin embargo, de no traducir
aquellas palabras reservadas que están dentro de alguna
otra palabra. Además, traduzca únicamente la
palabras que están escritas en mayúsculas. Al final,
asegúrese de que no queden marcadores
<STRONG>
<STRONG>
o
</STRONG>
</STRONG>
contiguos.
==>
<STRONG>DO</STRONG>
6) [25 pts] Constructores y destructores
El lenguaje C++ estándar no permite que el programador invoque un constructor sin al mismo tiempo crear una nueva instancia de una variable. Para Pascal tampoco hay una forma portable de hacerlo.
6.a) [10 pts] Defina el tipo TClonabe
, en
su lenguaje preferido, que incluye un método
polimórfico Invoca_Constructor()
, que se
encarga de invocar al constructor de un objeto sin requerir la
creación de una nueva instancia. Luego implemente el
método Invoca_Constructor()
usando el
siguiente algoritmo (que fue mencionado en clase):
desde
"
del tipo a construir.pClonable
", la
dirección de memoria sobre la que se invocará
al constructor.desde
" ya construida.
*pClonable
".
Recuerde que para lograr su objetivo debe implementar el
constructor de TClonable
usando una pareja de
métodos diferentes [TClonable.Init()
y
TClonable.Real_Init()
], de manera que pueda
invocarlos por separado.
6.b) [5 pts] Diga qué debe hacer el programador
cliente del tipo TClonabe
para invocar el constructor
de un objeto usando la maquinaria de
Invoca_Constructor()
.
6.c) [5 pts] Explique por qué
Invoca_Constructor()
funciona.
6.d) [5 pts] De un ejemplo de una aplicación en la que conviene que el programador pueda invocar al constructor de la forma en que lo ha hecho al contestar esta pregunta.
Adolfo Di Mare <adolfo@di-mare.com>.
|