Altillo.com > Exámenes > UBA - Ingeniería > Algoritmos y Programación III

Algoritmos y Programación III

1° Parcial

Cátedra Fontela 2º Cuat. de 2009 Altillo.com

Nota importante: no se extienda más allá de lo que se indica en cada pregunta: esto también va a ser tenido en cuenta en la corrección.

 

1)     1)  Responda la siguiente pregunta teniendo en cuenta el capítulo 1 del libro “Domain Driven Design” de Eric Evans. Mencione al menos 3 de los ingredientes descriptos por Evans para lograr un modelo de dominio efectivo en el caso del software de diseño de paquetes (máximo media carilla)

2)      2) Nombrar al menos una diferencia sustancial entre Java y C# en la implementación de generecidad (máximo media carilla)

3)      3) Explique en el marco del diseño por contrato, como le parece que deben implementarse precondiciones, postcondiones e invariantes al construir una clase (máximo media carilla)

4)      4) Análisis, diseño, construcción, pruebas son actividades del desarrollo de software, no asociadas con un modelo de proceso ni necesariamente secuenciales entre si ¿Puede explicar en dos líneas en que consiste cada una? (no más de 2 líneas por actividad)

5)      5) ¿Qué significa el encapsulamiento en POO? Explíquelo en 3 líneas. Marque una X sobre el código de abajo que mejor respeta el encapsulamiento (mover el punto 5 pixeles en sentido horizontal:

*punto = new Punto (punto getX() + 5, punto.getY() );

*punto.trasladarX(5);

*punto x = punto.x + 5;

* punto.setX( punto.getX() + 5);

* punto.trsladarHorizontal(5);

 

6)       6) ¿Qué cuestión fundamental diferencia a un objeto de un agrupamiento de valores en una variable estructurada? (máximo 4 líneas)

7)     7)  Java y C# nos proveen un constructor por omisión sin parámetros. Algunos programadores aprovechan esta circunstancia y no definen constructores para sus clases, confiando en el constructor por omisión, y proveyendo métodos “setters” para dar valores iníciales a los atributos de los objetos  ¿Es correcto este proceder? ¿ Que inconvenientes ve? Si le queda mas cómodo mostrar código, hágalo. (máximo una carilla)

8)      8) ¿Por qué en el procedimiento de TDD, se hace énfasis en que probemos que las pruebas fallen a penas escriben los tests? (máximo 4 líneas)

9)      9) Analice el siguiente tramo de código en el cual Fecha es una clase que implementa las interfaces Imprimible, Comparable y Serializable. ¿Qué restricciones tenemos al usar las varialbes i,c y s sobre el uso de f? ¿ Qué sentido tiene todo esto? (máximo una carilla)

*Fecha f = new Fecha(20,6,1964);

*Imprimible i =f;

*Comparable c = f;

*Serializable s = f;

 

 10) Suponga que tiene una clase Rectángulo que implementa la siguiente interfaz: (máximo 2 carillas)

Public interface Rectangulo {

Punto getVerticeSuperiorIzquierdo();

               double getLadoHorizontal();

               double getLadoVertival();

               void cambiarEscala( double factorX, double fatorY() ) ;

               void mover( Punto nuevoVerticeSuperiorIzquierdo);

}

 

i.                   Escriba la clase rectángulo.

ii.                 Ahora se le pide implementar una clase Cuadrado. Usted sabe que todo cuadrado es un rectángulo, por lo que desearía utilizar herencia para implementar Cuadrado ¿Ve algún problema? Suponga que puede modificar la interfaz Rectángulo, y la clase Rectángulo ¿ Le permite esto solucionar el problema? Muéstrelo en código y en diagrama de clases.

iii.               Suponga que no tiene manera de cambiar la clase Rectángulo. ¿Se le ocurre otra idea, aunque sea sin usar herencia? Muéstrelo en código y en diagrama de clases.