Различные права доступа при инкапсуляции. - вопрос №663888

Приветствую! Вопрос состоит в следующем. Допустим имеется некоторый класс SomeClass. Который реализует два метода — ShowList();  и AddElement(Element e); (ShowList — отображает на экран некоторый список. AddElement — добавляет новый элемент в конец списка). Я не конкретизирую в какой части класса объявлены эти методы — private/public/protected. Теперь допустим есть Некоторый класс SystemClass — который должен иметь возможность вызывать оба этихметода. И есть некоторый класс UserClass — который должен иметь возможность показывать на экран список, но не должен иметь возможности добавлять в него новые элементы. Если необходимо — можно предположить что класс SystemClass и SomeClass — реализуют некоторую библиотеку, которую подключают в другом проекте, и используют UserClass — ом. Внимание вопрос: Каким образом ( с использованием каких приемов ооп, паттернов проектирования, классов и структур данных) можно реализовать необходимую функциональность, кроме того, максимально обособив все три класса друг от друга, так, что-бы изменения в SystemClass и в SomeClass — не требовали перекомпиляции кода класса UserClass, кроме того, изменения в SomeClass не затрагивали код в UserClass, и наоборт — Изменения в UserClass не затрагивали код в SomeClass. Под изменениями подразумевается добавление нового функционала, изменение функционирование текущих методов. Кроме перечисленных 3х классов и их свойств, на систему не накладывается никаких ограничений по созданию любых структур данных, классов, интерфейсов. Буду рад конструктивному ответу с обоснованной позицией, наглядно показывающей красоту и изящество решения.

17.06.13
1 ответ

Ответы

через интерфейсы и механизм множественного наследования можно:

есть 2 интерфейса — addable и showable в каждом из которых абстрактное описание соответствующей ф-и.

Класс SomeClass наследуется (реализует) оба этих интерфейса.

Класс SystemClass наследуется от SomeClass

Класс UserClass — Только от showable

17.06.13
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store