2014-10-31 7 views
0

ОК, поэтому сигналы и слоты позволяют свободно связывать связь между объектом и методом другим объектом и его методом. Это прекрасно, но эти объекты слотов сигналов существуют как публичные члены родительского класса, поэтому их экспозиция подрывает свободную связь для создания тесно связанного кода. Это скорее негативная вещь. Не следует ли делать сигналы конфиденциальными, поэтому родительский класс обрабатывает соединение/отключение сигнала?Сигналы и слоты могут увеличивать сцепление

ответ

0

Ну, что-то должен знать, что, когда 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, но никто не должен знать о другом.

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

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

+0

Спасибо за ответ. Второй абзац - это подход, который я предпочитаю. Что касается родительского класса, я имею в виду класс, содержащий объект сигнала. Я считаю, что объект сигнала должен быть закрытым, как с любой переменной-членом класса. – Musky

+0

И поэтому, а не одна объектная связь с объектом, необходимо предоставить код сцепления. – Musky