Программирование >>  Формирование пользовательского контейнера 

1 [ 2 ] 3 4 5 ... 156


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

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

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

Управляемость

Существуют две конкурирующие точки зрения на языки профаммирования. Первая утверждает, что следует защищать профаммиста от возможных проблем, исключая из языка такие особенности, которые могут их вызвать в первую очередь. Хотя это звучит обнадеживающе, но в результате приводит к тому, что мощные элементы языка, способные в некоторых ситуациях создавать проблемы, офаничиваются, выхолащиваются или целиком удаляются из него. Два примера таких элементов - указатели и явное распределение памяти. Указатели считаются рискованным средством, потому что они часто некорректно используются начинающими профаммистами и могут (в некоторых случаях) применяться для пробивания бреши в барьерах системы безопасности. Явное распределение памяти (например, с помощью



Перегрузка операций

Одна из наиболее важных функциональных характеристик С++ - механизм перегрузки операций, обеспечивающий расширяемость типов данных (type extensibility). Расширяемость типов позволяет вам добавлять и полностью встраивать новые типы данных в профаммную среду С++. Она основана на двух функциональных возможностях языка. Первая - классы (тип данных class), которые позволяют вам описать новый тип данных.

операций new и delete) опасно, потому что программист может необдуманно выделять большие блоки памяти или забыть освободить память, когда она ему больше не нужна, в результате чего происходит утечка памяти (memory leak). Хотя обе функциональные возможности сопряжены с риском, они предоставляют программисту оперативный контроль (detailed control) и возможность создавать высокоэффективный код. К счастью, С++ не относится к числу сторонников описываемого подхода.

Вторая точка зрения - та, которой придерживается С++, утверждает, что профаммист - хозяин ситуации. Это значит, что он управляет и контролирует. Язык не должен мешать вам создавать плохие профаммы. Скорее, первостепенная задача языка - предоставить специалисту быструю, ненавязчивую рабочую среду. Если вы хороший профаммист, ваша работа продемонстрирует это. Если вы профаммируете плохо, это тоже найдет отражение в вашей работе. По сути, С++ дает вам мощное рабочее орудие и уступает дорогу. У профаммиста на С++ никогда не возникает необходимости бороться с языком.

Очевидно, что большинство профаммистов предпочитают философию С++.

Оперативный контроль и управление

Язык С++ делает больше, чем просто предоставляет профаммисту средства контроля, он дает возможность оперативного контроля. Рассмотрим к примеру операцию инкремента ++. Как вы знаете, в С++ есть как префиксная, так и постфиксная формы записи. Префиксный вариант изменяет операнд на величину инкремента до получения им значения, постфиксный - после. Это позволяет вам управлять обработкой выражений, содержащих операцию ++. Другой пример оперативного управления - спецификатор register. Объявляя переменную с помощью register, вы сообщаете компилятору о необходимости оптимизировать доступ к этой переменной. Таким образом, вы выбираете переменные, задавая им наивысший приоритет для оптимизации. Детализированное управление, предоставляемое профаммисту языком С++, - одна из причин, по которой С++ успешно заменил ассемблер при разработке системного кода.



По-моему более точный перевод: переопределение операций , но в литературе уже закрепился вариант, приведенный в тексте. - Пер.

Вторая - перегрузка операций (operator overloading) - дает возможность определить, что означает та или иная операция в зависимости от типа класса. Благодаря использованию классов и перегрузке операций вы можете создавать новые типы данных и обрабатывать их, как и встроенные типы, - посредством операций.

Расширяемость типов - весомая характеристика, делаюшая язык С++ скорее открытой системой, чем закрытой. Представьте, что вам необходимо обработать координаты трехмерной системы. Вы можете сделать это, создав новый тип данных тьгеев, и затем определить различные операции над объектами этого типа. Например, можно использовать операцию + для сложения двух переменных типа тьгеев, или операцию == для проверки их равенства. Далее приведен код, который оперирует переменными тьгеев так же, как переменными любого встроенного типа: ThreeD а(0. О, 0). Ь(1, 2, 3), с(5.б,7);

а = b + с; ...

if (а == с) ...

Без механизма перегрузки операций обработку объектов типа ThreeD пришлось бы вести с помошью вызова функций, таких как: addThreeoo и EquaiThreeD (), ЧТО представляется менее удобным.

Ясная, хорошо организованная объектная модель

Объектная модель языка С++ - это выдающийся образец краткости! В стандарте языка С++, разработанном ISO (International Organization of Standardization, Международная организация по стандартизации), описание объектной модели занимает меньше одной страницы (шесть абзацев, если быть точным). В этих нескольких абзацах объясняется суть объекта, описываются такие понятия, как время жизни объекта и полиморфизм . Например, стандарт дает такое определение объекта: Объект - это область памяти . Подобные образцы простоты базовых понятий и делают объектную модель С++ столь замечательной.

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



1 [ 2 ] 3 4 5 ... 156

© 2006 - 2021 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика