Você está na página 1de 77

Aplicaciones Distribuidas

Introduccin al entorno de desarrollo .NET

Prof. Martin Jacobo Huamn

Importante!
...desarrollar software, no es programar
este curso requiere conocer claramente esa diferencia!

El desarrollo de software incluye todas las disciplinas asociadas a la ingeniera de software desde el anlisis hasta la puesta en produccin
el desarrollo de aplicaciones distribuidas sugiere por tanto consideraciones durante la ejecucin de todo el ciclo de vida

Que es una

aplicacin distribuida?

Es una aplicacin con distintos componentes que se ejecutan en entornos separados, normalmente en diferentes plataformas conectadas a travs de una red
Wikipedia

Cuales son los componentes que se distribuyen? Que criterios se usan para determinar que conforma un componente?

A travs de que mecanismos se realiza la comunicacin entre componentes distribuidos?


Que es un componente?

Que debera saberse y/o tenerse en cuenta para desarrollar una aplicacin distribuida?

Cliente/Servidor
Webservices

Protocolos

Despliegue
Servicios

Comunicacin

Objetos

UML
Interfaces

Niveles

Algunos Conceptos
Interoperabilidad
Acceso a Datos

Comunicacin

Arquitectura
Paquetes

Lgica de Negocio Interfaz de Usuario

Componentes

Capas
Calidades Sistmicas

Vamos por partes

A que se refiere la distribucin?

Las distribucin refiere a la construccin de software por partes, a las cuales les son asignadas una serie de responsabilidades dentro de un sistema.

Esta distribucin como bien enunciaba la definicin formal, habla de que las partes o componentes se encuentran en mquinas diferentes, sin embargo, lo que tiene implcito esta definicin, es que para realizar esta separacin fsica primero debe tenerse clara la separacin lgica de las partes de una aplicacin, esto quiere decir que programticamente existe una forma de separar o agrupar los componentes.

Ahora bien, cuando hablemos de distribucin lgica lo entenderemos como separacin por Capas (tiers) y cuando hablemos de distribucin fsica usaremos el trmino separacin en Niveles (layers)

La separacin por capas y niveles hace parte de la arquitectura del sistema y es definida por el arquitecto de la aplicacin.
una situacin evidente si conocemos la ingeniera de software

Ambos tipos de distribucin se hacen con base en las necesidades tcnicas, de diseo y/o de negocio
identificar correctamente estas necesidades necesita de habilidades, conocimiento y experiencia, sin embargo desde algn lugar hay que comenzar.

La separacin en niveles tiene una serie de consideraciones de tipo tcnico y tambin econmico, a las que nos referiremos mas adelante, por ahora lo concebiremos de forma bsica, como separacin fsica de los componentes.
Sin embargo de las capas, tenemos ms que decir

Las capas dentro de una arquitectura son un conjunto de servicios especializados que pueden ser accesibles por mltiples clientes y que deben ser fcilmente reutilizables.

Las capas adems, segn el escenario y tipo de aplicacin, estn separadas fsicamente. Si, fsicamente! Lo que significa que una capa puede ser a su vez, un nivel

Una capa puede contener muchos componentes, un mismo componente puede ubicarse en varias capas de acuerdo a su naturaleza y a las consideraciones explicitas de la arquitectura!
como? No hay problema, lo iremos entendiendo, de eso se trata

bueno y a todo esto

Qu es un componente?

Veamos una definicin formal...

Un componente es un elemento de software que encapsula una serie de funcionalidades. Un componente es una unidad independiente, que puede ser utilizado en conjunto con otros componentes para formar un sistema ms complejo.

Cada componente de un sistema puede verse como un paquete o mdulo

Un componente esta compuesto por

elementos que pueden ser clases y/o recursos complementarios como archivos de configuracin, imgenes, entre otros.

En este punto visualizamos varios conceptos que podemos presentar de la siguiente forma
Aplicacin

Niveles
Capas

Componentes

Clases Otros Recursos

Hablar de clases en este punto, nos hace recordar que debemos hacer un recuento de nuestros conocimientos sobre programacin orientada a objetos, ya que la construccin de componentes esta basada en los mismos principios y/o caractersticas con las que cumple este conocido paradigma

Recordemos lo ms bsico Los principios que dirigen la orientacin a objetos son

la modularidad y la reusabilidad
Qu son?

En trminos simples la modularidad significa trabajar por partes


(de hecho, tal cual como lo plantea el desarrollo por componentes)

Y la reusabilidad significa

No se invente la rueda!

Lo que ya esta hecho es para usarse y algunas de las cosas que no estn hechas, deben construirse pensando en que alguien necesitar usarlo alguna vez

Veamos, que tanto recordamos

Que es una clase? Que es un objeto? Que es un mensaje? Que son atributos, caractersticas o propiedades? Que son mtodos, procedimientos , funciones o servicios? Que significa que un objeto esta compuesto por una interfaz, una implementacin y un estado?

recordamos algo sobre

Que es abstraccin, encapsulamiento, polimorfismo, herencia?


Si en este punto se encuentra un poco confundido, recuerde mi consejo, no profundice ms hasta no entender claramente los conceptos mencionados

Los componentes igual que los objetos deben cumplir con dos caractersticas importantes la alta cohesin y el bajo acoplamiento
que tan claros los tenemos?.

Cuando decimos que un componente tiene una alta cohesin hablamos de que todos los elementos dentro de el estn estrechamente relacionados
el criterio de relacin debe ser de negocio o tcnico y no subjetivo

Cuando decimos que un componente tiene una bajo acoplamiento hablamos del nivel de independencia que tiene un componente con respecto a otros
esta independencia se refiere al grado en que un componente puede funcionar sin recurrir a otros y se refiere a relaciones de acoplamiento diferentes a la funcional o arquitectnica

Tener estas dos metas en mente durante la construccin de componentes, ahorrar trabajo y tiempos de desarrollo a los equipos y proyectos!
si reconocemos el valor de la ingeniera de software, entenderemos lo que esto significa

Los componentes desarrollados satisfacen una necesidad asociada a una o varias partes de una aplicacin, y son separados de acuerdo a su uso o a por una agrupacin lgica que determina la relacin entre ellos.

Ahora bien

El paradigma bsico de la separacin por capas establece al menos 3 partes distintas dentro de una aplicacin

La Presentacin La Lgica de Negocio El Acceso y Almacenamiento de Datos

Veamos entonces que significan cada una de estas partes

La Presentacin o interfaz de usuario se refiere al mecanismo de interaccin del usuario con el sistema
Los tipos de interfaces de software ms comunes son las aplicaciones de ventanas y web

Los tipos de interfaces de hardware ms comunes son las pantallas, el ratn, el teclado, el micrfono, pantallas tctiles, dispositivos de audio

La Lgica de Negocio refiere el conjunto de reglas que determinan especficamente como funciona un sistema, segn su naturaleza, y bajo que parmetros y condiciones de acuerdo a las necesidades de los clientes y usuarios.

El acceso a datos refiere al medio a travs del cual podemos acceder y manipular los datos persistentes de un sistema El almacenamiento de datos refiere a la forma en que se encuentran guardados dichos datos, por ejemplo, en archivos o bases de datos.

Despus de conocer estos conceptos, podemos pasar entonces a ver, los diferentes tipos de aplicacin bsicos

Aplicaciones Monolticas Aplicaciones Cliente/Servidor Aplicaciones de 3 Capas Aplicaciones de N Capas


veamos unas definiciones sobre estas

Una aplicacin monoltica o de una capa es aquella cuya interfaz, lgica de negocio y acceso a datos se encuentran mezclados o altamente acoplados, esto dificulta que pueda hacerse una separacin lgica y fsica donde alguna de las partes pueda ser reutilizable.

Una aplicacin Cliente/Servidor o aplicacin de dos capas es aquella donde los datos y la lgica de negocio se encuentran separados de la interfaz, este tipo de aplicacin tambin es denominada, cliente liviano.

Otro escenario vlido para una aplicacin Cliente/Servidor, se da separando los datos de la interfaz y la lgica de negocio, este tipo de aplicacin tambin es denominado, cliente pesado.

Una aplicacin 3 capas es aquella donde la interfaz, la lgica de negocio, el acceso a datos y los datos se encuentran separados.

Es muy importante entender, que la separacin de la que se habla no es necesariamente fsica, como ya se haba dicho antes, la primera separacin que se da es lgica y debemos reiterar que la separacin lgica es programtica.
Pero es bastante comn encontrar en la literatura que no se separan explcitamente los conceptos de niveles y capas
y generalmente se habla solo de capas.

Sin embargo, si nosotros lo tenemos claro, podemos entender por ejemplo que pueda darse un escenario en el cual una aplicacin es monoltica (fsicamente) y ser una aplicacin de 3 capas (logicamente). Es el caso de algunos juegos, procesadores de texto o utilitarios que tenemos en nuestros computadores personales, los cuales pueden estar bien estructurados lgicamente, sin embargo fsicamente se encuentran ubicados en una sola mquina.

Por el contrario puede pasar que un aplicacin este distribuida fsicamente, pero que malas practicas de programacin hagan que su presentacin, reglas de negocio y acceso a datos, no estn lgicamente distribuidas de forma correcta.

Es muy tentador para los desarrolladores mezclar una o ms capas; por ejemplo implementando alguna validacin u otro proceso de negocios dentro de la capa de presentacin en vez de en la capa de lgica de negocio, .

Sin embargo ubicar la lgica de programacin en las capas adecuadas, es ms un comportamiento que debera ser inherente al trabajo como programador, obviamente uno que este interesado en hacer su trabajo, bien hecho.
Los problemas que conllevan la mala separacin de la lgica de programacin, no son inmediatos, sus efectos se vern muy seguramente en el transcurso de la evolucin y mantenimiento de las aplicaciones.

Y pues para hacer un trabajo bien hecho, hay que reconocer que las consideraciones asociadas al desarrollo por capas
Veamos cada una de ellas y enumeremos algunas consideraciones principales

Que consideraciones deberamos tener en cuenta cuando pensamos en la Capa de Presentacin?

Y las consideraciones de la Capa de Lgica de Negocios?

Solo por mencionar los ms populares

Es mucho ms que una cuestin de gusto, hay que pensar en los costos, la productividad, portabilidad e interoperabilidad entre muchos otros factores

Y las consideraciones de la Capa de Acceso a Datos?

Nuevamente solo por mencionar los ms usados

Bueno y si ya estn separadas las 3 capas principales, que es entonces una de aplicacin de N capas?

Pues bien, la evolucin de la tecnologa y las redes de comunicaciones, hacen que cada da se generen nuevos escenarios de intercambio de informacin entre empresas, y entre sistemas existentes dentro de las empresas, de forma que se satisfagan las necesidades constantes y cambiantes de clientes y usuarios, para quienes debera resultar transparente el obtener informacin de un sistema u otro.

Otra de las razones importantes por las que surge este concepto, es debido a que en la evolucin del desarrollo de software, se ha identificado la necesidad de crear nuevas capas, especializadas en funciones especificas, diferentes a las 3 identificadas previamente. Es el caso de la seguridad, el control de excepciones, el transporte de datos entre capas, la generacin de trazas de errores, solo por mencionar algunas...

Esta por ejemplo es la propuesta de Microsoft para una aplicacin distribuida y que como vemos tiene ms de 3 capas

Esta es la visin simplificada de la misma propuesta

Ya que hemos hecho nfasis en el significado del desarrollo o distribucin de la lgica de programacin y recursos del sistema por capas, continuemos hablando de los componentes.

ahora bien

Hay componentes de diferentes tipos


Ejecutables, Pginas Web, Libreras, Controles, Procedimientos Almacenados, Servicios Web

Los ejecutables refieren programas o aplicaciones de escritorio que corren sobre un sistema operativo

Una pagina web es una fuente de informacin adaptada para la World Wide Web (WWW), que es accesible mediante un navegador de Internet y normalmente forma parte de un sitio web.
Wikipedia

Las libreras refieren bibliotecas o conjunto de clases que contienen lgica de programacin implementada como servicios que pueden ser utilizados desde otras libreras o aplicaciones

Los controles refieren libreras de tipo grafico que pueden ser usada en la construccin de interfaces de usuario, es el caso de los botones, etiquetas, ventanas y dems controles que usamos para construir aplicaciones de escritorio.

Un servicio web (en ingls Web service) es un conjunto de protocolos y estndares que sirven para intercambiar datos entre aplicaciones.
Wikipedia
Suena complicado verdad?

Una posible definicin sera hablar de los servicios web como un conjunto de aplicaciones o de tecnologas con capacidad para interoperar en la Web. Estas aplicaciones o tecnologas intercambian datos entre s con el objetivo de ofrecer unos servicios. Los proveedores ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio llamando a estos procedimientos a travs de la Web.
http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb

Tratemos de simplificar lo que acabamos de leer

Generalmente las aplicaciones exponen a los usuarios una interfaz grfica que permite interactuar con los datos de un negocio. Los servicios web son un tipo de aplicacin que permite exponer servicios (mtodos, procedimientos) existentes en clases o libreras clases, a travs de los cuales se accede a la lgica de negocio que ofrece un sistema, este es el mecanismo ms comnmente utilizado actualmente para compartir informacin entre empresas.

Estos son los conceptos inciales, entenderlos y apropiarse de su manejo nos garantizar entender su detalle, pero antes de terminar veamos una aclaracin

Importante! No es lo mismo hablar de una aplicacin distribuida y un sistema distribuido

Un sistema distribuido se define como: Una coleccin de computadores separados fsicamente y conectados entre s por una red de comunicaciones distribuida; cada mquina posee sus componentes de hardware y software que el usuario percibe como un
Wikipedia

solo sistema

Es el caso del conocido buscador de Google, el cual funciona utilizando una red de computadores que realizan simultneamente las bsquedas solicitadas por un usuario, sin que el usuario perciba siquiera que esto esta sucediendo. Una razn importante para la existencia de los sistemas distribuidos tiene que ver con la limitacin de recursos del hardware.

A pesar de actualmente contamos con altos niveles de procesamiento en el hardware disponible, estos niveles son limitados en recursos, es decir en capacidad de procesamiento, memoria, ancho de banda, entre otros criterios. Esta situacin hace que los arquitectos de software, tengan que implementar estrategias en donde mas de un servidor atiende las solicitudes de los sistemas que tienen por ejemplo muchos usuarios accediendo de forma concurrente al mismo sistema.

Por tanto podemos concluir que, una aplicacin distribuida puede requerir ser implementada como un sistema distribuido, sin embargo esta condicin no es indispensable, puesto que est determinada por necesidades especficas para tipos de aplicaciones y/o escenarios en los que priman principalmente factores como la escalabilidad horizontal y el desempeo.

Muchas Gracias...!!!

Você também pode gostar