Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi_02_05 [2012].doc
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
84.99 Кб
Скачать

Лабораторная работа № 5

Объектно-ориентирование программирование в Delphi

Теоретическая часть

Характеристика объектно-ориентированного программирования

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

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

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

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

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

Классы Delphi

Класс - это тип данных, определяемый пользователем. Класс определяет структуру, состоящую из полей, методов и свойств. Поля класса синтаксически и семантически идентичны полям записи. Методы класса – это процедуры и функции, определенные внутри класса. Свойства класса – это механизм доступа к полям класса через функции чтения и записи. Экземпляры класса создаются вызовом специального метода, называемого конструктором. Конструктор, как правило, имеет имя Create. В классе может также присутствовать специальный метод деструктор, вызываемый при уничтожении экземпляра класса и освобождении занимаемой им памяти. Деструктор, как правило, имеет имя Destroy. Возможно создание методов класса, которые доступны через идентификатор класса и не связаны с конкретными экземплярами.

Видимость членов класса

Каждый член класса имеет атрибут видимости, который обозначается следующими ключевыми словами: private, protected, public, published. Обычно члены класса объединяются в разделы по значению атрибута видимости.

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

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

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

Раздел published (публикуемый) содержит открытые свойства, которые появляются в процессе проектирования на странице свойств Инспектора Объектов и которые, следовательно, пользователь может устанавливать в процессе проектирования. Раздел published может присутствовать только в классах, объявляющих новый класс компонента.

Объявление класса

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

type ИмяКласса = class (ИмяБазовогоКласса)

private

... // закрытые члены класса

protected

... // защищенные члены класса

public

... // открытые члены класса

published

... // публикуемые члены класса

end;

Имя класса может быть любым допустимым идентификатором, но в Delphi принято идентификаторы большинства классов начинать с символа «Т». Имя базового класса объявлять не обязательно. Если имя базового класса не указывается, то предполагается, что данный класс является непосредственным наследником класса TObject. Следующие объявления являются эквивалентными:

type TMyClass = class

end;

и

type TMyClass class (TObject)

end;

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

unit MyUnit;

interface

type TMyClass

Field: Integer

function Func(Param: Integer): Integer;

end;

implementation

function TMyClass.Func(Param: Integer): Integer;

begin

// тело метода Func

end;

end.

При объявлении в классе полей и методов надо выдерживать одно ограничение: объявления полей в каждом разделе класса должно предшествовать объявлениям методов или свойств в том же разделе класса.

Опережающее объявление класса

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

type TFigure = class; // опережающее объявление

TDrawing = class

Figure: TFigure;

...

end;

TFigure = class // определяющее объявление

Drawing: TDrawing;

...

end;

Первое объявление класса TFigure называется опережающим. Оно необходимо для того, чтобы компилятор нормально воспринял объявление поля Figure в классе TDrawing.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]