Sie sind auf Seite 1von 2

Control 1- CC51H

Prof: Nancy Hitschfeld K.


Aux: Andrés Vignaga
26 Abril 2007

1. Definir formalmente el tipo de dato Conjunto, genérico, a través de la es-


pecificación de su tipo, funciones, axiomas y precondiciones. Las operaciones
incluidas deben ser sólo las que son naturales de asociar a un conjunto. Entre
éstas están la unión, intersección, resta entre dos conjuntos, la pertenencia
de un elemento al conjunto y el cardinal de un conjunto. Si usted considera
que alguna función sobra o falta para definir un buen TDA Conjunto puede
agregar o eliminar algunas operaciones justificando su respuesta.

2. Considere la definición de la siguiente jerarquı́a de clases:

class A{ class B: public A { class C: public B{


... ... ...
public: public: public:
A(); B(); C();
~A(); || ~B(); ~C();
|| void g(T); || void g(U); void g(U);
|| int f(); || int f(){ int f(){
T t; g(t); U u; g(u);
} }
|| Ra* h(Pa*); || Rb* h(Pb*); Rc* h(Pc*);
void i() {
int n=f();
}
}; }; };

Nota: || significa virtual

(a) Para Codigo 1 descrito a continuación, diga qué se chequea en tiempo de


compilación y a qué métodos de qué objeto se llama en tiempo de ejecución.
Si hay errores diga por qué se producen.
(b) Suponiendo que c++ implementa la redefinición de métodos bajo la ley
de la contravarianza diga cuál es la relación más general entre los tipos Pa,
Pb, y Pc, y entre Ra, Rb y Rc, (quién puede ser subtipo de quién) para que
el código 2 compile y ejecute correctamente.

1
Codigo 1 Codigo 2
U* u; Pa* pa; Pc* pc;
A* a = new B; A* a = new B();
a->i(); Ra* ra = a->h(pa);
a->g(u); a = new C();
int n = a->f(); ra = a->h(pa);
delete a; B* b = new C();
B* b = new C; Rc* rc = b->h(pc);
b->i();
delete b;

3. Considere el siguiente diagrama de clases, en el cual se ha decidido organizar


pilas, colas, listas y arbol de búsqueda binaria en una jerarquı́a y proveer para
cada una de ellas un iterador. Container en una clase que ha sido diseñada
para agrupar todos los objetos anteriores. Su interfaz está compuesta de los
siguientes métodos virtuales:

Container Iterator

List BinarySearchTree

Stack Queue

• T item(i): retorna el item en la posición i


• int count(): retorna el número de ı́temes
• boolean has(t): retorna verdadero si contiene el item t
• void put(t): Agrega t
• void remove(t): Elimina un item
• void remove all: Elimina todos los ı́temes
• boolean empty(): retorna verdadero si está vacı́o
• boolean full(): retorna verdadero si está lleno

(a) Discuta cada clase de acuerdo al concepto de un buen TDA.


(b) Discuta la jerarquı́a propuesta de acuerdo al concepto de subtipos.
(c) Proponga una solución alternativa que use los conceptos de orientación
a objetos y satisfaga el concepto de subtipos en caso que considere que la
propuesta anterior es incorrecta. Justifique su respuesta.

Das könnte Ihnen auch gefallen