Unidad VI

Anuncio
Fundamentos de Desarrollo de Sistemas Unidad VI
FUNDAMENTOS DE DESARROLLO DE SISTEMAS
UNIDAD VI
DISEÑO Y ARQUITECTURA DE PRODUCTOS DE SOFTWARE
Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste
en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc.
6.1 DESCOMPOSICIÓN MODULAR.
Descomposición Modular o Modularización es el proceso de descomposición de
un sistema en un conjunto de elementos con un índice bajo acoplamiento (independientes) y
alto índice de cohesión (con significado propio).
Consiste en descomponer el problema a resolver en módulos o tareas más simples. Cada
tarea representa una actividad completa y se codifica de manera independiente. Facilita el
diseño descendente del problema, centrándonos cada vez en la resolución de subproblemas
de magnitud inferior. A la resolución de cada uno de estos subproblemas de complejidad inferior
se denomina refinamiento por pasos. Los módulos pueden ser planificados, codificados,
comprobados y depurados independientemente, y a continuación se combinan uno a uno con
otros módulos.
Abstracción procedimental.
Con este concepto se hace referencia a la necesidad de separar el propósito de un
subprograma de suimplementación.
Consideraciones.

Cada algoritmo que resuelve el diseño de un módulo equivale a una caja negra que ejecuta
una tarea determinada.

Cada caja negra especifica lo que hace pero no cómo lo hace.

Cada caja negra puede utilizar a cualquiera de las demás cajas negras.
Normalmente, estas cajas negras se implementan como subprogramas: procedimientos y
funciones.
Instituto Tecnológico de Ciudad.Juárez
95
Fundamentos de Desarrollo de Sistemas Unidad VI
Abstracción de datos.
Pretende separar el concepto de datos y operaciones necesarias para operar con los datos,
de su representación e implementación respectivamente. La materialización de este concepto
son los Tipos de Datos Abstractos (TDA) que se definen como una colección de datos y un
conjunto de operaciones sobre estos datos.
Ocultamiento de información.
Facilitará las diversas abstracciones, ocultando y evitando que se pueda acceder a la
representación e implementación de los módulos y TDA. Se consigue haciendo uso de
facilidades aportadas por el lenguaje de programación.
Programación orientada a objetos
Paradigma de programación que hace uso de todos conceptos anteriores y algunos más
para el desarrollode software.
Descomposición modular mediante diseño descendente.
Cuando crece un programa las tareas de programación se hacen más difíciles. La
diferencia entre un programa modular grande y pequeño influye solamente en el número de
módulos.
Tiene un impacto positivo en los siguientes aspectos de programación:

Construcción del programa. Pueden trabajar diversos desarrolladores gracias a la
independencia de los módulos.

Depuración del programa. Se centrará en cada uno de los módulos por separado y
posteriormente se comprobará la interacción.

Legibilidad del código.

Eliminación de código redundante.
Objetivo: Conseguir una visión del software como una estructura jerárquica de módulos
E(P1 U P2)> E(P1) + E(P2)
Instituto Tecnológico de Ciudad.Juárez
96
Fundamentos de Desarrollo de Sistemas Unidad VI
Ideas fundamentales.

Reducir el esfuerzo de desarrollo.

Separación entre estructuras de datos y procedimientos.

Independencia funcional: Cada módulo debe realizar una tarea concreta que afecte lo
menor posible al resto.

Ocultamiento de Información: La información de un módulo es inaccesible para el
resto de módulos.
Ventajas.
– Evita la propagación de errores
– Facilita las interfaces e independiza la codificación
Conceptos.
– Acoplamiento: Grado de interdependencia de los módulos
– Cohesión: Grado del alcance de la tarea de un módulo
Criterios a seguir durante el diseño.
– Reducir acoplamiento
– Aumentar la cohesión
– Conseguir módulos con interfaces sencillas
Figura: Programción Modular
Instituto Tecnológico de Ciudad.Juárez
97
Fundamentos de Desarrollo de Sistemas Unidad VI
Figura: Diagrama de Estructura.
Ejemplo: Descomposición Modular en C (I)
/**
@file gestionsimple.c
@brief Gestión simple de cuentas bancarias
@version 3.1
*/
#include <stdio.h>
#include <conio.h>
/*Variables Globales y constantes*/
const iva=0.16;
/* DEFINICIONES DE FUNCIONES Y PROCEDIMIENTOS */
void S_Inicial (float *inicial);
void Proceso (float inicial, float *actual, int *pag, int *ing);
void Informe (float inicial, float actual, int ing, int pag);
void Leer (char *tipo, float *cantidad);
void Actualizar (char tipoOper, float cantidad, float *actual, int *ing, int *pag);
/* PROGRAMA PRINCIPAL */
void main (void) {
float saldoInicial, saldoActual;
int ingresos, pagos;
/* llamada al procedimiento Inicial */
S_Inicial (&saldoInicial);
/* llamada al procedimiento Proceso */
Proceso (saldoInicial, &saldoActual, &ingresos, &pagos);
/* impresion de resultados : informes */
Informe (saldoInicial, saldoActual, ingresos, pagos)
};
Instituto Tecnológico de Ciudad.Juárez
98
Fundamentos de Desarrollo de Sistemas Unidad VI
Ejemplo: Descomposición Modular en C (II).
/**
@brief Visualiza instrucciones al usuario y lee saldo inicial
*/
void S_Inicial (float *inicial) {
printf ("Control de una cuenta corriente\n\n");
printf ("Opciones a introducir en cada caso\n");
printf ("i (Ingreso), p (Pago), f (Fin programa)\n\n");
printf ("Introduzca saldo inicial ");
scanf ("%f",inicial)
};
/**
@brief Proceso de cada operación
*/
void Proceso (float inicial, float *actual, int *pag, int *ing) {
char tipoOper; /*tipo de operacion : ingreso/deposito o pago*/
float cantidad;
/*inicializar contadores a cero y saldoActual a saldoInicial*/
*ing = 0;
*pag = 0;
*actual = inicial;
Leer (&tipoOper, &cantidad); /*lectura primera operación*/
while (tipoOper != 'F') {
Actualizar (tipoOper, cantidad, actual, ing, pag);
Leer (&tipoOper, &cantidad);
};
};
Ejemplo: Descomposición Modular en C (III).
/**
@brief Imprime salarios inicial, final y número de operaciones
*/
void Informe(float inicial, float actual, int ing, int pag) {
printf ("Saldo inicial : %f \n", inicial);
printf ("Saldo final : %f \n", actual);
printf ("Numero de ingresos realizados : %.0d \n", int);
printf ("Numero de pagos realizados : %.0d \n", pag);
};
/**
@brief Lectura de cada operación
*/
void Leer (char *tipo, float *cantidad) {
printf("i (ingreso); p (pago); f (fin) \n");
do {
scanf("%c",tipo);
} while ((*tipo!= ‘i’)&&(*tipo!=’p’)&&(*tipo!=’f’));
if (*tipo != ‘f’) {
printf ("Cantidad a procesar \n");
scanf("%.0f",cantidad)
};
};
Instituto Tecnológico de Ciudad.Juárez
99
Fundamentos de Desarrollo de Sistemas Unidad VI
Ejemplo: Descomposición Modular en C (IV).
/**
@brief Actualiza saldo actual e incrementa el contador Ingresos y Pagos
*/
void Actualizar ( char tipoOper, float cantidad, float *actual, int *ing, int *pag ) {
switch (tipoOper) {
case 'i': {
*actual += cantidad;
*ing++;
printf ("Ingreso la cantidad %.1f \n", cantidad);
printf ("Saldo actual : %.1f \f \n", *actual);
break;
};
case 'P': {
*actual -= cantidad;
pag +=1;
printf ("El pago efectuado es de %.0f \n", cantidad);
printf ("Saldo Actual : %.0f \n", *actual);
break;
};
default: {
printf ("Operacion no valida %c ignorada \n" , tipoOper);
};
};
if (*actual < 0) {
printf ("Precaucion, descubierto en cuenta \n");
};
};
Abstracción y encapsulamiento
Idea principal: Definir una parte de un sistema de modo que puede ser comprendido
por si mismo, como una unidad, sin conocimiento de sus detalles específicos. Solo será necesario
saber el modo de interaccionar con dicha unidad.
Dos tipos:
• Abstracción procedimental
Los módulos se ven como cajas negras con una determinada funcionalidad que a su vez
pueden hacer uso de otras cajas negras.
Instituto Tecnológico de Ciudad.Juárez
100
Fundamentos de Desarrollo de Sistemas Unidad VI
• Abstracción de datos
Los datos son vistos como elementos sobre los que se pueden realizar un conjunto de
operaciones predefinidas. En ningún momento se tiene conocimiento de su representación o
implementación de las operaciones.
Modificabilidad
Una buena descomposición modular facilitará la modificabilidad del código.
Pequeños cambios en los requisitos de un programa modular normalmente requieren un cambio
pequeño sólo en algunos de sus módulos.
Vendrá condicionado por los siguientes aspectos:
– Acoplamiento débil. Los módulos deben ser independientes entre sí.
– Cohesión fuerte. Las tareas de cada módulo deben estar bien definidas.
Se debe perseguir que los cambios debidos a modificaciones afecten a la menor cantidad
de módulos posible.
6.2 ARQUITECTURAS DE DOMINIO ESPECÍFICO (DSSA).
Son arquitecturas diseñadas para cubrir un sistema o una familia de sistemas pero muy
centradas en un área o dominio determinado y enfocadas a la reutilización.
Pasos para su construcción:
1. Definición del dominio.
2. Definición de requisitos y conceptos del dominio específico.
3. Definición de restricciones de implementación del dominio.
4. Desarrollo de modelos y arquitecturas del dominio.
5. Generación de productos reutilizables.
Instituto Tecnológico de Ciudad.Juárez
101
Fundamentos de Desarrollo de Sistemas Unidad VI
Arquitecturas de Software Reutilizables
El objetivo principal es poder reutilizar partes de una arquitectura, modelos
arquitectónicos, arquitecturas de referencia o componentes de la misma de manera que no sea
necesario volver a diseñar el modelo completo. Utilizan componentes reutilizables y se obtienen,
generalmente, mediante procesos de Ingeniería del Dominio. De esta forma es posible obtener
un ahorro de costes y tiempo en la creación de nuevos sistemas de software.
6.2.1 Diseño de Software de Arquitectura Multiprocesador.
Instituto Tecnológico de Ciudad.Juárez
102
Documentos relacionados
Descargar