Documente Academic
Documente Profesional
Documente Cultură
Competencia de la práctica:
1. Introducción
2. Fundamento teórico
La información teórica que se propone para esta práctica está organizada de la siguiente
manera:
Primero de trata el concepto de arquitectura en el tema de proceso de software,
posteriormente se presenta desde la perspectiva de las estrategias de diseño, continua
con el tema modelo de diseño para realizar la practica usando la herramienta del enfoque
orientado a objetos basada en responsabilidades y finalmente se maneja la información
teórica del enfoque estructurado para completar la práctica con el diseño del diagrama de
menús del enfoque estructurado.
Proceso de software.1
1
Weitzenfeld, Alfredo. (2008). Ingeniería de Software Orientada a Objetos con UML, Java e Internet. México D.F.:
Un proceso define quién hace qué, cuándo y cómo para alcanzar cierto objetivo. En el
caso de desarrollo de software, se requieren procesos especializados que abarquen desde
la creación hasta la administración de un sistema de software.
Modelo de proceso.
Arquitectura
Una arquitectura de software define la estructura general de un sistema y varía de acuerdo
con el tipo de sistema a desarrollarse. Así, puede estar basada en elementos sencillos o
componentes prefabricados de mayor tamaño, y se especifica de acuerdo con los
diferentes tipos de sistemas. A continuación, se dan algunos ejemplos de familias de
sistemas:
Transformación en lote (batch).
Transformación continua.
Sistemas interactivos.
Simulación dinámica.
Sistemas de tiempo real.
Administración de transacciones.
Thompson. p. 357,358,359,360.
afecta aspectos como la extensibilidad del sistema. Por lo tanto, la arquitectura debe ser
escogida de manera que minimice los efectos de cambios futuros en el sistema. Para ello
existen ciertas heurísticas que muestran la tendencia a cambios en varios elementos de un
sistema como se muestra en la figura 1 las interfaces representan los elementos gráficos,
la funcionalidad son las reglas del negocio, los datos y funciones son los elementos
internos de los objetos, correspondientes a las estructuras básicas de la orientación a
objetos, mientras que la información representa el dominio del problema en una
aplicación.
Para efectos del tema, solo analizaremos este componente de un modelo de procesos.
i. La arquitectura del sistema debe distinguir entre elementos con mayor o menor
probabilidad de cambios y
ii. El desarrollo de software debe considerar un modelo de proceso, donde
aquellos elementos de mayor probabilidad de cambio y no arrastren a los más
estables.
Estrategias de diseño.2
Antes de resolver el diseño es necesario tomar decisiones generales sobre las estrategias
de diseño a seguir. Algunas de las decisiones a tomar se presentan a continuación y se
relacionan con aspectos que incluyen la arquitectura, robustez, reúso y extensibilidad del
sistema.
Arquitectura
El término arquitectura se refiere, en este caso, a la organización de las clases dentro del
sistema. Durante el modelo de análisis 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 diseño debe detallarse esta arquitectura, pudiéndose cambiar
los aspectos considerados inicialmente, como fue la funcionalidad asignada a cada clase,
e incluso las propias clases, como hemos mencionado antes.
El conocimiento y funcionalidad asignada a cada clase se ve como la “inteligencia” de cada
clase dentro del sistema. En otras palabras, algunas clases se ven más inteligentes que
otras según el conocimiento y control que tengan sobre las demás clases. Por ejemplo,
colecciones de objetos tales como listas o arreglos no se consideran inteligentes, ya que
se emplean para obtener información acerca de las clases que almacenan, pero tienen
relativamente poco impacto sobres éstas u otras clases dentro del sistema. Por otro lado,
un manejador de interface de usuario requiere mayor inteligencia, pues debe administrar
la interacción con el usuario, ya que maneja los eventos y las pantallas. Una clase aún más
inteligente, es el controlador o manejador de la lógica completa de la aplicación, ya que es
responsable de administrar los manejadores de borde y relacionar su funcionalidad con el
resto del sistema. Como parte de la arquitectura de diseño se decide cómo distribuir la
inteligencia entre las clases y qué aspectos de la inteligencia del sistema se debe asignar a
cada una de ellas. Para ello existen tres alternativas posibles:
Ventaja:
Solo se requeriría comprender el flujo de control dentro del objeto principal para entender
2
Weitzenfeld, Alfredo. (2008). Ingeniería de Software Orientada a Objetos con UML, Java e Internet. México D.F.:
Thompson. p. 358, 359.
toda la aplicación.
Sin embargo, se vuelve más completa la extensibilidad del sistema, ya que cualquier
cambio en el flujo de control se llevaría a cabo en un mismo objeto y afectaría
potencialmente la lógica de toda la aplicación. De cierta manera, esto se considera como
la “estructuración” del programa, en otras palabras, se transforma la orientación a objetos
a programación estructurada, desde toda la aplicación consta de un solo “objeto”.
Modelo de diseño.
Se considera por separado los dos aspectos principales del modelo de diseño: el diseño
de objetos y el diseño de sistema.
Diseño de Objetos
El diseño de objetos es un proceso para añadir detalles al análisis y tomar decisiones junto
con el diseño del sistema, es decir, al ambiente de implementación, de manera que se
logre una especificación detallada antes de comenzar la implementación final. Algunos de
los aspectos a resolver por el diseño de objetos es determinar cómo las clases, atributos y
asociaciones del modelo de análisis deben implementarse en estructuras de datos
específicas. También es necesario determinar si es necesario incluir nuevas clases en el
modelo del diseño, para las cuales no se tiene ninguna representación en el modelo de
análisis, o si se requiere modificar o eliminar clases identificadas durante el modelo de
análisis. Se debe agregar herencia para incrementar el re uso del sistema. También es
necesario determinar los algoritmos para implementar las operaciones, así como todos los
aspectos de optimización.
Originalmente, detrás de cada tarjeta se agregaba una descripción corta del propósito de
cada clase, algo que se hará a través del diccionario de clases. Además se incluyen
algunos datos adicionales al esquema original CRC.
Uno de los esfuerzos más grandes del desarrollo, es la especificación del comportamiento
de cada una de las clases del sistema. A diferencia de la estructura interna de una clase,
representada mediante sus atributos, los comportamientos corresponden a las
operaciones y métodos de las clases.
VALIDAR USUARIO
Se toma cada una de las frases que describen el flujo y se analizan para decidir qué
responsabilidad representa y a qué clase se le asigna:
3. La PantallaPrincipal se despliega.
4. El usuario puede seleccionar entre las siguientes opciones: “Registrarse por primera
vez”,”OK” y “Salir”.
En general, los actores no son parte de la arquitectura del sistema, por lo que no se les
asigna ninguna responsabilidad.
9. Se ejecuta el caso de uso Registrar Usuario, subflujo Crear Registro Usuario (S-1).
Esta frase no genera ninguna responsabilidad, solo una ramificación en el flujo del caso de
uso.
Esta es una frase que describe continuación entre casos de uso y no agrega ninguna
responsabilidad.
De esta manera se repite el proceso para cada uno de los casos de uso que componen la
descripción del problema, se van identificando las responsabilidades que se asignarán a
cada una de las clases identificadas en el sistema.
Considerando el enfoque estructurado es importante atender la siguiente información.
Descomposición modular.3
Ya hemos hablado de los mecanismos de abstracción y de ocultación como piezas claves
para la definición de módulos. Sin embargo, dichos atributos deben
ser traducidos en características operacionales del módulo como son: la historia del
tiempo de incorporación, el mecanismo de activación y el camino de control .
El camino de control de un módulo describe la forma en que se ejecuta internamente.
Los módulos tradicionalmente tienen entrada y salida únicas, siendo ejecutados
secuencialmente como parte de una tarea. Sin embargo, algunas veces se necesitan
mecanismos de control más sofisticados: un módulo puede ser reentrante, o lo que es lo
mismo puede ser diseñado de tal forma que no se modifique a sí mismo ni acepte
ninguna modificación externa, por lo que puede ser utilizado por más de una tarea
3
Padrón M. (2014) 6.1 Descomposición modular. Antología Fundamentos de desarrollo de sistemas. (p. 245) Tepic.
concurrente.
Desde el punto de vista de su estructura software podemos tener:
Módulos secuenciales.
Módulos incrementales. Puede ser interrumpido antes de su finalización y
restablecido posteriormente.
Módulos paralelos. Es ejecutado simultáneamente con otro módulo en entornos de
multiprocesadores concurrentes.
Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda
considerar suficiente validad como:
a) Independencia funcional
b) Acoplamiento
c) Cohesión
d) Comprensibilidad
e) Adaptabilidad
a) Independencia funcional
Cada módulo debe realizar una función concreta o un conjunto de funciones afines. Es
recomendable reducir las relaciones entre módulos al mínimo.
Para medir la independencia funcional hay dos criterios: acoplamiento y cohesión
b) Acoplamiento
El acoplamiento es un medida de la interconexión entre módulos en la estructura del
programa. Podemos graduarla en un amplio espectro, pero por lo general se tiende a que
el acoplamiento sea lo menor posible, esto es a reducir las interconexiones entre los
distintos módulos en que se estructure nuestra aplicación. El grado de acoplamiento mide
la interrelación entre dos módulos, según el tipo de conexión y la complejidad de la
interface puede ser Fuerte, Moderado o Débil:
Fuerte
Por contenido, cuando desde un módulo se puede cambiar datos locales de
otro.
Común, se emplea una zona común de datos a la que tienen acceso varios
módulos.
Moderado
De control, la zona común es un dispositivo externo al que están ligados los
módulos, esto implica que un cambio en el formato de datos los afecta a todos.
Por etiqueta, en intercambio de datos se realiza mediante una referencia a la
estructura completa de datos(vector, pila, árbol, grafo,…)
Débil
De datos, viene dado por los datos que intercambian los módulos. Es el mejor.
Sin acoplamiento directo , es el acoplamiento que no existe
c) Cohesión
Un módulo cohesivo ejecuta una tarea sencilla en un procedimiento de software y requiere
poca interacción con procedimientos que se ejecutan en otras partes de un programa.
Podemos decir que un módulo coherente es aquel que intenta realizar solamente una
cosa.
Para que número de módulos no sea demasiado elevado y complique el diseño se tratan
de agrupar elementos afines y relacionados en un mismo módulo. La cohesión puede ser:
Alta, Media y Moderada
Alta
Cohesión abstraccional , se logra cuando se diseña el módulo como tipo abstracto
de datos o como una clase de objetos Cohesión funcional, el módulo realiza una
función concreta y específica
Media
Cohesión secuencial, los elementos del módulo trabajan de forma secuencial
Cohesión de comunicación, elementos que operan con el mismo conjunto de datos
de entrada o de salida
Cohesión temporal, se agrupan elementos que se ejecutan en el mismo momento.
Por Ejemplo: .Arrancar o parar dispositivos
Baja
Cohesión lógica, se agrupan elementos que realizan funciones similares.
Cohesión coincidental, es la peor y se produce cuando los elementos de un
módulo no guardan relación alguna
En un libro clave sobre el tema, Shaw y Garlan [Sha96] plantean lo siguiente sobre la
arquitectura del software:4
Desde el primer programa que se dividió en módulos, los sistemas de software han tenido
arquitecturas y los programadores han sido los responsables de las interacciones entre los
módulos y las propiedades globales del ensamble. Históricamente, las arquitecturas han
estado implícitas: accidentes de implementación o sistemas heredados del pasado.
Los desarrolladores de buen software han adoptado con frecuencia uno o varios patrones
de arquitectura como estrategias para la organización del sistema, pero los utilizan de
manera informal y no tienen manera de hacerlos explícitos en el sistema resultante.
En el presente, la arquitectura de software eficaz y su representación y diseño explícitos
se han vuelto los temas dominantes en la ingeniería de software.
a. Identifica todas las clases del sistema. Utiliza el modelo de clases del
proyecto.
b. Inicia con una de las clases y completa con la información que requiere el
formato de tarjeta de clases, Incluye en este apartado las tarjetas de clases
con las responsabilidades agregadas para el proyecto integral del
semestre.
c. Repite el paso anterior para cada una de las clases del sistema.
2. Diseña el diagrama de menús para el proyecto integral del semestre por medio
de los siguientes pasos:
a. Utiliza el modelo de clases del proyecto y elabora una lista de las
funcionalidades que se requieren para cada clase
b. Organiza de manera lógica las funcionalidades enlistadas para cada clase
c. Diseña el diagrama de menús utilizando una estructura de árbol de
4
Roger S. Pressman. (2010). INGENIERÍA DEL SOFTWARE. UN ENFOQUE PRÀCTICO Séptima Edición. México D.F.:
McGRAW -HILL INTERAMERICANA EDITORES S.A. DE C.V. (p. 12)
acuerdo a los siguientes ejemplos Figura 75 y Figura 86:
5
https://www.google.com.mx/search?
q=estructura+de+arbol+informatica&rlz=1C1LENP_esMX732MX732&tbm=isch&imgil=g22XrnNtQj8kkM%253A
%253BDNh27CGV-bujGM%253Bhttp%25253A%25252F%25252Festructura-de-datos-garo.blogspot.com
%25252F2011%25252F10%25252Fel-arbol-es-una-estructura-de-datos.html&source=iu&pf=m&fir=g22XrnNtQj8kkM
%253A%252CDNh27CGV-bujGM%252C_&usg=__ZQeBK3Wdv2K_Pj9hA3_ltbV5woQ
%3D&biw=1680&bih=944&ved=0ahUKEwixzpGTysbVAhUFSiYKHcl9AEUQyjcITQ&ei=YiCJWbGVFIWUmQHJ-
4GoBA#imgdii=MtMJ31aNPaRRJM:&imgrc=R2Fubjn9X-9OHM:
6
https://www.google.com.mx/search?
q=estructura+de+arbol+informatica&rlz=1C1LENP_esMX732MX732&tbm=isch&imgil=g22XrnNtQj8kkM%253A
%253BDNh27CGV-bujGM%253Bhttp%25253A%25252F%25252Festructura-de-datos-garo.blogspot.com
%25252F2011%25252F10%25252Fel-arbol-es-una-estructura-de-datos.html&source=iu&pf=m&fir=g22XrnNtQj8kkM
%253A%252CDNh27CGV-bujGM%252C_&usg=__ZQeBK3Wdv2K_Pj9hA3_ltbV5woQ
%3D&biw=1680&bih=944&ved=0ahUKEwixzpGTysbVAhUFSiYKHcl9AEUQyjcITQ&ei=YiCJWbGVFIWUmQHJ-
4GoBA#imgdii=MtMJ31aNPaRRJM:&imgrc=R2Fubjn9X-9OHM:
responsabilidades
4. Integra el diagrama de menús diseñado.