Сигналы и слоты могут увеличить сцепление

Итак, сигналы и слоты допускают слабую связь между объектом и методом с другим объектом и его методом. Это хорошо, но эти объекты сигнальных слотов существуют как открытые члены родительского класса, и поэтому их экспонирование подрывает слабую связь для создания тесно связанного кода. Это скорее негативная вещь. Разве сигналы не должны быть частными, чтобы родительский класс обрабатывал подключение / отключение сигнала?

1 ответ

Ну, что-то нужно знать, что когда eventFoo случается на ObjectA, handlerBar на ObjectB должен быть вызван.

В простейшей реализации без делегатов эта ответственность лежит на ObjectA, который вызывает ObjectB->handlerBar в его eventFoo тело. Это требует, чтобы знать о ObjectBи знать, что ObjectB->handlerBar это правильная вещь, чтобы позвонить. ObjectBнапротив, не нужно знать о ObjectA,

В одном методе использования сигналов и слотов ответственность лежит на ObjectB, Он несет ответственность за регистрацию его handlerBar в качестве обработчика для eventFoo сигнал. Так что нужно знать о ObjectA, но ObjectA не нужно знать о ObjectB,

В другом методе ObjectB разоблачений handlerBar как слот, и какой-то другой код соединяет eventFoo в handlerBar, Этот "другой код" должен знать об обоих ObjectA а также ObjectB, но ни один не должен знать о другом.

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

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

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