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