- •Объектно-ориентированная парадигма программирования.
- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Var a:Тcomp;
- •Var X:tStudent;
- •Объекты
- •Создание и уничтожение объектов.
- •IntField:Integer;
- •Var MyObject:tMyClass;
- •Var a,b:Тcomp;
- •Свойства и инкапсуляция.
- •X:integer;
- •Var a:tInt;
- •X:integer;
- •Создание класса комплексных чисел.
- •Interface
- •Implementation
Var a,b:Тcomp;
begin
a:= Тcomp.create; {вызывается конструктор}
a.input (6,10);
. . . . .
a.free
end.
Свойства и инкапсуляция.
Инкапсуляция означает объединение данных и действий над ними в одном объектном типе.
Для обеспечения надежности нежелателен прямой доступ к полям объекта: чтение и обновление содержимого полей должно производиться посредством соответствующих методов – это называется инкапсуляцией.
В Delphi ограничение доступа к полям объекта осуществляется при помощи свойств объекта.
Определение: Свойство – это специальный механизм классов, регулирующий доступ к полям. Свойство определяется тремя элементами: полем и двумя методами, которые осуществляют чтение и запись этого поля.
Свойства объявляются с помощью трех зарезервированных слов:
Property,
read,
write,
причем read и write считаются зарезервированными только в контексте объявления свойства.
Обычно свойство связано с некоторым полем, оно указывает те методы класса, которые должны исполняться при записи в это поле, и при чтении из него. Описание свойства имеет вид:
Property <имя свойства>: <тип> read <имя метода 1>
write <имя метода 2>;
Методы чтения (вывода поля) и записи (ввода поля) всегда оформляются так:
Function <имя метода 1> : <тип>; {метод чтения (вывода)}
Procedure <имя метода 2> (<параметр> : <тип>); {метод записи}
Например:
Type TInt=class
data:integer; // поле класса
Procedure impdata (x:integer); {метод записи в поле data}
Function Outdata:integer; {метод чтения из поля data}
Procedure Add(x:integer); {процедура сложения исходного
поля с х}
. . . . .
Property dataInt: integer //свойство
read Outdata // метод чтения
write Impdata; // метод записи
end;
Доступ к значению свойства dataInt осуществляется через вызовы методов Outdata и Impdata. Однако в явном обращении к этим методам нет необходимости. Достаточно написать, например, для объекта a этого класса:
Var a:TInt; {объявляем a как объект класса TInt}
Begin . . . . . . . . . . . . .
a.dataInt:=<значение>;
{<значение> –это число, которое присваивается полю a }
Затем переменной <результат> присвоить c помощью свойства результат вычислений:
<результат>:= a.dataInt;
Компилятор при этом оттранслирует эти операторы в вызовы методов Outdata и Impdata. Т.о., свойство выглядит как обычное поле, но за всяким обращением к нему стоят нужные действия.
Создадим класс целых чисел, реализующий арифметические операции над ними (например, сложение). Для программы используем консольное приложение в Delphi. На примере создания класса целых чисел рассмотрим 2 случая:
В описании класса нет свойства, но есть методы чтения (вывода) и записи (ввода) данных в поле объекта.
В описании класса есть свойство.
Создание класса целых чисел без свойства:
Program Integer_class1;
{$APPTYPE CONSOLE}
uses SysUtils;
Type TInt=class
data:integer; // поле класса
Procedure Impdata (x:integer); //метод записи в поле
Function Outdata:integer; // метод чтения из поля
Procedure Add(x:integer); //метод сложения целых чисел
end;
Procedure TInt.Impdata; //описание метода записи Impdata
begin
data:=x; {записываем значение пар-ра x в поле data}
end;
Function TInt.Outdata; // описание метода чтения Outdata
begin
result:=data; {метод возвращает значение поля data}
end;
Procedure TInt.Add; {метод сложения поля data с пар-ром x }
begin
data:=data+x; {к полю data прибав. x, результат–в поле data}
end;
Var a:TInt; {объявляем a как объект класса TInt}