Стандарты программирования на С++


         

Язык программирования C++ от Страуструпа

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

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

Парадигмы программирования
Парадигмы программирования - 2
Процедурное программирование
Модульное программирование
Абстракция данных
Абстракция данных - 2
Пределы абстракции данных
Объектно-ориентированное программирование
Объектно-ориентированное программирование - 2
"Улучшенный С"

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

Макросредства
Макросредства - 2
Упражнения
Упражнения - 2
Классы
Введение и краткий обзор
Классы и члены
Функции-члены
Классы
Ссылка на себя

Группирование особых ситуаций
Особые ситуации естественным образом разбиваются на семейства. Действительно, логично представлять семейство Matherr, в которое входят Overflow (переполнение), Underflow (потеря значимости) и некоторые другие особые ситуации. Семейство Matherr образуют особые ситуации, которые могут запускать математические функции стандартной библиотеки.

Производные особые ситуации
Производные особые ситуации - 2
Производные особые ситуации - 3
Запросы ресурсов
Конструкторы и деструкторы
Конструкторы и деструкторы - 2
Предостережения
Исчерпание ресурса
Исчерпание ресурса - 2
Особые ситуации и конструкторы

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

Узловые классы
Узловые классы - 2
Узловые классы - 3
Динамическая информация о типе
Динамическая информация о типе - 2
Информация о типе
Класс Type_info
Класс Type_info - 2
Система динамических запросов о типе
Расширенная динамическая информация о типе

Стандарты программирования на С++

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

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

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

Предпочитайте предоставление абстрактных интерфейсов
Вы любите абстракционизм? Абстрактные интерфейсы помогают вам сосредоточиться на проблемах правильного абстрагирования, не вдаваясь в детали реализации или управления состояниями. Предпочтительно проектировать иерархии, реализующие абстрактные интерфейсы, которые моделируют абстрактные концепции.

Обсуждение
Обсуждение - 2
Примеры
Исключения
Ссылки
Открытое наследование
Обсуждение
Обсуждение - 2
Исключения
Ссылки

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

Обсуждение
Обсуждение - 2
Примеры
Ссылки
Для уведомления об ошибках - исключения
Обсуждение
Обсуждение - 2
Обсуждение - 3
Обсуждение - 4
Примеры


Брин Дэвид - Война За Возвышение
Руководство по продвинутым файловым системам
Руководство пользователя FreeBSD Handbook
Справочник по настройке BIOS
Бушков Александр - Бешеная
Быстров Андрей - Лезвие Вечности
Введение в программирование на Лиспе
Булычев Кир - Когда Чапаев Не Утонул
Буркин Юлий - Сегодня, Мама!
91 беседа о фотомастерстве
Самоучитель по бизнесу в Internet
История компьютеров
Очерки по истории компьютерной науки и техники в Украине
Adobe Illustrator 7.0
Основы программирования на языке C
Visual C++ для начинающих
Трехмерное объектно-ориентированное программное обеспечение CAD
Мастерская радиолюбителя
Теория систем автоматического регулирования
Музыкальный редактор CubaseSX