Интерфейс (или абстрактный класс со всем кратким обзором методов) является мощным оружием на статическом типизированном языке, таком как C#, JAVA. Это позволяет различным производным типам использоваться способом одетым в форму. Шаблоны разработки поощряют нас использовать интерфейс как можно больше.
Однако на динамическом типизированном языке, все объекты не проверяются на свой тип во время компиляции. Они не должны реализовывать интерфейс, который будет использоваться в особенном методе. Просто необходимо удостовериться, что у них есть некоторые методы определенные (атрибуты). Это делает интерфейс не необходимым, или по крайней мере не столь полезное, как это находится на статическом языке.
Типичный динамический язык (например, рубин) имеют интерфейс? Если это делает, то, каковы преимущества наличия его? Если это не делает, то мы теряем многие красивые шаблоны разработки, которые требуют интерфейса?
Спасибо.
Думаю, нет единого ответа для всех динамических языков. В Python, например, нет интерфейсов, но есть множественное наследование. Использование классов, подобных интерфейсу, по-прежнему полезно:
isinstance (x, SomeType)
, особенно когда SomeType
содержит много методов. Интерфейсы на динамических языках полезны в качестве документации API, которые можно проверять автоматически, например инструментами разработки или утверждениями во время выполнения.
Например, zope.interface является стандартом де-факто для интерфейсов в Python. Такие проекты, как Zope и Twisted, которые предоставляют огромные API-интерфейсы для использования, находят его полезным, но, насколько мне известно, за пределами этого типа проектов он мало используется.