Почему публичное наследование поощряется, когда сокращение общедоступного API кажется предпочтительным с точки зрения удобства сопровождения? - PullRequest
1 голос
/ 21 января 2012

Я использую bada и ссылаюсь на учебник здесь , который начинается:

    class MainForm:
       public Osp::Ui::Controls::Form,
       public Osp::Ui::IActionEventListener,
       public Osp::Ui::ITouchEventListener
    {

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

В чем причина их публикации, чего мне не хватает?

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

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Если Form, IActionEventListener и ITouchEventListener уже поддерживают множество используемых методов, в большинстве случаев зачем их скрывать?Напротив: если вы их скрываете, и в будущем они кому-то понадобятся, вам будет труднее поддерживать класс, потому что вам нужно будет предоставить их снова.

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

В некоторых языках, таких как C #, публичное наследование является единственным вариантом.

0 голосов
/ 21 января 2012

Для меня частное наследование «интерфейсов» не имеет смысла.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...