Este documento presenta una introducción al desarrollo de aplicaciones distribuidas. Explica conceptos clave como componentes, capas, servicios web y arquitectura de aplicaciones. También recomienda conocimientos previos de ingeniería de software y programación orientada a objetos antes de desarrollar aplicaciones distribuidas.
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
Esta presentación corresponde al "Tema 2: Tecnologías de desarrollo web" de la asignatura "Desarrollo de Aplicaciones Web" de 3º del Grado en Ingeniería del Software de la ETSII en la Universidad Rey Juan Carlos.
Objetivo: Caracterizar los fundamentos del proceso de desarrollo de software mediante su contextualización en la ingeniería de software para planificar el desarrollo de software de manera metodológica.
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
Esta presentación corresponde al "Tema 2: Tecnologías de desarrollo web" de la asignatura "Desarrollo de Aplicaciones Web" de 3º del Grado en Ingeniería del Software de la ETSII en la Universidad Rey Juan Carlos.
Objetivo: Caracterizar los fundamentos del proceso de desarrollo de software mediante su contextualización en la ingeniería de software para planificar el desarrollo de software de manera metodológica.
Esta sesión de formación contiene material para obtener el conocimiento necesario para realizar ingeniería inversa sobre aplicaciones Android, ver cómo realizar peritaje forense y trabajar en local con la información de un dispositivo smartphone. Analizando varias muestras de malware y desarrollando una vulnerabilidad de tipo 0-day.
MVP Open Day - Best Practices/Experiences Sorey García
Una presentación creada para compartir con los MVPs e Influenciadores, algunas de las experiencias y buenas practicas para hacerte a ti mismo un influencer.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
Es un diagrama para La asistencia técnica o apoyo técnico es brindada por las compañías para que sus clientes puedan hacer uso de sus productos o servicios de la manera en que fueron puestos a la venta.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
2. Sobre mi… Una frase para empezar… “ El conocimiento esta condicionado por la experiencia” Me sé algunas, me gusta compartir las que me sé, las que no sé, me gusta aprenderlas, recibo todo tipo de aportes y correcciones… Y pues lo que no sepamos, lo averiguamos.
3. Sobre el curso… Este curso esta enfocado a dar las nociones principales alrededor del desarrollo de aplicaciones distribuidas, reconociendo las tecnologías relacionadas a cada una de las partes fundamentales de estas y por supuesto las consideraciones asociadas a su desarrollo.
4. Importante! ... desarrollar software , no es programar … … este curso requiere conocer claramente esa diferencia!
5. El desarrollo de software incluye todas las disciplinas asociadas a la ingeniería de software desde el análisis hasta la puesta en producción … el desarrollo de aplicaciones distribuidas sugiere por tanto consideraciones durante la ejecución de todo el ciclo de vida …
6. Recomendación! Si a este momento, no reconoce conceptos como, ingeniería de software u orientación a objetos , inicie con el aprendizaje de estos antes de profundizar técnicamente en la distribución de aplicaciones. Ahora si, comencemos…
8. Es una aplicación con distintos componentes que se ejecutan en entornos separados , normalmente en diferentes plataformas conectadas a través de una red Wikipedia
10. Cuales son los componentes que se distribuyen ? Que criterios se usan para determinar que conforma un componente ? A través de que mecanismos se realiza la comunicación entre componentes distribuidos ? Que es un componente ?
11. Que debería saberse y/o tenerse en cuenta para desarrollar una aplicación distribuida ?
12. Capas Niveles Arquitectura Protocolos Calidades Sistémicas UML Despliegue Cliente/Servidor Servicios Lógica de Negocio Acceso a Datos Webservices Interfaces Componentes Comunicación Objetos Interfaz de Usuario Paquetes Interoperabilidad Comunicación
14. Las distribución refiere a la construcción de software por partes , a las cuales les son asignadas un conjunto específico de responsabilidades dentro de un sistema.
15. Esta distribución como bien enunciaba la definición formal, habla de que las partes o componentes se encuentran en entornos separados , sin embargo, lo que tiene implícito esta definición, es que para realizar esta separación física primero debe tenerse clara la separación lógica de las partes de una aplicación, esto quiere decir que programáticamente existe una forma de separar o agrupar los componentes .
16. La separación física no es en todas las ocasiones “maquinas diferentes” de acuerdo a arquitectura tambien puede ser la ubicación de un conjunto de funcionalidades en archivos, rutas o montadas sobre técnologías diferentes dentro de la misma máquina
17. Ahora bien, cuando hablemos de distribución lógica lo entenderemos como separación por “ Capas ” (tiers) y cuando hablemos de distribución física usaremos el término separación en “ Niveles ” (layers)
18. La separación por capas y niveles hace parte de la arquitectura del sistema y es definida por el arquitecto de la aplicación. … una situación evidente si conocemos la ingeniera de software… Nuestra tarea en este curso está en familiarizarnos con este tipo de tareas.
19. Ambos tipos de distribución se hacen con base en las necesidades técnicas , de diseño y/o de negocio … esas necesidades son las que aprenderemos a identificar en este curso.
20. La separación en niveles tiene una serie de consideraciones de tipo técnico y también económico , a las que nos referiremos mas adelante, por ahora lo concebiremos de forma básica, como separación física de los componentes. Sin embargo de las capas , tenemos más que decir…
21. “ Las capas dentro de una arquitectura son un conjunto de servicios especializados que pueden ser accesibles por múltiples clientes y que deben ser fácilmente reutilizables .”
22. Las capas además, según el escenario y tipo de aplicación , están separadas físicamente . Si, físicamente ! Lo que significa que una capa puede ser a su vez un nivel
23. 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…
25. Veamos una definición 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 más complejo .
26. Cada componente de un sistema puede verse como un paquete o módulo
27. Un componente esta compuesto por elementos que pueden ser clases y/o recursos complementarios como archivos de configuración, imágenes, entre otros. Y a su vez esas clases y recursos pueden están agrupados dentro del componente en subpaquetes , de acuerdo a su naturaleza o necesidades de negocio.
28. En este punto visualizamos varios conceptos que podemos presentar de la siguiente forma… Aplicación Niveles Capas Componentes Paquetes Clases Sub paquetes Otros Recursos
29. Hablar de clases en este punto, nos hace recordar que debemos hacer un recuento nuestros conocimientos sobre programación orientada a objetos , ya que la construcción de componentes esta basada es los mismos principios y/o características con las que cumple este conocido paradigma
30. … la modularidad y la reusabilidad Qué son? Recordemos lo más básico … Los principios que dirigen la orientación a objetos son
31. En términos simples la modularidad significa trabajar por partes … (de hecho, tal cual como lo plantea el desarrollo por componentes)
32. Y la reusabilidad significa No se invente la rueda! Lo que ya esta hecho es para usarse y algunas de las cosas que no están hechas, deben construirse pensando en que alguien necesitará usarlo alguna vez
33. Que es una clase ? Que es un objeto ? Que es un mensaje ? Que son atributos , características o propiedades ? Que son métodos , procedimientos , funciones o servicios ? Que significa que un objeto esta compuesto por una interfaz , una implementación y un estado ? Veamos, que tanto recordamos…
34. Que es abstracción , encapsulamiento , polimorfismo , herencia ? Después de este repaso avancemos un poco más Si en este punto se encuentra un poco confundido, recuerde mi consejo, no profundice más hasta no entender claramente los conceptos mencionados
35. Los componentes igual que los objetos deben cumplir con dos características importantes la alta cohesión y el bajo acoplamiento … que tan claros son?….
36. Cuando decimos que un componente tiene una alta cohesión hablamos de que todos los elementos dentro de el están estrechamente relacionados … el criterio de relación debe ser de negocio o técnico y no subjetivo
37. 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 arquitectónica…
38. Tener estas dos metas en mente durante la construcción de componentes , ahorrará trabajo y tiempos de desarrollo a los equipos y proyectos … si reconocemos el valor de la ingeniería de software, entenderemos lo que esto significa…
39. Los componentes desarrollados satisfacen una necesidad asociada a una o varias partes de una aplicación, y son separados de acuerdo a su uso o a por una agrupación lógica que determina la relación entre ellos.
40. El paradigma básico de la separación por capas establece al menos 3 partes distintas dentro de una aplicación La Presentación La Lógica de Negocio El Acceso a Datos y los Datos Ahora bien…
42. La Presentación o interfaz de usuario se refiere al mecanismo de interacción del usuario con el sistema Los tipos de interfaces de software más comunes son las aplicaciones de ventanas y web Los tipos de interfaces de hardware más comunes son el ratón, el teclado, el micrófono, pantallas táctiles, dispositivos de audio
43. La Lógica de Negocio refiere el conjunto de reglas que determinan específicamente como funciona un sistema, según su naturaleza , y bajo que parámetros y condiciones de acuerdo a las necesidades de los clientes y usuarios .
44. El acceso a datos refiere al medio a través 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 .
45. Después de conocer estos conceptos básicos, podemos pasar entonces a ver, los diferentes tipos de aplicación Aplicaciones Monolíticas Aplicaciones Cliente/Servidor Aplicaciones de 3 Capas Aplicaciones de N Capas … veamos unas definiciones básica sobre estas
46. Una aplicación monolítica o de una capa es aquella cuya interfaz, lógica de negocio y acceso a datos se encuentran mezclados o altamente acoplados, esto dificulta que pueda hacerse una separación lógica y física donde alguna de las partes pueda ser reutilizable.
47. Una aplicación Cliente/Servidor o aplicación de dos capas es aquella donde los datos y la lógica de negocio se encuentran separados de la interfaz, este tipo de aplicación también es denominada, cliente liviano .
48. Otro escenario válido para una aplicación Cliente/Servidor , se da separando los datos de la interfaz y la lógica de negocio, este tipo de aplicación también es denominado, cliente pesado.
49. Una aplicación 3 capas es aquella donde la interfaz, la lógica de negocio, el acceso a datos y los datos se encuentran separados.
50. Es muy importante entender, que la separación de la que se habla no es necesariamente física , como ya se había dicho antes, la primera separación que se da es lógica y debemos reiterar que la separación lógica es programática .
51. “ Es muy tentador para los desarrolladores mezclar una o más capas ; por ejemplo implementando alguna validación u otro proceso de negocios dentro de la capa de presentación en vez de en la capa de lógica de negocio, ….”
52. Sin embargo ubicar la lógica de programación en las capas adecuadas , es más un comportamiento que debería ser inherente al trabajo como programador, obviamente uno que este interesado en hacer su trabajo, bien hecho. Los problemas que conllevan la mala separación de la lógica de programación , no son inmediatos, sus efectos se verán muy seguramente en el transcurso de la evolución de las aplicaciones.
53. 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 iniciales…
58. Es mucho más que una cuestión de gusto, hay que pensar en los costos, la productividad, portabilidad e interoperabilidad entre muchos otros factores… Solo por mencionar los más populares…
61. Bueno y si ya están separadas las 3 capas principales, que es entonces una de aplicación de N capas ?
62. Pues bien, la evolución de la tecnología y las redes de comunicaciones , hacen que cada día se generen nuevos escenarios de intercambio de información entre empresas , y entre los mismos sistemas existentes dentro de las empresas, de forma que se satisfagan las necesidades constantes y cambiantes de clientes y usuarios, para quienes debe resultar transparente el obtener información de un sistema u otro.
63. Otra de las razones importantes por las que surge este concepto, es debido a que en la evolución del desarrollo de software, se ha identificado la necesidad de crear nuevas capas, especializadas en funciones especificas , diferentes a las 3 identificadas previamente. Tal es el caso de la seguridad, el control de excepciones, el transporte de datos entre capas, la generación de trazas de errores , entre otros.
64. Este por ejemplo es la propuesta de Microsoft para una aplicación distribuida y que como vemos tiene más de 3 capas … Sin estrés, no hemos pasado de la tierra al cielo, con el tiempo iremos entendiendo que significa todo esto
65. Ya que hemos hecho énfasis en el significado del desarrollo o distribución de la lógica de programación y recursos del sistema por capas , continuemos hablando de los componentes .
66. Hay componentes de diferentes tipos Ejecutables, Páginas Web, Librerías, Controles, Procedimientos Almacenados, Servicios Web… … ahora bien…
67. Los ejecutables refieren programas o aplicaciones de escritorio que corren sobre un sistema operativo
68. Una pagina web es una fuente de información adaptada para la World Wide Web (WWW), que es accesible mediante un navegador de Internet y normalmente forma parte de un sitio web. Wikipedia
69. Las librerías refieren bibliotecas o conjunto de clases que contienen lógica de programación implementada como servicios que pueden ser utilizados desde otras librerías o aplicaciones
70. Los controles refieren librerías de tipo grafico que pueden ser usada en la construcción de interfaces de usuario.
71. Un servicio web (en inglés Web service ) es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones Wikipedia Suena complicado verdad? … no hay problema, este tema lo ampliaremos más adelante!
72. Lo que debemos saber inicialmente sobre los servicios web es que actualmente son la forma mas popular de comunicación entre niveles, que si recordamos, refiere a entornos separados e incluso de tecnologías diferentes .
73. Tratemos de simplificar lo que acabamos de leer… Generalmente las aplicaciones exponen a los usuarios una interfaz gráfica que permite interactuar con los datos de un negocio. Los servicios web son un tipo de aplicación que permite exponer servicios ( métodos, procedimientos ) existentes en clases o librerías clases, a través de los cuales se accede a la lógica de negocio que ofrece un sistema, este es el mecanismo más comúnmente utilizado actualmente para compartir información entre empresas.
74. Estos son los conceptos iníciales , entenderlos y apropiarse de su manejo nos garantizará entender su detalle y los temas que vienen más adelante, pero antes de terminar veamos una aclaración…
75. Importante! No es lo mismo hablar de una aplicación distribuida y un sistema distribuido
76. Un sistema distribuido se define como: Una colección de computadores separados físicamente y conectados entre sí por una red de comunicaciones distribuida; cada máquina posee sus componentes de hardware y software que el usuario percibe como un solo sistema Wikipedia
77. Es el caso del conocido buscador de Google , el cual funciona utilizando una red de computadores que realizan simultáneamente las búsquedas solicitadas por un usuario, sin que el usuario perciba siquiera que esto esta sucediendo . Una razón importante para la existencia de los sistemas distribuidos tiene que ver con la limitación de recursos del hardware .
78. 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 situación 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 .
79. Un aplicación distribuida puede requerir ser implementada como un sistema distribuido, sin embargo esta condición no es indispensable, puesto que está determinada por necesidades específicas para tipos de aplicaciones y/o escenarios en los que priman principalmente factores como la escalabilidad horizontal y el desempeño … estas ultimas refieren calidades sistémicas, temas que veremos más adelante…