Рубин и утка: дизайн по контракту невозможен?

Подпись метода в Java:

public List getFilesIn(List directories)

похожий в рубине

def get_files_in(directories)

В случае Java система типов дает мне информацию о том, что метод ожидает и доставляет. В рубинеу меня есть делонет понять, что яЯ должен пройти, или что ябуду ожидать, чтобы получить.

В Java объект должен формально реализовывать интерфейс. В Ruby передаваемый объект должен реагировать на любые методы, вызываемые в методе, определенном здесь.

Это кажется весьма проблематичным:

Даже имея 100% точную и актуальную документацию, код Ruby должен по существу раскрыть свою реализацию, нарушая инкапсуляцию. "ОО чистота " Помимо этого, это может показаться кошмаром обслуживания.Рубиновый код дает мненет что за ключвозвращаются; Мне пришлось бы по существу поэкспериментировать или прочитать код, чтобы выяснить, на какие методы ответил бы возвращаемый объект.

Не хочу спорить о статической типизации против утиной, но хочу понять, как вы поддерживаете производственную систему, в которой у вас почти нет возможности проектировать по контракту.

Обновить

Никто не обращал внимания на воздействие метода »Внутренняя реализация через документацию, которая требует этого подхода. Поскольку нет никаких интерфейсов, если яЯ не ожидаю определенного типа, неЯ должен перечислить каждый метод, который я могу вызвать, чтобы вызывающий знал, что можно передать? Или это просто крайний случай, который неправда придумать?

Ответы на вопрос(8)

Ваш ответ на вопрос