PATRONES DE DISEÑO Y ESTRUCTURAS DE DATOS

Slides:



Advertisements
Presentaciones similares
MODELOS ORIENTADOS A OBJETOS
Advertisements

INGENIERÍA DE SOFTWARE Introducción Arquitectura de Software
Red Social: “Un millón de Amigos”.
FACHADA COMPOSITOR MEMENTO
ANÁLISIS DE REQUERIMIENTOS
Arquitectura CLARO-TECNOTREE
Programación Orientada a Objetos
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
1.1 Concepto de Tipo de Datos Abstracto.
Tipo de Dato Abstracto Tipos de datos:
COMPONENTIZACIÓN DE ALGORITMOS GENETICOS Y SU IMPLEMENTACIÓN EN UNA PLATAFORMA ABIERTA PARA APRENDIZAJE COMPUTACIONAL.
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
Ingeniería del Software
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Marzo 2007 Lenguajes Visuales Clase III.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Lic. Rosemary Torrico Bascopé
Técnicas avanzadas de programación Interfaces
Diseño de Sistemas. Patrones de Diseño. Geronimo Manso.
Modelado Arquitectónico
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
Programación Orientada a Aspectos (POA)
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
Clase 10: Estructuras de datos y arreglos.
DISEÑO DE SOFTWARE 1ª. Parte
Bases de Datos Orientadas a Objetos (BDOO)
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
Introducción A Las Bases De Datos
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
Lenguajes de Programación Tema 3
Patrón Decorador Por: Robin Ochoa Falla.
Patrones de diseño DECORATOR Mario Rodríguez Martín
1 Diseño Orientado a Objetos Agustín J. González ELO-329: Diseño y Programación Orientados a Objetos 1er. Sem
Clasificación de los TDA
3.- Introducción a Patrones de Diseño
Son la base para la búsqueda de soluciones o problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
Diseño e Implementación de Sistemas Basados en Conocimiento
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
SOFTWARE PARA PAGOS DE SUELDOS Patrones de Diseño
PATRONES DE DISEÑO.
PATRÓN ADAPTER (Adaptador) Elena Moreno Ramírez Laura Sánchez Romero Aroa Solana Ruiz.
CICLO DE VIDA Y NORMAALIZACION DE UN SISTEMA DE BASE DE DATOS
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Análisis y diseño de sistemas Diagrama de componentes
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Diseño de Sistemas.
Patrones de diseño equipo n.1
Jairo Pinto Ing. sistemas
Actividades en el Proceso de desarrollo de Software
Introducción a los TADs
ESTRUCTURAS LINEALES “LA PILA”
Acceso a Datos Erick López Ovando Licenciado en Informática.
Proceso de desarrollo de Software
Programación Orientada a Objetos: CLASES Y OBJETOS
Diagrama de Clases.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Fundamentos de Ingeniería de Software
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Entregables del Proyecto
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Transcripción de la presentación:

PATRONES DE DISEÑO Y ESTRUCTURAS DE DATOS Informática III - 2008 Ing. EStela D'Agostino

Poder reusar componentes y lograr un mantenimiento fácil. habitualmente Hardware Software Poder reusar componentes y lograr un mantenimiento fácil. Lograr un software flexible Patrones de diseño Informática III - 2008 Ing. EStela D'Agostino

Un buen diseño de software produce código que es reusable y escalable y la clave para que estas dos características estén presentes son: Utilizar buenas abstracciones Descomposición de los sistemas en subsistemas más acotados. Informática III - 2008 Ing. EStela D'Agostino

La solución debe ser tal, que sirva cada vez que se presenta Problema Solución La solución debe ser tal, que sirva cada vez que se presenta el mismo problema Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño . Ingeniero Resuelve problemas Aplicando estándares Las buenas soluciones permanecen, las malas se rechazan. Todo ingeniero debe conocer y saber aplicar los estándares conocidos . Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Se definen con un alto nivel de abstracción. Son independientes de los lenguajes de programación y de los detalles de implementación. Los patrones promueven y facilitan la reutilización de arquitecturas y diseños de software que han demostrado su validez en muchas aplicaciones. Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson Design Patterns. 1994 Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño “Son descripciones de clases y objetos relacionados que están adaptados para resolver un problema de diseño general en un contexto determinado”. Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Aplica la idea de patrones de diseño al diseño de software Describe una estructura dentro de la cual catalogar y describir patrones Cataloga 23 patrones Destaca estrategias y aproximaciones basadas en el diseño de patrones Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño No crearon los patrones descriptos en el libro. Los descubrieron como existentes dentro de la comunidad del software Informática III - 2008 Ing. EStela D'Agostino

Porque estudiar patrones de diseño Reuso de soluciones de diseño. Establecer terminología común. Dan una perspectiva de alto nivel sobre el análisis y diseño. Informática III - 2008 Ing. EStela D'Agostino

Clases de patrones de software Patrones de arquitectura: proporciona un conjunto de subsistemas predefinidos, especifica responsabilidades y relaciones entre ellos. Patrones de programación: tiene que ver con las posibilidades de bajo nivel que tiene un lenguaje de programación determinado. Patrones de análisis: describen un conjunto de prácticas que aseguran la obtención de un buen modelo de un problema y su solución. Informática III - 2008 Ing. EStela D'Agostino

Clases de patrones de software Patrón de diseño: proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicación de componentes que resuelven un problema de diseño en un contexto particular Informática III - 2008 Ing. EStela D'Agostino

Otros tipos de patrones Patrones de programación concurrente Patrones de interfaz gráfica Patrones de organización de código Patrones de optimización de código Patrones de robustez de código Patrones de fases de prueba Informática III - 2008 Ing. EStela D'Agostino

Clasificación de patrones (GoF) Patrones de creación : Tratan de la inicialización y configuración de clases y objetos. Patrones estructurales: Tratan de desacoplar interfaz e implementación de clases y objetos: ¿Cómo se componen clases y objetos? Patrones de comportamiento: Tratan de las interacciones dinámicas entre sociedades de clases y objetos: ¿Cómo interaccionan y se distribuyen responsabilidades los objetos? Informática III - 2008 Ing. EStela D'Agostino

Propósito De creación Estructurales Comportamiento Factory Method Adapter Interpreter Template Method Abstract Factory Builder Bridge Chain of responsability Prototype Composite Command Singleton Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor Informática III - 2008 Ing. EStela D'Agostino

Patrón state Informática III - 2008 Ing. EStela D'Agostino

Principios básicos de los patrones de diseño Programe para una interfaz, no para una implementación. Favorecer la composición frente a la herencia de clases. Encuentre lo que varía y encapsúlelo. Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño La clase de un objeto define el estado interno y la implementación del mismo. El tipo de un objeto sólo se refiere a su interfaz. Conjunto de operaciones a las cuales puede responder. Un objeto puede tener muchos tipos. Objetos de clases diferente pueden tener el mismo tipo. Informática III - 2008 Ing. EStela D'Agostino

No todos los lenguajes hacen esta distinción explícita Patrones de diseño Herencia de clases Define la implementación de un objeto en términos de la implementación de otros. Herencia de interfaces Describe cuando se puede usar un objeto en lugar de otro. No todos los lenguajes hacen esta distinción explícita Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Manipular objetos en función de la interfaz definida por la clase abstracta, de la cual extiende, tiene dos ventajas: Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Los clientes no tienen que conocer los tipos específicos de los objetos que usan, basta con que estos cumplan con la interfaz que esperan los clientes. Informática III - 2008 Ing. EStela D'Agostino

Patrones de diseño Herencia de clases Ventajas Se define estáticamente Fácil modificación de la implementación Desventajas No se cambian implementaciones en tiempo de ejecución Rompe encapsulamiento Informática III - 2008 Ing. EStela D'Agostino

Composición de objetos Patrones de diseño Composición de objetos Ventajas Se define dinámicamente No se rompe encapsulamiento Informática III - 2008 Ing. EStela D'Agostino

Que debería ser variable en su diseño Patrones de diseño Que debería ser variable en su diseño Que puede ser cambiado en su diseño, sin necesidad de rediseñar. Encapsule lo que puede variar. Distintos algoritmos de ordenación de arreglos Encapsule cada algoritmo en una clase Informática III - 2008 Ing. EStela D'Agostino

Beneficios de los patrones Esto esta revirtiendose Los lenguajes usan patrones para implementar estructuras de datos Beneficios de los patrones Los patrones favorecen la reutilización de diseños y arquitecturas a gran escala. Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software. Proporcionan un cuerpo de conocimiento utilizable por toda la comunidad software. Favorecen la transmisión de conocimiento entre profesionales y entre clientes y desarrolladores Proporcionan un lenguaje común. Los nombres de los patrones forman parte del vocabulario técnico del ingeniero software. Informática III - 2008 Ing. EStela D'Agostino

Problema de los patrones Los patrones, no llevan de forma directa a la reutilización del código, aunque dicha reutilización se facilita mediante su uso. La integración de los patrones en el proceso de desarrollo se hace todavía de forma manual. El número de patrones identificados es cada vez más grande. Las clasificaciones actuales no siempre sirven de guía para decidir cual usar. Informática III - 2008 Ing. EStela D'Agostino

Problema de los patrones El número de combinaciones patrones estilos y atributos que se dan en la práctica son incontables. Los patrones se validan por la experiencia y el debate, no mediante la aplicación de técnicas formales. Informática III - 2008 Ing. EStela D'Agostino

Cómo seleccionar un patrón de diseño Considerar cómo los patrones de diseño solucionan problemas de diseño. Buscar las intenciones de cada patrón. Estudiar cómo se interrelacionan los patrones. Estudiar patrones de propósito similar. Examinar la causa de un rediseño. Considerar que debería ser variable en un diseño. Informática III - 2008 Ing. EStela D'Agostino

Problema a resolver Existe un archivo de texto, el que se debe leer en distintos momentos y bajo condiciones variables. Como lo resuelvo? Informática III - 2008 Ing. EStela D'Agostino

Problema a resolver Varia la estrategia de lectura Leer solo las palabras que comiencen con t Leer las palabras de más de 5 caracteres Leer los palíndromos Encapsular Informática III - 2008 Ing. EStela D'Agostino

Patrón Estrategia Programar para una interface Encapsular <interface> Strategy checkStrategy (...) EstrategiaAbstracta Mayor5 Palindromo ComenzarCon Cliente - CheckStrategy miestrategia Encapsular Programar para una interface Informática III - 2008 Ing. EStela D'Agostino

Patrón Estrategia public interface Strategy { public boolean checkStrategy(String s); } Informática III - 2008 Ing. EStela D'Agostino

Patrón Estrategia public class ComenzarConT extend EstrategiaAbstracta implements Strategy { public boolean checkStrategy(String s) { if( s == null || s.length() == 0) return false; return s.charAt(0) = 't'; } } Informática III - 2008 Ing. EStela D'Agostino

Patrón Estrategia public class Mayor5 extend EstrategiaAbstracta implements Strategy { public boolean checkStrategy(String s) { if(s == null) return false; return s.length() > 5; } } Informática III - 2008 Ing. EStela D'Agostino

Patrón Estrategia public class Palindrome extend EstrategiaAbstracta implements Strategy { public boolean checkStrategy(String s) { if(s == null) return false; int length = s.length(); if(length < 2) return true; int half = length/2; for(int i = 0; i < half; ++i) if(s.charAt(i) != s.charAt(length - 1 - i)) return false; return true; } } Informática III - 2008 Ing. EStela D'Agostino

while((buffer = infile.readLine()) != null) { public void printWhen(String filename, Strategy which) throws IOException { BufferedReader infile = new BufferedReader(new FileReader(filename)); String buffer = null; while((buffer = infile.readLine()) != null) { StringTokenizer words = new StringTokenizer(buffer); while( words.hasMoreTokens() ) String word = words.nextToken(); if (which.checkStrategy(word)) System.out.println(word); } } } Informática III - 2008 Ing. EStela D'Agostino

Estructura de datos Una estructura de datos es un contenedor que almacena datos. Existen estructuras de datos estandarizadas y que pueden clasificarse según distintos criterios. Informática III - 2008 Ing. EStela D'Agostino

Estructura de datos Extraer objetos de un contenedor no implica destruir el objeto. Un contenedor puede contener objetos por valor o por referencia. objeto1 objeto2 objeto3 objeto1 objeto2 objeto3 referencia1 referencia2 referencia3 Informática III - 2008 Ing. EStela D'Agostino

Clasificación de los contenedores Ordenados No ordenados 2. Con elementos repetidos sin elementos repetidos 3. Secuencial (método de acceso) Aleatorio Informática III - 2008 Ing. EStela D'Agostino

Operaciones sobre el contenedor Creación Destrucción Informática III - 2008 Ing. EStela D'Agostino

Servicios que brinda el contenedor Inserción Extracción Búsqueda Iteración Cardinalidad Vaciado siguiente ( )(para contenedores ordenados) anterior ( ) Informática III - 2008 Ing. EStela D'Agostino

Estructura de datos Simples Estructurados Estáticas Dinámicas Tipos de datos fundamentales Estructura de datos Tamaño fijo Simples Estructurados Estáticas Dinámicas Listas Recorrido lineal Recorrido no lineal Tamaño variable Grupo de tipos de datos fundamentales o TDA Árboles Listas enlazadas Informática III - 2008 Ing. EStela D'Agostino

Clases contenedoras Los objetos pueden almacenar datos, recuperar datos y remover datos. Objetos Clase contenedora: cuyo estado cambia al remover o insertar objetos. Puede variar entre un estado vacío a uno no vacío Informática III - 2008 Ing. EStela D'Agostino

Estructura de datos implementadas por la mayoría de los lenguajes Dinámicos: varían el tamaño de la estructura de datos, el comportamiento para insertar y extraer elementos, por como se recorren y algunas características más según como se implementen en el lenguaje. Pilas: Colas: Listas enlazadas: Conjuntos: Árboles: Informática III - 2008 Ing. EStela D'Agostino

Pilas Es una estructura que se conoce como de tipo LIFO (Last Input First Output). Se puede implementar de distintas formas. Habitualmente tiene, entre otros, dos métodos añadir(.....) y sacar (....). Informática III - 2008 Ing. EStela D'Agostino

Pilas Inserto elementos Elemento 1 Elemento 2 .................. Implementación estática Elemento 1 Elemento 2 .................. Elemento n Extrae elementos Inserto elementos Elemento 1 Elemento 2 Elemento n Elemento 3 .................. Cabecera Implementación dinámica Extrae elementos Informática III - 2008 Ing. EStela D'Agostino

Colas Es una estructura que se conoce como de tipo FIFO (First Input First Output). Se puede implementar de distintas formas. Habitualmente tiene, entre otros, dos métodos o procedimientos añadir(.....) y sacar (....). Informática III - 2008 Ing. EStela D'Agostino

Listas enlazadas Es una estructura que acepta inserción o extracción de elementos en cualquier lugar, al principio, al final o en un lugar determinado. Pueden estar implementadas de forma estática o dinámica. Informática III - 2008 Ing. EStela D'Agostino

Arboles Un árbol es una estructura de datos no lineal y homogénea en el que cada elemento puede tener varios elementos posteriores, pero tan sólo puede tener un elemento anterior. Árbol binario Informática III - 2008 Ing. EStela D'Agostino

Patrones de comportamiento y estructuras de datos Las clases contenedoras pueden cambiar su estado al insertar o remover objetos. Por lo tanto se pueden utilizar patrones de comportamiento para representar ese cambio de estado. Informática III - 2008 Ing. EStela D'Agostino

Clase Lista implementada con patrones EstadoAbs insertar (Lista, Object, Object) Lista private EstadoAbs estado EstadoVacio insertar (Lista, Object, Object) EstadoNoVacío insertar (Lista, Object, Object) Informática III - 2008 Ing. EStela D'Agostino

Recorrido de una estructura de datos Patron iterator AgregadoAbs CrearIterador() Agregado Iterador primero() siguiente() haTerminado() elementoActual() Informática III - 2008 Ing. EStela D'Agostino

Framework Collections de Java Contiene interfaces, clases abstractas e implementaciones de clases concretas que me permiten manejar datos estructurados. Informática III - 2008 Ing. EStela D'Agostino

Informática III - 2008 Ing. EStela D'Agostino

Framework Collections de Java Interfaces Informática III - 2008 Ing. EStela D'Agostino

Características de las interfaces Collections: metodos para agregar y extraer elementos. Sets: no permite elementos duplicados. SortedSet: permite elementos ordenados. List: colección ordenada, sepueden agregar elementos en lugares a elección. Queue: trabaja como una estructura FIFO. Map: mantiene claves pares clave-valor. SortedMap: mantiene claves pares clave-valor, en un orden especificado. Informática III - 2008 Ing. EStela D'Agostino

Clases que implementan las interfaces Informática III - 2008 Ing. EStela D'Agostino

Beneficios del framework de collecciones de java Reduce el esfuerzo de programación. Aumenta la calidad. Reduce el esfuerzo para diseñar nuevas APIs. Informática III - 2008 Ing. EStela D'Agostino

Biblioteca estandar de patrones STL en C++ Contenedores Adaptadores de contenedores Contenedores asociativos Iteradores Otros Informática III - 2008 Ing. EStela D'Agostino

Biblioteca estandar de patrones STL en C++ Vector<T>: arreglo de elementos de tipo T de tamaño variable. List>T>: lista doblemente enlazada. Dequeu<T>: es parecida a Vector<T>, pero inserta al principio fácilmente Stack<T>: es un adaptador que sirve para construir una pila de cualquiera de las 3 estruc anteriores. Queue<T>: esuna FIFO Priority_Queue: es un tipo de cola en la que los elementos están ordenados de forma que cada vez que extraemos un elemento de ella obtenemos el de mayor prioridad Informática III - 2008 Ing. EStela D'Agostino