Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 81

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 81 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 812019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

*/), с1аязрорир та1 з!Ыег. риЫк1оа1 з!гдег(/'... */), 371 12.4. Проектирование иерархий классов 12.4.3.1. Критика 12.4.4. Локализация создания обьектов Болыпую часть приложения можно написать с использованием интерфейса1эа1 Ьох. Если производные интерфейсы реализуют больше средств, чем просто 1эа! Ьох, то боль<лую часть приложения можн<> написать с использованием интерфейсов 1иа! Ьох, 1иа! в1Ыег и т. д.

Однако создание объектов должно осуществляться с использованием специфцческихдляреализацииимен,такихкакС%' !иа1 с!!а1иВВ (!авЬ!па !иа! в1Ыег. Мы хотели бы минимизировать количество мест, где встречаются такие имена. Создание объектов трудно локализовать, если это нс делается систематически. Как всегда решение основывается на использовании косвенного обращения, Это можно сделать несколькими способами. Одним из простых решений является создание абстрактного класса с набором операций конструирования; с1аев 1иа1 та!сег ( риЫ!с и!г<иа! 1ио! Й!ил <!!а! (!нг, т!) =О, и!г!ио!Рорир ти! и!!<!е<л рорир и!Ыег (<иг, тй =О; // создоть объев<и с кволое нил вводом // создать всаль<вию<ции ноляинок 0- ); Для каждого интерфейса из семейства классов 1иа! Ьох, о котором пользователь дол- жен знать, 1иа! тайег предоставляет функцию создания объекта.

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

С точки зрения приложения оба подхода к проектированию эквивалентны в том смысле, что в обоих случаях почти весь код работает одинаково. В обоих случаях вы практически всегда можете рассматривать семейство классов 1иа! Ьох независимо от деталей реализации, относящихся к оконному интерфейсу, Например, нам не придется переписывать !и!егас! () из Э 12А,1 при переходе от одной иерархии классов к другой. При любом подходе реализация каждого класса из семей<ства 1иа1 Ьох должна быть переписана, когда открытый интерфейс системы пользовательского интерфейса изменяется.

Однако при проектировании на основе абстрактных классов почти весь пользовательский код зап<ищен от изменений в реализации иерархии и не нуждается в перекомпиляции после таких изменений. Это особенно важно, когда поставщик иерархии реализации выпускает новый впочти совместимый» релиз. Кроме того, пользователи иерархии абстрактных классов меньше рискуют попасть в зависимость от способа реализации внешней системы, чем пользователи классической иерархии. Пользователи абстрактного класса 1иа! Ьох не могут случайно воспользоваться механизмами реализации, потому что им доступны только средства, явно указанные в иерархии 1иа1 Ьох, и ничто не наследуется неявно из зависящего от реализации базового класса.

Глава 12. Производные классы 372 Теперь мы представим каждую систему пользовательского интерфейса классом, производным от 1иа1 тайег. с!аззВВ тадег:риЫ!с1иа! тадег( //создотьВВ-версию риЫи" Роа! Йа!' Йа! (!п1, (п1); Рорир в'а! и!Ыег' рорир з1Ыег(шй шсг )' с!азз 1.Я тадег:риЬВс1иа! таЬег( риЫ(с: 1иа! Йа!" йа! (1л1, 1лг) Рорир !иа( з!!йег'рорир и!Ыег(!п1,1п1); // создать |5-версию Каждая функция создает объект с требуемым интерфейсом и типом реализации Например: Реа! Йа1*ВВ тааегсйа1(!л1 а, ш1Ь) ( ге1игп пеги ВВ !иа( йа1 (а, Ь), 1иа! ЙаРЕВ тавегй(а1 (ш1а, (л1Ь) ( ге!игл лет ВВ Ыа1 йа! (а, Ь); Имея указатель на 1иа1 тайег, пользователь теперь может создавать объекты, не зная, какая система пользовательского интерфейса в действительности задействова- на. Например; иоЫ изег(1иа! тадег р(т) //создать подходящийобъект // с кнопочным вводом 1иа! Ьох' рЬ = р1т->йга! (О, 99); // для пользователей ВВ //для пользователей !5 ВВ тадегВВ 1тр1, ЕЗ сладегВЗ !тр1; иоЫ с!ниег () ( изег(йВВ 1тр1(; О использует ВВ изег (ЫБ 1тр1); // использует !5 12.5.

Иерархии классов и абстрактные классы Абстрактный класс является интерфейсом, Иерархия классов — средством последовательного построения классов. Естественно, каждый класс предоставляет своим пользователям интерфейс, и некоторые абстрактные классы обеспечивыот полезную функциональность, но тем не менее «интерфейс» н «строительные блоки» вЂ” вот главные роли абстрактных классов и иерархии классов. 373 12.7. Упражнения Классическая иерархия — это иерархия, в которой отдельные классы предоставляют пользователям полезные функции и одновременно являются строительными блоками для реализации более мощных или специализированных классов. Такие иерархии идеальны для поддержки программирования методом последовательных усовершенствований. Они предоставляют максимум поддержки для реализации новых классов, в то время как новые классы в значительной степени используют существующую иерархию.

Классические иерархии имеют тенденцию смешивать вопросы реализации с интерфейсами для пользователей. В этих случаях на помощь приходят абстрактные классы. Иерархии абстрактных классов предоставляют ясный и мощный способ выражения концепций, не загроможденных вопросами реализации, и при этом не приводят к значительным накладным расходам. И последнее: вызов виртуальной функции довольно дешев и не зависит от того, барьер абстракции какого типа он пересекает. Вызов члена абстрактного класса стоит не дороже вызова любой другой виртуальной функции. Логическим завершением этих размышлений является система, предоставлляемая пользователю в виде иерархии абстрактных классов и реализуемая при помощи классической иерархии.

12.6. Советы [1] Не используйте поля тина; 3 12.2.5, [2] Пользуйтесь указателями и ссылками во избежание «срезки» при копировании; 9 12,3, [3] Пользуйтесь абстрактными классами, чтобы сфокусировать проект на предоставлении ясных интерфейсов; 9 12.3. [4] Пользуйтесь абстрактными классами для минимизации интерфейсов; 3 12А.2.

[5] Пользуйтесь абстрактными классами для отделения деталей реализации от интерфейсов; 9 12.4.2. [б] Пользуйтесь виртуальными функциями, чтобы новые реализации могли добавляться без изменения пользовательского кода; 9 12А,1. [7] Пользуйтесь абстрактными классами для сведения к минимуму перекомпиляции пользовательского кода; э 12А.2. [8] Пользуйтесь абстрактными классами, чтобы добиться сосуществования альтернативных реализаций; э 12А.З. [9] В классе с виртуальной функцией стоит иметь виртуальный деструктор; Э 12.4.2.

[10] Абстрактный класс обычно не нуждается в конструкторе; 9 12А.2. [11] Разделяйте представления различных концепций; 9 12А.1.1. 12.7. Упражнения 1. ('1) Определено с1азз Ьасе ( риЬас. гцгГиа! эой 1ат ]]1 соиГ « 'Ьазе~а', ] 374 Глава 12. Производные классы 2 3 5 б 7 Создайте из базе два производных класса, и для каждого определите функцию !ат ((, вьгцодящую имя класса.

Создайте объекты этих классов и вызовите с ними !ат ((. Присвойте указатели на объекты производных классов указателям на базе* и вызовите !ат (( через эти указатели. ('3.5) Реализуйте простую графическую систему с использованием любых графических средств, доступных в вашей системе (если в вашей системе нет хорошей графики пли у вас нет никакого опыта работы с ней, вы можете создать «ЛВСП-реализацию», где ппксель — это знакоместо, и вы рисуете, помещая подходящий символ, например ', в определенную позицию). Ф!пг(ош (и, т( (окно) создает на экране область размером и на пь Обращение к точкам на экране происходит в декартовых координатах (х, у). Окно 1»!пс(ош ш имеет текущую позицию и»сиггеп! ((.

Вначале сиггеп1 равна Рот1(О, О(. Текущую позицию можно задать с помощью и».сиггеп1(р(, где р имеет тпп Ро!п1 (позиция). Объект типа Ро!п1 задается парой координат Ро!п1(х, у(. Е!пе задается парой объектов Рот1: А!пе (щ.сиггеп1((, р2(; класс Яйаре (фнгура) является общим интерфейсом для Ро! (точка), Типе (линпя), йес1апу!е (прямоугольник), С!гс!е (круг) и т. д.

Рот! не является опаре. Для представления Ро!пг р на экране можно пользоваться ,0о1,;!»о1 (р(. буаре невидим до вызова функции с( аш (( (нарисовать). Например: и».г!гаи»(С!гс!е (и».сиггеп! ((, !О((. Каждый Бпаре имеет девять специальных точек: е (восток), ш (запад), и (север), з (юг), пе (северо-восток), пш (северо-запад), зе (юго-восток), зш (юго-запад) и с (центр).

Например, Т.!пе (х.с 0, у.пв ((( создает линию от центра х до верхнего левого угла у, После вызова г(гащ (( текущая позиция эйаре равна зе. )7ес1апу!е задается координатами левого нижнего и правого верхнего углов: й»ес(апд!е (гисиггеп1((, Ро!п1(!О, !О((. В качестве теста выведите простой детский рисунок домика с крышей, двумя окнами и дверью.

(*2) Рисование ойаре на экране производится сегментами линий. Реализуйте операции, которые меняют внешний вид атнх сегментов, з.1Ис)епезз (п) устанавливает толщину линии в О, 1, 2 или 3. Здесь 2 — толщина линий по умолчанию, а 0 означаетаст невидимую линию. Кроме того, пусть сегменты могут быть; зо!!И (сплошнымп), аазпег! (пунктирными) или а1о11ег! (пз точек).

тип сегмента задается функцией Зйаресои(!!пе ((. (*2.5) Реализуйтс функцию Ыпесаггощйеас! ((, которая добавляет стрелки в концы линии. У линии два конца и стрелки могут указывать в два направления относительно линии, поэтому аргументы агговйеаг! ((должны уметь задавать по крайней мере четыре альтернативы. (*3.5) Гарантируйте, что точки и сегменты линий, оказывающиеся за пределами окна, не появятся на экране. Это часто называют «отсечкой». Для этого (и только этого) упражнения не пользуйтесь средствами графической системы. (*25) Добавьте к графической системе тип Тех1.

Тех1 является прямоугольным Япаре, в котором выводятся символы. По умолчанию каждый символ занимает одну позицию вдоль каждой координатной оси. (*2) Определите функцию, которая рисует линию, соединяющую две фигуры (3йаре), вычисляя две «ближайшие точки» и соединяя их. ('3) Добавьте к вашей простой графической системе цвет, Цветными могут быть: фон, внутренность замкнутой фигуры и контур фигуры. 12.7.

Упражнения 375 9. (*2) Рассмотрим пример: с!аев СЬаг рес( !и! вг, ейаг е!еспепг(!)' риййс; всайеСЬпг иве*лет слиг эее)!пгв); ейагй орегагог() )сп! с) ( ге!игл е(етеп!)!). ) 0- ); Определите пеш сйаг вес (), выделяющую непрерывную память для объекта СЬаг вес таким образом, чтобы доступ к элементам мог осуществляться по индексу через е!етеп(, как показано выше. При каких условиях это вызовет серьезные проблемы? 10. (*2.5) При цаличсии классов Ссгс!е (круг), 5с)иаге (квадрат) и Тпапд!е (треуголь нпк), производных от 5Ьаре (фигура), определите функцию сп(егеес! )) (пересечение), которая принимает две фигуры ЯЬаре» в качестве аргументов н вызывает подходяшие функции для определения того, пересекаются ли этн фигуры.

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

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

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

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