Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2014, 13:12   #1
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
Восклицание Объясните пожалуйста программу. показать 3 основных признака ООП: наследование, инкапсуляция, полиморфизм (Паскаль)

Это лабораторная работа по Объектно-ориентированному программированию. Здесь надо показать 3 основных признака ООП: наследование, инкапсуляция, полиморфизм.



Код:
Program program1;
Uses GraphABC;
Type TFigure=class
     x,y:integer;
     c:color;
     procedure draw(pc:color);
     abstract;
end;
Type TPoint=class(TFigure)

constructor Create(ix,iy:integer; ic:Color);
begin
     x:=ix;y:=iy;c:=ic;
end;
Procedure Draw(pc:color); override;
Begin
     putPixel(x,y,pc);
end;
Procedure Show;
Begin
      draw(c);
end;
Procedure hide;
begin
      draw(clwhite);
end;
Procedure move(dx,dy:integer);
begin
     hide;
     x:=x+dx;
     y:=y+dy;
     Show;
end;
end;

Type Tcircle=class(TPoint)
r:integer;
Constructor Create(ix,iy,ir:integer;ic:color);
begin
x:=ix;y:=iy;r:=ir;c:=ic;
end;
Procedure Draw(pc:color);override;
Begin
  Setpencolor(pc);
  Circle(x,y,r);
end;
end;

Var p1:Tpoint;
    p2:Tpoint;
    p3:Tpoint;
    c1:TCircle;
    c2:Tcircle;
    c3:Tcircle;
    c4:Tcircle;
    c5:Tcircle;
    
begin
     p1:=new TPoint(200,200,clBlue);
     p1.show;
     p2:=new TPoint(200,300,clRed);
     p2.show;
     p3:=new TPoint(200,400,clRed);
     p3.show;
     c1:=new TCircle(450,100,50,clblue);
     c1.show;
     c2:=new TCircle(550,100,50,clblack);
     c2.show;
     c3:=new TCircle(650,100,50,clred);
     c3.show;
     c4:=new TCircle(500,185,50,clyellow);
     c4.show;
     c5:=new TCircle(600,185,50,clgreen);
     c5.show;
var i:integer;
for i:=1 to 963 do
begin
p1.move(-1,0);
p2.move(2,0);
p3.move(6,0);
c1.move(-4,1);
c2.move(7,2);
c3.move(12,3);
c4.move(-8,4);
c5.move(-33,5);
sleep(120);
end;
end.
mongush вне форума Ответить с цитированием
Старый 27.01.2014, 13:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наследование: Tcircle=class(TPoint). Т.е. TCircle наследует свойства TPoint
Инкапсуляция: Как таковой по писанному я тут ее не увидел, но в теории есть мнения что инкапсуляция подразумевает внесение свойства обьекта или процедур работающих с обьектом внутрь обьекта:
Цитата:
Type Tcircle=class(TPoint)
r:integer;
Constructor Create(ix,iy,ir:integer;ic:color);
begin
x:=ix;y:=iy;r:=ir;c:=ic;
end;
Procedure Draw(pc:color);override;
Begin
Setpencolor(pc);
Circle(x,y,r);
end;
end;
Хотя инкапсуляция требует наличие слова private в типе объекта, для того чтоб исключить использование этих свойств за пределом обьекта или в данном случае за пределом модуля.

Полиморфизм:У тебя он описан в виде Procedure Draw(pc:color); override;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2014, 14:15   #3
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
По умолчанию

может все таки есть??? без этого слова private

препод говорит что это довольно простая программа без скрытия данных
mongush вне форума Ответить с цитированием
Старый 27.01.2014, 14:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Type TFigure=class
     x,y:integer;
     c:color;     
     procedure draw(pc:color);      abstract;
end;
рискну предположить, что то, что я выделил зелёным - это и есть инкапсуляция по мнению вашего преподавателя!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.01.2014, 14:27   #5
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
то, что я выделил зелёным - это и есть инкапсуляция!
разве это не поля?
mongush вне форума Ответить с цитированием
Старый 27.01.2014, 14:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mongush Посмотреть сообщение
разве это не поля?
Вы правы.
да я хотел показать, что такое инкапсуляция...
но у меня не получилось.

Цитата:
Инкапсуляция - это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект.
вот, видимо, с точки зрения преподавателя, то, что в одном классе присутствуют и поля и методы их обработки и есть инкапсуляция
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.01.2014, 14:44   #7
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
По умолчанию

это то что в классе Tfigure?
mongush вне форума Ответить с цитированием
Старый 27.01.2014, 14:49   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

mongush, именно. Но я же говорю, принцип СОКРЫТИЯ данных - весьма важное понятие, которое является неотъемлимой частью инкапсуляции.

Впрочем, думаю, что если Вы укажите преподавателю на поля и методы, которые объединены в одном классе и назовёте это инкапсуляцией, то это может и прокатить.

Но для себя запомните, мало объединить поля (данные) и методы их обработки в один класс, нужно их ещё и спрятать (защитить) от внешнего доступа.
Вот тогда это и будет настоящая инкапсуляция.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.01.2014, 14:50   #9
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
По умолчанию

спасибо)))
mongush вне форума Ответить с цитированием
Старый 27.01.2014, 14:51   #10
mongush
Новичок
Джуниор
 
Регистрация: 27.01.2014
Сообщений: 7
По умолчанию

Раз так, если вам не сложно, ты могли бы вы более подробно описать полиморфизм.
mongush вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
наследование и полиморфизм в ооп IRONHIDE C++ Builder 1 29.01.2013 12:39
ООП (наследование и полиморфизм) Shadow94 Общие вопросы C/C++ 4 21.11.2011 00:01
ОоП полиморфизм ... наследование ... Xsires Общие вопросы Delphi 2 04.09.2011 15:38
ООП инкапсуляция albatros Общие вопросы Delphi 2 03.02.2009 08:28