Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOSY / 1 блок-все.doc
Скачиваний:
123
Добавлен:
09.05.2015
Размер:
1.38 Mб
Скачать

8.2 Понятие класса в языке ObjectPascal. Структура класса: поля, методы, свойства. Доступ к структурным элементам класса. Иерархия наследования классов. Конструктор и деструктор класса.

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

<Имя потомка> =

object<имя предка>

поле;

поле;

метод;

метод;

end;

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

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

Структура класса гораздо сложнее записи, поэтому внутри класса выделены специальные области:

Type

Имя класса = class (имя предка)

Published {Специальная область элементов, доступных для инспектора объектов}

…..

Private {Область закрытых элементов, доступных только внутри методов данного}

….. {класса и подпрограмм данного модуля, недоступны потомках}

Protected {Область закрытых элементов, доступных методам класса и его потомков}

…..

Public {Область элементов, доступных в любом модуле проекта}

…..

Automated {Секция автоматизации - элементы, необходимые для технологии OLE }

…..

end;

Каждый интерфейс обеспечивает следующие уровни доступа:

Private(закрытый). Объявленные переменные и методы доступны только для того кода , который находится в блоке реализации самого объекта. Директива Private скрывает особенности реализации объекта от пользователей и защищает члены этого объекта от доступа и изменения извне.

Protected (защищенный). Члены класса доступны объектам, производным от данного класса. Это позволяет скрыть внутреннее устройство объекта от пользователя и обеспечить необходимую гибкость, и эффективность доступа к полям и методам объекта для его потомков.

Public(скрытый). Члены объекта доступны в любом месте программы. Конструкторы и деструкторы всегда должны быть объявлены как public.

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

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

О. Поле – элемент структуры, обозначающий хранение простых данных.

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

Поля имеют тип, обычно это стандартные типы (число, строка, знак, логический тип, массив). Но можно использовать и сложную структуру – например другой класс. Главная особенность поля – способ доступа к данным. Здесь разрешен прямой доступ к данным. Принцип инкапсуляции требует, чтобы к полям обращались только через свойства и методы, поэтому разумно размещать поля в областях Private и Protected. Класс потомок получает все поля всех своих предков и может дополнять их своими, но не может их переопределять (по сравнению например с методами) или удалять.

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

Методы представляют собой процедуры и функции, принадлежащие классу. Объявляются внутри описания объекта. Они определяют поведение класса.

procedure <Заголовок> (<Параметр1>, <Параметр2>: integer);

Объявление метода внутри объявления объектного типа содержит только заголовок. Тело метода определяется вне объявления объекта. Его заголовок дожжен содержать имя объекта, которому принадлежит метод.

procedure <ТипОбъекта.Метод> (<Параметр1>, <Параметр2>: integer);

begin

end;

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

При описании класса методы описываются в 2 этапа:

Заголовок метода помещается в ту или иную область описания класса.

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

В классе всегда должны присутствовать 2 важнейших метода: конструктор и деструктор.

Конструктор – метод, который создает конкретный объект - экземпляр класса. Деструктор – метод, который удаляет конкретный объект из памяти.

Конструктор – спец. метод, инициализирующий объект, содержащий виртуальные методы, он объявляется специально зарезервированным словом constructor. Он инициализирует объект путем установления связи между объектом и специальной таблицей виртуальных методов, содержащей адреса кодов, реализующих Вирт. методы. Может использоваться для инициализации полей данных объекта.

Деструктор – спец. метод, освобождающий память «кучи» (Вся динамическая память рассматривается как подобная стеку структура, называемая кучей) от динамических объектов. Использует слово destructor.

При проектировании класса можно создать произвольное кол-во др. методов, необходимых для решения конкретных задач.

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

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

О. Свойства – поле процедурного типа. Свойства должны регулировать доступ к полям. Для этого у каждого свойства есть поле и 2 метода – чтения (read) и записи (write). Обычно свойство связано с полем и указывает те методы класса, которые обеспечивают чтение значения из поля и запись нового значения в поле. Формат записи заголовка свойства:

Property имя свойства: тип Read метод чтения из поля Write метод записи в поле Default значение по умолчанию;

При работе программы свойство используется как обычное поле, но фактически ввод и чтение данных возможно только через указанные процедуры-методы. Если нет необходимости в специальных методах, то можно указывать вместо процедуры (метода) имя поля. Если поле доступно только для чтения то не указывается метод записи и наоборот. Значение по умолчанию присваивается полю свойства, если оно не было определено (что удобно для инициализации объекта). Принято имя метода чтения начинать с Get, а метода записи с Set. Для того чтобы свойство было доступно инспектору объектов его необходимо поместить в область Pablished.

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

Соседние файлы в папке GOSY