Функции друга нарушают инкапсуляцию?

Использование friend Мне кажется, что эта функция немного взломана. Делать friend функции нарушают концепцию инкапсуляции?

Какие есть альтернативы friend функционировать? Будет ли использовать простой вспомогательный класс / функцию вместе с сеттер & добытчик функции-члены помогают увеличить инкапсуляцию по сравнению с просто использованием friend?

3

Решение

Делать friend функции нарушают концепцию инкапсуляции?

По факту, это не. Прежде всего, обратите внимание, что это не нарушает инкапсуляцию более public участники делают. Являются public Участники нарушения концепции инкапсуляции? Очевидно нет. Более того, во многих ситуациях friend увеличивает инкапсуляцию, а не нарушает ее, так как позволяет поддерживать private вещи как privateвместо того, чтобы выставлять данные в масштабе всей системы, используя public члены, что делает всю концепцию этого существа private скрыто от невооруженного глаза. Это противоположно предоставлению намерения в вашем коде, и оно должно поднимать красный флаг, когда это замечено. friend позволяет смягчить эту проблему, поскольку дает вам контроль над тем, кто может получить доступ к тем членам, которые хранятся private чтобы все знали, что они есть. C ++ FAQ поднимает один пример в котором вы можете использовать friend чтобы решить проблему дизайна, чтобы вы могли контролировать доступ к точке, в которой вы не совсем количество кода, который имеет доступ к private частей.

Не должен простой вспомогательный класс / функция вместе с сеттером & Функции члена getter могут спасти этот недостаток проекта?

Что ж, использование вспомогательного класса определенно может удовлетворить некоторые из тех friend сделать, но много раз неоправданно более громоздким, чем просто использование friend, О функции или геттере / сеттере, которая звучит для меня как использование общественности члены, чтобы непосредственно выставить частный те, недостатки которых описаны выше.

… или это не должно рассматриваться как плохая практика проектирования?

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

4

Другие решения

Функция друга нарушает концепцию инкапсуляции?

Нет это Усиливает инкапсуляция, потому что альтернативой будет сделать член public,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector