Basicos Bloque 3
Basicos Bloque 3
Basicos Bloque 3
1. PATRONES DE DISEÑO
Son técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos
referentes al diseño de interacción o interfaces, sirven para crear objetos comunes con
pequeñas diferencias entre ellos (de ahí el nombre de patrón), según la escala o nivel de
abstracción, pueden ser:
• Patrones creacionales: patrones de diseño de software que solucionan problemas de
creación de instancias. Nos ayudan a encapsular y abstraer dicha creación, los tipos son:
o Singleton: garantiza la existencia de una única instancia para una clase y la creación de
un mecanismo de acceso global a dicha instancia. Restringe la instanciación de una clase
o valor de un tipo a un solo objeto.
o Abstract Factory: permite trabajar con objetos de distintas familias de manera que las
familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que
se esté usando. El problema a solucionar por este patrón es el de crear diferentes
familias de objetos, como por ejemplo, la creación de interfaces gráficas de distintos
tipos (ventana, menú, botón…).
o Builder: permite construir objetos complejos paso a paso. El patrón nos permite
producir distintos tipos y representaciones de un objeto empleando el mismo código de
construcción.
o Factory Method: centraliza en una clase constructora la creación de objetos de un
subtipo de un tipo determinado, ocultando al usuario la casuística, es decir, la diversidad
de casos particulares que se pueden prever, para elegir el subtipo que crear. Parte del
principio de que las subclases determinan la clase a implementar.
o Prototype: permite copiar objetos existentes sin que el código dependa de sus clases.
• Patrones estructurales: patrones de diseño software que solucionan problema de
composición (agregación) de clases y objetos:
o Adapter/Wraper: adapta una interfaz para que pueda ser utilizada por una clase que de
otro modo no podría utilizarla.
o Bridge: desvincula una abstracción de su implementación. Permite dividir una clase
grande, o un grupo de clases estrechamente relacionadas, en dos jerarquías separadas
(abstracción e implementación) que pueden desarrollarse independientemente la una
de la otra.
o Composite: permite componer objetos en estructuras de árbol y trabajar con esas
estructuras como si fueran objetos individuales.
o Decorator: permite añadir funcionalidades a objetos colocando estos objetos dentro de
objetos encapsuladores especiales que contienen estas funcionalidades.
o Facade: provee de una interfaz unificada simple para acceder a una interfaz o grupo de
interfaces de un subsistema.
o Flyweight: reduce la redundancia cuando gran cantidad de objetos poseen idéntica
información.
o Proxy: proporciona un sustituto o marcador de posición para otro objeto. Un proxy
controla el acceso al objeto original, permitiéndote hacer algo antes o después de que
la solicitud llegue al objeto original.
• Patrones de comportamiento: patrones de diseño software que ofrecen soluciones respecto
a la interacción y responsabilidades entre clases y objetos, así como los algoritmos que
encapsulan:
o Chain of Responsability: permite pasar solicitudes a lo largo de una cadena de
manejadores. Al recibir una solicitud, cada manejador decide si la procesa o si la pasa al
siguiente manejador de la cadena.
o Command: encapsula una operación en un objeto, permitiendo ejecutar dicha
operación sin necesidad de conocer el contenido de la misma.
o Interpreter: dado un lenguaje, define una representación para su gramática junto con
un intérprete del lenguaje.
o Iterator: permite realizar recorridos sobre objetos compuestos independientemente de
la implementación de estos.
o Mediator: define un objeto que coordine la comunicación entre objetos de distintas
clases, para que funcionen como un conjunto.
o Memento: permite guardar y restaurar el estado previo de un objeto sin revelar los
detalles de su implementación.
o Observer: define una dependencia de uno-a-muchos entre objetos, de forma que
cuando un objeto cambie de estado se notifique y actualicen automáticamente todos
los objetos que dependen de él.
o State: permite que un objeto modifique su comportamiento cada vez que cambie su
estado interno, es decir, parece como si el objeto cambiara su clase.
o Strategy: permite disponer de varios métodos para resolver un problema y elegir cuál
utilizar en tiempo de ejecución.
o Template Method: define en una operación el esqueleto de un algoritmo en la
superclase, delegando en las subclases algunos de sus pasos, esto permite que las
subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
o Visitor: permite definir nuevas operaciones sobre una jerarquía de clases sin modificar
las clases sobre las que opera, es decir, separar algoritmos de los objetos sobre los que
operan.
2. JAVA EE
Plataforma de programación para desarrollar y ejecutar software de aplicaciones en el lenguaje
de programación Java. Utiliza arquitecturas de N capas distribuidas y se apoya ampliamente en
componentes de software modulares ejecutándose sobre un servidor de aplicaciones. La
arquitectura Java EE está basada en tres conceptos clave:
• Servicios: Permiten que el programador se concentre en su lógica de negocio y usar estos
servicios para su aplicación. Estos servicios pueden tener funcionalidades de seguridad,
comunicaciones de red, logging, integridad de datos, etc. Estos servicios son proporcionados
por un contenedor.
• Contenedores: Son entornos en tiempo de ejecución, es decir un programa que se está
ejecutando y tu aplicación la montas sobre este como si fuera un plugin o el casete para un
consola de juegos. Hay varios tipos de contenedores y la agrupación de ellos forman un
servidor de aplicaciones.
• Componentes: Son objetos Java que contienen la lógica de negocio de la aplicación y usan
los servicios proporcionados por el contenedor. Hay varios tipos de componentes y según
ese tipo son desplegados en un contenedor u otro.
Estos tres conceptos permiten a Java EE definir una arquitectura de capas:
• Capa cliente: Con componentes que corren en la máquina del cliente (como un navegador,
un smartphone o un ordenador de escritorio)
• Capa web: Corre en el servidor Java EE o servidor de aplicaciones y Se comunica con la capa
web y la de capa de negocio de tal manera que transforma la información al formato
adecuado (por ejemplo HTML).
• Capa de servidor/negocio: Proporciona los datos y persiste la información de la capa cliente
y contiene la capa de negocio. También se ejecuta en el servidor de aplicaciones.
• Capa de datos: Donde se persisten los datos, por ejemplo una bbdd.
2.1. API
Tiene varias especificaciones de API, como JDBC, RMI, e-mail, JMS, Servicios Web, XML, etc y
define cómo coordinarlos. Java EE también configura algunas especificaciones únicas para Java
EE para componentes. Estas incluyen Enterprise JavaBeans, servlets, portlets (siguiendo la
especificación de Portlets Java), JavaServer Pages y varias tecnologías de servicios web. Ello
permite al desarrollador crear una aplicación de empresa portable entre plataformas y
escalable, a la vez que integrable con tecnologías anteriores. Otros beneficios añadidos son, que
el servidor de aplicaciones puede manejar transacciones, la seguridad, escalabilidad,
concurrencia y gestión de los componentes desplegados, significando que los desarrolladores
pueden concentrarse más en la lógica de negocio de los componentes en lugar de en tareas de
mantenimiento del bajo nivel. Las API de Java EE incluyen varias tecnologías que extienden la
funcionalidad de las API base de Java SE:
• Javax.ejb (Enterprise JavaBeans): define un conjunto de API que un contenedor de objetos
distribuidos soportará para suministrar persistencia, RPCs (usando RMI o RMI-IIOP), control
de concurrencia, transacciones y control de acceso para objetos distribuidos.
• Javax.naming: forma parte de JNDI (Java Naming and Directory Interface), que es usada por
Java RMI para buscar objetos en una red.
• Java.sql: forma parte de JDBC (Java DataBase Conectivity), que es una API que permite la
ejecución de operaciones sobre bases de datos desde Java, independientemente del
sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el
dialecto SQL del modelo de base de datos que se utilice.
• Java.transction: forma parte de JTA, que establece una serie de Interfaces java entre el
manejador de transacciones y las partes involucradas en el sistema de
transacciones distribuidas: el servidor de aplicaciones, el manejador de recursos y las
aplicaciones transaccionales.
• Java.xml: forma parte de JAXP (Java API for XML)
• Java.jms: forma parte de JMS (Java Message Service), solución para el uso de oclas de
mensajes.
• Java.persistence: provee las clases e interfaces para gestionar la interacción entre los
proveedores de persistencia, las clases administradas y los clientes de la JPA (Java
Persistence API).
- Apache Tomcat: funciona como un contenedor de servlets. Incluye el compilador Jasper, que
compila JSPs convirtiéndolas en servlets. El motor de servlets de Tomcat a menudo se
presenta en combinación con el servidor web Apache.
- Apache Hadoop: entorno de trabajo para software, bajo licencia libre, para programar
aplicaciones distribuidas que manejen grandes volúmenes de datos. Permite a las
aplicaciones trabajar con miles de nodos en red y petabytes de datos.
- Apache Avro es un marco de serialización de datos y llamadas de procedimiento remoto
orientado a filas. Utiliza JSON para definir tipos de datos y protocolos, y serializa datos en un
formato binario compacto. Su uso principal es en Apache Hadoop, donde puede
proporcionar un formato de serialización para datos persistentes y un formato de cable para
la comunicación entre los nodos de Hadoop y desde los programas cliente a los servicios de
Hadoop.
3. XML (eXtensible Markup Language)
Metalenguaje que permite definir lenguajes de marcas desarrollado por W3C utilizado para
almacenar datos en forma legible. Permite definir la gramática de lenguajes específicos para
estructurar documentos grandes. El tratamiento del fichero XML comienza por la localización
del mismo a lo largo del conjunto de documentos existentes en el mundo. Para llevar a cabo
esta localización de forma unívoca, se utilizan los URI (Uniform Resource Identifiers), de los
cuales los URL (Uniform Resource Locators) son sin duda los más conocidos. A diferencia de
otros lenguajes, XML da soporte a bases de datos, siendo útil cuando varias aplicaciones deben
comunicarse entre sí o integrar información.
XML es una tecnología sencilla que tiene a su alrededor otras que la complementan y la hacen
mucho más grande, con unas posibilidades mucho mayores. Tiene un papel muy importante en
la actualidad ya que permite la compatibilidad entre sistemas para compartir la información de
una manera segura, fiable y fácil:
• Apache Axis: framework de código abierto, basado en XML para servicios web. Consiste en
una implementación en Java y otra en C++ del servidor SOAP, así como diversos utilitarios y
APIs para generar y desplegar aplicaciones de servicios web.
• SAX (Simple API for XML): procesa (analiza) el documento o información en XML de una
manera muy diferente a DOM, SAX procesa la información por eventos. A diferencia de DOM
que genera un árbol jerárquico en memoria , SAX procesa la información en XML conforme
esta sea presentada (evento por evento), efectivamente manipulando cada elemento a un
determinado tiempo , sin incurrir en uso excesivo de memoria.
○ SAX está enfocado a la lectura de documentos XML
○ SAX es un "parser (analizador)" ideal para manipular archivos de gran tamaño, ya que
no ocupa generar un árbol en memoria como es requerido en DOM.
○ Es más rápido y sencillo que utilizar DOM
○ La sencillez antes mencionada tiene su precio, debido a que SAX funciona por eventos
no es posible manipular información una vez procesada, en DOM no existe esta
limitación ya que se genera el árbol jerárquico en memoria y es posible regresar a
modificar nodos.
• OWL (Web Ontology Language): un lenguaje de marcado para publicar y compartir datos
usando ontologías en la WWW. OWL tiene como objetivo facilitar un modelo de marcado
construido sobre RDF y codificado en XML.
5. .NET
5.1. ADO.NET
Conjunto de componentes del software que pueden ser usados por los programadores para
acceder a datos y a servicios de datos. Es parte de la biblioteca de clases base que están incluidas
en el Microsoft .NET Framework. Es comúnmente usado por los programadores para acceder y
para modificar los datos almacenados en un Sistema Gestor de Bases de Datos Relacionales,
aunque también puede ser usado para acceder a datos en fuentes no relacionales, consiste en
dos partes primarias:
• Data provider: clases que proporcionan el acceso a una fuente de datos, como Microsoft
SQL Server (puerto 1433) y Oracle (puerto 1521). Cada fuente de datos tiene su propio
conjunto de objetos del proveedor, pero cada uno tienen un conjunto común de clases de
utilidad:
o Connection: proporciona una conexión usada para comunicarse con la fuente de datos.
o Command: usado para realizar alguna acción en la fuente de datos, como lectura,
actualización o borrado de datos relacionales.
o Parameter: describe un simple parámetro para un command.
o DataAdapter: "puente" utilizado para transferir data entre una fuente de datos y un
objeto DataSet.
o DataReader: es una clase usada para procesar eficientemente una lista grande de
resultados, un registro a la vez.
• DataSets: grupo de clases que describen una simple base de datos relacional en memoria y
representa un esquema (o una base de datos entera o un subconjunto de una), contiene las
tablas y las relaciones entre esas tablas.
○ DataTable representa una sola tabla en la base de datos. Tiene un nombre, filas, y
columnas.
▪ DataView "se sienta sobre" un DataTable y ordena los datos, todas las DataTables
tienen un filtro por defecto, mientras que pueden ser definidos cualquier número
de DataViews adicionales, reduciendo la interacción con la base de datos
subyacente y mejorando así el desempeño.
NUnit es un framework open source de Pruebas de unidad para Microsoft .NET y Mono. Sirve al
mismo propósito que JUnit realiza en el mundo Java, y es uno de muchos en la familia xUnit.
5.2. ASP.NET
Entorno para aplicaciones web desarrollado y comercializado por Microsoft. Es usado por
programadores y diseñadores para construir sitios web dinámicos, aplicaciones web y servicios
web XML. Funciona sobre el servidor de Microsoft IIS, y sobre Apache.
Las páginas de ASP.NET, conocidas oficialmente como "web forms" (formularios web), son el
principal medio de construcción para el desarrollo de aplicaciones web.8 Los formularios web
están contenidos en archivos con una extensión ASPX; estos archivos típicamente contienen
etiquetas HTML o XHTML estático, y también etiquetas definiendo Controles Web que se
procesan del lado del servidor y Controles de Usuario donde los desarrolladores colocan todo el
código estático y dinámico requerido por la página web.
Las aplicaciones ASP.NET son alojadas en un servidor web y se tiene acceso a ellas mediante el
protocolo sin estado HTTP, que no guarda ninguna información sobre conexiones anteriores.
Por lo tanto, si la aplicación requiere interacción entre conexiones, tiene que implementar su
propia administración del estado. ASP.NET proporciona varias maneras de administrar el estado
de las aplicaciones ASP.NET:
• Estado de la aplicación: el estado de la aplicación (Application state) es una colección de
variables definidas por el usuario que son compartidas por todas las invocaciones de una
aplicación ASP.NET.
• Estado de la sesión: colección de variables definidas por el usuario, las cuales persisten
durante la sesión de un usuario. Estas variables son únicas para diferentes instancias de una
sesión de usuario, Las variables de sesión pueden ser preparadas para ser automáticamente
destruidas después de un determinado tiempo de inactividad, incluso si la sesión no ha
terminado. Del lado del cliente, una sesión de usuario es identificada por una cookie o
codificando el ID de la sesión en la misma URL. ASP.NET proporciona tres modos de
persistencia para variables de sesión:
○ InProc: Las variables de sesión son mantenidas dentro del proceso. Sin embargo, en este
modo, las variables son destruidas cuando el proceso ASP.NET es reciclado o terminado.
○ StateServer: En este modo, ASP.NET ejecuta un servicio de Windows separado que
mantiene las variables de estado. Como esta administración de estado ocurre fuera del
proceso ASP.NET, tiene un impacto negativo en el rendimiento, pero permite a múltiples
instancias de ASP.NET compartir el mismo estado del servidor, permitiendo que una
aplicación ASP.NET pueda tener su carga balanceada y escalada en múltiples servidores
○ SqlServer: en este modo, las variables de estado son almacenadas en un servidor de
base de datos, accesible usando SQL. Las variables de sesión pueden persistir a través
de finalizaciones de procesos también en este modo.
DevExpress: es una suite de componente de interfaz de usuario en paltaformas .NET, incluye
distintos componentes tales como tablas, calendarios, editor de HTML, Hojas de cálculo,
editores de datos o gráficas.
9. REST vs SOAP
• REST (Representational State Transfer): es una interfaz para conectar varios sistemas basados
en el protocolo HTTP, sirve para obtener y generar datos y operaciones, devolviendo esos datos
en formatos muy específicos, como XML y JSON. REST se apoya en HTTP, los verbos que utiliza
son exactamente los mismos, con ellos se puede hacer GET, POST, PUT y DELETE. Crea una
petición HTTP que contiene toda la información necesaria, es decir, un REQUEST a un servidor
tiene toda la información necesaria y solo espera una RESPONSE, ósea una respuesta en
concreto.
Hace mucho más fácil el desarrollo de una API REST, en este caso de un servicio en el cual
nosotros vamos a almacenar nuestra lógica de negocio y vamos servir los datos con una serie
de recursos URL y una serie de datos que nosotros los limitaremos, es decir, será nuestro
BACKEND nuestra lógica pura de negocios que nosotros vamos a utilizar. Todos los objetos se
manipulan mediante URI (Universal Resource Identifier).
• SOAP (Simple Object Access Protocol): protocolo estándar que define cómo dos objetos en
diferentes procesos pueden comunicarse por medio de intercambio de datos XML, es
un paradigma de mensajería de una dirección sin estado, que puede ser utilizado para
formar protocolos más completos y complejos según las necesidades de las aplicaciones que
lo implementan. Puede formar y construir la capa base de una "pila de protocolos de web
service", ofreciendo un framework de mensajería básica en el cual los “web services” se
pueden construir. SOAP tiene tres características principales:
○ Extensibilidad: seguridad y WS-routing son extensiones aplicadas en el desarrollo.
○ Neutralidad: bajo TCP puede ser utilizado sobre cualquier protocolo de aplicación como
HTTP, SMTP, JMS…
○ Independencia: permite cualquier modelo de programación.
Un mensaje SOAP es un documento XML ordinario con una estructura definida en la
especificación del protocolo. Dicha estructura la conforman las siguientes partes:
• Envelope: parte que identifica al mensaje SOAP como tal.
• Header: permite enviar información relativa a cómo debe ser procesado el mensaje. Es
una herramienta para que los mensajes puedan ser enviados de la forma más
conveniente para las aplicaciones.
• Body: información relativa a la llamada y la respuesta.
• Fault: nformación relativa a errores que se hayan producido durante el procesado del
mensaje y el envío.