Private
Begin
If notAloneItem(sName, Salary, pNew) then
Begin
Var
Begin
If notAloneItem(sName, Salary, pNew) then
Begin
Var
Else
End
Begin
Begin
. . .
Begin
. . .
Var
Var
Type
pPersonType = ^PersonType;
PersonType = record
sName: string[40];
Salary: double;
pNext: pPersonType;
end;
pHead, pTail, pCurr: pPersonType;
functionCompareItems(pCurr1,pCurr2: pPersonType): integer;
end;
functionAloneItem(sName: string; Salary: double;
varpNew: pPersonType): boolean;
New(pNew);
ifpNew = Nil thenHalt;
pNew^.sName := sName;
pNew^.Salary := Salary;
pNew^.pNext := Nil;
ifpHead=Nil then
pHead := pNew; pTail := pNew; AloneItem := true;
AloneItem := false;
end;
procedureAppendItem(sName: string; Salary: double);
pNew: pPersonType;
pTail^.pNext := pNew;
pTail := pNew;
end;
end;
procedurePrependItem(sName: string; Salary: double);
pNew: pPersonType;
pNew^.pNext := pHead;
pHead := pNew;
end;
end;
Объектно-ориентированное программирование (ООП)
Понятие класса – дополнение к понятию типа.
Тип [обычной] переменной определяет множество значений, которые она способна принимать, и множество операций, которые над ней можно производить.
Класс [объектной] переменной определяет и множество значений, которые она способна принимать, и множество операций, которые над ней можно производить, и множество операций, которые она сама над собой способна производить.
Три принципа ООП:
1. Инкапсуляция
2. Наследование
3. Полиморфизм
Инкапсуляция – соединение в единой структуре данных и программных кодов (т.н. методов), предназначенных для обработки именно этих данных.
Наследование – возможность построения нового класса на основе существующего (т.н. базового, или родительского) класса с дополнением и/или переопределением данных и методов. Наследование есть механизм передачи данных и методов родительского класса в дочерний класс.
Полиморфизм – возможность обращения по одному имени к разным методам.
Объектом, или объектной переменной принято называть конкретный экземпляр переменной заданного класса.
По сути (но не по синтаксису), объектная переменная есть указатель на первый байт области памяти, выделенной под поля объекта. Эта область памяти предоставляется объекту тогда, когда он «начинает жить», и высвобождается тогда, когда он свою жизнь завершает.
Вместе с «рождением» первого экземпляра объекта заданного класса в память загружается и его инкапсулированные программные коды. Второй и последующие экземпляры, занимая под свои поля новые области памяти, пользуются уже загруженным кодом первого экземпляра.
Три группы атрибутов объекта:
1. Методы
2. Свойства
3. События
Методы – процедуры и функции, описываемые при описании класса, предназначенные для приема объектом данных извне, изменения данных внутри объекта (модификации полей), подачи данных от объекта внешним «потребителям».
Свойства(для пользователя объекта) – параметры (числовые, символьные, строковые и прочих типов), характеризующие состояние объекта в данный момент. Обращение к свойствам объекта внешне выглядит как обращение к полям переменной типа «запись».
Свойства(для программиста класса) – процедуры и функции, назначение которых совпадает с назначением методов. В среде программистов не утихают споры о праве свойств на существование.
События– это то, что с объектом «может произойти», и на что можно предусмотреть реакцию кода класса.
Объявление класса
<Имя класса> = class(<Имя базового класса>)
<Объявление закрытых полей и методов>
// Все, что объявлено здесь, может быть использовано только в данном модуле