Está en la página 1de 3

Evaluaci´on: Programaci´on Orientada a Objetos

Prof: Nancy Hitschfeld K. Aux: Carlos Hurtado/Karl Strasser

26 Abril 2007

1. Estudie el siguiente c´odigo en c++ y diga qu´e se verifica en tiempo de compilaci´on y qu´e m´etodos se llaman en tiempo de ejecuci´on. Si hay errores, comente por qu´e se producen.

class A{

public:

class B: public A {

public:

A(){

}

B(){

}

virtual ~A(){

}

~B(){

}

virtual void g() {

}

void g(){

}

virtual void f()=0;

void f(){

}

void i(){

g()

}

}

}

A* a = new B; a->i(); a->g(); a->f(); delete a; a = new A; a->i();

2. Considere la definici´on de la siguiente jerarqu´ıa de clases:

class A{

class B: public A {

class C: public B{

public:

public:

public:

A(){} || ~A(){} || void g(T){} || int f(){ return 0;}

B(){} || ~B(){} || void g(U){} || int f(){ T t; g(t); return 1;

} void i() { int n=f();

1

C(){} ~C(){} void g(U){} int f(){ U u; g(u); return 2;

}

};

};

}

};

Para Codigo descrito a continuaci´on, diga qu´e se chequea en tiempo de compilaci´on y

a qu´e m´etodos de qu´e objeto se llama en tiempo de ejecuci´on. Si hay errores diga por qu´e se producen.

U* u; A* a = new B; a->i(); a->g(u); int n = a->f(); delete a; B* b = new C; b->i(); b->g(u); delete b;

3. Un colegio quiere contar con un programa que le permita organizar tanto su informaci´on estructural (salas de clase, auditoriums, ba˜nos, casinos, laboratorios, oficinas, sillas,

mesas, escritorios, computadores, puertas, etc.) como la de las personas que all´ı trabajan

o estudian (profesores, alumnos y director, entre otros). El programa debe ser f´acilmente

extensible en el tipo de piezas a considerar y en el tipo de personas que interact´uan en ´el. El programa debe poder responder consultas como: En qu´e cursos est´a un alumno de Rut yyyy? Quienes son los profesores de un alumno de rut yyyy ? Qu´e dimensiones tiene una pieza identificada con un cierto nombre?

a) Dise˜ne un diagrama de clases indicando qu´e relaciones entre clases escogi´o y por qu´e.

b) Incluya todas las variables de instancia y m´etodos a las clases correspondientes que

le permitan responder a las consultas indicadas de manera apropiada.

d) Identifique al menos dos patrones de diseo que podr´ıa usar y justifique su elecci´on.

Modifique su dise˜no para incorporarlos.

4. Un edificio est´a formado por un cierto n´umero de pisos y un piso por un cierto n´umero de departamentos. Para modelar edificios, departamentos y pisos con forma de par- alelepipedo, y adem´as reusar los m´etodos que provee paralelep´ıpedo para calcular su largo, ancho, alto y volumen, se propone la siguiente jerarq u´ıa:

class Paralelepipedo{ float ancho, alto, largo; public:

Paralelepipedo(float,float,float); ~Paralelepipedo(); float Volumen(); float Ancho(); float Alto();

2

class Piso: public Paralelepipedo{ List<Paralelepipedo> departamentos; public:

int NumeroDepartamentos(); Paralelepipedo ObtenerDepartamento(int i); }

float Largo(); boolean EsUnCubo();

}

class Edificio: public Piso{ List<Piso> pisos; public:

int NumeroPisos(); Piso ObtenerPiso( int i)

}

Discuta la jerarqu´ıa de acuerdo al concepto de subtipos. Proponga una nueva soluci´on que satisfaga el concepto de subtipos en caso que la propuesta no lo cumpla.

Modifique el diagrama de clases anterior, para que sea f´acilmente extensible a modelar pisos, departamentos y edificios con distintos tipos de formas (cilindros, esferas, paralelep´ıdedos, cubos, etc)? Justifique su respuesta.

3