Cátedra: Fontela
Fecha: Cuarta Oportunidad - Segundo Cuatrimestre 2006
Día: 20/02/2007
Esta página está incompleta; podés ayudar completando el material.
Implemente una clase Pila, basándose en la clase LinkedList. Puede usar composición o herencia respecto de LinkedList.
Justifique por qué utilizó composición o herencia.
Haga el diagrama de clases correspondiente.
Escriba un método estático en una clase auxiliar, que imprima todos los elementos de una pila, utilizando el método toString de cada elemento.
Haga un diagrama de secuencia en UML para el método anterior.
Explique qué es un patrón de diseño. Describa uno y explique sus ventajas.
Explique las ventajas de desarrollar una aplicación en capas.
public class Pila<T> {
private List<T> stack;
public Pila(){
stack = new LinkedList<T>();
}
public boolean push(T t){
return stack.add(t);
}
public T pop(){
T t = stack.alementAtIndex(stack.size() - 1);
stack.remove(t);
return t;
}
public T top(){
return stack.alementAtIndex(stack.size() - 1);
}
public int size(){
return stack.size();
}
public boolean isEmpty(){
return (size() == 0);
}
}
Se utiliza composición, ya que la estructura de datos Pila no comparte muchas de las características que heredaría de LinkedList (como acceso directo a elementos en cierto índice). Al utilizar composición se puede utilizar la estructura de LinkedList como contenedor de datos, pero no exponer su interfaz (en caso de haber heredado, deberían reeimplementarse los métodos no permitidos, lanzando excepciones con su uso)
Faltan partes
Un patrón de diseño es una solución aceptable, probada y que se sabe de antemano que resuelve un problema recurrente en el diseño de aplicaciones.
Un patrón de diseño es Strategy. Este patrón permite que los objetos de una clase realicen ciertas acciones de manera diferente, dependiendo de la estrategia utilizada. Las ventajas de este patrón son varias:
No es necesario diseñar más clases de dominio en las que lo único que difiere sea un método (o varios), sino que se deja ese comportamiento en manos de una jerarquía de pequeñas clases auxiliares.
La estrategia no sólo se puede definir en runtime sino que, además, puede ser modificada.
El diseño de aplicaciones en capas tiene varias ventajas, entre ellas:
Reducción de acoplamiento entre los datos (y su persistencia, en caso de haberla), la lógica de negocio y la presentación. Esto evita tener que ensuciar la capa que más suele cambiar (la de negocios) con consideraciones para el resto.
Posibilidad de interacción con otras aplicaciones de manera más o menos segura (dependiendo de los requerimientos puede optarse por integrar por datos, por servicios o directamente por la interfaz de usuario, generando distintos niveles de seguridad y complejidad). Nuevamente, definiendo la interfaz de acceso puede tenerse un sólo punto de conexión, dando seguridad y/o robustez.
Cumple con la filosofía de POO: cada uno hace una sóla cosa.
Utilización de frameworks: Existe una gran cantidad de frameworks orientados a capa una de las capas (en general se desarrolla en tres capa: Acceso a Datos, Modelo y Presentación). Estos frameworks suelen estar en constante desarrollo, por lo que existe soporte y mucha documentación.
Facilidad en la detección de errores: Al dividir de esta forma las actividades, es más simple detectar si un error se produce, por ejemplo, en la realización de un cálculo o al convertirlo a cierto formato para mostrárselo al usuario.
Posibilidad de hacer modificaciones sin afectar al resto del sistema. En consonancia con el desacoplamiento descripto al principio, es más sencillo modificar alguna característica del sistema que cuando no se desarrolla en capas. Un ejemplo claro es el cambio de interfaz de usuario (incluso agregar una nueva interfaz, por ejemplo web, a una aplicación que no la tenía). Cambios sobre los frameworks de presentación o acceso a los datos deberían ser triviales para el resto de las capas (siempre que las zonas de contacto entre las capas hayan sido bien diseñadas para soportar esas eventualidades)
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.