Что нового
  • Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Интерфейс Или Всё-таки Абстрактный Класс? Что Выбрать?

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,071
Баллы
155
Возраст
51
При работе над архитектурой приложения иногда возникает дилемма. Что выбрать: интерфейс или всё-таки абстрактный класс?

Попробуем изучить этот вопрос и найти на него ответ.


В начале разберёмся что же такое интерфейс и что такое абстрактный класс.

  • Абстрактный класс – класс, который не предполагает создания экземпляров;
  • Интерфейс – перечисление сигнатур методов, которые должны бить реализованы у наследующего его класса.

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

Интерфейсы поддерживают множественное наследование. Как следствие их широко используют в языках, где множественное наследование классов запрещено (C#, Java и т.д.).

Исходя из этого можно сделать следующий вывод.

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

В любом из этих случаев лучше использовать интерфейсы.

Если же требуется описать общую для всех наследников реализацию или структуру хранения данных в виде полей или свойств, здесь уже нужен абстрактный класс.

Иными словами, в данном вопросе нужно следовать золотому правилу разработки: «Технология выбирается под задачу».

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

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