Какой смысл Boost::Signals?

Во-первых, я абсолютный новичок в программировании, поэтому не смейся надо мной.
Единственное, для чего я видел сигналы, используемые для набора инструментов GUI, и наборы инструментов GUI все идут со своей собственной сигнализацией. Итак, может ли Boost:Signals использоваться с этими инструментами GUI? Это было бы хорошей идеей? Какие еще приложения имеют сигналы?

4 ответа

Решение

Сигналы - это реализация обмена сообщениями о событиях, очень похожая на сообщения Smalltalk/Objective C или События в различных других (например, C#) языках.

Вы можете использовать их для самых разных задач, взгляните на шаблон наблюдателя

Зачем вам использовать шаблон наблюдателя?

Преимущества в значительной степени организационные, когда вы работаете с большими приложениями, важно применять шаблоны повторного использования, которые помогают поддерживать согласованность команды разработчиков.

Когда реализация определенного шаблона становится де-факто (или близка к нему), это особенно полезно, потому что это означает, что время подготовки для новых членов команды, скорее всего, будет ускорено, не только если они использовали реализацию ранее, но и потому, что популярность реализации будет означать, что есть широкие ресурсы и документация, доступная для ускорения обучения.

С точки зрения чистого кода ВСЕ шаблоны выглядят раздутыми, но когда вы начинаете понимать, что свыше 60% затрат, связанных с разработкой программного обеспечения, приходится на жизненный цикл обслуживания, стоит того, чтобы получить дополнительный код для обеспечения согласованности.

Другое преимущество состоит в том, чтобы помочь в повторном использовании программного обеспечения, в зависимости от стиля реализации, шаблон наблюдателя может помочь в модульности и отделении классов друг от друга. Я хотел бы предположить, что это также является организационным преимуществом, поскольку различные группы могут создавать компоненты проще или просто потому, что компоненты легче заменить.

Просто мои два цента, сигналы используются не только в (или для) GUI инструментарии. Они используются в тех случаях, когда вы хотите отделить источник данных от получателя (например, упомянутый выше шаблон наблюдателя). Если вы смешаете эту идею с потоками, вы сможете легко реализовать актеров, что является интересным шаблоном для параллельных задач (например, в Erlang и Scala используются актеры).

Одно из возможных применений - реализация инструментария GUI. Вы бы в основном настроили проводку для получения сообщений (или как там их называют) из собственной системы для генерации сигналов. Оттуда код для маршрутизации и обработки сигналов может быть (по крайней мере, несколько) переносимым.

В дополнение к шаблону Observer, о котором упоминали другие, каждый раз, когда вам приходится писать функцию обратного вызова, чтобы один класс мог уведомить другой о том, что что-то произошло, вы можете вместо этого использовать Сигналы и Слоты. Большое преимущество по сравнению с обратными вызовами заключается в том, что для добавления и удаления функции обратного вызова требуется множество кодов панели котла, а также автоматическое отключение, когда вызывающий абонент или вызываемый абонент выходят из области видимости.

Однако обратные вызовы - это всего лишь пример шаблона Observer.

Другие вопросы по тегам