Интерфейс на динамическом языке?

Интерфейс (или абстрактный класс со всем кратким обзором методов) является мощным оружием на статическом типизированном языке, таком как C#, JAVA. Это позволяет различным производным типам использоваться способом одетым в форму. Шаблоны разработки поощряют нас использовать интерфейс как можно больше.

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

Типичный динамический язык (например, рубин) имеют интерфейс? Если это делает, то, каковы преимущества наличия его? Если это не делает, то мы теряем многие красивые шаблоны разработки, которые требуют интерфейса?

Спасибо.

7
задан Shuo 23 April 2010 в 05:52
поделиться

2 ответа

Думаю, нет единого ответа для всех динамических языков. В Python, например, нет интерфейсов, но есть множественное наследование. Использование классов, подобных интерфейсу, по-прежнему полезно:

  • Классы, подобные интерфейсу, могут обеспечивать реализацию методов по умолчанию
  • Утиная типизация - это хорошо, но в некоторой степени; иногда бывает полезно написать isinstance (x, SomeType) , особенно когда SomeType содержит много методов.
2
ответ дан 7 December 2019 в 16:40
поделиться

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

Например, zope.interface является стандартом де-факто для интерфейсов в Python. Такие проекты, как Zope и Twisted, которые предоставляют огромные API-интерфейсы для использования, находят его полезным, но, насколько мне известно, за пределами этого типа проектов он мало используется.

1
ответ дан 7 December 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: