Мегаобучалка Главная | О нас | Обратная связь


Наследование. Абстрактный тип данных. Перекрытие имен при наследовании. Наследование и повторное использование кода.



2019-08-13 449 Обсуждений (0)
Наследование. Абстрактный тип данных. Перекрытие имен при наследовании. Наследование и повторное использование кода. 0.00 из 5.00 0 оценок




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

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

Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками,наследниками или производными классами (англ. derived class).

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

Множественное наследование

Основная статья: Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Python и Эйфель. Множественное наследование поддерживается в языке UML.

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов. Практически всегда можно обойтись без использования данного механизма. Однако, если такая необходимость все-таки возникла, то, для разрешения конфликтов использования наследованных методов с одинаковыми именами, возможно, например, применить операцию расширения видимости — «::» — для вызова конкретного метода конкретного родителя.

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

· повышает надежность программ,

· повышает степень абстракции программ,

· обеспечивает независимую разработку отдельных частей (классов) программы.

Запрет наследования

Иногда при разработке класса нужно запретить возможность наследования от него. Для этого используется ключевое слово sealed, которое указывается при объявлении класса. Данный механизм может понадобиться при разработке какого-то служебного класса. Например, уже известный вам класс Console библиотеки .NET Framework объявлен с использованием sealed.

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

При наследовании активно используется перекрытие методов, которое получает здесь специфический смысл перепрограммирования базового класса. Если программист определяет в производном классе метод с тем же именем, что и базовый, то последний «закрывается» для доступа через производный класс. В новом методе он может записать любые действия, в том числе вызвать метод базового класса, но уже по полному имени в виде A :: F ().

 

//------- наследование как «перепрограммирование класса»

class A {

public: int a;

void F(){ a++; }};

class B {

public: int b; // Перекрытие метода

void F (){ A :: F (); b++; }}; // Явный вызов перекрытого метода

Перекрытие методов дает нам ключ к пониманию технологического смысла наследования. Базовый класс реализует общую, абстрактную сущность, а производный класс ее конкретизирует, т.е. реализует сущность частную. Например, класс «рыба» - базовый, а «селедка» - производный. Конкретизация класса достигается его перепрограммированием: путем написания новых методов, наследования и перекрытия уже существующих.

 

 

Конструкторы и наследование.



2019-08-13 449 Обсуждений (0)
Наследование. Абстрактный тип данных. Перекрытие имен при наследовании. Наследование и повторное использование кода. 0.00 из 5.00 0 оценок









Обсуждение в статье: Наследование. Абстрактный тип данных. Перекрытие имен при наследовании. Наследование и повторное использование кода.

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (449)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)