Asignatura: Programación Orientada a Objetos











                1   2 TOTAL
              -------------
CALIFICACION: |   |   |   |
              -------------
Examen intermedio (20/11/2001)

    Problema de Smalltalk

  1. Implementar los métodos whileFalse: y to:do: sin usar bucles. Decir sobre qué clase(s) hay que definir los métodos y escribirlos en Smalltalk (5 puntos).

    Problema de análisis y diseño

  2. Analizar una aplicación orientada a objetos que describa la siguiente situación:

    En una casa viven cinco animales: una ballena llamada "Moby Dick", que no dice nada; un perro fiero llamado "Caín", que dice "Grrr"; un perro manso llamado "Abel", que dice "Guau"; un pingüino llamado "Adela" que no dice nada; y un loro que dice "Lorito bonito", "Pretty Polly" y "Viva mi dueño".

    Construir el diagrama de clases y objetos en UML (5 puntos).

Soluciones:

  1. whileF: aBlock
       "Evaluar self y aBlock hasta que self se evalue a true"
       self value ifFalse: [
            aBlock value. self whileF: aBlock
       ]
    
    to: anInteger do1: aBlock
       "Evaluar aBlock para cada elemento de la progresión aritmética
        desde self hasta anInteger con incrementos de 1."
       | idx |
       idx := self.
       idx <= anInteger ifTrue: [
            aBlock value: idx.
            idx := idx + 1.
            idx to: anInteger do1: aBlock
       ]
    

Asignatura: Programación Orientada a Objetos










              1.1 1.2 2.1 2.2 2.3 2.4 3.1 3.2 TOTAL
              -------------------------------------
CALIFICACION: |   |   |   |   |   |   |   |   |   |
              -------------------------------------
(Temas avanzados en Ciencias de la Computación II) Examen final (30/1/2002)
  1. Problema de análisis y diseño

    Se desea diseñar un sistema de gestión de matrículas y personal docente para las Universidades de una Comunidad Autónoma. Desde el punto de vista de la matrícula, una Universidad puede considerarse como un conjunto de estudiantes, a cada uno de los cuales se le asignará un número de identificación personal. Los estudiantes podrán asistir a cierto número de cursos, cada uno de los cuales será impartido por un profesor. Desde el punto de vista del personal docente, la Universidad se divide en departamentos, cada uno de los cuales estará formado por varios profesores, uno de los cuales actuará como director del departamento. Cada profesor sólo podrá pertenecer a un departamento. Los departamentos tienen la responsabilidad de impartir uno o más cursos. El sistema permitirá añadir o borrar estudiantes, departamentos y profesores, así como realizar consultas sobre cada uno de estos estamentos.

    Se pide:

    1. Construir un diagrama de clases UML de la aplicación (2 puntos).
    2. Diseñar la estructura de una base de datos relacional que permita guardar la información persistente de la aplicación (2 puntos).
  2. Problemas de Smalltalk
    1. Implementar el método sortblock: en sus dos versiones (de clase y de objeto). Decir sobre qué clase(s) hay que definirlos y a qué clase(s) queda asignado (0,8 puntos).
    2. Corregir los posibles errores en las expresiones siguientes y decir qué resultado darían (0,5 puntos).
      a)  |x| x:=Set new add: 'HOLA' add: 'ADIOS'; size; x
      b)  |x| x:=0. #(#(1) #(2 3) #(4)) do: [:i|x:=x+i size]. x
      
    3. ¿Dónde hay que colocar los paréntesis en las siguientes instrucciones para que el resultado sea el indicado? (1,2 puntos).
      a)  3+4*5- 3\\8
          Resultado: 0
      b)  OrderedCollection with: 'abcd' with: 'mnop' at: 2 at: 2
          Resultado: $n
      c)  1+ Array new size + #(1 2 3 4) size * 5 + String with: $a with: $b size
          Resultado: 35
      
    4. Escribir una instrucción Smalltalk que cree una variable global llamada Nombre y le asigne como valor el nombre del alumno (0,5 puntos).
  3. Problemas de C++
    1. Corregir los posibles errores en el siguiente programa y decir qué resultado daría (1 punto).
      #include <iostream.h>
      
      class A {
      private:
        int valor;
      public:
        A (int v=0) : v(valor) {}
        void f(A *a, int v=99) { a->valor=v; }
        int getvalor () { return valor; }
      };
      
      void main()
      {
        A *obj1;
        obj1 = new A;
      
        A obj2(9);
      
        obj2.f(obj1);
        cout << obj1->getvalor() << endl;
        cout << obj2->getvalor() << endl;
      }
      
    2. Implementar un conjunto de pilas de diversos tipos que contengan, como mínimo, los métodos push y pop. Estos métodos deben ser capaces de lanzar las excepciones correspondientes. Escribir un programa principal que cree una pila de enteros y atrape las excepciones que puedan producirse (2 puntos).

Soluciones: