Skip to main content

Что такое иерархия классов?

Иерархия классов, также называемая таксономией классов, представляет собой группу связанных классов, которые связаны посредством наследования для выполнения аналогичных действий. Верхней частью иерархии может быть один базовый класс, из которого получены все остальные классы, находящиеся ниже его, или иерархия может иметь несколько базовых классов, функциональные возможности которых объединяются позже в один или несколько производных классов. Отношения между классами могут быть проиллюстрированы как деревья, и каждое меньшее дерево в рамках большой таксономии также может рассматриваться как иерархия.

Не все иерархии классов могут иметь несколько корней, и структура любой иерархии классов в значительной степени зависит от языка, на котором она написана. C ++ допускает множественное наследование, поэтому сложные иерархии могут быть построены с несколькими корнями и несколькими деревьями, которые сливаются друг с другом. Java®, с другой стороны, ограничивается одиночным наследованием, поэтому его классовые отношения обычно проще, построены как относительно автономные деревья с одним корнем. Наследование интерфейса может добавить некоторую сложность иерархии классов в Java®, но интерфейсы почти никогда не вызываются в такой сложной среде, что это было бы подобно слиянию деревьев вместе.

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

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

Хотя иерархия классов может быть полезным инструментом для организации кода и инкапсуляции функциональности, могут быть случаи, когда слишком глубокое погружение в иерархию может фактически запутать код, а не прояснить его и упростить его сопровождение. Построение прочных отношений между многими классами требует определенного предвидения; в то время как поначалу может быть проще разбить код на множество маленьких кусочков, позже с этими маленькими кусочками может стать сложнее работать. При правильной сборке иерархия классов помогает разработчикам и пользователям определять, как работают классы. Если оно построено без обслуживания и ясности, многие уровни наследования могут сбивать с толку, оглядываясь назад и понимая.