|
Программирование >> Разработка устойчивых систем
Часть Специальные возможности Настоящий профессионализм проявляется во внимании к деталям. В этой части книги мы рассмотрим некоторые нетривиальные возможности С++, а также приемы программирования из арсенала истинных профессионалов С++. В некоторых ситуациях приходится отходить от канонов объектно-ориентированной разработки и определять тип объекта на стадии выполнения. Как правило, эту задачу лучше поручать виртуальным функциям, но при написании специальных программ (например, отладчиков, средств просмотра баз данных или классов) все равно требуется получать информацию о типе во время выполнения. В подобных ситуациях используется механизм RTTI. Этой теме посвящена глава 8. Множественное наследование подвергалось критике в течение многих лет, а в некоторых языках оно вообще не поддерживается. Тем не менее, при правильном применении оно становится мощным средством для создания элегантного и эффективного кода. За прошедшее время появилось немало стандартных приемов программирования с использованием множественного наследования; мы рассмотрим их в главе 9. Вероятно, одним из самых заметных новшеств в области программирования с момента появления объектно-ориентированных технологий стали паттерны - типовые решения целого круга сходных задач, связанных с разработкой программ. Паттерны применяются во многих ситуациях и могут быть реализованы в любом языке. В главе 10 описываются некоторые паттерны проектирования и способы их реали.зации в С++. В главе 11 рассматриваются преимущества и трудности многопоточного программирования. Многопоточная модель не упоминается в текущей версии стандарта С++, хотя она поддерживается большинством операционных систем. На примере переносимой, свободно распространяемой библиотеки многопоточного программирования мы покажем преимущества многопоточной модели для разработки высокофункциональных приложений, быстро реагирующих на действия пользователя. RTTI Механизм RTTI (RunTime Type Identification - идентификация типов в процессе исполнения) позволяет узнать динамический тип объекта в том случае, если у вас имеется только указатель или ссылка на базовый тип. RTTI можно рассматривать как вторичную возможность С++; сугубо практическое средство для выхода из сложных нетипичных ситуаций. Обычно программист намеренно игнорирует конкретный тип объекта и позволяет механизму виртуальных функций реализовать правильное поведение для этого типа. Тем не менее, в отдельных случаях бывает полезно знать фактический (то есть наиболее производный ) тип объекта, для которого имеется только указатель на базовый тип. Наличие такой информации позволяет более эффективно выполнять особые операции или избавиться от неудобных ограничений, обусловленных интерфейсом базового класса. Виртуальные функции, предназначенные для получения динамической информации о типе, присутствуют в большинстве библиотек классов. Когда в С++ был добавлен механизм обработки исключений, для его реализации требовалась информация о динамическом типе объектов, а предоставить доступ к этой информации было несложно. В этой главе объясняется, для чего нужен механизм RTTI и как им правильно пользоваться. Преобразования типов на стадии выполнения Один из способов определения фактического типа объекта по ссылке или указателю на базовый класс основан на динамическом преобразовании типа. Поскольку на диаграммах наследования базовые классы обычно изображаются над производными классами, такие преобразования называются понижающими. Рассмотрим следующую иерархию классов:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |