Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TEMA 3
Métodos de desarrollo de software
Desarrollo orientados a objetos
Contenidos
1. Introducción
2. Desarrollo de software orientado a aspectos
3. Desarrollo de software orientado a servicios
4. Desarrollo de software orientado a objetos
5. Métodos orientados a objetos
6. Reutilización
7. Patrones de diseño
8. Portabilidad
9. Interoperabilidad
Introducción (I)
Principales metodologías de desarrollo de software
Métodos estructurados
Descomposición funcional del sistema
Construcción de modelos de datos
Representación del flujo de información
Transformación de diagramas de flujo de datos en estructura
modular de programa
Métodos orientados a objetos: Organización del software
como una colección discreta de objetos que incorporan datos
(atributos) y comportamiento (operaciones o procedimientos)
Desarrollo orientado a aspectos (AOSD) [Elrad et al., 2001]
Enfoque
q metodológicog p
para especificar,
p , diseñar y construir
aspectos
Aspectos: definen los intereses generales que ejercen un impacto
a través de la arquitectura
q del software
Introducción (II)
Otros enfoques de desarrollo de software
Desarrollo basado en componentes
Diseño y desarrollo de aplicaciones (distribuidas) basadas en
componentes software reutilizables
Reutilización:
Arquitecturas
Marcos de trabajo
Patrones de diseño
Componentes
Plataformas: ActiveX/OLE (COM), Enterprise Bean (JavaBeans),
Orbix (CORBA)…
( )
Desarrollo orientado a servicios
Creación de sistemas a partir de servicios autónomos
Arquitectura SOA (Service Oriented Architecture): infraestructura
de alto nivel para crear soluciones basadas en servicios
Servicios: entidades que se implementan, versionan y administran
de forma independiente
p
Aspecto
p de actualización de p
pantalla
Arquitectura SOA
Capas independientes
Integración de servicios implementados en diferentes lenguajes
y alojados
j en diferentes p
plataformas
Soporte a servicios Web
Tecnologías
XML ( eXtensible
Xt ibl M
Markup
k L Language):
) fformato
t estándar
tá d ded
representación de los datos
SOAP ( Simple Object Access Protocol)
Protocolo estándar para transmisión de mensajes entre servicios
Formato de mensajes común y extensible
WSDL (Web Services Description Language): lenguaje para
descripción de servicios común y extensible
UDDI (Universal Description, Discovery and Integration):
estándares para describir y descubrir servicios
Servicios Web
La empresas 5.
Registros Registros de
pueblan el registro de negocio tipo de servicio
con descripciones
de los servicios
3.
que ellas soportan UBR asigna un identificador Los negocios usan estos datos para
único a cada registro de servicio realizar más fácilmente la
y de negocio integración entre ellos sobre la Web
Estándares, programadores y
negocios registran información Registros de
sobre sus tipos
p de servicios tipo
p de servicio
U objeto
Un bj t U clon
Un l
Soporte de comunicación
Transmisión de objetos
Contexto A Contexto B
U espejo
Un j U objeto
Un bj
Un cliente
Un agente
Un actor Un servidor
Encaminamiento
dinámico
Servidor 1
Servidor 3
Un mensaje
j
Tiene un objeto emisor (expedidor) y un objeto receptor (destinatario)
Se puede implementar como una llamada a una operación o como una
señal
ñ l
Agrupa los flujos de control y los flujos de datos en una entidad única
Dato A
Dato B
Objeto 1 Objeto 2
Mensaje
Mensaje síncrono
Mensaje asíncrono
Mensaje de creación
Mensaje encontrado
Mensaje perdido
Mensaje de retorno
activar()
encender()
:Calentador :ControladorEntorno
fallo()
estaPreparado() <<time-out>>
reiniciar() :Luz
:Refrigerador
Ejemplo de sincronización
Nombre de clase
Atributos
Operaciones ( )
Reglas de visibilidad
+ atributo público
# atributo
ib protegido
id
- atributo privado
+ operación pública ( )
# operación protegida ( )
- operación privada ( )
R
Representación
t ió d de llos niveles
i l d de visibilidad
i ibilid d en llas clases
l
Jefe
Empresa Servicio Sección Persona
Empleados
Agregación tipo
agregado-componentes
Agregación recursiva
Ventana
public class Ventana
- barraDeDesplazamiento [2]: Deslizador
- titulo: Cabecera {
- cuerpo: Panel
private Deslizador barraDeDesplazamiento [2];
private Cabecera titulo;
Ventana
1 private Panel cuerpo;
p p
2 1 1 }
Deslizador Cabecera Panel
La herencia
L h i es ell mecanismo
i por ell que las
l clases
l refinadas
fi d incorporan
i
las características de una o más clases superiores en la estructura
jerárquica
Una subclase heredará atributos y operaciones de una superclase que está
más arriba en el árbol jerárquico y a su vez pueden incorporar nuevas
características. Una subclase puede anular una característica de una
superclase definiendo una característica de igual nombre
Una instancia de una subclase es simultáneamente una instancia de todas sus
clases antecesoras (principio de sustitución)
Herencia simple es el tipo de herencia por la que una clase sólo puede
tener una superclase
Herencia múltiple es aquélla que permite que una clase tenga más de
una superclase y que herede características de todos sus antecesores
Una misma característica que llegue por distintas vías se heredará una sola
vez
Es necesario resolver la ambigüedad en la implementación
Métodos de desarrollo de software 37
Análisis de Sistemas
rufus bolita
Métodos de desarrollo de software 40
Análisis de Sistemas
Juega
1
JuegoDados 1 Incluye
Producto EspecificacionDelProducto
descripcion descripcion 1 Describe * Articulo
precio precio numeroSerie
articuloID articuloID
numeroSerie
Ejemplo de uso de clases de especificación
Métodos de desarrollo de software 43
Análisis de Sistemas
sacar dinero
cliente
sistema del banco
transferencias
depositar dinero
operador administración
Clases de
Identificación objetos
bj t Eliminar
Eli i clases
l Clases de
Cl d
Extraer nombres inadecuadas
de requisitos tentativas objetos
Clase Instancias
Nombre de la clase
Nombre_atributo1: tipo_dato1=valor_por_defecto1
Nombre_atributo1: tipo_dato2=valor_por_defecto2
Nombre_operación1(lista_arg1): tipo_resultado1
N b
Nombre_operación2(lista_arg2):
ió 2(li t 2) ti
tipo_resultado2
lt d 2
(Pais) (Ciudad)
España Madrid
Diagrama
Enlaces de
(Pais) (Ciudad) instancias
Suiza Berna
Estación Ventana
Empresa Persona
Curso Profesor
Alumno
Asociación ternaria
Métodos de desarrollo de software 58
Análisis de Sistemas
Persona Microordenador
Archivo Usuario
Permiso de acceso
Atributo de enlace
Empleado
Almacen1 Objeto1
P1 P2 P3
Objeto2 P4
Dinámica de clases
Diagramas de transición de estados
Dinámica de instancias Representación de las clases como paquetes
Diagramas temporales
A B
A es cliente de B
Obj t
Objeto Cl
Clase
Relación cliente/servidor
Notación de Booch
Métodos de desarrollo de software 67
Análisis de Sistemas
Operación 1
Objeto R
Operación 2
Objeto S
Objeto T Operación 3
Objeto U
Operación 4
Tiempo
Diagrama temporal
Métodos de desarrollo de software 68
Análisis de Sistemas
Identificar objetos
Identificador
Identificar estructuras
De clasificación
D l ifi ió Atributos
De composición
Definir la semántica de los datos y Métodos
asociaciones: Relaciones estructurales entre
Reglas
clases
Añadir atributos y operaciones a los objetos
Clase con instancias
Añadir la semántica declarativa de objetos:
Reglas para resolver conflictos
Notación de Graham
Métodos de desarrollo de software 72
Análisis de Sistemas
Reutilización
Reutilización: uso de componentes de un producto para facilitar el
desarrollo de productos diferentes con diferente funcionalidad
Accidental u oportunista
Deliberada o sistemática
Reusabilidad: facilidad con la que se pueden usar esos componentes en
situaciones nuevas
La reutilización sistemática de software proporciona bases para el
incremento de la calidad y la fiabilidad y a largo plazo reduce los costes del
desarrollo y mantenimiento de software
Un componente reutilizable puede ser código, diseño, parte de un manual,
un conjunto de datos de prueba o una estimación de coste o duración
duración...
La reutilización está muy ligada al paradigma de orientación a objetos (OO)
La reutilización es uno de los principales objetivos de la orientación a objetos
Las características de la OO favorecen la reutilización (abstracción,
encapsulamiento, jerarquías de herencia y composición, delegación...) y ayudan
a conseguir los beneficios potenciales que presenta
Reutilización
Reutilización del diseño (I)
Tipos de reutilización:
Marcos de trabajo (Frameworks):
“Diseño reutilizable de todo o parte de un sistema representado por
un conjunto
j de clases abstractas y la forma en la cual sus instancias
interactúan”
“Conjunto de clases que cooperan que constituyen un diseño
reutilizable para una clase específica de software”
Patrones de arquitectura:
Reutilización del diseño a gran escala y de grano grueso:
organización de elementos estructurales y sus interfaces
Los patrones de capas estructuran el sistema en niveles o capas
con distintas responsabilidades
Patrones de diseño: “cada p patrón describe un p
problema qque
ocurre una y otra vez en nuestro entorno, así como la solución a
ese problema, de tal modo que se pueda aplicar esa solución un
millón de veces sin hacer lo mismo dos veces” [Alexander et al.,
1977]
Métodos de desarrollo de software 74
Análisis de Sistemas
Reutilización
Reutilización del diseño (II)
( )
(a) (b) ( )
(c) (d)
Reutilización
Reutilización del diseño (III)
Marcos de trabajo (MT)
Un MT encapsula el patrón de la arquitectura software de un sistema o de
alguna de sus partes
Un MT suele estar compuesto por una colección de patrones de diseño
Los MT se extienden normalmente en los puntos de entrada (hot spots o
hooks)
Según su aplicabilidad los MT pueden ser:
Horizontales:
H i l d di d a modelar
dedicados d l aspectos ddell sistema
i subyacente
b
Verticales: desarrollados específicamente para un dominio de aplicación
concreto
Según el mecanismo de extensión los MT se clasifican en:
Caja blanca: se extienden mediante el mecanismo de la herencia. Los puntos
de entrada se representan como clases y métodos abstractos
Caja
j de cristal: admiten la inspección
p de su estructura e implementación,
p ,p
pero
no su modificación ni reescritura, salvo para sus puntos de entrada
Caja negra: se extienden mediante composición y delegación. No utilizan la
herencia
Caja gris: parte del interior de un MT o componente es público,
público el resto se
oculta
Métodos de desarrollo de software 76
Análisis de Sistemas
Reutilización
Reutilización del diseño (IV)
Extensibilidad de los marcos de trabajo
Hot spots: Puntos de refinamiento predefinido donde se produce la
adaptación o especialización. Permiten conectar una clase o subsistema
p
específico de una aplicación
p p
por
selección de un conjunto de clases o subsistemas suministrado en un MT de
caja negra
programación de una clase o subsistema en un MT de caja blanca
Métodos plantilla (template): métodos complejos que definen
comportamientos abstractos y que pueden ser implementados tomando
como base
b métodos
ét d hookh k elementales
l t l
Métodos hook: implementan los hot spots de un MT. El comportamiento
abstracto se adapta sobreescribiendo los métodos hook
Clases plantilla (template): clases que contienen los métodos plantilla
Clases hook: Clases que contienen los métodos hook
Reutilización
Reutilización del diseño (V)
Ejemplos de extensibilidad de MT
Metapatrón de unificación: flexibilidad en tiempo de desarrollo
calc larTasa()
calcularTasa()
<<abstract>>
Renta
imprimirFactura ()
TemplateHook calcularTasa()
metodoTemplate
p ()
metodoHook()
RentaConcr1 RentaConcr2
calcularTasa() calcularTasa()
Clases hook
Reutilización
Reutilización del diseño (VI)
Ejemplos de extensibilidad de MT
Metapatrón de conexión: flexibilidad en tiempo de ejecución
Template Hook
hookRef
metodoTemplate () metodoHook()
Renta calculo
ca cu o CalculoTasa
imprimirFactura() calcularTasa()
calcularTasa() calcularTasa()
Reutilización
Reutilización del diseño (VII)
Ejemplos de marcos de trabajo
P
Programación
ió de
d Interfaces
I t f gráficas
áfi de
d usuario
i
MacApp
MFC (Microsoft Foundation Classes)
Java AWT y Swing g
Componentes visuales
OpenDoc
BlacKBox
M lti di
Multimedia
JMF (Java Media Framework)
Redes y comunicaciones
MultiTel (Multimedia TELecommunication services )
FIONA
Componentes distribuidos
CORBA
A ti X/OLE/COM
ActiveX/OLE/COM
JavaBeans
Aplicaciones Web - Java
Web MVC: Struts, JSF (Java Server Faces)
Abstracción de servicios: Spring
Persistencia: iBatis, Hibernate
Métodos de desarrollo de software 80
Análisis de Sistemas
Reutilización
Reutilización del diseño (VIII)
Reutilización
Reutilización del diseño (IX)
Reutilización
Reutilización del diseño (X)
Frameworks iBatis (http://ibatis.apache.org)
iBATIS SQL Maps: framework que ayuda a disminuir el código Java para el
acceso a la base de datos y permite fácilmente mapear un JavaBean en
parámetros de una consulta SQL y viceversa, mapear el resultado de una
consulta SQL en un JavaBean
iBatis Data Access Object: framework que proporciona una infraestructura
para la creación de aplicaciones basadas en el patrón DAO (Data Access
Object) y proporciona un interfaz para el manejo de transacciones
independientemente del mecanismo de almacenamiento que se utilice
Reutilización
Reutilización del diseño (XI)
Patrones de arquitectura
Estilo arquitectónico: familia de arquitecturas restringidas por
Un vocabulario de componentes y conectores
Topología
p g
Restricciones semánticas
Patrón arquitectónico: se define para cada estilo de arquitectura
P
Proporciona
i una fforma all estilo
til arquitectónico
it tó i
Se centra en la identificación del problema, contexto del problema y en una
solución con sus consecuencias
Hace hincapié en la composición de patrones de diseño
Taxonomía de estilos y patrones arquitectónicos (POSA [Buschmann et al., 1996])
Jerarquía:
q Layers
y
Flujo de datos: Pipes & Filters
Sistemas distribuidos: Broker
Procesos interactivos: Model-View
Repositorios orientados a datos: Blackboard
…
Métodos de desarrollo de software 84
Análisis de Sistemas
Reutilización
Reutilización del diseño (XII)
Patrones de arquitectura: Layers (I)
Propósito:
Organización de la estructura lógica de gran escala de un sistema en
capas separadas con responsabilidades distintas y relacionadas
Colaboración y el acoplamiento desde las capas más altas a las más
bajas
Elementos:
Componentes: grupo de subtareas que implementan una máquina
virtual en alguna
g capa
p de la jjerarquía
q
Conectores: protocolos/interfaces que definen la interacción entre
las capas
Solución:
Cada capa puede invocar operaciones de las capas inferiores
Las interfaces hacia las capas superiores están estandarizadas
Cada capa es independiente de sus capas superiores
Métodos de desarrollo de software 85
Análisis de Sistemas
Reutilización
Reutilización del diseño (XIII)
Patrones de arquitectura: Layers (II)
Presentación
Consecuencias:
Las capas se pueden desarrollar
independientemente (+)
Swing
…
Mantenimiento: se puede cambiar una
capa sin que afecte a otras capas (+)
R tili
Reutilización:
ió S Se pueden
d iintercambiar
t bi Dominio
diferentes implementaciones del mismo
nivel (+)
S
Soportet para la
l distribución
di t ib ió (+)
( )
Ventas MotorReglas
…
Estandarización basada en capas (p.ej.
OSI) (+)
Servicios Técnicos
El diseño de interfaces entre capas
puede ser difícil (-)
El rendimiento p puede verse afectado ((-)) Persistencia Jess
…
Métodos de desarrollo de software 86
Análisis de Sistemas
Reutilización
Reutilización del diseño (XIV)
Patrones de arquitectura: Layers (III)
Variante distribuida:
Cada una de las capas se puede distribuir
Cada capa
p en un nodo se conecta lógicamente
g con la correspondiente
p
capa en otro nodo
Capas relajadas:
Llamadas combinando varios componentes
p en una capa
p
Protocolo FTP
FTP FTP
Protocolo TCP
TCP TCP
Protocolo IP
IP IP
Protocolo Ethernet
Ethernet Ethernet
Conexión física
Variante distribuida
Métodos de desarrollo de software 87
Análisis de Sistemas
Reutilización
Reutilización del diseño (XV)
Patrones de arquitectura: Layers (IV)
U
Usos:
Aplicación
Protocolos de comunicación
Toolkits de sistemas de ventanas
Presentación
Sistemas operativos
S.I. Modelo de capas en una arquitectura lógica Sesión
Presentación: ventanas GUI, informes, interfaz de voz,
HTML, XML, XMLT, JSP, Javascript…
Aplicación: gestión de las peticiones de la capa de Transporte
presentación, flujo de trabajo, estado de la sesión,
transiciones a ventanas/páginas
ventanas/páginas, transformación de
datos Red
Dominio: gestión de las peticiones de la capa de
aplicación, reglas de dominio, servicios de dominio Enlace de datos
Infraestructura de negocio: servicios de negocio de
bajo nivel
Servicios técnicos: servicios técnicos de alto nivel, Física
persistencia y seguridad
Modelo OSI
Base: servicios técnicos de bajo nivel, estructuras de
datos, hilos, redes, BBDD
Métodos de desarrollo de software 88
Análisis de Sistemas
Reutilización
Reutilización del diseño (XVI)
Patrones de arquitectura: Layers (V)
Presentación Dominio Servicios Técnicos
Reutilización
Reutilización del diseño (XVII)
Patrones de arquitectura: Layers (VI)
Arquitectura JSF-Spring-Hibernate
Capas:
Capa de presentación
Capa de lógica de negocio
Capa de integración
Características:
Orientada a servicios
Separación limpia de capas: uso de
ficheros de configuración XML
Uso con clientes ligeros
(navegadores web, wap…) y pesados
((Swing,
g, SWT…))
Inversión de control o inyección de
dependencias
Mapeo
p del modelo de clases a un
modelo objeto relacional
Arquitectura orientada a servicios
Métodos de desarrollo de software 90
Análisis de Sistemas
Reutilización
Reutilización del diseño (XVIII)
Patrones de arquitectura: Layers (VII)
Arquitectura
A i JSF
JSF-Spring-Hibernate
S i Hib
JSF (Java Server Faces)
Estándar de Sun para la capa de
presentación
t ió W Web
b
Patrón MVC
Modelo: Beans de respaldo
Vista: Páginas JSP
Controlador: Faces Servlet
Spring framework
(http://www.springframework.org)
Abstracción de servicios (SOA)
Publicación: ficheros XML
Localización: patrón Service Locator
Inversión de control (IoC)
Programación orientada a aspectos
Hibernate (http://www.hibernate.org)
Persistencia transparente
Arquitectura orientada a servicios
ORM (Object Relational Mapping)
Métodos de desarrollo de software 91
Análisis de Sistemas
Reutilización
Reutilización del diseño (XIX)
Patrones de arquitectura: Pipes & Filters (I)
Propósito:
Descomponer aplicaciones que procesan flujos de datos en filtros
reutilizables
Elementos:
Componentes: Filters
Leen flujos de datos de entrada y producen flujos de datos de salida
Transformación incremental local de los flflujos
jos de entrada
Los datos son procesados a medida que llegan
Conectores: Pipes
Conducen las salidas de un filtro a la entrada de otro
Procesamiento (filter)
Reutilización
Reutilización del diseño (XX)
Patrones de arquitectura: Pipes & Filters (II)
Solución:
El flujo de datos es unidireccional
Los formatos de datos están estandarizados por lo que los filtros se
pueden combinar de varias formas
Consecuencias:
Fácil ensamblaje de aplicaciones mediante combinación de filtros (+)
Reutilización: dos filtros se pueden conectar si concuerdan los
formatos de datos (+)
Fácil mantenimiento: se pueden añadir o reemplazar filtros (+)
Difícil diseñar filtros incrementales (-)
No son apropiados para aplicaciones interactivas (-)
()
Usos:
Filtros UNIX
C
Compiladores
il d
Optimizadores de código
Métodos de desarrollo de software 93
Análisis de Sistemas
Reutilización
Reutilización del código
Bibliotecas de clases (toolkits)
Conjunto de clases relacionadas y reutilizables diseñadas para
proporcionar funcionalidad útil de propósito general:
Científicas
Matemáticas
Interfaces gráficas de usuario (GUI) . . .
Las bibliotecas de código no imponen un diseño particular, sólo
proporcionan funcionalidad
El diseñador es el responsable de la lógica de control del producto
completo
AbstractFactory
Cliente
CrearProductoA
CreateProductA() ()
CrearProductoB
CreateProductB()()
ProdAbstrA
AbstrProdA
ConcreteFactory1 ConcreteFactory2
ProdA2 ProdA1
CrearProductoA () CrearProductoA ()
CrearProductoB () CrearProductoB ()
AbstrProdB
ProdAbstrB
ProdB2 ProdB1
FabricaIGU
Cliente
crearBarraDesp()
crearMenu()
Menu
MotifFabricaIGU PMFabricaIGU
crearBarraDesp() crearBarraDesp() PMMenu MotifMenu
crearMenu() crearMenu ()
BarraDesp
PMBarraDesp MotifBarraDesp
A li bilid d
Aplicabilidad
Un sistema debe ser independiente de cómo se crean, se
componen y representan sus productos
Un sistema debería configurarse para una familia de productos
Una familia de objetos
j producto relacionados se diseña para
usarse conjuntamente y se debe cumplir esta restricción
Se quiere proporcionar una biblioteca de clases de productos y
se quiere revelar sólo la interfaz
interfaz, no la implementación
Consecuencias
Aísla las clases concretas
Facilita el intercambio de familias de productos
Promueve la consistencia entre productos
Es difícil soportar nuevas clases de productos
Construir()
construirParte()
ConversorTexto
TraductorRTF
convertirCaracter()
analizarRTF() convertirCambioFont()
ConvertirParrafo()
ConversorASCII ConversorTeX
convertirCaracter() convertirCaracter()
getTextoASCII() convertirCambioFont()
convertirParrafo()
getTextoTeX()
TextoASCII TextoTeX
<<abstract> Creador
Producto
metodoFabricacion()
unaOperacion() prod = metodoFabricación()
CreadorConcreto
ProductoConcreto return
t new ProductoConcreto()
P d t C t ()
metodoFabricacion()
<<abstract>>
Documento Aplicacion
Documento d;
open() d = crearDocumento();
close() crearDocumento() setDoc.add(d);
save() nuevoDocumento() d.open()
revert() openDocumento()
MiAplicacion
p
MiDocumento
crearDocumento()
Factory Method
Uso del patrón Factory Method en la creación de una clase aplicación que gestiona diferentes tipos de documentos
Singleton
static unicaInstancia
datosSingleton
return unicaInstancia
static instancia()
operacionSingleton()
getSingleton()
tSi l t ()
Singleton.instancia().operacionSingleton()
Implementación en C++
class Singleton { Singleton* Singleton::_unicaInstancia = 0;
public: Singleton* Singleton::_instancia ( ) {
static Singleton* instancia(); if (unicaInstancia = = 0) {
protected: _unicaInstancia = new Singleton;
Singleton(); }
private: return _unicaInstancia;
unicaInstancia;
static Singleton* _unicaInstancia; }
Métodos de desarrollo de software 109
Análisis de Sistemas
A li bilid d
Aplicabilidad
Debe existir una única instancia de una clase, accesible a los
clientes desde un punto conocido
Debe ser extensible mediante herencia y los clientes deben
ser capaces de usar una instancia extendida sin modificar su
código
ódi
Consecuencias
Acceso controlado a la única instancia
Espacio de nombres reducido. Evita usar variables globales
Permite generalizar a un número variable de instancias
Más flexible que las operaciones de clase
La clase Singleton
g puede tener subclases
p
<<implementation>>
Adapter
peticion()
p () especificoMet1
peticiónConcreta()
Adaptable
Adaptado
Objetivo
Cliente
peticion() peticionConcreta()
especificoMet1()
Adapter
peticion() +adaptable
adaptable. peticionConcreta()
Forma
EditorDeDibujo
marco()
crearManipulador()
return texto.getExtension
Linea FormaTexto
marco() marco()
crearManipulador() crearManipulador()
*
VistaTexto
getExtension()
Componente
Cliente
operacion()
i ()
añadir(Componente)
eliminar(Componente)
obtenerHijo(int)
H j
Hoja Composite
operacion() operacion()
añadir(Componente)
eliminar(Componente) +hijos
hijos
obtenerHijo(int)
Figura
dibujar()
añadir(Figura)
eliminar(Figura)
obtenerHijo(int)
operacion()
CompConcreto
Decorator
operacion()
p () +componente
operacion() componente.operacion()
DecoratorConcrB
DecoratorConcrA
estadoAdicional
estadoAdicional
super.operacion;
operacion() comportAdicional();
operacion() comportAdicional()
ComponenteVisual
mostrar()
VistaTexto
Decorator
mostrar()
mostrar()
() +componente
componente.mostrar
t t ()
DesplazamientoDecorator BordeDecorator
posicionDesplazamiento anchoBorde
Sintactico Simbolo
GeneradorDeCodigo
NodoInstruccion ...
NodoExpresion
GeneradorDeCodigoRISC ...
NodoVariable
GeneradorDeCodigoMaquinaDePila
Consecuencias
Co secue c as
Oculta a los clientes los componentes del subsistema
Proporciona un acoplamiento débil entre un subsistema y los
clientes: cambios en los componentes no afectan a los clientes
No se impide a las aplicaciones clientes el uso de las clases
del subsistema
Sujeto
Cliente
peticion()
SujetoReal Proxy
+sujetoReal sujetoReal.peticion()
peticion() peticion()
Grafico
EditorDocumentos dibujar()
getExtension()
guardar()
cargar()
I
Imagen P
ProxyImagen
I
impImagen nombreFich if (imagen == null)
extension extension {imagen = cargarImagen(nombreFich)}
imagen.dibujar()
dibujar() dibujar()
getExtension() +imagen getExtension() if (imagen == null) {
guardar() guardar() return extension}
lcargar() cargar() else {imagen.getExtension ()}
Iterator
Agregado
Cliente
primero()
crearIterador()
siguiente ()
haTerminado()
elementoActual()
AgregadoConcreto
g g
crearIterador() IteradorConcreto
IteradorLista
Lista
+lista índice
contar()
p
primero()
()
insertar(elemento)
siguientet()
eliminar(elemento) haTerminado()
elementoActual()
ListaAbstracta Iterator
crearIterador()
Cliente p
primero()
()
contar()
insertar(elemento) siguientet()
haTerminado()
eliminar(elemento)
elementoActual()
Lista IteradorLista
ListaConSaltos IteradorListaConSaltos
DirectorDialogo
+director
di t Util
mostrarDialogo()
crearUtiles() director.utilModificado(this)
modificado()
utilModificado(Util)
+campo
mostrarDialogo()
utilModificado(Util)
getSeleccion()
setTexto()
adscribir(Observer) 1 1
1..1 1..*
1.. actualizar()
quitar(Observer)
notificar()
SubjetoConcreto
ObserverConcreto
estadoSujeto
estadoObserver
+sujeto estadoObserver =
obtenerEstado() actualizar()
establecerEstado() return estadoSujeto sujeto.obtenerEstado()
Si
Sistema +observers Observer
RelojAnalógico
SistemaConcreto +sujeto
estadoAnalógico RelojDigital
estadoSujeto
estadoDigital
actualizar()
obtenerEstado()
actualizar()
establecerEstado() +sujeto
return estadoSujeto
estadoAnalógico =
estadoDigital
t d Di it l =
sujeto.obtenerEstado()
sujeto.obtenerEstado()
almacena información horaria
1. establecerEstado()
1.1. notificar()
1.1.1. actualizar()
1.1.2. actualizar()
1. establecerEstado()
1.1. notificar()
1.1.1. actualizar()
1.1.2. actualizar()
Aplicabilidad
Cuando una abstracción tiene dos aspectos y uno depende de
otro
Cuando un cambio de estado en un objeto requiere cambios
en otros objetos, y no sabemos cuántos objetos necesitan
cambiarse
Cuando un objeto debe ser capaz de notificar algo a otros
objetos, sin hacer asunciones sobre quiénes son estos
objetos
Consecuencias
Permite modificar independientemente sujetos y observers
Acoplamiento abstracto entre Sujeto y Observer
Capacidad de comunicación mediante difusión
Actualizaciones inesperadas
Métodos de desarrollo de software 139
Análisis de Sistemas
petición() manejar()
state.manejar()
StateConcr1 StateConcr2
manejar() manejar()
TCPConexion TCPEstado
+estado
abrir() abrir()
cerrar() cerrar()
acuseRecibo() acuseRecibo()
Portabilidad
Un producto se considera portable si es significativamente menos costoso
adaptarlo a una nueva plataforma que construirlo desde el principio
Sistema
Programa Compilador Hardware
operativo
P C H S
P’ C’ H’ S’
Si el coste de convertir P en P’
P es significativamente menor que el coste de codificar P’
P desde el
principio, entonces P es portable
Incompatibilidades
Hardware
H d
Sistema operativo
Software numérico
Compilador
Recomendaciones para lograr la portabilidad:
Aislar las partes dependientes de la implementación
Utili
Utilizar estándares
tá d d
de programación
ió
Utilizar ficheros de datos sin estructura
Métodos de desarrollo de software 143
Análisis de Sistemas
Interoperabilidad (I)
Operación mutua de código objeto de diferentes vendedores, escrito
en diferentes lenguajes y ejecutándose en diferentes plataformas
Estándares que promueven la interoperabilidad:
CORBA (Object Request Broker Architecture)
Estándar internacional y OMG (Object Management Group) para sistemas
orientados a objetos
Soporta la interoperabilidad de aplicaciones ejecutándose en diferentes
máquinas en un entorno distribuido
Interoperabilidad
p entre vendedores,, redes,, lenguajes
g j y sistemas operativos
p
Tecnología sencilla
COM (Component Object Model)
Propuesto por Microsoft
Proporciona un entorno basado en objetos para desarrollar aplicaciones
interoperables en diferentes dominios
Uso de un mecanismo común para todas las situaciones en que un
componente proporciona servicios a otro componente
Mecanismo de comunicación propietario de Microsoft
Tecnología muy compleja
.NET
Tecnología de Microsoft que permite el desarrollo y la integración de sistemas
software basados en servicios Web
Métodos de desarrollo de software 144
Análisis de Sistemas
Interoperabilidad (II)
CORBA (I)
La implementación CORBA permite la comunicación entre objetos de
forma transparente al usario
ORB (Object Request Broker) media y dirige peticiones
puerto_servidor
marshal
recibe_petición
unmarshal
dispatch
método(impl.)
resultado
lt d
marshal
recibe_resultado
resultado unmarshal
Interoperabilidad (III)
CORBA (II)
Separación
p entre la interfaz de los objetos
j y su implementación:
p
Las interfaces para los objetos se especifican en lenguaje IDL (Interface
Definition Language), que forma parte del estándar CORBA
La implementación se puede hacer con cualquier lenguaje que proporcione
enlaces con IDL
Para cada objeto servidor se codifica una interfaz IDL que contiene sólo
las descripciones de datos:
Constantes, tipos, excepciones, atributos y métodos
Un compilador IDL transforma las especificaciones IDL en IDL- stubs
(para los clientes) y en IDL- skeletons (para las implementaciones de
objetos) en el lenguaje de programación elegido (Java, C++, etc.)
Después de compilar la interfaz se implementa en el lenguaje de
programación correspondiente para obtener la implementación del
objeto servidor
compilación <<implements >>
<<Interfaz IDL >> <<Interfaz Java >>
Ejemplo
IEjemplo IEjemplo
Métodos de desarrollo de software 146
Análisis de Sistemas
Interoperabilidad (IV)
Componentes de la arquitectura CORBA (I)
Objeto (servidor) : entidad que puede ser localizada por un ORB y aceptar
peticiones de clientes
Cliente: entidad de programación que hace una petición a un objeto CORBA
(invoca una operación sobre una implementación de un objeto)
Obj t Request
Object R t Broker
B k (ORB) Core C ( ú l ) unidad
(núcleo): id d d
de software
ft que media
di y
dirige peticiones de los clientes CORBA a los objetos servidores CORBA
Interfaz ORB: entidad lógica que desliga a las aplicaciones de los detalles de
implementación
Arquitectura CORBA
Métodos de desarrollo de software 147
Análisis de Sistemas
Interoperabilidad (V)
Componentes de la arquitectura CORBA (II)
Stubs y skeletons CORBA IDL : constituyen la unión entre las aplicaciones
cliente
li t y servidor
id
Compilador IDL: Automatiza la transformación de las definiciones CORBA IDL en
el lenguaje de programación
DII(Dynamic Invocation Interface): permite a un cliente acceder directamente a
los mecanismos de petición subyacentes proporcionados por un ORB
DSI (Dynamic Skeleton Interface): análogo a DSI pero del lado del servidor
Adaptador de objetos: Asiste al ORB en las peticiones recibidas por el objeto y
en la
l activación
i ió ddell objeto
bj
Arquitectura CORBA
Métodos de desarrollo de software 148
Análisis de Sistemas
Interoperabilidad (VI)
Plataforma .NET
Nueva pplataforma p
para el desarrollo y
explotación de aplicaciones
“gestionadas” (managed) modernas y
orientadas a objetos
Las aplicaciones .NET se pueden
desarrollar en cualquier lenguaje de
programación q que
e se aj
ajusta
sta a .NET
NET
.NET soporta una extensa biblioteca
de clases independientes del lenguaje
de programación
.NET soporta la creación de
componentes auto-descriptibles
auto descriptibles
.NET ofrece integración multilenguaje,
Plataforma .NET
reutilización de componentes, y
h
herenciai entre
t componentest
desarrollados en diferentes lenguajes
Métodos de desarrollo de software 149
Análisis de Sistemas
Interoperabilidad (VII)
Componentes de la plataforma .NET
Common Language Runtime (CLR): Entorno de ejecución de la
plataforma
Entorno donde se ejecutarán las aplicaciones .NET que han sido compiladas a
un lenguaje común llamado Microsoft Intermediate Language (MSIL)
Microsoft Intermediate Language (MSIL) es el lenguaje de
programación que generan los compiladores de lenguajes .NET
Es el código máquina de la máquina virtual
Es el único código que es capaz de interpretar el CLR
.NET Framework Class Library (FCL): Añaden funcionalidad
La librería de clases (FCL) es una librería formada por cientos de tipos que
permiten acceder a los servicios ofrecidos por el CLR y a sus funcionalidades
más frecuentemente usadas
El programador puede crear nuevas clases que extiendan su funcionalidad y
se integren perfectamente con el resto de las clases de la FCL
ASP NET: Versión .Net
ASP.NET: Net de ASP
ASP. Incluye los servicios Web
Interoperabilidad (VIII)
Generación de código en la Plataforma .NET
Plataforma .NET
NET
Bibliografía
Alexander, C.; Ishikawa, S.; Silverstein, M., Jacobson, M.; Fiksdahl-King, I. y Angel, S. “A pattern Language”,
Oxford University Press, New York, 1977.
Alonso, F.; Segovia F.J. “Entornos y metodologías de programación”, Paraninfo, 1995.
Beck, K.; Cunningham,
C W. ““A Laboratory for
f Teaching Object-Oriented
O O Thinking”.
” In Proceedings off the 1989
OOPSLA - Conference proceedings on Object-Oriented Programming Systems, Languages and Applications
(October 2 - 6, 1989, New Orleans, USA); Reprinted in Sigplan Notices, 24(10):1-6. 1989.
Booch, G.; “Object-Oriented Design with Applications”, Benjamin Cummings, 1991.
Booch G
Booch, G.;; “Object-Oriented
Object Oriented Analysis and Design with Applications”
Applications , Benjamin Cummings
Cummings, 1994 1994.
Bood, T. “Introducción a la programación orientada a objetos”, Adison-Wesley, 1994.
Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P. y Stal, M..”Pattern-Oriented Software Architecture. A
System of Patterns”. ohn Wiley & Sons Ltd., Chichester, UK, 1996
Coad, P.; Yourdon, E. “Object-Oriented Analysis”´. 2nd Edition. Yourdon Press, 1991.
Coleman, D.; Arnold, P.; Bodoff, S. “Object-Oriented Development: The Fusion Method”. Prentice-Hall, 1994
Elrad, T., Filma, R. y Bader, A. (eds.), “Aspect-Oriented Programming”, en Comm. ACM (ed especial), 44(10),
2001.
Fuentes, L., Troya, J. M., "MultiTel: Multimedia Telecommunication Service Framework. A chapter of the book
Domain Specific Application Frameworks: Frameworks Experience by Industry
Domain-Specific Industry. Chapter 21,21 pp.437-467,
pp 437 467
Wiley & Sons. October 1999.
Fuentes, L., Troya, J.M. y Vallecillo A. "Documenting Web-based Application Frameworks“, Annals of Software
Engineering, Vol. 13, pp. 249-264, June 2002.
Gamma,, E.;; Helm,, R.;; Johnson,, R.;; Vlissides,, J. “Patrones de Diseño”. Addison Wesley, y, 2003.
Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J. “Design Patterns: Elements of Reusable Object-Oriented
Software”. Addison Wesley, 1995.
García Molina, J. “Patrones de diseño”, Material didáctico, http://dis.um.es/~jmolina.
Graham, I. “Object-Oriented Methods”. 2nd Edition. Addison-Wesley, 1994.
G d JJ.C.
Grundy, C AAn iimplementation
l t ti architecture
hit t ffor aspect-oriented
t i t d componentt engineering,
i i IIn P
Proceedings
di off th
the
2000 International Conference on Parallel and Distributed Processing Techniques and Applications, Las
Vagas, CA, June 26-29 2000, CSREA Press, pp. 249-256, 2000.
Métodos de desarrollo de software 152
Análisis de Sistemas
Bibliografía
Grundy, J.C. and Hosking, J.G. Developing Software Components with Aspects: Some Issues and Experiences,
Chapter 25 in Aspect-Oriented Software Development, Prentice-Hall, , pp. 585-604, 2004.
Jacobson, I. “Object Oriented Development in an Industrial Environment”. In Proceedings of the 1987 OOPSLA -
C f
Conference proceedings
di on Obj
Object-Oriented
t O i t d Programming
P i S
Systems,
t Languages
L anddA Applications.
li ti (O t b
(October
4-8, 1987, Orlando, FL USA). Pages 183-191. ACM, 1987
Jacobson, I.; Christerson, M.; Jonsson, P.; Overgaard, G. “Object-Oriented Software Engineering. A Use Case
Driven Approach”, Adison-Wesley, 1992.
Jacobson II.;; Booch
Jacobson, Booch, G G.;; Rumbaugh
Rumbaugh, JJ. “The
The Unified Software Development Process
Process”. Object Technology Series
Series.
Addison-Wesley, 1999.
Larman, C. “UML y Patrones” 2ª ed., Pearson Educación, 2003.
Martin, J. y Odell, J. “Object-Oriented Methods: A Foundation”. Englewood Cliffs, NJ., Prentice Hall, 1995.
Meyer, B. “Construcción de software orientado a objetos”, Prentice Hall, 1998.
Muller, P. A. “Modelado de objetos con UML”, Eyrolles-Ediciones Gestión 2000, 1997.
OMG. The Common Object Request Broker: Core Specification, v. 3.0.3, marzo 2004
http://www.omg.org/docs/formal/04-03-01.pdf
Rubin, K. S.; Goldberg, A. “Object Behavior Analysis”. Communications of the ACM 35 (9): 48-62. September,
1992.
1992
Rumbaugh, J.; Blaha, M.; Premerlani, W.; Frederick, E.; Lorensen, W. “Object-Oriented Modeling and Design”.
Prentice-Hall, 1991
Shaler, S.; Mellor, S. “Object Life Cycles: Modeling the World in States”. Prentice-Hall, 1992.
ou do , E.;; Whitehead,
Yourdon, e ead, K.;; Thomann,
o a , JJ.;; Oppe
Oppel,, K.;; Nevermann,
e e a , P. “Mainsteam
a s ea Objec
Objects”,
s , Prentice
e ce Hall,
a , 1995.
995
Wirfs-Brock, R.; Wilkerson, B.; Wiener, L. “Designing Object-Oriented Software”. Prentice-Hall, 1990.
Otras fuentes de información
Microsoft .NET SDK Framework Documentation
http://msdn.microsoft.com/netframework/
http://www.microsoft.com/net/
Métodos de desarrollo de software 153