Upload
doanthien
View
216
Download
0
Embed Size (px)
Citation preview
1
INSTITUTO POLITÉCNICO NACIONAL
UNIDAD PROFESIONAL INTERDISIPLINARIA DE INGENIERÍA Y
CIENCIAS SOCIALES Y ADMINISTRATIVAS
SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN
PATRONES ARQUITECTÓNICOS PARA PROGRAMACIÓN DISTRIBUIDA
T E S I S
PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS EN INFORMÁTICA
P R E S E N T A
MICHAEL ROJAS RODRÍGUEZ
DIRECTORES:
MC. ELIZABETH ACOSTA GONZAGA MC. JESÚS ANTONIO ALVAREZ CEDILLO
MEXICO, D.F. 2010
3
CARTA CESIÓN DE DERECHOS En la Ciudad de México D.F el día 26 el mes de Noviembre del año 2010, el que suscribe Michael
Rojas Rodríguez alumno del Programa de Maestría en Ciencias en Informática con número de
registro B081882, adscrito a la Sección de Estudios de Posgrado de la UPIICSA-IPN, manifiesta
que es autor intelectual del presente trabajo de Tesis bajo la dirección de la M. en C. Elizabeth
Acosta Gonzaga y el M. en C. Jesús Antonio Álvarez Cedillo y cede los derechos del trabajo
intitulado “Patrones Arquitectónicos Para Programación Distribuida”, al Instituto Politécnico
Nacional para su difusión, con fines académicos y de investigación.
Los usuarios de la información no deben reproducir el contenido textual, gráficas o datos del trabajo
sin el permiso expreso del autor y/o director del trabajo. Este puede ser obtenido escribiendo a la
siguiente dirección [email protected] Si el permiso se otorga, el usuario deberá dar el
agradecimiento correspondiente y citar la fuente del mismo.
INSTITUTO POLITÉCNICO NACIONAL
SECRETARÍA DE INVESTIGACIÓN Y POSGRADO
4
AGRADECIMIENTOS El principal agradecimiento es a mis padres quienes siempre me han apoyado y han
creído en mi en todo momento, siempre los tengo presentes y en verdad sin ellos no seria
la persona que ahora soy, todo el esfuerzo y motivación ellos me lo han otorgado. Muchas
gracias Papá y Mamá por sus sabios y sinceros consejos.
A mis hermanos Connie y Sergio quienes me guían y apoyan. Se que puedo contar con
ustedes siempre.
A mis profesores quienes con sus conocimientos, consejos y ayuda he podido lograr un
paso más en mi carrera profesional.
A mis directores, Maestra Elizabeth Acosta gracias por todo el apoyo y buenos y sabios
consejos que me ha dado. Maestro Jesús Álvarez, por la buena disposición y el apoyo en
todo momento.
Finalmente quiero agradecer a la vida, al destino y a Dios por darme la oportunidad de
concluir un paso mas en mi carrera profesional y por ponerme en mi camino siempre a
todas las personas que me han guiado.
Muchas Gracias
Michael Rojas Rodríguez
5
Índice
Resumen .............................................................................................................................. 12
Summary .............................................................................................................................. 13
Introducción .......................................................................................................................... 14
Planteamiento de la problemática ....................................................................................... 16
Objetivos .............................................................................................................................. 17
Justificación .......................................................................................................................... 18
Alcances ............................................................................................................................... 19
Resultados Esperados ......................................................................................................... 20
Limitaciones ......................................................................................................................... 20
Marco teórico ....................................................................................................................... 21
CAPITULO 1, Una visión esencial de la arquitectura de software y patrones .................... 24
Sistemas de información distribuidos ............................................................................... 25
Arquitectura de Software .................................................................................................. 31
Vistas Arquitectónicas....................................................................................................... 39
Patrones ............................................................................................................................ 42
Tipos de Patrones ............................................................................................................. 44
Patrones de diseño ........................................................................................................ 44
Patrones de creación ..................................................................................................... 46
Patrones estructurales ................................................................................................... 46
Patrones de comportamiento ......................................................................................... 47
Patrones arquitectónicos .................................................................................................. 49
El Futuro de los Patrones ................................................................................................. 51
Lenguajes de Descripción Arquitectónica (ADL’s) ........................................................... 54
Lenguaje Acme-Armi ..................................................................................................... 58
CAPITULO 2, Patrones Arquitectónicos desde perspectivas actuales ............................... 60
Patrón Arquitectónico Modelo Vista Controlador (MVC) .................................................. 61
Modelo (Model): ............................................................................................................. 61
Vista (View): ................................................................................................................... 61
Controlador (Controller): ................................................................................................ 62
Patrón Arquitectónico Broker ............................................................................................ 63
Objetivo del patrón Broker ............................................................................................. 64
6
Motivación ...................................................................................................................... 64
Usos Conocidos del patrón arquitectónico Broker ........................................................ 65
Características Benéficas del Patrón Arquitectónico Broker ......................................... 66
Patrón Arquitectónico Pipes and Filters ........................................................................... 67
Contexto ......................................................................................................................... 67
Motivación ...................................................................................................................... 67
Usos Conocidos ............................................................................................................. 68
CAPITULO 3. Propuesta de solución usando el Patrón Arquitectónico Piramidal y la
Arquitectura Piramidal de Sistemas Distribuidos ................................................................ 69
El Patrón Piramidal ........................................................................................................... 70
Características de Niveles ............................................................................................. 71
Flujo de Operación del Patrón Piramidal ....................................................................... 72
Características Generales ............................................................................................. 74
Ventajas del Patrón Piramidal ....................................................................................... 75
El Patrón Piramidal desde una perspectiva genérica .................................................... 77
Introducción al caso de estudio ........................................................................................ 78
Modelo Básico de Operación ......................................................................................... 78
Procesamiento de Medios de Pago Electrónicos .......................................................... 80
Problemática .................................................................................................................. 80
Explicación Técnica de la Problemática ........................................................................ 81
Propuesta de Solución a la problemática ...................................................................... 82
Flujo de Implementación del Patrón Piramidal .............................................................. 89
CAPÍTULO 4, Implementando el Patrón Piramidal. ............................................................ 92
Consideraciones Previas .................................................................................................. 93
Nivel Base ...................................................................................................................... 93
Nivel de Interpretación ................................................................................................... 94
Nivel Fuente ................................................................................................................... 94
Primer Paso, Especificar Reglas a Nivel Base de Datos ................................................ 95
Definición de Elementos de la Base de Datos .............................................................. 96
Nombre de la Instancia ............................................................................................. 96
Bases de Datos ......................................................................................................... 96
Tablespace ................................................................................................................ 97
Tablas........................................................................................................................ 97
Columnas .................................................................................................................. 98
7
Vistas......................................................................................................................... 99
Índices ....................................................................................................................... 99
Llaves foráneas ...................................................................................................... 100
Cluster .................................................................................................................... 100
Trigger .................................................................................................................... 100
Procedimiento ........................................................................................................ 101
Función .................................................................................................................. 101
Secuencia .............................................................................................................. 101
Ligas de base de datos (database link) ................................................................. 102
Sinónimo ................................................................................................................ 102
Paquete .................................................................................................................. 102
Usuario ................................................................................................................... 102
Role ........................................................................................................................ 103
Profile ..................................................................................................................... 103
Segundo Paso, Manipulación de la Base de Datos ...................................................... 104
Tercer Paso, Análisis y Desarrollo del Web Service ..................................................... 106
Cuarto Paso, Protocolos de Comunicación y Conexión con servicios .......................... 110
Protocolo de comunicación ......................................................................................... 110
Estándar ISO 8583, Conexión con el procesador bancario ....................................... 111
Quinto paso, Lenguaje y medio de comunicación entre el nivel base e interpretación 117
Esquemas XSD como Lenguaje de Interpretación .................................................... 117
Atributos ................................................................................................................. 118
Ejemplo de un esquema XSD ................................................................................ 119
Notación XSD para el nivel de interpretación ............................................................. 120
Solicitud de Cobro bancario ................................................................................... 123
Solicitud de cancelación de un Cobro ................................................................... 128
Solicitud de Reimpresión ....................................................................................... 130
Solicitud de Consulta de Transacciones ................................................................ 132
Sexto Paso, Generar Programas Cliente ...................................................................... 133
Creando Objetos para interacción con el nivel de interpretación ............................... 134
Componente Activex DLL ...................................................................................... 134
Solicitud de Cobro bancario a Nivel Base con Activex ...................................... 137
Solicitud de cancelación de un Cobro a Nivel Base con Activex ....................... 139
Solicitud de Reimpresión a Nivel Base con Activex ........................................... 140
8
Solicitud de Consulta de Transacciones a Nivel Base con Activex ................... 141
Interfaces a las que aplica el control Activex ..................................................... 142
Descripción de Métodos de clases .................................................................... 146
Descripción de Beans de operación .................................................................. 147
Beans de Función .............................................................................................. 147
Interfaces a las que aplica el componente JAR. ................................................ 148
Resultados Obtenidos.................................................................................................... 149
Conclusiones..................................................................................................................... 150
Glosario ............................................................................................................................. 153
Bibliografía ........................................................................................................................ 157
9
Índice de Tablas
Tabla 1, Características del patrón arquitectónico Broker .................................................. 64
Tabla 2, Herramientas del Nivel Base ................................................................................. 93
Tabla 3, Herramientas del Nivel de Interpretación .............................................................. 94
Tabla 4, Herramientas del Nivel Fuente .............................................................................. 94
Tabla 5, Descripción de Procedimientos .......................................................................... 105
Tabla 6, Descripción de Clases ........................................................................................ 106
Tabla 7, Descripción de los Métodos de la Clase XMLServices ...................................... 107
Tabla 8, Descripción de los Métodos de la Clase ISOServices ....................................... 107
Tabla 9, Descripción de los Métodos de la Clase ValidateService .................................. 108
Tabla 10, Descripción de los Métodos de la Clase DBService ........................................ 108
Tabla 11, Descripción de los Métodos de la Clase SecurityService ................................ 108
Tabla 12, Descripción de los Métodos de la Clase LogService ....................................... 109
Tabla 13, Descripción de los Métodos de la Clase ComServices .................................... 109
Tabla 14, Descripción de los Métodos de la Clase TransactionServices ........................ 109
Tabla 15, BitMap de un mensaje ISO 8583 ...................................................................... 114
Tabla 16, Definición de campos de los Data Elements. ................................................... 115
Tabla 17, elementos del tag business .............................................................................. 122
Tabla 18, Elementos del tag “transacction” de una solicitud de cobro ............................. 127
Tabla 19, Elementos del tag “transacction” de una cancelación ...................................... 130
Tabla 20, tags complementarios de una reimpresión ...................................................... 131
Tabla 21, Flujo de Operación control Activex del Nivel Base ........................................... 136
Tabla 22, Descripción de Clases ...................................................................................... 145
Tabla 23, Descripción de Métodos de Clases .................................................................. 146
Tabla 24, Descripción de Beans de Operación ................................................................ 147
Tabla 25, Beans de Función ............................................................................................. 148
10
Índice de Figuras
Figura1, Arquitectura de un Sistema de Venta de Productos. ............................................ 32
Figura 2, Arquitectura CORBA ............................................................................................ 33
Figura 3, Modelo Vista Controlador ..................................................................................... 34
Figura 4, Pantalla de AcmeStudio. ...................................................................................... 59
Figura 5, Diagrama de secuencias que muestra gráficamente el patrón MVC. ................. 62
Figura 6. Niveles del Patrón Piramidal ................................................................................ 70
Figura 7, Patrón Piramidal, un enfoque genérico ................................................................ 77
Figura 8, Partes que conforman el modelo base ................................................................. 79
Figura 9, Arquitectura Actual de la aplicación de cobros bancarios ................................... 82
Figura 10, Procesamiento Electrónico de Transacciones. .................................................. 84
Figura 11, Componentes del Nivel Base ............................................................................. 85
Figura 12, El Lenguaje XML ................................................................................................ 86
Figura 13, Componentes del Nivel de Interpretación .......................................................... 87
Figura 14, Componentes del Nivel Fuente .......................................................................... 88
Figura 15, Patrón Piramidal ................................................................................................. 89
Figura 16, Flujo de Implementación del Patrón Piramidal. .................................................. 91
Figura 17, Agrupación de tablas transaccionales y no transaccionales ............................. 95
Figura 17 Protocolo de Comunicación entre el nivel de interpretación y el nivel fuente . 110
Figura 18, Pasó de mensajes IS0 8583 entre niveles de interpretación y fuente. ........... 111
Figura 19, El estándar ISO 8583 ...................................................................................... 113
Figura 20, elemento business de los esquemas del nivel de interpretación .................... 120
Figura 21, Esquema XSD para la operativa de cobros bancarios ................................... 123
Figura 22, Esquema para la cancelación de un cobro ..................................................... 129
Figura 23, Esquema para la reimpresión de un voucher ................................................. 131
Figura 24, Referencia a componentes ............................................................................. 133
Figura 25, Flujo de Operación control Activex del Nivel Base ......................................... 137
Figura 26, Funciones de entrada en la DLL para generar un mensaje de cobro ............ 138
Figura 27, Funciones de entrada en la DLL para generar un mensaje de cancelación .. 139
Figura 28, Funciones de entrada en la DLL para generar un mensaje de reimpresión... 140
Figura 29, Funciones de entrada en la DLL para generar un mensaje de consulta ........ 141
Figura 30, Aplicación a 32bits del Nivel Base .................................................................. 142
11
Figura 31, Aplicación basada en Mobile ........................................................................... 143
Figura 32, Aplicación Web del Nivel Base ........................................................................ 143
Figura 33, Aplicación TPV Nivel Base .............................................................................. 148
Figura 34, Patrón Piramidal de Venta de Tiempo Aire ..................................................... 151
12
Resumen
Hoy en día muchos de los grandes sistemas son pensados para operar en forma
distribuida, con el fin de centralizar la información y así de llevar cada vez más orden y
control en la operación de los comercios, el problema es que normalmente no se piensa
en que tan fácil o difícil sería para un comercio adaptarse al sistema.
En este trabajo vamos a referirnos principalmente a la arquitectura de sistemas
distribuidos y orientados a servicios, en los cuales la misma arquitectura pueda plantearse
para diferentes problemas, con esto se pretende llegar a generar un patrón que sirva
como base para generar soluciones tomando sus elementos.
Los patrones en la ingeniería de software sirven principalmente para dar orden a
soluciones y plantear estructuras orientadas a resolver problemas recurrentes. Así
también se tiene que los patrones arquitectónicos son un modelo a seguir para lograr
objetivos y con esto basar las soluciones en experiencia que ya ha sido probada y en
buenas practicas.
Dicho lo anterior en este trabajo se pretende también exhortar al uso y creación de
patrones con el fin evitar orientar la solución a los problemas en aplicaciones sumamente
específicas y en lugar de estos hacer soluciones flexibles y orientadas a la reutilización.
Es uno de los principales fines de este trabajo obtener un patrón base y flexible que
permita ser implementado en sistemas distribuidos con información centralizada que
pretendan ofrecer servicios a una gran cantidad de comercios sin importar que algún
comercio maneje alguna infraestructura especial, es decir se pretende que existan
componentes adaptables a diferentes necesidades. En resumen tener un patrón genérico
a soluciones distribuidas orientadas a servicios.
13
Summary
Today many large systems are designed to operate in a distributed way, in order to
centralize information and have more order and control in the operation of businesses, the
problem is that usually we don´t think it would be easy or difficult for trade adapt to the
system.
In this paper we refer mainly to the architecture of distributed systems and service-
oriented, in which the same architecture may be suggested for different problems, with this
we pretend to eventually generate a pattern that serves as a basis to build solutions taking
its elements.
Patterns in software engineering are mainly used to give order to bring solutions and
structures for solving recurring problems. This also has the architectural patterns that are a
model for achieving this objective and solutions based on experience that has already
been proven and best practices.
Also in this paper, we encourage the use and creation of patterns to avoid, guiding the
solution to the problems in very specific applications and instead they can create flexible
solutions designed for reusing.
One of the main purposes of this paper to obtain a flexible base pattern, which allows it to
be implemented in distributed systems with centralized information seeking to provide
services to a large number of businesses regardless of any trade drive a special
infrastructure, it was use to said, intended to be components adaptable to different needs.
In short, having a generic pattern for distributed solutions, service oriented.
14
Introducción
La intención de este trabajo nace del esfuerzo de continuar con la creación de generar
soluciones genéricas para problemas o situaciones recurrentes y para generación de
soluciones que puedan masificarse, principalmente basadas en servicios.
Si un mismo problema se presenta en un entorno diferente no se tenga que diseñar de
nuevo otra solución.
Nace con la necesidad de que un evento se presenta recurrentemente en varios contextos
y se puede dar solución una sola vez y con base a un patrón poder reutilizar esa solución
exitosamente. Hablamos de la solución como un todo como el esqueleto o la estructura,
es decir, se piensa combatir el problema desde una perspectiva más amplia y general.
Tenemos que existen situaciones que se pueden presentar en diferentes escenarios y en
forma recurrente dentro de un contexto distribuido.
Las situaciones pueden ser:
• Nuevas funcionalidades.
• Creación de componentes o módulos.
• Mejoras a las funcionalidades.
• Para lo cual se propone una forma estándar para crear un patrón arquitectónico
que permita replicar una solución de una situación específica dentro de un
contexto distribuido.
Para lo cual se deben tomar en cuenta varias situaciones que a continuación se
describen:
1. Conocer la situación, es decir, hacer un análisis.
2. Identificar si se trata realmente de algo recurrente y se está dando en un contexto
distribuido.
15
3. Verificar si existen varios escenarios en los que pueda ser aplicada la solución o se
trata de una situación única.
4. Evaluar los escenarios en los que se presenta, con el fin de analizar la forma en
que podría comportarse el patrón.
5. Identificar si ya existen patrones que puedan adaptarse.
6. Generar una pseudo solución de la situación, es decir hacer un primer
acercamiento a la solución.
7. Generar un formato o utilizar uno ya existente para el patrón (GoF, IBM), o incluso
hacer una combinación productiva y adaptable
8. Generar el patrón con su conjunto de pasos.
9. Probar el patrón en los diferentes escenarios y evaluar el comportamiento.
10. Hacer una retroalimentación si así lo requiriera.
11. Y por último implementar el patrón.
12. Documentación con respecto a la implementación y mantenimiento.
16
Planteamiento de la problemática
Es interesante pensar que a menudo en el ámbito empresarial se presentan diversas
situaciones en forma recurrente ya sea en el mismo entorno o en entornos distintos, es
decir, muchas empresas en ocasiones presentan problemas parecidos en sus procesos
de negocio o con sus clientes por ejemplo el llevar en orden un inventario suele ser un
problema que presentan más de una empresa de producción de artículos.
Es aún más interesante cuando son empresas más grandes o que cuentan con
sucursales, es difícil controlar un problema y en ocasiones como anteriormente se
menciona suelen presentarse situaciones recurrentes en diferentes entornos.
El problema se centra que muchas veces se diseña una solución a la medida para cada
entorno y depende de la magnitud de la empresa los módulos, herramientas,
infraestructura, costos y funcionalidades adicionales, lo que ocasiona que si el mismo
problema se presenta en un entorno diferente se tenga que diseñar de nuevo otra
solución para dicho entorno.
En las empresas consultoras cuando se enfrentan al diseño de una solución para alguno
de sus clientes, a menudo los líderes de proyecto piensan en generar la solución más
óptima en el menos tiempo posible, lo que en muchas ocasiones deriva a que se olviden
del aspecto de reutilizar y no hablemos exactamente del código o de los componentes
sino de la solución como tal.
Muchas veces cuando se construye una solución a la medida no se piensa más allá de
que satisfaga las necesidades específicas del cliente en ese momento, muchas veces no
se considera la reutilización o más común no se piensa en una arquitectura como tal al
momento de estar generando la solución.
17
Objetivos
Motivar al uso y construcción de patrones arquitectónicos principalmente enfocados al
desarrollo de aplicaciones distribuidas en problemas empresariales.
Demostrar que la construcción correcta de un patrón arquitectónico lleva a la reutilización
de la solución en casos recurrentes y su representación en formas como imágenes y
diagramas.
Exponer los elementos esenciales que debe incluir un patrón arquitectónico al momento
de estar siendo construido.
Mostrar los diferentes tipos de patrones arquitectónicos y entender en qué momento
pueden ser aplicados.
Sugerir una técnica para la construcción de patrones arquitectónicos enfocados al
desarrollo de aplicaciones distribuidas, con el fin de que al implementar esta sugerencia
de técnica se pueda llegar a un mismo resultado en diferentes contextos.
18
Justificación
En la actualidad por el crecimiento de las empresas y en general por las nuevas
necesidades y la masificación del internet y otros recursos, el tipo de soluciones para una
empresa está más enfocado al desarrollo de aplicaciones distribuidas, es decir, que
funcionen en componentes por separado y que se encuentren en diversas capas, no
obstante al momento de generar dichas soluciones es necesario contemplar la posibilidad
de reutilizar dicha solución, lo que implica el uso de patrones arquitecticos aplicados a
soluciones distribuidas.
Con el uso de patrones se abre la posibilidad de llevar una solución a diversos entornos
empresariales, implicar a los patrones como parte del diseño y construcción de una
aplicación pone en ventaja a la empresa desarrolladora de la solución.
En muchas organizaciones que se dedican al desarrollo de sistemas distribuidos la
mayoría de las veces no se considera el uso de patrones arquitectónicos, ya que como se
comentaba anteriormente, se prefiere basar los esfuerzos en el desarrollo de aplicación
rápidas y totalmente a la medida, muchas veces no se considera invertir el tiempo
suficiente en diseñar un patrón que en su momento al encontrar algún problema similar
puede aplicarse sin volver a centrar esfuerzos en el diseño, puesto que en ese caso la
estructura de la aplicación ya estaría lista.
Es importante considerar que si una vez se trabaja como se debe no habrá necesidad de
hacer lo mismo de nuevo, más cuando el problema se presenta de forma recurrente.
19
Alcances
Partiendo de la definición de patrones arquitectónicos, que dice que son aquellos que
definen la estructura de un sistema software, los cuales a su vez se componen de
subsistemas con sus responsabilidades, también tienen una serie de directivas para
organizar los componentes del mismo sistema, con el objetivo de facilitar la tarea del
diseño de tal sistema, tenemos que este trabajo tiene como fin aportar la idea de la
construcción de patrones arquitectónicos principalmente en el desarrollo de aplicaciones
distribuidas, con el fin de mostrar que si se trabaja una vez de forma adecuada en el
futuro no es necesario centrar todos los esfuerzos en la parte de la construcción y diseño
de la solución.
El trabajo mostrará los elementos esenciales de un patrón arquitectónico, las formas
conocidas de hacerlo y se propondrá una alternativa basada en tres escenarios reales
distintos, con el propósito de mostrar que es posible reutilizar una solución si se tiene
desde un principio un enfoque genérico.
Se mostrará la forma en la que abordan el tema las dos principales empresas dedicadas
al software, Microsoft y Sun Microsystems.
Es tema de este trabajo el representar los patrones propuestos a través de un ADL
(Lenguaje de Descripción Arquitectónica - Architecture Description Language), con el fin
de formalizar la forma de representarlo. Adicionalmente a de los ADL también se
mostrarán otras formas de representar a los patrones arquitectónicos.
Se expondrán los diferentes tipos de patrones y en los casos que estos pueden ser
aplicados de marea exitosa. Así de las ventajas y desventajas que tiene la construcción
de patrones arquitectónicos en la programación distribuida.
20
Resultados Esperados
Se espera demostrar que el uso de patrones arquitectónicos en la construcción de
aplicaciones específicamente distribuidas es muy importante y permite construir una sola
vez la solución para problemas recurrentes recomendablemente en diversos contextos.
Se pretende sugerir una técnica en la construcción de patrones para aplicaciones
distribuidas. Así también se pretende partir de patrones ya existentes para que sirva como
apoyo en la construcción de la técnica sugerida.
Se espera demostrar a través de un experimento en tres organizaciones con el mismo
problema y aplicando el mismo patrón que es posible lograr la solución del problema
planteado en todos los casos.
Limitaciones
• No se expondrán a detalle patrones existentes.
• No se mostrarán a detalle especificaciones propias de los lenguajes ADL.
• No se estudiarán a detalle casos de patrones arquitectónicos no orientados a
sistemas distribuidos.
• No se considerarán patrones arquitectónicos para programación paralela.
21
Marco teórico
En este trabajo se pretende hacer una investigación a base de experimentos para
demostrar que la construcción y uso de patrones arquitectónicos enfocados al desarrollo
de aplicaciones distribuidas permite la reutilización de la solución en diferentes contextos
donde se presente un problema similar o recurrente.
El tipo de investigación que se tomará en este trabajo es la investigación aplicada ya que
está basada en la búsqueda intencionada de conocimiento o soluciones a problemas y
básicamente lo que en este trabajo se está buscando.
Se considera que esta investigación es aplicada, porque está relacionada con la
generación de conocimientos en forma de teoría o métodos que se estima que en un
período mediato podrían desembocar en aplicaciones al sector productivo.
Al momento de plantear el método para generar la técnica sugerida para la construcción
de patrones arquitectónicos se tomará en cuenta el formato GoF, el cual consiste en
encontrar elementos o secciones de una situación que es recurrente. Dicho formato
consiste en la consideración de los siguientes elementos:
• Name
• Classification
• Intent
• Also Known As
• Motivation
• Structure
• Participants
• Collaborations
• Consequences
• Implementation
• Sample Code
• Known Uses
• Related Pattern
22
Por otra parte se tomará apoyo de otro formato propuesto por F. Buschmann, R. Meunier,
H. Rohnert, P.Sommerlad, y M. Stal, John Wiley and Sons para la construcción de
patrones arquitectónicos, el cual consiste en los siguientes elementos:
• Name
• Problem
• Context
• Forces
• Solution
• Resulting Context
• Examples
• Rationale
• Related Patterns
• Known Uses
Se tomará en cuenta también para tomar como base el formato expuesto en el documento
U.S. Treasury Architecture Development Guidance (TADG) y que es formalmente
conocida como the Treasury Information System Architecture Framework ( TISAF), esta
especificación describe el fundamento, estructura y taxonomía para patrones
arquitectónicos y considera algunas arquitecturas de patrones enfocados a los sistemas
concurrentes y distribuidos y algunos patrones enfocados a sistemas de tiempo real, lo
que a este trabajo sirve como referencia para poder proponer la construcción de patrones
arquitectónicos basados en aplicaciones distribuidas.
El formato definido en el documento TADG para patrones arquitectónicos, especifica que
deben contener los siguientes elementos:
• Name
• Problem
• Rationale
• Assumptions
• Structure
• Interactions
• Consequences
• Implementation
23
El document TADG, considera tambien patrones ya definidos, los cuales en estre trabajo
se tomarán en cuenta para apoyo a la aportación.
• Client-Proxy Server
• Customer Support
• Reactor
• Replicated Servers
• Layered Architecture
• Pipe and Filter Architecture
• Subsystem Interface
24
CAPITULO 1, Una visión esencial de la arquitectura de software y
patrones
En este capítulo se expondrán temas esenciales referentes a la arquitectura de software y
de los patrones, así también se busca generar una visión global del tema principal de esta
tesis.
También se pretende mostrar los enfoques de estudiosos del tema como David Garlan,
Paul Clements, entre otros y exponer lo que se llama el estado del arte.
Así bien en este capítulo se tocan temas como la Arquitectura de Software desde
diferentes perspectivas, definición y tipos de patrones, vitas arquitectónicas, lenguajes de
descripción arquitectónica, etcétera.
25
Sistemas de información distribuidos
Cuando sale a la luz el tema de los patrones arquitectónicos es posible recurrir a las
aplicaciones o sistemas en los que su arquitectura está basada en programación
distribuida, actualmente la mayoría de los sistemas son basados en arquitecturas
distribuidas, son muy pocos los sistemas que se encuentran bajo una arquitectura
monolítica.
Un sistema de información distribuido es un sistema en el cual sus componentes se
transmiten información, del tipo que sea mediante mensajes, pueden intervenir varios
actores, los cuales de alguna manera participan en el proceso de circulación de la
información entre ellos, de forma independiente el uno del otro.
También es posible comentar que un sistema de información distribuido es una colección
de elementos de que se encuentran físicamente separados y no comparten una memoria
común, se comunican entre sí a través del intercambio de mensajes utilizando un medio
de comunicación.
En un sistema distribuido, podemos considerar ciertos factores característicos que los
definen y distinguen de otros sistemas, los cuales pueden ser:
• Cada elemento tiene su propia memoria y su propio Sistema Operativo.
• Control de recursos locales y remotos.
• Sistemas Abiertos
• Plataforma no estándar.
• Medios de comunicación.
• Capacidad de Procesamiento en paralelo.
• Dispersión y parcialidad.
26
Para que un sistema de información sea construido, deben influir ciertos factores que en
su conjunto crean la necesidad de implementar un sistema distribuido, dichos factores
pueden ser los siguientes:
• Avances Tecnológicos.
• Nuevos requerimientos.
• Globalización.
• Aspectos Externos.
• Integración.
Al momento de construir un sistema basado en patrones arquitectónicos distribuidos
tenemos ciertas características que adquiere dicho sistema y que por ende lo hacen
distinto a otro que no esté basado en este tipo de patrones. Entre dichas características
están las siguientes:
• Las estaciones satisfacen las necesidades de los usuarios.
• Uso de nuevas interfaces.
• Disponibilidad de elementos de Comunicación.
• Desarrollo de nuevas técnicas.
• Respuesta Rápida.
• Ejecución Concurrente de procesos.
• Empleo de técnicas de procesamiento distribuido.
• Disponibilidad y Confiabilidad.
• Sistema poco propenso a fallas de arquitectura o definición.
• Mayores servicios que elevan la funcionalidad.
• Inclusión rápida de nuevos recursos.
• Los recursos actuales no afectan.
27
Es obvio pensar que el tener sistemas distribuidos implica tanto características benéficas
como contraproducentes, entre las cuales podemos citar las siguientes:
• Se requiere poner más atención al momento del procesamiento de las
instrucciones.
• La velocidad de propagación de información, en ocasiones dependiendo de la
infraestructura tiende a ser lenta.
• Servicios de replicación de datos y servicios con posibilidades de fallas.
• Se debe poner más atención a los controles de acceso y a la seguridad de las
aplicaciones, debido a que se encuentran más propensas a posibles hackeos o
introducción de usuarios malintencionados.
• La administración suele complicarse más.
• Los costos de construcción y mantenimiento pueden ser elevados, dependiendo
la planeación y negociación.
Los elementos estructurales incluyen la organización de un sistema como la composición
de componentes; estructuras de control global, protocolos de comunicación, la asignación
de funcionalidad a los elementos de diseño, distribución física, desempeño. Este es el
nivel de arquitectura de software del diseño.
La arquitectura de software de un sistema es la estructura o estructuras del sistema, que
comprenden componentes de software, las propiedades de esos componentes visibles
externamente, y sus relaciones.
Las propiedades visibles externamente refieren a los supuestos que ciertos componentes
pueden hacer sobre otro, como servicios, performance, manejo de errores, etcétera. Los
sistemas pueden tener más de una estructura.
La arquitectura de software define componentes, agrupa información sobre cómo los
componentes interactúan entre sí lo cual revela la diferencia existente entre la arquitectura
de un sistema y su descripción o especificación, el comportamiento de cada componente
es parte de ella en tanto es observable o deducible desde el exterior.
28
Entre los elementos estructurales que deben tomarse en cuenta existen los supuestos
sobre el entorno, es decir el ambiente sobre el cual trabajará el sistema, la confiabilidad,
la seguridad, la robustez, requerimientos de espacio, compatibilidad con estándares, etc.
Otros aspectos que deben ser considerados son, la naturaleza de las interacciones entre
componentes, es decir la manera en la que por definición o implícitamente van a funcionar
los componentes del sistema entre sí, el empaquetamiento de los componentes incluye el
tipo del componente y los tipos de las interacciones que soporta, la elección es en general
independiente de la funcionalidad, pero deben ser empaquetados de formas compatibles
si se espera cooperación entre ellos.
A la hora de comenzar con el diseño de un patrón arquitectónico, se deben considerar dos
elementos necesarios los cuales son los componentes y los conectores, estos pueden
definirse como los primeros bloques de construcción de la arquitectura, se entiende que
un componente es una entidad computacional que se encuentra activa, como un proceso,
un objeto, etc.
Un conector se refiere al mecanismo que actúa como intermediario de la comunicación,
coordinación o cooperación entre componentes.
Es importante mencionar que un patrón permite caracterizar una familia de sistemas que
están relacionadas por compartir ciertas propiedades. Un patrón se puede considerar
como conjunto de restricciones sobre una arquitectura.
Los patrones arquitectónicos en un ambiente distribuido, permiten con facilidad estructurar
los componentes de un sistema.
Un buen diseño de un sistema de información distribuido basado en patrones
arquitectónicos debe de contar con una serie de elementos tales como la transparencia,
es decir cuando las peticiones de los usuarios son satisfechas, utilizando una variedad de
servidores y además dichos usuarios no notan si existe un cambio en alguno de estos
servicios.
En otras palabras la transparencia, significa diseñar la interfaz de llamadas al sistema de
modo que no sea visible la existencia de varios procesadores.
Otro aspecto que se debe considerar en el diseño de sistemas distribuidos es la
flexibilidad, es decir, al momento de ser implementado el sistema permitir cambios de
29
manera sencilla sin impactar su estructura primordial, en otras palabras debe ser
adaptable.
Los sistemas distribuidos deben tomar en cuenta el aspecto de confiablidad, esto quiere
decir que si una máquina falla, alguna otra debe encargarse del trabajo, esto quiere decir
que el sistema siempre debe estar disponible y brindar cierta seguridad a los usuarios que
lo explotan, ósea, un aspecto de la confiabilidad es la disponibilidad, que se refiere a la
fracción de tiempo en que se puede utilizar el sistema.
Los datos no deben perderse o mezclarse y si los archivos se almacenan de manera
redundante en varios servidores, todas las copias deben ser consistentes.
Otro aspecto de la confiabilidad general es la seguridad, lo que significa que los archivos y
otros recursos deben ser protegidos contra el uso no autorizado.
Un aspecto también relacionado con la confiabilidad es la tolerancia a fallas, según la cual
las fallas se deben ocultar brindando una recuperación transparente para el usuario,
aunque haya cierta degradación de la performance.
El desempeño es también un factor fundamental a la hora del diseño de sistemas
distribuidos, esto quiere decir que cuando se ejecuta una aplicación en un sistema
distribuido no debe parecer diferente o peor que si se ejecuta de forma aislada.
El desempeño se puede parametrizar tomando algunas métricas como el tiempo de
respuesta, el rendimiento, cantidad consumida de la capacidad de la red, entre otras.
Para garantizar un buen desempeño a la hora de realizar peticiones entre los módulos del
sistema, se tiene que considerar el uso de protocolos de comunicación en los
procesadores que intervienen en la comunicación, esto implica que se incremente el
consumo del procesador.
Por lo tanto se debe considerar la minimización del número de mensajes, lo difícil es que
la mejor forma de mejorar el desempeño es tener muchas actividades en ejecución al
mismo tiempo, es decir, ejecución paralela en distintos procesadores.
La escalabilidad es otro aspecto, que se debe de tratar en el diseño de sistemas
orientados a la programación distribuida, la tendencia indica que el tamaño de los
sistemas distribuidos es hacia cientos y miles de usuarios conectados, esto implica la
30
existencia de problemas como los cuellos de botella los cuales se debe intentar evitar,
algunos de estos problemas son:
• Componentes centralizados.
• Tablas centralizadas.
• Algoritmos centralizados.
Es por ello que se deben utilizar algoritmos contrarios es decir descentralizados y que
cuenten con ciertas características para garantizar que un sistema distribuido cuente con
un grado alto de escalabilidad.
• Ninguna máquina tiene la información completa acerca del estado del sistema.
• Las máquinas toman decisiones solo en base a la información disponible de
manera local.
• El fallo de una máquina no arruina el algoritmo.
• No existe una hipótesis implícita de la existencia de un reloj global.
31
Arquitectura de Software
Existen muchas definiciones acerca de lo que es arquitectura de software, puesto que es
posible agregar el tema de Arquitectura de software desde un enfoque de ingeniería o de
diseño de sistemas.
Sin embargo existe una definición reconocida y aceptada de Paul Clements (Paul
Clements, 1996), quien dice que: La Arquitectura de Software a grandes rasgos, es una
vista del sistema que incluye los componentes principales del mismo, la conducta de esos
componentes según se le percibe desde el resto del sistema y las formas en que los
componentes interactúan y se coordinan para alcanzar la misión del sistema. La vista
arquitectónica es una vista abstracta, aportando el más alto nivel de comprensión y la
supresión o diferimiento del detalle inherente a la mayor parte de las abstracciones.
Por su parte tenemos que David Garlan (David Garlan, 2000) establece que la
Arquitectura de Software constituye un puente entre el requerimiento y el código,
ocupando el lugar que en los gráficos antiguos se reservaba para el diseño, esto puede
ser considerado como un enfoque demasiado amplio.
No obstante se tiene una definición formal de Arquitectura de software la cual ofrece el
documento de IEEE Estándar 1471-2000 y dice de la siguiente manera:
La arquitectura de software es un conjunto de decisiones al momento del diseño del
software que deben ser ejecutadas correctamente porque de lo contrario podrían cancelar
todo el proyecto, es decir es un conjunto de consideraciones y de decisiones que deben
ser tomadas en cuenta.
La Arquitectura de Software es la organización fundamental de un sistema encarnada en
sus componentes, las relaciones entre ellos y el ambiente y los principios que orientan su
diseño y evolución.
A continuación se muestra una figura que describe la arquitectura de un sistema de venta
de productos y se muestra la interacción que existe entre sus diferentes componentes,
desde un punto de vista de la operación del sistema.
32
Esta arquitectura se compone de cinco componentes los cuales son:
• El usuario quien es la persona física que opera el sistema y que puede ser uno o
varios individuos.
• La PC que cuenta con tres periféricos, los cuales son un lector de código de barras,
una impresora de tickets y un lector de tarjetas bancarias y se encargan de enviar
datos al cliente procesables para el servidor. La PC también tiene instalado el
software cliente que se comunica con el servidor para enviar y recibir peticiones
durante la operación, pueden existir muchas PC’s con las mismas características.
• El servidor, el cual tiene instalada la base de datos donde se registran todas las
operaciones realizadas por los clientes, también cuenta con salida a internet, para
proveer de servicios a los clientes conectados y para enviar y recibir mensajes del
componente autorizador.
• Autorizador, el cual se encarga de comunicarle al servidor el resultado de una
transacción realizada con tarjeta bancaria, este es un solo componente.
• Banco es la entidad que recibe los datos del autorizador y los procesa para enviarle
el resultado de la transacción, es importante mencionar que pueden existir varios
bancos los cuales se comunican con el autorizador.
Figura1, Arquitectura de un Sistema de Venta de Productos.
33
Por otra parte tenemos que Mary Shaw y David Garlan (Mary Shaw, 1995), al ver que
existen múltiples definiciones y enfoques de Arquitectura de Software optaron por explicar
las diferencias entre las definiciones con base a distintas clases de modelos:
• Modelos Estructurales.
• Modelos de Framework.
• Modelos Dinámicos.
• Modelos de Proceso.
• Modelos Funcionales.
En cuanto a los Modelos Estructurales sostienen que la Arquitectura de Software está
compuesta por componentes, conexiones entre ellos y otros aspectos tales como
configuración, estilo, restricciones, semántica, análisis, propiedades, racionalizaciones,
requerimientos, necesidades de los participantes, el trabajo en este modelo está
caracterizado por el desarrollo de lenguajes de descripción arquitectónica. Como ejemplo
podemos tomar el Sistema de la Venta de productos (Figura 1).
Para los Modelos de Framework, encontramos cierta similitud con el concepto estructural,
solo que se enfoca principalmente en la estructura coherente del sistema completo, en
lugar de concentrarse en su composición. Los modelos de Framework normalmente se
refieren a dominios o clases de problemas específicos, es decir arquitecturas de software
específicas de dominio, tales como CORBA (Figura 2).
Interfaz con el ORBPlantilla IDLInvocación Dinámica Adaptador del ObjetoEsqueleto DinámicoEsqueleto IDL Estátio
Cliente Implementación del Objeto
Nucleo ORB
Figura 2, Arquitectura CORBA
34
Los modelos dinámicos, se concentran en la conducta de los sistemas, lo cual puede
referirse a cambios en la configuración de los mismos, y su fin específicamente es que las
configuraciones que contenga sean parametrizables y no fijas.
En cuanto a los modelos de proceso, estos concentran su atención en la construcción de
la arquitectura y en los pasos o procesos involucrados en esa construcción, para este
modelo la arquitectura de software es el resultado de seguir un script o argumento de
proceso.
Los modelos funcionales ven a la arquitectura como un conjunto de componentes
funcionales que se encuentran en forma de capas las cuales proporcionan servicios hacia
arriba, es decir hacia los componentes que invocan a los que proporcionan el servicio, un
ejemplo común de este tipo de modelo es el modelo vista controlador (Figura 3).
Figura 3, Modelo Vista Controlador
35
Para esta tesis principalmente se hará un enfoque a los modelos Estructurales basados
en los ADLs y en los modelos de Framework.
Así también esta tesis está orientada a la Arquitectura basada en Patrones, que bien es
un modelo que se encuentra vinculado a UML en cuanto al modelado y expresión gráfica
de los componentes, en general la Arquitectura basada en patrones consiste en identificar
y articular patrones preexistentes, que se definen en forma similar a los estilos
arquitectónicos.
En el campo del software, la arquitectura nos identifica los elementos más importantes de
un sistema así como sus relaciones. Es decir nos da una visión global del sistema.
Definir una arquitectura de software es importante porque se necesita para entender el
sistema, organizar su desarrollo, plantear la reutilización del software y hacerlo
evolucionar.
Generalmente las metodologías de desarrollo indican principios para identificar y diseñar
una arquitectura, aunque la ayuda real que ofrecen es muy limitada al basarse en
principios muy genéricos. La arquitectura de un sistema no precisamente responde
requisitos estructurales, sino que está relacionada con aspectos de rendimiento,
usabilidad, reutilización, restricciones económicas y tecnológicas, e incluso cuestiones
estéticas.
Actualmente existen muchas metodologías de desarrollo de software, desde métodos muy
pesados y burocráticos, métodos ajustables al proyecto y a las condiciones de desarrollo
y métodos ligeros que surgen como respuesta a los excesos formales de otros métodos.
Evidentemente, partiendo de los principios de diversas metodologías es muy difícil sacar
una visión unificada sobre el diseño arquitectónico. Sin embargo sí es posible destacar
una serie de elementos comunes.
De estos elementos comunes podemos decir que el primero es la existencia de una fase
en la que se establece o diseña una arquitectura base el segundo elemento es la
36
dependencia que definen entre los casos de uso y la arquitectura, definiendo un caso de
uso como una interacción (secuencia de acciones) típica entre el usuario y el sistema.
Desde un punto de vista arquitectónico, no todos los casos de uso tienen la misma
importancia, destacando aquellos que nos ayudan a mitigar los riesgos más importantes y
sobre todo aquellos que representan la funcionalidad básica del sistema a construir.
Esta arquitectura base estará especificada por diagramas que muestren subsistemas,
interfaces entre los mismos, diagramas de componentes, clases, descripciones diversas,
y por el conjunto de casos de uso básicos. Este conjunto de especificaciones permiten
validar la arquitectura con los clientes y los desarrolladores, y asegurar que es adecuada
para implementar la funcionalidad básica deseada.
Una visión alternativa sería identificar el tipo de sistema que se quiere construir. Es sabido
que no hay dos aplicaciones iguales, pero que existen claros paralelismos entre las
aplicaciones construidas para resolver problemas similares. El tomar atención en
aplicaciones del mismo tipo tiene muchas ventajas ya que ayuda a entender las
necesidades del cliente y las soluciones ya encontradas por otros.
Mientras que usar una metodología tradicional de desarrollo permite centrarse únicamente
en parte del problema, obviando cuestiones como rendimiento, seguridad, protocolos de
comunicación, restricciones de hardware, software, y económicas. Una metodología
tradicional proporciona una visión estrecha, ya que frecuentemente el cliente no expone
adecuadamente todos sus requisitos porque no los conoce.
Suponiendo que estamos desarrollando un portal web. La experiencia nos dice que a
partir de cierto número de páginas, es útil desarrollar un sistema basado en plantillas, por
la disminución de costos de mantenimiento. Esto es algo que ningún requisito funcional
proporcionaría, y que probablemente tampoco surgiría de forma natural en los modelos de
diseño.
A este tipo de soluciones (patrón de diseño) se llega por la experiencia en el desarrollo de
sistemas y por el conocimiento de las tecnologías existentes en el mercado. Gracias a
esta experiencia, desde el inicio del desarrollo de una aplicación, es posible buscar
componentes que implementen ciertas tecnologías o funcionalidades, y por lo tanto
37
integrar la búsqueda de componentes y su uso dentro del proceso de desarrollo de
software.
Identificar el tipo de sistema a construir permite examinar la arquitectura de sistemas ya
construidos, comprender los requisitos a los que se enfrentan, y constatarlos con usuarios
finales. Si se tiene en cuenta que en cualquier tipo de sistema existen necesidades
similares, muchos de los componentes que se usan en su desarrollo suelen ser los
mismos.
Las metodologías que gestionen de forma directa a los aspectos arquitectónicos y
estructurales de un sistema, podrán producir no solo productos de mayor calidad, sino a
un menor costo y en menos tiempo, esto se debe a que los riesgos arquitectónicos del
proyecto son menores y están mucho más controlados, y que al poder integrar una visión
orientada a componentes, las posibilidades de reutilizar software ya desarrollado son
mucho mayores, con las ventajas que ello implica.
Construir una arquitectura es tanto una actividad donde desarrollar ideas nuevas como
una oportunidad de usar la experiencia acumulada, siendo casi siempre responsabilidad
del desarrollador crear un producto de calidad y por tanto conocer el tipo de sistema a
construir. Afortunadamente para esto último, los lenguajes de patrones (ADL’s) nos
pueden proporcionar mucha ayuda.
Los Lenguajes de descripción arquitectónica (ADL’s) se pueden definir como "La
especificación de una serie de elementos y sus relaciones de modo que permiten describir
buenas soluciones a los diferentes problemas que aparecen en un contexto específico"
(Clements, 1996).
Los patrones de diseño tienen como objetivo capturar buenas prácticas que nos permitan
mejorar la calidad del diseño de un sistema, determinando elementos que soporten roles
útiles en dicho contexto, encapsulando complejidad, y haciéndolo más flexible.
Por otro lado, con frecuencia se dice que la función define a la forma, es decir, que la
estructura o la arquitectura de cualquier sistema está muy relacionada con lo que dicho
sistema tiene que hacer. Esta es la razón por la que los sistemas con objetivos similares
38
comparten también una arquitectura común, unos procesos bien definidos, y un conjunto
de elementos similares, similar funcionalidad y servicio, similar estructura.
Cuando se desarrolla un sistema que se encuadra dentro de cierto tipo, es muy útil
consultar lenguajes de patrones que traten el dominio en el que estamos. Un lenguaje de
patrones sirve como referencia conceptual del dominio del problema, ya que éstos parten
como solución a un conjunto de casos de uso, e interacciones con actores específicos.
Además constituyen también un marco conceptual en el diseño de la arquitectura de los
sistemas, ya que como la función define a la forma, sintetizan por lo general soluciones
arquitectónicas y estructurales bien probadas y muy útiles dentro del tipo de problemas
que modelan.
De alguna forma, los patrones nos permiten identificar y completar los casos de uso
básicos expuestos por el cliente, comprender la arquitectura del sistema a construir así
como su problemática, y buscar componentes ya desarrollados que cumplan con los
requisitos del tipo de sistema a construir.
Un lenguaje de patrones que modele un tipo de sistema debe de ser descrito incluyendo
la siguiente información:
• Características básicas que lo definen y diferencian.
• Definición de los actores principales que participan en dicho sistema así como sus
casos de uso básicos, descritos evidentemente de forma genérica.
• Especificación de los principales componentes funcionales del sistema así como
las relaciones entre ellos.
• Arquitectura lógica y flujos de información, que estructuran los diferentes
subsistemas, el intercambio de información entre los mismos, etc.
• Arquitectura de componentes. Consiste en mapear los componentes funcionales en
la arquitectura lógica de la aplicación.
• Arquitectura física. Especificación del despliegue de los componentes.
Los ADL’s deben tener una visión orientada a la construcción de software y a constituirse
como elementos integrables en el proceso de desarrollo de las aplicaciones, más adelante
en este capítulo se mencionaran más a detalle.
39
Vistas Arquitectónicas
Las vistas son formas que sirven para representar un aspecto parcial de una Arquitectura
de Software mostrando propiedades específicas de un sistema. Se les puede considerar
como parte de los bloques de un sistema.
Existen gran número de Vistas bien conocidas, cada una de las cuales revela ciertos
aspectos a ser analizados de la arquitectura. Una arquitectura debe ser descrita en varias
Vistas arquitectónicas relevantes.
Las Vistas pueden ser descritas gráficamente como una cantidad de componentes y
conexiones, pero la semántica de estos artefactos difiere entre Vistas. De igual manera,
diferentes Vistas pueden ser utilizadas para diferentes análisis.
Así también al tener un enfoque arquitectónico, tenemos que la arquitectura de un sistema
consta de múltiples vistas, asociadas a diferentes dimensiones o perspectivas del sistema
y ninguna de estas en particular constituye la arquitectura del sistema como tal. Estas
vistas bien se encuentran dirigidas a usuarios en particular.
Tomando un enfoque del modelo de 4+1 vistas de Philippe Kruchten (Philippe Kruchten,
1995), que como su propuesta lo menciona, las vista de una arquitectura son divididas en
cuatro:
• Vista Lógica.
• Vista de Proceso.
• Vista de Desarrollo.
• Vista Física.
En cada una de las vistas es notable ciertas características, como el aspecto del sistema,
a quien va dirigida particularmente cada vista, así también su notación, es decir el
conjunto de elementos y conectores, esenciales para generar diagramas de cada vista.
40
Cabe mencionar que para cada proyecto no todas las vistas son necesarias e
importantes, pueden existir proyectos en los que por premura de tiempo, se quedan solo
en Vista de Desarrollo o que se saltan la vista de proceso, etcétera.
Abundando acerca del modelo de vistas propuesto por Philippe Kruchten, tenemos que se
basa mucho en la abstracción.
Por su parte la Vista Lógica, se refiere a la abstracción de las funciones del sistema y sus
relaciones, la Vista Lógica se descompone en una serie de abstracciones clave, tomadas
principalmente del dominio del problema en la forma de objetos o clases de objetos y se
aplican los principios de abstracción, encapsulamiento y herencia.
Philippe Kruchten, considera la notación Rational/Booch, para representar la vista lógica,
mediante diagramas de clases y plantillas de clases, los diagramas de clases muestran un
conjunto de clases así como sus relaciones lógicas, asociaciones, uso, composición,
herencia y más elementos de la Programación Orientada a Objetos (POO). Las plantillas
de clases principalmente se centran en cada clase en forma individual y enfatizan las
operaciones principales de la clase e identifican las principales características de los
objetos.
La Vista de Procesos, toma en cuenta algunos requisitos no funcionales tales como la
performance y la disponibilidad, principalmente esta vista se enfoca en la concurrencia y
distribución, integridad del sistema y tolerancia a fallas.
En la Vista de Procesos se describe en varios niveles de abstracción donde cada nivel
está enfocado a distintos intereses, se tiene que un proceso es una agrupación de tareas
que forman una unidad ejecutable. Los procesos representan el nivel al que la
arquitectura de procesos puede ser controlada tácticamente. Además, los procesos
pueden replicarse para aumentar la distribución de la carga de procesamiento, o para
mejorar la disponibilidad.
La Vista de Desarrollo, se centra en la organización de los módulos generados en
ambiente de desarrollo, el software es empaquetado en pequeñas partes llamados
subsistemas o bibliotecas de programas que pueden ser desarrollados por uno o más
desarrolladores. Dichos subsistemas se organizan jerárquicamente en forma de capas y
41
cada capa proporciona una interfaz o componente que va apuntando hacia otras capas
que se encuentra en un nivel arriba de la jerarquía.
Esta Vista, toma en cuenta aspectos como la facilidad de desarrollo, administración del
software, reutilización y restricciones impuestas por el lenguaje de programación.
La Vista de Desarrollo de un sistema se debe representar en diagramas de módulos o
subsistemas, la vista de desarrollo solo puede describirse completamente cuando todos
los elementos han sido identificados.
Por otra parte en cuanto a la Vista Física, esta vista principalmente se refiere al mapeo del
software y el hardware y sus aspectos distribuidos. Esta vista toma en cuenta requisitos
que no tienen que ver con la funcionalidad del sistema como la disponibilidad,
confiabilidad, performance y la escalabilidad.
En este caso como lo es el enfoque distribuido se tiene que el software se ejecuta sobre
una red donde sus elementos tales como procesos, tareas y objetos, requieren ser
mapeados sobre varios nodos. Con esta vista se espera que diferentes configuraciones
puedan ser utilizadas, algunas para desarrollo y pruebas, otras para emplazar el sistema
en varios sitios para diferentes usuarios, es por esto que el mapeo del software en los
nodos requiere ser flexible y tener un mínimo impacto sobre el código fuente, es decir, sin
tener que recompilar los módulos.
42
Patrones
Existen muchas definiciones alrededor del tema de los patrones así también muchos
enfoques ya que como es sabido el tema de patrones puede aplicarse a muchas áreas del
conocimiento como la arquitectura civil, la industria textil, la mecánica, etcétera. En su
forma más genérica un patrón en si es un modelo a seguir que puede ser tomado en
cuenta al momento de realizar algo.
Siendo exigentes con la anterior definición tenemos que en lugar de decir que el patrón se
puede tomar en cuenta para hacer algo deberíamos decir que el patrón se debe tomar en
cuenta el momento de hacer algo, con el fin de llevar un cierto orden y llegar a la
construcción correcta de lo que se esté haciendo. Los patrones surgen de la experiencia
de los seres humanos de tratar de lograr ciertos objetivos.
Los patrones son el modelo a seguir para lograr un objetivo y así basar la solución en
experiencia probada y en buenas prácticas. Dicho lo anterior los patrones capturan la
experiencia existente y probada para promover buenas prácticas. Los patrones fueron
inicialmente concebidos por el arquitecto Christopher Alexander en su libro A Pattern
Language (C. Alexander, 1977), como una manera de formalizar la solución a problemas
comunes a muchos proyectos de arquitectura.
Vista la eficacia de los patrones en el campo de la arquitectura, otras disciplinas los
añadieron a su repertorio de herramientas. La informática no ha sido una excepción y la
adaptación de este concepto a la ingeniería del software fue con la aportación de Ward
Cummingham y Kent Beck (Kent Beck, 1987) quienes adaptaron ideas de Christopher
Alexander a la Ingeniería de Software y crearon cinco patrones para el diseño de las
interfaces y en el año de 1995 Gamma, Helm, Johnson, Vlissides más conocidos como la
pandilla de los cuatro “Gang of Four”, publican su libro Desing Patterns (Gamma, 1995),
en donde hacen una recopilación de 23 patrones comunes en el diseño de software
orientado a objetos. Tenemos que los patrones son una guía para la correcta arquitectura,
diseño y desarrollo del software.
43
En si la generación de patrones de software se basa en capturar la experiencia de la
solución a problemas que surgen en un contexto y la documentación de dicha
experiencia, con el fin de que al momento de presentarse de nuevo un problema de esa
índole se pueda recurrir al patrón que ayuda a la solución del problema.
Dicho de otra manera un patrón intenta capturar la experiencia, de modo que la forma
correcta de resolver un problema dado pudiera ser transmitida a otras personas que aún
no se ha encontrado con el problema, se trata de formalizar soluciones a distintas
situaciones de modo que puedan ser entendidas por otras personas. Por lo tanto, un
patrón no es más que la descripción detallada de una solución adecuada a un problema
concreto.
El objetivo básico que se persigue con la idea de patrón es no tener que rehacer las cosas
cada vez que se presente una cierta situación. Los patrones capturan soluciones a
situaciones de especial interés, ya sea por ser muy comunes o por ser especialmente
complejas. Normalmente, un patrón está compuesto por el enunciado del problema y una
o varias propuestas de solución.
Para formalizar estas soluciones, se necesita una notación expresiva y rica en semántica
que permita plasmar eficientemente los atributos de las mismas, para ello se utilizan
herramientas como el UML o los ADL, de los cuales se hablará más a detalle.
Para que una solución sea considerada un patrón debe poseer ciertas características, una
de ellas es que debe haber comprobado su efectividad resolviendo problemas similares
en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable
a diferentes problemas de diseño en distintas circunstancias.
44
Tipos de Patrones
No existe una sola clasificación como tal, pueden ser de varios enfoques tales como:
• Patrones de Procesos (Organización, Administración, Análisis Diseño y Pruebas).
• Patrones de producto de Software (Análisis, Arquitectura, Diseño y Lenguaje de
programación).
• Conjuntos de Patrones (Lenguaje de Patrones, Catalogo de Patrones, Sistema de
Patrones).
• Patrones Arquitectónicos (Patrones aplicables a sistemas distribuidos).
• Patrones de diseño.
Patrones de diseño
Cuando nos referimos a patrones de diseño tenemos que son maneras de solucionar
muchos problemas parecidos de una misma manera, de hecho se centran en la parte
usual del componente a diseñar, y de esa forma son muy específicos.
Tenemos que son descripciones de clases cuyas instancias se relacionan y colaboran
entre sí. Cada patrón es adecuado para ser adaptado a un cierto tipo de problema, una
arquitectura orientada a objetos está llena de patrones. Los patrones conducen a
arquitecturas más pequeñas, más simples y más comprensibles, para describir un patrón
debemos especificar, los siguientes elementos:
• Nombre.
• Propósito o finalidad.
• Sinónimos (otros nombres por los que puede ser conocido).
• Problema al que es aplicable.
• Estructura (diagrama de clases).
• Participantes (responsabilidad de cada clase).
45
• Colaboraciones (diagrama de interacciones).
• Implementación (consejos, notas y ejemplos).
• Otros patrones con los que está relacionado.
Aunque esta es una forma para describir el propósito, nombre y demás propiedades de
los patrones existen muchos formatos o incluso se puede crear un formato propio para
representar a los patrones.
Es fundamental que para apoyarse de la reutilización es necesario anticiparse a los
nuevos requisitos y cambios, de modo que los sistemas evolucionen de forma adecuada.
Cada patrón permite que algunos aspectos de la estructura del sistema puedan cambiar
independientemente de otros aspectos. Facilitan la reusabilidad, extensibilidad y
mantenimiento.
Como se ha comentado un patrón es un esquema que supone una solución a problemas
semejantes o concurrentes.
También es conveniente distinguir entre un patrón y la arquitectura del sistema como tal,
por así decirlo es la misma diferencia entre el diseño de un componente y el análisis del
sistema.
En general un patrón de diseño es una solución estándar para un problema común de
programación, una técnica para hacer flexibilizar el código y satisfacer ciertos criterios.
Los patrones de diseño permiten a un proyecto lograr una finalidad determinada, son
vistos como una manera más práctica de describir ciertos aspectos de la organización de
un programa y conexiones entre componentes de programas.
Es evidente que a lo largo de multitud de diseños de aplicaciones hay problemas que se
repiten y que responden a un cierto patrón. Sería deseable tener una colección de dichos
patrones con las soluciones más óptimas para cada caso.
46
Los patrones de diseño permiten que los diseños sean mucho más flexibles, modulares y
reutilizables, en el libro Design Patterns (Gamma, 1995) se dice que han revolucionado el
diseño orientado a objetos y todo buen arquitecto de software debería conocerlos. A
continuación se enlistan y describen de forma breve los patrones de diseño a objetos más
habituales publicados en el libro antes mencionado.
Patrones de creación
• Abstract Factory. Proporciona una interfaz para crear familias de objetos o que
dependen entre sí, sin especificar sus clases concretas.
• Builder. Separa la construcción de un objeto complejo de su representación, de
forma que el mismo proceso de construcción pueda crear diferentes
representaciones.
• Factory Method. Define una interfaz para crear un objeto, pero deja que sean
las subclases quienes decidan qué clase instanciar. Permite que una clase
delegue en sus subclases la creación de objetos.
• Prototype. Especifica los tipos de objetos a crear por medio de una instancia
prototípica, y crear nuevos objetos copiando este prototipo.
• Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un
punto de acceso global a ella.
Patrones estructurales
• Adapter. Convierte la interfaz de una clase en otra distinta que es la que
esperan los clientes. Permiten que cooperen clases que de otra manera no
podrían por tener interfaces incompatibles.
• Bridge. Desvincula una abstracción de su implementación, de manera que
ambas puedan variar de forma independiente.
47
• Composite. Combina objetos en estructuras de árbol para representar
jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a
los objetos individuales y a los compuestos.
• Decorator. Añade dinámicamente nuevas responsabilidades a un objeto,
proporcionando una alternativa flexible a la herencia para extender la
funcionalidad.
• Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un
subsistema. Define una interfaz de alto nivel que hace que el subsistema se
más fácil de usar.
• Flyweight. Usa el compartimiento para permitir un gran número de objetos de
grano fino de forma eficiente.
• Proxy. Proporciona un sustituto o representante de otro objeto para controlar el
acceso a éste.
Patrones de comportamiento
• Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al
dar a más de un objeto la posibilidad de responder a la petición. Crea una
cadena con los objetos receptores y pasa la petición a través de la cadena
hasta que esta sea tratada por algún objeto.
• Command. Encapsula una petición en un objeto, permitiendo así parametrizar a
los clientes con distintas peticiones, encolar o llevar un registro de las peticiones
y poder deshacer la operaciones.
• Interpreter. Dado un lenguaje, define una representación de su gramática junto
con un intérprete que usa dicha representación para interpretar las sentencias
del lenguaje.
• Iterator. Proporciona un modo de acceder secuencialmente a los elementos de
un objeto agregado sin exponer su representación interna.
48
• Mediator. Define un objeto que encapsula cómo interactúan un conjunto de
objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran
unos a otros explícitamente, y permite variar la interacción entre ellos de forma
independiente.
• Memento. Representa y externaliza el estado interno de un objeto sin violar la
encapsulación, de forma que éste puede volver a dicho estado más tarde.
• Observer. Define una dependencia de uno-a-muchos entre objetos, de forma
que cuando un objeto cambia de estado se notifica y actualizan
automáticamente todos los objetos.
• State. Permite que un objeto modifique su comportamiento cada vez que
cambia su estado interno. Parecerá que cambia la clase del objeto.
• Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace
intercambiables. Permite que un algoritmo varíe independientemente de los
clientes que lo usan.
• Template Method. Define en una operación el esqueleto de un algoritmo,
delegando en las subclases algunos de sus pasos. Permite que las subclases
redefinan ciertos pasos del algoritmo sin cambiar su estructura.
• Visitor. Representa una operación sobre los elementos de una estructura de
objetos. Permite definir una nueva operación sin cambiar las clases de los
elementos sobre los que opera.
49
Patrones arquitectónicos
En un panorama muy genérico y orientado a la arquitectura de software tenemos que los
patrones arquitectónicos son aquellos que definen la estructura de un sistema software,
los cuales a su vez se componen de subsistemas con sus responsabilidades, también
tienen una serie de directivas para organizar los componentes del mismo sistema, con el
objetivo de facilitar la tarea del diseño de tal sistema.
Un patrón de arquitectura de software describe un problema particular y recurrente que
surge en un contexto específico, y presenta un esquema genérico y probado de su
solución.
En la actualidad existe una gran diversidad de arquitecturas que implementan patrones y
que se vuelven de uso común.
Los patrones arquitectónicos expresan un esquema estructural de la organización del
sistema, es decir, un esqueleto o estructura de un sistema, dicha estructura consiste en
subsistemas así como de sus responsabilidades e interrelaciones.
Si comparamos a los patrones de diseño con los de arquitectura tenemos que los
arquitectónicos son más grandes en escala y alcance.
Aun cuando un patrón arquitectónico contiene la forma o imagen de un sistema, no es una
arquitectura como tal, un patrón arquitectónico es un concepto que captura elementos
esenciales de una arquitectura.
Por consecuencia al no ser una arquitectura como tal, un patrón al ser implementado
permite que varias arquitecturas lo contengan y compartan características comunes.
Uno de los aspectos más importantes de patrones arquitectónicos es que incorporan
diversas cualidades de la calidad, es decir, algunos patrones representan soluciones a los
problemas de funcionamiento y otros se pueden utilizar con éxito en sistemas de alta
disponibilidad, como sistemas bancarios transaccionales o de cajeros automáticos.
Un sistema de patrones brinda un conjunto de soluciones probadas y depuradas a
muchos problemas recurrentes de diseño de diversos niveles de abstracción, desde los
patrones arquitectónicos hasta los patrones de bajo nivel dependen del lenguaje para
50
implementarlos, con este enfoque se permite generar un desarrollo con un alto grado de
reusabilidad.
Los patrones arquitectónicos representan el nivel más alto en un sistema de patrones,
permiten especificar la estructura fundamental de una aplicación, todas las actividades del
desarrollo están bajo esta estructura, por ejemplo el diseño a través de subsistemas, la
comunicación y colaboración entre diferentes partes del sistema.
Así también es considerable comentar que los patrones que dan soporte a propiedades
similares pueden ser agrupados en categorías. Según Buschmann en su libro “Pattern-
Oriented Software Architecture, A System of Patterns” (Buschmann, 1996), comenta las
siguientes categorías para los patrones arquitectónicos.
• Sistemas Distribuidos.
• Sistemas Interactivos.
• Sistemas Adaptables.
51
El Futuro de los Patrones
En el futuro esperamos que el interés en los patrones crezca sustancialmente, ya que los
investigadores y los principales proyectos de software se encuentran orientados a
continuar adoptando paradigmas de patrones, métodos y procesos (Schmidt, 2007).
La literatura de los patrones en los últimos años se ha centrado en los patrones concretos
y lenguajes de patrones, a menudo derivados de los entornos de aplicaciones orientadas
a objetos. De cara al futuro, se espera que la comunidad que se dedica del estudio de los
patrones se amplíe sobre esta tradición. Por ejemplo, la próxima generación de
aplicaciones orientadas a objetos en sus frameworks incorporan a los patrones de forma
explícita.
• Objetos distribuidos. Muchos patrones asociados con el middleware y las
aplicaciones para objetos concurrentes y en red se han documentado durante los
últimos diez años. El siguiente paso clave es el de documentar patrones de objetos
distribuidos, con el fin de extender lo ya documentado para centrarse en temas de
distribución de objetos, tales como localización de servicios remotos y partición,
nombres y directorios de servicios, balanceo de carga, confiabilidad y seguridad.
• Sistemas embebidos. Un número cada vez mayor de sistemas de computación
están incorporados, incluidos los sistemas de control del automóvil y aplicaciones
basados en el coche, software de control para equipos de automatización,
informática aviónica de misión, y dispositivos informáticos portátiles. Muchos de
estos sistemas están sujetos a estrictas limitaciones de recursos de computación,
en particular huella de la memoria y time constraints.
• Sistemas móviles. Las redes inalámbricas se están convirtiendo en dispositivos de
computación ubicua e integrados se vuelven más pequeños, más ligeros, y más
capaz. Por lo tanto, los sistemas móviles pronto apoyo a la comunicación de los
consumidores y muchas necesidades informáticas. Las áreas de aplicación para
los sistemas móviles incluyen computación ubicua, los agentes móviles, asistentes
personales, suministro de información dependientes de la posición, distancia de
diagnóstico médico y tele-radiología, y en el hogar y automatización de oficinas.
52
Además, los servicios de Internet, que van desde la navegación por la web de
banca on-line, se puede acceder desde sistemas móviles. Los sistemas móviles
pueden enfrentarse a muchos desafíos, como la gestión de ancho de banda,
adaptándose a las frecuentes interrupciones en la conectividad y la calidad del
servicio, las divergencias en los protocolos, y el mantenimiento de la coherencia de
caché a través de nodos de red. Esperamos que los desarrolladores con
experiencia en sistemas móviles determinen documentar su experiencia en forma
de un patrón para ayudar a satisfacer la creciente demanda de las mejores
prácticas en el desarrollo de software en este ámbito.
• Transacciones comerciales y sistemas de comercio electrónico. Muchos sistemas
de información empresarial, tales como contabilidad, nómina, inventarios y
sistemas de facturación, se basan en transacciones. Las reglas de procesamiento
de las transacciones son complejas y deben ser flexibles para reflejar las nuevas
prácticas de negocios y fusiones. los sistemas de negocios también deben manejar
volúmenes cada vez mayor de transacciones en línea. El advenimiento del
comercio electrónico en la Web es la exposición de muchos sistemas de negocio a
negocio directamente a los consumidores. A pesar de la importancia de estos
sistemas, elativamente poco se ha escrito sobre su análisis, arquitectura o
patrones de diseño. Esperamos que el diseño y desarrollo de patrones en las
transacciones y el comercio electrónico crezca en los próximos años.
• Calidad de servicio para commercial-off-the-shelf (COTS) basado en sistemas
distribuidos. Los sistemas distribuidos, tales como streaming de vídeo, telefonía por
Internet, y en gran escala de sistemas de simulación interactiva, tienen una calidad
cada vez más estrictos de servicio (QoS). La Clave de los requisitos de QoS es
determinada por el ancho de banda y latencia, velocidad del CPU, tiempo de
acceso de memoria, y niveles de potencia. Para reducir el ciclo de desarrollo en
tiempo y costo, como los sistemas distribuidos son cada vez más desarrollados
utilizando múltiples capas de hardware COTS, sistemas operativos, middleware y
componentes. Históricamente, sin embargo, ha sido difícil de configurar los
sistemas basados en COTS y al mismo tiempo poder satisfacer las propiedades de
calidad de servicio múltiples, tales como seguridad, puntualidad, y tolerancia a
fallos.
53
• Reflective middleware. Este término describe un conjunto de tecnologías diseñadas
para gestionar y controlar los recursos del sistema en aplicaciones distribuidas
autónomas o semiautónomas. Las técnicas reflexivas middleware permiten
cambios dinámicos en el comportamiento de las aplicaciones de software de base
y la adaptación de los protocolos de hardware, políticas y mecanismos con o sin el
conocimiento de las aplicaciones o usuarios finales. Al igual que con calidad de
servicio de sistemas distribuidos, los patrones jugarán un papel clave en
documentar las mejores prácticas que puedan ayudar a garantizar la aplicación
efectiva del “Reflective middleware”.
• Optimización de los principales patrones. Mucha de la literatura actual se ha
centrado en que el rendimiento no sea un factor en la calidad de software. Aunque
esto puede ser aceptable en los ámbitos en los requisitos no funcionales, tales
como la facilidad de uso o de ampliación, son de suma importancia, otros ámbitos,
especialmente distribuidos e integrados en tiempo real el verdadero valor de los
sistemas es su eficiencia, escalabilidad, previsibilidad y fiabilidad por encima de
muchas cualidades de software.
54
Lenguajes de Descripción Arquitectónica (ADL’s)
Los lenguajes de descripción arquitectónica (ADL’s), son lenguajes para el modelado, la
descripción y prueba arquitectónica, permiten la representación de componentes,
conectores, configuraciones y restricciones de la arquitectura, así también están
pensados para permitir la evolución de la arquitectura, es decir son flexibles al cambio.
Un ADL es un enfoque lingüístico a la representación formal de una arquitectura
(Clements, 1998). Una arquitectura software incluye la descripción de elementos que
constituyen a los sistemas, las interacciones entre tales elementos, los patrones que
guían su composición y las restricciones sobre estos patrones (Mary Shaw, 1996).
Un ADL se centra en la estructura de alto nivel de la aplicación en su conjunto y no en los
detalles de implementación de cualquiera de sus módulos fuentes específicos (Vestal,
1993). Un ADL debe modelar explícitamente los componentes, los conectores y las
diversas configuraciones; más aún, para que sea realmente utilizable y útil debe facilitar
un soporte de herramienta para el desarrollo arquitectónico (Medvidovic, 1996). Por tanto,
un ADL es un lenguaje que proporciona características para modelar la arquitectura
conceptual de un sistema software, distintiva de la implementación del sistema: los ADL’s
proporcionan tanto una sintaxis concreta como un marco conceptual para la
caracterización de arquitecturas donde este refleja las características del dominio para los
que el ADL está enfocado y/o el estilo arquitectónico. El marco subsume la teoría
semántica subyacente del ADL (Garlan, 1997).
Los ADLs se remontan a los lenguajes de interconexión de módulos (MIL), pero se han
comenzado a desarrollar con su denominación actual a partir de 1992 o 1993, poco
después del impacto de la arquitectura de software como especialidad profesional. La
definición más simple es la de Alexander Wolf (Wolf, 1997) que define un ADL como una
entidad consistente en cuatro “Cs”: componentes, conectores, configuraciones y
restricciones (constraints).
Una de las primeras definiciones es la de Steve Vestal (Vestal, 1993) quien sostiene que
un ADL debe modelar o soportar los siguientes conceptos:
55
• Componentes.
• Conexiones.
• Composición jerárquica, en la que un componente puede contener una sub-
arquitectura completa.
• Paradigmas de computación, es decir, semánticas, restricciones y propiedades no
funcionales.
• Paradigmas de comunicación.
• Modelos formales subyacentes.
• Soporte de herramientas para modelado, análisis, evaluación y verificación.
• Composición automática de código aplicativo.
Por otra parte Shaw y Garlan (Shaw, 1994) comentan que en los ADLs los conectores
sean tratados explícitamente como entidades de primera clase y han afirmado que un
ADL tiene que proporcionar propiedades de composición, abstracción, reusabilidad,
configuración, heterogeneidad y análisis, lo que excluiría a todos los lenguajes
convencionales de programación y a los MIL.
Una de las especificaciones más claras y concisas es la de Medvidovic (Medvidovic,
1996), la cual señala que los ADL’s deben contener los siguientes elementos para ser un
lenguaje completo:
• Componentes
• Conectores
• Configuraciones arquitectónicas
• Soporte de herramientas
Un ADL con todas sus características forma parte de un entorno de desarrollo integrado
que, además, soporte la agregación de información, para que sea optimo la utilización de
un ADL durante la construcción de un sistema se deben presentar situaciones tales como.
• Sistema inicialmente descrito, basado en estilos arquitectónicos.
• Descripción de alto nivel del sistema, sea mediante casos de uso, escenarios u otra
alternativa más formal.
56
• Realización de diversos tipos de análisis o simulaciones del modelo arquitectónico
que permitan estimar los recursos necesarios y obtener el grado de satisfacción de
propiedades de calidad como el rendimiento, la disponibilidad o la seguridad.
• Refinamiento de componentes para cada tipo de análisis.
• Visualización de información de cada componente y de los resultados del análisis
sobre ellos.
• Codificación o generación de plantillas a partir de las descripciones de los
componentes.
Por otra parte con base a las propuestas de los autores antes señalados podemos
comentar que existen elementos comunes que los ADL’s deben contener, los cuales son
los siguientes:
• Componentes: Representan los elementos primarios de un sistema. Ejemplos
típicos serían clientes, servidores, filtros, objetos, pizarras y bases de datos.
• Conectores: Representan interacciones entre componentes. Ejemplos típicos
podrían ser tuberías (pipes), llamadas a procedimientos, protocolos cliente-
servidor, o conexiones entre una aplicación y un servidor de base de datos.
• Configuraciones o sistemas: Se constituyen como grafos de componentes y
conectores. Los sistemas también pueden ser jerárquicos, componentes y
conectores pueden subsumir la representación de lo que en realidad son complejos
subsistemas.
• Propiedades: Representan información semántica sobre un sistema más allá de su
estructura. Por ejemplo, cuestiones de seguridad, escalabilidad, dependencia de
bibliotecas o servicios específicos, configuraciones mínimas de hardware y
tolerancia a fallas.
• Restricciones: Representan condiciones de diseño que deben acatarse incluso en
el caso que el sistema evolucione en el tiempo. Por ejemplo, el número de clientes
que se puede conectar simultáneamente a un servicio.
• Estilos: Representan familias de sistemas, un vocabulario de tipos de elementos de
diseño y de reglas para componerlos. Ejemplos serían las arquitecturas de flujo de
datos basados en grafos de tuberías (pipes) y filtros, las arquitecturas de pizarras
basadas en un espacio de datos compartido, o los sistemas en capas.
57
• Evolución: Es el soporte de procesos de evolución permitiendo derivar subtipos a
partir de los componentes e implementando refinamiento de sus rasgos.
• Propiedades no funcionales: La especificación de estas propiedades es necesaria
para analizar la conducta de los componentes, imponer restricciones, mapear
implementaciones sobre procesadores determinados, etcétera.
Es destacable mencionar que los ADL’s deben contener un conjunto mínimo de requisitos,
para poder ser lo más óptimo posible al momento de su utilización independientemente
del tipo y la arquitectura que se desea modelar:
• Comunicación: Un ADL debe ser adecuado para comunicar una arquitectura a
todas las partes interesadas en la misma. Todas las estructuras de una
arquitectura deben poder definirse utilizando el ADL, incluyendo tanto aquellas que
son estáticas como las que son dinámicas. Los diversos tipos de componentes y
conectores deben estar identificados en cada una de las estructuras.
• Análisis y Validación: Un ADL debe dar soporte a las tareas de creación de la
arquitectura, refinamiento y validación
• Propósito General: Un ADL debe proporcionar la capacidad para representar la
mayoría de los estilos arquitectónicos habituales.
• Abstracción: Un ADL debe tener la capacidad de proporcionar estructuras del
sistema que expresen información arquitectónica y que, al mismo tiempo, omitan
toda aquella información sobre la implementación que no sea arquitectónica.
• Derivación: El ADL debe proporcionar una base para fomentar la implementación.
Sobre todo, debe posibilitar la agregación de información extra a la especificación
ADL de manera que permita que una especificación final del sistema sea derivada
del ADL.
• Alternativas de Implementación: Si el ADL puede expresar información de nivel de
implementación, debe tener posibilidades para optar a más de una implementación
de las estructuras de nivel arquitectónico del sistema.
Es destacable el mundo de posibilidades que un ADL permite a un arquitecto de software
de manera ordenada y documentada.
58
Como se mencionó existen muchos ADL’s específicos para diversos tipos de enfoques y
otros más genéricos, es por eso que basado en características y en consejos acerca de
utilizar software libre se ha optado por utilizar ACME ARMI para describir el caso de
estudio en este trabajo.
Lenguaje AcmeArmi
Acme se define como una herramienta capaz de soportar el mapeo de especificaciones
arquitectónicas entre diferentes ADLs, o en otras palabras, como un lenguaje de
intercambio de arquitectura.
El proyecto Acme comenzó a principios de 1995 en la Escuela de Ciencias de la
Computación de la Universidad Carnegie Mellon. Destacados arquitectos y
sistematizadores tales como David Garlan y Robert Monroe han hecho posible el
desarrollo de Acme en obras como el reporte “Capturing software architecture design
expertise with Armani” de Monroe (Monroe. 1998) y el artículo “An architectural
interchange language” de Garlan, Monroe y Wile (Garlan, 1997).
La motivación fundamental de Acme es el intercambio entre arquitecturas e integración de
ADLs.
Acme soporta la definición de cuatro tipos de arquitectura: la estructura, las propiedades
de interés, las restricciones, los tipos y estilos.
Acme-Armani se constituyó en un lenguaje de tipo ADL, especializado en la descripción
de la estructura de un sistema y su evolución en el tiempo. Es un lenguaje puramente
declarativo que describe la estructura del sistema y las restricciones a respetar.
De alguna manera, la naturaleza de Acme-Armani captura también la experiencia de los
arquitectos, señalando su vinculación con la práctica de los patrones arquitectónicos, en
este caso patrones de diseño.
59
Armani se basa en siete entidades para describir las instancias del diseño: componentes,
conectores, puertos, roles, sistemas, representaciones y propiedades. Para capturar las
experiencias y mejores prácticas, Acme-Armani implementa además otras seis entidades
que son, tipos de elementos de diseño, tipos de propiedades, invariantes de diseño,
heurísticas, análisis y estilos arquitectónicos.
Figura 4, Pantalla de AcmeStudio.
60
CAPITULO 2, Patrones Arquitectónicos desde perspectivas actuales
En este capítulo se busca hacer una recopilación que a su vez sirva como referencia de
los patrones arquitectónicos que existen en la actualidad y son aplicados por muchos
sistemas robustos o son foco de atención de empresas de creación de software y
lenguajes de programación como Sun Microsystems y Microsoft.
Patrones Arquitectónicos como el patrón MVC (Modelo Vista Controlador), son tema de
este capítulo.
61
Patrón Arquitectónico Modelo Vista Controlador (MVC)
El patrón MVC es un patrón arquitectónico de tres capas conceptuales, fue definido en un
principio para sistemas usuario-máquina y en la actualidad es aplicado a los Sistemas de
Información Distribuidos.
El patrón MVC no solo define tres capas de una arquitectura 3-tier (Presentación, Lógica
de negocios y datos), más bien define las responsabilidades y las dependencias
dependiendo de los objetivos que representa en tres paradigmas (Modelo, Vista y
Controlador).
Modelo (Model):
o Encapsula los datos y las funcionalidades.
o Es independiente de cualquier representación de salida y/o
comportamiento de entrada.
o Representa toda la información con la que opera la aplicación.
o Gestiona el comportamiento y los datos del dominio.
o Responde a peticiones de información que vienen de la vista.
o Responde a instrucciones de cambio de estado, provenientes del
controlador.
Vista (View):
o Muestra la información al usuario.
o Pueden existir múltiples vistas del modelo.
o Cada vista tiene asociado un componente controlador.
o Gestiona la representación de la información de la aplicación.
62
Controlador (Controller):
o Reciben las entradas, es decir, los eventos que codifican los
movimientos o clics de botones del mouse, clics a botones o teclas, en
general todo tipo de evento que se genera de la vista.
o Llama a la lógica del negocio para procesar y producir una respuesta.
o Interpreta las entradas del usuario, informando al modelo y a la vista lo
que surja de dichas entradas.
El patrón MVC gráficamente cuenta con tres componentes y sus relaciones entre estos, y
que al final de un procesamiento utilizan la vista como entrada y salida de las peticiones
del usuario Figura 6.
Figura 5, Diagrama de secuencias que muestra gráficamente el patrón MVC.
El diagrama de la figura 5, explica el patrón MVC y muestra como un usuario genera una
evento y este es pasado por toda la arquitectura para que al final entregue una respuesta
como consecuencia del evento generado por el usuario.
1. El usuario introduce el evento.
2. El Controlador recibe el evento y lo traduce en una petición al Modelo.
3. El modelo (si es necesario) llama a la vista para su actualización.
4. Para cumplir con la actualización la Vista puede solicitar datos al Modelo.
5. El Controlador recibe el control.
63
Patrón Arquitectónico Broker
Es un patrón arquitectónico aplicado en la estructuración de sistemas distribuidos en los
cuales es necesaria la interacción remota de componentes altamente desacoplados, lo
anterior se logra al introducir un componente Broker cuya función principal es lograr el
desacoplamiento de los clientes y de los servidores, también registra a los servidores,
logrando de esta forma que los servicios que estos ofrecen estén disponibles a los
posibles clientes.
Además de los componentes Broker, servidores y clientes, este patrón está también
constituido por los componentes de tipo Proxy y por los componentes de tipo Bridges.
Los Proxies, pueden ser de dos tipos: client-side-proxy y server-side-proxy, los proxies del
primer tipo pueden ser considerados como una capa entre los clientes y el Broker, la cual
proporciona transparencia puesto que gracias a ella un servidor remoto aparece ante un
componente cliente como local.
Los proxies del segundo tipo son análogos a los del primer tipo, sin embargo difieren en
que son responsables de recibir peticiones y desempaquetarlas con el fin de llamar al
servicio correcto, además se encargan de recibir resultados y excepciones del servidor,
empaquetarlos y enviarlos al Broker. Por otra parte, los componentes Bridges tienen como principal función ocultar los detalles
de implementación de los mecanismos de interoperatividad entre dos Brokers; así, si
estos corren en redes distintas, pueden, no obstante, comunicarse entre sí
independientemente de los sistemas operativos sobre los cuales ellos corren.
En resumen, cabe destacar que las características de calidad más importantes que se
ponen en evidencia para el patrón Broker son: la interoperabilidad, la transparencia de
ubicación, la capacidad de manejar los cambios con eficiencia (flexibilidad) y la
adaptabilidad (portabilidad).
64
Patrón Componentes Comportamiento Características de calidad
Broker Broker, proxies,
servidores, clientes,
bridges
dinámico Cambios a nivel
dinámico,
extensibilidad,
reutilización,
portabilidad
(adaptabilidad),
transparencia
respecto
Tabla 1, Características del patrón arquitectónico Broker
El patrón arquitectónico de broker introduce una capa de servicios de software que realiza
las operaciones de conversión y acoplamiento necesarias para simplificar el intercambio
de información entre los sistemas.
Gracias a las facilidades que brinda por este patrón y utilizando los mecanismos
apropiados es posible reemplazar gradualmente la funcionalidad de un sistema al mismo
tiempo que se integran los datos que contiene, sin esperar a que esto suceda en una
etapa avanzada.
Objetivo del patrón Broker
El patrón Broker arquitectónico puede ser usado para estructurar sistemas de software
distribuidos con componentes que interactúen de forma disociada por las llamadas de un
servicio remoto. Un componente Broker es responsable de coordinar las cuestiones de
comunicación, tales como solicitudes de reenvío, así como para la transmisión de
resultados y excepciones.
Motivación
La principal motivación que tuvo el autor para desarrollar este patrón es el poder introducir
un componente intermediario para lograr un mejor desacoplamiento de los clientes y
servidores.
65
• Lo ideal para los Servidores sería poderse registrar en un Broker y poner sus
servicios a disposición de los clientes a través de interfaces de método.
• Para los clientes tener acceso a la funcionalidad de los servidores mediante el
envío de peticiones a través del Broker.
A las tareas incluyen la localización de los Brokers en el servidor apropiado, la solicitud de
reenvío en el servidor y la transmisión los resultados y excepciones al cliente.
Al usar el patrón Broker, una aplicación debe poder tener acceso a servicios distribuidos,
simplemente mediante el envío de mensaje al objeto apropiado, en lugar de centrarse en
cosas de bajo nivel de comunicación entre procesos.
Además, la arquitectura Broker es flexible, ya que permite un cambio dinámico, adición,
supresión y traslado de objetos.
• El patrón Broker reduce la complejidad que implica en el desarrollo de aplicaciones
distribuidas, ya que hace que la distribución transparente para el desarrollador,
logra este objetivo mediante la introducción de un modelo de objetos en los que se
distribuyen los servicios y se encapsulan en los objetos.
• Los sistemas de Broker por tanto, ofrecen una manera a la integración de dos
tecnologías fundamentales: la distribución y la tecnología de objetos.
Usos Conocidos del patrón arquitectónico Broker
Este patrón se ha utilizado en los siguientes sistemas:
• CORBA. Common Object Request Broker Architecture, es una tecnología orientada
a objetos para la distribución de objetos en sistemas heterogéneos. CORBA fue
definido por el Object Management Group y utiliza el patrón arquitectónico Broker.
Se fundamentan en dar uso a este patrón para mejorar el apoyo de la
interoperabilidad de los clientes y los objetos servidor buscando disponibilidad a
través de un lenguaje de definición.
66
• IBM SOM / DSOM. Se trata de un sistema CORBA Broker compatible que combina
la definición de la interfaz CORBA y un idioma con un protocolo binario.
• Microsoft OLE 2.x utiliza el patrón Broker y define un estándar binario para la
exposición y el acceso a interfaces de servidor.
• World Wide Web utiliza el patrón bróker para que los navegadores actúen como
intermediarios y los servidores de WWW como proveedores de servicios.
• ATM-P. ATM-P. De Siemens este proyecto de casa se creó con el fin de construir
un sistema de conmutación de telecomunicaciones basada en la aplicación de ATM
Message Broker como una variante del sistema.
Características Benéficas del Patrón Arquitectónico Broker
• Variabilidad
• Extensibilidad de componentes
• Interoperabilidad entre
• Transparencia
• Portabilidad
67
Patrón Arquitectónico Pipes and Filters
Contexto
El patrón arquitectónico Pipes and Filters proporciona una estructura para los sistemas
basados en flujo de procesos de datos. Cada paso de un proceso se encapsula en un
componente filtro. Los datos se pasan a través de tubos entre filtros adyacentes. Re
combinar filtros permite construir familias de sistemas relacionados.
Motivación
El patrón arquitectónico Pipes and Filters divide la tarea de un sistema en varios pasos de
procesamiento secuencial. Estas medidas están conectadas por el flujo de datos a través
del sistema, los datos de salida de un paso es la entrada a la fase siguiente.
Cada paso del proceso es ejecutado por un componente de filtro Un filtro consume y
entrega datos de forma incremental, en contraste con el consumo de todas sus
aportaciones antes de producir cualquier salida, para lograr una baja latencia y permitir el
procesamiento paralelo real. La entrada al sistema es proporcionada por una fuente de
datos como un archivo de texto.
La fuente de datos, los filtros y los datos se conectan de forma secuencial por tuberías.
Cada tubo implementa el flujo de datos entre los pasos de procesamiento adyacentes. La
secuencia de filtros combinados por tuberías se denomina línea de proceso.
La aplicación de este patrón ofrece que se puedan combinar y reutilizar en diferentes
aplicaciones:
• Muchas aplicaciones puedan procesar grandes volúmenes de elementos de datos
similares. Por ejemplo, los sistemas comerciales puedan manejar cotizaciones de
bolsa, los sistemas de facturación de telecomunicaciones puedan manejar los
68
registros de llamadas de datos, sistemas de información y gestión de laboratorio
puedan manipular los resultados de pruebas.
• El tratamiento de los elementos de datos se puede desglosar en una secuencia de
transformaciones individuales. Por ejemplo, el procesamiento de mensajes XML
normalmente implica una serie de transformaciones XSLT.
Usos Conocidos
Este patrón se ha utilizado en los siguientes sistemas:
• UNIX hizo popular al patrón Pipes and Filters con los shells de comandos y
programas de filtro.
• CMS filters extiende los sistemas operativos mainframes de IBM apoyando de esta
manera su arquitectura.
• LASSPTools contiene programas de filtro que puede ser combinados utilizando
tuberías de UNIX.
Características Benéficas
• Eficiencia
• Procesamiento
• Flexibilidad
69
CAPITULO 3. Propuesta de solución usando el Patrón
Arquitectónico Piramidal y la Arquitectura Piramidal de Sistemas
Distribuidos
En este capítulo se explicará a detalle el funcionamiento, estructura, características, flujo
de trabajo y ventajas que tiene la propuesta de los patrones piramidales.
También se explicará el funcionamiento, estructura y ventajas que tiene la propuesta de
los patrones piramidales tomando como proyecto de pruebas la necesidad que se tiene de
masificar una solución de pagos en la que se tiene un sistema de Terminal Punto de
Venta que trabaja sobre terminales móviles de forma convencional, con una Arquitectura
cliente servidor, entre las terminales y el autorizador de transacciones.
Se harán pruebas y se especificarán los detalles de la propuesta con el fin de llegar a un
ambiente productivo exitosamente.
70
El Patrón Piramidal
Recordemos que en la arquitectura de software dicho a grandes rasgos los patrones son
un modelo a seguir para lograr un objetivo. Dicho lo anterior los patrones piramidales no
son la excepción.
El patrón piramidal pretende ser un modelo a soluciones basadas en elementos que se
comunican entre sí, con la característica de que la comunicación sea jerárquica. Es decir
que exista un orden entre elementos y que cada elemento se comunique solo con un
elemento del siguiente nivel según el orden en el que se encuentren.
El patrón piramidal se orienta a sistemas distribuidos que como se mencionó requieren de
una comunicación jerárquica, ya sea por diseño o por seguridad o para evitar
inconsistencia de datos.
Por mucho tiempo la forma piramidal se ha utilizado para denotar jerarquía entre los
niveles que la conforman. El patrón piramidal denota tres niveles en su estructura, el nivel
base, el nivel de interpretación y el nivel fuente:
Figura 6. Niveles del Patrón Piramidal
71
El nivel base es el primer nivel de la pirámide y del cual se generan las peticiones o
solicitudes de procesamiento de datos. El nivel base contiene todos los componentes que
interactúan directamente con el usuario final.
Por otra parte el nivel de interpretación, es el que tiene los componentes que validan con
reglas de negocio las peticiones del nivel base, procesarlas y enviarlas al siguiente nivel
(Nivel Fuente).
El nivel fuente es el último en la pirámide y contiene el procesamiento final de la petición,
este nivel contiene componentes que proveen diversos servicios de terceros y por
consecuencia la arquitectura de este nivel se considera como una caja negra.
Características de Niveles
• Nivel Base:
o Los componentes que lo conforman se encuentran instalados de forma local.
o Pueden estar instalados en diferentes escenarios.
o No importa el lenguaje en el que se hayan desarrollado.
o No importa el sistema operativo sobre el que se encuentren instalados.
o Se comunican solo con el nivel de interpretación a través de un lenguaje o
protocolo de comunicación estándar, como XML, por HTTP POST, GET o
SOAP.
o Por el tipo de comunicación con el nivel de interpretación los componentes
del nivel base deben tener salida a internet o intranet.
• Nivel de Interpretación
o Es un nivel en el que sus componentes se encuentren centralizados en un
servidor.
o Los componentes de este nivel cuentan con reglas de negocio que validan
las peticiones del nivel base y para generar una respuesta entendible para
este.
o Los componentes de este nivel se comunican con los componentes del nivel
base a través del mismo protocolo o lenguaje de comunicación.
72
o Este nivel decide si la petición que se hace en el nivel base puede ser
enviada al nivel fuente o no. Si la petición no puede ser procesada se
genera el mensaje correspondiente y se envía de regreso la petición al nivel
base, de lo contrario si la petición si puede ser procesada se genera un
mensaje entendible para el nivel fuente y se envía.
o Los componentes de este nivel se comunican con los componentes del nivel
fuente a través de un medio que los componentes del nivel fuente
establecen.
• Nivel Fuente
o En este nivel se contienen los componentes que proveen diversos servicios
de terceros.
o Este nivel es el último nivel de la pirámide y es donde se procesa la
respuesta final de la petición que se genera en el nivel fuente y que el nivel
de interpretación considera correcto.
o La arquitectura de los componentes o la operación de estos se considera
como una caja negra ya que provienen de servicios de terceros.
Flujo de Operación del Patrón Piramidal
1. Un usuario a través de un componente del nivel base genera una petición.
2. El componente del nivel base genera un mensaje que cumple con características
comunes entendibles para algún componente del nivel de interpretación, se
empaqueta el mensaje y se envía a través de un protocolo de comunicación.
3. El componente del nivel de interpretación que fue invocado por el componente del
nivel base, recibe el mensaje y lo interpreta.
4. El componente del nivel de interpretación valida el mensaje y decide si puede ser
procesado y enviado a algún componente del nivel fuente o si debe ser retornado
al nivel base.
73
5. Una vez que el mensaje que envía el componente del nivel base es correcto el
componente del nivel de interpretación, genera un nuevo mensaje entendible para
el componente correspondiente del nivel de servicios o nivel fuente, es por esto
que este nivel se le llama nivel de interpretación.
6. El componente o servicio del nivel fuente recibe la petición del nivel de
interpretación, la procesa y genera un nuevo mensaje con la respuesta para
enviarlo al componente del nivel de interpretación.
7. El componente del nivel de interpretación recibe la respuesta del nivel fuente, la
interpreta y genera un nuevo mensaje con el lenguaje o protocolo establecido con
el nivel base.
8. Finalmente el nivel base recibe la respuesta del procesamiento, la interpreta y
genera las acciones necesarias para notificar dicha respuesta al componente que
dio origen a la solicitud.
En resumen el patrón piramidal toma como el nivel más alto de la pirámide el o los
componentes que provean la información final de una petición, es por esto que se les
llama componentes fuente.
Por otra parte, el componente en el nivel más bajo de la pirámide (nivel base), hace una
petición o una solicitud de información la cual la debe recibir el siguiente nivel de la
pirámide (nivel de interpretación) para que uno de los componentes que lo conforman
pueda procesarla y pasarla al componente fuente quien provee el resultado final del
procesamiento de la información y lo devuelve de la misma manera pero ahora
descendentemente hasta llegar al componente base que dio origen a la solicitud.
Si descomponemos al patrón piramidal en capas cada nivel debería representar una de
las siguientes capas:
• Lógica de Presentación. (Nivel Base)
• Lógica de Dominio. (Nivel de Interpretación)
• Lógica de Fuente de datos.
74
Es importante señalar que el patrón piramidal es la primicia para generar una arquitectura
piramidal de sistemas distribuidos.
Características Generales
• Deben existir forzosamente tres niveles que son la base, interpretación y la fuente.
• Cada nivel puede tener múltiples componentes que tengan la misma jerarquía de
procesamiento de la información.
• Los componentes que se encuentran en cada nivel son independientes no es
necesario que exista comunicación entre ellos.
• La comunicación entre niveles debe ser jerárquica y puede ser ascendente y
descendente.
• Pueden existir peticiones simultáneas, pero cada una debe cumplir un ciclo
jerárquico en la pirámide.
• Dentro del nivel de interpretación pueden existir validaciones de asignación para
emitir la petición a uno o a otro componente del mismo nivel.
• El patrón piramidal puede ser considerado genérico por su estructura y modo de
procesamiento, más adelante se comentará el por qué se le puede considerar
genérico.
75
Ventajas del Patrón Piramidal
• Facilita la colocación de la solución sobre cualquier plataforma, sin importar el
lenguaje de programación, es debido a que todos los niveles se comunican a
través de protocolos estándar de comunicación.
• Los componentes del nivel base pueden ser cualquier “cosa” (cualquier medio),
que tenga la facilidad de conectarse a internet o intranet y que pueda ejecutar un
programa.
• Se puede tener control tanto del nivel base como del nivel de interpretación.
• No tiene restricciones sobre el modo en el que se comuniquen los niveles de la
pirámide, puede ser cualquier protocolo de comunicación estándar.
• Es posible hacer llegar a los usuarios finales de una forma organizada y segura las
ventajas que ofrecen servicios de terceros.
• Al tener centralizados lo componentes del nivel de interpretación, se tiene mayor
control de las peticiones que se hacen a los servicios de terceros y así también se
tiene control de las respuestas que ofrecen dichos servicios, En este nivel se debe
llevar el registro y administración de las peticiones y respuestas.
• Los usuarios para tener acceso a un servicio pueden estar en cualquier sitio en el
que se encuentre un componente del nivel base, por ejemplo si un componente del
nivel base es una aplicación para celular, el usuario podría acceder a un servicio
desde su dispositivo.
• Por la estructura de niveles cualquier operación realizada en el nivel base, se
registra en el nivel de interpretación y posteriormente se puede acceder al registro
de dichas operaciones a través de un componente base que haga una petición de
consulta al nivel de interpretación.
76
• Los componentes del nivel base solo se preocupan por establecer una sola forma
de comunicación, es decir la que establezcan con el nivel de interpretación, por
definición el nivel base no tiene forma de comunicarse con el nivel fuente, lo que da
ventaja a integrar en los componentes del nivel base solo un protocolo de
comunicación.
• Al estar centralizado el nivel de interpretación y al ser servicios los del nivel fuente,
los componentes del nivel base puede acceder en cualquier momento a los
servicios.
• Al ser un lenguaje o protocolo estándar el que se utiliza para comunicarse con el
nivel de interpretación se facilita la integración de nuevos tipos o escenarios en el
nivel fuente.
77
Múltiples plataformas y
múltiples dispositivos
Componentes
centralizados sobre
servidores en diferentes
Múltiples servicios de
terceros.
El Patrón Piramidal desde una perspectiva genérica
Una de las pretensiones que se tienen con el patrón piramidal es que este pueda ser
aplicado como solución a problemas de aplicación en las que se requiera tener acceso a
servicios.
Se puede considerar genérico por las siguientes causas.
1. No importa el lenguaje de programación en ninguno de los niveles.
2. No importa el sistema operativo en ninguno de los niveles.
3. La comunicación entre niveles es estándar.
4. Solo basta con establecer el medio de comunicación entre niveles para generar
peticiones y respuestas.
5. No importa el tipo de dispositivo que se encuentre en el nivel base, pueden ser
dispositivos móviles, laptops, PC, etc.
6. El nivel de interpretación solo debe ser un server centralizado con salida a
internet.
Figura 7, Patrón Piramidal, un enfoque genérico
78
Introducción al caso de estudio
Como es notable una aplicación que se encarga del manejo de transacciones bancarias
es de suma importancia el manejo correcto y seguro de la información.
Para este caso de estudio se tomará en cuenta una aplicación que hace cobros
bancarios, la cual tiene como objetivo realizar cobros bancarios con tarjeta presente y no
presente.
La Aplicación de Cobros Bancarios es una plataforma que permite a las compañías,
consolidar, y hacer más eficiente la gestión de cobros con tarjeta bancaria acoplándose a
las estrategias del negocio.
La Aplicación de Cobros Bancarios ofrece diferentes servicios de cobro para cubrir las
necesidades de cada empresa, garantizando la seguridad de las transacciones en cada
una de ellas.
Modelo Básico de Operación
Existe un modelo básico de operación que aplica de manera genérica a todos los medios
de pago. El vendedor realiza una venta a un cliente final que en su pago emplea a una
entidad financiera.
La entidad financiera es la que garantizará el pago al banco en la que el Comercio
mantiene sus depósitos, realizando estas dos entidades todo un intercambio,
compensación y liquidación de flujos monetarios para que se lleve a cabo el cobro/pago
derivado de la venta realizado entre vendedor y comprador. De esta forma, las distintas
partes que configuran el modelo base son las siguientes:
• El cliente final, comprador.
• El Comercio, vendedor.
• La entidad financiera Emisora, banco del cliente final que emite alguna forma de
título garantizando (medio de pago) y respaldando el pago de su cliente.
79
• La entidad financiera Adquirente, banco del Comercio, que adquiere los títulos
anteriores y los deposita al Comercio.
• Un sistema para intercambiar, compensar y liquidar estos títulos para que se
produzcan de forma segura los flujos monetarios entre los bancos Emisor y
Adquirente.
Figura 8, Partes que conforman el modelo base
80
Procesamiento de Medios de Pago Electrónicos
El procesamiento de tarjetas de crédito ocurre en dos pasos: la autorización en tiempo
real y la compensación de los fondos que fueron autorizados.
Autorización
Una transacción comienza cuando el tarjetahabiente presenta su tarjeta de pago al
Comercio para adquirir bienes o servicios. La información de la transacción es enviada
electrónicamente al Banco Emisor para solicitar la autorización del cobro cargo. El banco
verifica que la tarjeta sea válida, evalúa si tiene saldo disponible, checa el código de
seguridad, y regresa una respuesta: Aprobada, Rechazada u otras. El Comercio recibe la
respuesta segundos después de hacer la solicitud.
Liquidación y Compensación
La compensación bancaria es una forma de extinción de deudas entre instituciones
financieras por la que dos o más de ellas equilibran sus deudas recíprocas. La
liquidación es la transferencia de fondos, proceso por el cual una operación es saldada.
Diariamente se compensan las cuentas bancarias y se liquidan los fondos de las
transacciones realizadas en el periodo. Una vez realizada la compensación, se hace un
cargo al Banco Emisor y se transfieren los fondos a la cuenta del Comercio. El tiempo que
tarda el dinero en estar disponible en la cuenta del Comercio, depende del Banco del
Adquirente. Existen siete entidades (Comercio, consumidor, Banco Emisor, Banco
Adquirente, procesador de pagos, servicios de Gateway, asociaciones de tarjetas)
involucradas en una transacción. El Comercio depende de terceros para asegurar que el
consumidor puede pagar por la transacción y para autentificar que el consumidor está
autorizado para realizar la compra.
Problemática
El problema nace por la necesidad de poder implementar la plataforma de La Aplicación
de Cobros Bancarios en diferentes escenarios con el fin de poderlo masificar y utilizar
81
desde diversos dispositivos, pero siempre cumpliendo con diferentes estándares de
seguridad y resguardo de la información.
Con el objetivo de acrecentar el número de clientes potenciales de la aplicación y así
poder llevar la solución a muchos más dispositivos y en consecuencia a más clientes.
También el problema nace de la necesidad de ofrecer un producto distinto a terminales
punto de venta, tradicionales, se pretende ofrecer una solución centralizada con diferentes
posibilidades de accesibilidad e integración. Una solución versátil, que permita utilizar
componentes prediseñados listos para usarse, o bien, ofrecer herramientas para que
aplicaciones ya existentes puedan integrar la solución mediante componentes ya
elaborados.
Explicación Técnica de la Problemática
Técnicamente la aplicación de Cobros Bancarios cuenta con una arquitectura cliente
servidor la cual básicamente se trata de componentes físicos de software y hardware que
se encuentran instalados en un ordenador cliente y que hacen peticiones a los servicios
bancarios a través de mensajes ISO 8583.
El problema se encuentra en que cuando se necesita integrar una nueva plataforma o un
nuevo dispositivo o una nueva aplicación prácticamente se requiere regenerar la
aplicación y adaptarla al lenguaje de programación correspondiente, lo que es una tarea
de alto costo, prácticamente se tiene una aplicación por cada escenario o interfaz.
Esta situación detiene bastante el objetivo de masificar la solución y de llevarla a diversos
ambientes y escenarios.
Con la arquitectura actual se requiere planear un proyecto completo cada vez que se
pretenda implementar la solución en un escenario distinto a los contemplados.
Este problema limita mucho la actividad de negocio y cierra la puerta a clientes
potenciales que requieren cosas distintas a lo que se ofrece.
82
Figura 9, Arquitectura Actual de la aplicación de cobros bancarios
Propuesta de Solución a la problemática
A continuación se describen los pasos para el procesamiento electrónico de una
transacción, aplicando un modelo arquitectónico en niveles.
1. El Cliente paga al Comercio por un bien o servicio, proporcionando los datos de la
tarjeta de pago, en el punto de venta de su elección.
2. El Comercio somete una transacción de tarjeta de crédito al Gateway de Pagos en
nombre del cliente, a través de una conexión segura desde diferentes canales de venta:
Internet, mostrador, correo, terminal móvil.
83
3. El Gateway de Pagos, cumpliendo con los requisitos de seguridad y transmisión,
traduce la información de la transacción en un mensaje de solicitud de autorización y lo
transmite al Procesador.
4. El Procesador en ruta la solicitud de autorización al Banco Emisor de la tarjeta para su
autorización.
5. El Emisor aprueba o declina la transacción en base a los fondos disponibles del Cliente
y pasa el resultado de la transacción de regreso al Procesador.
6. El Procesador transmite el resultado de la transacción al Gateway de Pagos.
7. El Gateway de Pagos almacena el resultado de la transacción y lo envía al Comercio.
8. El Comercio termina la transacción y libera la mercancía al Cliente.
9. El Banco Emisor transfiere al Procesador los fondos de la operación (precio de venta -
la tasa de intercambio).
10. El Procesador envía los fondos al Banco Adquirente ((precio de venta - la tasa de
intercambio).
11. El Adquirente transfiere los fondos en la cuenta del Comercio (precio de venta menos
tasa de descuento).
12. El Banco Emisor carga el monto de la transacción (precio de venta + cuotas por
servicio e intereses sobre el saldo) a la cuenta del tarjetahabiente y le envía su estado de
cuenta de manera mensual.
84
Figura 10, Procesamiento Electrónico de Transacciones.
Con el fin de solucionar la problemática presentada, se harán pruebas de implementación
utilizando el patrón arquitectónico piramidal.
El patrón piramidal principalmente establece tres niveles sobre los cuales se encuentra
distribuida una aplicación.
• Nivel Base.
• Nivel de interpretación.
• Nivel Fuente.
85
Como recordamos el nivel base es en dónde literalmente nacen las peticiones de
procesamiento de la información, en este nivel se pueden encontrar gran cantidad de
vistas que generen solicitud de información.
Para este caso principalmente interesa este nivel, ya que es aquí en donde el negocio
pretende masificar su servicio, permitiendo abrir las posibilidades a más clientes con
distintas plataformas integradas.
Con la definición que se tiene del patrón piramidal, podemos atacar el punto de la
masificación interponiendo en el nivel base componentes integrables a diferentes
lenguajes tales DLL’s, Jar’s, OCX, etc. En resumen bibliotecas que puedan implementarse
en diferentes lenguajes. También es conveniente generar vistas para el nivel base que
estén montadas sobre plataformas Web, con esto garantizamos parte del problema de la
plataforma. Otro aspecto en este nivel es realizar vistas con similar ya compiladas para
cada plataforma que se deseé abarcar.
En resumen la sugerencia para el nivel base es adaptar las vistas en componentes
integrables para múltiples lenguajes tales como bibliotecas, generar una vista instalable
que integre una de las bibliotecas para los clientes que solo deseen acceder a la
funcionalidad de la aplicación e cobros bancarios sin añadir alguna interfaz propia.
Generar una interfaz web que permita a los clientes ingresar y generar cobros desde
portal para casos muy específicos realizar la interfaz sobre la plataforma de la aplicación
pero basar la funcionalidad de La Aplicación de Cobros Bancarios en alguna biblioteca.
Figura 11, Componentes del Nivel Base
86
Es necesario generar o acordar un protocolo de comunicación vía web entre el nivel base
y el nivel de integración, para este caso se utilizarán web services basados en SOAP.
Una vez que se llega a un acuerdo con el tipo de comunicación, se debe definir un
lenguaje de consultas que exista entre el nivel de interpretación y el nivel fuente, para este
caso se utilizará XML.
¿Por qué es conveniente usar XML? Porque los negocios de hoy en día dependen de la
información y los datos pueden provenir de varios orígenes de información distintos:
bases de datos, páginas Web, archivos de hojas de cálculo y correo electrónico, por
mencionar sólo algunos. XML permite trabajar con más datos de más orígenes y hacer
más cosas con esos datos. En general lenguaje XML resulta muy útil. Sin embargo una
desventaja de este lenguaje es que el navegador o el "visualizador" que el usuario utilice,
no cuente con un Parser capaz de visualizar el contenido del documento.
Figura 12, El Lenguaje XML
En cuanto al nivel de interpretación será aquí en donde se defina un web service que se
comunicará con todas las vistas y responderá a todas las peticiones del nivel fuente, este
nivel se considera como el de más tráfico ya que pasan por el tanto peticiones de los
clientes como respuestas de servicios de terceros.
87
Recordemos que en el nivel de interpretación se definen las reglas principales del negocio
y se almacenan los datos, es decir aquí se encuentran las bases de datos y los servicios
propios de La Aplicación de Cobros Bancarios.
En este caso se utilizará una base de datos Oracle 9i, en donde se almacenarán todos los
registros de las transacciones, así como los usuarios, privilegios, catálogos y demás
registros propios del comercio y necesarios para la correcta operación del sistema en
general.
El lenguaje que se utilizará para los componentes que se encuentren en el nivel fuente
será Java utilizando los beneficios que ofrece el framework Spring a través de Web
Services.
Este Web Service principalmente se encargará de tomar las peticiones de los clientes
recibiendo un solo parámetro de tipo String en cada uno de sus métodos, este parámetro
deberá estar encriptado y en él se contendrá el XML con los nodos correspondientes a la
petición que esté haciendo el componente que se encuentre en el nivel base.
El objetivo de recibir un solo parámetro de tipo String y no un objeto es porque el String es
un tipo de dato muy estándar que prácticamente cualquier lenguaje de programación tiene
y con esto podemos garantizar que se establezca una comunicación sin problemas de
compatibilidad entre los componentes del nivel base y del nivel fuente.
Figura 13, Componentes del Nivel de Interpretación
Para el nivel fuente el lenguaje y mensajería es establecido por el tercero dueño del
servicio que se desea explotar, en este caso existirá una comunicación por medio de web
88
servcies y enviando como parámetros mensajes de tipo ISO 8583, los cuales se enviaran
entre el procesador y La Aplicación de Cobros Bancarios.
El procesador es una empresa que dedica a recibir peticiones o solicitudes de cobros
bancarios y los envía a los diferentes bancos emisores para su autorización o rechazo.
Procesador Bancario Banco
Internet
ISO
COMPONENTES DEL NIVEL FUENTE
Figura 14, Componentes del Nivel Fuente
A continuación, se mostrará el flujo completo de la pirámide, tomando los diferentes
niveles y los componentes que los conforman.
89
Figura 15, Patrón Piramidal
Flujo de Implementación del Patrón Piramidal
A continuación se explica el flujo utilizando la propuesta del patrón piramidal.
1. Se deben especificar las reglas de negocio a nivel base de datos, así como
establecer restricciones y normalización de la misma.
2. Se sugiere generar procedimientos almacenados y transacciones para la
manipulación de la base de datos y no agregar queries al código de la aplicación.
3. Posteriormente es conveniente iniciar con el análisis y programación del Web
Service que se instalará en el nivel de interpretación, en este Web Service se
deben establecer reglas de negocio acorde a las necesidades.
4. Establecer protocolos de comunicación y conexión con servicios de terceros
mismos que se pretenden consumir y que se encuentran en el último nivel de la
pirámide (nivel fuente).
90
5. Se debe establecer el lenguaje y medio de comunicación para la interacción entre
el nivel de interpretación y el nivel base.
• Se recomienda utilizar el lenguaje XML, y así generar esquemas bien
definidos con tags que representen los datos que se desean manipular o
consultar.
• Se recomienda que cada método del Web Service reciba parámetros de tipo
String en este caso se recomienda recibir solo un parámetro encriptado por
algún método genérico y no usar un método de encripción propio de algún
lenguaje, este parámetro contendrá el XML con la información de la
operación que se realiza.
6. Una vez establecidos los XML de intercambio se debe generar el programa cliente
el cual será el que se instale en las PC’s de los usuarios finales y de donde se
generarán las peticiones, este programa representa el nivel base de la pirámide.
• En estas vistas existirán validaciones, interacción con hardware y en general
lo necesario para generar los datos de las peticiones y para recibir la
respuesta a las mismas.
• Las vistas del nivel base generan los XML de petición para invocar el Web
Service que se encuentra en el nivel de interpretación, así también reciben
los XML de respuesta para generar el flujo correspondiente.
91
Establecer
protocolos de
comunicación y
conexión con
servicios de
terceros Análisis y
programación del
Web Service
Procedimientos y
transacciones para la
manipulación de la BD
Especificar Reglas a nivel
BD
Generar programas
cliente
Lenguaje y medio de
comunicación, XML
Flujo de Implementación del Patrón Piramidal
Figura 16, Flujo de Implementación del Patrón Piramidal.
92
CAPÍTULO 4, Implementando el Patrón Piramidal.
En este capítulo se detallará el proceso por el cual se lleva a cabo una implementación
del patrón piramidal, tomando en cuenta los elementos citados en el capítulo anterior.
Así también se pretende ilustrar esta implementación a través de la aplicación de cobros
bancarios antes mencionada.
93
Consideraciones Previas
Antes de comenzar debemos tomar en cuenta las herramientas y recursos necesarios
para el caso de estudio, como recordamos se llevará a cabo la implementación de Patrón
Piramidal en una aplicación de cobros bancarios. A continuación se enlistan las
herramientas que se utilizarán para este caso:
Nivel Base
Herramienta Versión Uso
C#.net 2008 Se utilizará este lenguaje para la creación del front
end principal en el cual se ingresarán datos
necesarios para iniciar una transacción.
Visual Basic 6.0 Se utilizará esta herramienta para la creación de
una DLL que contendrá toda la funcionalidad para
el cobro, encapsulada, así como la funcionalidad
para interactuar con dispositivos (PinPads).
Java Script Se utilizará este lenguaje para crear una interfaz
más que implemente las funcionalidades de la DLL
en un ambiente Web.
VB.net 2008 Se utilizará este lenguaje para crear una aplicación
móvil que pueda invocar el servicio de cobro desde
un teléfono con Windows Mobile.
WML/WMLS con Java. 1.6 Se implementará una aplicación front que corra
sobre terminales punto de venta.
XML Se utilizará para enviar cadenas el nivel de
interpretación con los datos de la venta.
Tabla 2, Herramientas del Nivel Base
Principalmente estas herramientas están orientadas a la explotación de los servicios
desde la vista del usuario, es decir son aquellas aplicaciones que permitirán a los usuarios
comenzar un ciclo de cobro y en general de solicitud a servicios.
94
Nivel de Interpretación
Herramienta Versión Uso
Java 1.6 Este lenguaje se utilizará para crear el Web Service
de interacción con el nivel de base y el nivel fuente.
Frameworks Spring 2.0 Se utilizará este frameworks como base de la
programación java para crear el web services
utilizando las ventajas que ofrece.
SOAP Se utilizará para establecer la comunicación del
Web Services.
ISO Estandar de mensajería que se utilizará para enviar
mensajes en cadenas hacia el nivel fuente.
XML Lenguaje que se utilizará para enviar y recibir
mensajes con el nivel base.
Oracle 9i Motor de base de datos en el que se almacenarán
los datos del resultado de las transacciones.
Apache Tomcat 5.5 Servidor de aplicaciones en el que se montará el
desarrollo del Web Service.
Tabla 3, Herramientas del Nivel de Interpretación
Las herramientas de este nivel, principalmente están orientadas a servir a las peticiones
que se originan de las vistas que se encuentran en el nivel base, como podemos observar
se utilizarán herramientas orientadas a los servicios y se tomarán ventajas del frameworks
de Spring para lograr mayor nivel de mantenimiento y explotación.
Nivel Fuente
Herramienta Versión Uso
Procesador de Transacciones Bancaras
N/A El procesador de transacciones bancarias es una
entidad que se encarga de comunicarse con los
bancos en busca de autorización o rechazo de las
transacciones, esta entidad no está controlada por
el proyecto.
Tabla 4, Herramientas del Nivel Fuente
95
Primer Paso, Especificar Reglas a Nivel Base de Datos
Tomando en cuenta el flujo mostrado en la figura 16, seguiremos los pasos
recomendados y se hará cita a la implementación en el caso de estudio.
• Especificar Reglas a Nivel Base de Datos.
Se deben especificar las reglas de negocio a nivel base de datos, así como establecer constrains y normalización de la misma.
El proyecto a nivel base de datos consta tanto de entidades transaccionales como no
transaccionales. Las entidades transaccionales son aquellas en las que se almacenan los
datos de las operaciones.
Las entidades no transaccionales son aquellas en las que se almacenan datos de
configuración de la aplicación, como roles, permisos, catálogos, etcétera. A continuación
se muestra el grupo de tablas tanto transaccionales como no transaccionales, en forma de
un Diagrama Entidad-Relación:
Figura 17, Agrupación de tablas transaccionales y no transaccionales
96
Definición de Elementos de la Base de Datos
Para la definición de las tablas se recomienda usar una nomenclatura en la que se
establezcan prefijos que indiquen a que grupo de tablas del proyecto pertenece cada una.
La intención es indicar los estándares de nomenclatura para Base de Datos, que se
deben utilizar en el desarrollo de aplicaciones y configuraciones técnicas de la plataforma
distribuida.
El objetivo del establecimiento de estándares dentro es homogeneizar la forma de
definición de las Bases de datos, así como las mejores prácticas para lograr altos niveles
de productividad y eficiencia de los recursos tecnológicos y humanos, reduciendo así el
esfuerzo requerido para integrar sistemas aplicativos e infraestructura, en balance con los
niveles de servicio y seguridad que los proyectos demandan.
Nombre de la Instancia
Nomenclatura: Baanepp[número]
En donde: B : Identificador fijo, señalando Base de Datos
aa : Identificador de la aplicación en 2 posiciones
n : Identificador del negocio (ver Tabla 1: Tabla de negocios)
e : Identificador del entorno (ver Tabla 2: Tabla de entornos)
pp : Identificador del país (ver Tabla 3: Tabla de países )
número : 1...9
Ejemplos: Instancias de producción en Venezuela de la aplicación con código LA:
BLABPVE1
Bases de Datos
Nomenclatura: Baanepp[número]
En donde: B : Identificador fijo, señalando Base de Datos
aa : Identificador de la aplicación en 2 posiciones
n : Identificador del negocio (ver Tabla 1: Tabla de negocios)
97
e : Identificador del entorno (ver Tabla 2: Tabla de entornos)
pp : Identificador del país (ver Tabla 3: Tabla de países )
número : 1...9
Ejemplos: Base de Datos de producción en Venezuela de la aplicación con código LA:
BLABPVE1
Tablespace
Nomenclatura: TS_ttt[numero] _[consecutivo]
En donde: TS : Identificador fijo, para indicar tablespace
ttt : Tipo de objeto alojado
DAT = Datos (tablas)
IND = Indices
TMP = Temporal
UNDO = Undo
numero : Número consecutivo en tres posiciones
consecutivo : Número consecutivo en dos posiciones en caso de tener
varios tablespaces asignados a una tabla (ejemplo: tabla particionada)
Ejemplo: Tablespaces de una tabla con 3 particiones: TS_DAT001_01, TS_DAT001_02, TS_DAT001_03
Tablespace de una tabla sin particiones: TS_DAT003
Tablas
Nomenclatura: Taa[numero]_mmm
En donde: T : Identificador fijo, para indicar tabla
aa : Identificador de la aplicación de 3 a 5 posiciones
[numero]: Número consecutivo en tres posiciones
mmm : Descripción mnemónica del contenido de la tabla (20 caracteres)
en singular.
98
Ejemplo: Tabla de sucursales de la aplicación LAR: TLA002_SUCURSAL
Columnas
Nomenclatura: pp_mmm
En donde: pp : Prefijo que indica el tipo de dato
st : status
id: identificadores
cd: códigos,claves
pw: password
fh: fechas
hm: hora
tm: timestamp
im : importe
nb : nombres, descripciones
nu : número
pc : porcentajes
tp : tipos
tx : textos
cc: credit card
mmm : Mnemónico de la columna (20 caracteres) en singular.
Ejemplos: Usaremos como ejemplo la tabla para un empleado.
Columna para indicar el estatus del usuario, que puede ser activo 1 o inactivo
0: st_empleado Columna para indicar la clave del usuario: cd_empleado Columna para indicar la fecha de nacimiento del usuario: fh_nacimiento Columna para indicar la hora de registro del usuario: hm_registro Columna para indicar la fecha y hora de alta del usuario: tm_alta Columna para indicar el salario del usuario: im_salario Columna para indicar el nombre del usuario: nb_nombre, nb_nombre2, nb_paterno, nb_materno
99
Columna para indicar el teléfono del usuario: nu_lada, nu_telefono Columna para indicar porcentaje de aguinaldo: pc_aguinaldo Columna para indicar el tipo de empleado: tp_empleado Columna para indicar la descripción de sus actividades: tx_actividades Columna para indicar la tarjeta de crédito: cc_
Vistas
Nomenclatura: Vaa[numero]_mmm
En donde: V : Identificador fijo, para indicar vista
aa : Identificador de la aplicación de 2 a 5 posiciones
[numero]: Número consecutivo en tres posiciones, igual a la tabla de la que
proviene en caso de ser solo una tabla
mmm : Descripción mnemónica del contenido de la vista (20 caracteres)
en singular.
Ejemplo: Vista de sucursales de la aplicación PBA: VPBA001_EMPLEADO
Índices
Nomenclatura: Iaannnt[numero]_mmm
En donde: I : Identificador fijo, para indicar índices
aa : Identificador de la aplicación de 2 a 5 posiciones
nnn :1..999 Número consecutivo de la tabla a la cual pertenece en 3
posiciones
t : - Guión bajo
[numero]: 1..9 Número consecutivo en 1 posición
mmm : Nemotecnico de la tabla a la cual pertenece (20 caracteres)
Ejemplo: Índice secundario de la tabla PBA001_SUCURSAL:
IPBA001S1_SUCURSAL Llave primaria de la tabla PBA001_SUCURSAL: IPBA001P1_SUCURSAL
100
Índice particionado del tipo local prefixed de la tabla PBA001_SUCURSAL:
IPBA001_1_SUCURSAL
Llaves foráneas
Nomenclatura: Rpppddd[numero] Se llamará igual que su Regla de Integridad Referencial
En donde: R : Identificador fijo, para indicar regla de integridad referencial
ppp : Número consecutivo de la tabla padre.
ddd : Número consecutivo de la tabla hijo
[numero]: Número consecutivo en una posición
Ejemplo: Llave foránea de la tabla PBA001_SUCURSAL (tabla padre) y PBA021_PLANTILLA
(tabla hijo): R0010211
Cluster
Nomenclatura: ct_pppddd
En donde: ct : Identificador fijo, para indicar que es cluster.
ppp : Nemónico a 3 primeras posiciones de la tabla padre.
ddd : Nemónico a 3 primeras posiciones de la tabla hijo. Ejemplo:
Cluster de la tabla PBA001_SUCURSAL y PBA021_PLANTILLA:
CT_SUCPLA
Trigger
Nomenclatura: tgttt_ppp
En donde: tg : Identificador fijo, para indicar que es un trigger
ttt : Identificador de evento que dispara el trigger
101
INS: insert
DEL: delete
UPD: update
ppp : Nemónico de la tabla padre.
Ejemplo: Trigger de inserción de la tabla PBA001_SUCURSAL: TGINS_SUCURSAL
Procedimiento
Nomenclatura: sp_ppp
En donde: sp : Identificador fijo, para indicar que es un procedimiento almacenado
ppp : Nemónico de hasta 20 posiciones
Ejemplo: Procedimiento de selecciones de campañas: SP_SELECC_CAMPANIA
Función
Nomenclatura: fn_ppp
En donde: fn : Identificador fijo, para indicar que es una función
ppp : Nemónico de hasta 20 posiciones
Ejemplo: Función de selecciones de campañas: FC_SELECC_CAMPANIA
Secuencia
Nomenclatura: sq_ppp
En donde:
sq : Identificador fijo, para indicar que es una secuencia
ppp : Nemónico de hasta 20 posiciones de la secuencia
102
Ejemplo: Secuencia de campañas: SQ_CAMPANIA (si se genera consecutivo para la
tabla PBA013_CAMP_PROMO).
Ligas de base de datos (database link)
Nomenclatura: ln_bbb
En donde: ln : Identificador fijo, para indicar que es un database link
bbb : Nombre de la base de datos o servicio
Ejemplo: Liga hacia un ambiente de desarrollo: LN_DEVMX1
Sinónimo
Nomenclatura: Nombre de la tabla o vista original.
Ejemplo: Sinónimo público de la tabla PBA013_CAMP_PROMO será
PBA013_CAMP_PROMO.
Paquete
Nomenclatura: pg_ppp
En donde: pg : Identificador fijo, para indicar que es un paquete (package)
ppp : Nemónico de hasta 20 posiciones
Ejemplo: Paquete de selecciones de campañas: PG_SELECC_CAMPANIA
Usuario
Nomenclatura: Usr Prefijo fijo ppp Nombre de la aplicación
103
Ejemplo: Base de Datos de Aplicación pruebas: Usrpbas
Role
Nomenclatura: rl_ppp
En donde: rl : Identificador fijo, para indicar que es un role.
ppp : Nemónico de hasta 20 posiciones
Ejemplo: Role para usuario de seguridad de datos: RL_SEGURIDAD
Profile
Nomenclatura: pf_ppp
En donde: pf : Identificador fijo, para indicar que es un profile
ppp : Nemónico de hasta 20 posiciones
Ejemplo: Role para usuario de seguridad de datos: PF_SEGURIDAD
104
Segundo Paso, Manipulación de la Base de Datos
Una vez definida toda la estructura de la Base de Datos es momento de implementar
procedimientos, funciones, transacciones, disparadores que permitan la manipulación de
los datos.
El objetivo de implementar directamente en la base de datos parte de la lógica del negocio
es para evitar recompilar el Web Service al momento de hacer algún cambio en alguna
consulta o el algún cambio de la estructura de la base de datos, como por ejemplo
agregar o eliminar un campo, una tabla, etcétera.
También es para explotar las bondades de las transacciones utilizando sus elementos
como el Commit y Rollback en caso de algún problema y así evitar problemas de
inconsistencia en los datos.
Se sugiere generar procedimientos almacenados y transacciones para la manipulación de la base de datos y no agregar querys al código de la aplicación.
A continuación se muestra la estructura de una función, la cual siempre devuelve como
resultado de consulta un valor booleano, en este caso se muestra esta función con el fin
de ejemplificar la forma propuesta para la manipulación de datos.
drop function if exists FInsertaEmpresa; CREATE FUNCTION FInsertaEmpresa(CD_GIRO int, CD_ESTATUS int, NB_EMPRESA varchar(500), TP_PERSONA varchar(1), NB_RFC varchar(30), NB_COMERCIAL varchar(500), NB_CALLE varchar(500), NB_EXTERIOR varchar(30), NB_INTERIOR varchar(30), CD_CP varchar(10), NB_COLONIA varchar(500), NB_DELEGACION varchar(500), NB_CIUDAD varchar(500), NB_ESTADO varchar(500), NB_LADA varchar(30), NB_TELEFONO varchar(30), FH_REGISTRO datetime, FH_MODIFICACION datetime, TX_AVISO varchar(500),
105
TX_LEYENDA_TIKET varchar(500), DIR_LOGO varchar(1000) ) RETURNS BOOL BEGIN DECLARE cdEmpresa INT; DECLARE Result Bool; SET Result = false; SELECT MAX(CD_EMPRESA) INTO cdEmpresa FROM a01_empresa; if (cdEmpresa < 1000 ) or (cdEmpresa = null ) then SET cdEmpresa = cdEmpresa + 1000; else SET cdEmpresa = cdEmpresa + 1; end if; if (cdEmpresa is not null) then INSERT INTO a01_empresa () VALUES (cdEmpresa,CD_GIRO,CD_ESTATUS,NB_EMPRESA, TP_PERSONA,NB_RFC,NB_COMERCIAL,NB_CALLE,NB_EXTERIOR,NB_INTERIOR, CD_CP,NB_COLONIA,NB_DELEGACION,NB_CIUDAD,NB_ESTADO,NB_LADA,NB_TELEFONO, FH_REGISTRO,FH_MODIFICACION,TX_AVISO,TX_LEYENDA_TIKET,DIR_LOGO); SET Result = TRUE; end if; RETURN Result; END; DELIMITER ;
En seguida se enlistan los procedimientos y funciones contenidos en la base de datos, así
como su definición.
Procedimiento/Función/Transacción Descripción
LoginUsuer (Usuario, Password, Empresa, Sucusal)
Devuelve un recordset con dos campos,
uno que indica un true o un false
dependiendo si el usuario es correcto o no
y otro con una descripción en caso de que
el usuario haya sido rechazado para saber
detalle del rechazo.
SaveTransaction (TP_Trasaccion, Referencia, Fecha, Hora, Empresa, Sucursal, Usuario)
Registra una transacción en la base de
datos en la tabla de transacciones.
GetReport (Usuario, Password, Empresa, Sucursal, Referencia, Fecha)
Devuelve un recordset con las
transacciones realizadas en la fecha
indicada y tomando en cuenta la referencia
como filtro opcional. Tabla 5, Descripción de Procedimientos
106
Tercer Paso, Análisis y Desarrollo del Web Service
Una vez establecida la estructura de la Base de Datos es pertinente generar el Web
Service que se implantará en el nivel de interpretación el cual fungirá como intérprete de
mensajes entre el nivel base y el nivel fuente.
Posteriormente es conveniente iniciar con el análisis y programación del Web Service que se instalará en el nivel de interpretación, en este Web Service se deben establecer reglas de negocio acorde a las necesidades.
A continuación se enlistaran las clases que contendrá el web services y se dará una
explicación de su funcionalidad.
Clase Descripción
XMLService Esta clase se encargará del manejo de los esquemas XML así
como de la construcción y validación de los mensajes XML
provenientes de los niveles fuente y base.
ISOService Esta clase será la encargada de construir el mensaje ISO 8583
que se envíe hacia el nivel fuente y de parcear y tratar el mensaje
ISO 8583 que el nivel fuente responda.
ValidateService Esta clase contendrá una serie de validaciones de reglas de
negocio como longitudes, estatus, tipos de operaciones, entre
otras.
SecurityService Esta clase se encargará de encriptar y desencriptar los mensajes
entre niveles.
DBService Esta clase se encargará de establecer un pool de conexión con la
base de datos así como la invocación de los procedimientos
almacenados, transacciones y funciones.
LogService Esta clase se encargará de guardar los eventos que sucedan
entre el flujo de la operación.
ComService Esta clase contendrá los métodos necesarios para establecer una
comunicación entre los niveles.
TransactionService Esta clase contendrá los métodos de las operaciones a realizar. Tabla 6, Descripción de Clases
107
En seguida se enlistan nuevamente las clases, pero ahora se incluyen sus métodos y una
breve descripción de estos:
• XMLServices:
Accesibilidad Método Descripción
+ ValidateSchema (String XML)
: String
Valida que el esquema de la operación a
realizar sea correcto.
+ GetDataXML (String Tag,
String XML) : String
Devuelve el valor de un tag contenido en
un XML.
+ DoXMLTrx (String Title,
ArrayList Dts) : String
Genera un XML que corresponde al tipo
de transacción a realizar recibe un string
con el título del esquema y un arraylist
con el contenido de los tags. Por ejemplo
en el arraylist un ítem seria “id_company,
0035”.
+ DoXMLResponse (ArrayList
Dts) : String
Genera el XML de respuesta de uns
transacción el cual se devolverá al nivel
base y recibe un arraylist con los valores
y nombre de los tags. Tabla 7, Descripción de los Métodos de la Clase XMLServices
• ISOServices
Accesibilidad Método Descripción
+ DoISOMessage (ArrayList
Dts) : String
Genera el mensaje ISO 8583 para enviar
al procesador que se encuentra en el
nivel fuente.
+ GetISOMessage () : String Obtiene el mensaje ISO 8583 que
responde el procesador. Tabla 8, Descripción de los Métodos de la Clase ISOServices
• ValidateService
Accesibilidad Método Descripción
+ DataValidateLength (String
TitleData, String Data) :
Devuelve true o false si la longitud del
campo es correcto o no.
108
Boolean
+ DataValidateContent (String
TitleData, String Data) :
Boolean
Devuelve true o false si el contenido del
campo es correcto o no.
Tabla 9, Descripción de los Métodos de la Clase ValidateService
• DBService
Accesibilidad Método Descripción
+ ExecuteNoQuery (String
TitleProcedure, ArrayList
Parameters) : Boolean
Ejecuta el procedimiento almacenado,
función o transacción con el título
asignado a la variable string y devuelve
un booleano que indica si la ejecución
fue exitosa.
+ ExecuteQuery (String
TitleProcedure, ArrayList
Parameters) : RecordSet
Devuelve el resultado de un
Procedimiento el cual da como resultado
una consulta, por ejemplo un reporte. Tabla 10, Descripción de los Métodos de la Clase DBService
• SecurityService
Accesibilidad Método Descripción
+ EncryptStringTripeDES
(String Data) : String
Encripta una cadena con el algorimo de
encripción TripleDES.
+ DecryptStringTripleDES
(String Data) : String
Desencripta una cadena con el
algoritmo TripleDES.
+ GenerateKey (String
FirstKey, String SecondKey)
Genera una llave con base a los
parámetros que se le setean y la
establece como llave de encripción.
+ HexConvert (String Data) :
String
Convierte la cadena resultante de una
encripción en caracteres hexadecimales
para que al momento que viajen no
surjan problemas de caracteres
extraños. Tabla 11, Descripción de los Métodos de la Clase SecurityService
109
• LogService
Accesibilidad Método Descripción
+ SaveTrace (String Trace) Guarda el contenido del String en el
archivo y directorio asignados para
almacenar logs
+ SetDirectory (String File) Establece el directorio en el cual se
guardaran los logs.
+ EnabledLog (Boolean Log) Recibe una bandera para indicar si se
guardará o no un log de la actividad de
las clases. Tabla 12, Descripción de los Métodos de la Clase LogService
• ComService
Accesibilidad Método Descripción
+ SendISO (String Method,
ArrayList Parameters) : String
Envía un mensaje ISO 8583 al Web
Service del procesador y devuelve una
cadena con la respuesta del Web
Service. Tabla 13, Descripción de los Métodos de la Clase ComServices
• TransactionService
Accesibilidad Método Descripción
+ ExecuteOperation (String
Transaction, String XML) :
String
Recibe el título y XML correspondientes
a una operación invocada desde el nivel
base por ejemplo una venta,
cancelación, etc, devuelve una cadena
encriptada que contiene el XML de
respuesta para los componentes del
nivel base. Tabla 14, Descripción de los Métodos de la Clase TransactionServices
110
Cuarto Paso, Protocolos de Comunicación y Conexión con servicios
En este paso se deberán establecer los medios de comunicación con los servicios de
terceros que se encuentran en el nivel fuente. En este caso será con el procesador de
cobros bancarios.
Protocolo de comunicación
Para este caso de estudio la comunicación con el servicio de terceros será utilizando
sockets java uno cliente y otro servidor. El socket cliente estará creado en el WebService
del nivel de interpretación y el socket servidor se encontrará en el nivel fuente.
Así mismo existirá un hilo que se encargará de monitorear la actividad entre los sockets y
tendrá la función de notificar en caso de que se caiga la comunicación entre estos.
Figura 17 Protocolo de Comunicación entre el nivel de interpretación y el nivel fuente
Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de
una red, un socket es un punto de comunicación por el cual un proceso puede emitir o
recibir información.
111
Los sockets son capaces de utilizar el protocolo de streams TCP (Transfer Control
Protocol) y el de datagramas UDP (User Datagram Protocol). Utilizan una serie de
primitivas para establecer el punto de comunicación, para conectarse a una máquina
remota en un determinado puerto que esté disponible, para escuchar en él, para leer o
escribir y publicar información en él, y finalmente para desconectarse (Marshall K.
McKusick, 2004).
Estándar ISO 8583, Conexión con el procesador bancario
Como se ha venido mencionando a lo largo del desarrollo de este caso de estudio, existe
un estándar diseñado única y exclusivamente para el manejo de mensajes de tipo
financieros para la autorización de cobros bancarios.
En este caso de estudio se utilizará este estándar para la comunicación entre el nivel de
interpretación y el nivel fuente, como ya sabemos estos mensajes se transportarán a
través de sockets.
Figura 18, Pasó de mensajes IS0 8583 entre niveles de interpretación y fuente.
112
ISO 8583 es un estándar para Transacciones Financieras con Mensajes originados en
una tarjeta bancaria (ISO 8583-1:2003, 2007).
Es el estándar ISO se debe utilizar para sistemas que intercambian transacciones
electrónicas realizadas por poseedores de tarjetas de bancarias.
Una transacción basada en una tarjeta usualmente sale desde un dispositivo de compra,
tal como un POS o un cajero automático ATM, a través de una red (o redes) hacia un
sistema del emisor de la tarjeta para obtener una autorización en función de la cuenta del
titular de la tarjeta.
La transacción contiene información que se obtiene de la tarjeta (ej. número de cuenta), la
terminal (ej. nro. de comercio), la transacción (ej. importe) en conjunto con otra
información que se puede generar o agregar dinámicamente por los sistemas
intervinientes.
El sistema emisor de la tarjeta podrá autorizar o rechazar la transacción, y genera un
mensaje de respuesta que debe ser devuelto a la terminal en un tiempo breve.
ISO 8583 define un formato de mensaje y un flujo de comunicación para que diferentes
sistemas puedan intercambiar estas transacciones.
La mayoría de las operaciones realizadas en ATM usan ISO 8583 en algunos puntos de la
cadena de comunicación, así como también las transacciones que realiza un cliente que
usa una tarjeta para hacer un pago en un local. En particular, todas las redes de tarjetas
basan sus transacciones en el estándar ISO 8583. Las transacciones incluyen compras,
extracciones, depósitos, reintegros, reversos, consultas de saldo, pagos y transferencias
entre cuentas. ISO 8583 también define mensajes entre sistemas para intercambios
seguros de claves, conciliación de totales y otros propósitos administrativos.
Aunque el ISO 8583 define un estándar común, no se usa normalmente en forma directa
por sistemas o redes. En lugar de eso cada red adapta el estándar para su propio uso con
campos adaptados a sus necesidades particulares.
113
La ubicación de los cambios en diferentes versiones del estándar varia, por ejemplo, los
elementos que definen la moneda (currency elements) de las versiones 1987 y 1993 no
se usan más en la versión 2003, lo que hace que la moneda sea un sub-elemento de
cualquier elemento monto. LA ISO 8583:2003 todavía tiene que obtener aceptación.
Un mensaje ISO 8583 consta de las siguientes partes:
• Message Type Indicator (MTI) - Indicador de Tipo de Mensaje
• Uno o más bitmaps, indicando que elementos están presentes en el mensaje
• Data elements, los campos del mensaje
Figura 19, El estándar ISO 8583
Consultada, http://blog.jotadeveloper.com/2009/01/25/conociendo-el-standard-iso8583/
Message Type Indicator (MTI): Este es un campo numérico de 4 dígitos que clasifica la
función de alto nivel del mensaje. Un MTI incluye la versión ISO 8583, la clase (Message
Class), la función (Message Function) y el origen del mensaje (Message Origin).
Bitmaps - Mapas de Bits: Dentro del ISO 8583, un mapa de bit es un campo o
subcampo dentro de un mensaje que indica que otros elementos (campos o subcampos)
se encuentran en el mensaje.
114
Un mensaje contendrá al menos un mapa de bits, llamado el Mapa de Bits Primario que
indica que campos (Data Elements) del 1 al 64 están presentes.
Puede existir un mapa de bits secundario, generalmente como elemento 1 que indica que
campos del 65 al 128 están presentes. De igual forma, un tercer bitmap puede usarse
para indicar la presencia o ausencia de los campos del 129 al 192, aunque esos campos
casi nunca se usan.
El mapa de bits se puede transmitir como un dato binario de 8 bytes, o como un campo de
16 caracteres hexadecimales 0-9, A-F en el set de caracteres ASCII o EBCDIC.
Bitmap Define la presencia de 4210001102C04804 Campos 2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62 7234054128C28805 Campos 2, 3, 4, 7, 11, 12, 14, 22, 24, 26, 32, 35, 37, 41, 42, 47, 49, 53, 62, 64 ,100 (Bitmap
secundario requerido para mostrar la presencia del campo - 100) 8000000000000001 Campos 1, 64 0000000000000003 (Bitmap secundario)
Campos 127, 128
Tabla 15, BitMap de un mensaje ISO 8583
Explicación del Bitmap (8 bytes, Bitmap Primario = 64 Bit) campo 4210001102C04804
• BYTE1 : 01000010 = 42x (contando de izquierda, el segundo y el séptimo bit son 1,
indicando que los campos 2 y 7 están presentes)
• BYTE2 : 00010000 = 10x (campo 12 está presente)
• BYTE3 : 00000000 = 00x (no hay campos presentes)
• BYTE4 : 00010001 = 11x (campos 28 y 32 están presentes)
BYTE5 : 00000010 = 02x (campo 39 está presente)
• BYTE6 : 11000000 = C0x (campos 41 y 42 están presentes)
• BYTE7 : 01001000 = 48x (campos 50 y 53 están presentes)
• BYTE8 : 00000100 = 04x (campo 62 está presente)
0________10________20________30________40________50________60__64
1234567890123456789012345678901234567890123456789012345678901234 n-th bit
0100001000010000000000000001000100000010110000000100100000000100 bit map Campos presentes en un mensaje de longitud variable:
2-7-12-28-32-39-41-42-50-53-62
115
Data Elements - Campos de datos: Los Data Elements son los campos individuales que
llevan la información sustancial acerca de la transacción.
Hay 128 campos definidos en el estándar ISO8583:1987, y 192 en posteriores releases.
La revisión de 1993 agregó nuevas definiciones, eliminó algunas pero sin embargo dejó el
formato del mensaje sin cambios.
Mientras que cada Data Element tiene un significado y formato específico, el estándar
también incluye algunos campos de propósito general y algunos especiales para sistemas
o países, los cuales varían sustancialmente en su forma y uso de una implementación a
otra.
Cada campo se describe en un formato estándar que define el contenido permitido del
campo (numérico, binario, etc.) y el largo del campo (variable o fijo), de acuerdo a la
siguiente tabla:
Abreviatura Significado a Alfanumérico, incluyendo los espacios n Sólo valores numéricos s Sólo caracteres especiales an Alfanumérico as Sólo caracteres alfanuméricos y especiales ns Sólo caracteres numéricos y especiales ans Caracteres Alfabeticos, numericos y especiales b Información binaria z Tracks 2 y 3 code set como se define en la ISO 4909 y en ISO 7813.
Tabla 16, Definición de campos de los Data Elements.
Como observamos es todo un estándar que se debe cumplir para poder establecer
comunicación con el procesador de transacciones, a continuación se muestra un mensaje
ISO 8583, que el Web Service del nivel de interpretación debe enviar al procesador de
transacciones bancarias:
ISO0250000500200B238C40128A1801A000000001000019C0000000000066549820708183620891267123620070807083009012015215474848000327682=1007000019542547019542547 AIR CANADA VT 6M Q6 0277014001 00010101484016B003LNK1+0000000019 PRO100000000000064& 0000300064! C000026 687 001 0 1 ! Q600006 00060309000000000029 0000020 P0 009001001001012C1HOSTB24 1003800000000000000000000000000000000000000 Field -1='0200' Field 0='B238C40128A1801A'
116
Field 1='000000001000019C' Field 3='000000' Field 4='000006654982' Field 7='0708183620' Field 11='891267' Field 12='123620' Field 13='0708' Field 17='0708' Field 18='3009' Field 22='012' Field 32='5' Field 35='e4848000327682=1007' Field 37='000019542547' Field 41='019542547 ' Field 43='AIR CANADA VT 6M Q6 ' Field 48='7014001 00010101' Field 49='484' Field 60='B003LNK1+0000000' Field 61=' PRO100000000000' Field 63='& 0000300064! C000026 687 001 0 1 ! Q600006 000603' Field 100='000000000' Field 120=' 0000' Field 121=' P0 ' Field 124='001001001' Field 125='C1HOSTB24 10' Field 126='00000000000000000000000000000000000000'
La comunicación ISO 8583 es obligatoria para toda aquella entidad que desee incorporar
a sus procesos de negocio el envío electrónico de transacciones bancarias, ya sean
procesadores, gateways, cajeros automáticos, etc.
El estándar ISO 8583, sería el cuarto paso de este caso de estudio de implementación del
patrón piramidal.
117
Quinto paso, Lenguaje y medio de comunicación entre el nivel base e
interpretación
En estos momentos ya tenemos desarrollado un Web Service que se encuentra en el
nivel de interpretación así como su comunicación con el nivel fuente, en estos momentos
toca desarrollar un lenguaje y medio de comunicación entre los niveles base y de
interpretación.
Como se ha venido mencionando, es recomendable establecer un lenguaje estándar que
se pueda ser interpretado por casi cualquier lenguaje de programación.
Para este caso de estudio se recomienda utilizar esquemas XSD para establecer la
tipología de los datos y el XML para intercambiar información respetando siempre los
esquemas.
Esquemas XSD como Lenguaje de Interpretación
Los esquemas XSD son un vocabulario para expresar las reglas de los datos que se
utilizarán y sirve de referencia para validar los datos que aparecerán en un XML (Priscilla
Walmsley, 2001), especifica la estructura de la instancia del documento XML (El elemento
está formado por elementos, y estos a su vez por otros elementos, etc.). Los esquemas
XSD tienen muchos beneficios, los cuales se enlistan a continuación:
• El esquema XSD sirve para definir la correcta estructura de los elementos del
documento XML.
• Define los elementos que pueden aparecer en el documento XML.
• Define los atributos de los elementos que pueden aparecer en el documento XML.
• Define qué elementos son hijos de los elementos principales del documento XML.
• Define la secuencia en la cual los hijos de los elementos pueden aparecer en el
documento XML.
• Define el número de hijos de los elementos.
• Define cuando un elemento es vacío o puede incluir texto.
• Define el tipo de datos para los elementos y sus atributos.
118
• Define los valores predeterminados para algunos elementos y atributos.
Si el documento XML no concuerda con la estructura definida del archivo XSD, entonces
el documento XML estará erróneo.
Los XSD se utilizan para validar mucho sobre la estructura de los XML, a continuación se
enlistan varios de sus usos:
• Validar el contenido de un documento XML.
• Determinar que el documento XML es una instancia válida del vocabulario
(gramática o reglas), expresada por el esquema XSD.
• Define los elementos que pueden aparecer dentro de un documento XML y los
atributos que pueden ser asociados con un elemento.
• Define si un elemento se encuentra vacío o puede incluir texto.
• Define el valor de defecto de un atributo.
• Define los elementos que pueden contener elementos hijo.
• Define la secuencia de los elemento hijo, que aparecen en un elemento.
• Define el número de elementos hijo.
Atributos
Los atributos son similares a los elementos, si bien un atributo ha de ser de un tipo simple
y tiene declararse justo antes de cerrar la etiqueta xsd:complexType.
A diferencia de los elementos, los atributos pueden aparecer en cualquier orden y no
pueden incluir otros elementos (al ser de tipos simples). No obstante, su característica
más interesante es que pueden ser opcionales y se les puede asignar un valor por
defecto:
<xsd:attribute name="rebate" type="xsd:decimal" />
El atributo use de xsd:attribute puede utilizarse para especificar si la presencia del atributo
es esencial ("required"), opcional ("optional") o incluso si está prohibida ("prohibited"),
aunque esta última opción no resulta especialmente útil.
119
Ejemplo de un esquema XSD
El siguiente ejemplo muestra un sencillo esquema XML que podría ser útil para gestionar
los productos existentes en un almacén:
<?xml version="1.0" encoding="utf-8"?> <xsd:schema id="stock" xmlns:xsd="http://www.w3c.org/2001/XMLSchema" targetNamespace="http://elvex.ugr.es/stock.xsd"> <xsd:complexType> <xsd:sequence> <xsd:element name="ID" type="xsd:unsignedInt" /> <xsd:element name="description" type="xsd:string" /> <xsd:element name="price" type="xsd:decimal" /> <xsd:element name="quantity" type="xsd:integer" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
La etiqueta xsd:schema del documento XML anterior está definida en el estándar XSD y
es la que nos permite definir esquemas de acuerdo con el estándar del W3C (David C.
Fallside, 2004). El atributo targetNamespace nos permite asociar el esquema al espacio
de nombres indicado (para diferenciarlo de otros esquemas stock).
La etiqueta xsd:complexType nos permite definir tipos de forma similar a como se
especifican los tipos definidos por el usuario en un lenguaje de programación, indicando
los elementos correspondientes a cada dato almacenado acerca de los productos de
nuestro almacén, su identificador y su tipo.
Los elementos se utilizan para especificar las etiquetas válidas en un documento XML
(name) y su tipo (type), tal como aparece en el ejemplo anterior. Además, el orden en que
aparecen los elementos en el esquema XML determina el orden en que han de aparecen
dentro de un documento XML que se ajuste al esquema.
Las facetas forman parte de la definición de elementos y atributos de un esquema XML y
nos permiten especificar restricciones adicionales sobre los datos que pueden aparecer
en un documento XML válido.
120
Notación XSD para el nivel de interpretación
Para el nivel de interpretación se utilizarán esquemas XSD con el fin de garantizar que
todas aquellas peticiones que provengan del nivel base cumplan con ciertas reglas de
formato.
En este caso el nivel de interpretación contendrá cuatro esquemas que representarán las
funcionalidades que existen en el nivel base a las que tendrán alcance los usuarios, los
esquemas representan las siguientes funcionalidades:
• Solicitud de Cobro bancario.
• Solicitud de Cancelación de un cobro antes realizado.
• Reimpresión de un voucher.
• Consulta de transacciones.
Los XSD para este nivel estarán subdivididos por dos elementos fundamentales, uno que
contendrá datos del comercio y otro que contendrá datos específicos de la funcionalidad o
transacción a realizar.
Figura 20, elemento business de los esquemas del nivel de interpretación
El elemento “business”, contiene la información necesaria para llevar a cabo las primeras
validaciones del negocio, como privilegios, montos autorizados, etc.
Hablando a nivel clases del Web Service, el elemento “business” se somente a las
validaciones de la clase ValidateService para verificar si la empresa, usuario, password,
121
sucursal son correctos, también para verificar si este usuario tiene permisos para llevar a
cabo esta operación, entre otras validaciones.
<xs:complexType name="business"> <xs:annotation> <xs:documentation>business identification</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="id_company"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="4"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="id_branch"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="10"/> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="country"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="MEX"/> <xs:enumeration value="USA"/> <xs:enumeration value="GBR"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="user"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="8"/> <xs:maxLength value="20"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="pwd"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="40"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType>
En este tag se tienen los elementos que utilizará el web service para la identificación de
los comercios que generen peticiones, a continuación se explican los elementos
contenidos en el tag “business”.
122
Elemento Características
id_company • Tipo dato: String
• Longitud máxima: 4 posiciones
• Naturaleza: Obligatorio
• Aplica a Operaciones: Todas
• Valor Fijo: Número de Comercio.
id_branch • Tipo dato: String
• Longitud máxima: 10 posiciones
• Naturaleza: Obligatorio
• Aplica a Operaciones: Todas
• Valor Fijo: Número de unidad de
negocio (Por ejemplo: sucursal).
country • Tipo dato: String
• Longitud máxima: 3 posiciones
• Naturaleza: Obligatorio
• Aplica a Operaciones: Todas
• Valor: País desde donde se envía la
solicitud de cargo.
user • Tipo dato: String
• Longitud máxima: 10 posiciones
• Naturaleza: Obligatorio
• Aplica a Operaciones: Todas
• Valor: Identificador de usuario a
nombre del quien se realiza el cargo.
pwd • Tipo dato: String
• Longitud máxima: 15 posiciones
• Naturaleza: Obligatorio
• Aplica a Operaciones: Todas
• Valor: Contraseña asociada al
usuario. Tabla 17, elementos del tag business
123
El segundo elemento (“transacction”) contendrá información más específica de la
operativa a realizar, y es variable de acuerdo a dicha operativa.
Solicitud de Cobro bancario
Esta función permite al negocio realizar solicitudes de cargo con presencia de tarjeta;
aplica para todo tipo de Comercio que tiene ventas de mostrador. Para realizar una
solicitud de cargo con tarjeta, la herramienta de ventas del Comercio genera una
transacción asociada a una referencia, importe, y forma de pago.
En seguida se muestra el esquema XSD de una solicitud de cobro que disparará alguna
de las interfaces contenidas en el nivel base, utilizando software Altova XML Spy.
Figura 21, Esquema XSD para la operativa de cobros bancarios
124
Como es notable el esquema esta subdivido en de forma jerárquica en dos elementos,
uno que contiene datos del comercio que da origen a la petición y otro que contiene los
datos de la operación dichos con los cuales se generará el mensaje ISO 8583.
A continuación se muestra esta funcionalidad a forma de esquema con el fin de denotar
las reglas de formato que se establecen en el nivel de interpretación y que toda interfaz
del nivel base debe cumplir, para que su petición sea aceptada y procesada en forma
correcta.
<xs:element name="VMCAMEXB"> <xs:annotation> <xs:documentation> </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:complexType name="business"> <xs:annotation> <xs:documentation>business identification</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="id_company"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="4"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="id_branch"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="10"/> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="country"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="MEX"/> <xs:enumeration value="USA"/> <xs:enumeration value="GBR"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="user"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="8"/> <xs:maxLength value="20"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="pwd"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="40"/>
125
</xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="transactionb"> <xs:annotation> <xs:documentation>Transaction Banda</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="merchant"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="5"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="reference"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="30"/> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="tp_operation"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="1"/> <xs:enumeration value="2"/> <xs:enumeration value="3"/> <xs:enumeration value="4"/> <xs:enumeration value="5"/> <xs:enumeration value="6"/> <xs:enumeration value="7"/> <xs:enumeration value="8"/> <xs:enumeration value="9"/> <xs:enumeration value="10"/> <xs:enumeration value="11"/> <xs:enumeration value="12"/> <xs:enumeration value="13"/> <xs:enumeration value="14"/> <xs:enumeration value="15"/> <xs:enumeration value="16"/> <xs:enumeration value="17"/> <xs:enumeration value="18"/> <xs:enumeration value="19"/> <xs:enumeration value="20"/> <xs:enumeration value="21"/> <xs:enumeration value="22"/> <xs:enumeration value="23"/> <xs:enumeration value="24"/> <xs:enumeration value="25"/> <xs:enumeration value="26"/> <xs:enumeration value="27"/> <xs:enumeration value="28"/> <xs:enumeration value="29"/> <xs:enumeration value="30"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="creditcard"> <xs:complexType>
126
<xs:sequence> <xs:element name="crypto"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> <xs:enumeration value="2"/> <xs:enumeration value="3"/> <xs:enumeration value="4"/> <xs:enumeration value="5"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="type"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="V/MC"/> <xs:enumeration value="AMEX"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="tracks"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="1000"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="amount" type="xs:decimal"/> <xs:element name="currency"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="MXN"/> <xs:enumeration value="USD"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="usrtransacction" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="30"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:sequence> </xs:complexType> </xs:element>
Como es notorio en el tag “transacction”, se definen los datos que se generan en el
momento de una operación de cobro, a continuación se explican los elementos del tag
“transacction”.
127
Los siguientes son los parámetros utilizados en las funciones de cobro, su utilización
depende si se trata de una transacción con las variantes de con Tarjeta Presente.
Estos parámetros indican detalle de la transacción y muchos de ellos serán tomados por
la clase ISOService, para generar el mensaje ISO 8583 que será enviado al procesador
que se encuentra en el nivel fuente.
Parámetro Naturaleza Descripción
amount Obligatorio Cantidad a cobrar.
crypto Depende
de la
operación
Bandera que indica el nivel de encripción para el
número de la tarjeta.
0 =no está encriptado
1=esta encriptado solo el número de la tarjeta
2=toda la información del track está encriptada
currency Obligatorio Tipo de moneda.
merchant Obligatorio Referencia del número de afiliación del
Comercio.
reference Obligatorio Número referencia de la transacción.
tp_operation Obligatorio Indica el escenario que se encuentra en el nivel
base del cual proviene la petición.
usrtransacction Opcional Código de usuario por transacción.
tracks Obligatorio Contiene la información que se lee de la banda
o del chip, para el caso de la banda se obtienen
dos (track 1 y track 2), para el caso del chip solo
se obtiene el track2, de cualquier forma estos
deben ir concatenados y encriptados con
TripleDES.
type Obligatorio Tipo de tarjeta Visa, MasterCard o American
Express. Tabla 18, Elementos del tag “transacction” de una solicitud de cobro
En seguida se muestra un ejemplo que cumple con el esquema XSD propuesto en el nivel
de interpretación, para la realización de un cobro bancario, con presencia de tarjeta.
128
//VENTA BANDA <?xml version="1.0" encoding="UTF-8" ?> <VMCAMEXB> <business> <id_company>0035</id_company> <id_branch>700</id_branch> <country>MEX</country> <user>0035RRMI0</user> <pwd>11AEA0D1F22CDB30FE</pwd> </business> <transacction> <merchant>00127</merchant> <reference>54D77</reference> <tp_operation>9</tp_operation> <creditcard> <crypto>2</crypto> <type>V/MC</type> <tracks>04A1A8D19449A648FB7F4F308E67A79322DDE39BFB4AC08377 244A4B6ADAC85607AD345C46227312F2</tracks> </creditcard> <amount>1.20</amount> <currency>MXN</currency> </transacction> </VMCAMEXB>
Solicitud de cancelación de un Cobro
Otra de las funcionalidades a las cuales tendrán acceso los usuarios de las interfaces o
escenarios que se encuentren en el nivel base, será la cancelación de una transacción
bancaria ya realizada con anterioridad, para lo cual también se han de establecer
esquemas y atributos necesarios para ejecutar esta operación.
Esta función permite al Comercio cancelar una transacción que se haya realizado durante
el día.
Como dato adicional podemos decir que esta funcionalidad sólo podrá realizarse antes del
horario de corte bancario (usualmente a las 11:00 p.m.), ya que posteriormente, tendrá
que realizarse una devolución administrativa.
A continuación se muestra la figura del esquema que se debe cumplir para originar una
solicitud de cancelación de un cobro bancario.
129
Figura 22, Esquema para la cancelación de un cobro
Como podemos observar este esquema al igual que el del cobro, cuenta con dos tags
principales, que son “business” y “transacction”, el tag “business” es prácticamente el
mismo, el cual como ya se había mencionado contiene los datos necesarios para la
identificación del comercio que origina la petición.
Por su parte el tag “transacction”, contiene información específica de la operación, a
continuación se describen los elementos de este tag.
Parámetro Naturaleza Descripción
amount Obligatorio Cantidad a cobrar.
crypto Depende
de la
operación
Bandera que indica el nivel de encripción .
130
usrtransacction Opcional Código de usuario por transacción.
no_operacion Depende
de la
operación
Número asignado a la operación original que se
desea cancelar.
auth Obigatorio Número de autorización de la operación, se
envía para transacciones como cancelación,
venta forzada, reverso, etc. Tabla 19, Elementos del tag “transacction” de una cancelación
Ejemplo de un XML que cumple con el esquema expuesto para la cancelación de un
cobro bancario:
//CANCELACION <?xml version="1.0" encoding="UTF-8" ?> <VMCAMEXMCANCELACION> <business> <id_company>0002</id_company> <id_branch>8710</id_branch> <country>MEX</country> <user>0002PEOJ</user> <pwd>11AEA3D6F03BD933FF</pwd> </business> <transacction> <amount>.01</amount> <no_operacion>123456789</no_operacion> <auth>123456</auth> <usrtransacction>USRTRX01</usrtransacction> <crypto>2</crypto> <version>dllcpintegra 4.1.6</version> </transacction> </VMCAMEXMCANCELACION>
Solicitud de Reimpresión
Esta función permite al Comercio re-imprimir el voucher de una transacción, de igual
forma el nivel de interpretación debe contener el esquema que de formato a las peticiones
que se originen en el nivel base.
El esquema de igual forma contiene tres tags principales, uno que es la identificación del
comercio que origina la petición (business) y otros que contienen información específica
de la operación.
131
Es importante señalar que esta funcionalidad a diferencia del cobro y cancelación, no
requiere ir al nivel fuente, ya que en este caso la información que requiere la petición
puede extraerse de la base de datos que se encuentra en el nivel de interpretación.
A continuación se muestra el esquema que se debe cumplir para originar una solicitud
correcta de una reimpresión de un voucher.
Figura 23, Esquema para la reimpresión de un voucher
Parámetro Naturaleza Descripción
crypto Depende
de la
operación
Bandera que indica el nivel de encripción.
no_operacion Depende
de la
operación
Número asignado a la operación original que se
desea cancelar.
Tabla 20, tags complementarios de una reimpresión
//REIMPRESION <?xml version="1.0" encoding="UTF-8" ?> <REPRINTVOUCHER> <business> <id_company>0035</id_company> <id_branch>700</id_branch> <country>MEX</country> <user>0035GPEA0</user>
132
<pwd>11AEA0D1E72ED338FE</pwd> </business> <no_operacion>000012758</no_operacion> <crypto>2</crypto> </REPRINTVOUCHER>
Solicitud de Consulta de Transacciones
Esta función permite al Comercio realizar una consulta de las operaciones que ha
realizado con una referencia o fecha específica.
La funcionalidad es útil cuando el Comercio manda datos únicos en este campo, como
número de cliente, número de factura, número de orden, número de póliza, número de
suscriptor, etc. Se pueden consultar sólo una o todas las operaciones del día.
De la misma forma se debe cumplir con un esquema similar a los anteriores con datos
tanto de identificación como específicos de la operación.
A diferencia de los anteriores esquemas el de consulta devuelve al nivel base un XML con
el resultado de un recodset.
<transacciones> <transaccion> <nu_operaion></nu_operaion> <cd_usuario></cd_usuario> <cd_empresa></cd_empresa> <nu_sucursal></nu_sucursal> <nu_afiliacion></nu_afiliacion> <nb_referencia> </nb_referencia> <cc_nombre><cc_nombre /> <cc_num></cc_num> <cc_tp></cc_tp> <nu_importe></nu_importe> <cd_tipopago></cd_tipopago> <cd_tipocobro></cd_tipocobro> <cd_instrumento></cd_instrumento> <nb_response></nb_response> <nu_auth></nu_auth> <fh_registro></fh_registro> <fh_bank></fh_bank> <cd_usrtransaccion></cd_usrtransaccion> <tp_operacion></tp_operacion> <nb_currency></nb_currency> </transaccion></transacciones>
133
Sexto Paso, Generar Programas Cliente
Una vez establecidos los XML de intercambio se debe generar el programa cliente el cual será el que se instale en las PC’s de los usuarios finales y de donde se generarán las peticiones, este programa representa el nivel base de la pirámide.
Este paso es en donde se establecen los componentes que conformarán el nivel base de
la pirámide, es decir, de donde se generarán las peticiones.
Los componentes de este nivel deben cumplir con las condiciones de comunicación, tanto
de mensajería como de flujo que establece el nivel de interpretación.
En este nivel como se ha mencionado se recomienda generar componentes que incluyan
toda la interacción con el nivel de interpretación y posteriormente a las vistas crearles una
referencia de estos componentes.
Figura 24, Referencia a componentes
Para este caso de estudio se generará un componentes de tipo COM Object (DLL’s) y
bibliotecas Java (JAR’s), con el fin de que este contenga toda la funcionalidad de
interacción con el Web Service que se encuentra en el nivel de interpretación, estos
objetos deben ser capaz de crear los mensajes XML y de enviarlos al nivel de
interpretación así como recibir la respuesta y procesarla de manera correcta, con el fin de
evitar especializar a las interfaces y que de cara a estas el manejo e interacción con los
servicios se quede a nivel de una llamada a un objeto o referencia.
134
Creando Objetos para interacción con el nivel de interpretación
Componente Activex DLL
Un componente es cualquier software compatible con Automatización, por lo que puede
usarse mediante programación en una aplicación personalizada. Incluye controles
ActiveX, servidores de Automatización basados en Visual Basic y servidores de
Automatización basados en Visual C.
La automatización es una tecnología que permite que las aplicaciones proporcionen
objetos de una forma coherente a otras aplicaciones, herramientas de programación y
lenguajes de macros.
Las siglas COM significan Component Object Model que traducido sería algo así como
modelo de objetos componentes. COM es el "modelo de objetos" fundamental sobre el
que se generan OLE (Object Linking and Embedding, Vinculación e incrustación de
objetos) y los controles ActiveX. COM permite que un objeto exponga su funcionalidad a
otros componentes y aloje aplicaciones. Define cómo el objeto se expone a sí mismo y
cómo funciona dicha exposición en procesos y en redes. Además, COM define el ciclo de
vida del objeto.
Los componentes COM son programas que permiten ser utilizados desde otro programas
mediante automatización. Por regla general, los componentes suelen ser bibliotecas
ActiveX (DLL), controles ActiveX (OCX) e incluso ejecutables ActiveX (EXE).
Una ventaja de los componentes COM es que la creación de uno de estos componentes
nos permite escribir un código que "posiblemente" nos servirá para usarlo en más de una
aplicación, además de que ese mismo componente podemos distribuirlo para que otros
programadores puedan usarlo.
Otra ventaja es que si en un futuro queremos hacer cambios en el código de ese
componente, sólo tendremos que distribuir esa biblioteca y no el resto de la aplicación,
incluso puede ser que ese componente se ejecute desde un servidor, con lo cual
simplemente actualizándolo en el servidor, el resto de las aplicaciones "cliente" que lo
utilicen estarán actualizados a la última versión.
135
En este caso de estudio las interfaces que funcionen sobre un sistema operativo Win32
deberán crear una referencia a una DLL, la cual como ya se habia mencionado contendrá
toda la funcionalidad necesaria.
La DLL llamada cpIntegracionEMV.dll debe ser compatible con interfaces de terminales
de punto de venta para las operaciones en las que se requiera la lectura de una tarjeta
bancaria.
El Control cpIntegracionEMV.dll será un componente ActiveX desarrollado en el
esquema de Microsoft “Component Object Model” y permitirá a las interfaces realizar
mediante sus métodos y propiedades, solicitudes de Autorización de Transacciones con
Tarjeta de Crédito y Débito.
El componente podrá ser utilizado en plataformas de desarrollo que soporten este tipo de
componentes (ActiveX dll) como .Net, Visual Basic, Visual C++, Delphi, Power Builder,
entre otros.
Para invocar las funcionalidades del Nivel de Interpretación es necesario integrar la DLL
(cpIntegracionEMV.dll) en las interfaces del Nivel Base. De forma tal que se haga una
instancia de la clase clsCpIntegracionEMV, utilizando el método y parámetros
correspondientes a la transacción que se desea realizar.
La DLL invocará al servicio con los datos de la transacción, con los que el Nivel de
Interpretación hace una solicitud de Autorización de Transacción al procesador que se
encuentra en el Nivel Fuente. El resultado de la Solicitud de Autorización es
proporcionada a la interfaz de acuerdo a las especificaciones de la DLL.
El Control cpIntegracionEMV.dll deberá realizar una conexión a través del protocolo de
HTTPS a el Web Service, por lo que es necesario que las computadoras cliente en las
que se instale la interfaz que utilice la DLL tenga habilitado el acceso a dicho servidor de
transacciones.
Cabe mencionar que el control requerirá realizar conexiones mediante algunas
bibliotecas, que fungirán como referencias o dependencias de este componente.
136
Otro punto importante que vale la pena mencionar es que este componente también
contendrá interacción con dispositivos lectores de tarjetas bancarias.
A continuación se detalla el flujo de operación de una transacción de cobro con presencia
de tarjeta bancaria, desde el componente DLL.
Este flujo que deberá ser programado en la aplicación del Nivel Base, para integrar de
manera efectiva la interacción con el Nivel de Interpretación con el control
cpIntegracionEMV.dll.
# Función Comentario 1 .dbgSetUrl URL al que se conectará la aplicación del Nivel Base con el Nivel de
Interpretación. .dbgSetReader Devuelve true cuando encuentra un lector válido y false cuando no hay
ningún lector conectado. 2 .dbgStartTxEMV Prepara a la DLL y establece la comunicación con el dispositivo de lectura
para iniciar el proceso de la transacción. 3 .chkCc_ExpMonth,
.chkCc_ExpYear,
.chkCc_Name,
.chkCc_Number.
Si la lectura es exitosa, los parámetros chkCc*, la aplicación podrá mostrar los datos correspondientes a la tarjeta leída.
4 .sndVentaDirectaEMV Una vez leída la tarjeta, se debe ejecutar esta función con sus parámetros correspondientes para enviar la transacción al Web Service del Nivel de Interpretación y ejecutar el cobro.
5 getCc_Name, getCc_Number, getCc_ExpMonth, getCc_ExpYear, getCc_Type, getTx_Amount, getTx_Reference, getRspCdResponse, getRspDsResponse, getRspCdError, getRspDsError, getRspAuth, getRspOperationNumber, getRspDsOperationType, . getRspDate, . getRspTime, getRspDsCompany, getRspDsAdress, getRspDsMerchant, getRspVoucher, getRspXML
En este paso las aplicaciones del nivel base deben ejecutar las funciones que traen el resultado de la transacción, principalmente la función getRspDsResponse la cual trae tres posibles valores: “aproved”, “denied” o “error”. Con base al resultado, se sabrá qué acciones tomar, por ejemplo: - Si la transacción fue aprobada la aplicación del Nivel Base podrá llamar a la función getRspVoucher para imprimir el vaucher resultante o la función getRspAuth para obtener el número de autorización asignado a la transacción. - Si la transacción ha sido rechazada se puede mandar un mensaje en pantalla de que la transacción se denegó. - En caso de que el resultado sea “error” puede mandar a llamar la función getRspDsError para saber el detalle del error o la función getRspCdError para saber el código del error generado por el Web Service.
6 dbgEndOperation Antes de salir de la aplicación, se debe ejecutar esta función para eliminar la conexión con el dispositivo de lectura.
Tabla 21, Flujo de Operación control Activex del Nivel Base
137
Con este flujo de operación las aplicaciones del Nivel Base podrán mostrar a los usuarios
el resultado de una petición de cobro bancario.
Se establecen parámetros de conexión
Se establce la URL de Web Service.dbgSetUrl
Se prepara el Lector de Tarjetas Bancarias
El display del PinPad indica que se deslice la tarjeta.dbgSetReader, .dbgStartTxEMV
Cuando el ciclo de lectura termina
Se obtienen los dato de la tarjeta
.chkCc_ExpMonth, .chkCc_ExpYear,
.chkCc_Name, .chkCc_Number.
Se utiliza la función para el envío de cobro con tarjeta
Se envía la solicitud de autorización.sndVentaDirectaEMV
Se analiza la respuesta de la solicitud
Aprobada, Declinada o ErrorgetRspDsResponse
Flujo de Operación
Figura 25, Flujo de Operación control Activex del Nivel Base
En seguida se detallaran cada una de las funciones que contendrá la DLL y que
corresponden a los esquemas que se encuentran en el Nivel de Interpretación.
Solicitud de Cobro bancario a Nivel Base con Activex
En seguida se mostrarán los esquemas en el que se detallan los parámetros que debe
recibir la DLL con los cuales internamente generará el mensaje XML para enviarlo al Nivel
de Interpretación, para cada uno de los métodos del Web Service.
138
La primer operativa a analizar es la de un cobro bancario esta función permitirá a la
aplicación realizar solicitudes de cargo con presencia de tarjeta; aplica para todo tipo de
comercio que tiene ventas de mostrador.
Para realizar una solicitud de cargo con tarjeta, la aplicación que invoque a la DLL deberá
generar una transacción asociada a una referencia, importe, y forma de pago.
Figura 26, Funciones de entrada en la DLL para generar un mensaje de cobro
139
Solicitud de cancelación de un Cobro a Nivel Base con Activex
Esta función permite a la aplicación del Nivel Base cancelar una transacción que se haya
realizado durante el día proporcionando el número de operación, la autorización e
importe.
La operación de cancelación puede ser interpretada como una devolución considerando
que se haga en el mismo momento del cobro.
Figura 27, Funciones de entrada en la DLL para generar un mensaje de cancelación
140
Solicitud de Reimpresión a Nivel Base con Activex
Esta función permite a la aplicación del Nivel Base reimprimir el voucher de una
transacción, para lo cual es necesario enviar el Número de Operación
(Tx_OperationNumber). La función getRspVoucher, devolverá una cadena con el voucher
listo para imprimir; la función getRspXML, devolverá el XML de los campos que componen
el voucher. En caso de que la aplicación del Nivel Base requiera extraer los datos que
contiene el voucher, deberá hacerlo de la función getRspXML.
Figura 28, Funciones de entrada en la DLL para generar un mensaje de reimpresión
141
Solicitud de Consulta de Transacciones a Nivel Base con Activex
Con esta función la aplicación del Nivel Base a través de la DLL, obtendrá detalle de las
transacciones que ha realizado hasta el momento parametrizando por número de
operación, referencia y fecha.
Las aplicaciones debe obtener el resultado del query ejecutado en el Nivel de
Interpretación a través de la función getRespXML en formato XML y con esto la
aplicación deberá ser capaz de procesar el resultado y mostrarlo al usuario o ejecutar
alguna operación propia de dicha aplicación.
Figura 29, Funciones de entrada en la DLL para generar un mensaje de consulta
142
Interfaces a las que aplica el control Activex
Como ya se ha mencionado un control Activex es un componente que puede ser
referenciado por diferentes lenguajes de programación siempre y cuando estos soporten
referencias a este tipo de controles.
Por ejemplo es posible integrar esta DLL en lenguajes como Visual Basic 6, Delphi, Visual
C#, Visual C++, Visual Basic .net, Javascript, VBScript, Visual Data Flex, entre muchos
otros. De hecho esta es la intención de crear un componente que encapsule la
funcionalidad de comunicación con el Nivel de Interpretación, tener las mismas funciones
sin importar la interfaz sobre la cual sea invocada.
Para este caso de estudio se tienen varias interfaces desde las cuales se pretende tener
acceso a esta funcionalidad, además de la posibilidad de que el comercio pueda integrar
a su propia interfaz estas funciones, una de estas interfaces es una aplicación de paquete
que contendrá pantallas para acceder a las funcionalidades y se podrá instalar en
cualquier computadora que contenga que cuente con un sistema operativo basado en
Win32 de de 32 bits, en seguida se muestra un ejemplo de una pantalla de esta interfaz.
Figura 30, Aplicación a 32bits del Nivel Base
143
Otra interfaz que contendrá esta funcionalidad será un dispositivo móvil basado en
Windows Mobile y contendrá de la misma forma una referencia a un componente que se
comunique con el Nivel de Interpretación, en seguida se muestra una pantalla ejemplo de
esta aplicación.
Figura 31, Aplicación basada en Mobile
Por otra parte con este modelo se pueden hacer llamadas al Nivel de Interpretación,
desde el Nivel Base, integrando la DLL en un ambiente Web, a través de un JavaScript, a
continuación se muestra el ejemplo de una pantalla que contendría la funcionalidad en un
ambiente Web.
Figura 32, Aplicación Web del Nivel Base
144
Con lo anterior se demuestra que con este modelo aplicado en el Nivel Base podemos
tener la posibilidad de integrar y masificar el acceso a las funcionalidades que se desean
explotar del Nivel Fuente.
Componente Java JAR
Los archivos JAR fueron principalmente pensados para los applets de Java con el fin de
empaquetar todos los componentes necesarios para su ejecución y es una abreviación de
Java Archive.
Un archivo JAR es una colección de clases Java compiladas y otros recursos que pueden
requerir las clases en tiempo de ejecución, un JAR permite la agrupación de los archivos y
recursos en un archivo que puede ser comprimido y es 100% compatible con archivos Zip.
Un JAR permite empaquetar las clases de un proyecto en un solo archivo y
posteriormente desde otra aplicación hacer una referencia a ese JAR con el fin de obtener
todas las funcionalidades que brinda.
En este caso de estudio, para poder trabajar con aplicaciones que no corran sobre Win32,
se eligió trabajar con archivos JAR, para las aplicaciones del Nivel Base basadas en Java.
La arquitectura JavaBeans está basada en modelos de componentes y programación
orientada a objetos. Los componentes son unidades de software reutilizables e
independientes, que pueden formar componentes compuestos, applets, aplicaciones y
servlets que puede ser utilizado visualmente por una herramientas de programación.
Los componentes JavaBean son conocidos como Beans. Los JavaBeans,
independientemente de su funcionalidad, se definen por las siguientes características.
Los Beans soportan introspección, que permite a una herramienta de programación
analizar cómo funcionan los Beans. Se adhieren a reglas específicas llamada Patrones de
Diseño para nombrar las características de los Beans. Una propiedad es un atributo de un
Bean que afecta a su apariencia. Por ejemplo, un botón puede tener las siguientes
propiedades: el tamaño, la posición, etc.
145
Las herramientas de programación realizan la introspección de un Bean para descubrir
sus propiedades y exponerlos para su manipulación. Las propiedades de un Bean pueden
examinarse y modificarse mediante métodos o funciones miembro, que acceden a dicha
propiedad, y pueden ser de dos tipos:
• Método get: lee el valor de la propiedad
• Método set: cambia el valor de la propiedad.
Conforme a la Programación Orientada a Objetos y la arquitectura JavaBeans, a
continuación se describe la estructura del componente Java JAR que formará parte de los
componentes del Nivel Base.
• Deben existir dos clases que representan los grupos de operativas.
• Cada clase debe contener métodos que son comparables con los pasos de la
transacción a realizar; es decir, representan la funcionalidad de la clase.
• Todos los Beans contarán con sus propios métodos get y set, para obtener y
asignar valores, respectivamente.
• Deben existir Beans de Operación, que soportan la operación de las transacciones.
• Deben existir Beans propios de cada operativa, los cuales almacenan datos propios
de cada operación.
Clases Métodos Beans de Operación Beans propios de cada operativa
Tarjeta Presente • datosTarjeta
• transacciona
• imprime
• cancela
• Receptor
• Transaccion
• Respuesta
VentaDirectaBanda
Administrativas • imprime
• Cancelación
• Reimpresión
• Consultas
• Cancelación
• Reimpresión
• Consultas
Cancelación
Reimpresión
Consultas
Tabla 22, Descripción de Clases
146
Descripción de Métodos de clases
Los métodos son los pasos o funciones que realizan las clases y todos ellos utilizan el
objeto BeanTransaccion. Este es el Bean principal, encargado de soportar otros Beans
necesarios para completar cualquier transacción disponible en el nivel.
Método E/S Descripción
datosTarjeta(BeanTransaccion) • Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza solo
en TarjetaPresente
Este método es el primer paso a seguir al ejecutar una operación con tarjeta presente ya que es el encargado de establecer comunicación con la terminal lectora de tarjetas asignada en el objeto beanTransaccion en su campo lector.
transacciona(BeanTransaccion) • Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza en
TarjetaPresente y TarjetaNoPresente
Este método es el encargado de tomar los datos de la empresa receptora y los datos de la tarjeta para realizar una transacción desde el nivel base.
imprime(BeanTransaccion) • Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza en
TarjetaPresente, TarjetaNoPresente y
• Administrativas
Este es el último paso de una transacción y puede o no ser ejecutado ya que su uso no afecta el resultado de la operación realizada.
cancela() • Parámetros: Ninguno • Devuelve: void • Clases: Se utiliza en
TarjetaPresente
Este método puede ser empleado de manera opcional e idealmente se debe de ejuctar después del método datosTarjeta.
Consultas (BeanTransaccion) • Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza en
Administrativas
Este método muestra las transacciones que se llevaron a cabo en un día en específico o con una referencia específica. Recibe un objeto Bean de tipo BeanConsultas que tiene asignado el díao referencia que se desea consultar, o ambas, el objeto BeanConsultas está dentro de BeanTransaccion.
Reimpresion (BeanTransaccion)
• Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza en
Administrativas
Este método sirve para obtener una copia del voucher de determinada transacción. Para hacer esto solo es necesario especificar el número de operación que deseemos reimprimir.
Cancelacion (BeanTransaccion) • Parámetros: objeto BeanTransaccion
• Devuelve: void • Clases: Se utiliza en
Administrativas
Recibe un objeto Bean de tipo BeanCancelacion que tiene asignado el número de operación que se desea cancelar y el número de autorización (auth), el objeto BeanCancelacion está dentro de BeanTransaccion.
Tabla 23, Descripción de Métodos de Clases
147
Descripción de Beans de operación
Como ya se habían mencionado en la tabla anterior, existirán tres tipos principales de
beans con lo que se operará este componente del nivel base, a continuación se
mencionan:
• BeanTransaccion que funciona como contenedor de los demás Beans de
operación.
• BeanReceptor que almacena los datos del comercio en el que se encuentra la
aplicación que integra al objeto Jar.
• BeanRespuesta que contiene el resultado de la operación que fue enviada a los
niveles posteriores.
Bean Descipción
beanTransaccion Este es el Bean principal y es el encargado de soportar otros Beans necesarios para completar cualquier operación desde el nivel base. El BeanTransacción guarda datos del Comercio a través de BeanReceptor y los resultados de la operación en BeanResultados y almacena un Bean propio de la operativa a ejecutar. Por ejemplo, si se va a realizar una Venta Directa Banda, se le asigna a BeanTransaccion un objeto de tipo BeanVentaDirectaBanda, a través de los métodos set del Bean.
beanReceptor Este Bean contiene la información relacionada al negocio, se deben llenar con datos propios del comercio. Contiene además datos generales que son compartidos por diferentes operativas.
beanRespuesta Al término de cualquier operación, el resultado es recibido en un objeto del tipo BeanRespuesta, esta sería la respuesta que viene desde el nivel fuente y ya se encuentra formateada para que la aplicación que integre el componente Jar pueda acceder a todos los datos.
Tabla 24, Descripción de Beans de Operación
Beans de Función
Estos Beans representan las funciones a las cuales se desea acceder, es decir son
aquellas las cuales tienen un esquema en el Nivel de Interpretación. Para acceder a estas
funciones el Jar debe generar un mensaje con un XML que con la información accedida a
a las propiedades de los beans, a continuación se describen los beans de función.
148
Funcionalidad Beans Descripción
Venta Directa Banda • Bean: BeanVentaDirectaBanda • Asignar a Bean Tipo: BeanTransaccion • Parámetros propios: Ninguno
Operación con presencia del cliente y de la tarjeta en el Comercio; los datos de la tarjeta son extraídos por algún dispositivo que lee la banda magnética de la tarjeta o del CHIP para las tarjetas que cuenten con él.
Cancelacion • Bean: BeanCancelacion • Asignar a Bean Tipo: BeanTransaccion • Parámetros propios: operationNumber, auth
Cancela la una transacción que se haya realizado con anterioridad en el comercio.
Reimpresion • Bean: BeanReimpresion • Asignar a Bean Tipo: BeanTransaccion • Parámetros propios: operationNumber
Permite reimprimir un voucher de una trasnacción.
Consultas • Bean: BeanConsultas • Asignar a Bean Tipo: BeanTransaccion • Parámetros propios: date
Esta función permite al Comercio realizar una consulta de las operaciones que ha realizado.
Tabla 25, Beans de Función
Interfaces a las que aplica el componente JAR.
Como podemos observar el JAR integra la posibilidad de explotar las funcionalidades de
los niveles posteriores pero a diferencia de la DLL será a través de aplicaciones hechas
en JAVA, como aplicaciones Web, Swing, Applets, Servlets e incluso otros Web Services.
La aplicación que explotará la funcionalidad del JAR estará basada en WML y WMLS para
terminales punto de venta (TPV).
Estas terminales son pensadas principalmente para comercios que no cuentan con una
computadora y mucho menos que no cuentan con acceso a internet, estas terminales
contienen su propio medio de conexión a través de GPRS de un chip de telefonía celular.
A continuación se muestra una figura que contiene el flujo y algunas pantallas para
acceder a la funcionalidad del Nivel de Interpretación desde una TPV.
Figura 33, Aplicación TPV Nivel Base
149
Resultados Obtenidos
Si recordamos la problemática de este caso de estudio podremos darnos cuenta que se
han obtenido resultados satisfactorios.
El problema nace por la necesidad de poder implementar la plataforma de La Aplicación de Cobros Bancarios en diferentes escenarios con el fin de poderlo masificar y utilizar desde diversos dispositivos, pero siempre cumpliendo con diferentes estándares de seguridad y resguardo de la información.
Como podemos darnos cuenta al final en seis pasos obtuvimos una pirámide con tres
niveles en el primero (Nivel Base) un par de componentes integrables (DLL y JAR) a
diferentes aplicaciones desarrolladas en distintos lenguajes de programación y que se
comunican con el Nivel de Interpretación a través de mensajes XML por medio de SOAP.
En el segundo nivel (Nivel de Interpretación) obtuvimos un Web Service y una base de
datos con diversas reglas de negocio que permiten garantizar la consistencia y
persistencia de los datos este Web Service se comunica con el Nivel Base de la misma
forma, a través de responder a las peticiones por medio de SOAP y con mensajes en XML
y que se comunica con el Nivel Fuente a través de sockets y con hilo de monitoreo,
enviando mensajes ISO 8583.
En el tercer nivel (Nivel Fuente), tenemos un procesador de transacciones bancarias que
se considera como una caja negra ya que no se tiene el control sobre el comportamiento
de este y que se comunica con el Nivel de Interpretación por medio de sockets y recibe y
contesta con mensajes de tipo ISO 8583.
Con esta implementación se permitió a la aplicación ser modificable e integrable en varios
puntos de venta sin importar la interfaz y lenguaje de programación de este y así desde el
punto de vista comercial se obtuvo una aplicación que se puede ofrecer a más clientes de
distintos tipos.
150
Conclusiones
El patrón piramidal es un conjunto de herramientas orientadas a la creación arquitectónica
de soluciones distribuidas, buscando siempre un punto genérico con el fin de hacer
genéricas a las soluciones como tal, y por lo tanto poder aplicarlas a diversos proyectos,
principalmente aquellos que pretendan masificar soluciones.
El patrón piramidal permite crear estructuras arquitectónicas basadas en tres Niveles
conformados en forma jerárquica. Cada Nivel cuenta con una funcionalidad en específico,
el Nivel Base que es el primer nivel de la pirámide y del que nacen las peticiones, el Nivel
de Interpretación él se segundo nivel de la pirámide y es el primero que recibe las
peticiones del Nivel Base y en el cual se hacen las validaciones de reglas de negocio y
manejo de bases de datos, por último se encuentra el Nivel Fuente el cual contiene
servicios de terceros y al cual finalmente llegan las peticiones para ser procesadas.
Cabe mencionar que durante el paso de los mensajes estos se van adaptando entre
niveles para poder literalmente “hablar” un mismo lenguaje.
Con el patrón piramidal no debe haber limitaciones de lenguajes de programación ya que
la comunicación entre los Niveles debe estar basada en protocolos de comunicación
estándar como SOAP y los mensajes pueden estar conformados por cadenas por ejemplo
XML lo cual también es estándar. Por este punto es posible utilizar diferentes lenguajes
entre los Niveles.
El patrón piramidal en consecuencia puede ser aplicado a soluciones basadas
principalmente en servicios. Por ejemplo se podría tener un sistema que despachara
tiempo aire, con la posibilidad de comprar tiempo aire desde diferentes dispositivos y mas
aun la empresa que decidiera vender ese tiempo aire pudiera tener control total de las
peticiones que le llegan.
Hablando en un sentido más amplio en la actualidad es posible conectarse con un Web
Service de las compañías de telefonía celular. Con esto podemos considerar como el
Nivel Fuente el Web Service de la compañía de telefónica celular, también es posible
151
generar un Web Service que explote el Web Service de la telefonía y es posible que es
mismo Web Service tenga acceso a una base de datos que se encuentre en su mismo
servidor y en la cual se puedan almacenar todas los datos asociados a la venta de tiempo
aire así como datos asociados a comercios que pretendan vender tiempo aire, finalmente
también es posible generar componentes que se comuniquen con el web service que
tiene el acceso a la base de datos y generar vistas que referencien a estos componentes.
Con lo anterior tenemos todos los elementos para generar mensajes de comunicación
entre los niveles, aplicar reglas de negocio y mejor aún podemos implementar una
aplicación que corra desde cualquier dispositivo y que llame al Web Service de acceso a
datos y no al Web Service de la compañía celular directamente.
Con esto es posible masificar esta solución y agregar la posibilidad a los comercios
asociados que puedan vender tiempo aire desde una aplicación ya existente que ellos
utilicen con solo implementar alguno de los componentes del Nivel Base o con una
aplicación propia del comercio que ofrezca el servicio, por ejemplo en un restaurante ya
cuentan con sistemas hechos a su medida que les ayudan a llevar un control de sus
órdenes y en general de su operación, entonces con esto es posible integrar a su sistema
un componente del Nivel Base y añadir a este mismo sistema la posibilidad de acceder a
la venta de tiempo Aire.
Figura 34, Patrón Piramidal de Venta de Tiempo Aire
152
Como es notable una característica y fin también de este patrón es la posibilidad de
integrar la solución a aplicaciones ya generadas por terceros añadiendo algún
componente del Nivel Base, inclusive comercialmente hablando una empresa que venda
un servicio bajo este patrón podrá tener acceso a mayor cantidad de clientes.
El patrón piramidal también pretende ayudar a generar soluciones propias de una
empresa con la posibilidad de aumentar el acceso a los servicios desde diferentes
dispositivos.
En resumen el patrón piramidal permite generar soluciones arquitectónicas fácilmente
integrables y flexibles para sistemas distribuidos.
Con el patrón arquitectónico piramidal se puede tener más control y registro de
actividades de los usuarios y permite principalmente masificar servicios propios y de
terceros.
153
Glosario
A A2A – Aplication to Aplication, es la forma de llamar a la arquitectura de comunicación
entre dos aplicaciones.
ADL - Lenguaje de Descripción Arquitectónica - Architecture Description Language), es un
enfoque lingüístico a la representación formal de una arquitectura.
ALTOVA XML SPY - Es un entorno de desarrollo XML, que proporciona intuitivas vistas y
potentes utilidades para modelar, editar, transformar y depurar tecnologías relacionadas
con XML de forma rápida y fácil. XMLSpy incluye un original diseñador gráfico de
esquemas XML, permitiendo diseñar y documentar complejos esquemas fácilmente.
ATM - Automated Teller Machine, Es una forma en de llamar a los cajeros automáticos
que se encuentran en los bancos.
C CORBA - Common Object Request Broker Architecture — arquitectura común de
intermediarios en peticiones a objetos
CSC - Card Security Code, es una característica de seguridad para tarjeta de crédito o
débito, con el fin de dar protección contra fraude, son los últimos tres dígitos de la parte
posterior de una tarjeta bancaria, también se conoce como CVV o CVC.
D
154
DLL - Una biblioteca de enlace dinámico es el término con el que se refiere a
los archivos con código ejecutable que se cargan bajo demanda de un programa por parte
del sistema operativo.
F Framework - Se refieren a dominios o clases de problemas específicos
G GoF - Design Patterns: Elements of Reusable Object-Oriented Software
Gateway - Un gateway (puerta de enlace) es un dispositivo, con frecuencia un ordenador,
que permite interconectar redes con protocolos y arquitecturas diferentes a todos los
niveles de comunicación. Su propósito es traducir la información del protocolo utilizado en
una red al protocolo usado en la red de destino.
I ISO 8583 - Standard para Transacciones Financieras con Mensajes originados en una
tarjeta - Especificaciones de los mensajes de intercambio es el standard de la
International Organization for Standardization para sistemas que intercambian
transacciones electrónicas realizadas por poseedores de tarjetas de crédito.
J JAR - Un archivo JAR (por sus siglas en inglés, Java ARchive) es un tipo de archivo que
permite ejecutar aplicaciones escritas en lenguaje Java.
155
M MIL - Lenguajes de interconexión de módulos
O OCX - Es un acrónimo que significa "OLE Control Extensión". OLE a su vez significa
Object Linking and Embedding. OCX hace referencia a módulos que publican controles y
funciones para ser utilizados en programas para Windows, incluyendo especialmente el
navegador Internet Explorer. Típicamente, estas bibliotecas se presentan en bibliotecas
de enlace dinámico (DLL) almacenadas con extensión .OCX.
S SOAP - (siglas de Simple Object Access Protocol) es un protocolo estándar que define
cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio
de datos XML. Este protocolo deriva de un protocolo creado por David Winer en 1998,
llamado XML-RPC. SOAP fue creado por Microsoft, IBM y otros y está actualmente bajo
el auspicio de la W3C. Es uno de los protocolos utilizados en los servicios Web.
T TADG/ TISAF - Treasury Architecture Development Guidance/ Treasury Information
System Architecture Framework
TPV - Terminal Punto de Venta
U
156
UML - Lenguaje Unificado de Modelado / UML, por sus siglas en inglés, Unified Modeling
Language
W WSDL - "Lenguaje de Descripción de Servicios Web" (o "Web Services Description
Language"), Lenguaje basado en XML que permite la descripción de servicios web
desplegados. WSDL se utiliza también para la localización y ubicación de servicios en
Internet.
X XML - Siglas en inglés de eXtensible Markup Language (lenguaje de marcas extensible),
es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web
Consortium (W3C).
XSD - Los esquemas XSD son un vocabulario para expresar las reglas de los datos que
se utilizarán y sirve de referencia para validar los datos que aparecerán en un XML
157
Bibliografía
Paul Clements. “A Survey of Architecture Description Languages”. Proceedings of the
International Workshop on Software Specification and Design, Alemania, 1996.
David Garlan. “Software Architecture: A Roadmap”. En Anthony Finkelstein (ed.), The
future of software engineering, ACM Press, 2000.
Mary Shaw y David Garlan. “Software Architecture: Perspectives on an emerging
discipline”. Upper Saddle River, Prentice Hall, 1996.
Philippe Kruchten. “The 4+1 View Model of Architecture”, IEEE Computer Society and the
ACM, Nombiembre de 1995
C. Alexander, S. Ishikawa, M. Silverstein, M. Jacobson, I. Fiksdahl-King, y S. Angel, "A
Pattern Language", Oxford University Press, New York, 1977.
Using Pattern Languages for Object-Oriented Programs Kent Beck, Apple Computer, Inc.
Ward Cunningham, Tektronix, Inc. September 17, 1987
Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma, Richard
Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four). 1995.
Pattern-Oriented Software Architecture Volume 1: A System of Patterns, Frank
Buschmann , Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal, 1996.
Alexander Wolf. “Succeedings of the Second International Software Architecture
Workshop” (ISAW-2). ACM SIGSOFT Software Engineering Notes, pp. 42-56, enero de
1997.
Steve Vestal. “A cursory overview and comparison of four Architecture Description
Languages”. Technical Report, Honeywell Technology Center, Febrero de 1993.
Robert Monroe. “Capturing software architecture design expertise with Armani”.
158
Technical Report CMU-CS-163, Carnegie Mellon University, Octubre de 1998.
Mary Shaw y David Garlan. “Characteristics of Higher-Level Languages for Software
Architecture”. Technical Report CMU-CS-94-210, Carnegie Mellon University, Diciembre
de 1994.
Neno Medvidovic. “A classification and comparison framework for software Architecture
Description Languages”. Technical Report UCI-ICS-97-02, 1996.
P. Clements L. Bass and R. Kazman. Software Architecture in Practice. Addison–Wesley,
1998.
David Garlan, D. Monroe, and D. Wile. ACME: An architectural interchange language. In
Proc. of the XIX th Intl. Conference on Software Engineering. ICSE’ 97, Boston, 1997.
Marshall K. McKusick, George V. Neville-Neil, The Design and Implementation of the
FreeBSD Operating System (Addison Wesley, Agosto 2, 2004).
ISO 8583-1:2003, financial transaction card originated messages - Interchange message
specifications - Part 1: Messages, data elements and code values (Agosto 23, 2007)
Priscilla Walmsley, Definitive XML Schema, 1st edition, Prentice Hall PTR; ISBN:
0130655678, (Diciembre de 2001).
David C. Fallside, Priscilla Walmsley, XML Schema Part 0: Primer Second Edition, W3C
Recommendation 28 October 2004.
Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects,
Volume 5, Douglas Schmidt, Michael Stal, Hans Rohnert and Frank Buschmann, ISBN:
0471606952, 2007.