Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Полиморфизм

Зачем нужны директивы protected и private

Помимо объявления элементов класса (полей, методов, свойств) описание класса, как правило, содержит директивы p r o t e c t e d (защищенный) и p r i vate (частный), которые устанавливают степень видимости элементов класса в программе

Элементы класса, объявленные в секции p r o t e c t e d, доступны только в порожденных от него классах. Область видимости элементов класса этой секции не ограничивается модулем, в котором находится описание класса

Обычно в секцию p r o t e c t e d помещают описание методов класса

Элементы класса, объявленные в секции p r i v a t e, видимы только внутри модуля. Эти элементы не доступны за пределами модуля, даже в производных классах. Обычно в секцию p r i v a t e помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, помещают в секцию protected

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

Из прошлого примера вы, вероятно, заметили одну важную особенность

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

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

Из прошлого примера у нас определены два класса: TPersonal и TEmployee, причем первый является базовым для второго

В базовом классе определен метод Showlnfo, обеспечивающий вывод информации (имени и возраста) о сотруднике на экран. Чтобы дочерний класс (потомок) мог использовать метод с таким же именем, суть которого составляли бы несколько другие действия, данный метод в базовом классе стоит объявить с директивой v i r t u a l. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. Ниже в листинге 4.10 приведен пример описания базового класса с использованием директивы virtual

В дочернем классе TEmployee также определен свой метод Showlnfo (листинг 4.11), который замещает соответствующий метод родительского класса. Метод порожденного класса, замещающий виртуальный метод •родительского класса, помечается директивой override

Несколько слов о классах и объектах Delphi

Кратко рассмотрев основные принципы ООП, можно немного по-другому взглянуть на исходный код программ, написанных на языке Delphi. После создания нового проекта (например, проекта для платформы Win32) исходный код выглядит так, как показано в листинге.4.12

Для реализации интерфейса будущей программы среда разработки Borland Delphi 2005 использует библиотеку классов, содержащую большое количество разнообразных классов. С помощью этих классов описывается форма приложения, а также различные компоненты формы (командные кнопки, поля редактирования, метки и т.д.)

Во время проектирования формы приложения среда разработки автоматически добавляет в текст программы необходимые объекты. Когда программист, добавляя необходимые компоненты, формирует будущее диалоговое окно, Delphi формирует описание класса формы. Когда программист создает функцию обработки события формы или ее компонента, Delphi добавляет объявление метода в описание класса формы приложения

В листинге 4.13 приведен измененный исходный код проекта после добавления на форму компонента-кнопки (TButton) и описания функции обработки события Click этой кнопки

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

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

<== предыдущая лекция | следующая лекция ==>
Наследование. Концепция объектно-ориентированного программирования предполагает возможность определять новые классы посредством добавления полей | По охране труда в отрасли
Поделиться с друзьями:


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


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



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




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