Lenguaje Z
![](https://upload.wikimedia.org/wikipedia/commons/e/ed/Letra_Z.jpg)
El Lenguaje Z es un lenguaje de especificación formal utilizado en ingeniería del software para la especificación formal de sistemas de información, como una fase previa al desarrollo del código de programa para el mismo en un lenguaje de programación. Fue desarrollado por Jean-Raymond Abrial mientras formaba parte del Grupo de investigación en Programación del Laboratorio de computación de la Universidad de Oxford.[1]
El lenguaje Z se basa en la teoría de conjuntos, el cálculo lambda y la lógica de primer orden. En Z se definen construcciones denominadas esquemas para describir el espacio de estados del sistema y las operaciones que sobre el mismo se efectúan. En los esquemas se declaran variables y predicados que afectan los valores de las variables declaradas.[2]
Ejemplo
[editar]Descripción | Especificación en Z |
El ejemplo de especificación en Z mostrado en la imagen se encuentra en el libro de Spivey,[2] es un sencillo ejemplo de un sistema de manejo de una agenda de cumpleaños. Ha sido adaptado para este artículo gracias a la herramienta Z-eves.[3][4]
En la primera línea podemos observar la declaración de dos conjuntos, el conjunto de todos los nombres: NOMBRE y el conjunto de todas las fechas: FECHA, en la especificación se los declara como tipos básicos. El primer esquema que vemos: AgendaCumple es el esquema principal de la especificación y define el espacio de estados del sistema. En el mismo se definen las variables: contactos (como el conjunto de nombres cuyos cumpleaños están agendados – subconjunto de todos los nombres - ) y cumple como una función parcial con dominio en el conjunto NOMBRE e imagen en el conjunto FECHA; en la siguiente parte del esquema se define una condición o invariante del sistema, que en este caso indica que el conjunto contactos es igual al dominio de la función cumple. El esquema IniciarAgendaCumple representa el estado inicial del sistema. Los siguientes esquemas definen las operaciones que se realizan sobre el sistema: El esquema AgregarCumple especifica la operación de agregar un nuevo cumpleaños, la letra griega delta delante del nombre del esquema principal, indica que luego de esta operación se producirá un cambio de estado, luego se declaran dos variables: nombre? y fecha?, la decoración (?), indica que son variables de entrada; las condiciones que se declaran son que los valores de la variable nombre? NO deben pertenecer al conjunto contactos y que el estado inmediato posterior del conjunto cumple (cumple') es igual al estado anterior unión la upla conformada por el nombre y la fecha ingresadas. El esquema BuscarCumple especifica la operación de búsqueda de un cumpleaños dado un nombre, se puede apreciar que las variables de salida poseen la decoración (!), en este caso la letra griega theta delante del nombre del esquema principal, denota que esta operación no producirá un cambio de estados. Aquí las condiciones son que los valores de la variable de entrada nombre? deben pertenecer al conjunto contactos y que el valor de la variable de salida fecha! será igual al valor devuelto por la función cumple aplicada al valor de la variable nombre? Finalmente el esquema Recordatorio especifica la operación que dada una fecha, el sistema nos devuelve el conjunto de los cumpleaños que ocurren en la misma, como puede verse tampoco modifica el estado del sistema y la condición indica que la variable de salida tarjetas! deberá ser igual al conjunto de nombres tal que al aplicar la función cumple sobre cualquiera de ellos el resultado es igual al valor de la variable de entrada hoy? |
![]() |
Estándar
[editar]El lenguaje Z logró el estándar ISO en el 2002. Se puede obtener una copia directamente en el sitio de la ISO.[5]
Herramientas
[editar]- ERZ - Herramienta basada en Web para integrar paradigmas de integración, específicamente transforma del modelo entidad relación a su equivalente en lenguaje Z, desarrollada en PHP por Luis Espino, Guatemala.
- Fastest una herramienta de testeo de código abierto para el Lenguaje Z.
- Fuzz - Es un chequeador de tipos para lenguaje Z.
- HOL-Z entorno de prueba de código abierto para Z en Isabelle/HOL Archivado el 5 de noviembre de 2015 en Wayback Machine.
- Z Word Tools - Permite escribir especificaciones en Microsoft Word.
- ZETA sistema de código abierto para el desarrollo de especificaciones en Z.
- Z/Eves — Un tester de pruebas para el Lenguaje Z (sitio en alemán)
Referencias
[editar]- ↑ Jean-Raymond Abrial, Stephen A. Schuman and Bertrand Meyer: A Specification Language, in On the Construction of Programs, Cambridge University Press, eds. A. M. Macnaghten and R. M. McKeag, 1980 (describes early version of the language). ISBN 0-521-23090-X
- ↑ a b J. Michael Spivey (1992). The Z Notation: A reference manual (Segunda edición). Prentice Hall International Series in Computer Science. ISBN 9780139785290. Archivado desde el original el 9 de octubre de 2008. Consultado el 27 de abril de 2010.
- ↑ «Z/Eves — Un tester de pruebas para el Lenguaje Z» (en alemán). Archivado desde el original el 19 de mayo de 2009. Consultado el 20 de abril de 2010.
- ↑ «Documentación y manuales sobre Z/EVES». Consultado el 20 de abril de 2010.
- ↑ Information Technology — Z Formal Specification Notation — Syntax, Type System and Semantics (1 MB PDF). pp. 196 pages. Archivado desde el original el 10 de marzo de 2007.
Lectura recomendada
[editar]- Jim Davies and Jim Woodcock (1996). Using Z: Specification, Refinement and Proof. Prentice Hall International Series in Computer Science. ISBN 0-13-948472-8. Archivado desde el original el 27 de junio de 2009.
- Jonathan Bowen (1996). Formal Specification and Documentation using Z: A Case Study Approach. International Thomson Computer Press. ISBN 1-85032-230-9. Archivado desde el original el 9 de abril de 2010. Consultado el 27 de abril de 2010.
- Jonathan Jacky (1997). The Way of Z: Practical Programming with Formal Methods. Cambridge University Press. ISBN 0-521-55976-6.
Enlaces externos
[editar]- Especificaciones propuestas por Ian Toyn
- Herramientas para el desarrollo y testeo de especificaciones Z en Microsoft Word
- Proyecto(CZT)
- The World Wide Web Virtual Library: The Z notation, por Jonathan Bowen
- Type-Checker para Z por Mike Spivey
- W3C WSDL 2.0 Un ejemplo de especificación en Z con aserciones y explicaciones.
- Z/EVES Documentación y manuales sobre Z/EVES