Desarrollo de Aplicaciones con MDA Una nueva revolución MDA Regularmente la industria del software se enfrenta a distintas revoluciones provocadas por la constante búsqueda de metodologías que permitan desarrollar aplicaciones mejores, en menos tiempo y con menores costes. Estas revoluciones suelen ser bastante extensas y no siempre dejan algo nuevo y, valga la redundancia, revolucionario. Muchos de nosotros fuimos testigos de varias revoluciones. Hemos tenido que migrar de DOS a Windows, de gestores de archivos locales a bases de datos relacionales, hemos visto como Internet entró en nuestros ordenadores de escritorio y hemos adoptado la programación orientada a objetos, aunque sin dejar del todo la programación estructurada. En nuestros días, una de estas revoluciones dio origen a una nueva metodología llamada Model Driven Architecture, relacionada con el análisis, diseño y programación orientada a objetos. Como en muchas otras revoluciones exitosas tarde temprano seremos absorbidos por los cambios introducidos por ella. Delphi 7 Con el lanzamiento de Delphi 7 Borland está impulsando la adopción de la metodología Model Driven Architecture en la cual Delphi es sólo una herramienta más. Es por ello que Borland ha incluido en Delphi 7 una serie de herramientas de terceros que si bien para algunos no son novedad para otros sí. Los folletos publicitarios de Delphi 7 están llenos de frases y términos nuevos que forman parte de la misma revolución que dio origen a la metodología Model Driven Architecture. He aquí algunos ejemplos: UML; Patterns; Refactoring; Object Persistence; Business Objects A lo largo de este artículo explicaré de qué se trata todo esto y qué problemáticas nos ayudan a resolver. Cuatro paradigmas, cuatro Desde hace tiempo dos paradigmas distintos han tenido gran aceptación en la industria del software: la programación orientada a objetos y las bases de datos relacionales. El primero dedicado a la creación de programas y el segundo al almacenamiento de datos. Estos dos paradigmas han madurado hace ya unos cuantos años al punto de que cualquier programador que se jacte de serlo no puede estar al margen de ninguno de ellos. Me animaría a decir que el panorama actual es el siguiente: • Utilizamos una herramienta - Delphi • de desarrollo rápido de aplicaciones • de desarrollo visual basado en componentes • basada en un lenguaje orientado a objetos - object pascal • para el desarrollo de aplicaciones de bases de datos • Almacenamos los datos en bases de datos relacionales o en gestores locales • Pero seguimos programando la lógica del negocio de acuerdo a un tercer paradigma: la programación estructurada. Creo no estar equivocado. Si usamos programación orientada a objetos es sólo para la creación de componentes. Con esto no quiero decir que programamos mal o que sea un pecado mortal usar programación estructurada. Simplemente estoy intentando describir la situación actual para comprenderla mejor. El hecho de que la mayoría de los programadores Delphi no utilicemos objetos delnegocio no es un mero capricho. Por años hemos utilizado un conjunto de componentesque son una auténtica invitación a resolver la lógica del negocio con programación estructurada, fomentando así una mezcla entre programación orientada a objetos, programación estructurada y bases de datos relacionales. Y esto no nos sucedió sólo a nosotros, los programadores Delphi, sino también a la mayoría de los programadores de aplicaciones de bases de datos, sin importar las herramientas que utilizaran. Pero no le echemos la culpa a las herramientas de desarrollo. Lo cierto es que es muy difícil unir el paradigma de la programación orientada a objetos con el paradigma de las bases de datos relacionales y, a pesar de los esfuerzos realizados por crear bases de datos orientadas a objetos, los ganadores de la batalla siguen siendo la programación orientada a objetos y las bases de datos relacionales y la mejor manera de unir ambos paradigmas es por medio de la programación estructurada. El cuarto paradigma La situación antes descripta dio origen a un cuarto paradigma: el desarrollo de aplicaciones objeto-relacional. Este paradigma intenta resolver la problemática planteada por la utilización de programación orientada a objetos y bases de datos relacionales. En primer lugar, el paradigma objeto-relacional plantea el uso de programación orientada a objetos para el desarrollo del 100% de la aplicación, incluyendo la lógica del negocio. Esto significa que tenemos que utilizar objetos del negocio, como por ejemplo facturas, productos y clientes y procesos del negocio, como por ejemplo calcular los impuestos de tal factura que contiene tales productos y es para tal cliente. En segundo lugar, el paradigma objeto-relacional plantea que la persistencia de los objetos del negocio se realiza en bases de datos relacionales. Sin un mecanismo de persistencia los objetos tendrían vida mientras el ordenador estuviera encendido y esto no sería de mucha utilidad. Habrán leído más de una vez en la documentación de Delphi acerca del mecanismo de persistencia de los componentes. Básicamente es lo que permite que podamos almacenar un proyecto un día, abrirlo al día siguiente y encontrar todo como lo almacenamos. Sobre la base de estos dos planteos, el paradigma objeto-relacional se concentra en como realizar la persistencia de objetos en bases de datos relacionales de una manera eficiente y en lograr que cambios en los objetos no provoquen necesariamente cambios en la base de datos y viceversa. Esto no es fácil de lograr y menos aún si no contamos con las herramientas apropiadas. Arquitectura basada en tipos de clases En su libro “Building Object Applications That Work”, Scott Ambler propone la utilización de capas al momento de diseñar las clases de una aplicación. En la arquitectura basada en tipos de clases cada capa se corresponde con una funcionalidad concreta de la aplicación lo que nos permite agrupar las clases de acuerdo a su funcionalidad. El siguiente gráfico muestra la arquitectura propuesta por Scott Ambler en su estado más evolucionado. En este estado, la arquitectura propuesta por Scott Ambler está compuesta por cinco capas. En ella no sólo se definen las capas que la componen sino también las relaciones entre cada una de ellas o, dicho de otra forma, las relaciones entre las clases agrupadas en cada una de ellas. A continuación se describen cada una de estas cinco capas. User Interface Classes: en esta capa debemos agrupar las clases responsables de resolver la interface de la aplicación con los usuarios. Por ejemplo, en una aplicación Delphi tradicional, todos los formularios (descendientes de TForm) corresponderían a esta capa. Controller/Process Classes: en esta capa debemos agrupar las clases responsables de resolver procesos de negocios. Por ejemplo, un proceso encargado de calcular los impuestos de una factura. Business/Domain Classes: en esta capa debemos agrupar las clases que representan objetos del negocio. Por ejemplo, cliente, producto, factura, etc. Presistence Classes: en esta capa debemos agrupar las clases responsables de la persistencia de los objetos del negocio. Por ejemplo, en una aplicación Delphi de bases de datos, los componentes de acceso a datos corresponderían a esta capa. System Clasess: en esta capa debemos agrupar las clases que representan procesos específicos del sistema operativo. Por ejemplo, llamadas al API de Windows. Es importante no sólo prestar atención a cada una de las capas sino también a la interacción entre ellas. En el gráfico se puede ver claramente como las clases de la capa User Interface Classes no deben interactuar nunca con las clases de la capa Persistence Classes. El paradigma objeto-relacional La arquitectura propuesta por Scott Ambler es una de las tantas alternativas que intentan resolver las problemáticas del paradigma objeto-relacional. La persistencia de los objetos del negocio en una base de datos relacional es delegada en una capa lo que permite cierto nivel de aislamiento entre los objetos del negocio y la base de datos relacional permitiendo, entre otras cosas, cambiar el gestor de bases de datos relacionales sin tener que modificar los objetos del negocio y mucho menos aún las clases responsables de resolver la interface de la aplicación con los usuarios. Model Driven Architecture El concepto encerrado en la frase Model Driven Architecture es muy difícil de traducir al castellano sin que pierda su significado. Y la dificultad aumenta si queremos hacerlo en una frase breve. Es por eso que casi nunca se traduce. Según la OMG... Model Driven Architecture (MDA) es una nueva forma de escribir especificaciones y desarrollar aplicaciones, ambos basados en un modelo independiente de la plataforma. Una especificación MDA completa consiste en • un modelo UML base y definitivo independiente de la plataforma, © 2002 Grupo Danysoft - +34.916 638683 – www.danysoft.com • uno o más modelos específicos de la plataforma y • un conjunto de definiciones de interfaces, cada una describiendo como es implementado el modelo base en una plataforma diferente. Una aplicación MDA completa consiste en • un modelo definitivo independiente de la plataforma, • uno o más modelos específicos de la plataforma e • implementaciones completas, una para cada una de las plataformas que el desarrollador decida soportar. El desarrollo MDA se concentra primero en la funcionalidad y el comportamiento de una aplicación o sistema distribuido, si importar la tecnología o tecnologías en las cuales será implementado. MDA separa los detalles de la implementación de las funciones del negocio. De esta manera, no es necesario repetir el proceso de modelado de la funcionalidad y el comportamiento de una aplicación o sistema cada vez que una nueva tecnología (como XML/SOAP) aparece. Más información en http://www.omg.org/mda y http://www.uml.org . Atando cabos Atemos los cabos sueltos. Debemos utilizar: • Una metodología de análisis, diseño y programación orientada a objetos como estándar para el desarrollo de aplicaciones. • UML como estándar para el modelado de objetos. • Una herramienta de desarrollo basada en un lenguaje orientado a objetos. • Bases de datos relacionales como estándar para el almacenamiento de datos. • Modelos entidad-relación como estándar para el modelado de bases de datos. • Aplicaciones objeto-relacional como estándar para el desarrollo de aplicaciones de bases de datos. • Model Driven Architecture como metodología para administrar el ciclo de vida de una aplicación. Qué nos ofrece Borland en Delphi 7 Studio Architect • Delphi 7, una herramienta de desarrollo basada en un lenguaje orientado a objetos. • Model Maker, una herramienta para el modelado de objetos con UML integrada con Delphi como ninguna otra. • Bold For Delphi, un conjunto de componentes que permiten el desarrollo de aplicaciones objeto-relacional con mínimo esfuerzo, implementando una capa de visualización de objetos del negocio, una capa de objetos del negocio y una capa de persistencia de objetos del negocio. Bold For Delphi utiliza UML y permite importar un modelo desde Model Maker. Como casi siempre, tenemos mucho que aprender pero el esfuerzo bien vale la pena. Las herramientas incluidas en Delphi 7 Studio Architect harán que dicho esfuerzo sea mucho menor.