Главная » Просмотр файлов » А. Александреску - Современное проектирование на C++

А. Александреску - Современное проектирование на C++ (1119444), страница 8

Файл №1119444 А. Александреску - Современное проектирование на C++ (А. Александреску - Современное проектирование на C++) 8 страницаА. Александреску - Современное проектирование на C++ (1119444) страница 82019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Решение этой проблемы заключается в следуюшем. При выводе главного класса из классов стратегий следует использовать зашишенное или закрытое наследование. Од- нако это может ограничить применение расширенных стратегий (раздел !.6). Подобную задачу л1ожно легко и эффективно решить, если потребовать, чтобы стратегии применяли невиртуальный зашишенныЙ деструктор. темр1ате <с1азз т> зтгист ОрмеухСгеатог ( зтатт'с т* сгеатеО ( гегмгп пехх Т; рготессед".

-ОрнеххсгеатогО () Поскольку деструктор зашишен, объекты стратегий могут уничтожаться только объектами производных классов, поэтому теперь внешние классы не могут применять опе- " В главе 4 показано, почему зто происходит. 35 Глава 1. Разработка классов на основе стратегий ратор де1есе к указателям на объекты стратегий. Деструктор не виртуален, поэтому дополнительных затрат памяти или замедления работы программы не происходит. 1.8. Факультативные возможности, предоставляемые неполной конкретизацией Язык С++ придает стратегиям особую мошь, снабжая их интересным свойством.

Если функция-член шаблонного класса никогда не используется, она не конкретизируется компилятор вообше игнорирует ее, проверяя лишь синтаксические ошибки.' Это дает главным классам возможность задавать и применять факультативные свойства классов стратегий. Например, определим функцию-член 5н1ссйггососуре в классе н1ддесмападег. // код библиотеки сенр1асе <сеир1асе <с1аьв> с1аав сгеас1опго11су> с1авз н1ддесмападег : рцб)зс сгеас1опво11су<н1ддес> чозд 5н1сспягососуре(н1ддес" рненвгососуре) ( сгеас1опяо11су<н1ддес>б нуво11су = <сй15; де1есе нупо11су.бетргототуреО; нуяо11су.5есвготоСуре(риенягототуре); Возникаюший контекст очень интересен.

° Если пользователь конкретизирует класс н1 ддесмапацег с помошью класса стратегии Сгеасог, подлерживаюшей работу с прототипами, можно использовать функцию 5кд сспргососуре. ° Если пользователь конкретизирует класс н1ддесмападег с помошью класса стратегии сгеасог, не поддерживаюшей работу с прототипами, и попытается исподьзовать функцию 5н1 ссЬРгототуре, во время компиляции возникнет ошибка ° Если пользователь конкретизирует класс нбддесмападег с помошью класса стратегии Сгеасог, не поддерживаюшей работу с прототипами, и не пытается использовать функцию 5нбсспргототуре, программа считается правильной. Все сказанное выше означает, что класс н1дцесмападег может использовать факультативные расширенные интерфейсы, но при этом прололжает правильно работать и с интерфейсами, обладаюшими более белными возможностями, пока пользователь не попытается использовать опрелеленные функции класса н1 ддесмападег.

Автор класса н1ддесмападег может определить стратегию сгеасог следуюшим образом. Стратегия сгеасог определяет шаблонный класс типа т, содержаший функцию-член Сгеасе. Эта функция должна возврашать указатель на новый объект типа т. В реализации можно определить две дополнительные функции- члены:т= бесягососуреО и 5есРгососуре(т*), характеризуюшие семантику ~ В соответствии со станларюм языка С++ строгость синтаксической проверки неиспользуемых шаблонных функций зависит от конкретной реализации.

Компилятор ие вылалняет семантическую проверку — например, поиск символов не проводится. зе Часть К Методы получения и установки прототипов, используемых для созлания объектов. В этом случае класс изддесмападег солержит функцию-член 5взсс)зягососуре(т* рневргососуре), удаляюшую текущий прототип и залаюшую его для входного аргумента.

Вместе с классами стратегий неполная конкретизация обеспечивает замечательную свободу при разработке библиотек. Можно реализовать тощие ()сап) главные классы. способные использовать дополнительные свойства и состояшие из минимальных стратегий. 1.9. Коййбинирование классов стратегий Наибольшую пользу приносят комбинации стратегий. Обычно хорошо разрабо- танный класс использует несколько стратегий для реализации разных аспектов своего функционирования. Затем пользовзтель библиотеки выбирает нужный режим работы, комбинируя несколько классов стратегий.

Например, рассмотрим процесс разработки класса для обобшенного интеллекту- ального указателя. (Полная реализация этого класса осугцествлена в главе 7.) Допус- тим, что нам нужно указать два варианта проектного решения, используя стратегии; потоковую модель и проверку перед разыменованием. Затем мы реализуем шаблон- ный класс 5вагсРсг, используюший две стратегии, севр1асе < с1аээ т, севр1асе <с1аээ> с1аээ с)зескзпдяо1зсу, севр1асе <с1аээ> с1ааа тбеаНпдмоде1 > с)аээ 5вагсясг; Класс 5вагсРсг имеет три шаблонных параметра — тип указателя и лае стратегии.

Внутри этого класса эти лве стратегии летально описаны, так что класс 5вагсРсг ста- новится хорошо продуманной оболочкой, интегрирующей две разные стратегии, з не жесткой, законсервированной реализацией. Разрабатывая класс 5вагсясг таким обра- зом, можно предоставить пользователю возможность конфигурировать его с помогцью оператора суредет, Сурег)ет 5вагсРСг<Иддес, нос)зес)хзпд, 5зпд1етбгеадед> итддесясг; В рамках некоторых приложений можно определять и применять несколько клас- сов интеллектуальных указателей. СурЕОЕК 5ваСРСг<ИИдес, епгогсеноскц11, 5зпд1етпгеаоео> 5атеизддесясг; Две стратегии можно сформулировать слелуюшим образом. Стратегия СЬескзпд.

Шаблонный класс Озескзпдяо1зсу<т> должен содержать функцию-член Озес)х, которую можно вызывать с параметром типа тГч Перед разы- менованием указателя класс 5вагсясг вызывает функцию сйеск, передавая ей объект, на который ссылается ленный указатель. Стратегия то геаН пдмог)е1.

Шаблонный класс т)згезИ пдмог)е1<т> должен содер- жать внутренний тип, называемый ьоск, конструктор которого получает ссылку тб. Нз протяжении всего сушествования объекта ьоск все операции нал объектами типа т регистрируются. Глава 1. Разработка классов на основе стратегий Например, ниже приведена реализация классов стратегий иосИесК!пд и дпуог- сеиотии11. тевр!ате <с1азз т> зтгист нос1зескзп9 ( зтат(с иозд сйесх(т>) () ): тевр1ате <с1азз т> зсгист впбогсеносни11 с1азз ни!!по(птегвхсерт(оп ; риб!зс зсд::ехсерсзоп ( всат(с чозд с1зеск(т* рсг) ( (У (! рсг) с1згов ни11ро(псегехсерт!опо; ) Подключая разные классы стратегии проверки, можно реализовать различные режимы работы объектов.

Ниже показано, что можно даже инициализировать объект, на который ссылается указатель, значением, заданным по умолчанию, получив ссылку на указатель. севр1асе <с1аьа т> зтгист апзигеносни11 агат(с чозд спеск(т*б рсг) ( !1 (1ртг) ртг ~ Сетре~аи1туа1ие()! ) Класс ввагсотг использует стратегию спеси!па следуюшим образом. тевр)ате с1азз т, тевр1ате <с1аав> с1ааа СИесх(пяро1!су, севр)асе <с1аав> с1азэ т1згеад1пдиоде! с)азз Бвагтрсг : риб!зс С1зесх!ояяо1зсу<т>, риб!зс тпгеаНпямоде1<ввагсрсг> ( орегатог->О ( Сурепаве тнгеад!аймоде1<ввагсртг>::~оси йиагд(>сИз)1 Спеск! попо!(су<т>:: спеси(ро( птее ) гесигп ро(атее ; рг(хате: т ро(псее ; ); Отметим, что оба класса стратегий Спаса(пйяо!(су и тпгеаНпямоде1 используют одни и те же функции. Функционирование оператора ввагтртг::орегатог-> зависит от двух шаблонных аргументов.

В этом проявляется сила, присушая комбинированию стратегий. l Разложив класс на ортогональные стратегии, можно обеспечить широкий спектр режимов работы с помошью небольшого по объему кода. Часть1. Методы 1.10. Настройка структур с помощью классов стратегий Одно из ограничений, присущих шаблонам, как было указано в разлеле ).4, состо- ит в том, что с помощью шаблонов невозможно уточнить структуру класса — только его режим работы. В то же время проектирование, основанное на использовании стратегий, позволяет уточнить структуру вполне естественным образом. Допустим, что нам нужно создать класс 5вагтятг без применения указателей.

На- пример, на отдельных платформах некоторые указатели могут быть представлены осо- бгям образом — в виде целого числа, которое передается системной функции, возвра- щающей настоящий указатель. Для того чтобы решить эту задачу, можно определить доступ к указателю, например, с помощью стратегии 5тгистцге.

Эта стратегия абст- рагирует способ хранения указателя. Следовательно, в этой стратегии нужно указать типы с именем Ро)птегтуре (тип указателя) и яе1егепсетуре (тип ссылки). То, что тип указателя не задан жестко как т*, представляет собой большое преимуше- ство. Например, можно использовать класс 5вагтятг с нестандартными типами указателей (такими, как указатели пеаг и Раг, применяющиеся на компьютерах, имеющих сегменти- рованную архитектуру) или легко реализовать такие остроумные решения, как функции ЬеЕоге и а1тег (бггооанцр, 2000а).

Эти возможности чрезвычайно интересны. По умолчанию интеллектуальный указатель хранится как простой указатель, снаб- женный интерфейсом стратегии 5т гоств ге. тевр1ате <с1азз т> с1авв оеЕаи1т5вагтятг5тогаде ( рцЬ1(с: СуредеР т* Розптегтуре; туредеГ тб яе1егепсетуре; рготестед: Розптегтуре аетРозптегО ( гетцгп ртг; чеза 5етяозпсег(Розптегтуре ртг) ( розптее = ртг; ) рг(часе: Розптегтуре ртг ; Фактический способ хранения полностью скрыт за фасадом интерфейса стратегии 5тгистцге.

Теперь класс 5вагтртг может использовать стратегию хранения указателя 5тогаде, а не группироваться с типом т*. тевр1ате < с1ава т, тевр1ате <с1азз> с1аьа СЬескРо1зсу, тевр1ате <с1азв> с1аьа тбгеаб)пдмобе1, тевр1ате <с1азв> с1аьа 5тогаде = Пе~аи1т5вагтятг5тогаде > с1аьа 5вагтРтг; Разумеется„ для того, чтобы внедриться в нужную структуру, класс 5вагтРтг должен либо быть производным от класса 5тогаде<т>, либо группироваться с объектом типа 5тогаде<т>.

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

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

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