Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Responsable:
Ing. Duwlian Montalti
1
5. Principios del Diseño, Interacción entre diseño y
requerimientos
6. Diseño de atributos de calidad (mantenibilidad,
funcionamiento, usabilidad, seguridad, tolerancia,…).
7. Arquitecturas, patrones de diseño y reuso.
8. Estrategias de diseño: orientado a funciones, a
objetos, a estructura de datos, a aspectos.
2
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
3
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
4
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
¿Estaría bien?
No, hace demasiadas cosas, no debería hacer tantas cosas.
Aplicando el principio de responsabilidad única debería quedar algo así:
5
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de abierto - cerrado (OCP)
Supongamos que tenemos que Cliente y Servidor son dos clases concretas. El
cliente usa el servidor, ¿qué pasa si queremos cambiar el
servidor? Tendríamos que cambiar la implementación del cliente.
6
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de abierto - cerrado (OCP)
7
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de sustitución de Liskov (LSP)
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. Debemos asegurarnos de que las
clases derivadas extiendan la clase base sin alterar su comportamiento de
manera que se viole el contrato.
8
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de sustitución de Liskov (LSP)
9
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de inversión de dependencias (DIP)
Las abstracciones no deben depender de detalles. Son los detalles los que deben
depender de abstracciones.
10
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de inversión de dependencias (DIP)
11
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de segregación de interfaces (ISP)
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.
Este lo veremos con más calma pues en cierta medida llega a ser contradictorio. Por
ahora podemos fijarnos en:
12
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Principio de Hollywood.
El principio de Hollywood dictamina que debe ser una clase superior la que llame a
las clases inferiores, por ejemplo en la herencia debe ser la clase padre quien llame a
sus subclases. Es denominado principio de Hollywood porque se basa en el "Don´t call
us, we´ll call you", (no nos llame, nosotros le llamamos) tan empleado en Hollywood
cuando un actor va a un casting.
Los ejemplos más claros donde se puede ver cómo se aplica este principio son en los
conocidos patrones de diseño Observer, Factory Method, Strategy, y sobre todo, el más
evidente, el patrón Template Method. Este principio no es del todo correcto pues entra en
conflicto con otros principios, más adelante veremos cual es la finalidad concreta de este
principio.
13
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
Son las razones por las que el rango completo de elecciones abiertas a un diseñador
seria restringidas. Estas pueden ser:
14
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
15
PUNTO 5
Principios del Diseño, Interacción entre diseño y requerimientos
16
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
17
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
Diseños de atributos de Calidad - Desempeño
Desempeño usualmente se manifiesta asimismo en las siguientes características.
Rendimiento. Rendimiento es una característica de la cantidad de trabajo que una
aplicación debe de realizar en una unidad de tiempo. Es importante entender
precisamente lo que se entiende por un requerimiento de rendimiento. Es el
rendimiento promedio durante un periodo de tiempo determinado o un rendimiento
máximo? Esto es una distinción crucial.
Ejemplo:
Una aplicación para hacer apuestas en eventos como una carrera de caballos. La
mayoría del tiempo una aplicación de este tipo hace poco trabajo, y por lo tanto el
requerimiento promedio de rendimiento es bajo fácil de realizar. Pero todo el
tiempo hay un evento de carrera, por lo tanto cada tarde, el periodo de 5 o menos
minutos antes de cada carrera se ve cientos de apuestas en el mismo segundo. Si
la aplicación no es capaz de procesar estas apuestas, entonces el negocio pierde
dinero y los usuarios se disgustan. Por lo tanto para este escenario, la
aplicación debe ser diseñada para satisfacer es anticipadamente,
rendimiento máximo y no promedio de rendimiento. De hecho, soportando
solo promedio de rendimiento seria un desastre.
18
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
Diseños de atributos de Calidad - Desempeño
Tiempo de respuesta: Es una característica de latencia (tiempo en el que se
realiza una petición y es contestada) una aplicación muestra una transacción de
negocio en proceso. Tiempo de respuesta es más a menudo asociado en el tiempo
que una aplicación toma para responder a una entrada.
Ejemplo:
Una aplicación de punto de venta soportando un gran almacén. Cuando un artículo
es escaneado en la caja rápida, un segundo o menos responde desde el sistema
con el precio del articulo lo cual significa que el cliente puede ser atendido
rápidamente. Otra vez, es siempre importante distinguir entre los tiempos de
respuesta garantizados y los tiempos de respuesta promedio. Algunas
aplicaciones quizá necesiten que todas las solicitudes sean respondidas en
un tiempo limite definido a esto se le llama tiempo de respuesta garantizado.
Otras aplicaciones quizá especifiquen un tiempo de respuesta promedio
permitiendo tiempos de espera mayores cuando la aplicación esta
extremadamente ocupada (hora pico). También en el último de los casos para un
limite superior el requerimiento del tiempo de respuesta tiene que ser especificado.
Por ejemplo el 95% de las solicitudes deben de ser procesadas en menos de 4
segundos y ninguna solicitud debe tomar mas de 15 segundos.
19
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
Diseños de atributos de Calidad - Desempeño
Tiempo Límite. Todos han escuchado del sistema de pronóstico de tiempo que
toma 36hrs para producir el pronóstico del tiempo para el siguiente día. Es un
excelente ejemplo de un requerimiento para cumplir con el desempeño en un
plazo determinado de tiempo. Un sistema para el pago del seguro social debe de
completar el pago a tiempo para poder hacer el depósito en la cuenta del
reclamante en un día determinado. Si el pago se completa fuera de tiempo el
reclamante no tendrá su depósito en el tiempo esperado y esto puede causar
severos problemas no solo para el reclamante. En general cualquier aplicación
que tiene una ventana de tiempo límite debe tener un requerimiento de
rendimiento en un plazo determinado.
Ejemplo:
Solicitud de carga Basado sobre alguna mezcla de solicitudes definidas sobre
una plataforma de hardware dada, una arquitectura para una aplicación de
servidor puede ser designada para soportar a 100 tps en una carga máxima, con
un promedio de un segundo de tiempo de respuesta.
Conexiones simultáneas Una arquitectura puede ser diseñada para soportar
1000 usuarios. Como va a responderla arquitectura si esta numero crece
significativamente? Si un usuario conectado consume algunos recursos, entonces
es probable que habrá un limite en el numero de conexiones que pueden ser
soportadas efectivamente. 21
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
22
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
Seguridad: Seguridad es un tema técnico complejo que puede solo ser tratado
con un poco de superficialidad. Seguridad se reduce al entendimiento de los
requerimientos precisos de seguridad para una aplicación y la elaboración de
mecanismos para soportarlos.
24
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
25
PUNTO 6
Diseño de atributos de calidad
(mantenibilidad, funcionamiento, usabilidad, seguridad, tolerancia,…).
26
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
27
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
28
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
30
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Cliente Servidor (Client-Server pattern)
31
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Maestro-Esclavo (Master-Slave pattern)
Este patrón consta de dos (2) partes: maestro y esclavos. El componente maestro
distribuye el trabajo entre componentes esclavos idénticos, y determina un resultado
final a partir de los resultados que devuelven los esclavos. Entre sus usos están:
• En la replicación de bases de datos, la base de datos maestra se considera la
fuente autorizada, y las bases de datos esclavas se sincronizan con ella.
• Periféricos conectados a un sistema informático (unidades maestras y esclavas).
32
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Filtros-Tuberías (Pipe-Filter pattern)
Este patrón puede utilizarse para estructurar sistemas que producen y procesan un
flujo de datos. Cada paso de procesamiento está encerrado dentro de un
componente de filtro. Los datos que se van a procesar pasan a través de tuberías.
Estas tuberías pueden utilizarse para almacenar o sincronizar datos. Se utiliza en
desarrollo de aplicaciones que impliquen:
• Compiladores. Los filtros consecutivos realizan el análisis léxico, el análisis
sintáctico, el análisis semántico y la generación de código.
• Procesos de Extracción, Transformación y Carga de Datos (ETLs), en soluciones
de datos, tales como poblar Data Warehouse o Data Marts, entre otras.
33
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Mediador (Broker pattern)
34
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Par-a-Par (Peer-to-Peer pattern)
En este patrón, los componentes individuales se conocen como Par (Peers). Los
pares pueden funcionar como clientes, solicitando servicios a otros pares, y como
servidores, proporcionando servicios a otros pares. Un par puede actuar como
cliente, como servidor o como ambos, y puede cambiar su función dinámicamente
con el tiempo. Entra sus aplicaciones prácticas se encuentran:
• Software de redes para intercambio de archivos tales como Gnutella o G2
• Protocolos multimedia tales como P2PTV y PDTP.
• Productos basados en Cadena de Bloques, tales como criptomonedas, Bitcoin y
Blockchain.
35
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Micronúcleo (Microkernel pattern)
36
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Micronúcleo (Microkernel pattern)
En ese sentido, se usa para implementar aplicaciones basadas en productos. Aquellas que se
empaquetan y se ponen a disposición para descargar sus versiones como un producto típico
de terceros. No obstante, muchas empresas también desarrollan y publican sus aplicaciones
empresariales internas como productos de software, con versiones, notas de publicación y
funciones conectables. Algunos ejemplos prácticos de la arquitectura de Micronúcleo son:
• El IDE de Eclipse, al descargar el producto Eclipse se obtiene poco más que un editor. Sin
embargo, una vez que se empieza a añadir Plug-Ins, se convierte en un producto altamente
personalizable y útil.
• Los antivirus de para computadores de escritorio, donde se van incorporando las semillas
de revisión de virus sin afectar la funcionalidad principal.
• Los parches de seguridad o mejoras de los principales productos de software que soportan
las operaciones en las empresas, tales como sistemas operativos, manejadores de bases
de datos, entre otros.
37
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Bus de Eventos (Event-Bus pattern)
38
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Modelo-Vista-Controlador (Model-View-Controller pattern)
Este patrón, también conocido como patrón MVC, divide una aplicación interactiva
en tres (3) partes como:
• Modelo: Contiene la funcionalidad central y los datos.
• Vista: Muestra la información al usuario (se puede definir más de una vista).
• Controlador: Maneja las entradas del usuario.
• Esto se hace para separar las representaciones internas de la información de las
formas en que la información se presenta al usuario y es aceptada por éste.
Desacopla los componentes y permite una reutilización suficiente del código.
Ejemplo de su utilización:
• Desarrollo de aplicaciones de la World Wide Web en los principales lenguajes de
programación.
• Frameworks web como Django y Rails.
39
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Pizarra (Blackboard pattern)
Este patrón es útil para problemas para los que no se conocen estrategias de
solución deterministas. El patrón de la pizarra consta de tres (3) componentes
principales.
Pizarra - una memoria global estructurada que contiene objetos del espacio de
soluciones.
Fuente de conocimiento: módulos especializados con su propia representación.
Componente de control: selecciona, configura y ejecuta los módulos.
Todos los componentes tienen acceso a la pizarra. Los componentes pueden
producir nuevos objetos de datos que se añaden a la pizarra. Los componentes
buscan determinados tipos de datos en la pizarra, y pueden encontrarlos mediante
la concordancia de patrones con la fuente de conocimiento existente. Ejemplos de
su utilización:
• Reconocimiento de voz.
• Identificación y seguimiento de vehículos.
• Identificación de estructuras proteínicas.
• Interpretación de señales de sonar.
40
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Interprete (Interpreter pattern)
Este patrón se utiliza para diseñar un componente que descifra programas escritos
en un lenguaje específico. Especificamente para evaluar líneas de programas,
sentencias o expresiones escritas en un lenguaje de programación concreto. La
idea básica es tener una clase para cada símbolo del lenguaje. Entre los ejemplos
prácticos de su uso están:
• Lenguajes de consulta de bases de datos como SQL.
• Lenguajes utilizados para describir protocolos de comunicación.
41
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Es uno de los patrones más recientes y se ideó con el objetivo de crear aplicaciones
más flexibles y para facilitar la migración de aplicaciones legadas y monolíticas. En
la práctica, se trata de varias aplicaciones ligeras desacopladas, que atienden
características concretas, que en su conjunto, conforman un programa principal con
múltiples funcionalidades.
Cada componente del software puede funcionar de manera autónoma e
independiente, implementando funcionalidades muy específicas de una aplicación
mucho más general.
42
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
Microservicios (Microservices pattern)
Entre los ejemplos prácticos de aplicaciones basadas en microservicios, se tienen algunas de uso cotidiano,
que son incluso lideres en sus correspondientes nichos de mercado, entre estas se tienen:
• Netflix: Pionera en la implementación de este patrón arquitectónico, cuenta con una plataforma basada
Microservicios desde hace años. Según algunas publicaciones actualmente recibe una media de mil
millones de llamadas a sus diferentes servicios y es capaz de adaptarse a más de 800 tipos de
dispositivos mediante su API de streaming de vídeo, la cual realiza cinco solicitudes a diferentes
servidores para no perder nunca la continuidad de la transmisión.
• Amazon: Migró hace poco mas de tres años a la arquitectura de Microservicios siendo una de las
primeras grandes compañías que la implementaban en producción. Se desconocen las cifras
aproximadas de la cantidad de solicitudes que reciben diariamente, en tanto, no deben ser pocas en
virtud al crecimiento sostenido y progresivo que ha tenido Amazon Web Services (AWS).
43
PUNTO 7
Arquitecturas, patrones de diseño y reuso.
44
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Diseño Estructurado
45
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
46
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
47
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Proceso de diseño
• El sistema en su totalidad es visto según cómo fluyen los datos en éste por medio
de un diagrama de flujo de datos.
• El DFD representa cómo las funciones cambian los datos y el estado de todo el
sistema.
• El sistema se rompe de forma lógica en pequeñas unidades conocidas como
funciones en base a sus operaciones en el sistema.
• Cada función es descrita posteriormente en toda su extensión.
48
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Veamos pues los conceptos importantes que abarca el Diseño orientado al objeto:
50
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Gracias a la POA se pueden encapsular los diferentes conceptos que componen una
aplicación en entidades bien definidas, eliminando las dependencias entre cada uno
de los módulos. De esta forma se consigue razonar mejor sobre los conceptos, se
elimina la dispersión del código y las implementaciones resultan más comprensibles,
adaptables y reusables. Varias tecnologías con nombres diferentes se encaminan a
la consecución de los mismos objetivos y así, el término POA es usado para referirse
a varias tecnologías relacionadas como los métodos adaptativos, los filtros de
composición, la programación orientada a sujetos o la separación multidimensional
de competencias.
51
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Objetivos
El principal objetivo de la POA es la separación de las funcionalidades dentro del
sistema:
• Por un lado funcionalidades comunes utilizadas a lo largo de la aplicación.
• Por otro lado, las funcionalidades propias de cada modelo
Cada funcionalidad común se encapsulará en una entidad.
52
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Conceptos de POA
Los siguientes 3 conceptos son los más importantes de la programación orientada a
aspectos general:
Aspecto (aspect): funcionalidad transversal (se repetirá a lo largo del sistema) que
será implementada de forma separada. Es el concepto principal de este paradigma
puesto que representa la sección de código que se separó del resto del programa.
Punto de corte (pointcut): es el que se encarga de especificar mediante
expresiones regulares (regex) en qué parte del programa se debe de insertar un
aspecto.
Consejo (advice): es el código que ejecutará el aspecto (cuerpo del algoritmo).
53
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
La Programación Orientada a Aspectos o POA
Ventajas:
• Provee una fuerte herramienta para modularizar programas sin importar lo
extensos y complicados que estos sean.
• Vuelve más limpio el código fuente.
• Permite agilizar el proceso de creación de programas cuando muchas personas
están involucradas en el mismo proyecto, y/o están en lugares geográficos
diferentes.
• Puede mezclarse con cualquier otro paradigma de programación.
• Permite la comunicación entre diferentes lenguajes de programación que
comparten aspectos.
Desventajas:
• Sufre de un antipatrón de diseño: acciones a distancia.
• Vuelve difícil de comprender el código puesto que el programa hace tareas que no
están en los métodos que deberían estar.
• Es un poco complicado identificar cuándo es óptimo utilizar POA de forma
eficiente.
54
PUNTO 8
Estrategias de diseño:
Orientado a funciones, a objetos, a estructura de datos y a aspectos.
Proceso de diseño
55