- Понижающее приведение
-
В объектно-ориентированном программировании, понижающее приведение (англ. downcasting) или «уточнение типа» (англ. type refinement) — акт приведения типа, ссылающегося на базовый класс, к одному из его производных классов.
В большинстве языков программирования как правило существует возможность выполнять проверку при помощи механизма RTTI был ли приведен нужный тип ссылающегося объекта или порожден производный тип, и таким образом, происходит ошибка, если это не так.
Критика
Множество людей выступает за избегание использования понижающего приведения, так как в соответствии с принципом подстановки Барбары Лисков дизайн объектно-ориентированного программирования, требующий подобного, считается некорректным. Некоторые языки, как например, OCaml, полностью запрещают понижающее преобразование.
Распространенным примером плохо продуманного дизайна являются контейнеры высших типов, как контейнеры в языке Java, присутствовавшие до введения обобщений, требовавшие понижающего приведения вложенных объектов для их повторного использования.
См. также
- Полиморфизм подтипов
Дополнительные источники
- Статья «Downcasting is a Code Smell» Джереми Ди. Миллера (англ.)
- Статья «A downcasting tragedy» Джимми Богарда (англ.)
- Статья «Prefer polymorphism over instanceof and downcasting» Билла Веннерса (англ.)
- Статья «Downcasting in C#» Скотта Лайсла (англ.)
- Документ «Multiple downcasting techniques» (англ.)
- Наследование в Java — в статье кратко рассматриваются примеры повышающего и понижающего приведения и приводятся примеры их использования. (рус.)
- Идентификация типов во время выполнения (рус.)
Категория:- Объектно-ориентированное программирование
Wikimedia Foundation. 2010.