Auxiliar 10: Examen 2007 - U

Anuncio
Evaluación: Programación Orientada a Objetos
Prof: Nancy Hitschfeld K.
Aux: Carlos Hurtado/Karl Strasser
26 Abril 2007
1. Estudie el siguiente código en c++ y diga qué se verifica en tiempo de compilación y qué
métodos se llaman en tiempo de ejecución. Si hay errores, comente por qué se producen.
class A{
...
public:
A(){...}
virtual ~A(){...}
virtual void g() { ..}
virtual void f()=0;
void i(){ ... g() ...}
}
class B: public A {
...
public:
B(){...}
~B(){...}
void g(){...}
void f(){ ...}
}
A* a = new B;
a->i();
a->g();
a->f();
delete a;
a = new A;
a->i();
2. Considere la definición de la siguiente jerarquı́a de clases:
class A{
...
public:
A(){}
|| ~A(){}
|| void g(T){}
|| int f(){
return 0;}
class B: public A {
...
public:
B(){}
|| ~B(){}
|| void g(U){}
|| int f(){
T t; g(t);
return 1;
}
void i() {
int n=f();
1
class C: public B{
...
public:
C(){}
~C(){}
void g(U){}
int f(){
U u; g(u);
return 2;
}
}
};
};
};
Para Codigo 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.
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ón
estructural (salas de clase, auditoriums, baños, 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ácilmente
extensible en el tipo de piezas a considerar y en el tipo de personas que interactúan en
él. El programa debe poder responder consultas como: En qué cursos está un alumno
de Rut yyyy? Quienes son los profesores de un alumno de rut yyyy ? Qué dimensiones
tiene una pieza identificada con un cierto nombre?
a) Diseñe un diagrama de clases indicando qué relaciones entre clases escogió y por qué.
b) Incluya todas las variables de instancia y métodos 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ón.
Modifique su diseño para incorporarlos.
4. Un edificio está formado por un cierto número de pisos y un piso por un cierto número
de departamentos. Para modelar edificios, departamentos y pisos con forma de paralelepipedo, y además reusar los métodos que provee paralelepı́pedo para calcular su
largo, ancho, alto y volumen, se propone la siguiente jerarquı́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ón que satisfaga el concepto de subtipos en caso que la propuesta no lo
cumpla.
• Modifique el diagrama de clases anterior, para que sea fácilmente extensible a
modelar pisos, departamentos y edificios con distintos tipos de formas (cilindros,
esferas, paralelepı́dedos, cubos, etc)? Justifique su respuesta.
3
Descargar