Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

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

моделирование процесса поступления заявок в ЭВМ на GPSS + Пояснительная ...
Файл записей с выводом обратного заголовка на Turbo Pascal
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка

Объектно-ориентированное программирование. Наследование


Наследованиеэто механизм, позволяющий создавать иерархии объектов. При этом свойства объектов, расположенных на более высоких уровнях иерархии, автоматически относятся ко всем порожденным от них объектам.
Пусть необходимо создать программу, работающую не только с объектом-точкой, но еще и с объектом-окружностью. Очевидно, что объектный тип-окружность (назовем его 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 15:13:38 · 0 Комментариев · 10162 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
DCAVI
Измерение тактово...
Учебник для продв...
DelTrayIcon [Исхо...
Szwavepanel
MicroGPSS Studen ...
Пример клиента ФТ...
Text3D
Приложение Клиент...
Globus VCL Extent...
Мод "проверочный ...
AlnComponents
TsHintManager
Философия C++. Пр...
CoolControls v3.0...
Пишем программы и...
Dbgridpack
С# для профессион...
Краснов М. - Open...
PBFoldder

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20260
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Усовершенствованны...
Режим INTER Mode
функции-члены
Вычисление конечны...
IBM WebSphere MQ
SMB-подписиSMB-, и...
Выбор типа XHTML-д...
Автомобильные брыз...
Перспективы исслед...
Преобразование типов
Kак увеличить посе...
Ошибки в регулярны...
Модальная скорость
Клиент-серверное п...
SPLIT (РАСЩЕПИТЬ)
Покердом сайт
Сборка корпуса: з...
Установка связи в ...
Вулкан игровые апп...
PREEMPT (ПРЕРВАТЬ)
Пример организации...
RETURN (ВЕРНУТЬ)
Invision Power Board
Формат кадров и по...
Программирование н...
Статистика



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


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