С Guice похоже, что вы определяете свои классы, чтобы принимать определенные интерфейсы в качестве параметров конструктора. Затем вы говорите Guice, что «этот интерфейс отображается на этот класс, реализующий указанный интерфейс».
Такая вещь совершенно не нужна в Smalltalk, потому что классы Smalltalk заботятся только о протоколах.
Если бы мы перевели пример на Smalltalk, мы могли бы передать любой понравившийся объект в конструктор RealBillingService, если этот объект ответил на #logChargeResult: и #logConnectException:, т. Е. До тех пор, пока этот объект реализовал протокол, требуемый TransactionLog.
Вот ссылка на аналогичный ответ на приведенный выше.