Está en la página 1de 53

Orientacion a

Objetos 2
Dra Alejandra Garrido
Dr. Alejandro Fernandez
Dr. Gustavo Rossi
Laboratorio de Investigacin y Formacin en Informtica Avanzada
Facultad de Informtica, Universidad Nacional de La Plata
Calle 50 esq. 115 - Primer piso (1900) La Plata, Argentina
TE: (0221) 422 8252
http://www-lifia.info.unlp.edu.ar

Contenidos

Patrones de Diseo
Refactoring en Metodos Agiles
TDD
Frameworks

Problemas en el diseo con objetos

Encontrar las clases adecuadas


Identificar correctamente las
responsabilidades (metodos)
Disear para el cambio (incluso para el
no previsto)
Buscar diseos modulares

La importancia de la Experiencia de
Diseo

Disear Software es dificil (aun


usando buenas tecnicas)
La experiencia es insustituible
Como la capturamos, transmitimos y
usamos?

Ejercicio
Supongamos una aplicacin universitaria para gestionar
los alumnos, docentes y administrativos?
Solucion ingenua:

Problemas

Puede una persona ser estudiante y


administrativo al mismo tiempo?
Puede una persona evolucionar en el
tiempo; pasar de estudiante a profesor?
Puede la misma persona ser estudiante
2 veces? En dos carreras diferentes?

Design Patterns

Originados en la Arquitectura (Alexander)


Differentes tipos de patrones: de diseo,
programacion?, arquitectura de software,
testeo, interfaz grafica, Web

Patterns--Definiciones
Patterns

Segn Alexander
A pattern describes a problem that occurs
once and again in a context, and describe
the core of the solution in such a way that it
can be used millions of times without doing
the same twice

Patterns--Definiciones
Patterns

Un patron es un par problema-solucion


Los patrones tratan con problemas
recurrentes y buenas soluciones a esos
problemas
Los patrones deben incluir una regla:
Cuando aplico el patron?

Patrones de Diseo

Definicion (GOF):
A design pattern names, abstracts, and identifies the
key aspects of a common design structure that make it
useful for creating a reusable object-oriented design.
The design pattern identifies the participating classes
and instances, their roles and collaborations, and the
distribution of responsibilities. Each design pattern
focuses on a particular object-oriented design problem
or issue. It describes when it applies, whether it can
be applied in view of other design constraints, and the
consequences and trade-offs of its use.
Gamma, Helms, Johnson, Vlissides: Design Patterns.
Elements of Reusable Object-Oriented Software.

Clasificacion de Patrones

De acuerdo a la actividad
Patrones de Soft
Patrones de Testing
Patrones de Proceso
Patrones pedagogicos
..
.

Clasificacion de Patrones

De acuerdo al nivel de abstraccion


Patrones de Analisis
Patrones de Arquitectura
Patrones de Diseo
Idioms

Clasificacion..

De acuerdo al dominio de aplicacion:


Financiero
Comercio electronico
Salud
Tiempo Real
..
..

Clasificacion

De acuerdo al ambiente/paradigma:
Patrones Web
Patrones de Modelos de datos
XML
Interaccion

Clasificacion de Patrones de Diseo

De acuerdo al proposito:
Creationales
Estructurales
De Comportamiento

Descripcion de un patron

Segn GoF:
Name
Intent
Motivation (Problem)
Aplicability
Structure
Participants
Collaborations

Descripcion.
Consequences
Implementatin
Code
Known Uses
Related Patterns

Ejemplo
Editor grafico para manejar figuras geometricas:
Observen polimorfismo en la relacion Editor-Figure

Figure
- manipulates

Editor
*

Line
-endPoint

- position
+ draw()
+ move()
+ rotate()

Circle
- diameter

Rectangle
- height
- width

Ejemplo..
Queremos extender el editor a figuras 3D

3DFigure
+3dDraw()
+3dMove()

Sphere

Cube

Problema
Como integramos esta jerarquia?
Que problemas tenemos?
Sacrificamos polimorfismo?
Editamos el codigo de la nueva jerarquia?

Solution
Cuando tratamos con interfases incompatibles, intentar
adaptarlas.

3dAdapter

Editor
*

draw ()
adapter 3dDraw

+draw()
+move()

-adapter

Sphere

3DFigure
+3dDraw()
+3dMove()

Cube

3dAdapter is sub-clase de?

Adapter
Intencion:
Convertir la interfaz de una clase en otra que el cliente espera EL
Adapter permite que ciertas clases trabajen en conjunto cuando no
podrian por tener interfaces incompatibles

Applicabilidad:
Use el adapter cuando:
Ud quiere usar una clase existente y su interfaz no es
compatible con lo que precisa

Adapter

Estructura

Adapter. Participants
Participantes:
Target (Figure)
defines the domain-specific interface that Client uses.

Client (Editor)
collaborates with objects conforming to the Target interface.

Adaptee (3DFigure)
defines an existing interface that needs adapting.

Adapter (3DAdapter)
adapts the interface of Adaptee to the Target interface.

Descubriendo Patrones

Como es el proceso de descubrimiento?


Que tipo de observacion/abstraccion
realizamos?

Usando Patrones

Supongamos que conocemos


patrones(e.g. Adapter).
Como mapeamos un patron a un diseo
especifico?
Como aplicamos el principio de
Alexander (use the patterns millions of
times without doing the same thing
twice)?

Adapter

Como usamos esta informacion? Es suficiente?


Que mas necesitamos?

Problema
Supongamos que queremos manejar figuras
compuestas y tratarlas como figuras simples (moverlas,
rotarlas, etc).
Podemos tener un arreglo de figuras y marcarlas como
partes de otras.

Una solucion mas modular


Tratarlas uniformemente
Figure
+draw()
+move()

-components

CompositeFigure

Atomic

+draw()
+move()
Line
+draw()
+move()

Circle
+draw()
+move()

Square
+draw()
+move()

draw ()
components draw

Como funciona?
El editor solo maneja figuras
Mantenemos la interfaz polimorfica
Problemas? Como creamos figuras compuestas?

Una instancia del patron Composite

Pattern Composite
Intent
Componer objetos en estructuras de arbol para representar
jerarquias parte-todo. El Composite permite que los clientes traten
a los objetos atomicos y a sus composiciones uniformemente

Applicability
Use el patron Composite cuando
quiere representar jerarquias parte-todo de objetos.
quiere que los objetos clientes puedan ignorar las diferencias entre
composiciones y objetos individuales. Los clientes trataran a los
objetos atomicos y compuestos uniformemente.

Pattern Composite
Structure

Una estructura compuesta


tipica se vera asi

Composite
Participants
Component (Figure)
Declara la interfaz para los objetos de la composicion.
Implementa comportamientos default para la interfaz
comun a todas las clases
Declara la interfaz para definir y acceder hijos.
(opcional) define una interfaz para para acceder el padre
de un componente en la estructura recursiva y la
implementa si es apropiado.

Composite
Leaf (Rectangle, Line, Text, etc.)
Representa arboles hojas in la composicion. Las hojas no
tienen hijos.
Define el comportamiento de objetos primitivos en la
composicion.

Composite (CompositePicture)
Define el comportamiento para componentes con hijos.
Contiene las referencias a los hijos.
Implementa operaciones para manejar hijos.

Pattern Composite
Consequencias
El patron composite
Define jerarquas de clases consistentes de objetos primitivos y
compuestos. Los objetos primitivos pueden componerse en
objetos complejos, los que a su vez pueden componerse y asi
recursivamente. En cualquier lugar donde un cliente espera un
objeto simple, puede aparecer un compuesto.
Simplifica los objetos cliente. Los clientes pueden tratar
estructuras compuestas y objetos individuales uniformemente.
Los clientes usualmente no saben (y no deberian preocuparse)
acerca de si estn manejando un compuesto o un simple. Esto
simplifica el cdigo del cliente, porque evita tener que escribir
cdigo taggeado con estructura de decision sobre las clases
que definen la composicin

Pattern Composite
Hace mas fcil el agregado de nuevos tipos de componentes
porque los clientes no tienen que cambiar cuando aparecen
nuevas clases componentes.
Puede hacer difcil restringir las estructuras de composicin
cuando hay algn tipo de conflicto (por ejemplo ciertos
compuestos pueden armarse solo con cierto tipo de atmicos)

Sistema de Alarmas
Supongamos una clase Alarma con un
comportamiento trigger que reacciona a
mensajes enviados por sensores

Alarm
trigger

Pero.

La alarma puede estar en diferentes


estados y en funcion de eso reacciona:
Si esta inactive no toma en cuenta ningun aviso de los
sensores
Si esta active tiene que reaccionar de acuerdo a su
comportamiento como Alarma
Si esta sleeping se activa..
Otras combinaciones.

Como resolvemos el problema?


Solucion ingenua:

Problemas con esta solucion?

Una solucion mejor


Objetificar el estado
-State

Alarm

AlarmState

-state
+triggered()

triggered
state.triggered

Active
+triggered()

triggered ()
perform alarm functions

Inactive

Sleeping

+triggered()

+triggered()

Patrn State

Intent:
Modificar el comportamiento de un objeto
cuando su estado interno se modifica.
Externamente parecera que la clase del
objeto ha cambiado.

Patron State

Aplicabilidad:
Usamos el patron State cuando:
Elcomportamiento de un objeto depende del estado
en el que se encuentre.
Los metodos tienen sentencias condicionales
complejas que dependen del estado.Este estado se
representa usualmente por constantes enumerativas
y en muchas operaciones aparece el mismo
condicional. El patron State reemplaza el
condicional por clases (es un uso inteligente del
polimorfismo)

Patrn State

Detalles:
Desacoplar el estado interno del objeto en
una jerarqua de clases.
Cada clase de la jerarqua representa un
estado concreto en el que puede estar el
objeto.
Todos los mensajes del objeto que
dependan de su estado interno son
delegados a las clases concretas de la
jerarqua (polimorfismo).

Patron State

Estructura

Temas interesantes
Ejecucion de los comportamientos de la
alarma. Donde estan ubicados?
Como cambiamos de estado?
Muchos objetos Alarma, comparten la jerarquia
de estados?

Patron State
Participantes
Context (Alarm)
Define la interfaz que conocen los clientes.
Mantiene una instancia de alguna clase de
ConcreteState que define el estado corriente
State (AlarmState)
Define la interfaz para encapsular el comportamiento
de los estados de Context
ConcreteState subclases (Active, Inactive,Sleeping)
Cada subclase implementa el comportamiento respecto
al estado especifico.

Patrn State

Consecuencias:
Localiza el comportamiento relacionado con
cada estado.
Las transiciones entre estados son
explcitas.
En el caso que los estados no tengan
variables de instancia pueden ser
compartidos.

Problema

Supongamos una jerarquia de cuentas


bancarias y una operacin con
variantes de acuerdo a la cuenta

El Metodo Extraer

En la Clase Caja de Ahorro tiene que


controlar el saldo contra 0 y la cantidad
de extracciones
En la Clase Cuenta Corriente tiene que
controlar el saldo contra un rojo
permitido y la situacion impositiva del
cliente

Solucion

Extraer: cant
If cantExtracciones < 5 and saldo >
cant then saldo:=saldo-cant

Extraer: cant
If saldo-cant > rojoPermitido and
cliente pagoImpuestos then saldo:
saldo -cant

Problemas con esta Solucion

Template Method

Extraer: cant
Self chequearCuenta
Self chequearCliente
If ok then self realizar extraccion

chequearCuenta
chequearCliente

chequearCuenta
chequearCliente

Template Method
Intent:
Definir el esqueleto de un algoritmo en un metodo,
difiriendo algunos pasos a las subclases. El
template method permite que las subclases re
definas ciertos aspectos de un algoritmo sin
cambiar su estructura

Applicabilidad
Para implementar las partes invariantes de un
algoritmo una vez y dejas que las sub-clases
implementen los aspectos que varian

Structure

También podría gustarte