Эффективность и Структура

Эффективность и Структура

С++ был развит из языка программирования C и за очень немногими исключениями сохраняет C как подмножество. Базовый язык, C подмножество С++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы С++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

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

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

Особое внимание, уделенное при разработке С++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки C. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. С++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, размер каждой из которых намного ниже указанных пределов. Естественно, сложность написания и поддержки программы зависит от сложности разработки, а не просто от числа строк текста программы, так что точные цифры, с помощью которых были выражены предыдущие соображения, не следует воспринимать слишком серьезно.

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

В этой книге особый акцент делается на методах создания универсальных средств, полезных типов, библиотек и т.д. Эти средства пригодятся как тем программистам, которые пишут небольшие программы, так и тем, которые пишут большие. Кроме того, поскольку все нетривиальные программы состоят из большого числа полунезависимых частей, методы написания таких частей пригодятся и системным, и прикладным программистам.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Прозрачность и эффективность картинки

Из книги автора

Прозрачность и эффективность картинки Я создал иконки полностью белыми PNG-изображениями, зная, что затем применю свойство opacity, чтобы отрегулировать прозрачность на уровне CSS. Такой подход изменил то, как я в некоторых ситуациях думаю о графических объектах


Эффективность одновременных соединений

Из книги автора

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


Эффективность беглого просмотра

Из книги автора

Эффективность беглого просмотра Вы долго трудились и в итоге составили убедительный продающий текст. Как же сделать, чтобы посетители его прочитали? Законы рекламы здесь уже роли не играют, мы подошли к вопросу о юзабилити сайта. Специалисты в этом случае используют два


Как измерять эффективность юзабилити

Из книги автора

Как измерять эффективность юзабилити Для измерения эффективности юзабилити в интернет-магазине необходимо постоянно проводить сплит-тестирование. Это когда создается несколько вариантов одной и той же страницы (минимум два) и в результате анализа статистики


8.7 Эффективность

Из книги автора

8.7 Эффективность Можно было бы ожидать, что раз ввод/вывод «stream.h» определен с помощью общедоступных средств языка, он будет мнее эффективен, чем встроенное средство. На самом деле это не так. Для действий вроде «поместить символ в поток» использются inline-функции,


8.5. Эффективность

Из книги автора

8.5. Эффективность Существует несколько аспектов эффективности программ, включая такие наиболее общие, как время выполнения и требования по объему памяти. Другим аспектом является время, необходимое программисту для разработки программы.Традиционная архитектура


3.3.4 Эффективность

Из книги автора

3.3.4 Эффективность Ничего не требуется. Однако в описании продукта должны присутствовать соответствующие формулировки


4.4 Эффективность (Efficiences)

Из книги автора

4.4 Эффективность (Efficiences) Набор атрибутов, относящихся к соотношению между уровнем качества функционирования программного обеспечения и объемом используемых ресурсов при установленных условиях.Примечание - Ресурсы могут включать другие программные продукты,


А.2.4 Эффективность (Efficiency)

Из книги автора

А.2.4 Эффективность (Efficiency) А.2.4.1 Характер изменения во времени (Time behavior) Атрибуты программного обеспечения, относящиеся к временам отклика и обработки и к скоростям выполнения его


Эффективность (Efficiency)

Из книги автора

Эффективность (Efficiency) Определение: эффективностьЭффективность - это способность ПО как можно меньше зависеть от ресурсов оборудования: процессорного времени, пространства, занимаемого во внутренней и внешней памяти, пропускной способности, используемой в устройствах


Динамическое связывание и эффективность

Из книги автора

Динамическое связывание и эффективность Можно подумать, что сила механизма динамического связывания приведет во время выполнения к недопустимым накладным расходам. Такая опасность существует, но аккуратное проектирование языка и хорошие методы его реализации могут


У16.1 Наследование: простота и эффективность

Из книги автора

У16.1 Наследование: простота и эффективность Перепишите и упростите ранее созданную реализацию защищенного стека, сделав класс STACK3 потомком, а не клиентом STACK, чтобы избежать излишних обходных путей. (Подсказка: см. правила взаимодействия наследования и скрытия