Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Наследование. Концепция объектно-ориентированного программирования предполагает возможность определять новые классы посредством добавления полей

Основные принципы ООП

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

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

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

Например, класс TEmployee (конкретный сотрудник компании) может быть порожден от рассмотренного выше класса TPersonal путем добавления поля FDepartment (отдел). Объявление класса TEmployee в этом случае может выглядеть так, как показано в листинге 4.7

Заключенное в скобки имя класса TPersonal показывает, что класс TEmployee является производным от класса TPersonal. В свою очередь класс TPersonal является базовым для класса TEmployee

Класс TEmployee должен иметь свой собственный конструктор, обеспечивающий инициализацию класса-родителя и своих полей. В листинге 4.8 приведен пример реализации конструктора класса TEmployee

В приведенном примере директивой i n h e r i t e d вызывается конструктор родительского класса. После этого присваивается значение полю классапотомка

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

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

Как видите, в конструкторе просто указывается директива inherited, a компилятор сам подставит за ней вызов конструктора родительского объекта с правильными параметрами

Однако при внимательном рассмотрении листинга 4.9, а точнее - описания объекта TPersonal и реализации его конструктора - у вас может возникнуть следующий вопрос: как же так, в описании объекта отсутствует указание класса-родителя, а в конструкторе мы обращаемся к конструктору базового класса? Дело в том, что в Delphi все классы выстроены в единую иерархию, на вершине которой стоит класс TObject. Когда при описании класса пропускается указание его родителя, то в этом случае компилятор считает, что родителем такого класса является TObject

<== предыдущая лекция | следующая лекция ==>
Инкапсуляция и свойства объектов | Полиморфизм
Поделиться с друзьями:


Дата добавления: 2014-01-13; Просмотров: 630; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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