Diseño de Software basado en Patronescbustaca/docencia/DSBP-2016-03... · Meta-Modelos Software...

Post on 19-Sep-2018

223 views 0 download

Transcript of Diseño de Software basado en Patronescbustaca/docencia/DSBP-2016-03... · Meta-Modelos Software...

1

Diseño de Software basado en Patrones

Métodos de Diseño

César Julio Bustacara Medina

Facultad de Ingeniería Pontificia Universidad Javeriana

Meta-Modelos

• Se provee un meta-modelo que es una abstracción de varias técnicas de diseño arquitectónico.

• Este modelo será usado para analizar y comparar las técnicas actuales de diseño.

Architecture Qualities

Process

Architecture

Representation

The “what” The “why”

The “how” The “who”

System

Features

Architecture S/W Requirements

System

Quality Attributes

Satisfies

Constrain

Organization

Architect

Skills

Stakeholders

Defines role

Produces

Follows

Defines Technology

Meta-Modelos

Meta-Modelos Software

Architecture

Software

Architecture

Description

Architectural

view

is made of

is represented by

Architecture

Design Process

produces

Form

Component

Connection

Architectural

Pattern

is a

is made of

Software

Architects

are actors in

Logical view

Process

view

Implemen-

tation view

Deployment

view

Requirements

satisfies

Architectural sty le

has

has

has

is a

Sy stem

architecture

is part

of

Architecture

Style guide

Constraints

constrains

constrains

Use case

view

relates to

Architectural

Blueprint

depicts

Meta-Modelos

Adaptado de P. Kruchten, B. Selic, W. Kozaczynski. “Describing Software Architecture with UML”, 2001

Cliente Conocimiento

del Dominio

Especificación

Requerimientos Conocimiento

del Dominio

Artefactos

Abstracción

de la solución

Conocimiento

del Dominio

Descripción

Arquitectura

Capturar

Requerimientos

Extraer

estructuras

de la solución

Especificación

arquitectura

Meta-modelos

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Conocimiento del Dominio

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Se refiere al conocimiento sobre el problema desde una perspectiva del cliente.

Incluye documentos de especificación de requerimientos, entrevistas con clientes, prototipos sugeridos por los clientes, etc.

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Se refiere al conocimiento sobre el problema desde una perspectiva del proceso de negocio.

Incluye conocimiento sobre el proceso del negocio y también vista de los clientes y reportes de análisis de mercado

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Se refiere al conocimiento que proveen los conceptos del dominio para resolver el problema y el cual esta separado de los requerimientos específicos y el conocimiento sobre como se producen los sistemas de software.

Esta clase de conocimiento esta incluido en libros, revistas científicas, y manuales, entre otros.

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Se refiere a los antecedentes (background) generales y experiencias del ingeniero de software y también puede incluir reglas generales.

Conocimiento

del Dominio

Conocimiento del

Dominio del

Problema

Conocimiento del

Dominio del

Negocio

Conocimiento del

Dominio de la

Solución

Conocimiento

General

Conocimiento del

Sistema/

Producto

es-un

Se refiere al conocimiento sobre un sistema, una familia de sistemas o a un producto (JEE, .NET, …)

Métodos de Diseño • ABD Quality-driven

• Artefact-driven

• Use Case/Scenario-

driven --> RUP

• Pattern-driven

• Domain-driven

• Functionality-based

• ABAS

ABD- Architecture Based Design

• Diseño Basado en la Arquitectura (Architecture Based Design - ABD)

• El promotor principal es Bachmann, quien provee una estructura para producir la arquitectura conceptual de un sistema.

• ABD determina las direcciones arquitecturales para el sistema.

• Es la combinación de requerimientos del negocio, de calidad y funcionales que influyen en la arquitectura.

ABD (Continue)

• Elementos:

– Descomposición funcional usando acoplamiento y cohesión

– Realización de los requerimientos de calidad y negocio a través de la selección de un estilo arquitectónico

– Uso de plantillas de software para describir un sistema de software de un tipo particular. Como deben interactuar los elementos...

Quality-driven

• Esta basado en la utilización de estilos

arquitectónicos y patrones como un principio

de diseño de arquitecturas de alta calidad.

• Jan Bosch promueve este método, y

considera que el diseño de arquitecturas de

software toman ventaja de los requerimientos

de calidad desde las etapas tempranas de

desarrollo.

Artefact-driven

• Inicia a partir del texto de los requerimientos

• Mira tipos de artefactos en el método y trata de identificar artefactos desde la especificación de requerimientos usando reglas heurísticas

• Agrupa los artefactos relacionados en SUBSISTEMAS, estos son los componentes arquitectónicos

• Define las relaciones entre los subsistemas

Artefact-driven (Continue)

• Técnicas que extraen la descripción de la arquitectura a partir del artefacto descripciones del método

• Ejemplos:

– Métodos de Análisis y Diseño Orientado a

Objetos tales como OMT y OAD

Use Case/Scenario-driven

• Basado en los casos de uso

• Extraer los casos de uso

• Identificar las clases fundamentales a partir de los casos de uso

• Agrupar las clases en packages, estos son los componentes arquitectónicos

• Definir las relaciones entre los packages

RUP

• Esta centrado en las vistas de diferentes modelos del sistema, casos de uso, análisis, diseño, implementación y despliegue

• Basado en el modelo "4+1" de Krutchen

Pattern-driven

• Inicia con la especificación de requerimientos

• Selecciona los patrones apropiados desde una base de patrones

• Organizar o componer los patrones seleccionados

Functionality-based

• Jan Bosch propone el método de diseño, verificar el texto 1999

ABAS

• Estilo Arquitectónico Basado en Atributos (Attribute-Based Architectural Style - ABAS)

ABAS

Attribute-Based Architectural Styles (ABAS)

• Un ABAS agrega un framework de modelamiento basado-atributos para un estilo arquitectónico.

• ¿Por qué esto?

– para hacer diseño arquitectónico más fácil y fiable

– para tener un conjunto estándar de preguntas de análisis basado en los atributos asociados al estilo

– para reducir la brecha entre el diseño y el análisis

Definición

1. La topología de los tipos de componentes y la descripción del patrón de datos y control, y la interacción entre los componentes.

2. Un modelo específico de los atributos de calidad que proporcione un método de razonar sobre el comportamiento de los tipos de componentes que interactúan en el patrón definido.

3. El razonamiento que resulta de aplicar el modelo específico de atributos a la interacción de los tipos de componentes.

Caracterizaciones

• Para cada atributo, la caracterización describe: – los estímulos del interés

– los parámetros arquitectónicos

– las respuestas

• Para ayudar en la estructuración de un ABAS y entender cada atributo, se utilizan las caracterizaciones de los atributos.

Modelamiento de Decisiones Arquitectónicas usando ABAS

Estructuras de un ABAS 1. Descripción del Problema: el problema que está siendo

solucionado por este ABAS, indicado informal.

2. Estimulo/Respuestas: una caracterización de los estímulos que el ABAS responde a, y las medidas de los atributos de calidad de las respuestas.

3. Estilo arquitectónico: componentes, conectores, propiedades/características, parámetros, topología, restricciones.

4. Análisis: una descripción de cómo los modelos de atributos de calidad se relacionan formalmente con el estilo arquitectónico.

5. Ejemplos: cómo se utiliza este ABAS.

Use Case/Scenario-driven RUP “4+1”

Cliente Modelo del

Dominio

Especificación

Informal

Artefacto

Modelos de

Análisis/Diseño

Descripción

Arquitectura

Paquetes

1. Describe

2. Realiza

Conocimiento

General 3. Agrupa

Abstracción de la solución

4. Composición

Modelo del

Negocio

Modelo de

Casos de Uso

Especificación de Requerimientos

Vistas

• Una vista es una representación de un conjunto de elementos del sistema y sus relaciones.

• Es una representación de alguna de las muchas estructuras presentes simultáneamente en un sistema de software.

[11]

Tipos de vistas

Unidades de

implementación

o áreas de responsabilidad

Funcional

Unidades de computo y

vehículos de comunicación

entre ellas (almacenes,

paralelismo...)

Relación entre elementos

de software y del ambiente

de creación o ejecución

(procesadores, archivos, roles)

Adaptado de [3]

Elegir vistas

Producir lista de vistas candidatas Generar una tabla de interesados vs. intereses,

indicando cuánto detalle necesita cada interesado de cada interés (idealmente con un taller)

Combinar vistas Identificar aquellas vistas en la tabla que solo

requieren una descripción general o interesan a pocos

Identificar aquellas vistas que se pueden combinar

[11]

Elegir vistas

Priorizar vistas

Mejor un enfoque de amplitud y no profundidad en principio

Algunos intereses son más prioritarios

Tiene prioridad lo que ayude a determinar el cumplimiento con la misión

Documentar vistas: plantilla

Adaptado de [11]

(elementos y relaciones)

(relación de vista con el medio)

(como variar la vista)

“4+1 vistas”

Logical View

End-user

Functionality

Implementation View

Programmers

Software management

Process View

Performance

Scalability

Throughput

System integrators

Deployment View

System topology

Delivery, installation

Communication

System engineering

Conceptual Physical

Scenarios

Vista de diseño

Vista de

procesos

Vista de

despliegue

Vista de

implementación

Vista de

casos de uso

vocabulario,

funcionalidad

comportamiento

Funcionamiento,

capacidad decrecimiento,rendimiento

topología del

sistema,distribución,entrega,

instalación

ensamblado del

sistema,gestión deconfiguracionesVista de diseño

Vista de

procesos

Vista de

despliegue

Vista de

implementación

Vista de

casos de uso

vocabulario,

funcionalidad

comportamiento

Funcionamiento,

capacidad decrecimiento,rendimiento

topología del

sistema,distribución,entrega,

instalación

ensamblado del

sistema,gestión deconfiguraciones

Vistas de la arquitectura de un sistema

UP

Vista lógica (de diseño)

• Descomposición orientada a objetos

• Estilo: Orientado a objetos

• Soporta requerimientos funcionales, descompuestos en abstracciones (objetos).

• Puede acompañarse de descripción dinámica con diagramas de estado.

[3]

Vista lógica (de diseño): notación

Tomado de [3]

Vista de procesos

• Descomposición en procesos • Considera los requerimientos no-funcionales como

desempeño, disponibilidad, concurrencia, integridad, tolerancia a fallos...

• Se puede representar como un conjunto de redes de procesos.

• Proceso: grupo de tareas • Tareas: hilos separados de control que pueden ser

planificados individualmente en un nodo de procesamiento.

• Estilo: tubos y filtros, cliente/servidor...

[3]

Vista de procesos: notación

Tomado de [3]

Vista de desarrollo (implementación)

• Descomposición en subsistemas

• Se enfoca en la organización de los módulos en el ambiente de desarrollo como una jerarquía de niveles

• Estilo: por niveles (4 a 6)

[3]

Vista de desarrollo (implementación): notación

Tomado de [3]

Vista física (de despliegue)

• Mapear el software al hardware

• Se ocupa de requerimientos no-funcionales como disponibilidad, confiabilidad, desempeño y escalabilidad.

• El software se ejecuta en nodos de procesamiento

• Se deben mapear las redes, procesos, tareas y objetos a dichos nodos.

[3]

Vista físicas (de despliegue): notación

Tomado de [3]

Vista de escenarios (casos de uso)

• Unirlo todo

• Los escenarios son instancias de los casos de uso, que constituyen guiones (scripts) del sistema

• Esta vista es redundante con las otras, sirve para:

– Ayudar a descubrir los elementos arquitectónicos

– Validar y explicar el diseño arquitectónico

[3]

Relación entre las vistas

Vista lógica Vista de Implementación

Vista de Procesos

Vista de Despliegue

Tipos de resultados

• Cada una de las vistas presenta:

• Aspectos estáticos: mediante los diagramas estructurales de UML.

• Aspectos dinámicos: mediante diagramas dinámicos de UML.

• Ejemplo: se puede trabajar con la vista de casos de uso estática y la vista de casos de uso dinámica, la vista de diseño estática y la vista de diseño dinámica, y así sucesivamente.

Vistas y Diagramas en UML Nombre Descripción Aspectos

Estáticos Aspectos

Dinámicos

Vista de casos de uso

Proyecta el comportamiento del sistema tal y como es percibido por los: usuarios finales, analistas y en-cargados de las pruebas. Especifica las fuerzas que configuran la arquitectura del sistema.

Diagramas de casos de uso

Diagramas de interacción

Diagramas de estados

Vista de diseño Soporta los requisitos funcionales del sistema: servi-cios proporcionados a los usuarios finales. Vocabula-rio del problema y su solución: clases, interfaces y colaboraciones.

Diagramas de clases

Diagramas de objetos

Diagramas de interacción

Diagramas de estados

Diagramas de actividades

Vista de procesos Cubre el funcionamiento, capacidad de crecimiento y rendimiento del sistema. Mecanismos de sincroniza-ción y concurrencia del sistema: hilos y procesos.

Diagramas de clases (activas)

Diagramas de objetos

Diagramas de interacción

Diagramas de estados

Diagramas de actividades

Vista de implemen-tación

Cubre la gestión de configuraciones de las distintas versiones de un sistema a partir de componentes y archivos quasi-independientes. Ensamblado y dispo-nibilidad del sistema: componentes y archivos.

Diagramas de componen-tes

Diagramas de interacción

Diagramas de estados

Diagramas de actividades

Vista de despliegue Contiene los nodos que forman la arquitectura (topo-logía) hardware sobre la que se ejecuta el sistema a través de sus componentes. Está destinada a repre-sentar la distribución, entrega e instalación de las partes que forman el sistema informático físico.

Diagramas de despliegue Diagramas de interacción

Diagramas de estados

Diagramas de actividades

Diagra-

ma de

Casos de

Uso

Diagrama

de

Interac-

ción-

Secuen-

cia

Diagrama

de

Interacción-

Colabora-

ción

Diagra-

ma de

Clases

Diagra-

ma de

Objetos

Diagrama

de

Estados

Diagrama

de

Activida-

des

Diagrama

de Compo-

nentes

Diagrama

de Desplie-

gue

Estática

Dinámica

Estática

Dinámica

Estática

Dinámica

Estática

Dinámica

Estática

Dinámica

Vista de

Despliegue

Vista de Casos

de Uso

Vista de

Diseño

Vista de

Procesos

Vista de

Implemen-

tación

VISTAS Y DIAGRAMAS EN UML

Cuántas vistas pueden existir?

• Pueden existir modelos simplificados que se ajusten al

contexto

• No todos los sistemas requieren todas las vistas:

– Simple procesador: Eliminar la vista de despliegue

– Simple Proceso: Eliminar la vista de procesos

– Programas muy pequeños: eliminar la vista de implementación

• Adicionar vistas:

– Vista de Datos, Vista de Seguridad, etc.

Iteraciones y Arquitectura

Use case Model

Design Model

Deployment Model

Test Model

Implementation Model

Content

Diseño Arquitectonico

• Identifica, selecciona, y valida elementos “significativos arquitectonicamente”

• No todo es una arquitectura – Main “business” classes

– Important mechanisms

– Processors and processes

– Layers and subsystems

– Interfaces

• Produce un Documento de la Arquitectura de Software

Secuencia en el diseño Arquitectónico

• Seleccionar escenarios: críticos y de riesgo • Identificar clases principales y

su responsabilidad

• Distribuir el comportamiento sobre las clases

• Estructurar en subsistemas, layers, definir interfaces

• Define distribución y concurrencia • Implementar un prototipo arquitectónico • Derivar pruebas a partir de los casos de uso • Evaluar la arquitectura

Iterar

Use case view

Logical view

Deployment view

Implementation view

Process view

Proceso iterativo de desarrollo de arquitectura

• Empezar

– Se eligen un pequeño número de escenarios (casos de uso)

– Se elabora un prototipo arquitectónico

– Se identifican y representan los elementos según las 4 vistas

– Se implementa, prueba, mide y analiza la arquitectura

– Se capturan las lecciones aprendidas

• Iteración

– Se reevalúan los riesgos

– Se extiende el grupo de escenarios a considerar

– Se eligen los escenarios que tengan menor riesgo y mayor cobertura

– Se hace un guión de los escenarios acorde con la arquitectura existente

– Se descubren elementos arquitectónicos adicionales

– Se actualizan las vistas

– Se actualiza la implementación

– Se prueba y mide en el ambiente de producción si es posible

– Se revisan las 5 vistas

– Se actualizan las guías y racionalidad de la arquitectura

– Se capturan las lecciones aprendidas

[3]

Documentar la arquitectura: plantilla

• Página de título

• Historia de cambios

• Tabla de contenido

• Lista de figuras

Alcance

Referencias

Arquitectura de software

Metas y restricciones arquitectónicas

Arquitectura lógica

Arquitectura de procesos

Arquitectura de desarrollo

Arquitectura física

Escenarios

Tamaño y desempeño

Calidad

• Apéndices

– Acrónimos y abreviaciones

– Glosario

– Principios de diseño

[3]

Cliente

Conocimiento

General

Especificación

Requerimientos Artefacto

Modelos de

Análisis/Diseño

Descripción

Arquitectura

Subsistemas

1. Describe

2. Busca

Conocimiento

General 3. Agrupa

Abstracción

de la solución

4. Composición

Arquitectura y dependencias

• El diseño de muchas aplicaciones de software inician como una imagen en la mente del diseñador.

Pero no siempre llevan a una solución adecuada!!!

60

Detección de un diseño degradado

Síntomas de un diseño degradado

• RIGIDEZ: Tendencia del software a ser difícil de cambiar. – Un diseño rígido, involucra que al cambiar los

requerimientos de diseño deberán realizarse cambios muy grandes del mismo.

– Significa que el diseño no tiene la capacidad de separarse en módulos independientes.

61

Detección de un diseño degradado

• FRAGILIDAD: Un cambio en alguna parte del software, ocasiona cambios en otros sectores. – Tal software causa la sospecha de administradores

y consumidores de que los diseñadores y desarrolladores han perdido control de su software.

– Genera desconfianza y se pierde la credibilidad.

62

Detección de un diseño degradado

• INMOVILIDAD: Inhabilidad de reusar software

• Por ejemplo: un ingeniero descubre que puede utilizar módulos que ya ha diseñado, pero debido a la inmovilidad de su diseño, deberá volver a reescribir dicho módulo para este caso específico.

• Cuando un módulo resuelve un problema que puede llegar a aparecer en otro momento es muy importante tener en cuenta el concepto de inmovilidad.

63

Detección de un diseño degradado

• VISCOSIDAD: Enfrentados a un cambio, los ingenieros usualmente encuentran más de una forma de realizarlo.

• De entorno: Entorno de desarrollo ineficiente.

• De diseño: Cuando los métodos de preservar el diseño son mas difícil de emplear que los métodos que no preservan el diseño.

64

CONCLUSION

Los módulos deben ser lo más cohesivos (unidos) posible y lo menos dependientes posible.

65

Arquitectura y dependencias

Las arquitecturas de acuerdo a las definiciones (Perry, 1992) están conformadas por:

• Componentes

• Conectores

• Forma

• Razonamiento (rationale)

66

Qué es un Componente?

• OMG Unified Modeling Language Specification [OMG01] define un componente como – “… a modular, deployable, and replaceable part of a

system that encapsulates implementation and exposes a set of interfaces.”

• OO view: un componente contiene un conjunto de clases colaborando

• Conventional view: lógica, las estructuras de datos internas que son requeridas para implementar el procesamiento lógico, y una interface que habilita al componente para ser invocado (llamada y datos).

67

Componente OO

Prin t Job

c om put eJob

in i t ia t eJob

number Of Pages

number Of Sides

paper Type

paper Weight

paper Size

paper Color

magnif icat ion

color Requir ement s

pr oduct ionFeat ur es

collat ionOpt ions

bindingOpt ions

cover St ock

bleed

pr ior it y

t ot alJobCost

WOnumber

PrintJob

comput ePageCost ( )

comput ePaper Cost ( )

comput ePr odCost ( )

comput eTot alJobCost ( )

buildWor kOr der ( )

checkPr ior it y ( )

passJobt o Pr oduct ion( )

elaborated design c lass< < in t er f ace> >

co m p u t eJo b

comput ePageCost ( )

comput ePaper Cost ( )

comput ePr odCost ( )

comput eTot alJobCost ( )

< < in t er f ace> >

in it iat eJo b

buildWor kOr der ( )

checkPr ior it y ( )

passJobt o Pr oduct ion( )

design c om ponent

num berOf Pages

num berOf Sides

paperTy pe

m agni f ic a t ion

produc t ionFeat ures

Prin t Job

c om put eJobCost( )

passJobt oPrin t er( )

analy sis c lass

68

Componente convencional

ComputePageCost

design component

accessCostsDB

getJobData

elaborated module

PageCost

in: job size in: color=1, 2 , 3, 4

in: pageSize = A, B, C, B out : BPC

out : SF

in: numberPages in: numberDocs

in: sides= 1, 2 in: color=1, 2 , 3, 4

in: page size = A, B, C, B out : page cost

job size ( JS) =

num berPages * num berDocs;

lookup base page cost ( BPC) -->

accessCost sDB ( JS, co lor) ;

lookup size fact or ( SF) -->

accessCost DB ( JS, co lor, size)

job com plexit y fact or ( JCF) =

1 + [ ( sides-1) * sideCost + SF]

pagecost = BPC * JCF

get JobDat a ( num berPages, num berDocs,

sides, co lor, pageSize, pageCost )

accessCost sDB (jobSize, co lor, pageSize,

BPC, SF)

com put ePageCost( )

69

Diseño de componentes basados en clases

• Antes de pensar en toda una arquitectura de software, es necesario identificar si un componente esta bien diseñado.

• Sugerencia Usar los principios de diseño, acompañados de los principios de dependibilidad (cohesión y acoplamiento)

70

Principios de diseño básicos

71

• The Open-Closed Principle (OCP). “A module [component] should be open for extension but closed for modification.

• The Liskov Substitution Principle (LSP). “Subclasses should be substitutable for their base classes.

• Dependency Inversion Principle (DIP). “Depend on abstractions. Do not depend on concretions.”

• The Interface Segregation Principle (ISP). “Many client-specific interfaces are better than one general purpose interface.

• The Release Reuse Equivalency Principle (REP). “The granule of reuse is the granule of release.”

• The Common Closure Principle (CCP). “Classes that change together belong together.”

• The Common Reuse Principle (CRP). “Classes that aren’t reused together should not be grouped together.”

The Open-Closed Principle (OCP)

• Debemos ser capaz de modificar los módulos sin modificar la fuente de código de dicho modulo.

• La abstracción es la clave para el OCP.

• Las clases abstractas presentan un nivel de "abstracción" tan elevado que no sirven para instanciar objetos de ellas y solo sirven para derivar otras clases.

• Técnicas: Polimorfismo dinámico – Polimorfismo estático

72

73

Ejemplo: public class Animal(){ public void habla(){ System.out.println("No se que soy"); } } public class Perro() extends Animal{ public void() habla(){ System.out.println("Guau"); } } public class Gato() extends Animal{ public void() habla(){ System.out.println("Miau"); } public class Zoo(){ public static void main(String[] args) { Animal animal = new Gato(); animal.habla(); animal=new Perro(); animal.habla(); } } El resultado por consola será: "Miau" "Guau"

Polimorfismo dinámico: es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.

The Open-Closed Principle (OCP)

The Open-Closed Principle (OCP)

74

Ejemplo: public class Animal(){ public void habla(int a){ if a=1 System.out.println("Guau"); else if a=2 System.out.println("Miau"); } } public class Zoo(){ public static void main(String[] args) { Animal animal = new Animal(); animal.habla(1); animal.habla(2); } } El resultado por consola será: "Miau" "Guau"

Polimorfismo estático: es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados

The Liskov Substitution Principle (LSP)

• Las clases se deben diseñar de forma que cualquier clase derivada sea aceptable donde lo sea su superclase.

76

Ejemplo: el circulo en si es un elipse, todos los círculos son elipses que coinciden en sus focos por esto podemos modelar al circulo como un caso particular de elipse y no al revés.

Las subclases deben ser sustitutas de sus clases base. Un usuario de una clase base debe continuar funcionando correctamente si se le pasa una instancia de una clase extendida.

Violaciones del LSP son violaciones latentes del OCP.

• Depende de abstracciones y no depende de implementaciones.

–Usar clases abstractas o interfaces para que las clases cliente que utilizan estas abstracciones, no conozcan nada de las implementaciones que se harían en las clases que extienden de las abstractas o implementan las interfaces.

77

The Dependency Inversion Principle (DIP)

The Dependency Inversion Principle (DIP)

• Arquitectónicamente, los módulos de alto nivel tratan con las políticas de alto nivel de la aplicación. A estas políticas generalmente no le interesan los detalles de sus implementaciones.

78

Cualquier cosa concreta es volátil. La no volatilidad no es un reemplazo para la capacidad de sustitución de una interface abstracta.

The Interface Segregation Principle (ISP)

• Los clientes de una clase no deberían depender de interfaces que no utilizan

82

Ejemplo: La figura muestra un sistema de clientes y una gran interface para atenderlos, como vemos si necesitamos realizar un cambio en uno de los métodos del cliente A esto afectara al cliente B y cliente C. Por lo tanto será necesario recompilar y redistribuirlos.

The Interface Segregation Principle (ISP)

83

Solución: utilizar para cada cliente una interfaz específica. De este modo si la interface para el cliente A necesita un cambio los clientes B y cliente C no serán afectados.

Como con todos los principios, se debe cuidar de no exagerar en su uso!!!

Independencia Funcional

84

“Este modulo tiene una sola entrada y no necesita de otro para

funcionar”

El diseño de software debiera ser tal que cada modulo direcciones una

subfunción especifica de los requerimientos y tenga una interfaz simple

cuando se lea desde otra estructura.

Se alcanza desarrollando módulos con una sola función y además debemos

tener una aversión al excesivo uso de los módulos.

Calcular Sueldo neto

•Calcular sueldo base

•Cálculo leyes sociales

•Cálculo de impuesto

Ejemplo :

Modularidad (acoplamiento y cohesión)

85

• Importancia de la independencia funcional

• El software con modularidad efectiva es fácil de

desarrollar debido a que la función puede ser

compartida y las interfaces pueden simplificarse.

• Los módulos independientes son más fáciles de

mantener ya que los efectos de modificaciones se

limitan al modulo evitando la propagación de

errores.

• La independencia funcional es la clave para el buen

diseño y la clave para desarrollar un buen software.

Modularidad (acoplamiento y cohesión)

86

• Es una medida de la fortaleza funcional

relativa de un módulo

• Un módulo cohesivo ejecuta solo una sola

tarea en un procedimiento de software y

requiere poca interacción con otros

procedimientos que se ejecutan en otra

parte del software, es decir, un modulo cohesivo ejecuta una sola cosa.

Cohesión

87

Baja Espectro de la cohesión Alta

Coincidencial

Lógica

Temporal

Procedural o por

procedimiento

Comunicacional

Secuencial

Funcional

Menos deseable Deseable

Tipos de Cohesión

88

Viajar en auto

Viajar a

caballo

Viajar en tren

Viajar en bus

Tipos de Cohesión

1. Coincidencial Se encuentra cuando los elementos o tareas en un modulo no tienen

relación dentro de ellas. Se puede encontrar cuando un programa

grande es dividido en módulos pequeños en forma arbitraria sin aplicar

criterios en la división.

2. Lógica Un modulo es cohesionado lógicamente si sus elementos manifiestan

relaciones en torno a tareas de una categoría general.

89

3. Temporal Es aquella cuyos elementos están relacionados por el hecho de

que todos sus elementos deben ejecutarse en un mismo margen

de tiempo.

Ejemplo: Modulo encargado de Inicializar un sistema.

4. Procedimental Es cuando todos los elementos del modulo están relacionados en

forma tal que no involucra relación de actividades sino que en un

conjunto de reglas se caracteriza porque el control fluye de una

actividad a otra. Los elementos de un modulo están relacionados y

deben desarrollarse en un orden especifico.

Ejemplo: Limpiar utensilios de cocina, preparar almuerzo.

"El orden es meramente coyuntural y no existe una lógica de operación

derivada de un proceso específico."

Tipos de Cohesión

90

Tipos de Cohesión

5. Comunicacional Es aquella cuyos elementos participan en actividades cuyos

elementos usan los mismos datos de entrada y salida.

Ejemplo : Impresión

Grabación de archivo.

6. Secuencial Se presenta cuando los elementos están involucrados en

actividades tales de manera que los datos de un a actividad sirven

como entrada a la próxima actividad.

Ejemplo : Leer siguiente transacción

Actualizar maestro

91

Tipos de Cohesión

7. Funcional

Todos lo elementos de un modulo se

encuentran relacionados al desempeño de una

sola función.

Ejemplo : Cálculo sueldo neto

92

Ejemplo : Verbo imperativo Objeto

Leer Registro de transacción

Calcular Sueldo neto

Para determinar la cohesión de un modulo

1. Se debe escribir una frase describiendo la

función del módulo y luego hacer un análisis de

esa frase, si de ese análisis el módulo puede

ser expresado como un verbo imperativo

preciso y el predicado como un objeto

específico => hay cohesión funcional.

93

Para determinar la cohesión de un modulo

2. Si el módulo puede ser expresado en forma de un cierto número de acciones, ej: validar transacciones, actualizar maestro, es decir, encontramos más de una relación del verbo imperativo estamos en presencia de una cohesión secuencial.

3. Si el módulo puede ser expresado en término de cierto nº de funciones que están realizando sus tareas con los mismos datos estamos en presencia de una cohesión comunicacional.

Ejemplo : un módulo que permita calcular promedio,

salario mínimo y salario máximo de los empleados.

Las 3 tareas se ejecutarán con los mismos datos.

94

Para determinar la cohesión de un modulo

4. Si el módulo se puede expresar en función de nombres típicos de diagrama de flujo (rutina, switch, módulo) cohesión procedural. La definición describe el procedimiento y el contenido.

5. Si los módulos pueden asociarse a nombre relacionados con cuentas temporales cohesión temporal

Ejemplo : END-OF-FILE

START-UP

95

Para determinar la cohesión de un modulo

6. Si el módulo puede expresarse en propósitos generales más que propósitos específicos habrá cohesión lógica.

7. Si los nombres de módulo son poco significativos hay cohesión coincidencial. Aquí es muy difícil ponerle un nombre significativo al módulo jefe ya que no tienen ninguna relación.

En esencia el tipo de cohesión se puede determinar a

través de una serie de preguntas.

Ejemplo: Editar datos

Editar datos numéricos (FLAG)

96

Para determinar la cohesión de un modulo

• Es importante alcanzar una cohesión alta y

reconocer una cohesión baja de manera

que el diseño de software pueda alcanzar

una mayor independencia funcional.

• Entre más baja es la cohesión el

particionamiento no es el mejor, por lo

tanto, hay que hacer un reparticionamiento

del problema.

97

Cohesión

𝐶𝑜ℎ𝑒𝑠𝑖ó𝑛𝑡𝑜𝑡𝑎𝑙 = 𝑐𝑜ℎ𝑒𝑠𝑖ó𝑛

7

𝑘=1

𝑀ó𝑑𝑢𝑙𝑜𝑖𝑘

𝑁

𝑖=1

98

Acoplamiento

• Es el grado de relación o interdependencia que existe entre los módulos de una estructura de programas.

• Para medirlo se toma en cuenta el nº y tipo de conexiones y la información comunicada a través de ellos.

• Mientras menos sea el nº de conexiones y más simples sean éstas será el indicador de un mejor diseño.

99

Acoplamiento

• La conexión simple entre módulos dará como resultado un software fácil de comprender y menos propenso a un efecto en cadena que es causado cuando los errores ocurren en un lugar y se propagan a través del sistema.

• La idea es minimizar el acoplamiento.

• Un bajo acoplamiento va a ser un indicador de un buen diseño (buen particionamiento).

100

Acoplamiento

Se obtiene un buen acoplamiento:

- Eliminando las relaciones innecesarias.

- Reduciendo el nº de relaciones necesarias

- Minimizando la cantidad de elementos

pasados en una relación (transformando

elementos en paquetes de información).

101

Acoplamiento

Se busca obtener un bajo acoplamiento porque:

• Las réplicas de un error son menores.

• Al intercambiar un módulo se asegura que el riesgo de tener que cambiar otro sea mínimo.

• Cuando se hace mantenimiento a un módulo no se desea conocer detalles internos de otros módulos.

• Que sea un sistema muy simple de entender.

102

Bajo Espectro de Acoplamiento Alto

Indirecto

Por datos

Por

estructuras

de datos

Por control

Externo

Común

Por

contenido

Deseable Menos deseable

Tipos de acoplamiento

103

1. Indirecto No existe ninguna relación entre los módulos

porque dependen de módulos distintos.

Ejemplo :

Tipos de acoplamiento

104

2. Por Datos

Dos módulos son de acoplamiento por datos si ellos

se comunican por parámetros, cada parámetro

puede ser un campo simple o una tabla homogénea

( arreglo en que cada elemento tiene información

del mismo.

Ejemplo :

Monto

Kms

Dias

Tipo-auto

Calcular monto

Generar factura de

Alquiler automóvil

Tipos de acoplamiento

105

3. Por estructuras de Datos Dos módulos están acoplados por estructuras si

ambos se refieren a la misma estructura de datos ( registro).

Registro Cliente -Rol socio automóvil

-Nro de licencia

-Tipo de Automóvil

-Km

-Días

-Gasolina usada

-Nro teléfono del socio

Generar factura de

alquiler automóvil

Calcular monto base

Monto por gasolina

Reg

Cliente

Monto

base

Reg

Cliente

Monto

por

gasolina

Tipos de acoplamiento

106

El módulo invocado necesita solo algunos campos, pero igual recibe el registro completo.

Limitaciones:

• Cualquier cambio que se produzca en el registro ya sea en el formato o en la estructura, afectará todos los módulos donde el regitro está asociado y a aquellos módulos que no hagan referencia a los campos modificados.

• Crea dependencia entre módulos y un cambio en uno de ellos afecta a otros aunque no tengan relación

107

Tipos de acoplamiento

El módulo que invoca decide que parte del subordinado debe

ejecutarse.

4. Por Control

Dos módulos estan acoplados por control si uno entrega al otro

información interna de otro módulo.

Ejemplo:

MOD 1

MOD 2

MOD 2

FLAG

FLAG

FLAG

A B

C

Tipos de acoplamiento

108

5. Externo Dos módulos son de acoplamiento externo si

ambos están ligados a un ambiente externo al

software.

Ejemplo: operación de entrada y salida se conecta

a un módulo de dispositivos específicos, formatos y

protocolos de comunicación.

Este debe estar presente en número muy pequeño

dentro de una estructura.

Tipos de acoplamiento

109

6. Común Dos módulos son de acoplamiento común cuando ambos

hacen referencia a una misma área de datos globales.

Ejemplo :

Encontrar nombre de parte Reducir Stock

Tabla de partes ERRORES

Stock insuficiente

Nº de partes

Nº de unidad reducir

Nombre parte

Nombre parte

Nº de parte inexistente

Nº de parte antigua

Parte

Tipos de acoplamiento

110

7. Por contenido

Dos módulos son de acoplamiento por contenido si

uno de ellos hace referencia al interior del otro,

esto se puede dar cuando un módulo se refiere o

cambia los datos de otro módulo.

Es el tipo de acoplamiento menos deseable dentro

de una arquitectura de software.

Tipos de acoplamiento

111

Acoplamiento

𝐴𝑐𝑜𝑝𝑙𝑎𝑚𝑖𝑒𝑛𝑡𝑜𝑡𝑜𝑡𝑎𝑙 = 𝑎𝑐𝑜𝑝𝑙𝑎𝑚𝑖𝑒𝑛𝑡𝑜

𝑁

𝑗=1

𝑀ó𝑑𝑢𝑙𝑜𝑖𝑗

𝑁

𝑖=1

112

Lineamientos de diseño

• Componentes

– Convención para nombrar los componentes debe ser establecida. Esta lista forma parte del modelo arquitectural que luego será refinado para alcanzar el modelo de componentes.

• Interfaces

– Proveen información importante sobre la comunicación y colaboración (ayudan para alcanzar el OPC)

• Dependencias y Herencia

– Es una buena idea modelar las dependencias de izquierda a derecha y la herencia desde abajo (clases derivadas) hacia arriba (clases base)

113

Diseño a nivel de Componentes

• Paso 1. – Identificar todas las clases de diseño que

corresponden al dominio del problema.

– Identificar todos los componentes que corresponden al dominio del problema.

• Paso 2. – Identificar todas las clases de diseño que

correspondan al dominio de la infraestructura.

– Identificar todos los componentes de diseño que correspondan al dominio de la infraestructura.

116

Diseño a nivel de Componentes

• Paso 3.

– Elaborar el diseño de clases que no son adquiridas como componentes reusables.

– Elaborar el diseño de componentes que no son adquiridos como componentes reusables.

Paso 3a. Specify message details when classes or component collaborate. (UML collaboration diagram)

Paso 3b. Identify appropriate interfaces for each component.

Paso 3c. Elaborate attributes and define data types and data structures required to implement them.

Paso 3d. Describe processing flow within each operation in detail. (UML activity diagram)

117

Diseño a nivel de Componentes

• Paso 4. – Describa las fuentes de datos persistentes (bases

de datos y archivos) e identifique las clases requeridas para manejarlos

– Describa las fuentes de datos persistentes (bases de datos y archivos) e identifique los componentes requeridos para manejarlos

• Paso 5. – Desarrolle y elabore representaciones de

comportamiento para las clases – Desarrolle y elabore representaciones de

comportamiento para los componentes (UML statechart)

118

Diseño a nivel de Componentes

• Paso 6. – Elabore los diagramas de despliegue para

proveer detalles de implementación adicional.

• Paso 7. –Obtenga la representación final (diseño) del

componente y evalúelo.

119

Principios de arquitectura de paquetes

La cohesión de los paquetes

• The Release Reuse Equivalency Principle (REP) – Principio de equivalencia de liberación y reuso

– The Common Closure Principle (CCP)

– The Common Reuse Principle (CRP)

• Principios de Acoplamiento de Paquetes – The Acyclic Dependencies Principle (ADP)

– The Stable Dependencies Principle (SDP)

– The Stable Abstractions Principle (SAP)

120