Автор работы: Пользователь скрыл имя, 05 Ноября 2009 в 13:11, Не определен
Лекции
…
end
При разработке программ в среде Delphi широко используются модули. Они позволяют объединить логически связанные типы данных, переменные, процедуры и функции в один программный блок.
Все идентификаторы, описанные в модуле, могут быть использованы в других программных блоках. Для использования идентификаторов, описанных в модуле в программе, достаточно объявить имя модуля в разделе uses.
Структура
модуля Object Pascal имеет вид:
unit name_of_unit; //Заголовок модуля
interface //Блок интерфейса
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 и имени модуля, которое обязательно должно совпадать с именем файла. Заголовок является обязательным.
Блок интерфейса содержит описание констант, типов, переменных, процедур и функций, которые будут доступны в других программах и модулях. В блоке интерфейса описываются только заголовки процедур и функций. Их текст приводится в разделе реализации.
Блок реализации может содержать объявление констант, типов, переменных, процедур и функций. Все эти объявления доступны только в данном модуле. Также в разделе размещается реализация всех процедур и функций, заголовки которых объявлены в блоке интерфейса.
В основе объектно-ориентированного программирования лежит идея объединения в одной структуре данных и действий, которые выполняются над этими данными.
В
объектно-ориентированном
Классы
Класс – это структура данных, которая может содержать в своем составе переменные, функции и процедуры.
Переменные в зависимости от назначения, называются полями, или свойствами. Процедуры и функции, входящие в состав класса, называются методами.
В Object Pascal определен структурный тип class.
Тип
class обязательно должен быть описан
как пользовательский тип в разделе
type, например:
type
TMyClass = Class
field1: type_definition1;
field2: type_definition2;
procedure method1;
function method2 : type_definition3;
end;
Затем
в разделе var может быть объявлена
переменная объектного типа:
var
Object1 : TMyClass;
При объявлении класса вначале описываются поля, а затем методы. Поля класса являются переменными, входящими в состав его структуры. Они предназначены для использования внутри класса.
В
описании объектного типа присутствуют
только заголовки методов. Сами методы
описываются в разделе
Объекты
Объектом или экземпляром класса называется переменная объектного типа.
Чтобы объект мог обмениваться данными с другими объектами, используются свойства. Свойства объекта определяют его состояние. Изменение состояния объекта производится только через вызов методов этого объекта.
Объектно-ориентированное программирование базируется на трех основных понятиях: инкапсуляции, наследовании и полиморфизме.
Инкапсуляция – комбинирование данных с процедурами и функциями, которые манипулируют этими данными.
Например, окружность описывается координатами центра и радиусом (данные). Кроме того, над окружностью можно проделывать различные действия (методы):
Класс,
описывающий объект "окружность",
может выглядеть следующим образом:
type
TCircle = class
x,y : double;
r : double;
function area : double; // Вычисление площади окружности
function circumference : double; // Вычисление длины окружности
function inside (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; // Вычисление площади кольца
function circumference2 : double; // Вычисление длины внутренней окружности
function inside (x,y : double) : Boolean; // Проверка нахождения точки внутри кольца
end;
В объявлении класса TRing указываются функции расчета площади кольца и определения попадания некоторой точки с заданными координатами внутрь кольца. Хотя имена этих методов совпадают с именами соответствующих методов для класса TCircle, их реализация должна быть иной, так как они применяются к разным геометрическим фигурам.
Если
имена методов, объявляемых в
дочернем классе, совпадают с именами
полей или методов, то говорят, что
они перекрываются.
В Object Pascal при объявлении объектного типа имя наследуемого класса указывается в круглых скобках после слова class. По умолчанию считается, что класс, определяемый пользователем, является наследником от класса TObject.
Например,
объявления, представленные ниже идентичны.
TMyClass = class
TMyClass
= class (TObject)
Полиморфизм - это свойство родственных классов решать схожие по смыслу проблемы разными способами. В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов.
Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства.
Для изменения метода необходимо перекрыть его в потомке, то есть объявить в потомке одноименный метод и реализовать в нем нужные действия.
В результате в объекте – родителе и объекте – потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.
Класс является сложной структурой данных, объединяющей переменные, функции и процедуры в одном типе данных.
Переменные, входящие в состав класса, называются полями. Процедуры и функции класса обычно называют методами. Свойства класса представляют собой поля, обращение к которым производится через специальные методы.
Поля
Поля класса представляют собой переменные, объявленные внутри класса. Объявление полей класса должно предшествовать объявлению методов и свойств.
Например,
класс, содержащий одно поле и один
метод, будет описываться следующим
образом:
TSampleClass = class (TObject) //Объявление нового класса
FSample : integer; //Поле класса
procedure SampleMethod; //Метод класса
end;
Свойства
Прямое обращение к полям, определяющим состояние объекта, противоречит принципам объектно-ориентированного программирования. Поэтому для обмена данными с другими объектами используются свойства, обращение к которым может выполняться не напрямую, а только через соответствующие методы.
В этом и заключается отличие свойств от полей, к которым можно обращаться непосредственно.