Отношение простого наследования классов.



Класс – это описание структуры и поведения объектов, имеющих одинаковые свойства, поведение и семантику.

Наследование – отношение при котором один класс разделяет структуру и поведение другого класса. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.

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

Простое наследование используется, когда существует одно отношение «родитель-потомок». То есть один потомок наследуется от одного родителя.

Что происходит в порожденном классе:

- Поля данных и методы– члены классанаследуются от базового класса.Можно считать, что они описаны в порожденном классе. Однако, возможность доступа к ним из методов производного класса и извне этого класса определяется спецификатором доступа (private, protected, public) к членам в базовом классе и спецификатором доступа к базовому классу, задаваемому при описании производного класса.

- В производном классе можно добавлять свои поля – члены класса.

- В производном классе можно добавлять свои методы – члены класса.

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

- Если Вы в производном классе переопределили метод, доступиз него к родительскому методуможно получить, используя оператор ::

- Если в классе-наследнике имя метода и его прототип совпадают с именем метода базового класса, то метод производного класса скрываетметод базового класса.

- Статические полянаследуются. Все потомки разделяют единственную копию статического поля. Статические методынаследуются.

- Ограничений в наследовании вложенных классов нет: внешний класс может наследовать от вложенного и наоборот.

 

Добавление, замещение и уточнение методов класса при наследовании.

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

Класс- опи­сание структуры и поведения объектов, связанных отношением общности.

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

Виды отношений между классами:

1. использова­ния (спецификации обобщения);

2. наследование;

3. дополнение.

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

Подкласс обычно расширяет или ограничивает существующую структуру и поведение своего суперкласса. Отношения одиночного наследования от суперкласса TelemetryData показаны на рис. Стрелки обозначают отношения общего к частному. В частности, CameraData - это разновидность класса SensorData, который в свою очередь является разновидностью класса TelemetryData.

 

Рис. Одиночное наследование.

Можно ожидать, что для некоторых классов будут созданы экземпляры, а для других - нет. Наиболее вероятно образование объектов самых специализированных классов ElectricalData и SpectrometerData (такие классы называют конкретными классами). Образование объектов из классов, занимающих промежуточное положение (SensorData или тем более TelemetryData), менее вероятно. Классы, экземпляры которых не создаются, называются абстрактными. Ожидается, что подклассы абстрактных классов доопределят их до жизнеспособной абстракции, наполняя класс содержанием.

Самый общий класс в иерархии классов называется базовым. В большинстве приложений базовых классов бывает несколько, и они отражают наиболее общие абстракции предметной области.

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

При наследовании структуры возможно расширение и сокрытие полей.

При наследовании поведения могут быть добавлены, переопределены и уточнены методы.

Замещение: виртуальное, невиртуальное.

Невиртуальное замещение – адрес методов определяется на момент трансляции кода.

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

Виртуальное замещение - адрес методов определяется на момент выполнения кода.

Механизм позднего связывания: когда разрешение ссылок на метод происходит на этапе выполнения программы в зависимости от конкретного типа объекта, вызвавшего метод.

Для определения виртуального метода в С++ используется спецификатор virtual.

Уточнение метода – уточняющий метод выполняет метод суперкласса и добавляет некоторые действия.

1.Порождение подклассов для специализации – полностью выполняется принцип подстановки. Существует различие между понятиями «тип» и «класс»: 2 класса принадлежат одному типу, если они реализуют один и тот же интерфейс.

2.Порождение класса для спецификации. Родительский класс – абстрактный, подклассы должны обеспечить реализацию поведения, заложенную в суперклассе.

3.Порождение с целью конструирования. Подкласс наследует структуру и поведение родительского класса, но не является его подтипом, при этом не поддерживается принцип подстановки.

4.Порождение классов для обобщения. Подкласс является более общим, чем суперкласс.

5.Порождение классов для расширения. Добавление структуры и поведения класса.

6.Порождение классов для ограничения. Возможности подкласса ограничены, по сравнению с родительским классом.

7.Порождение классов для варьирования. Дочерний и родительский класс можно поменять местами в иерархии наследования.

8.Порождение классов для комбинирования. Множественное наследование.

 


Дата добавления: 2018-06-01; просмотров: 218; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!