Главная » Просмотр файлов » Основы программирования

Основы программирования (947332), страница 55

Файл №947332 Основы программирования (Иванова Г.С. Основы программирования) 55 страницаОсновы программирования (947332) страница 552013-09-15СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 55)

V;BeginV:=^Square*height;{обращаемся к методу базового класса}End;VarA:TVRoom;BeginA.NewInit(3.4.5.l2.8);WriteLn(*nnoutadb комнаты = \A.Square:6:2);WriteLn(V6beM комнаты = ', A. V:6:2);EndРис. 11.3. Полякласса TVRoom328Класс TVRoom, таким образом, включает триполя: length, width и height (рис. 11.3) и четыре ме­тода: Square, Init, Newlnit и V.

Все поля и методыдоступны как из методов производного класса, так" непосредственно из программы.IL Иерархии классовЕсли программа, работая с объектами класса-потомка, не использует не­которых методов родителя, то в исполняемую программу они не включают­ся.Примечание. По правилам Borland Pascal у класса может быть только один родитель, носколько угодно потомков. Поскольку каждый производный класс добавляет при наследованиисвои поля и методы, в иерархии классов по мере удаления от корня дерева иерархии слож­ность классов и соответственно обье1сгов, которые эти классы реализуют, возрастает.

Одно­временно возрастает и специализация классов. Наиболее универсальные классы, таким обра­зом, находятся у корня дерева классов.Операция присваивания объектов родственных классов. В BorlandPascal допустимо присваивание объектам класса-родителя значений объек­тов класса-потомка. Обратное присваивание не разрешено, так как при еговыполнении методом «поле за полем» собственные поля объекта класса-по­томка окажутся не определенными.Например:VarA:TRoom;B:TVRoom;...А:-В;{допустимо}В:-А;... {недопустимо: ошибка!}Особенности работы с указателями на объекты родственных клас­сов. По правилам Borland Pascal допустимо указателям на объекты классародителя присваивать адреса объектов класса-потомка.

Однако при этоуказателъ на объект базового класса не обеспечивает возможности обраще­ния к полям и методам, объявленным в производном классе (рис. 11.4).Например:Указатель на объекткласса-родителяШаблон указателя наобъект класса-родителя"Невидимые** поляи методы объекта???Объект класса-потомкаРис. 11.4. Обращение к полям класса потомка черезуказатель на объекты класса-родителя329Часть 2. Объектно-ориентированное программированиеVarpC: ^TRoom;E.TVRoom;...{указатель на объекты базового класса}{объект производного класса}рС:- @Е;{присваиваем указателю на объекты базового класса ад­рес объекта производного класса}рС^.height: =2.7; {ошибка, указатель на объекты типа класса-родите­ля не подозревает о существовании поля heightкласса TVRoom}В этих случаях приходится явно переопределять тип указателя, исполь­зуя имя типа указателя (см. параграф 2.5):Туре pTVRoom^'^TVRoom;VarpC: ^TRoom; {указатель на объекты базового класса}Е:TVRoom;...

{объект производного класса}рС:= @Е;{присваиваем указателю на объекты базового классаадрес объекта производного класса}pTVRoom(pC)^.height:=2.7; {явно переопределяем тип указателя}Задания для самопроверкиЗадание 1. Спроектируйте класс для реализации объекта «Окно», который, по­лучив сообщение «Изобразить», должен выводить в определенное место экрана ок­но заданного размера и цвета. На базе класса, реализующего объект «Окно», спроек­тируйте класс для реализации объекта «Окно с текстом».

Объект должен уметь реа­гировать на сообщение «Изобразить окно и вывести в него строку текста». Разрабо­тайте тестирующую программу.Задание 2. Спроектируйте на базе класса, реализующего объект «Окно с текс­том» предыдущего задания, класс, реализующий объект «Окно с текстом, меняющеецвет». Объекты данного класса должны уметь реагировать на сообщение «Изменитьцвет окна».11.2. КомпозицияКомпозицией называют способ конструирования классов, при котором встроящийся класс включают объекты других классов. Включение реализова­но посредством использования объектных по­Площадь?лей - полей типа «класс».ТрехмернаяПример 11.2. Разработать класс для реа­Объем?комнатализации объекта Квартира, который долженреагировать на запрос о жилой площади кварРис.

11.5. Объект Квартира тиры (рис. 11.5).330//. Иерархии классовTRoomlength, widthSquare(), Init ()15TFlatn, roomsrTRoom^FlatSquare(), Init ()Рис. 11.6. Диафамма классов примераФизически любая квартира состоит из нескольких комнат. Ранее у насуже был разработан класс TRoom, который хранил данные о длине и шири­не комнаты и «умел» реагировать на запрос о площади комнаты. Количествокомнат в квартире сравнительно не велико и всегда ограничено, для опреде­ленности будем считать, что реализуемый объект не может включать более15 комнат. Тогда разрабатываемый класс TFlat должен включать массив из 15объектов типа TRoom (рис.

11.6). Реальное количество комнат будем хранитьв поле п. Для ответа на запрос о площади добавим метод FlatSquare, которыйбудет обращаться к методам Square объектов-комнат TRoom.Для инициализации объектных полей будем передавать в инициализиру­ющий метод специальный массив значений параметров. Поскольку размер­ность этого массива будет определяться реальным количеством комнат, а зна­чит будет отличаться от размерности поля rooms, необходимо описать пара­метр как открытый массив или нетипизированный параметр.

Используемвторой вариант.Program ex;Uses Room;{модуль Room определен в параграфе 10.3}Туре TFlat=object {описание класса}n:byte;{количество комнат}rooms:array[L.15] of TRoom; {массив объектов TRoom}function FlatSquare:real;{MQTOJX определения площади}procedure Init(an:byte;Var arooms);{MQTOJX инициализации}end;Procedure TFlatJnit; {тело метода инициализации}Var a:array[L,15] of TRoom absolute arooms; {переопределение типамассива наложением - см. параграф 5.5}Ubyte;Beginп:='ап;{инициализируем поле количества комнат}for i:=l to п do {инициализируем объектные поля, вызывая методинициализации TRoom для каждой комнатыи передавая ему размеры комнат}rooms[i].Inlt(a[i].length, а[i],width);End;331Часть 2, Объектно-ориентированное программированиеFunction TFlaLFlatSquare; {тело метода определения площади}Var S:real;i: integer;BeginS:=0;for i:=l to n do {суммируем площади комнат}S: =S+rooms[iJ, Square;FlatSquare:=S;End;Const mas:array[L.3]of TRoom- ((length:!.5; width:3.75),(length:2.85; width:4.1),(length:2.3; width:2.8));Var F:TFlat; {объявляем объект-переменную}BeginFInit(3,mas);{инициализируем объект}WriteLn(*Площадь квартиры= \FFlatSquare);{определяем площадь}EndЗадания для самопроверкиЗадание 1.

Реализуйте класс, диафамма которого изображена на рис. 9.6, а.Разработайте тестирующую программу.Задание 2. Спроектируйте класс для реализации объекта «Меню», который, по­лучив сообщение «Изобразить меню», выводит на экран окно, включающее окнаменьшего размера, содержащие строки - названия пунктов (см. пример 8.4).

Разра­ботайте тестирующую программу.11.3. НаполнениеНаполнением называют способ конструирования классов, при котором встроящийся класс включают неопределенное количество: от О до сравни­тельно больших значений (на практике обычно до нескольких десятков) объ­ектов других классов.Пример 11.3. Разработать класс для реализации объекта Комната с бал­коном, который должен реагировать на запрособ общей площади (рис.

11.7).Площадь?КомнатаБалкон в комнате может существовать илис балкономнет. Для простоты будем считать, что в комна­те может быть не более одного балкона прямоРис. 11.7. Объект Комната угольной формы. Следовательно, разрабатывас балкономемый класс можно наследовать от класса332//. Иерархии классовTRoom и включить в него указатель на объекткласса TRoom (рис. 11.8). Он должен добавлятьсвои методы определения площади и инициали­зации объектов, учитывающие наличие или от­сутствие балкона.0..1TRoomlength, widthSquare(), Init ( )ITBRoompB:^TRoomBSquare(), InitAII ( )Program ex;Uses Room;TypeTBRoom =object(TRoom)Рис. 11.8. ДиаграммаpB: ^TRoom;классов для TBRoomfunction BSquare:real;procedure InitAll(lw:real; lb,wb:real);end;Procedure TBRoom.

InitAII;BeginInit(l,w);if (Ib^O) or (wb-=OJ thenpB—nilelsebeginNew(pB);pB''Jnit(lb,wb);end;End;Function TBRoom, BSquare;BeginifpB=nil then BSquare: = Square;else BSquare: = Square ^pB\ Square;End;Var B:TBRoom; {объявляем объект-переменную}BeginВ, InitAll(3J,5J,L8A8); (инициализируем объект}WriteLn('Площадь комнаты с балконом = \B.BSquare);EndПроцесс выделения памяти под динамические поля объекта необходимоконтролировать.

С этой целью используют средства контроля выделения па­мяти, рассмотренные в параграфе 7.2. Кроме этих средств существуют спе­циальные средства контроля выделения памяти под динамические поля, ко­торые обычно используют при разработке конструкторов.

Эти средства иприемы их использования будут рассмотрены в параграфе 11.7.333Часть 2. Объектно-ориентированное программированиеЗадания для самопроверкиЗадание 1. Реализуйте класс, диаграмма которого изображена на рис. 9.6, б.Разработайте тестирующую программу.Задание 2. Спроектируйте класс для реализации объекта «Настраиваемое ме­ню», который, получив сообщение «Изобразить меню», выводит на экран окно,включающее окна меньшего размера, содержащие строки - названия пунктов (см.пример 8.4).

Объект должен создаваться в процессе работы программы. Количествопунктов меню и заголовки должны вводиться с клавиатуры. Разработайте тестирую­щую программу.11.4. Простой полиморфизмКак уже говорилось в параграфе 9.3, возможность переопределения ме­тодов при наследовании является частным случаем полиморфизма.Пример 11.4. Разработать класс для реализации объекта Трехмернаякомната 2, который должен реагировать на запрос о суммарной площади стени потолка (рис.

11.9).Класс, реализующий данный объект, будем наследовать от классаTRoom. Этот класс должен включать метод определения площади стен и по­толка. Логично назвать этот метод Square, но метод с таким именем уже оп­ределен в базовом классе. Поскольку объект не должен реагировать на за­прос о площади комнаты, метод Square базового класса можно переопреде­лить (рис. 11.10).Помимо переопределения метода Square класс TVRoom2 переопределя­ет метод инициализации полей объекта Init, добавляя определение значениянового поля height.В Borland Pascal сохраняется возможность обращения к переопределен­ному родительскому методу из методов класса-потомка. С этой целью передименем метода указывают служебное слово inherited или имя класса-родите­ля и точку:inherited Squareили TRoom.

SquareОкончательно получаем следующую программу:Площадь?Трехмернаякомната 2Рис. 11.9. ОбъектТрехмерная комната 2334TRoomlength, widthSquare(), Init()TVRoom2heightSquare(), Init()Рис. 11.10. Иерархия классовдля класса TV Room//. Иерархии классовProgram ex;Uses Room;Type TVRoom2 = object(TRoom)height;real;{дополнительное поле класса}function Square:real; {переопределенный метод класса}procedure InU(l, w,h:real); {переопределенныйинициализирующий метод}end;Procedure TVRoom2,Init;Begin{инициализируем поля базового класса}inherited InitQyW); {или TRooniInit(l,w) }height:-h; {инициализируем собственное поле класса}End;Function TVRoom2.Square;BeginSquare: ^inherited Square-^2'^height*(length'^width); {обращаемсяк переопределенному методу базового класса}End;VarA:TVRoom2;BeginAJnit(3A5.l2.8);WriteLnCrinouiadb стен и потолка = \A.Square);EndПодключаемый метод в этом случае определяется типом объекта, для ко­торого метод вызывают.

Характеристики

Тип файла
PDF-файл
Размер
13,06 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

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