Professional Documents
Culture Documents
Modelo de Diseo
El modelo de diseo es un refinamiento y formalizacin adicional del modelo
de anlisis donde se toman en cuenta las consecuencias del ambiente de
implementacin.
El resultado del modelo de diseo son especificaciones muy detalladas de
todos los objetos, incluyendo sus operaciones y atributos.
Se requiere un modelo de diseo ya que el modelo de anlisis no es lo
suficientemente formal para poder llegar al cdigo fuente. Por tal motivo se
debe refinar los objetos, incluyendo las operaciones que se deben ofrecer, la
comunicacin entre los diferentes objetos, los eventos que los objetos
envan entre si.
El modelo de anlisis debe ser visto como un modelo conceptual y lgico del
sistema, mientras que el modelo de diseo debe acercarse al cdigo fuente.
Esto significa que se cambia el punto del vista del modelo de diseo a una
abstraccin del cdigo fuente final.
Por lo tanto el modelo de diseo debe ser una descripcin de cmo el cdigo
fuente debe ser estructurado, administrado y escrito. El diseo tiene la
responsabilidad de generar la separacin durante el diseo de mtodos,
aquellos que sirven para tomar decisiones (control) y aquellos que no
(interface y entidad).
Cambios en la arquitectura del sistema para mejorar el rendimiento del
sistema deben ser pospuestos. En sistemas grandes y complejos, se adivina
incorrectamente cuales son los cuellos de botella crticos al rendimiento.
Para hacer una evaluacin ms adecuada es necesario evaluar parte del
rendimiento del sistema construido, algo que tambin se puede ir adelantando
a nivel de prototipos
Estrategias de Diseo
Antes de poder resolver el diseo es necesario tomar decisiones generales
sobre las estrategias de diseo a seguir.
Algunas de las decisiones a tomar se presentan a continuacin y se
Relacionan con aspectos que incluyen la arquitectura, robustez, reuso y
extensibilidad del sistema.
Arquitectura
El trmino arquitectura se refiere, a la organizacin de las clases dentro del
sistema. Durante el modelo de anlisis se gener una arquitectura de clases
para el sistema y se defini la funcionalidad conceptual ofrecida por las
distintas clases dentro de la arquitectura. Durante el diseo esta arquitectura
debe detallarse, pudiendo cambiar los aspectos considerados inicialmente,
como fue la funcionalidad inicialmente asignada a cada clase, e incluso las
propias clases.
El conocimiento y funcionalidad asignada a cada clase puede ser vista como
la inteligencia de cada clase dentro del sistema. En otras palabras, algunas
clases pueden ser vistas como ms inteligentes que otras segn el
conocimiento y control que tengan sobre las dems clases.
Por ejemplo:
listas o arreglos No Inteligentes
(manipulan y obtienen informacin, pero tienen poco impacto sobre clases)
Manejador de interface de usuario -> Inteligente
(Debe poder administrar la interaccin con el usuario, incluyendo manejo de
eventos y manipulaciones sobre las pantallas)
Robustez
La robustez de un sistema debe ser uno de los objetivos principales del
diseo. Jams debe agregarse funcionalidad o simplificar cdigo a expensas
de la robustez.
El sistema debe estar protegido contra errores y debe al menos ofrecer
diagnsticos para las fallas que an pudiesen ocurrir, en particular aquellas
que son fatales.
Durante el desarrollo es a veces bueno insertar instrucciones internas en el
cdigo para descubrir fallas, aunque luego sean removidas durante la
produccin. En general se debe escoger lenguajes de programacin que
apoyen estos aspectos, como son el manejo de excepciones.
Reuso
El reuso es un aspecto fundamental del diseo. Cuanto ms se pueda
reutilizar el cdigo mejor ser la robustez del sistema. Las siguientes son
algunas estrategias para mejorar las posibilidades de reuso del diseo:
A travs de la herencia se puede incrementar el reuso de cdigo. Se
toman los aspectos comunes a clases similares utilizando superclases
comunes. Este enfoque es efectivo cuando las diferencias entre las
clases son pequeas y las similitudes son grandes. Es importante
considerar la naturaleza de cada herencia para asegurar que no se est
llegando a extremos donde la aplicacin de la herencia sea inadecuada.
El uso impropio de herencia puede hace que los programas sean difciles
de mantener y extender. Como alternativa, la delegacin provee un
mecanismo para lograr el reuso de cdigo pero sin utilizar herencia. Esto
se basa en el uso de agregacin a travs de clases intermediarias que
ocultan la funcionalidad de las clases a las cuales se delega.
El encapsulamiento es muy efectivo para lograr el reuso, pudindose
aplicar tanto al nivel de los objetos como de componentes desarrollados
en otras aplicaciones. Estos componentes pueden ser reutilizables como
fueron diseados o simplemente agregando nuevas interfaces.
Extensibilidad
La mayora de los sistemas son extendidos en manera no prevista por el
diseo original. Por lo tanto, los componentes reutilizables mejorarn tambin
la extensibilidad. Las siguientes son algunas de las perspectivas de
extensibilidad:
Nuevamente, se debe encapsular clases, ocultando su estructura interna
a las otras clases. Slo los mtodos de la clase deben accesar sus
atributos.
No se debe exportar estructuras de datos desde un mtodo. Las
estructuras de datos internas son especficas al algoritmo del mtodo. Si
se exporta las estructuras se limita la flexibilidad para poder cambiar el
algoritmo ms tarde.
Diseo de Objetos
El diseo de objetos es un proceso de aadir detalles al anlisis y tomar
decisiones respecto al ambiente de implementacin, de manera que
podamos lograr una especificacin detallada antes de comenzar la
implementacin final.
Algunos de los aspectos a ser resueltos en el diseo de objetos son:
Determinar cmo las clases, atributos y asociaciones del modelo de
anlisis deben implementarse en estructuras de datos especificas.
Determinar si se requiere introducir nuevas clases
Modificar o eliminar clases identificadas durante el modelo de anlisis.
Agregar herencia para incrementar el reuso del sistema.
Determinar los algoritmos para implementar las operaciones
Definir los aspectos de optimizaciones.
Clase
Servidor
Solicita
Info/Almacenar
Clase
Servidor
Clase
Cliente
Responsabilidades
Uno de los esfuerzos ms grandes del desarrollo y que involucra mayor
complejidad es la especificacin del comportamiento de cada una de las
clases del sistema. Dado que por lo general el nmero resultante de
mtodos en un sistema es mucho mayor que el de clases, el proceso de
diseo involucra mayor complejidad que el de anlisis.
Esta complejidad no radica exclusivamente en el nmero de mtodos, sino
en el hecho que potencialmente todos los mtodos de un objeto pueden ser
llamados por todos los objetos del sistema. Esta es la verdadera fuente de
la complejidad en la arquitectura del sistema, ya que cualquier cambio en
uno de estos mtodos afectar potencialmente a todo el resto del sistema.
Por lo tanto, es necesario llevar a cabo un proceso muy cuidadoso para la
identificacin del comportamiento de las diversas clases
56. El ManejadorRegistroUsuario sale del sistema. Se asigna la responsabilidad sale del sistema al
ManejadorRegistroUsuario.
57. (Si an no se ha presionado "Registrar", la informacin ser perdida). Nuevamente, esta es una
frase informativa por lo cual no se asignan nuevas responsabilidades.
A partir de estas frases obtenemos nuevas responsabilidades y las insertamos en las tarjetas de clase
Correspondientes.
COLABORACIONES
Es indispensable que los objetos dentro de un programa colaboren entre s,
o de lo contrario el programa constar de mltiples mini-programas
independientes. Las colaboraciones entre objetos se dan con base en las
relaciones entre las responsabilidades de las distintas clases.
Las colaboraciones representan solicitudes de un objeto cliente a un objeto
servidor. Un objeto es un servidor cuando satisface una solicitud hecha por
un objeto cliente. Desde el punto de vista del cliente cada una de las
solicitudes de servicio o colaboracin se asocia con una responsabilidad
implementada por algn servidor.
El proceso de identificacin de colaboraciones se basa en la funcionalidad
de la aplicacin y de su arquitectura. Para identificar colaboraciones se
analizan las responsabilidades de casa clase, se decide si cada una de
stas es capaz de satisfacer sus responsabilidades o requiere otra clase
para lograrlo.
Se analiza que tanto sabe cada clase y que otras necesitan su conocimiento o
funcionalidad. El patrn de colaboraciones revela el flujo de control e
informacin dentro del sistema.
Se analiza las colaboraciones estudiando que objetos dentro del sistema
tienen el conocimiento que se necesita, que clases colaboran y cules no. A
travs de las colaboraciones se analizan las dependencias entre las clases.
Es importante tener en cuenta que las colaboraciones son en una sola
direccin, y que cierto tipo de clases son comnmente clientes o servidores,
ubicndose las clases en uno u otro extremo de la colaboracin.
En la mayor parte de los casos las clases correspondientes a borde o entidad
son clases servidor de las clases cliente control.
Jerarquas
El diseo de las jerarquas de herencia es uno de los aspectos de
programacin ms importantes de la orientacin a objetos. Mediante la
herencia se puede lograr una buena reutilizacin del cdigo del sistema,
logrando arquitecturas de clases ms compactas lo cual puede reducir
radicalmente el tamao del sistema final.
La herencia se identifica a partir de las responsabilidades y colaboraciones
obtenidas anteriormente. De manera general, existen dos formas de
aprovechar la herencia. La forma ms comn es la creacin de superclases
que guarden responsabilidades comunes a mltiples clases. La forma
adicional y ms avanzada est relacionada con el polimorfismo y busca
aprovechar no slo responsabilidades comunes sino tambin colaboraciones
comunes entre clases. Estos dos enfoques tambin sirven de base para la
extensibilidad de la arquitectura de clases.
Cliente
desplieg
a
Cliente
enva el
evento
Servidor
Sevidor
desplieg
a
Maneja evento
Contratos
Un contrato es un mecanismo de diseo para agrupar las distintas
responsabilidades de una clase que estn relacionadas lgicamente entre
s. Los contratos sirven como indicadores de los diversos servicios provistos
para cada clase. El objetivo final del contrato es que sea un elemento de
abstraccin adicional en el manejo del sistema.
El contrato no es otro nombre para la responsabilidad, ya que una
responsabilidad es una accin especifica, en tanto el contrato define un
conjunto de responsabilidades cercanas entre s.
Una responsabilidad puede pertenecer a un contrato o no. Cuando una
responsabilidad no forma parte de un contrato, es por que representa el
comportamiento de la clase pero ese comportamiento es privado a los
propios objetos de la clase.
Un contrato entre dos clases representa una lista de servicios que una clase
solicita a otra clase. Todos los servicios especificados en un contrato
particular son la responsabilidad del servidor para ese contrato. Las
responsabilidades de un contrato deben ofrecerse pblicamente, es decir
deben estar disponibles tanto para los objetos de la clase como para las
dems clases.
Un contrato entre un cliente y un servidor no especifica como se hacen las
cosas, solo que se hace, quien colabora con quien y que se espera de la
colaboracin.
Una forma de encontrar responsabilidades relacionadas, es buscar las que
usar el mismo cliente, es decir cuando dos o mas responsabilidades de una
clase dan servicio a los mismos clientes, se define un solo contrato para
satisfacer la responsabilidad general.
Si una clase define un contrato que tiene poco en comn con el resto de los
contratos definidos por esa clase, este contrato se mueve a una clase
diferente (superclase o subclase), de tal manera que las jerarquas se
reajustan minimizando el numero de contratos para cada clase.
Una tcnica para definir contratos es iniciar con las clases superiores de la
jerarqua, posteriormente se definen los contratos de las subclases
revisando si estas representan una nueva funcionalidad o representan
funcionalidades heredades de contratos heredados.
Los contratos se especifican en las Tarjetas de Clase, se divide la seccin
de responsabilidad en dos. En la parte superior se especifica una seccin
para los contratos, en tanto que en la parte inferior se especifica las
responsabilidades privadas. Cada contrato debe incluir un nombre y un
nmero de contrato.
Subsistemas
Como se ha podido apreciar hasta el momento, la complejidad del sistema
aumenta a medida que se incorporan nuevos detalles en el diseo, algo que
por lo general es inevitable. Para lograr un mejor manejo de esta complejidad
introducimos el concepto de subsistemas, el cual permite dividir el sistema
completo en diversas partes.
Los subsistemas son mecanismos de encapsulamiento, vistos como cajas
negras, donde sus objetos cooperan para proveer una unidad de
funcionalidad claramente delimitada por el subsistema. Internamente, los
subsistemas pueden tener estructuras complejas, con clases colaborando
entre si para satisfacer sus distintas responsabilidades contribuyendo al
objetivo general del subsistema, o sea, satisfacer sus responsabilidades.
Tpicamente, los objetos de las clases entidad son reutilizados en los
diversos subsistemas, mientras que los objetos de control y por lo general las
de borde son propias a cierto subsistema.
Contrato
Clase
Cliente
ManejadorPrinci
pal
<<subsystem>>
SubsistemaInterfaceUsua
rio
InterfaceUsuario
1.
DesplegarPantall
a
ManejadorServ
ocio
<<subsystem>>
SubsistemaInterfaceUsua
rio
1. Desplegar
Pantalla
<<subsyste
m>>
Subsistema
Registro
1. Manejar
Evento
1. Manejar
Evento
2. Registrar
Usuario
2. Ofrecer
Servicio
1. Manejar
Evento
<<subsystem>>
SubsistemaPrincipal
<<subsyste
m>>
Subsistema
Servicio
Protocolos
Un protocolo es el conjunto de firmas correspondientes a las distintas
responsabilidades de una clase (Interfaces externas de la Clase). El objetivo
de los protocolos es refinar las responsabilidades hasta llegar a mtodos
precisos dando especial nfasis a las responsabilidades agrupadas en los
contratos ofrecidos por las clases.
En general, las responsabilidades privadas representan notas de
implementacin para un programador y no deben sobre-especificarse. Sin
embargo, en algunos casos se debe generar protocolos para
responsabilidades privadas. Por ejemplo, si una superclase abstracta ser
implementada por un programador y sus subclases implementadas por otro,
las responsabilidades privadas usadas por sus subclases deben
especificarse completamente.
Se busca tambin incrementar la reutilizacin en el sistema si logramos que
los protocolos contenga slo uno pocos parmetros, simplificando su
comprensin e incrementando la probabilidad de descubrir nuevas bases
para la herencia. Se debe escoger los nombres con cuidado, siguiendo un
patrn uniforme en el momento de asignar estos nombres.
Atributos
los atributos corresponden a los aspectos estructurales de las clases, como
son los valores (nmeros y textos), junto con las referencias a otros objetos.
Estos conceptos vara de gran manera entre lenguajes. Los atributos
correspondientes a referencias deben agregarse de acuerdo a las
colaboraciones establecidas durante el diseo. Los atributos que guardan
valores son lo ltimo que se especifica en el diseo de objetos.
Algoritmos
Los algoritmos definen la lgica utilizada por cada operacin para resolver la
responsabilidad a la cual corresponden. Si son simples no requieren de
algoritmos, como son las responsabilidades de delegar entre los objetos para
consultar o modificar los valores de los atributos. Sin embargo, es
especialmente importante especificar los algoritmos para implementar
funciones de lgica ms compleja, como ordenar un conjunto de nmeros o
cadenas, o hacer clculos de intereses sobre cuentas bancarias. Los
algoritmos pueden especificarse de manera declarativa o procedural
dependiendo de su complejidad. Cuando se especifica el algoritmo de
manera procedural, esto tpicamente se hace mediante un diagrama de flujo.
Por el contrario, un algoritmo especificado de manera declarativa,
tpicamente se hace mediante una especificacin textual en cuyo caso se
debe usar algn conocimiento adicional para implementar el algoritmo. En
nuestro caso especificamos nuestros algoritmos de manera declarativa,
principalmente con un comentario sencillo.
DISEO DE SISTEMA
En esta etapa de nuestro diseo empezamos revisar aspectos de la
implementacin, ya que nuestro diseo afectar directamente la
implementacin final . En general, el diseo de sistema incluye aspectos
como:
Seleccin del Lenguaje de programacin (estructurado u OO)
Implementacin de bibliotecas (Interfaces Graficas; bibliotecas
numericas,etc)
Incorporacin de Base de Datos
Incorporacin de Archivos
Consideraciones de Procesamiento (concurrencia, paralelismo,
distribucin, etc)
Lenguajes de Programacin
Una vez que se realizo todo el proceso de anlisis y diseo basndonos en
objetos, es natural que nuestro lenguaje que seleccionemos para
implementar nuestro proyecto sea un lenguaje orientado a objetos, pero no
es condicionante, se puede incluso implementar nuestro proyecto, en un
lenguaje estructurado si as se desea. Lgicamente un lenguaje Orientado a
Objetos, representa un apoyo a los mecanismos fundamentales de anlisis
y diseo ya efectuado.
No todos los lenguajes de programacin orientado a objetos, manejan los
conceptos de encapsulamiento, referencias, herencia, etc., de la misma
forma, por lo que en base a la experiencia, a las preferencias de cada
equipo de desarrollo e inclusive a ciertos parmetros de las organizaciones,
se seleccionar el lenguaje de programacin de implementacin.
Interfaces Grficas
Tienen como objetivo administrar la interaccin con el usuario mediante
elementos grficos, como lo son botones, mens y textos. Las aplicaciones
en donde el control del ratn, del teclado, representan un papel importante
del control, a estos sistemas se les conoce como sistemas dirigidos o
controlados por eventos.
Desarrollar un sistema dirigido por eventos significa que la aplicacin desde
un inicio debe considerar un diseo adecuado. Los lenguajes de
programacin tienen diferentes clases para el manejo apropiado de las
interfaces graficas como Frame, Panel, Button, etc. Se debe buscar
implementar pantallas sencillas tanto a nivel diseo grafico como del tipo de
elementos internos que se incorporan.
Bases de Datos
Las bases de datos son fundamentales en los sistemas de informacin. Son
depsitos de datos guardados en uno o mas archivos. Existen sistemas de
manejo de datos (DBMS) y orientados a objetos (OODBMS) para la
administracin de los depsitos de datos permanentes, lo cual da un apoyo
importante en los siguientes aspectos:
Recuperacin de Cada: Proteccin ante fallas de hardware y errores de usuario
Mltiples Usuarios: Acceso concurrente para diversos usuarios
Mltiples Aplicaciones: Acceso concurrente de lectura y escritura de datos
Seguridad: Proteccin contra acceso no autorizado de lectura o escritura
Integridad: Reglas que se deben satisfacer para controlar la calidad de los datos
Extensibilidad: Mecanismos que permiten extender la arquitectura de la BD sin
interrumpir la aplicacin
Distribucin de Datos: Distribucin de los datos en diferentes lugares, organizaciones y
plataformas de Hardware.
Archivos
Aun que es mas efectivo trabajar con Bases de Datos, es posible utilizar
archivos, sobre todo cuando la especificacin del sistema, as lo requiera.
Muchas de las aplicaciones requieren tener comunicacin con otros
sistemas o procesos, y es cuando se hecha mano del manejo de archivos
para las diferentes interfaces entre los sistemas o entre los procesos.
Se deben identificar muy bien los procesos que van a tener este tipo de
comunicacin y definir la estructura del archivo tanto para el sistema que lo
genera, como para el sistema que lo recibe.