miércoles, 1 de mayo de 2013


CONTENIDO:
3.1 DESCOMPOSICIÓN MODULAR



UNIDAD 3: ARQUITECTURAS DE SOFTWARE


Capacidad de empleo de componentes modulares. Si un método de diseño permite ensamblar los componentes de diseño (reusables) existentes en un sistema nuevo, producirá una solución modular que no inventa nada ya inventado.

Capacidad de comprensión modular. Si un módulo se puede comprender como una unidad autónoma (sin referencias a otros módulos) será más fácil de construir y de cambiar.

Continuidad modular. Si pequeños cambios en los requisitos del sistema provocan cambios en los módulos individuales, en vez de cambios generalizados en el sistema, se minimizará el impacto de los efectos secundarios de los cambios.

Protección modular. Si dentro de un módulo se produce una condición aberrante y sus efectos se limitan a ese módulo, se minimizará el impacto de los efectos secundarios inducidos por los errores.

Finalmente, es importante destacar que un sistema se puede diseñar modularmente, incluso aunque su implementación deba ser «monolítica». Existen situaciones (por ejemplo, software en tiempo real, software empotrado) en donde no es admisible que los subprogramas introduzcan sobrecargas de memoria y de velocidad por mínimos que sean (por ejemplo, subrutinas, procedimientos). En tales situaciones el software podrá y deberá diseñarse con modularidad como filosofía predominante.

El código se puede desarrollar «en línea». Aunque el código fuente del programa puede no tener un aspecto modular a primera vista, se ha mantenido la filosofía y el programa proporcionará los beneficios de un sistema modular.
El diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces. sus ventajas: claridad, reducción de costos y reutilización.

Los pasos a seguir son:

1. Identificar los módulos

2. Describir cada módulo

3. Describir las relaciones entre módulos

Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficiente validad.

1. Independencia funcional

2. Acoplamiento

3. Cohesión

4. Comprensibilidad

5. Adaptabilidad


  • Un patrón de diseño es:  una solución estándar para un problema común de programación
  •   una técnica para flexibilizar el código haciéndolo satisfacer ciertos criterios
  •  un proyecto o estructura de implementación que logra una finalidad determinada
  •  un lenguaje de programación de alto nivel
  •  una manera más práctica de describir ciertos aspectos de la organización de un  programa
  •  Conexiones entre componentes de programas
  • La forma de un diagrama de objeto o de un modelo de objeto.

Ejemplos:

Les vamos a presentar algunos ejemplos de patrones de diseño que ya conocen. A cada diseño de proyecto le sigue el problema que trata de resolver, la solución que aporta y las posibles desventajas asociadas. Un desarrollador debe buscar un equilibrio entre las ventajas y las desventajas a la hora de decidir que patrón utilizar. Lo normal es, como observará a menudo en la ciencia computacional y en otros campos, buscar el balance entre flexibilidad y  rendimiento.
  
Encapsulación (ocultación de datos):

Problema: los campos externos pueden ser manipulados directamente a partir del  código externo, lo que conduce a violaciones del invariante de representación o  a dependencias indeseables que impiden modificaciones en la implementación.
Solución: esconda algunos componentes, permitiendo sólo accesos estilizados al  objeto.
Desventajas: la interfaz no puede, eficientemente, facilitar todas las operaciones  deseadas. El acceso indirecto puede reducir el rendimiento.

Subclase (herencia):

Problema: abstracciones similares poseen miembros similares (campos y métodos).
Esta repetición es tediosa, propensa a errores y un quebradero de cabeza  durante el mantenimiento.


Existen dos modelos de dominio específico:
  •  Modelos genéricos que son abstracciones de varios sistemas reales.
  •    Modelos de referencia que son modelos abstractos y describen a una clase mayor de sistemas.

  1. Modelo genérico: flujo de datos de un compilador
  2. Modelo de referencia: la arquitectura OSI


El reto para el diseño es diseñar el software y hardware para proporcionar características deseables a los sistemas distribuidos y, al mismo tiempo, minimizar los problemas propios a estos sistemas. Es necesario comprender las ventajas y desventajas de las diferentes arquitecturas de sistemas distribuidos.
Aquí se tratan dos tipos genéricos de arquitecturas de sistemas distribuidos: Arquitectura cliente-servidor. En este caso el sistema puede ser visto como un conjunto de servicios que se proporcionan a los clientes que hacen uso de dichos servicios. Los servidores y los clientes se tratan de forma diferente en estos sistemas. Arquitecturas de objetos distribuidos.
Para esta arquitectura no hay distinción entre servidores y clientes, y el sistema puede ser visto como un conjunto de objetos que interaccionan cuya localización es irrelevante. No hay distinción entre un proveedor de servicios y el usuario de estos servicios. Ambas arquitecturas se usan ampliamente en la industria, pero la distribución de las aplicaciones generalmente tiene lugar dentro de una única organización. La distribución soportada es, por lo tanto, intraorganizacional. También se pueden tomar dos tipos más de arquitecturas distribuidas que son más adecuadas para la distribución interorganizacional: arquitectura de sistemas peer-to-peer (p2p) y arquitecturas orientadas a servicios.
Los sistemas peer-to-peer han sido usados principalmente para sistemas personales, pero están comenzando a usarse para aplicaciones de empresa. Los componentes en un sistema distribuido pueden implementarse en diferentes lenguajes de programación y pueden ejecutarse en tipos de procesadores completamente diferentes. Los modelos de datos, la representación de la información y los protocolos de comunicación pueden ser todos diferentes. Un sistema distribuido, por lo tanto, requiere software que pueda gestionar estas partes distintas, y asegurar que dichas partes se puedan comunicar e intercambiar datos. El término middleware se usa para hacer referencia a ese software; se ubica en medio de los diferentes componentes distribuidos del sistema. Bernstein (Bernstein, 1996) resume los tipos de middleware disponibles para soportar computación distribuida. El middleware es un software de propósito general que normalmente se compra como un componente comercial más que escribirse especialmente por los desarrolladores de la aplicación. Ejemplos de middleware son software para gestionar comunicaciones con bases de datos, administradores de transacciones, convertidores de datos y controladores de comunicación. Los sistemas distribuidos se desarrollan normalmente utilizando una aproximación orientada a objetos.
Estos sistemas están formados por partes independientes pobremente integradas, cada una de las cuales puede interaccionar directamente con los usuarios o con otras partes del sistema. Algunas partes del sistema pueden tener que responder a eventos independientes. Los objetos software reflejan estas características; por lo tanto, son abstracciones naturales para los componentes de sistemas distribuidos.


Un sistema multiproceso o multitarea es aquel que permite ejecutar varios procesos de forma concurrente, la razón es porque actualmente la mayoría de las cpu´s solo pueden ejecutar un proceso cada vez. La única forma de que se ejecuten de forma simultanea varios procesos es tener varias cpu´s ya sea en una maquina o en varias en un sistema distribuido.
La ventaja de un sistema multiproceso reside en la operación llamada cambio de contexto y consiste en quitar a un proceso de la CPU, ejecutar otro proceso y volver a colocar el primero sin que se entere de nada.
El multiproceso no es difícil de entender: más procesadores significa más potencia computacional.
Un conjunto de tareas puede ser completado más rápidamente si hay varias unidades de proceso ejecutándolas en paralelo.

VENTAJAS
·         Es económica

Las computadoras  paralelas son inherentes escalables permitiendo actualizarlas para adecuarse a la necesidad

DESVENTAJAS
·         Puede ser limitante física, existen factores que limitan la velocidad máxima de un procesador independiente del factor económico

Las barreras físicas infranqueables tales como la velocidad de la luz, efectos de tamaño, la capacidad.



Modelo Cliente / Servidor:
Este modelo es un prototipo de sistemas distribuidos que muestra como los datos y el procesamiento se distribuyen a lo largo de varios procesadores. Es una forma de dividir las responsabilidades de un sistema de información separando la interfaz del usuario de la gestión de la información. El funcionamiento básico de este modelo consiste en que un programa cliente realiza peticiones a un programa servidor, y espera hasta que el servidor de respuesta.
Características de un cliente: En la arquitectura C/S el remitente de una solicitud es conocido como cliente.
Sus características son:
  • Es quien inicia solicitudes o peticiones, tienen por tanto un papel activo en la comunicación (dispositivo maestro o amo).
  • Espera y recibe las respuestas del servidor.
  •  Por lo general, puede conectase a varios servidores a la vez.
  • Normalmente interactúa directamente con los usuarios finales mediante una interfaz gráfica de usuario.

Características de un servidor En los sistemas C/S el receptor de la solicitud enviada por cliente se conoce como servidor.

Sus  características son:
  • Al iniciarse esperan a que lleguen las solicitudes de los clientes, desempeñan entonces un papel pasivo en la comunicación (dispositivo esclavo).
  •  Tras la recepción de una solicitud, la procesan y luego envían la respuesta al cliente.
  • Por lo general, aceptan conexiones desde un gran número de clientes (en ciertos casos el número máximo de peticiones puede estar limitado)
  •  No es frecuente que interactúen directamente con los usuarios finales.

Ventajas:
  • Centralización del control: Los accesos, recursos y la integridad de los datos son controlados por el servidor de forma que un programa cliente defectuoso o no autorizado no pueda dañar el sistema.
  • Escalabilidad: Se puede aumentar la capacidad de clientes y servidores por separado. 
  •  Fácil mantenimiento

Desventajas:
  •  La congestión del tráfico (a mayor número de clientes, más problemas para el servidor).
  •  El software y el hardware de un servidor son generalmente muy determinantes. Un hardware regular de un ordenador personal puede no poder servir a cierta cantidad de clientes. Normalmente se necesita software y hardware específico, sobre todo en el lado del servidor, para satisfacer el trabajo. Por supuesto, esto aumentará el costo


  
Un sistema distribuido es un sistema de información en el cual las funciones se reparten por áreas de trabajo diferentes que trabajan de forma coordinada para asumir los objetivos que la organización asigna a ese sistema de información.
Elementos de un sistema distribuido:


En él se integran.
La  plataforma de proceso. Una vez diseñado el sistema, es el elemento  encargado de proporcionar los recursos físicos y el software de base para  ejecutarlo. Está formado por los Mainframe, PC’s, PDA’s, teléfonos, etc…  Los elementos de la  conectividad. Son los encargados se proporcionar el  transporte para comunicar e integrar los elementos de la plataforma de proceso.  Son básicamente las redes y las comunicaciones. El almacenamiento de datos, formado por los datos en si y los gestores donde
Se localizan. Los elementos de software donde se incluyen las aplicaciones, los servicios
Que ayudan a crearlas y las  interfaces que ayudan a usarlas. En este  componente se integran las arquitecturas posibles para crearlas: centralizada,  Batch, transaccional, cliente / servidor basado en sistema operativo, cliente /  servidor basada en  Internet y  aplicaciones Web Internet.  A lo largo de la  exposición pondremos especial cuidado en presentar las características y  posibilidades las tres últimas.   Sistemas de seguridad.  Finalmente, debe realizarse la gestión del sistema como un conjunto integrado  y coordinado a través de los recursos de dirección y administración. La gestión  del sistema debe permitir la coexistencia de varios centros de gestión diferentes.  Parte fundamental del sistema de gestión es el  cuadro de mandos. Hay dos  cuadros de mandos diferentes: El  cuadro de mandos de seguimiento de los objetivos de negocio  pensado para proporcionar información automática a los gestores de como  la realidad se mueve respecto a las previsiones de los objetivos de negocio en “tiempo real”.  El  cuadro de mandos de explotación desde donde se centraliza y coordina toda la administración, supervisión y explotación del sistema.

3.7  DISEÑO DE SOFTWARE DE TIEMPO REAL
Las computadoras se utilizan para controlar una amplia variedad de sistemas desde maquinas domesticas sencillas hasta plantas enteras de fabricación. Estas computadoras interactúan directamente con dispositivos hardware. El software de dichos sistemas es software de tiempo real embebido que debe reaccionar a eventos generados por el hardware y emitir señales de control como respuesta a estos eventos. Está embebido en sistemas hardware máquina y debe responder, en tiempo real, a eventos del entorno del sistema.
Los sistemas de tiempo real embebidos son diferentes de otros tipos de sistemas de software. Su correcto funcionamiento depende de que el sistema responda a los eventos dentro de un corto intervalo de tiempo. Se puede definir un sistema de tiempo real como sigue:
Un sistema de tiempo real es un sistema software cuyo correcto funcionamiento depende de los resultados producidos por el mismo y del instante del tiempo en el que se producen estos resultados. Un sistema de tiempo real blando (soft) es un sistema cuyo funcionamiento se degrada si los resultados no se producen de acuerdo con los requerimientos temporales especificados. Un sistema de tiempo real duro (hard) es un sistema cuyo funcionamiento es incorrecto si los resultados no se producen de acuerdo con la especificación temporal.
Una respuesta a tiempo es un factor importante en todos los sistemas embebidos, pero en algunos casos, no necesita una respuesta rápida. Por ejemplo, el sistema de bombeo de insulina es un sistema embebido. Sin embargo, aunque se necesita comprobar el nivel de glucosa a intervalos periódicos no es necesario responder muy rápidamente a los eventos externos.
Una forma de ver un sistema de tiempo real es como un sistema de estímulo/respuesta. Dando un determinado estimulo de entrada, el sistema debe producir la correspondiente salida. Se puede, por lo tanto, definir el comportamiento de un sistema de tiempo real haciendo una lista de los estímulos recibidos por el sistema, las respuestas asociadas y el tiempo en que dichas respuestas deben producirse.
Los estímulos pueden pertenecer a dos clases:
Estímulos periódicos. Ocurren a intervalos de tiempo predecibles. Por ejemplo, si el sistema debe examinar un sensor cada 50 milisegundos y realizar una acción (respuesta) dependiendo del valor de ese sensor (estímulo).

Estímulos aperiódicos. Ocurren de forma regular. Normalmente son provocados utilizando el mecanismo de interrupciones de la computadora. Un ejemplo de dicho estímulo podría ser una interrupción para indicar que una transferencia de E/S se ha completado y que los datos están disponibles en el búfer.

Los estímulos periódicos en un sistema de tiempo real son generados normalmente por sensores asociados al sistema. Estos proporcionan información sobre el estado del entorno del sistema. Las respuestas son dirigidas a un conjunto de actuadores que controlan algún equipo como una bomba, que influye en el entorno del sistema. Los estímulos aperiódicos pueden generarse por actuadores o por sensores. A menudo indican alguna condición excepcional como un fallo en el hardware, que debe ser manejado por el sistema. Este modelo sensor-sistema actuador de un sistema de tiempo real embebido.
Un sistema de tiempo real tiene que responder a estímulos que ocurren en diferentes instantes de tiempo. Por lo tanto, se tiene que organizar su arquitectura para que, tan pronto como se reciba un estímulo, el control sea transferido al manejador adecuado. Esto no es práctico en programas secuenciales. Por consiguiente, los sistemas de tiempo real se diseñan como un conjunto de procesos concurrentes que cooperan entre sí. Con el objetivo de soportar la gestión de estos procesos, la plataforma de ejecución para la mayoría de los sistemas de tiempo real incluye un sistema operativo de tiempo real. Las facilidades que proporciona este sistema operativo son accedidas a través  del sistema de soporten tiempo de ejecución (run-time system) para el lenguaje de programación de tiempo real utilizado.
La generalidad de este modelo estímulo-respuesta de un sistema de tiempo real conduce a un modelo arquitectónico genérico abstracto  en el que hay tres tipos de procesos. Para cada tipo de sensor, hay un proceso de gestión del sensor; los procesos computacionales calculan la respuesta requerida para el estímulo recibido por el sistema; los procesos de control de actuadores controlan el funcionamiento del actuador. Este modelo permite recoger rápidamente los datos desde el sensor (antes de que la siguiente entrada esté disponible) y permite que su procesamiento y la respuesta asociada al actuador se realicen más tarde.
La arquitectura genérica puede instanciarse a varias arquitecturas de aplicaciones diferentes que amplían el conjunto  de arquitecturas. Las arquitecturas de aplicaciones de tiempo real son instancias de la arquitectura conducida por eventos en la cual el estimulo, directa o indirectamente. Provoca la generación de eventos.
Los lenguajes de programación desarrollados para sistemas de tiempo real tienen que incluir facilidades para acceder al hardware del sistema, y debería ser posible predecir la duración de operaciones particulares realizadas en estos leguajes. Los sistemas de tiempo real duros todavía se programan algunas veces en ensamblador para que puedan cumplirse los estrechos plazos de tiempo (deadline). Los lenguajes a nivel de sistemas como C, que permiten generar código eficiente también se utilizan en general.
La ventaja de utilizar un lenguaje de programación de sistemas de bajo nivel como C es que permite el desarrollo de programas muy eficientes. Sin embargo, estos lenguajes no incluyen construcciones para soportar la concurrencia o la gestión de recursos compartidos. Estas se implementan atreves de llamadas al sistema operativo de tiempo real que no pueden ser comprobados por el compilador, de forma que los errores de programación son más probables. Los programas son también más a menudo más difícil de comprender debido a que las características  de tiempo real no están explicitas en el programa.




ESPERO QUE LA INFORMACION QUE AQUÍ SE PRESENTA  LES SEA DE GRAN UTILIDAD PARA SUS INVESTIGACIONES
 REALIZADO POR: JOSE LUIS VITE PEREZ