OBJECTS (Методичка С++), страница 5

2013-09-07СтудИзба

Описание файла

Файл "OBJECTS" внутри архива находится в папке "METODY". Документ из архива "Методичка С++", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "OBJECTS"

Текст 5 страницы из документа "OBJECTS"

Constructor Init;

Procedure CreateOpen(fn:str80); {создание/открытие}

Function Found(fam:str80):boolean;virtual;{поиск любой}

Function Compare(fam:str80):boolean;virtual;{тип поиска}

end;

Implementation

Constructor TBase.Init;

Begin end;

Procedure TBase.CreateOpen;

Begin filename:=fn;

{$I-}

Assign(f,FileName);

Reset(f);

{$I+}

if IOResult<>0 then ReWrite(f)

End;

Procedure TBase.BWrite;

Begin Seek(f,filesize(f));

Write(f,fam,tel);

End;

Function TBase.Found;

Var k:boolean;

Begin Reset(f);

k:=true;

Found:=false;

While (not Eof(f)) and k do

begin

BRead(family,telefon);

if Compare(fam) then

begin Found:=true;

k:=false;

end;

end;

End;

Procedure TBase.BRead;

Begin Read(f,family,telefon);

End;

Function TBase.Compare;

Begin Compare:=true; end;

End.

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

Пример 15. Программа «Записная книжка».

Program Memory;

Uses Menu, Base;

{ ************* Объекты-потомки стандартных *****}

Type TMainMenu=Object(TMenu) {основное меню}

may:boolean; {признак задания имени файла}

Procedure Enter;virtual;

end;

Type TOpenBase=Object(TInput) {ввод имени файла}

Function Error:boolean;virtual; {проверка имени файла}

end;

Type TAddMenu=Object(TForm) {форма для добавления записей}

Procedure Enter;virtual; {обработка ввода одной записи}

end;

Type TFindMenu=Object(TForm) {форма для поиска телефонов}

Procedure Input;virtual; {организовать ввод из одного окна}

Procedure Enter;virtual; {обработка поиска одной записи}

end;

Type TNotFound=Object(TMessage){сообщение "данные отсутствуют"}

Procedure Enter;virtual; {ожидание подтверждения}

end;

Type TMyBase=Object(TBase) {база данных}

Function Compare(fam:str80):boolean;virtual; {сравнение фамилий}

End;

{ ************Объявление переменных******************}

var a:TMainMenu; b:TAddMenu; c:TOpenBase;

d:TFindMenu;e:TMyBase; h:TNotFound;

{ *********** Дополнительные методы *****************}

Procedure TMainMenu.Enter;

Begin

case npos of

1:begin

c.draw; {нарисовать окно ввода}

c.input; {организовать ввод имени файла}

e.createopen(c.inp.text); {создать или открыть файл}

a.show; {показать главное меню}

a.may:=true; { признак задания имени файла }

end;

2:if may then { если определен файл данных }

begin

b.show; {показать форму}

b.Run; {организовать работу с локальным меню}

a.show; {показать главное меню}

end;

3:if may then { если определен файл данных }

begin

d.show; {показать форму}

d.Run; {организовать работу с локальным меню}

a.show; {показать главное меню}

end;

end;

end;

Function TOpenBase.Error;

var l:integer;

begin l:=length(Inp.Text);

if (l>0) and (l<=8) then Error:=false

else Error:=true;

end;

Procedure TAddMenu.Enter;

Begin Case npos of

1:begin

masalt[1].setattr(113); {убрать выделение пункта меню}

input; {ввести фамилию и телефон}

e.BWrite(masinp[1].inp.text,masinp[2].inp.text);{записать}

masalt[1].setattr(71); {выделить пункт меню}

end;

2:

end;

end;

Procedure TFindMenu.input;

Begin masinp[1].Input; end;

Procedure TNotFound.Enter;

Begin d.Show; end;

Procedure TFindMenu.Enter;

Var i:integer;

Begin Case npos of

1:begin

masalt[1].Setattr(113);{убрать выделение пункта меню}

Input; {ввести фамилию}

if e.Found(masinp[1].inp.text) then

begin {показать в окне номер телефона}

masinp[2].inp.text:=e.telefon;

masinp[2].Draw;

end

else {сообщить об отсутствии данных}

begin

for i:=1 to 2 do masinp[i].inp.text:='';

h.Show; {вывести окно сообщения}

h.Run; {дождаться подтверждения}

end;

masalt[1].Setattr(71); {выделить пункт меню}

end;

2:

end;

end;

Function TMyBase.Compare;

Begin

if family=fam then Compare:=true

else Compare:=false;

end;

{ *****************Описание меню*********************}

const menu1:array[1..4] of TWin=

((x1:10;y1:14;x2:23;y2:18;attr:113;xt:3;yt:2;

text:'Создать или открыть книжку'),

(x1:26;y1:14;x2:39;y2:18;attr:113;xt:4;yt:2;

text:'Записать телефон'),

(x1:42;y1:14;x2:55;y2:18;attr:113;xt:5;yt:2;

text:'Найти телефон'),

(x1:58;y1:14;x2:71;y2:18;attr:113;xt:4;yt:2;

text:'Завершить работу'));

menu3:array[1..2] of TWin=

((x1:23;y1:18;x2:33;y2:21;attr:113;xt:2;yt:2;text:'Добавить'),

(x1:37;y1:18;x2:47;y2:21;attr:113;xt:2;yt:2;text:'Выход'));

menu4:array[1..2] of TWin=

((x1:23;y1:18;x2:33;y2:21;attr:113;xt:2;yt:2;text:'Найти'),

(x1:37;y1:18;x2:47;y2:21;attr:113;xt:2;yt:2;text:'Выход'));

input:array[1..2] of TInput=

((x1:22;y1:8;x2:32;y2:8;attr:94;xt:1;yt:1;text:'Фамилия';

Inp:(x1:34;y1:8;x2:46;y2:8;attr:112;xt:1;yt:1;text:'')),

(x1:22;y1:10;x2:32;y2:10;attr:94;xt:1;yt:1;text:'Телефон';

Inp:(x1:34;y1:10;x2:46;y2:10;attr:112;xt:1;yt:1;text:'')));

Begin

a.init(5,5,76,20,30,5,3,'Записная книжка',4,menu1);

b.init(20,2,50,22,94,5,3,'Добавление записей',2,menu3,2,input);

c.init(30,8,50,19,94,3,3,'Введите имя файла',

35,12,45,12,112,1,1,' ');

d.init(20,2,50,22,94,5,3,'Поиск записей',2,menu4,2,input);

e.init;

h.init(25,6,45,14,36,6,2,'Нет данных',

32,11,38,12,71,2,1,'Ok');

a.may:=false;

a.show;

a.Run;

end.

2.3. Использование объектов при создании движущихся изображений.

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

Рис. 2.8. Иерархия классов для программы создания движущихся изображений.

Пример 16. Программа создания движущихся изображений.

{Вращение линии и квадрата вокруг их геометрических центров и движение окружности по окружности}

Program ex;

Uses crt,graph;

Type

Figure=Object

x,y, {координаты центра}

halflen, {радиус вращения}

dx,dy:integer; {проекции радиуса вращения}

constructor Init(ax,ay,ah:integer);

procedure Move(t:real); {организация движения}

procedure Draw;virtual; {рисование объекта}

procedure Rel(t:real);virtual; {определение смещения}

end;

Line=Object(Figure) {линия}

constructor Init(ax,ay,ah:integer);

procedure Draw;virtual;

end;

Square=Object(Figure)

constructor Init(ax,ay,ah:integer); {квадрат}

procedure Draw;virtual;

end;

Circle=object(Figure) {окружность}

r:integer;

constructor Init(ax,ay,ah,ar:integer);

procedure DRAW;virtual;

end;

Constructor Figure.Init;

Begin

x:=ax; y:=ay; halflen:=ah;

End;

Procedure Figure.Draw;

Begin End;

Procedure Figure.Rel;

Begin

dx:=round(halflen*cos(t));

dy:=round(halflen*sin(t));

End;

Procedure Figure.Move;

Var color:word;

Begin

color:=Getcolor; {запоминаем цвет}

SetColor(GetBkColor); {рисование цветом фона}

Draw; {стираем фигуру - рисуем цветом фона}

SetColor(color); {возвращаем цвет}

Rel(t); {пересчитываем значения dx и dy}

Draw; {рисуем на новом месте}

End;

Constructor Line.Init;

Begin

Figure.Init(ax,ay,ah);

End;

Procedure Line.Draw;

Begin

graph.Line(x+dx,y+dy,x-dx,y-dy);

End;

Constructor Square.Init;

Begin

Figure.Init(ax,ay,ah);

End;

Procedure Square.Draw;

Begin

graph.line(x+dx,y+dy,x-dy,y+dx);

graph.line(x-dy,y+dx,x-dx,y-dy);

graph.line(x-dx,y-dy,x+dy,y-dx);

graph.line(x+dy,y-dx,x+dx,y+dy);

End;

Constructor Circle.Init;

Begin

Figure.Init(ax,ay,ah);

r:=ar;

End;

Procedure Circle.Draw;

Begin

graph.Circle(x+dx,y+dy,r);

End;

Var driver,mode:integer;

t:real;

L:Line;

S:Square;

C:Circle;

Begin

driver:=detect;

InitGraph(driver,mode,'');

t:=0;

L.Init(160,250,75);

S.Init(320,250,75);

C.Init(480,250,75,10);

repeat

L.Move(t);

S.Move(-2*t);

C.Move(1.5*t);

delay(50);

t:=t+0.05;

until keypressed or (t>10000);

Closegraph;

end.

Литература

  1. Фаронов В.В. Турбо Паскаль (в 3-х книгах). Книга 1. Основы Турбо Паскаля. - М.: «МВТУ - ФЕСТО ДИДАКТИК», 1992.-304 с., ил.

Содержание

Аннотация........................................................................................................................................2

Введение............................................................................................................................................3

1. Средства объектно-ориентированного программирования.

1.1 . Определение объекта. Компоненты: поля и методы.

1.2 . Определение экземпляров объектов. Операция присваивания над объектами. Обращение к компонентам объекта из программы и методов. Неявный параметр Self.

1.3 . Инициализация полей объектов.

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

1.5 . Полиморфизм.

1.6 . Раннее и позднее связывание. Виртуальные методы. Конструкторы. Определение типа объекта.

1.7 . Динамические объекты. Деструкторы.

1.8 . Ограничение доступа к полям и методам объектов.

2. Использование технологии ООП.

2.1 . Использование объектов при создании новых структур данных.

2.2 . Использование объектов при создании меню.

2.3 . Использование объектов при создании движущихся изображений.

Литература................................................................................................................................... 27



Список примеров.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5184
Авторов
на СтудИзбе
435
Средний доход
с одного платного файла
Обучение Подробнее