Найти в Дзене
Programmer

Основы программирования. Коробки от объектов расширяющего наследования.

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

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

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

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

На рисунке наглядно показана универсальность коробок базового класса или интерфейса для всех объектов-наследников и причина этого явления:

Картинка. Коробки от объектов при расширяющем наследовании.

Теперь кратко поясню изображенные элементы на рисунке. Слева вы видите базовый объект наследования серого цвета, вокруг него обрисована красной линией коробка от объекта-предка.

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

Справа на рисунке вы видите несколько расширяющих наследующих объектов разного цвета от базового серого объекта слева рисунка, то есть все эти объекты-наследники содержат внутри себя часть, которая у всех одинакова по типу, она на рисунке справа также серого цвета. У одного такого объекта красной линией нарисована расширенная коробка, которая легко приводится к базовой коробке "общей" части всех объектов, которая нарисована слева красной линией вокруг серого базового объекта.

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

Еще одна важная деталь! Коробки могут содержать любые части любых по форме объектов, но они не могут обращаться к тем элементам объектов, которые находятся за пределами коробок, то есть если нужно обратиться к элементам объекта за пределами коробки, то требуется приведение коробок либо к коробкам от целого объекта, либо к коробкам от другой части объекта! Запомните! Все коробки могут обращаться только к элементам внутри себя, а хранить могут любые объекты любых размеров! При этом указатели могут содержать часть пустого пространства без объектов или "голую память", а ссылки могут охватывать только память с объектами или части объектов!

Благодарю за внимание, данная статья с рисунком вам еще сильнее поможет навсегда понять мир наследования объектов и коробок всех типов, а это вас приблизит к программисту-асу совсем близко.

Подписывайтесь, комментируйте, ставьте лайки...