Está en la página 1de 71

Diseo de

aplicaciones
Cmo escribir software
Contenido
Dnde empezar?
Hacer lo que se supone que hars
En qu se debe trabajar primero?
Aprender a escribir software

Rock!
No hay nada mejor que el sonido de una buena
guitarra en las manos de un buen guitarrista, y
en Ricks Guitars se especializan en encontrar
el instrumento perfecto para sus diversos
clientes
Ricks Guitars
No creers la
seleccin que tenemos
aqu. Ven, y dinos que
tipo de guitarra
deseas, y te la
encontraremos.
Garantizado!
Ricks Guitars
Hace unos meses, Rick decidi botar su sistema
de mantenimiento de guitarras basado en
papeles, y empez a usar un sistema
computarizado para guardar su inventario.
Contrat a una firma de programadores la cual
le creo una aplicacin de administracin de
inventario. Incluso le crearon una herramienta
de bsqueda para ayudarle a encontrar a sus
clientes su instrumento perfecto
La nueva aplicacin de Rick
Estas son
las
variables
de la
clase
Guitarra
Este es el
inventario
completo de
Rick, incluye
una manera
de buscar
guitarras
El mtodo buscar
toma la guitarra
ideal de un cliente,
y retorna una
guitarra del
inventario con esas
especificaciones
Demo Aplicacin de Rick
Pero Rick empieza a perder
clientes
Lo siento Rick,
pero creo que ir
solamente a la
tienda de en frente
Pero yo estoy
seguro que
tengo esa
guitarra en
stock, mrala
Ejercicio
Mira al cdigo de la aplicacin de Rick y a los
resultados en la bsqueda
Qu problemas encuentras?
Escribe lo primero que t haras para mejorar
la aplicacin
Lo primero que debemos hacer
Cmo quieres que
sepa donde empezar?
Siempre que tengo
que empezar un
nuevo proyecto todos
tienen sus propias
opiniones acerca de
como empezar
A veces lo hago bien,
y otras veces termino
recreando toda la
aplicacin porque
empec en el lugar
equivocado
Como puedo crear software de
calidad SIEMPRE?
Qu significa Software de
Calidad?
Programador amigable con el cliente:
El software de calidad hace siempre lo que el
cliente quiere. Aunque el cliente piense en
nuevas formas de usar el software, ste no se
cuelga o da resultados inesperados
Qu significa Software de
Calidad?
El programador orientado a objetos:
Software de calidad es cdigo orientado a
objetos. Es decir que no existe el cdigo
duplicado, y cada objeto controla su propio
comportamiento. Es tambin fcilmente
extensible porque su diseo es realmente slido
y flexible
Qu significa Software de
Calidad?
El programador Gur en diseo:
Software de calidad es cuando usamos patrones
de diseo y principios comprobados. Mantienes
tus objetos con acoplamiento ligero , y tu cdigo
esta abierto para ser extendido pero cerrado
para modificaciones. Esto ayuda a hacer tu
cdigo ms reusable, para que as no tengas
que volver a trabajar todo las partes de tu
aplicacin una y otra vez
Que crees TU que significa
Software de Calidad?
Software de calidad es ms
de una cosa
Primero, el software debe satisfacer al cliente
Debe hacer lo que el cliente quiere
Gnate a tu cliente
Tus cliente sabrn que tu
software es de calidad cuando
haga lo que se supone que debe
hacer
Software de calidad es ms
de una cosa
Segundo, el software de calidad est bien
diseado, bien codificado, y es fcil de
mantener, reutilizar y extender
Haz que tu cdigo sea tan
inteligente como t
T ( y tu equipo) pensaran
que tu software es de
calidad cuando sea fcil
de mantener, reutilizar y
extender
Software de calidad en 3 pasos
fciles
1. Asegrate que tu software haga lo que el
cliente quiere que haga
2. Aplica principios bsicos de orientacin a
objetos para agregar flexibilidad
3. Esfurzate en un diseo mantenible, y
reutilizable
Recuerdas a Rick? Recuerdas a
sus clientes perdidos?
Le aplicaremos nuestros 3 pasos
Primero, que haga lo que el cliente quiere que
haga
No crear problemas para Resolver problemas
Recuerdas a Rick? Recuerdas a
sus clientes perdidos?
Si vamos a empezar con funcionalidad,
primero averigemos qu pasa con el mtodo
Buscar(). Parece que en el inventario de Rick,
l registr fender con minscula y en las
especificaciones del cliente tenemos
Fender, con F mayscula. Necesitamos
hacer una comparacin de maysculas y
minsculas en el mtodo Buscar()
Botar las comparaciones con
cadenas
Lo primero que podemos hacer es
deshacernos de las terribles comparaciones
de cadenas
Aunque tambin se pueden usar funciones
como ToLowerCase() para evitar problemas
de maysculas y minusculas, es mejor evitar
cadenas completamente
Demo cambio de cadenas por
Enum

Preguntas
Nunca he visto los tipos enumerados, qu es
eso exactamente?
Por qu los mtodos enumerados son tan
tiles?
Miremos el panorama
Qu hicimos en realidad
Acercarnos a completar el 1er paso de construir
un software de calidad
Los problemas de Rick con sus bsquedas
resultando vacas son cosa del pasado
Hemos hecho que la aplicacin de Rick menos
frgil o cdigo Robusto
No se colgar tan fcilmente, pues hemos
agregado seguridad de tipos con enumeradores
Preguntas
Entonces es correcto hacer un poco de diseo
cuando aun estoy en el 1er paso?
El diagrama anterior es un diagrama de clase?
O son diagramas de clase, pues hay mas de
una clase?
Entonces estamos listos para el 2do paso?
Similar, pero diferente
Estaba todo perfecto , pero
luego me di cuenta, que
tengo dos guitarras que
deberan salir en la
bsqueda. Puedes hacer
que la bsqueda retorne
ambas?
Los clientes de Rick quieren
opciones
Rick necesita otro
requerimiento para
su aplicacin
Quiere que su
herramienta retorne
todas las guitarras
que contengan las
especificaciones de
sus clientes
Demo Bsqueda 2.0

Preguntas
No puedo terminar el 1er paso hasta que la
aplicacin funcione como el cliente la
necesita?
Por qu es tan importante que terminemos el
1er paso antes de empezar el 2do?
Parece que nos aferramos mucho a los pasos.
Que pasara si no codifico de esa manera?
Ejercicio Prueba 2.0

De regreso a los pasos
Ahora que Rick est
contento con su
software, es tiempo
de aplicar principios
OO y hacer la que la
aplicacin sea ms
flexible
Es
exactamente
lo que quiero
Aplicar principios bsico OO
para aadir flexibilidad
Entonces aqu podemos
asegurarnos de que no
haya cdigo duplicado, y
que todos nuestros
objetos estn bien
diseados
Buscando problemas
Profundicemos un poco nuestra herramienta de
bsqueda, y veamos si encontramos problemas
que algn principio OO nos ayude a mejorar.
Analicemos el mtodo Buscar()
Tips
Utiliza una descripcin textual del problema
que tratas de resolver para asegurarte de que tu
diseo se alinea con la funcionalidad deseada
de tu aplicacin
Buscando problemas
El cliente provee una serie de especificaciones
para su guitarra en la forma de un objeto Guitarra.
El cliente no provee ni el precio ni el nmero de
serie ya que son nicos para cada guitarra
La operacin buscar es llamada con las
especificaciones del cliente y comienza la
bsqueda en el inventario de Rick
Existe un objeto Guitarra por cada guitarra en el
inventario
Cada bsqueda devuelve una lista de guitarras

Tips
Objetos deben hacer lo que su nombre indica
Cada objeto debe representar un solo
concepto
Las propiedades que no se utilizan son
generalmente delatoras de que un objeto est
haciendo ms de un trabajo
Ejercicio
Qu objeto es el que no concuerda aqu?
Qu crees que se debera hacer para mitigar
el problema
Encapsulamiento
Los clientes de Rick, no estn pasando un
objeto Guitarra para compararlas en el
inventario
Encapsular las propiedades de especificacin
en un nuevo objeto
Encapsulamiento te permite agrupar tu
aplicacin en partes lgicas
Ejercicio
Agrega todas las propiedades y mtodos que
t creas necesitar en la clases
EspecificacionGuitarra
Tacha lo que hayas desechado en la clase
Guitarra
Si necesitas, agrega nuevas propiedades o
mtodos
Buena suerte

Ejercicio
Posible solucin
Actualiza tu cdigo
Con este diagrama ya podemos ser capaces
de agregar la clase EspecificacionGuitarra a
tu aplicacin, actualiza Guitarra tambin
Haz tambin cualquier cambio en Inventario
para que la herramienta de bsqueda compile
Preguntas
Comprendo por qu necesitamos un objeto
para que el cliente enve especificaciones a
Buscar() pero por qu utilizamos ese objeto
para mantener las propiedades para Guitarra
tambin?
An no comprendo por qu esto es una forma
de encapsulamiento. Puede explicarlo de
nuevo?

Tip
En cualquier momento que veas
cdigo duplicado, busca un
lugar para encapsularlo!
Actualizar la clase Inventario
Demo - Probar

Preguntas
Encapsulamiento es el nico principio OO que
puedo usar en esta etapa?
No veo como el encapsulamiento hace que mi
cdigo sea ms flexible. Puede explicrmelo
de nuevo?
Disea una vez, disea dos
veces
Una vez analizado el software y aplicado
principios bsicos, ya estamos listos para otro
vistazo.
Esta vez nos enfocaremos en asegurarnos
que el software no solo sea flexible, sino que
sea fcilmente reusable y extensible
Asegurarnos que inventario sea
bien diseado
Ya hemos usado encapsulamiento para mejorar el
diseo de la herramienta de bsqueda de Rick
Pero an podemos liberarnos de algunos
problemas
Esta har que el cdigo sea mas fcil de extender,
cuando a Rick se le ocurra algn nuevo requisito
Y reusar si queremos tomar partes individuales de
la aplicacin en otro contexto
Bsqueda Qu podemos
cambiar?
Hay un gran problema con el cdigo de
bsqueda, escribe cual , segn t, es el
problema y como podemos arreglarlo
Cambio
Siempre me han gustado las
guitarras de 12 cuerdas. Que
tan difcil sera actualizar mi
aplicacin para poder vender
guitarras de 12 cuerdas y poder
buscarlas tambin?
Que tan fcil es realizar este
cambio en la aplicacin de
Rick?
Miremos el diagrama de Guitarra
y pensemos que se necesitara
para aadir soporte a guitarras
de 12 cuerdas
Qu propiedades y mtodos
necesitamos agregar y a qu
clases?
Qu cdigo debemos cambiar
para permitir que los clientes
busquen guitarras de 12
cuerdas?
Cuantas clases debemos
modificar? Piensas que la
aplicacin est bien diseada
actualmente
Ejercicio
Donde agregamos el nuevo atributo,
numeroCuerdas que guardara el numero de
cuerdas que tiene una guitarra
Donde agregamos un nuevo mtodo
ObtenerNumeroCuerdas(), para retornar el
numero de cuerdas que tiene una guitarra
Que otro lugar del cdigo crees t deba cambiar si
queremos que los clientes puedan especificar las
12 cuerdas en su bsqueda

El problema
Hemos agregado la propiedad a
EspecificacionGuitarra, pero tenemos que
cambiar el cdigo de la bsqueda en Inventario,
igualmente en el constructor de la clase Guitarra
Y ese es el gran problema?
As es! necesitamos encapsular las
especificaciones de la guitarra y aislarlas
del resto de la herramienta de bsqueda
Aunque estamos agregando una propiedad a
EspecificacionGuitarra, hay dos clases que
sufren consecuencias
El constructor de Guitarra debe tomar un
parmetro ms, y el mtodo buscar necesita
comparar otra propiedad
Ejercicio El problema
Agregar una propiedad a EspecificacionGuitarra
resulta en cambios de cdigo para Guitarra e
Inventario. La aplicacin debe ser reconstruida
para que al agregar propiedades a
EspecificacionesGuitarra no afecte el cdigo del
resto de l aplicacin
Ejercicio Tu tarea
Agregar una propiedad numeroCuerdas y un mtodo
ObtenerNumeroCuerdas() a EspecificacionGuitarra
Modifica Guitarra para que las propiedades de
EspecificacionGuitarra sean encapsuladas del
constructor de la clase
Cambia el mtodo Buscar() en Inventario para delegar
la comparacin de especificaciones a la clases
EspecificacionGuitarra, en lugar de compararlas
directamente
Actualiza el cliente para que funcione con tus nuevas
clases y asegura que todo funcione
Preguntas
Dices que debo delegar Qu es delegar?
Con que fin se delega?
Qu tiene que ver delegacin con que el
cdigo sea mas reusable?
Que significa Acoplamiento ligero?
Y por qu es bueno eso?
Delegacin - concepto
Es el acto de reenviar una operacin desde un
objeto a otro para que este la ejecute en
representacin del primero
Felicitaciones
Hemos convertido la herramienta de
bsqueda de inventario de Rick en
un Software de Calidad bien
diseado
Todo lo que hicimos
Empezamos arreglando algunos de los
problemas de funcionalidad con la
herramienta
Agregamos ms funcionalidad para que la
bsqueda retorne una lista de guitarras
Mientras agregbamos caractersticas, nos
asegurbamos de que nuestros diseos sean
solidos
Todo lo que hicimos
Tambin encapsulamos las propiedades de la
guitarra, y nos aseguramos de que podemos
agregar ms fcilmente
Hasta agregamos delegacin para que
nuestros objetos sean menos dependientes
uno del otro y sean reutilizados fcilmente

Entonces, que se necesita para
crear Software de Calidad
Un conjunto de pasos seguir para asegurar
que tu software funcione y que est bien
diseado
Pueden o no ser estos 3 pasos, solo necesitas
algo que funcione y que puedas reusar en
todos tus proyectos
Anlisis y diseo Orientado a
Objetos (A&DOO)
Te ayuda a escribir Software de Calidad siempre.
Todo este tiempo hablamos de los 3 pasos que
puedes seguir para escribir software de calidad, en
realidad hablbamos de A&DOO
Es en realidad una forma de escribir software que
se enfoca en asegurarse que tu cdigo haga lo
que debe hacer y a la vez est bien diseado
Es decir, tu cdigo es flexible, reutilizable, y es
fcil de hacerle cambios y mantener
A&DOO se trata de escribir
software de calidad
Clientes estn satisfechos cuando sus
aplicaciones FUNCIONAN
Clientes estn satisfechos cuando sus
aplicaciones SIGUEN FUNCIONANDO
Clientes estn satisfechos cuando sus
aplicaciones pueden ser MEJORADAS
Programadores estn satisfechos cuando sus
aplicaciones pueden ser REUTILIZADAS
Programadores estn satisfechos cuando sus
aplicaciones son FLEXIBLES
Felicitaciones
Esto es fantstico! Estoy
vendiendo guitarras como
loco con esta nueva
herramienta de bsqueda.
Por cierto, tengo algunas
ideas para nuevas
funciones
Sumario
Toma muy poco para que algo no salga bien en una
aplicacin frgil
Podemos usar principios OO como encapsulamiento y
delegacin para construir aplicaciones flexibles
Encapsulamiento es dividir tu aplicacin en partes lgicas
Delegacin es darle a otro objeto la responsabilidad de
manejar una tarea particular
Siempre empieza un proyecto averiguando lo que el
cliente quiere
Una vez que tengas la funcionalidad bsica de una
aplicacin hecha, refina el diseo para que sea flexible
Sumario
Con un diseo funcional y flexible, puedes emplear
patrones de diseo para mejorarlo aun ms y hacer que tu
aplicacin sea fcil de reutilizar
Encuentra las partes de tu aplicacin que cambian a
menudo e intenta separarlas de las partes que no lo hacen
Construir una aplicacin que funcione bien pero que no
esta bien diseada, satisface al cliente pero te deja
sufriendo y adolorido y con muchas noches madrugado
arreglando problemas
Anlisis y diseo orientado a objetos (A&DOO) provee un
camino para producir aplicaciones bien diseadas que
satisfacen a ambos, el cliente y el programador

También podría gustarte