Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

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

Программа тестирования (тест) - вступительные экзамены (математика, физи...
Моделирование работы ЭВМ на GPSS + Пояснительная записка
Моделирование вычислительного центра на GPSS + Отчет + Блок схема

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


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

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Delphi 6 программ...
Запрет гостям ск...
Размещение элемен...
Delphi и технолог...
JanComp
Керниган Б.В., Ри...
Delphi Быстрый Ст...
Socoban
Андрей Боровский....
Простой текстовый...
Создание фракталов
PHP 5
С. Г. Горнаков - ...
Шаблон для новост...
Animation (Пример...
45 уроков по дельфи
Ильдар Хабибуллин...
PHP 5 в подлинник...
Разработка Web-пр...
DelTrayIcon [Исхо...

Топ загрузок
Приложение Клие... 100786
Delphi 7 Enterp... 97964
Converter AMR<-... 20290
GPSS World Stud... 17041
Borland C++Buil... 14209
Borland Delphi ... 10355
Turbo Pascal fo... 7385
Калькулятор [Ис... 6057
Visual Studio 2... 5218
Microsoft SQL S... 3672
Случайные статьи
Регистры процессора
Первое приложение ...
5.1. ЦЕЛЬ: УПРОЩЕН...
Использование указ...
MIPS-инструкции не...
No enclosing FOR, ...
Представление дере...
Сборочные машины
Получение факса на...
Поддержка многотаб...
Инвестиционный пор...
Моделирование очер...
Установка программ...
Создание анимации ...
Политикибезопаснос...
Лучшие азартные иг...
поддержка распреде...
Анонимность пользо...
Управление синхрон...
Процедуры и функци...
Транзакты
Преобразование иде...
Моникеры и композиция
службами, архивиро...
Stand-Alone-блоги ...
Статистика



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


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