Patrones de diseño Flashcards
Lista de patrones de arquitectectura
Solo para que suenen:
- Layered pattern
- Client-server pattern
- Master-slave pattern
- Pipe-filter pattern
- Broker pattern
- Peer-to-peer pattern
- Event-bus pattern
- Model-view-controller pattern
- Blackboard pattern
- Interpreter pattern
¿Que es SOLID?
Solo para que suenen:
Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion). Representa cinco principios básicos de la programación orientada a objetos y el diseño.
- Single responsibility principle –> la noción de que un objeto solo debería tener una única razón para cambiar. Clases especializadas en un cometido concreto (responsabilidad).
- Open/closed principle –> la noción de que las “entidades de software … deben estar abiertas para su extensión, pero cerradas para su modificación”.
- Liskov substitution principle –> la noción de que los “objetos de un programa deberían ser reemplazables por instancias de sus subtipos sin alterar el correcto funcionamiento del programa”. Véase también diseño por contrato.
- Interface segregation principle –> la noción de que “muchas interfaces cliente específicas son mejores que una interfaz de propósito general”
-
Dependency inversion principle –> la noción de que se debe “depender de abstracciones, no depender de implementaciones”.4
La Inyección de Dependencias es uno de los métodos que siguen este principio.
¿Que es GRASP?
Solo para que suenen:
En diseño orientado a objetos, GRASP son patrones generales de software para asignación de responsabilidades, es el acrónimo de “GRASP (object-oriented design General Responsibility Assignment Software Patterns)”. Aunque se considera que más que patrones propiamente dichos, son una serie de “buenas prácticas” de aplicación recomendable en el diseño de software
Tipos de patrones de diseño (categorias)
- Creacional –> Creación de objetos
- Abstract Factory
- Builder Patterns
- Factory Method
- Prototype
- Singleton
- Estructural –> Problemas en la estructura
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Adapter
- Comportamiento –> de su padre y de su madre.
- Chain of responsability
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Patron Factory Method
CREACIONAL
Centralizar la creación de objetos en una clase ‘Factory’ de tal manera que no repartamos news por todo el código.
Factory Method: proporciona una interfaz para crear objetos en una superclase, mientras permite a las subclases concretar el tipo de objetos que se crearán
Patron Abstract Factory
CREACIONAL
Cuando tenemos varias jerarquías, varias familias pero con el mismo ‘apellido’ y podemos crear una clase abtracta que cubra a las familias.
Abstract Factory: nos permite producir familias de objetos relacionados sin especificar sus clases concretas
Nota: el Factory Method es un caso particular de Abstract Factory
Patrón Builder
CREACIONAL
Troceamos en partes más pequeñas la creación de una clase de creación compleja, en otras que creen cada parte por separado, más especializadas. Luego las uniremos mediante una clase Director.
Para orquestar la fusión de las distintas creaciones tenemos un Director
Builder: Crear clases especializadas en crear cada parte de un objeto muy complejo (ej Facturas + Lineas+ Condiciones)
Patron Prototype
CREACIONAL
Prototype: Define el interface de clonación (metodo clone) que deberán implementar ciertas clases de negocio que quieran permitir clonar/duplicar uno de sus objeto para obtener otro idéntico
Patrón Singleton
CREACIONAL
Se aplica a una clase concreta de la que solo queremos crear un solo objeto.
Singleton: Limitar a 1 las instancias que se puede crear de una clase determinada (truco: constructor privado + método estático)
Patron Flyweight
ESTRUCTURAL
Saca fuera de al creación ‘estandard’ de un objeto aquello que o bien es muy grande o bien es poco usado, dejando la carga de esa parte solo cuando se vaya a usar y no arrastrando todo el tiempo. Tambien con recursos compartidos a varios objetos que tendrán una referencia a la información y no una copia por cada uno.
Flyweight: si creo p.ej. 30.000 instancias de un objeto, y de repente nos damos cuenta de que hay una determinada info que es la misma (común) en todas las instancias, la solución es sacarlo fuera, a una clase externa. Esa info común la vamos a poner toda en una clase única y una única instancia
Patróno Facade
ESTRUCTURAL
Se ‘ocultan’ las funcionalidades de una subsistema en funciones de alto nivel.
Facade: Proporciona para un subsistema (paquete con clases relacionadas) un punto unico de acceso que ofrece servicios de más alto nivel que los que ofrece cada una de las clases de ese subsistema individualmente
Patron Adapter
ESTRUCTURAL
Wrapper. Se pone por encima de una clase otra clase para adaptar el uso de la primera, de manera que se ‘adapte’ el uso de las clases al cliente.
Adapter: Una clase A que quiere usar los métodos de otra B pero no sabe o no le viene bien tal cual están definidos. El adapter será una clase intermedia que le ofrece ese método que le viene a A y realizará internamente las llamadas correspondientes a B
Patrón State
COMPORTAMIENTO
Sacar lógica asociada a los estados de una clase, en otra clase que gestione los estados.
State: Consiste en crear una jerarquia de clases que se corresponde con los estados por los que pasa una entidad de negocio y en cada una de estas se define el comportamiento/logica de un estado concreto
Patrón Chain of Responsability (Filter)
COMPORTAMIENTO
Funcionalidades que no tienen que ver con el negocio especifico pero si con el NEGOCIO en cuanto a cosas que hay que hacer. Ej.:Tipo seguridad, encoding, palabras
Chain of Responsability: Representa una serie de objetos enlazados/encadenados de forma que sobre una petición dada, cada uno tendrá un unico cometido funcional y le pasará el control al siguiente “eslabon” de esa cadena.
Patron Memento
COMPORTAMIENTO
CTRL + Z
Recuerda lo que hiciste en la transacción anterior y te da la posibilidad de volver. Rollback
Memento: clases que guardan la estado actual de un objeto, por si después de una modificación hubiera que dejarlo en el estado original. Es nuestro CTRL + Z
Patrón Iterator
COMPORTAMIENTO
Poder recorrer la estructura sin que yo tenga que recorrer la estructura concreta.
Iterator: Define un interface homogéneo (ej. método next) que tienen que implementar las distintas clases de tipo colección. Así los clientes no tendrán que preocuparse por los detalles de como recorrer cada una (dará igual si es un árbol, grafo, lista….siempre se usará el método next)
Patron Strategy
COMPORTAMIENTO
Cierta funcionalidad la separamos/desacoplamos de las clases principales del negocio para no tener que tocarlas. A través de Interfaces y las implementaciones que nos hagan falta y que pueden cambiar en el tiempo sin tocar nuestras clases de negocio
Strategy: Define un interface para un cierto algoritmo de forma que podamos tener por debajo todas sus posibles versiones/implementaciones
Patron Observer
COMPORTAMIENTO
Suscripción y notificación de eventos. Piezas intermerdias entre subsistemas que desacopla los mensajes entre subsistemas de los propios sistemas, de tal manera que el ‘observer’ se encarge de la gestión de estos mensajes.
Observer: Conjunto de clases que se sirven para notificar a ciertos clientes (mediante suscripción) por los cambios que se producen en ciertos objetos
¿Cuál de los siguientes términos hace referencia a patrones generales de software para asignación de responsabilidades
en el diseño orientado a objetos?
a) OOD
b) GRASP
c) Booch
d) Fan-In & Fan-Out
b) GRASP
Señale la respuesta INCORRECTA referente al objeto POCO en .NET:
a) Es una estructura de datos de .NET que solo contiene propiedades o campos públicos.
b) Es el acrónimo de Plain Old CLR Object.
c) No hereda de otra clase o implementa una interfaz.
d) Podrá contener miembros como: métodos. eventos y delegados.
d) Podrá contener miembros como: métodos. eventos y delegados.
Se ha heredado una libreria compilada que realiza la conexión a un importante servicio de comprobación de CI@ve PIN, ¿qué patrón de diseño permite reutilizar este objeto?
a) Adaptador (Adapter)
b) Singleton
c) Chain of responsibility (Cadena de responsabilidad)
d) Iterador (Iterator)
a) Adaptador (Adapter). Mierda de pregunta
Respecto alos patrones de diseño GoF (Gang of Four), indique cuál de las siguientes definiciones se corresponde con el patrón Decorator:
a) Proporciona el poder agregar una nueva funcionalidad a un objeto dinámicamente.
b) Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema.
c) Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.
d) Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación
interna.
a) Proporciona el poder agregar una nueva funcionalidad a un objeto dinámicamente.
Indique cuál de los siguientes es un patrón de tipo creacional:
a) Composite
b) Proxy
c) lterator
d) Singleton
d) Singleton
El patrón de diseño cuyo propósito es desacoplar una abstracción de su implementación de manera que las dos puedan evolucionar independientemente es:
a) Facade
b) Bridge
c) Adapter
d) Wrapper
b) Bridge
Observe el siguiente diagrama:
El diagrama recoge la estructura de clases de un patrón de diseño que se ha considerado adecuado implementar en el nuevo sistema, este patrón permite proporcionar un representante que se encargue de controlar el acceso a un objeto, y se denomina:
a) Patrón Memento.
b) Patrón Bridge.
c) Patrón Adapter.
d) Patrón Proxy.
d) Patrón Proxy.
¿Qué son los principios SOLID?
- SRP –> Principio de responsabilidad única (Single Responsability Principle). Cometido concreto de las clases
- OCP –> Principio de abierto / cerrado (Open/Close Principle). Diseño de clases que permita extenderse para crear nuevos tipos con nuevos comportamientos sin modificar las clases existentes. Deben estar abiertas para su extensión pero cerradas para su modificación
- LSP –> Principio de sustitución de Liskov (Liskov sustitution Principle). Las clases de un programa deben ser REENPLAZABLES por instancias de sus SUBTIPOS –> Polimorfismo
- ISP –> Principio de agregación de la interfaz (Interface segregation Principle). Misma implementación, distintas APIS según el cliente. Muchas interfaces cliente son mejores que una interfaz.
- DIP –> Principio de inversión de dependencia (Dependency Inversion Principle). Debe depender de abstracciones y no de implementaciones.
¿Qué tres catergorías de patrones tenemos en el GoF?
- Creacional
- Estructural
- Comportamiento
¿Qué patrones de acceso a datos conoce?
Son clases especializadad en contenter el código de acceso a la BBDD (Relacional o NoSQL)
- DAO (Data Access Object) –> SQL en la clase
- Repository –> Aísla la capa de datos del resto de la app. Clase normal con @repository en Spring
- ActiveRecord –>ORMs del estilo Active Record mapean un objeto con una fila de la base de datos. En el ejemplo anterior, estaríamos mapeando el objeto User a una fila en la tabla users.
- DataMapper –> En Java tenemos MyBatis. Como ActiveRecord pero con un EntityManager que realiza las operaciones sobre bbdd. Los objetos están totalmente aislados.
¿Que tipo de patrón es un Singleton?
- Creacional
- Limita a 1 el número de intancias que podemos crear de una cierta clase
¿Cuál es el objetivo del Patron Template Method?
Comportamiento
Proporcionar una clase base (generalmente abstracta) con un método a “medio hacer” (método plantilla)
Template Method es un patrón de diseño de comportamiento que define el esqueleto de un algoritmo en la superclase pero permite que las subclases sobrescriban pasos del algoritmo sin cambiar su estructura.