русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-09; просмотров: 893; Нарушение авторских прав


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

 

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

 

Это означает, что новые классы наследуют структуру и поведение существующих классов. Существующие классы называются базовыми классами, а новые классы, которые наследуют их структуру и поведение – подклассами, классами-потомками или производнымиклассами.

 

Лодка
Базовый класс

 
 

 

 


Подводная лодка
Моторная лодка
Парусная лодка
Производные

классы

 

Рис. 1 – Базовые и производные классы

 

Наследование моделирует связь "это – является". Следовательно, можно сказать, что производный класс в свою очередь является базовым классом. Чтобы проверить является ли определенная наследственная связь корректной, нужно ответить на вопрос: "Может ли производный класс быть использован вместо базового класса?". Если ответ отрицательный, значит связь некорректна. Например, "Ладья – Это Шахматная Фигура".

 

В языках программирования наследование означает:

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



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

Класс может наследовать черты надклассов, отстоящих от него на несколько уровней. Например, собаки являются подклассом класса млекопитающих, а млекопитающие – подклассом типа животных. Следовательно, класс собак наследует свойства и всех млекопитающих, и всех животных.

Подклассы могут переопределять поведение, унаследованное от родительского класса. Например, класс утконосов переопределяет процедуру размножения, унаследованную от класса млекопитающих, поскольку утконосы откладывают яйца.

 

Рассматривая связь между типом данных, связанным с родительским классом, и типом данных, связанным с классом-потомком, можно утверждать следующее:

– представители подкласса должны владеть всеми областями данных родительского класса;

– представители подкласса должны обеспечивать, по крайней мере, через наследование (если нет явного переопределения), всех функциональных обязанностей родительского класса. У нового класса также могут появляться дополнительные обязанности;

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

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

К связи вида "класс – подкласс", для которой выполнен принцип постановки, часто применяется термин "подтип". То есть подтип определяется в терминах поведения, а не структуры. Тип В является подтипом А, если в любой ситуации можно подставить экземпляр класса В вместо экземпляра класса А без каких-либо видимых изменений в поведении.

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

 

Ход работы:

Задание 1. Наберите и проанализируйте программу. Определите в данной программе принципы наследования созданных классов. Объясните результаты выполнения программы.

PROGRAM OO_Beispiel_02;

USESCrt;

TYPE

Person-OBJECT Name,

Vorname: STRING; Groesse: REAL; CONSTRUCTOR Init; PROCEDURE Einlesen; PROCEDURE Ausgeben; FUNCTION Gewicht: REAUVIRTUAL; END;

{ Методы для класса Person }

CONSTRUCTOR Person.Init;

{ Применяется для инициализации используемых данных}

BEGIN

Name :- "; { Пустая строка }

Vorname :- ";

Groesse:=0.0; END;

PROCEDURE Person.Einlesen; BEGIN

WriteLn('Фамилия');

ReadLn(Name);

WriteLn ('Имя? ');

ReadLn(Vorname);

Write('PocT в метрах? ');

ReadLn(Groesse); END;

PROCEDURE Person.Ausgeben; BEGIN

Write Ln;

WriteLn ('Фамилия: ');

Write(Name);

Write(' Имя:');

Write(Vorname);

WriteLn(' Идеальный вес: ',Gewicht:3:1, 'кг.'); END;

FUNCTION Person.Gewicht: REAL; BEGIN

Gewicht:- Groesse * 100 - 100; END;

{ Обьявление подкласса Frau } TYPE

Frau- OBJECT(Person)

FUNCTION Gewicht: REAL;VIRTUAL; END;

{ Описание методов для подкласса Frau } FUNCTION Frau.Gewicht: REAL; BEGIN

Gewicht-Person.Gewlcht * 0.85; END;

{ Обьявление подкласса Mann } TYPE

Mann- OBJECT(Person)

FUNCTION Gewicht: REAL;VIRTUAL; END;

{ Описание методов подкласса Mann } FUNCTION Mann.Gewlcht: REAI; BEGIN

Gewicht:- Person.Gewicht * 0.90; END;

{ Обьявление экземпляров} VAR

Weiblich :Frau;

Maennlich :Mann;

CH :CHAR;

BEGIN

REPEAT

CH:-ReadKey;

CH:-UpCase(CH); UNTIL (CH - 'M') OR (CH - 'W');

Write Ln;

IFCH-'W THEN WITH Weiblich DO BEGIN Einlesen; Ausgeben; END {THEN WITH} ELSE WITH Maennlich DO BEGIN

Einlesen; Ausgeben; END; {ELSE WITH}

ReadLn; { Ожидание нажатия клавиши Enter } END.



<== предыдущая лекция | следующая лекция ==>
Виды отношений между классами | Задание для самостоятельного решения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.234 сек.