Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > ООП, динамическая типизация


Автор: wladF 10.1.2011, 20:02
Допустим есть 3 класса, A и B являются разновидностью одной сущности, C логически не связан с ней.
Есть некая функция которая вызывает(точнее пытается) методы объектов этих классов
test(arg) {
   arg->draw()
}
a = new A
foo(a)
Но т.к. язык с дин. типизацией, нельзя гарантировать до последнего момента, есть ли у объекта arg нужный метод.

Например если этот код был бы на PHP, можно было немного изменить сигнатуру функции test, на
function test(I $arg), где I это общий интерфейс классов A и B, тем самым можно немного себя обезопасить при явной попытке передать туда "не верный"объект, даже если у него и есть этот метод draw.
Но тогда может возникнуть такая проблема, иногда нужно будет использовать и объект класса C в этой функции, который не хочется делать зависимым от интерфейса I, слишком обобщая несвязанные классы, либо создавать новые сущности(например Drawable), да и вообще проектировать сложные иерархии как-то особого желания нету.

Вопрос в следующем, стоит ли по полной использовать т.н. "утиную типизацию" либо пытаться делать ограничения, на подобии статической типизации? тем самым отчасти упрощая тестирование.


Автор: maxim1000 10.1.2011, 21:09
ИМХО, решать этот вопрос в отрыве от конкретного языка неправильно.

Каждый язык обрастает своей идеологией, best practices, bad practices и т.д., и не учитывать их - себе дороже. Одна из частых ошибок программистов, пришедших с другой платформы/языка, - писать в новом синтаксисе, но в старой идеологии - чаще всего получается объединение недостатков...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)