Categorieën: Alle - patrones - funcionalidad - diseño - desarrollo

door Brandon Madriz 6 jaren geleden

203

Análisis ll

Los patrones de diseño son soluciones probadas y optimizadas para problemas comunes en el desarrollo de software. Entre ellos, los patrones estructurales son fundamentales ya que facilitan la creación de clases y objetos dentro de estructuras más complejas.

Análisis ll

Diseño y desarrollo de sistemas

Patrones de diseño

Patrones estructurales
Utilizados para crear clases u objetos que incluidos dentro de estructuras más complejas.

Flyweight

Una gran cantidad de objetos comparte un mismo objeto con propiedades comunes con el fin de ahorrar memoria.Proxy: Es una clase que funciona como interfaz hacia cualquier otra cosa: una conexión a Internet, un archivo en disco o cualquier otro recurso que sea costoso o imposible de duplicar.

Facade

Una facade (o fachada) es un objeto que crea una interfaz simplificada para tratar con otra parte del código más compleja, de tal forma que simplifica y aísla su uso.

Decorator

Permite añadir funcionalidad extra a un objeto (de forma dinámica o estática) sin modificar el comportamiento del resto de objetos del mismo tipo.

Composite

Facilita la creación de estructuras de objetos en árbol, donde todos los elementos emplean una misma interfaz. Cada uno de ellos puede a su vez contener un listado de esos objetos, o ser el último de esa rama.

Bridge

Desacopla una abstracción de su implementación, para que las dos puedan evolucionar de forma independiente.

Adapter

Permite a dos clases con diferentes interfaces trabajar entre ellas, a través de un objeto intermedio con el que se comunican e interactúan.

Patrones de comportamiento
Se utilizan a la hora de definir como las clases y objetos interaccionan entre ellos.

Visitor

Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo. De esta forma se pueden añadir nuevas operaciones a estas estructuras sin necesidad de modificarlas

Template Method

Especifica el esqueleto de un algoritmo, permitiendo a las subclases definir cómo implementan el comportamiento real.

Strategy

Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución.

State

Permite modificar la forma en que un objeto se comporta en tiempo de ejecución, basándose en su estado interno.

Observer

Los objetos son capaces de suscribirse a una serie de eventos que otro objetivo va a emitir, y serán avisados cuando esto ocurra.

Memento

Este patrón otorga la capacidad de restaurar un objeto a un estado anterior.

Mediator

Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí.

Iterator

Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.

Interpreter

Define una representación para una gramática así como el mecanismo para evaluarla. El árbol de sintaxis del lenguaje se suele modelar mediante el patrón Composite.

Chain of responsibility

Se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo. Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena.

Command

Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse.

Patrones creacionales
Utilizados para instanciar objetos, y así separar la implementación del cliente de la de los objetos que se utilizan. Con ellos intentamos separar la lógica de creación de objetos y encapsularla.

Prototype

Permite la creación de objetos basados en “plantillas”. Un nuevo objeto se crea a partir de la clonación de otro objeto.

Singleton

limita a uno el número de instancias posibles de una clase en nuestro programa, y proporciona un acceso global al mismo.

Builder

Separa la creación de un objeto complejo de su estructura, de tal forma que el mismo proceso de construcción nos puede servir para crear representaciones diferentes.

Factory Method

Expone un método de creación, delegando en las subclases la implementación de este método.

Abstract Factory

Nos provee una interfaz que delega la creación de un conjunto de objetos relacionados sin necesidad de especificar en ningún momento cuáles son las implementaciones concretas.

Para mi el tema más importante es el de versionamiento. Si bien es cierto todos los temas que hemos visto tienen que ver con este y son igual de importantes, me inclino que si se tiene un orden eficiente en los diferentes grupos de trabajo en cuanto al desarrollo de software nos referimos se puede generar una muy buena estructura basica, y se pueden incluir estos principios y patrones, los cuales se pueden adaptar, entonces estaríamos hablando que además del orden del fuente, estariamos aplicando estándares que pueden lograr hacer que nuestra aplicación sea de calidad.

Principios de diseño de software

Segregación de interfaces
Es mejor muchas interfaces específicas para cada cliente que una sola interfaz de propósito general. Es decir, los clientes no deberían depende de métodos que no usan.
Inversión de dependencias
2. Las abstracciones no deben depender de detalles. Son los detalles los que deben depender de abstracciones.
1. Los módulos de alto nivel no deberían depender de módulos de bajo nivel. Ambos deben depender de abstracciones.
Sustitución de Liskov
El principio de sustitución de Liskov dice que los subtipos deben poder ser reemplazados por cualquiera de sus tipos base. Los objetos de un programa deberían ser reemplazables por instancias de sus subtipos sin alterar el correcto funcionamiento de un programa.
Abierto – cerrado
El principio de abierto – cerrado enuncia que las entidades software (clases, módulos, funciones…) deberían estar abiertas para la extensión, pero cerradas para la modificación.
Responsabilidad única
El principio de responsabilidad única dictamina que una clase debería tener un único motivo de cambio. Definimos la responsabilidad como una razón para el cambio.