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