| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Философия программирования > ООП, динамическая типизация |
| Автор: 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 и т.д., и не учитывать их - себе дороже. Одна из частых ошибок программистов, пришедших с другой платформы/языка, - писать в новом синтаксисе, но в старой идеологии - чаще всего получается объединение недостатков... |