DataLife Engine > Delphi, Pascal > Объектное программирование

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


26 сентября 2007. Разместил: podpole
Тип объект содержит:
- поля: вектор, его размер и его идентификатор в символьном виде
- методы: введение вектора, вывод вектора, сортировка за ростом элементов вектора.
Реализовать экземпляр этого типа и выполнить над ним все возможные действия

Текст программы
program Prg13;
uses crt;
type TMas=array[1..10] of real;
TVector=object
Mas:TMas;
n:byte;
id:char;
procedure inp;
procedure out;
procedure sort;
end;
var vect:tvector;
procedure TVector.inp;
var i:byte;
begin
Writeln('Enter identificator of vector (One symbol) :');
Write('id=');
Readln(id);
Writeln('Enter number of elements of vector ',id,' :');
Write('n=');readln(n);
writeln('Enter elements of vector ',id,' :');
for i:=1 to n do
begin Write(id,'[',i,']=');readln(mas[i]); end;
end;
procedure TVector.out;
var i:byte;
begin
Writeln('Vector ',id,' :');
for i:=1 to n do
writeln(id,'[',i,']=',mas[i]:0:3)
end;
procedure TVector.sort;
var i,j:byte;
b:real;
begin
for i:=n-1 downto 1 do
for j:=1 to i do
begin
if mas[j]>mas[j+1] then
begin
b:=mas[j];
mas[j]:=mas[j+1];
mas[j+1]:=b;
end;
end;
end;
begin
clrscr;
vect.inp;
vect.sort;
vect.out;
readkey;
end.
Результат работы программы
1)
Enter identificator of vector (One symbol) :
id=a
Enter number of elements of vector a :
n=5
Enter elements of vector a :
a[1]=1
a[2]=4
a[3]=2
a[4]=7
a[5]=8
Vector a :
a[1]=1.000
a[2]=2.000
a[3]=4.000
a[4]=7.000
a[5]=8.000
2)
Enter identificator of vector (One symbol) :
id=q
Enter number of elements of vector q :
n=3
Enter elements of vector q :
q[1]=2.1
q[2]=5.9
q[3]=2.1
Vector q :
q[1]=2.100
q[2]=2.100
q[3]=5.900

Теория к программе
Объектное программирование
В рамках концепции ОПП данные и методы их обработки (программы) объединяются в единые структуры - так называемые объекты. Кроме того объектам присуще важное качество: если существует некоторый класс объектов (прародитель предок), на его базе может быть построено, "выделено" иной подкласс (наследник потомок), который автоматически наследует все свойства предка (в отношении к данным и средствам работы с ними).
Объект определяется типом 'объект', или классом объекта, который описывается в разделе описи типов программы и имеет вид:
Type =object
;

end;
- содержат объявление наборов логически связанных данных разного типа
- содержат объявление процедур и функций работы с этими данными.
Такое объединение в единой структуре данных и методов называется инкапсуляцией.
Объект-переменная или экземпляр - переменная объектного типа, описание:
var : ;
- описание типа 'объект' может быть выполнено только в блоке TYPE главной программы или в разделах модулей (т.е. невозможно описывать локальные объекты)
- при описании типа 'объект' все поля данных должны предшествовать описаниям методов
- компонентами объектов не могут быть файлы (файловые переменные). Данные типа объект не могут быть записаны в файл.
Наследование - это возможности создавать новые классы объектов на базе уже существующих и таким образом предоставлять новым классам - 'наследникам' право наследования свойств (полей) и методов существующих классов - 'прародителей'. 'Наследники' рассматриваются как подчиненные (зависимые от) 'прародителей'. 'Наследник' иногда называется производным типом. Такая структура реализуется с помощью следующей конструкции:
type =object()


end;
В операциях предоставления прародитель всегда должен находиться слева, так как количество его полей всегда меньша или равняется количеству полей наследника
:=;
Полиморфизм - это существование нескольких одинаковых по именем но разных по смыслу методов (процедур или функций) для разных классов объектов. Благодаря этому становится возможным выполнить одну и ту же самую операцию с объектами разных классов с учетом их специфики.
Обработка статических методов похожая на обработку статических переменных, т.е. ссылка на эти методы формируются на стадии компиляции (раннее связывание).
Для реализации полиморфизма в полной мере используются виртуальные методы.
Виртуальным метод становится после того, если после его заголовка указывается служебное слово VIRTUAL:
procedure (); virtual;
function ():; virtual;
При 'виртуализации' - объявлении метода виртуальным - следует придерживаться правил:
1. Если порождаемый тип объекта описывал метод как виртуальный, то и все производные типы, которые переопределяют метод с тем самым именем, должны описывать его как виртуальный.
2. Если переозначается виртуальный метод, то его заголовок в новой реализации в произвольном типе не может быть изменен.
3. В описи объекта должен обязательно присутствовать присутствующим метод, который инициализирует объект (как правило с именем init) - Заголовок в объявлении и реализации вместо procedure употребляется служебное слово constructor.
Конструктор - это специальный вид процедуры, которая выполняет установочную работу по виртуализации метода (обеспечение так называемого позднего связывания). Все типы объектов, которые имеют виртуальные методы, должны содержать конструктор. Конструктор всегда вызывается к первому вызову виртуального метода.
Объекты могут быть размещены в динамической области памяти, для этого они должны быть объявлены как и все другие динамические структуры.
Var :^;
Создание динамических объектов происходит
с помощью процедуры NEW
а) NEW();
-при этом выделяется место для сохранения базового типа. Если есть виртуальные методы, то динамический объект должен быть инициализован:
^.();
б) расширенный вариант с выполнением инициализации объекта:
NEW(,());
в) реализация NEW в виде функции:
:=new();
или: :=new(,());
Освобождение объектов происходит
а) с помощью процедуры dispose:
dispose();
б) или расширенный вариант процедуры:
dispose(,);
Деструктор - специальная процедура, объявляется в описании типа объект среди других методов. Вместо procedure употребляется зарезервированное слово destructor, как правило эта процедура носит имя done ('выполнено'). Назначение - заключительные действия перед освобождением объекта (например, действия по освобождению динамично распределенных полей). Деструктор может наследоваться.
destructor .done;
begin . . . end;