Смекни!
smekni.com

Информационные системы 3 (стр. 12 из 14)

uses

unit1, unit2;

const

const1 = value1;

const2 = expression1;

type

type1 = type_def1;

var

var_id1 : type_def1;

var_id2 : type_def2;

procedure proc_id1;

function func_id1 : type_def2;

implementation //Блокреализации

uses

unit3, unit4;

const

const3 = value2;

type

type2 = type_def3;

var

var_id3, var_id4 : type_def4;

procedure proc_1;

begin

end;

function func1 : type_def5;

begin

end;

procedure proc_id1;

begin

end;

function func_id1 : type_def2;

begin

end;

end.

Заголовок модуля состоит из ключевого слова unit и имени модуля, которое обязательно должно совпадать с именем файла. Заголовок является обязательным.

Блок интерфейса содержит описание констант, типов, переменных, процедур и функций, которые будут доступны в других программах и модулях. В блоке интерфейса описываются только заголовки процедур и функций. Их текст приводится в разделе реализации.

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

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

В основе объектно-ориентированного программирования лежит идея объединения в одной структуре данных и действий, которые выполняются над этими данными.

В объектно-ориентированном программировании базовыми единицами программ и данных являются классы.

13.2.1. Основные понятия

Классы

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

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

В ObjectPascal определен структурный тип class.

Тип class обязательно должен быть описан как пользовательский тип в разделе type, например:

type

TMyClass = Class

field1: type_definition1;

field2: type_definition2;

procedure method1;

function method2 : type_definition3;

end;

Затем в разделе var может быть объявлена переменная объектного типа:

var

Object1 : TMyClass;

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

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

Объекты

Объектом или экземпляром класса называется переменная объектного типа.

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

13.2.2. Основные концепции

Объектно-ориентированное программирование базируется на трех основных понятиях: инкапсуляции, наследовании и полиморфизме.

Инкапсуляция – комбинирование данных с процедурами и функциями, которые манипулируют этими данными.

Например, окружность описывается координатами центра и радиусом (данные). Кроме того, над окружностью можно проделывать различные действия (методы):

- вычислять ее длину и площадь ограниченного ею круга;

- проверять находится ли некоторая точка внутри данной окружности и т.п.

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

type

TCircle = class

x,y : double;

r : double;

function area : double; // Вычислениеплощадиокружности

function circumference : double; // Вычислениедлиныокружности

functioninside (x,y : double) : Boolean; //Проверка нахождения точки внутри окр-ти

end;

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

var

Circle : TCircle;

Доступ к полям класса осуществляется следующим образом:

…Circle.x:=5;Circle.y:=20;Circle.r:=10;… …with Circle do begin x:=5; y:=20; r:=10;end;…

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

A:=Circle.area Методу area не нужно передавать никаких данных. Подразумевается, что метод применяется к экземпляру класса, внутри которого он определен. Таким образом, для расчета площади метод area использует данные, содержащиеся в поле r данного экземпляра класса.

Инкапсуляция позволяет обеспечить защиту данных от внешнего вмешательства или неправильного использования.

Наследование – это возможность использования уже определенных классов для построения иерархии классов, производных от них.

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

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

TRing = class (TCircle)

r2 : double;

function area : double; // Вычислениеплощадикольца

functioncircumference2 : double; // Вычисление длины внутренней окружности

functioninside (x,y : double) : Boolean; // Проверка нахождения точки внутри кольца

end;

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

Если имена методов, объявляемых в дочернем классе, совпадают с именами полей или методов, то говорят, что они перекрываются.

В ObjectPascal при объявлении объектного типа имя наследуемого класса указывается в круглых скобках после слова class. По умолчанию считается, что класс, определяемый пользователем, является наследником от класса TObject.

Например, объявления, представленные ниже идентичны.

TMyClass = class

TMyClass = class (TObject)

Полиморфизм - это свойство родственных классов решать схожие по смыслу проблемы разными способами. В рамках ObjectPascal поведенческие свойства класса определяются набором входящих в него методов.

Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства.

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

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

13.2.3. Поля, свойства и методы

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

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

Поля

Поля класса представляют собой переменные, объявленные внутри класса. Объявление полей класса должно предшествовать объявлению методов и свойств.

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

TSampleClass = class (TObject) //Объявление нового класса

FSample : integer; //Полекласса

procedure SampleMethod; //Методкласса

end;

Свойства

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

В этом и заключается отличие свойств от полей, к которым можно обращаться непосредственно.

Для объявления свойств используется служебное слово property.

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

TSampleClass = class (TObject)

FSample : integer;

procedure SetProp : TPropType; //Методзаписи

function GetProp (NewValue : TPropType); //Методчтения

property SampleProp : TPropType read GetProp write SetProp; //Объявлениесвойства

end;

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

SampleObject.SampleProp:= NewValue;

Value:= SampleObject.SampleProp;

Синтаксически обращение к свойству может выглядеть точно так же, как и обращение к полю.

Методы

Методы предназначены для манипулирования данными, входящими в состав класса. Фактически методы представляют собой обычные процедуры и функции, которым разрешен доступ ко всем полям класса.

Методы объявляются в описании класса после объявления полей.

Тема 14. Среда разработки Delphi

14.1. Быстрая разработка приложений

Быстрая разработка приложений (RAD – RapidApplicationDevelopment) основывается на визуализации процесса создания программного кода.

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

Компоненты Delphi поддерживают PME-модель (Property, Method, Events – свойства, методы, события), позволяющую изменять поведение компонентов без необходимости создания новых классов.