Как сказал Лукас, в большинстве случаев они вам не нужны. Главным образом потому, что для достижения полиморфизма единственное, что вам нужно, это реализовать одно и то же сообщение. Для них нет необходимости определять общий тип.
С другой стороны, иногда, с МОЕЙ точки зрения, вам нужны интерфейсы. В основном, когда у вас есть контракт, который нужно показать, или когда у вас есть своего рода абстрактный суперкласс. Это очень распространено при разработке фреймворков. Возьмите в качестве примера логгер или сериализатор. В этом случае вы можете определить обязательные методы, которые должен реализовать сериализатор. Затем вы можете создать абстрактный суперкласс со всеми методами, реализованными следующим образом:
LoggerIterface >> log: anObject
self shouldBeImplemented
LoggerIterface >> reset
self shouldBeImplemented
И т. Д. Итак, проверяя этот класс, вы теперь выясните, какие методы вы должны реализовать, чтобы пользователь этого объекта работал хорошо.
Обратите внимание, что #shouldBeImplemented
реализован в Object
с чем-то вроде этого (в Pharo Smalltalk):
Object >> shouldBeImplemented
"Announce that this message should be implemented"
self error: 'This message should be implemented'
Но, как вы видите, это просто соглашение, оно не навязывается самим языком.
Приветствия
Мариано