Наследование

April 7, 2010 by admin Комментировать »

Наследование является одним из фундаментальных понятий объектно-ориентированных систем. Под этим термином понимается возможность передачи данных и средств исполнения от родительского объекта. Вместо того чтобы создавать новый объект с самого начала, вы используете уже готовый объект и дополняете его лишь теми чертами, которые вам необходимы. Родительский объект, на основе которого строится новый объект, называется базовым классом (base class), а объект-потомок — производным классом (derived class).

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

Во-первых, наследование иллюстрирует то, что в объектно-ориентированных решениях называется отношением сущностей. Если в системе существуют объекты animal (животное) и cat (кошка), то объект cat может быть унаследован от объекта animal, поскольку кошка относится к животным. В отношениях наследования базовый класс всегда является более общим, чем производный. Например, класс cat мог бы наследовать функцию sleep (спать) от класса animal и при этом иметь собственную улучшенную версию функции eat (питаться). В реальном мире подобные отношения встречаются не так уж часто.

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

Неопытные программисты ошибочно полагают, что в объектно-ориентированном программировании «положено» широко использовать наследование и поэтому применяют его слишком часто. В действительности наследование следует использовать только в тех ситуациях, когда его преимущества действительно необходимы (см. раздел «Полиморфизм и виртуальные функции»).

В .NET Common Language Runtime все объекты являются производными от базового класса object, причем поддерживается только одиночное наследование (то есть объект может быть производным только от одного базового класса). Эти ограничения не позволяют использовать некоторые распространенные идиомы, существующие в языках с множественным наследованием (например, C++), но зато они предотвращают многие проблемы и заметно упрощают программы. Как правило, такой компромисс оказывается оправданным. Среда .NET Runtime обеспечивает возможность множественного наследования в форме интерфейсов, не имеющих собственной реализации. Интерфейсы рассматриваются в главе 10.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты