Объектно-Ориентированное Программирование в Delphi (ООП): классы и объекты

Объектно-Ориентированное Программирование в Delphi (ООП): классы и объекты

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

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

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

 

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

 

В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса TPerson путем добавления поля FDepartment (отдел).

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

 

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

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


Первая инструкция создает объект типа TEmployee, вторая — устанавливает значение свойства, которое относится к родительскому классу.

 


 

Директивы protected и private

 

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

Элементы класса, объяапенные в секции protected, доступны только в порожденных от него классах. Область видимости элементов класса этой секции не ограничивается модулем, в котором находится описание класса.Обычно в секцию protected помещают описание методов класса.

 

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


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

  

Полиморфизм и виртуальные методы

 

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

Пусть определены три класса, один из которых является базовым для двух других:

 

В каждом из этих классов определен метод info. В базовом классе при помощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает соответствующий метод родительского класса (метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override).

Ниже приведено определение метода info для каждого класса.


Так как оба класса порождены от одного и того же базового, объявить список студентов и преподавателей можно так (здесь следует вспомнить, что объект — это указатель):

 list: azrray[1..SZL] of TPerson;

 

Объявить подобным образом список можно потому, что язык Delphi позволяет указателю на родительский класс присвоить значение указателя на дочерний класс. Поэтому элементами массива list могут быть как объекты класса Tstud, так и объекты класса TProf.

 

Вывести список студентов и преподавателей можно применением метода info к элементам массива. Например, так:


 

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

Следующая программа, используя рассмотренные выше объявления классов TPerson, Tstud и Tprof, формирует и выводит список студентов и преподавателей. Текст программы приведен в листинге 9.1, а диалоговое окно — на рис. 9.1. 

Листинг 9.1. Демонстрация полиморфизма

 

Процедура TForm1.Buttonlclick, которая запускается нажатием кнопки Добавить (Button1), создает объект list[ n ] класса Tstud или TProf. Класс создаваемого объекта опрелеляется состоянием переключателя RadioButton. Установка переключателя в положение студент (RadioButtoni) определяет класс TStud, а в положение преподаватель (RadioSutton2) — класс TProf. 

 

Процедура TForm1. Button2click, которая запускается нажатием кнопки Список (Button2), применяя метод info к каждому объекту списка (элементу массива), формирует строку, представляющую собой весь список.


Классы и объекты Delphi

 

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

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

 

Если сразу после запуска Delphi просмотреть содержимое окна редактора кола, то там можно обнаружить следующие строки: 

 

Это описание класса исходной, пустой формы приложения и объявление объекта — формы приложения.

 

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

 

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

dle

Помоги проекту! Расскажи друзьям об этом сайте: