Signals and slots es una construcción de lenguaje introducida en Qt [1] para la comunicación entre objetos que facilita la implementación del patrón de observador evitando el código repetitivo . El concepto es que los widgets GUI pueden enviar señales que contienen información de eventos que pueden ser recibidas por otros widgets / controles utilizando funciones especiales conocidas como ranuras. Esto es similar a los punteros de función de C / C ++, pero el sistema de señal / ranura asegura la corrección de tipo de los argumentos de devolución de llamada. [ cita requerida ]
El sistema de señal / ranura se adapta bien a la forma en que se diseñan las interfaces gráficas de usuario . [ cita requerida ] De manera similar, el sistema de señal / ranura se puede usar para otros usos que no sean de GUI, por ejemplo , notificación de eventos de E / S asíncronas (incluidos enchufes, tuberías, dispositivos seriales, etc.) o para asociar eventos de tiempo de espera con instancias de objetos apropiadas y métodos o funciones. Es fácil de usar y no es necesario escribir ningún código de registro / desregistro / invocación, porque el compilador de metaobjetos (MOC) de Qt genera automáticamente la infraestructura necesaria.
Una metáfora de uso común [¿ según quién? ] es una hoja de cálculo. Una hoja de cálculo tiene celdas que observan las celdas de origen. Cuando se cambia la celda de origen, las celdas dependientes se actualizan a partir del evento.
Implementaciones alternativas
Hay algunas implementaciones de sistemas de señal / ranura basados en plantillas C ++ , que no requieren el compilador de metaobjetos adicional, como lo usa Qt, como libsigc ++ , sigslot , vdk-signals , nano-signal-slot , neosigslot , Signals , boost .signals2 , Synapse , Cpp :: Events , Platinum y JBroadcaster . Los lenguajes de Common Language Infrastructure (CLI) como C # también admiten una construcción similar, aunque con una terminología y sintaxis diferentes: los eventos desempeñan el papel de señales y los delegados son las ranuras. Existe otra implementación de señales para ActionScript 3.0 , inspirada en eventos de C # y señales / ranuras en Qt. Además, un delegado puede ser una variable local, como un puntero de función , mientras que un espacio en Qt debe ser un miembro de clase declarado como tal. El sistema GObject basado en C también proporciona una funcionalidad similar a través de GSignal . En D se implementa mediante señales estándar .
Ver también
Bibliotecas
Java: sig4j : multiproceso, con seguridad de tipos, basado en la anotación FunctionalInterface introducida en Java 8.
C ++: vdk-señales : seguro para subprocesos, seguro para tipos, escrito en C ++ 11 con variables atómicas.
Referencias
- ^ "Señales y ranuras - QtCore 5.1" . Proyecto Qt. 2013-07-04 . Consultado el 4 de julio de 2013 .