Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




Основой объектно-ориентированного программирования является объект. Объект состоит из трёх основных частей:

1) Имя (например, автомобиль);

2) Состояние или переменные состояния (например, марка автомобиля, цвет, масса, число мест и т. д.);

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

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

Для объявления класса используется конструкция:

Type
    <название класса>= class(<имя класса родителя>)

<поля и методы класса>

private
    <поля и методы, доступные только в пределах модуля>

published

<поля и методы, видимые в инспекторе объектов>

end;

В качестве имени класса можно использовать любой допустимый в FreePascal  идентификатор. Имя класса родителя — имя класса, наследником которого является данный класс, это необязательный параметр, если он не указывается, то это означает, что данный класс является наследником общего из предопределённого класса TObject.

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

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

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

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

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

Поля и методы, описанные до указания имени секции, являются публичными (public).

 Поля могут быть любого типа, в том числе и классами. Объявление полей осуществляется так же, как и объявление обычных переменны полей :
    поле 1: тип_данных;

поле2: тип_данных;

Методы в классе объявляются так же, как и обычные подпрограммы:
    function метод 1 (список параметров): тип результата;

procedure метод2 (список параметров);

Описание процедур и функций, реализующих методы, помещается после слова implementation того модуля, где объявлен класс. Объявление переменной типа class называется созданием (инициализацией) объекта (экземпляра класса). Экземпляр класса объявляется в блоке описания переменных:

var имя_переменной : имя_класса;

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

имя переменной.поле1:=выражение;

имя переменной.метод1(список параметров);

Также можно использовать оператор With:

With имя_переменной do begin

полег: выражение;

метод! (список параметров );

end;

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

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

Конструктор — это специальный метод, создающий и инициализирующий объект. Объявление конструктора имеет вид:
constructor Create;

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

 Деструктор — это специальный метод, уничтожающий объект и освобождающий занимаемую им память. Объявляется деструктор следующим образом:

destructor Destroy;

Если в программе какой-либо объект больше не используется, то оператор

имя_переменной_типа_класс.fгее;
с помощью метода free вызывает деструктор и освобождает память, занимаемую полями объекта имя_переменной типа_класс.










Последнее изменение этой страницы: 2018-04-12; просмотров: 375.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...