20110909 Parcialito

Anuncio
PARCIAL DE PROGRAMACIÓN II
Alumno:
09/09/2011
EJERCICIO 1
Defina mensaje. Defina método. ¿Cuál es la relación entre ambos conceptos?
Defina clase concreta y clase abstracta.
EJERCICIO 2
En una empresa existen programadores de categoría senior, junior y pasantes. Todos
los senior cobran $20 la hora, los junior $10 y los pasantes $5. Es probable que se agregue en
poco tiempo otra categoría nueva, no se sabe de cuánto será, pero también tendrá un valor
único por hora. De cada programador se conoce cuántas horas trabajó.
Jerarquía I
Jerarquía II
Programador
Programador
-categoria
-horasTrabajadas
-PrecioSenior
-PrecioJunior
-PrecioPasante
-categoria
-horasTrabajadas
-precio
Jerarquía III
Senior
-Precio
Jerarquía IV
Programador
Programador
-horasTrabajadas
-categoria
-horasTrabajadas
Junior
-Precio
Categoria
-descripcion
-precio
Pasante
-Precio
a) Exponga las ventajas y desventajas de cada jerarquía planteada.
b) ¿Cuál es a su criterio la jerarquía más apropiada? Justifique.
c) De acuerdo a la opción elegida, desarrolle el método necesario (y todos los que él
utilice) para poder calcular la suma total a pagarles a los programadores que se
encuentran en una colección.
EJERCICIO 3
Una biblioteca tiene sus libros clasificados en informática, filosofía, matemáticas,
derecho y economía. Desea poder preguntarle a los objetos que representan libros por cuánto
tiempo los pueden prestar.
Los libros de informática y filosofía se prestan por dos semanas, los de matemática por 1
semana si tienen 1 capitulo y por 3 semanas si tienen dos o más capítulos; cualquier otro libro
se presta por 5 semanas.
Realice y codifique una solución a este problema.
PARCIAL DE PROGRAMACIÓN II
Alumno:
09/09/2011
EJERCICIO 2
a) Jerarquía I:
La principal desventaja es que se necesitará un if por cada categoría de programador
para retornar el atributo de clase correspondiente. Para agregar una nueva categoría
debe agregarse un atributo de clase y un if nuevo en el método que retorna el sueldo.
Jerarquía II:
La desventaja es que todos los programadores de la misma categoría tienen el mismo
valor en el atributo precio, y que para modificar el precio por hora (ante un eventual
descuento) es necesario buscar a todos los programadores de una categoría y
modificar el valor del atributo.
Jerarquía III:
Presenta la ventaja de que no es necesario realizar un if por cada categoría y que sólo
modificando el valor del atributo de clase Precio en una categoría se modifica para
todos los programadores de la misma.
La desventaja es que para agregar una nueva categoría debe agregarse una nueva
clase. Además, sería muy engorroso pasar un programador de una categoría a otra.
Jerarquía IV:
La ventaja principal es que para agregar una nueva categoría no necesita modificarse
la jerarquía de clases, sino sólo instanciar una nueva categoría. Además, es muy fácil
que un programador cambie de categoría, sólo se modifica el atributo categoría.
b) Por lo expuesto anteriormente, la mejor opción es la Jerarquía IV.
c)
#Empresa
float totalizarSueldos( ) {
Iterator it = this.getProgramadores().iterator();
float total = 0;
while ( it.hasNext( ) ) {
Programador p = (Programador) it.next();
total = total + p.sueldo( );
}
return total;
}
#Programador
float sueldo ( ) {
return this.getHorasTrabajadas() * this.getCategoria().getPrecio();
}
También podría elegirse la Jerarquía III si se plantea que en la Jerarquía IV para agregar un
atributo a una categoría hay que agregárselo a todas. En ese caso, la solución sería:
#Programador
float sueldo ( ) {
return this.getHorasTrabajadas() * this.getPrecio();
}
#Programador
abstract float getPrecio();
#Senior
float getPrecio() {
return Senior.Precio;
}
PARCIAL DE PROGRAMACIÓN II
Alumno:
#Junior
float getPrecio() {
return Junior.Precio;
}
#Pasante
float getPrecio() {
return Pasante.Precio;
}
EJERCICIO 3
Libro cantCapitulos
Informatica
Filosofia
Matematica
Derecho
Economia
CantSemanas = 2
CantSemanas = 2
#Libro
int semanasPrestamo( ) {
return 5;
}
#Informatica
int semanasPrestamo( ) {
return Informatica.CantSemanas;
}
#Filosofia
int semanasPrestamo( ) {
return Filosofia.CantSemanas;
}
#Matematica
int semanasPrestamo( ) {
if ( this.getCantCapitulos == 1 ) {
return 1;
}
return 3;
}
09/09/2011
Descargar