miércoles, 24 de octubre de 2012


Arquitectura de software
La arquitectura de un software puede entenderse como aquella estructura del programa que cohesiona las funcionalidades más críticas y relevantes (necesarias para el sistema), y que sirve de soporte al resto de funcionalidades finales (necesarias para el usuario). Su especificación es ampliamente aceptada como el problema central de diseño de un sistema de software complejo. Uno de los principios de las metodologías modernas de desarrollo de software es priorizar la definición, el diseño, la implementación y la evaluación de la arquitectura del software. La esencia de este principio es dedicar los mínimos esfuerzos a implementar un prototipo estable de arquitectura que garantice la viabilidad del proyecto en las fechas más tempranas posibles. Este artículo reflexiona sobre la importancia de priorizar la arquitectura tanto para el producto de software como para el proceso de desarrollo, y sobre los beneficios potenciales que esta práctica puede reportar.

El software tradicional, como único proceso ejecutándose en un único ordenador, no supone arquitecturas complejas ni grandes riesgos. Sin embargo, los sistemas actuales aprovechan componentes comerciales, código abierto, sistemas distribuidos, nuevos y diversos lenguajes de programación, entornos de alojamiento (hosting) y de ejecución remota, y otras dependencias externas, que convierten a la arquitectura de un sistema en su producto técnico más crítico. Alcanzar una arquitectura estable que dé garantías sobre la viabilidad del proyecto, se considera el punto de transición entre lo que se suele denominar la fase de ingeniería

La arquitectura de un software puede entenderse como aquella estructura del programa que cohesiona las funcionalidades más críticas y relevantes (necesarias para el sistema), y que sirve de soporte al resto de funcionalidades finales (necesarias para el usuario). Su especificación es ampliamente aceptada como el problema central de diseño de un sistema de software complejo. Uno de los principios de las metodologías modernas de desarrollo de software es priorizar la definición, el diseño, la implementación y la evaluación de la arquitectura del software. La esencia de este principio es dedicar los mínimos esfuerzos a implementar un prototipo estable de arquitectura que garantice la viabilidad del proyecto en las fechas más tempranas posibles.

Arquitectura cliente-servidor
El término cliente/servidor es originalmente aplicado a la arquitectura de software que describe el procesamiento entre dos o más programas: una aplicación y un servicio soportante.
IBM define al modelo Cliente/Servidor. "Es la tecnología que proporciona al usuario final el acceso transparente a las aplicaciones, datos, servicios de cómputo o cualquier otro recurso del grupo de trabajo y/o, a través de la organización, en múltiples plataformas. El modelo soporta un medio ambiente distribuido en el cual los requerimientos de servicio hechos por estaciones de trabajo inteligentes o "clientes'', resultan en un trabajo realizado por otros computadores llamados servidores".
"Los elementos principales de la arquitectura cliente servidor son justamente el elemento llamado cliente y el otro elemento llamado servidor". Por ejemplo dentro de un ambiente multimedia, el elemento cliente seria el dispositivo que puede observar el vídeo, cuadros y texto, o reproduce el audio distribuido por el elemento servidor.
Por otro lado el cliente también puede ser una computadora personal o una televisión inteligente que posea la capacidad de entender datos digitales. Dentro de este caso el elemento servidor es el depositario del vídeo digital, audio, fotografías digitales y texto y los distribuye bajo demanda de ser una maquina que cuenta con la capacidad de almacenar los datos y ejecutar todo el software que brinda éstos al cliente.
Arquitectura Blackboard
Los sistemas de información distribuida, como la World Wide Web, han demostrado la simplicidad y versatilidad con la que los sistemas de hipermedia permiten recuperar eficazmente grandes volúmenes de información. En relación a la integración de documentos cuyo formato no es HTML cuyo contenido no debe alterarse, se han propuesto los sistemas abiertos de hipermedia para dar solución a tales problemas de interoperabilidad. El propósito de éste trabajo, es describir la construcción de un sistema abierto de hipermedia con fácil integración a la Web. El sistema consiste de un número reducido de extensiones a un navegador y de un servidor de enlaces con arquitectura reconfigurable. Entre las contribuciones de éste trabajo podemos resaltar que el sistema permite: Extender el modelo simple de enlace de la Web con otros modelos de enlaces como el específico, genérico, de avance u otros definidos por el usuario. Extender el modelo de proceso de la Web con una arquitectura reconfigurable que permite no solo introducir nuevos servidores de enlace sino también organizarlos con diferentes estilos como el conducto-filtro o el de pizarra. Hacer el seguimiento de documentos móviles, como aquellos involucrados en aplicaciones workflows, mediante el modelo de enlace de avance. Demostrar la superioridad expresiva de la arquitectura de pizarra sobre la conducto-filtro. El sistema se ha usado exitosamente para recuperar información académica de la Sección de Computación del Cinvestav al introducir nuevos enlaces sin alterar el contenido de los documentos Web, un problema bastante común pero en general difícil de resolver cuando no se cuenta con permisos de acceso para modificar los documentos.
Arquitectura de capas
La arquitectura basada en capas se enfoca en la distribución de roles y responsabilidades de forma jerárquica proveyendo una forma muy efectiva de separación de responsabilidades. El rol indica el modo y tipo de interacción con otras capas, y la responsabilidad indica la funcionalidad que está siendo desarrollada.
El estilo de arquitectura basado en capas se identifica por las siguientes características:
• Describe la descomposición de servicios de forma que la mayoría de la interacción ocurre solamente entre capas vecinas.
• Las capas de una aplicación pueden residir en la misma maquina física (misma capa) o puede estar distribuido sobre diferentes computadores (n-capas).
• Los componentes de cada capa se comunican con otros componentes en otras capas a través de interfaces muy bien definidas.
• Este modelo ha sido descrito como una “pirámide invertida de re-uso” donde cada capa agrega responsabilidad y abstracción a la capa directamente sobre ella.
Principios fundamentales
Los principios comunes que se aplican cuando se diseña para usar este estilo de arquitectura incluyen:
• Abstracción. La arquitectura basada en capas abstrae la vista del modelo como un todo mientras que provee suficiente detalle para entender las relaciones entre capas.
• Encapsulamiento. El diseño no hace asunciones acerca de tipos de datos, métodos, propiedades o implementación.
• Funcionalidad claramente definida. El diseño claramente define la separación entre la funcionalidad de cada capa. Capas superiores como la capa de presentación envía comandos a las capas inferiores como la capa de negocios y la capa de datos y los datos fluyen hacia y desde las capas en cualquier sentido.
• Alta cohesion. Cada capa contiene funcionalidad directamente relacionas con la tarea de dicha capa.
• Reutilizable. Las capas inferiores no tienen ninguna dependencia con las capas superiores, permitiéndoles ser reutilizables en otros escenarios.
• Desacople. La comunicacion entre las capas está basada en la abstracción lo que provee un desacople entre las capas.
Beneficios
Los principales beneficios del estilo de arquitectura basado en capas son:
• Abstracción. Las capas permiten cambios que se realicen en un nivel abstracto. Usted puede incrementar o disminuir el nivel de abstracción usado en cada capa de la “pila” jerárquica.
• Aislamiento. El estilo de arquitectura de capas permite asilar los cambios en tecnologías a ciertas capas para reducir el impacto en el sistema total.
• Rendimiento. Distribuir las capas entre múltiples sistemas (físicos) puede incrementar la escalabilidad, la tolerancia a fallos y el rendimiento.
• Mejoras en Pruebas. La capacidad de realizar pruebas se beneficia de tener una interfaces bien definidas para cada capa así como de la habilidad para cambiar a diferentes implementaciones de las interfaces de cada capa.
• Independencia. El estilo de arquitectura basado en capas el requerimiento de considerar el hardware y los problemas de instalación así como las dependencias de interfaces externas.
Los siguientes son algunas variaciones del estilo de arquitectura basado en capas:
• Capas estrictas (Strict layering). Cada capa solo puede invocar a la capa directamente debajo de a ella.
• Saltos de Capas (Layer skipping). Las capas pueden invocar otras capas más profundas que las que están directamente debajo de ellas. Esto puede incrementar el rendimiento pero impacta la portabilidad.
• Capa de Caja Negra (Black-box layering). Los limites de las capas y sus dependencias esta definidas de forma estricta usando interfaces, lo que soporta extensiones en run-time, intercepción y mejora la capacidad de realiza pruebas.
• Capa de Caja Blanca (White-box layering). Clases que colaboran entre los límites de las capas y están altamente acopladas.
Arquitectura de N-Capas / 3-Capas
Este estilo de despliegue arquitectónico describe la separación de la funcionalidad en segmentos separados de forma muy parecida al estilo de capas, pero en el cual cada segmento está localizado en un computador físicamente separado. Este estilo ha evolucionado desde la aproximación basada en componentes generalmente usando métodos específicos de comunicación asociados a una plataforma en vez de la aproximación basada en mensajes.
Arquitectura orientada a servicios
La arquitectura orientada a servicios de cliente (en inglés Service Oriented Architecture), es un concepto de arquitectura de software que define la utilización de servicios para dar soporte a los requisitos del negocio.
Permite la creación de sistemas de información altamente escalables que reflejan el negocio de la organización, a su vez brinda una forma bien definida de exposición e invocación de servicios (comúnmente pero no exclusivamente servicios web), lo cual facilita la interacción entre diferentes sistemas propios o de terceros.
SOA define las siguientes capas de software:
Aplicaciones básicas - Sistemas desarrollados bajo cualquier arquitectura o tecnología, geográficamente dispersos y bajo cualquier figura de propiedad;
De exposición de funcionalidades - Donde las funcionalidades de la capa aplicativa son expuestas en forma de servicios (generalmente como servicios web);
De integración de servicios - Facilitan el intercambio de datos entre elementos de la capa aplicativa orientada a procesos empresariales internos o en colaboración;
De composición de procesos - Que define el proceso en términos del negocio y sus necesidades, y que varía en función del negocio;
De entrega - donde los servicios son desplegados a los usuarios finales.

Arquitectura monolítica
Arquitectura Monolítica. Es un modelo en el cual el sistema operativo y todos los servicios fundamentales residen en un monitor monolítico que se accede a través de un mecanismo de llamada al núcleo.
Para corregir algunos de los problemas de la configuración "ejecutivo en tiempo real", algunos vendedores de RTOS han adoptado una arquitectura monolítica. En este modelo, el sistema operativo y todos los servicios fundamentales, tales como file system, residen en un monitor monolítico que se accede a través de un mecanismo de llamada al núcleo.
Las llamadas al núcleo hacen la transición del modo aplicación (o usuario) al modo supervisor. Se proporciona protección de modo que sólo se puede acceder a recursos del núcleo en modo supervisor; las aplicaciones se ponen en ejecución generalmente como procesos que tienen espacios de direccionamiento separados con protección entre ellos. 
Características
•Es un intento de paliar los problemas de la arquitectura plana.
•Su aportación estriba en que los procesos de usuario ejecutan en espacios de direccionamiento diferentes al del sistema operativo.
•Las implementaciones de 
UNIX han respondido tradicionalmente este diseño.
•Se aislan del sistema de los errores de los procesos de usuario, pero nuevos dispositivos aparecen en el mercado continuamente y es preciso escribir manejadores para soportarlos. De nuevo el sistema crece y la probabilidad del fallo aumenta.
•El programa de usuario lleva a cabo las llamadas al sistema mediante interrupciones software o traps.
•Sólo en modo supervisor se permite al procesador ejecutar instrucciones privilegiadas. Accesos a las posiciones de memoria asignadas a los adaptadores de dispositivo .
•Copia de datos entre espacios de direccionamiento diferentes.


miércoles, 17 de octubre de 2012

Sentencias de Lenguaje de Manipulación de Datos (DML)


SELECT
Utilizado para consultar registros de la base de datos que satisfagan un  criterio determinado.

INSERT
Utilizado para cargar lotes de datos en la base de datos en una única operación.

DELETE
Utilizado para modificar los valores de los campos y registros especificados.

UPDATE Utilizado para eliminar registros de una tabla de una base de datos.

SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
Ejemplo:
SELECT "nombre_ columna" FROM "nombre_ tabla"

INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Ejemplo:
Forma básica
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor
por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las
restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila
y se devuelve un error.

DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla,
Forma básica
DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''

UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.
Forma básica
UPDATE ''tabla''
SET ''columna1'' = ''valor1'' ,''columna2'' = ''valor2'',...WHERE ''columnaN = ''valorN''