Diferencia entre revisiones de «Estilos arquitectónicos»

(Página creada con 'Cada estilo arquitectónico describe una categoría del sistema que contiene: un conjunto de componentes, que realiza una función requerida por el sistema, un conjunt...')
 
m (Texto reemplazado: «<div align="justify">» por «»)
 
(No se muestran 13 ediciones intermedias de 6 usuarios)
Línea 1: Línea 1:
Cada estilo arquitectónico describe una [[categoría]] del sistema que contiene: un conjunto de componentes, que realiza una función requerida por el [[sistema]], un conjunto de [[conectores]] que posibilitan la comunicación, la coordinación y  la cooperación entre los componentes; restricciones que definen como se  puede integrar los componentes que forman el sistema; y modelos  semánticos que permiten al diseñador entender las propiedades globales  de un sistema para analizar las propiedades conocidas de sus partes  constituyentes.<ref>http://www.mitecnologico.com/Main/Dise%F1oArquitecturaDelSoftware</ref>
+
{{Definición
 +
|nombre=Estilos arquitectónicos
 +
|imagen=Capas12.jpg
 +
|tamaño=
 +
|concepto=Es el arte y la ciencia de diseñar edificios. En los siglos pasados,  los arquitectos se ocupaban no sólo de diseñar los edificios, sino que  también diseñaban ciudades, plazas, alamedas y parques, y objetos de uso  en las edificaciones, como los muebles.
 +
}}'''Estilos arquitectónicos'''. Cada estilo arquitectónico describe una categoría del [[sistema]] que contiene: un conjunto de componentes, que realiza una función requerida por el sistema, un conjunto de conectores que posibilitan la [[comunicación]], la coordinación y  la cooperación entre los componentes; restricciones que definen como se  puede integrar los componentes que forman el sistema; y modelos  semánticos que permiten al diseñador entender las propiedades globales  de un sistema para analizar las propiedades conocidas de sus partes  constituyentes.
 +
 
 
==Utilización de los estilos arquitectónicos==
 
==Utilización de los estilos arquitectónicos==
*Sirven para [[sintetizar]] estructuras de soluciones.
+
 
*Pocos estilos [[abstractos]] [[encapsulan]] una enorme variedad de configuraciones concretas.
+
*Sirven para sintetizar estructuras de soluciones.
*Definen los [[patrones]] posibles de las aplicaciones.
+
*Pocos estilos abstractos encapsulan una enorme variedad de configuraciones concretas.
*Permiten evaluar [[arquitecturas]] alternativas con ventajas y desventajas conocidas ante diferentes conjuntos de [[requerimientos no funcionales]].<ref>http://www.google.com.cu/url?sa=t&rct=j&q=estilos+arquitectonicos+ingenieria+de+software&source=web&cd=1&ved=0CB8QFjAA&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F5%2F6%2F8%2F568d7ce9-d0ca-46d6-a6cb-8b53cf10b134%2F050608-Architect%2520Academy%2520Webcast%25201.ppt&ei=467KTtHVA4H10gHTwazqBg&usg=AFQjCNFvd_hoTujduw3PH5aRt66zXU4rmw&cad=rja</ref>
+
*Definen los patrones posibles de las aplicaciones.
 +
*Permiten evaluar arquitecturas alternativas con ventajas y desventajas conocidas ante diferentes conjuntos de requerimientos no funcionales.
  
 
==Arquitectura Centrada en Datos==
 
==Arquitectura Centrada en Datos==
Un [[almacén de datos]] se encuentra en el centro de esta arquitectura , otro componente tiene acceso a él y cuentan con la opción de [[gestionar]] los [[datos]] de ese [[almacén]]. El [[software]] cliente tiene acceso a un almacén central, en algunos casos este es pasivo, el [[software]] cliente accede a los datos independientemente de cualquier cambio hecho en los datos o las acciones de otro software cliente.
+
 
Una variación de este [[enfoque]] transforma el [[depósito]] en un pizarrón que envía notificaciones al software cliente cuando cambian datos de interés para el cliente.
+
Un almacén de datos se encuentra en el centro de esta arquitectura , otro componente tiene acceso a él y cuentan con la opción de gestionar los datos de ese almacén. El [[software]] cliente tiene acceso a un almacén central, en algunos casos este es pasivo, el software cliente accede a los datos independientemente de cualquier cambio hecho en los datos o las acciones de otro software cliente.
 +
 
 +
Una variación de este enfoque transforma el depósito en un pizarrón que envía notificaciones al software cliente cuando cambian datos de interés para el cliente.
 +
 
 
===Características===
 
===Características===
Promueve la capacidad de [[integración]], es decir que es posible cambiar componentes existentes y agregar nuevos componentes a la arquitectura sin preocuparse por otros clientes, además es posible pasar datos entre clientes empleando el mecanismo del pizarrón. Los componentes clientes ejecutan los procesos de manera independiente.
+
 
 +
Promueve la capacidad de integración, es decir, que es posible cambiar componentes existentes y agregar nuevos componentes a la arquitectura sin preocuparse por otros clientes, además es posible pasar datos entre clientes empleando el mecanismo del pizarrón. Los componentes clientes ejecutan los procesos de manera independiente.
  
 
==Arquitectura de Flujo de Datos==
 
==Arquitectura de Flujo de Datos==
 +
 
Es una arquitectura de computadores que contrasta directamente con la tradicional [[Arquitectura de von Neumann]] o de estructuras de control.  
 
Es una arquitectura de computadores que contrasta directamente con la tradicional [[Arquitectura de von Neumann]] o de estructuras de control.  
 +
 
===Características===  
 
===Características===  
Las arquitecturas de [[flujo de datos]] no se basan en un contador de programa (al menos conceptualmente) en tanto en cuanto la posibilidad de ejecución de las [[instrucciones]] solamente viene determinada por la disponibilidad de los argumentos de entrada de las instrucciones.
+
 
 +
Las arquitecturas de flujo de datos no se basan en un contador de programa (al menos conceptualmente) en tanto en cuanto la posibilidad de ejecución de las instrucciones solamente viene determinada por la disponibilidad de los argumentos de entrada de las instrucciones.
 +
 
 
===Ventajas===
 
===Ventajas===
La ejecución fuera de orden se ha convertido en el [[paradigma]] computacional por excelencia desde los años 90. Es una forma de flujo de datos restringido. Este [[paradigma]] introdujo la idea de ventana de ejecución, que sigue el orden secuencial de la arquitectura de von Neumann; sin embargo, dentro de la ventana se permite que las instrucciones sean completadas en el orden de las [[dependencias de datos]].
+
 
 +
La ejecución fuera de orden se ha convertido en el [[paradigma]] computacional por excelencia desde los años 90. Es una forma de flujo de datos restringido. Este paradigma introdujo la idea de ventana de ejecución, que sigue el orden secuencial de la arquitectura de von Neumann; sin embargo, dentro de la ventana se permite que las instrucciones sean completadas en el orden de las dependencias de datos.
 +
 
 
===Desventajas===
 
===Desventajas===
La complejidad lógica de mantener el rastro de las dependencias de datos de forma dinámica restringe a los procesadores basados en ejecución fuera de orden a un reducido número de ejecuciones (de 2 a 6) y limita el tamaño de la ventana de ejecución de 32 a 200 instrucciones, mucho menor que las utilizadas en las [[máquinas]] puras de [[flujo de datos]].
+
 
 +
La complejidad lógica de mantener el rastro de las dependencias de datos de forma dinámica restringe a los procesadores basados en ejecución fuera de orden a un reducido número de ejecuciones (de 2 a 6) y limita el tamaño de la ventana de ejecución de 32 a 200 instrucciones, mucho menor que las utilizadas en las máquinas puras de flujo de datos.
  
 
==Arquitectura de Llamada y retorno==
 
==Arquitectura de Llamada y retorno==
Estilo clásico desde los años 1960 – presente. Descomposición jerárquica en subrutinas (componentes) que solucionan una tarea o función definida. Los datos son pasados como parámetros y el [[manejador principal]] proporciona un ciclo de control sobre las subrutinas.
+
 
Reflejan la estructura del lenguaje de programación. Permite al diseñador del [[software]] construir una estructura de [[programa]] relativamente fácil de modificar y ajustar a [[escala]].Se basan en la bien conocida abstracción de procedimientos/funciones/métodos.
+
Estilo clásico desde los años [[1960]]. Descomposición jerárquica en subrutinas (componentes) que solucionan una tarea o función definida. Los datos son pasados como parámetros y el manejador principal proporciona un ciclo de control sobre las subrutinas.
 +
Reflejan la estructura del [[lenguaje de programación]]. Permite al diseñador del [[software]] construir una estructura de programa relativamente fácil de modificar y ajustar a [[escala]]. Se basan en la bien conocida abstracción de procedimientos/funciones/métodos.
 +
 
 
===Características===  
 
===Características===  
*[[Hilo]] de control simple soportado por los [[lenguajes de programación]].
+
 
*Usa una [[estructura]] implícita de [[subsistemas]].
+
*[[Hilo]] de control simple soportado por los lenguajes de programación.
 +
*Usa una estructura implícita de subsistemas.
 
*Razonamiento jerárquico, cambios en una subrutina implican cambios en las subrutinas que hacen la invocación.  
 
*Razonamiento jerárquico, cambios en una subrutina implican cambios en las subrutinas que hacen la invocación.  
 
*Pretenden incrementar el desempeño distribuyendo el trabajo en múltiples procesadores.  
 
*Pretenden incrementar el desempeño distribuyendo el trabajo en múltiples procesadores.  
 
   
 
   
 
===Ventajas===  
 
===Ventajas===  
*Utilizados en grandes sistemas de software.
+
 
*La descomposición en [[módulos]] disminuye la complejidad.  
+
*Utilizados en grandes sistemas de [[software]].
*Persiguen [[escalabilidad]] y modificabilidad.
+
*La descomposición en módulos disminuye la complejidad.  
 +
*Persiguen escalabilidad y modificabilidad.
 +
 
 
===Desventajas===
 
===Desventajas===
 +
 
*Dependencia y acoplamiento entre módulos.
 
*Dependencia y acoplamiento entre módulos.
 
*La reutilización y el mantenimiento son difíciles
 
*La reutilización y el mantenimiento son difíciles
  
 
==Arquitectura Orientada a Objetos==
 
==Arquitectura Orientada a Objetos==
Los componentes de un sistema encapsulan los datos y las operaciones que se deben realizar para manipular los datos. La [[comunicación]] y la coordinación entre componentes se consiguen a través del paso de mensaje.
+
 
La representación de los [[datos]] y sus operaciones primitivas asociadas son [[encapsuladas]] en un tipo de [[dato abstracto]] u objeto.
+
Los componentes de un sistema encapsulan los datos y las operaciones que se deben realizar para manipular los datos. La comunicación y la coordinación entre componentes se consiguen a través del paso de mensaje.
 +
La representación de los datos y sus operaciones primitivas asociadas son encapsuladas en un tipo de dato abstracto u objeto.
 +
 
 
===Características===
 
===Características===
 +
 
*En este estilo los componentes son los objetos, o instancias de tipos de datos abstractos.  
 
*En este estilo los componentes son los objetos, o instancias de tipos de datos abstractos.  
 
*Estos objetos son de un tipo de componente denominado manager porque es responsable por preservar la integridad de un recurso.  
 
*Estos objetos son de un tipo de componente denominado manager porque es responsable por preservar la integridad de un recurso.  
*Los objetos interactúan a través de invocaciones a procedimientos y [[funciones]].  
+
*Los objetos interactúan a través de invocaciones a procedimientos y funciones.  
+
 
 
===Aspectos importantes===  
 
===Aspectos importantes===  
 +
 
*Un [[objeto]] es responsable de preservar la integridad de su representación (usualmente manteniendo algún invariante).  
 
*Un [[objeto]] es responsable de preservar la integridad de su representación (usualmente manteniendo algún invariante).  
 
*La representación se oculta a otros objetos.  
 
*La representación se oculta a otros objetos.  
 +
 
===Ventajas===  
 
===Ventajas===  
*Como un objeto oculta su representación a sus clientes, es posible cambiar su implementación sin modificar los clientes: modificabilidad.  
+
 
*La integración de un conjunto de [[rutinas]] de acceso con los datos que manipulan permite a los diseñadores descomponer los problemas en colecciones de agentes que interactúan.
+
*Como un [[objeto]] oculta su representación a sus clientes, es posible cambiar su implementación sin modificar los clientes: modificabilidad.  
 +
*La integración de un conjunto de rutinas de acceso con los datos que manipulan permite a los diseñadores descomponer los problemas en colecciones de agentes que interactúan.
 +
 
 
===Desventajas===  
 
===Desventajas===  
*Para que un objeto interactúe con otro (mediante la invocación a un procedimiento) debe conocer la identidad del otro objeto. Luego, cuando la identidad de un objeto cambie es necesario modificar todas las invocaciones a tal objeto.  
+
 
*Se pueden presentar efectos laterales: si los objetos A y C usan al objeto B, entonces los efectos de C en B lucen como [[efectos laterales]] no esperados en A, y viceversa.  
+
*Para que un [[objeto]] interactúe con otro (mediante la invocación a un procedimiento) debe conocer la identidad del otro objeto. Luego, cuando la identidad de un objeto cambie es necesario modificar todas las invocaciones a tal objeto.  
 +
*Se pueden presentar efectos laterales: si los objetos A y C usan al objeto B, entonces los efectos de C en B lucen como efectos laterales no esperados en A, y viceversa.  
  
 
==Arquitectura Estratificada==
 
==Arquitectura Estratificada==
Se crean diferentes capas y cada una realiza operaciones que progresivamente se aproximan más al cuadro de instrucciones de la máquina. En la capa externa, los componentes sirven a las operaciones de [[interfaz de usuario]]. En la capa interna, los componentes realizan operaciones de [[interfaz del sistema]]. Las capas intermedias proporcionan servicios de utilidad y funciones de software de aplicaciones.
+
 
 +
Se crean diferentes capas y cada una realiza operaciones que progresivamente se aproximan más al cuadro de instrucciones de la máquina. En la capa externa, los componentes sirven a las operaciones de [[interfaz de usuario]]. En la capa interna, los componentes realizan operaciones de [[interfaz del sistema]]. Las capas intermedias proporcionan servicios de utilidad y funciones de [[software]] de aplicaciones.
 +
 
 
===Características===
 
===Características===
 +
 
*Organización jerárquica, cada capa proporciona servicios a la capa superior y actúa como cliente de la capa inferior.  
 
*Organización jerárquica, cada capa proporciona servicios a la capa superior y actúa como cliente de la capa inferior.  
*Los componentes se organizan en [[capas]].  
+
*Los componentes se organizan en capas.  
 
*Los conectores son definidos por los protocolos que determinan como interactúan las capas.  
 
*Los conectores son definidos por los protocolos que determinan como interactúan las capas.  
 
*[[Restricciones topológicas]] incluyen limitar las interacciones a capas adyacentes.
 
*[[Restricciones topológicas]] incluyen limitar las interacciones a capas adyacentes.
 +
 
===Aplicabilidad===  
 
===Aplicabilidad===  
 +
 
Grandes sistemas caracterizados por una mezcla de elementos de alto y bajo nivel, donde los elementos de alto nivel dependen de los de bajo nivel.  
 
Grandes sistemas caracterizados por una mezcla de elementos de alto y bajo nivel, donde los elementos de alto nivel dependen de los de bajo nivel.  
 +
 
===Componentes===  
 
===Componentes===  
*Grupos de subtareas que implementan una "máquina virtual" en alguna capa en la [[jerarquía]].
+
 
 +
*Grupos de subtareas que implementan una "máquina virtual" en alguna capa en la jerarquía.
 
*Pueden implementarse como objetos o como procedimientos.  
 
*Pueden implementarse como objetos o como procedimientos.  
 
*Cada nivel tiene asociada una funcionalidad:  
 
*Cada nivel tiene asociada una funcionalidad:  
#Niveles bajos: funciones simples ligadas al [[hardware]] o al [[entorno]].  
+
*Niveles bajos: funciones simples ligadas al hardware o al entorno.  
#Niveles altos: funciones más abstractas.  
+
*Niveles altos: funciones más abstractas.  
 +
 
 
===Mecanismos de interacción entre componentes===
 
===Mecanismos de interacción entre componentes===
 +
 
*Llamadas a procedimientos.
 
*Llamadas a procedimientos.
 
*Llamadas a métodos.
 
*Llamadas a métodos.
 +
 
===Invariantes/restricciones===
 
===Invariantes/restricciones===
 +
 
*Únicamente llamadas de niveles superiores e inferiores.
 
*Únicamente llamadas de niveles superiores e inferiores.
 
*Únicamente llamadas entre niveles adyacentes.
 
*Únicamente llamadas entre niveles adyacentes.
 +
 
===Aplicación===
 
===Aplicación===
*Pilas de [[Protocolo|protocolos]] de comunicación.
+
 
 +
*Pilas de [[protocolos]] de [[comunicación]].
 
*[[Sistemas operativos]].
 
*[[Sistemas operativos]].
 
*[[Compiladores]].
 
*[[Compiladores]].
 
*[[Máquinas virtuales]].
 
*[[Máquinas virtuales]].
 +
 
===Ventajas===  
 
===Ventajas===  
*Facilita la migración. El acoplamiento con el [[entorno]] está localizado en las capas inferiores. Estas son las únicas a reimplementar en caso de transporte a un entorno diferente.  
+
 
 +
*Facilita la migración. El acoplamiento con el entorno está localizado en las capas inferiores. Estas son las únicas a reimplementar en caso de transporte a un entorno diferente.  
 
*Reutilización: como cada nivel implementa unas interfaces claras y lógicas pueden intercambiarse.  
 
*Reutilización: como cada nivel implementa unas interfaces claras y lógicas pueden intercambiarse.  
 
*Mantenimiento: los cambios en una capa apenas afectan a la superior e inferior.  
 
*Mantenimiento: los cambios en una capa apenas afectan a la superior e inferior.  
 
*Permite trabajar en varios [[niveles de abstracción]]. Para implementar los niveles superiores no se requiere conocer el entorno subyacente, basta con las interfaces que proporcionan los niveles inferiores.
 
*Permite trabajar en varios [[niveles de abstracción]]. Para implementar los niveles superiores no se requiere conocer el entorno subyacente, basta con las interfaces que proporcionan los niveles inferiores.
 +
 
===Desventajas===  
 
===Desventajas===  
 +
 
*No todos los sistemas se pueden estructurar fácilmente como capas.  
 
*No todos los sistemas se pueden estructurar fácilmente como capas.  
*Rendimiento: la comunicación a través de las diferentes capas, puede hacer ineficiente al sistema.
+
*Rendimiento: la [[comunicación]] a través de las diferentes capas, puede hacer ineficiente al sistema.
==Referencias==
+
 
{{Listaref}}
+
==Fuentes==
 +
 
 +
*[http://www.es.scribd.com/doc/23161581/Estilos-Arquitectonico es.scribd]
 +
*[http://www.download.microsoft.com/download/4/F/.../20051122-ARC-BA.ppt download.microsoft]
 +
 
 
[[Category:Ciencias_informáticas]]
 
[[Category:Ciencias_informáticas]]

última versión al 17:37 20 jun 2019

Estilos arquitectónicos
Información sobre la plantilla
Capas12.jpg
Concepto:Es el arte y la ciencia de diseñar edificios. En los siglos pasados, los arquitectos se ocupaban no sólo de diseñar los edificios, sino que también diseñaban ciudades, plazas, alamedas y parques, y objetos de uso en las edificaciones, como los muebles.

Estilos arquitectónicos. Cada estilo arquitectónico describe una categoría del sistema que contiene: un conjunto de componentes, que realiza una función requerida por el sistema, un conjunto de conectores que posibilitan la comunicación, la coordinación y la cooperación entre los componentes; restricciones que definen como se puede integrar los componentes que forman el sistema; y modelos semánticos que permiten al diseñador entender las propiedades globales de un sistema para analizar las propiedades conocidas de sus partes constituyentes.

Utilización de los estilos arquitectónicos

  • Sirven para sintetizar estructuras de soluciones.
  • Pocos estilos abstractos encapsulan una enorme variedad de configuraciones concretas.
  • Definen los patrones posibles de las aplicaciones.
  • Permiten evaluar arquitecturas alternativas con ventajas y desventajas conocidas ante diferentes conjuntos de requerimientos no funcionales.

Arquitectura Centrada en Datos

Un almacén de datos se encuentra en el centro de esta arquitectura , otro componente tiene acceso a él y cuentan con la opción de gestionar los datos de ese almacén. El software cliente tiene acceso a un almacén central, en algunos casos este es pasivo, el software cliente accede a los datos independientemente de cualquier cambio hecho en los datos o las acciones de otro software cliente.

Una variación de este enfoque transforma el depósito en un pizarrón que envía notificaciones al software cliente cuando cambian datos de interés para el cliente.

Características

Promueve la capacidad de integración, es decir, que es posible cambiar componentes existentes y agregar nuevos componentes a la arquitectura sin preocuparse por otros clientes, además es posible pasar datos entre clientes empleando el mecanismo del pizarrón. Los componentes clientes ejecutan los procesos de manera independiente.

Arquitectura de Flujo de Datos

Es una arquitectura de computadores que contrasta directamente con la tradicional Arquitectura de von Neumann o de estructuras de control.

Características

Las arquitecturas de flujo de datos no se basan en un contador de programa (al menos conceptualmente) en tanto en cuanto la posibilidad de ejecución de las instrucciones solamente viene determinada por la disponibilidad de los argumentos de entrada de las instrucciones.

Ventajas

La ejecución fuera de orden se ha convertido en el paradigma computacional por excelencia desde los años 90. Es una forma de flujo de datos restringido. Este paradigma introdujo la idea de ventana de ejecución, que sigue el orden secuencial de la arquitectura de von Neumann; sin embargo, dentro de la ventana se permite que las instrucciones sean completadas en el orden de las dependencias de datos.

Desventajas

La complejidad lógica de mantener el rastro de las dependencias de datos de forma dinámica restringe a los procesadores basados en ejecución fuera de orden a un reducido número de ejecuciones (de 2 a 6) y limita el tamaño de la ventana de ejecución de 32 a 200 instrucciones, mucho menor que las utilizadas en las máquinas puras de flujo de datos.

Arquitectura de Llamada y retorno

Estilo clásico desde los años 1960. Descomposición jerárquica en subrutinas (componentes) que solucionan una tarea o función definida. Los datos son pasados como parámetros y el manejador principal proporciona un ciclo de control sobre las subrutinas. Reflejan la estructura del lenguaje de programación. Permite al diseñador del software construir una estructura de programa relativamente fácil de modificar y ajustar a escala. Se basan en la bien conocida abstracción de procedimientos/funciones/métodos.

Características

  • Hilo de control simple soportado por los lenguajes de programación.
  • Usa una estructura implícita de subsistemas.
  • Razonamiento jerárquico, cambios en una subrutina implican cambios en las subrutinas que hacen la invocación.
  • Pretenden incrementar el desempeño distribuyendo el trabajo en múltiples procesadores.

Ventajas

  • Utilizados en grandes sistemas de software.
  • La descomposición en módulos disminuye la complejidad.
  • Persiguen escalabilidad y modificabilidad.

Desventajas

  • Dependencia y acoplamiento entre módulos.
  • La reutilización y el mantenimiento son difíciles

Arquitectura Orientada a Objetos

Los componentes de un sistema encapsulan los datos y las operaciones que se deben realizar para manipular los datos. La comunicación y la coordinación entre componentes se consiguen a través del paso de mensaje. La representación de los datos y sus operaciones primitivas asociadas son encapsuladas en un tipo de dato abstracto u objeto.

Características

  • En este estilo los componentes son los objetos, o instancias de tipos de datos abstractos.
  • Estos objetos son de un tipo de componente denominado manager porque es responsable por preservar la integridad de un recurso.
  • Los objetos interactúan a través de invocaciones a procedimientos y funciones.

Aspectos importantes

  • Un objeto es responsable de preservar la integridad de su representación (usualmente manteniendo algún invariante).
  • La representación se oculta a otros objetos.

Ventajas

  • Como un objeto oculta su representación a sus clientes, es posible cambiar su implementación sin modificar los clientes: modificabilidad.
  • La integración de un conjunto de rutinas de acceso con los datos que manipulan permite a los diseñadores descomponer los problemas en colecciones de agentes que interactúan.

Desventajas

  • Para que un objeto interactúe con otro (mediante la invocación a un procedimiento) debe conocer la identidad del otro objeto. Luego, cuando la identidad de un objeto cambie es necesario modificar todas las invocaciones a tal objeto.
  • Se pueden presentar efectos laterales: si los objetos A y C usan al objeto B, entonces los efectos de C en B lucen como efectos laterales no esperados en A, y viceversa.

Arquitectura Estratificada

Se crean diferentes capas y cada una realiza operaciones que progresivamente se aproximan más al cuadro de instrucciones de la máquina. En la capa externa, los componentes sirven a las operaciones de interfaz de usuario. En la capa interna, los componentes realizan operaciones de interfaz del sistema. Las capas intermedias proporcionan servicios de utilidad y funciones de software de aplicaciones.

Características

  • Organización jerárquica, cada capa proporciona servicios a la capa superior y actúa como cliente de la capa inferior.
  • Los componentes se organizan en capas.
  • Los conectores son definidos por los protocolos que determinan como interactúan las capas.
  • Restricciones topológicas incluyen limitar las interacciones a capas adyacentes.

Aplicabilidad

Grandes sistemas caracterizados por una mezcla de elementos de alto y bajo nivel, donde los elementos de alto nivel dependen de los de bajo nivel.

Componentes

  • Grupos de subtareas que implementan una "máquina virtual" en alguna capa en la jerarquía.
  • Pueden implementarse como objetos o como procedimientos.
  • Cada nivel tiene asociada una funcionalidad:
  • Niveles bajos: funciones simples ligadas al hardware o al entorno.
  • Niveles altos: funciones más abstractas.

Mecanismos de interacción entre componentes

  • Llamadas a procedimientos.
  • Llamadas a métodos.

Invariantes/restricciones

  • Únicamente llamadas de niveles superiores e inferiores.
  • Únicamente llamadas entre niveles adyacentes.

Aplicación

Ventajas

  • Facilita la migración. El acoplamiento con el entorno está localizado en las capas inferiores. Estas son las únicas a reimplementar en caso de transporte a un entorno diferente.
  • Reutilización: como cada nivel implementa unas interfaces claras y lógicas pueden intercambiarse.
  • Mantenimiento: los cambios en una capa apenas afectan a la superior e inferior.
  • Permite trabajar en varios niveles de abstracción. Para implementar los niveles superiores no se requiere conocer el entorno subyacente, basta con las interfaces que proporcionan los niveles inferiores.

Desventajas

  • No todos los sistemas se pueden estructurar fácilmente como capas.
  • Rendimiento: la comunicación a través de las diferentes capas, puede hacer ineficiente al sistema.

Fuentes