Основные принципы ООП
Объектно-ориентированное программирование основано на «трех китах» - трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.

Инкапсуляция

Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.

Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).

Другим немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую.

Наследование

Наследование есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.

Принцип наследования решает проблему модификации свойств объекта и придает ООП в целом исключительную гибкость. При работе с объектами программист обычно подбирает объект, наиболее близкий по своим свойствам для решения конкретной задачи, и создает одного или нескольких потомков от него, которые «умеют» делать то, что не реализовано в родителе.

Последовательное проведение в жизнь принципа «наследуй и изменяй» хорошо согласуется с поэтапным подходом к разработке крупных программных проектов и во многом стимулирует такой подход.

Полиморфизм

Полиморфизм - это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.

Пояснения к программе
Создаем объектный тип TPoint, от которого наследуем тип TCircle. Перекрываемым методом является Draw, который переписываем для "круга". Инкапсуляция для типа  TPoint выразилась в том, что в данном типе мы объединили поля x и y с методами (процедурами) Init, Draw, Show, Hide и Move.
Программа

Uses
GRAPH, CRT;
Type
TPoint=object
x , y : Integer;
Constructor Init(_x,_y:integer);
Procedure Draw(color:Word); virtual;
Procedure Show;
Procedure Hide;
Procedure Move(_dx,_dy:Word);
end;
Constructor TPoint.Init;
Begin
x:=_x;
y:=_y
end;
Procedure TPoint.Draw;
Begin
putPixel (x,y,color);
end;
Procedure TPoint.Show;
Begin
Draw(white);
end;
Procedure TPoint.Hide;
Begin
Draw(Getbkcolor);
end;
Procedure TPoint.Move;
Begin
Hide;
x:=x+_dx;
y:=y+_dy;
Show;
end;
Type TCircle=object(TPoint)
r : Integer;
Constructor Init(_x,_y,_r:integer);
Procedure Draw(color:Word); virtual;
end;
Constructor TCircle.Init;
Begin
x:=_x;
y:=_y;
r:=_r
end;
Procedure TCircle.Draw;
Begin
Setcolor(color);
Circle(x,y,r)
end;
Var
P : TPoint;
C : TCircle;
dx,dy,dcx,dcy,r: Integer;
grDr, grMode : Integer;

Begin
grDr:=detect;
grMode:=0;
InitGraph (grDr, grMode, '');
P.Init(1,1);
P.Show;
r:=20;
C.Init(100,100,r);
C.Show;
dx:=1; dy:=1;
dcx:=1; dcy:=1;
Repeat
P.Move(dx,dy);
C.Move(dcx,dcy);
Delay (5);
if (P.x<2) or (P.x>GetMaxX-1) Then dx:=-dx;
if (P.y<2) or (P.y>GetMaxY-1) Then dy:=-dy;
if (C.x<r) or (C.x>GetMaxX-r) Then dcx:=-dcx;
if (C.y<r) or (C.y>GetMaxY-r) Then dcy:=-dcy;
Until Keypressed;
closeGraph;
End.

 

На следующей странице приведен другой вариант решения этой задачи, в котором использованы акцессоры доступа к полям.

Сайт создан в системе uCoz