Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65419
Модуль Forms 65184
Пример работы с... 64331
ТЕХНОЛОГИИ ДОСТ... 61829
Имитационное мо... 57750
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,084
новичок: bromik
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных студентов на Delphi (файл записей) + Блок схемы
Моделирование системы управления качеством производственного процесса на...
Расчет обратной матрицы на Delphi + Пояснительная записка

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Объектно-ориентированное программирование. Наследование


Наследованиеэто механизм, позволяющий создавать иерархии объектов. При этом свойства объектов, расположенных на более высоких уровнях иерархии, автоматически относятся ко всем порожденным от них объектам.
Пусть необходимо создать программу, работающую не только с объектом-точкой, но еще и с объектом-окружностью. Очевидно, что объектный тип-окружность (назовем его circl) имеет много общего с существующим типом dot. Как и точка, окружность характеризуется парой координат x и y, определяющих положение центра окружности. Однако для создаваемого объекта-окружности необходимо добавить еще одно поле – радиус.
Что касается методов, то для нового типа circl подошел бы метод move, т.к. перемещение по экрану и точки, и окружности (перемещается, собственно, ее центр) осуществляется одинаково. Однако методы инициализации (Init), прорисовки (show) и сокрытия (hide) окружности придется описывать заново.
Свойство объектных типов – наследование – позволяет создать новый тип на основе уже существующего. При этом существующий тип, который служит основой для создания нового объекта, называют предком, или родительским типом, а создаваемый объект – потомком, или дочерним типом. Потомок автоматически наследует все поля и методы своего предка.
Следует заметить, что на основе существующего объекта можно создать любое количество потомков, причем глубина иерархии наследования ничем не ограничивается. При этом каждый объект-потомок может иметь единственного предка.
При описании типа-потомка должно указываться имя типа-предка, заключенное в круглые скобки.
type
circl= object (dot)
r:integer;
procedure Init(a,b,rad: integer);
procedure show;
procedure hide;
end;




В приведенном описании типа circl имеется поле r, определяющее радиус окружности, которого не было в типе dot. Кроме того, тип circl унаследовал все поля, которые присутствовали в родительском типе dot (два поля типа integer, определяющие координаты точки на экране), а также метод move, ко-торый в описании данного типа отсутствует.
Вместе с тем, действия по инициализации, отображению на экране и сокрытию окружности отличны от подобных действий в отношении точки. Поэтому методы, выполняющие названные действия, должны быть заново описаны (как при описании типа, так и при определении самих подпрограмм).
procedure circl.Init;
begin
x:=a;
y:=b;
r:= rad;
end;

procedure circl.show;
begin
setcolor(yellow);
circle(x,y,r);
end;

procedure circl.hide;
begin
setcolor(black);
circle(x,y,r);
end;




Как видим, методы потомка имеют те же имена, что и методы предка, однако описывают разные действия для разных объектов, т.е. методы объекта-потомка заменяют собой (или переопределяют) одноименные методы ро-дительского объекта.
Ниже приведен текст программы, в которой по сравнению с предыдущей программой добавлен объект cirсl (b соответственно объявлена переменная (создан экземпляр) obj2 объектного типа circl) и показаны переопределенные методы данного объекта – Init, show, hide.

program ex_obj2;
uses crt,graph;
type dot = object
x,y: integer;
procedure Init(a,b: integer);
procedure show;
procedure hide;
procedure move(Dx,Dy:integer);
end;
circl= object (dot)
r:integer;
procedure Init(a,b,rad: integer);
procedure show;
procedure hide;
end;

procedure dot.Init(a,b:integer);
begin
x:=a;
y:=b;
end;

procedure circl.Init;
begin
x:=a;
y:=b;
r:=rad;
end;

procedure dot.show;
begin PutPixel(x,y,white); end;

procedure circl.show;
begin setcolor(yellow); circle(x,y,r); end;

procedure dot.Hide;
begin PutPixel(x,y,black); end;

procedure circl.hide;
begin setcolor(black); circle(x,y,r); end;

procedure Dot.move;
begin
hide;
x:=x+Dx; y:=y+Dy;
show;
end;


Var i,j,err:integer;
c:char;
dot1:dot;
obj2:circl;
begin
i:=detect;
InitGraph(i,j,'');
err:=GraphResult;
if err<>0 then
writeln(graphErrorMsg(err))
else
begin
setcolor(yellow);
OutTextXY(getMaxX div 3,GetMaxY-30,'press 1 for draw pixel, 2 for draw cirlce');
c:=readkey;
case c of
{1} #49: begin
dot1.init(100,100);
dot1.show;
repeat
c:=readkey;
if c=#0 then
begin
c:=readkey;
with dot1 do
case c of
#72: move(0,-5);
#80: move(0,5);
#77: move(5,0);
#75: move(-5,0);
end
end;
until (c=#27) or (c=#13);
end;
{2} #50: begin
obj2.init(100,100,30);
obj2.show;
readkey;
obj2.hide;
readkey;
end;
end;
end;
end.




Как можно заметить, в приведенном выше примере для окружности (экземпляр obj2) не используется метод move, унаследованный от типа-предка dot. Чтобы разобраться в причинах такого «упущения», вернемся к методу move.
Вот его описание:
procedure Dot.move;
begin
hide;
x:=x+Dx; y:=y+Dy;
show;
end;



Опубликовал Kest June 03 2010 19:13:38 · 0 Комментариев · 7825 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Cтатьи Королевств...
Последние загруж...
PDJXPPack
Паскаль и Дельфи....
ZipTV
Пример работы с б...
Язык программиров...
Пример OpenGL гра...
IconCut [Исходник...
Разработка клиент...
PCXReader. Програ...
С/C++ Программиро...
index.php + мод ...
Java 2. Наиболее ...
Assembler. Учебни...
«Философия» прогр...
WAP версия сайта
Модифицированная ...
Применение жадног...
Простой текстовый...

Топ загрузок
Приложение Клие... 100469
Delphi 7 Enterp... 87040
Converter AMR<-... 20078
GPSS World Stud... 12815
Borland C++Buil... 11830
Borland Delphi ... 8602
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4798
FreeSMS v1.3.1 3542
Случайные статьи
Увольнение начальника
Линии
Шаблоны для Drupal...
Работа с форматом ...
Бизнес
Опыт оптимизации
Сортировка выбором
Исходные положения...
Технология Drag-an...
Организуйте службу...
Каррирование
Блок try–except
На компьютерах кли...
Другие функции биб...
Вулкан Делюкс - дл...
Лицензия на рестав...
Ввод данных с тумб...
Косвенная адресаци...
Шесть тепловых стр...
Первый шаг в постр...
Стоимость корневог...
Идеалы программиро...
Логическая задача ...
Внешние объекты (OLE)
Как отключить авто...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?