Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
08.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
392.7 Кб
Скачать

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

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

Наследование – главное свойство объектно-ориентированного программирования. Оно позволяет многократно применять программы, разработанные для родительских объектов, к дочерним. Методы родительского класса имеют доступ только к тем полям, которые унаследованы от родительского класса, но не к полям дочернего класса.

Существует два вида наследования:

  • простое наследование, когда дочерний объект наследует характеристики от одного родительского класса;

  • множественное наследование, когда дочерний объект наследует характеристики более чем одного родительского класса.

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

Функция конструктора для класса, который наследует поведение другого класса, имеет две специальных характеристики:

  • она обычно вызывает функцию конструктора родительского класса, чтобы создать «наследованные» поля;

  • вызов функции такого класса несколько отличается от стандартного, поскольку учитывает как новый, так и родительский класс.

Класс может наследовать все поля и методы родительского класса, добавить свои поля и методы и переопределить часть методов родительского класса на свои. Наследование осуществляется вызовом функции class() в конструкторе класса с указанием имен всех родительских классов:

Предположим, что уже имеется класс "figure" с единственным атрибутом – координатами центра. Реализация конструктора класса "circle", который наследует классу "figure" и добавляет свой атрибут – радиус:

function p = circle(x, y, R)

center = figure(x, y);

p.r = R;

p = class(p, 'circle', center);

end

Отметим, что созданный объект "circle" будет генерировать логическое значение "истина" при передаче его в функцию isa() как при проверке, является ли он кругом, так и при проверке, является ли он геометрической фигурой.

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

Множественное наследование. В случае множественного наследования класс наследует атрибуты от более, чем одного родительского класса. Дочерний объект наследует поля, как поля родительских классов, так и поля собственной структуры.

Множественное наследование может объединять более одного поколения. Например, каждый из родительских объектов может наследовать поля от множественных прародительских объектов. Множественное наследование реализовано в конструкторах путем вызова функции class с более, чем тремя аргументами:

obj = class(structure, 'class_name', parent1, parent2,...)

Можно объединять любое количество аргументов родительского класса в соответствии со списком входных аргументов.

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

Агрегирование объектов. В дополнение к наследованию система MATLAB поддерживает соединение частей в целое, или агрегирование. То есть один объект может включать другой объект в качестве одного из полей структуры. Объект класса rational может использовать два объекта из класса polynom, например, для задания числителя и знаменателя передаточной функции. Поскольку доступ к полям структуры возможен только изнутри метода, то вызов метода для включенного объекта возможен только изнутри метода для внешнего объекта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]