NetBeans и Xdebug в Linux

Вы боретесь с классической проблемой ковариации (и контравариантности) ООП, см. wikipedia : многое, поскольку этот факт может игнорировать интуитивные ожидания, математически невозможно разрешить замену производных классов вместо базовые для изменяемых (назначаемых) аргументов (а также контейнеров, чьи позиции можно присваивать по той же причине), все еще соблюдая принцип Лискова . Почему это так набросано в существующих ответах и ​​более подробно изучается в этих статьях и ссылках на них.

Языки ООП, которые, как представляется, делают это, оставаясь традиционно статически типичными, «обманывают» (вставляя скрытую динамику проверять тип, или требовать проверки всех источников во время компиляции); фундаментальный выбор: либо отказаться от этой ковариации и принять недоумение практикующих (как это делает C # здесь), либо перейти к подходу с динамической типизацией (как к самому первому языку ООП, Smalltalk), или перейти к неизменяемому (однострочному) задание), как и функциональные языки (по неизменности, вы можете поддерживать ковариацию, а также избегать других связанных головоломок, таких как тот факт, что вы не можете иметь прямоугольный подкласс Rectangle в мире изменяемых данных).

13
задан aserwin 16 October 2012 в 19:11
поделиться