- •Рекурсивные алгоритмы (продолжение)
- •I, j: integer;
- •I, j: integer;
- •I, j: integer;
- •Метод динамического программирования
- •I, j: integer;
- •I, j: Integer;
- •I, j: integer;
- •Тип «Денежный»
- •Стандартные процедуры и функции для работы с любыми файлами
- •Текстовый файл
- •Стандартные процедуры для работы с текстовыми файлами
- •Условная компиляция
- •I, j: Integer;
- •I, j: Integer;
- •I, j: Integer;
- •I, j: integer;
- •Тип «Указатель»
- •Динамические структуры данных Линейный однонаправленный список
- •Объектно-ориентированное программирование (ооп)
- •Объявление класса
- •Interface
- •Implementation
- •Interface
- •Implementation
Тип «Указатель»
<Тип «Указатель»> : : =
^<Тип> ;
<Тип «Указатель»> : : =
pointer ;
Пример 1.
{ TP7 }
program P0702;
type
pInteger = ^integer ;
ppInteger = ^pInteger ;
pppInteger = ^ppInteger ;
var
p_i: ^integer ; // Аналогично p_i: pInteger ;
p_b: ^boolean ;
p_c: ^char ;
p: pointer ;
c: char ;
b: boolean ;
i: integer ;
begin
clrscr;
Writeln('sizeof(p)=', sizeof(p)) ;
Writeln('sizeof(b)=', sizeof(b)) ;
Writeln('sizeof(i)=', sizeof(i)) ;
Writeln('sizeof(c)=', sizeof(c)) ;
Readln;
b:=false ;
Writeln(b) ;
p_b := @b ; // p_i := @b ;
p := p_b ;
p_i := p ;
p_i^ := 7 ;
Writeln(b) ;
c:='A' ;
Writeln(c) ; { 'A' }
p_c := @c ;
p := p_c ;
p_i := p ;
p_i^ := p_i^ + 7 ;
Writeln(c) ; { 'H' }
Readln ;
end.
Пример 2.
type
DateTime = record { Delphi: TDateTime }
Year, Month, Day, Hour, Min, Sec: word ;
end ;
MyRec = record
N: longint ;
FIO: string[40] ;
BirthDate: DateTime ;
end;
var
pMyRec: ^MyRec;
z : MyRec;
begin
pMyRec := @z ;
pMyRec^.N := 1;
z.N := 1;
pMyRec^.BirthDate.Year := 1999;
end.
Динамические структуры данных Линейный однонаправленный список
procedure PrependItem(sName: string; Salary: double);
procedure AppendItem(sName: string; Salary: double);
procedure InsertItem(sName: string; Salary: double);
{$F+}
{$N+}
uses Crt, Strings;
type
pPersonType = ^PersonType;
PersonType = record
sName: string[40];
Salary: double;
pNext: pPersonType;
end;
var
pHead, pTail, pCurr: pPersonType;
function CompareItems(pCurr1,pCurr2: pPersonType): integer;
var
. . .
begin
. . .
end;
function AloneItem(sName: string; Salary: double;
var pNew: pPersonType): boolean;
begin
New(pNew);
if pNew = Nil then Halt;
pNew^.sName := sName;
pNew^.Salary := Salary;
pNew^.pNext := Nil;
if pHead=Nil then
begin
pHead := pNew; pTail := pNew; AloneItem := true;
end
else
AloneItem := false;
end;
procedure AppendItem(sName: string; Salary: double);
var
pNew: pPersonType;
begin
if not AloneItem(sName, Salary, pNew) then
begin
pTail^.pNext := pNew;
pTail := pNew;
end;
end;
procedure PrependItem(sName: string; Salary: double);
var
pNew: pPersonType;
begin
if not AloneItem(sName, Salary, pNew) then
begin
pNew^.pNext := pHead;
pHead := pNew;
end;
end;
Объектно-ориентированное программирование (ооп)
Понятие класса – дополнение к понятию типа.
Тип [обычной] переменной определяет множество значений, которые она способна принимать, и множество операций, которые над ней можно производить.
Класс [объектной] переменной определяет и множество значений, которые она способна принимать, и множество операций, которые над ней можно производить, и множество операций, которые она сама над собой способна производить.
Три принципа ООП:
-
Инкапсуляция
-
Наследование
-
Полиморфизм
Инкапсуляция – соединение в единой структуре данных и программных кодов (т.н. методов), предназначенных для обработки именно этих данных.
Наследование – возможность построения нового класса на основе существующего (т.н. базового, или родительского) класса с дополнением и/или переопределением данных и методов. Наследование есть механизм передачи данных и методов родительского класса в дочерний класс.
Полиморфизм – возможность обращения по одному имени к разным методам.
Объектом, или объектной переменной принято называть конкретный экземпляр переменной заданного класса.
По сути (но не по синтаксису), объектная переменная есть указатель на первый байт области памяти, выделенной под поля объекта. Эта область памяти предоставляется объекту тогда, когда он «начинает жить», и высвобождается тогда, когда он свою жизнь завершает.
Вместе с «рождением» первого экземпляра объекта заданного класса в память загружается и его инкапсулированные программные коды. Второй и последующие экземпляры, занимая под свои поля новые области памяти, пользуются уже загруженным кодом первого экземпляра.
Три группы атрибутов объекта:
-
Методы
-
Свойства
-
События
Методы – процедуры и функции, описываемые при описании класса, предназначенные для приема объектом данных извне, изменения данных внутри объекта (модификации полей), подачи данных от объекта внешним «потребителям».
Свойства (для пользователя объекта) – параметры (числовые, символьные, строковые и прочих типов), характеризующие состояние объекта в данный момент. Обращение к свойствам объекта внешне выглядит как обращение к полям переменной типа «запись».
Свойства (для программиста класса) – процедуры и функции, назначение которых совпадает с назначением методов. В среде программистов не утихают споры о праве свойств на существование.
События – это то, что с объектом «может произойти», и на что можно предусмотреть реакцию кода класса.