El sistema de señales y ranuras es una construcción del lenguaje introducida en Qt [ 1 ] para la comunicación entre objetos, que facilita la implementación del patrón observador y evita el código repetitivo . El concepto consiste en que los widgets de la interfaz gráfica de usuario (GUI ) y otros objetos pueden enviar señales con información de eventos, las cuales pueden ser recibidas por otros objetos mediante funciones miembro especiales conocidas como ranuras. Esto es similar a los punteros a funciones de C/C++, pero el sistema de señales y ranuras garantiza la corrección de tipos de los argumentos de las funciones de devolución de llamada.
El sistema de señales/ranuras se adapta perfectamente al diseño de las interfaces gráficas de usuario . Asimismo, puede utilizarse para otras aplicaciones no relacionadas con la interfaz gráfica, como la notificación de eventos de E/S asíncrona (incluidos sockets, tuberías, dispositivos serie, etc.) o para asociar eventos de tiempo de espera con las instancias de objetos, métodos o funciones correspondientes. Su uso es sencillo y no requiere código de registro, cancelación de registro ni invocación, ya que el compilador de metaobjetos (MOC) de Qt genera automáticamente la infraestructura necesaria.
Se podría implementar un sistema de actualización para programas de hojas de cálculo utilizando señales y ranuras, de manera que cuando se modifique una celda, se notifique/actualicen sus celdas dependientes.
Implementaciones alternativas
Hay algunas implementaciones de sistemas de señales/ranuras basadas en plantillas de C++ , que no requieren el compilador de metaobjetos adicional, como el que usa Qt, tales como libsigc++ , sigslot, vdk-signals, nano-signal-slot, neosigslot, Signals, boost.signals2, Synapse, Cpp::Events, Platinum, JBroadcaster y KDBindings . 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 los eventos de C# y las señales/ranuras en Qt. Además, un delegado puede ser una variable local, muy parecida a un puntero a función , mientras que una ranura 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 std.signals.
Véase también
Bibliotecas
- Java: sig4j - multihilo, con seguridad de tipos, basado en la anotación FunctionalInterface introducida en Java 8 .
- C++: vdk-signals - seguro para subprocesos, seguro para tipos, escrito en C++11 con variables atómicas.
Referencias
- ↑ "Señales y ranuras - QtCore 5.1" . Proyecto Qt. 4 de julio de 2013. Archivado del original el 10 de octubre de 2013. Consultado el 4 de julio de 2013 .
- Qt (software)