В последнее время я читаю сообщения, в которых говорится о предполагаемом неправильном представлении о том, что интерфейсы являются абстракциями. Один такой пост - http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstractions.aspxИнтерфейсы (интерфейс/абстрактный класс) не являются абстракциями?
Я немного смущен. Если у меня нет интерфейсов (интерфейс/абстрактный класс), тогда как я буду вводить свои зависимости и издеваться над ними?
Кроме того, я слышал, что люди говорили о том, что не используют интерфейсы, которые имеют только один исполнитель. Как этот блог здесь - http://simpleprogrammer.com/2010/11/02/back-to-basics-what-is-an-interface/
Теперь все это, разве это не нарушает принцип - Программа для интерфейса, а не для реализации?
* Когда мы говорим «интерфейс» с точки зрения программирования для интерфейса. Такой интерфейс означает внешние методы и свойства класса. Он не должен быть интерфейсом на уровне языка. * Итак, я все время ошибался? Итак, конкретный класс может быть интерфейсом по вашему мнению? – Sandbox
Правильно. Более конкретно, публичные подписи методов и свойств составляют интерфейс этого класса. Каждый раз, когда вы создаете класс, все, что вы хотите выставить, становится частью этого внешнего интерфейса классов. Меняя его, ломают те, которые полагаются на него. Если другой класс полагается на больше, чем на свой интерфейс (они полагаются на конкретные детали реализации внутри класса, например, как сортируется список или хранятся данные), тогда даже изменение небольших внутренних вещей может сломать их. –
Но когда код ссылается на конкретный тип, не означает ли это, что если у нас будет другой класс завтра аналогичного типа, нам придется изменить код.Вместо этого с интерфейсами/абстрактными классами вы можете просто заменить другую реализацию во время выполнения. – Sandbox