El lenguaje de especificación y descripción (SDL) es un lenguaje de especificación con semántica formal. Diseñado para obtener una descripción inequívoca del comportamiento de los sistemas reactivos y distribuidos. Desarrollado y estandarizado por el CCITT . Basado en modelos mejorados de máquinas finitas ( ESFM ) para describir el comportamiento del sistema y tipos de datos abstractos . Es un lenguaje de especificación mixto, ya que permite definir tanto la parte dinámica del sistema (comunicación de procesos) como la parte estática (tipos de datos) [1] .
El estándar de idioma está definido por el CCITT (recomendaciones Z.100 a Z.106). El lenguaje se centró originalmente en los sistemas de telecomunicaciones, pero ahora su alcance incluye control de procesos y, en general, aplicaciones en tiempo real.
SDL proporciona representación gráfica (SDL/GR) y representación de frases de texto (SDL/PR), que son representaciones semánticas completamente equivalentes [1] . Los modelos generalmente se muestran en formato gráfico SDL/GR, mientras que SDL/PR se usa principalmente para intercambiar modelos entre servicios públicos. Un sistema se define como un conjunto de autómatas abstractos interconectados que son extensiones de autómatas finitos .
SDL cubre cinco aspectos principales: estructura, comunicación, comportamiento, datos y herencia. El comportamiento de los componentes se explica por la división del sistema en niveles jerárquicos. La comunicación entre los componentes se produce mediante puertos (puertas) conectados por canales (canales). Estos canales tienen cierta latencia, por lo que la comunicación suele ser asíncrona; establecer el retraso en cero lo hace sincrónico.
La primera versión del lenguaje se publicó en 1976 y utilizó una sintaxis gráfica (SDL-76). En 1980 se complementó con semántica elemental (SDL-80). En 1984 se mejoró la semántica (SDL-84) y también se introdujo un formulario de texto para procesamiento automático. En 1988 se publicó SDL-88, que incluía los fundamentos formales del lenguaje: gramáticas abstracta y real, así como una definición formal completa. La versión lanzada en 1992 (SDL-92) introdujo conceptos orientados a objetos tales como herencia, tipos base abstractos, etc., y se describieron transformaciones para características orientadas a objetos para llevarlas al estándar. SDL-2000 (publicado originalmente en 1999) es la última versión (junio de 2012) que se basa completamente en las ideas de la programación orientada a objetos y ya no incluye su reducción a funciones básicas. Se han lanzado actualizaciones de servicio para esta versión desde 1999, y para ella se desarrolló la recomendación CCITT Z.109 (06/07), donde se combina SDL-2000 con UML .
El SDL incluye los siguientes niveles de jerarquía:
Un agente del sistema generalmente consta de varios agentes de bloque. Los agentes de bloque se comunican entre sí a través de canales de comunicación. Un agente de bloque consta de agentes de proceso (estructura obligatoria en SDL-92; SDL-2000 es más flexible). Cada agente de proceso es una máquina de estado que contribuye a la acción realizada por el sistema. Las acciones a través de mensajes del tiempo de ejecución o de un agente a otro se denominan señales. Las señales recibidas por el agente de proceso primero se ponen en cola (puerto de entrada). Cuando la máquina de estado pasa al estado inactivo, si la primera señal en el puerto de entrada está habilitada para ese estado, pasa a otro estado. La transición también puede emitir señales a otros agentes o al tiempo de ejecución. Se permite que un agente de proceso contenga tipos de procedimiento, de modo que las mismas acciones se puedan llamar desde diferentes lugares. También se permite llamar a un tipo de procedimiento remoto para llamar a un procedimiento en otro agente (o incluso en otro sistema) y esperar una respuesta.
Las herramientas de modelado habilitadas para SDL más conocidas son Telelogic Tau, PragmaDev RTDS, Cinderella, Safire-SDL y ObjectGeode (ya no está disponible) [2] . PragmaDev RTDS es compatible con SDL y SDL-RT, que se utiliza para desarrollar aplicaciones en tiempo real y sistemas integrados. También hay aplicaciones gratuitas que admiten SDL, como JADE, un marco Java para desarrollar especificaciones.