Зачем нужны интерфейсы в языке без строгой типизации?

  • Автор темы Автор темы Wingely Dog
  • Дата начала Дата начала

Wingely Dog

Guest
Зачем нужны интерфейсы в языке без строгой типизации?

в php5 появились интерфейсы.

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

зачем оно в php? чем интерфейс лучше обычного класса с пустыми методами? му кроме того что мы можем реализовавать несколько интерфейсов одновременно.

чего я недопонял в жизни?
 
>зачем оно в php?

вашими словами:

>чтобы использовать всякай полиморфизм.

Кстати, ничто не мешает в PHP5 всё затипизировать:
PHP:
function foo(Bar $bar) {}
>чем интерфейс лучше обычного класса с пустыми методами?

вы никогда не забудете переопредлить такой пустой метод
 
Интерфейсы очень удобны при тестировании при использовании технологии Mock Objects. Фактически мы при помощи тестов, где фигурируют реальный классы и моки на некоторые интерфейсы, мы фиксируем способы взаимодействия некоторых классов, не называя конкретно их имена.

Например, класс А тестируется и ему передается мок на интерфейс В. В дальнейшем класс С, реализующий интерфейс В, который использовался в тестировании класса А, может быть любым, лишь бы он поддерживал интерфейс А.

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

Интерфейсы себя начинают "окупать" всегда, когда достаточно малы и четко определены. Плюс они расширяют язык, на котором говорят разработчики, от этого систему становится легче понимать.
 
а посоветуйте грамотную буку ( статейку ) по поводу правильной идеологии разработки интерфейсов? можно и на языке загнивающего капитализма 8)
 
Сам бы такую почитал. Именно по интерфейсам - не знаю. Все так-то само с опытом приходит.

Можно посоветовать Object Design: Roles, Responsibilities, and Collaborations. Также книгу Agile Software Development, Principles, Patterns, and Practices. Есть ли русские переводы - не знаю. Ну и все, что касается паттернов и рефакторинга (Фаулер и Gang of Four). Думаю, что много про интерфейсы написано для Java, но пока не читал и с Java не работал.

У меня так получилось, что сначала мы попробовали тестировать приложения, и тесты показали КАК надо проектировать приложения. Затем уже читая эти книги, убеждался в правильности своих выводов. Приходилось даже повторно читать некоторые книги так как без основательного опыта понять, про что говорит автор весьма трудно, вернее трудно оценить эти советы и начать их использовать.
 
Сверху