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

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

Wingely Dog

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

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

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

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

чего я недопонял в жизни?
 

svetasmirnova

маленький монстрик
>зачем оно в php?

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

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

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

вы никогда не забудете переопредлить такой пустой метод
 

syfisher

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

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

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

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

Wingely Dog

Guest
а посоветуйте грамотную буку ( статейку ) по поводу правильной идеологии разработки интерфейсов? можно и на языке загнивающего капитализма 8)
 

syfisher

TDD infected!!
Сам бы такую почитал. Именно по интерфейсам - не знаю. Все так-то само с опытом приходит.

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

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