Я часто сталкивался с понятием «программирование для интерфейса вместо реализации», и я думаю, что понимаю, что это значит. Но я хочу убедиться, что я понимаю, что это преимущества и возможные реализации.
«Программирование на интерфейсе» означает, что, когда это возможно, следует ссылаться на более абстрактный уровень класса (интерфейс, абстрактный класс или иногда некоторый суперкласс) вместо обращения к конкретной реализации.
Типичным примером в Java является использование:
List myList = new ArrayList();
вместо ArrayList myList = new ArrayList();
.
У меня есть два вопроса по этому поводу:
Я хочу убедиться, что я понимаю основные преимущества этого подхода. Я думаю, что преимущества в основном гибкость. Объявление объекта в качестве более высокоуровневой ссылки, а не конкретной реализации, обеспечивает большую гибкость и поддержку в течение всего цикла разработки и всего кода. Это верно? Является ли гибкость главным преимуществом?
Есть ли еще способы «программирования на интерфейс»? Или «объявление переменной как интерфейса, а не конкретной реализации» - единственная реализация этой концепции?
Я не говорю об интерфейсе конструкции Java . Я говорю о принципе ОО «программирование на интерфейс, а не на реализацию». В этом принципе мировой «интерфейс» относится к любому «супертипу» класса - интерфейсу, абстрактному классу или простому суперклассу, который является более абстрактным и менее конкретным, чем его более конкретные подклассы.