PHP es uno de los lenguajes más usado y extendidos para la programación web. En las versiones más recientes del lenguajes y desde la versión 4 se vienen agregando y mejorado en el lenguaje, un conjunto de características que lo convierten ya en en un lenguaje orientado a objetos. De modo que ya es posible modelar nuestras aplicaciones y programas en PHP usando UML como lenguaje de modelado.
Tenemos varias razones para modelar nuestro software entre ellas:
- Proveer una representación consistente en todo el ciclo de vida.
- Mejor interacción entre el usuario/analista/diseñador.
- Poder evaluar el impacto de cambios conceptuales y estructurales en nuestro software.
- Agilizar el las labores de programación en etapas iniciales dado que permite abordar problemas complejos y simples mediante una representación universal.
Interfaz de usuario
Interfaz de ArgoUML |
La interfaz se encuentra distribuida de la forma en que varios modeladores e IDE's se encuentran organizados.
- Barra de menús y herramientas en la parte superior.
- Un explorador del proyecto y los modelos a la izquierda, que permite organizar los elementos en distintas perspectivas.
- En el centro el área de diseño e inmediatamente sobre esta un barra de herramientas con los objetos permitidos en el diagrama.
- La sección inferior corresponde a las propiedades del objeto seleccionado.
El caso de estudio
La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar pedidos p de productos, de los cuales se anota la cantidad en stock. Un cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos.
Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente. Además, sólo es posible realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable del cobro, orden de distribución y confirmación de los pedidos. El cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado.
Solución
(Los colores usados se basan en la definición de arquetipos)
Explorando algunas características
ArgoUML tiene varios conjuntos de criticas de diseño que pueden ayudarnos a mejorar nuestros modelos y software. en el menú contextual de los elementos podemos ver las criticas que son aplicables así como la gravedad de las mismas.
También es posible ver la cantidad total de criticas por grado de prioridad.
Podemos documentar cualquier elemento, además de ser muy útil nos permitirá mantener un código bien documentado y que pueda ser entendido por otros, y utilizar estos comentarios para generar documentación de referencia con programas como phpDocumentor.
Es posible explorar el código de un elemento en diferentes lenguajes soportados
Generando el código y actualizando nuestro modelo
La generación de código es unas de las características que más me agrada de este modelador. Me permite crear rápidamente
crear las definiciones básicas de las clases y otros elementos, que luego puedo especificar con mayor detalle de acuerdo a las necesidades. Todo sin perdida de código al actualizar mi modelo.
Simplemente debemos seleccionar las clases y los lenguajes para los que generaremos el código así como la ruta de destino y estamos listos para continuar programado en cuanto generamos el código. Entre los lenguajes soportados están PHP 4 y 5, Java y C++.
En el código generado tendremos un archivo por cada elemento, también se generaran los paquetes o directorios en caso que hayamos agrupado en paquetes los elementos de nuestro modelo.
Se siguen las buenas prácticas de nombrado para los archivos. Esto resulta conveniente sobre todo cuando tenemos una gran cantidad de elementos (clases, paquetes, interfaces y otros) que nos resultaría difícil recordar lo que contienen labor que resultaría aun más engorrosa para otros que necesiten revisar nuestro código.
El código generado integra los comentarios y demás elementos informativos que hayamos incluido algunos de estos pueden configurarse a nivel global, de proyecto o del elemento de diseño.
Las secciones que vemos entre estos comentarios que contienen la palabra section son las zonas donde podemos ingresar nuestro código sin tener que preocuparnos porque sea sobre escrito al regenerar el código una vez que hayamos realizado cambios.
Dado que los se guardan archivos separados por cada elemento ArgoUML se encarga de agregar las inclusiones necesarias basado en las relaciones entre elementos y los tipos de parámetros y atributos.
Entre las herramientas de uso libre para ingeniería de software ArgoUML es una de las que más me agrada dado que además de ser de código abierto. Me permite hacer todo lo que necesito sin tener que usar software propietario. Puedo portar mis modelos a casi cualquier otra herramienta exportandolo como un XMI. Creo que pude contribuir al uso de las características de orientación a objetos de este lenguaje con tanto potencial y que se encuentra en evolución constante. Características cuyo uso aun no se encuentra ampliamente difundido entre muchos programadores, pese a todo el esfuerzo puesto en ello.
Finalmente les dejo por acá algunas referencias para que puedan continuar aprendiendo acerca de estos temas.
Clases y Objetos en PHP. [http://www.php.net/manual/es/language.oop5.php]
ArgoUML - Página oficial del proyecto. [http://argouml.tigris.org/]
OMG - Índice de especificaciones [http://www.omg.org/spec/index.htm]
Disculpa las molestias pero tienes el codigo de las clases que se han generado a partir del diagrama?
ResponderEliminar