КнигоПровод.Ru23.04.2024

/ИТ-книги

Стандарты программирования на C++: 101 правило и рекомендации — Саттер Г., Александреску А.
Стандарты программирования на C++: 101 правило и рекомендации
Саттер Г., Александреску А.
год издания — 2015, кол-во страниц — 224, ISBN — 978-5-8459-1933-5, тираж — 200, язык — русский, тип обложки — мягк., масса книги — 340 гр., издательство — Вильямс
серия — C++ In-Depth
цена: 599.00 рубПоложить эту книгу в корзину
C++ Coding Standards
101 Rules, Guidelines and Best Practices

Herb Sutter
Andrei Alexandrescu

ADDISON-WESLEY, 2005

Пер. с англ. к-та тех. наук И. В. Красикова

Формат 70x100 1/16
ключевые слова — c++, наследован, исключен, stl, масштабируем, полиморф, компил, перегрузк, указател

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

Авторы не обошли вниманием ни один из разделов C++: проектирование и стиль кодирования, функции, операторы, дизайн классов, наследование, конструкторы и деструкторы, копирование, присваивание, пространства имён, модули, шаблоны, обобщённость, исключения, контейнеры и алгоритмы STL, а также многое другое. Каждая рекомендация сопровождается кратким описанием и примерами из практики. От определения типа до обработки исключений — в этой книге собран лучший опыт, последние достижения и наработки, о которых вы могли просто ещё не знать, даже если уже давно используете C++. В книге вы найдёте ответы на массу различных вопросов, в том числе:
• Что следует стандартизировать, а что нет?
• Каким образом обеспечить масштабируемость кода?
• Какие элементы входят в разумную стратегию обработки ошибок?
• Как (и почему) следует избегать излишних зависимостей?
• Когда и как следует совместно использовать статический и динамический полиморфизм?
• Как обеспечить «безопасное» перекрытие функций?
• Когда следует обеспечивать бессбойный обмен объектов?
• Почему и как следует предотвращать пересечение исключениями границ модулей?
• Почему вместо массивов следует использовать vector и string
• Как выбрать верный алгоритм STL для поиска или сортировки?
• Каким правилам надо следовать для написания кода, безопасного в смысле использования типов?

Работаете ли вы в одиночку или в группе — эта книга поможет вам писать более ясный код, причём делать это более быстро и качественно.

ОГЛАВЛЕНИЕ

Предисловие9
 
Вопросы организации и стратегии13
 
0. Не мелочитесь, или Что не следует стандартизировать14
1. Компилируйте без замечаний при максимальном уровне предупреждений16
2. Используйте автоматические системы сборки программ19
3. Используйте систему контроля версий20
4. Одна голова хорошо, а две — лучше21
 
Стиль проектирования23
 
5. Один объект — одна задача24
6. Главное — корректность, простота и ясность25
7. Кодирование с учётом масштабируемости27
8. Не оптимизируйте преждевременно29
9. Не пессимизируйте преждевременно31
10. Минимизируйте глобальные и совместно используемые данные32
11. Сокрытие информации33
12. Кодирование параллельных вычислений34
13. Ресурсы должны быть во владении объектов37
 
Стиль кодирования39
 
14. Предпочитайте ошибки компиляции и компоновки ошибкам времени
выполнения40
15. Активно используйте const42
16. Избегайте макросов44
17. Избегайте магических чисел46
18. Объявляйте переменные как можно локальнее47
19. Всегда инициализируйте переменные48
20. Избегайте длинных функций и глубокой вложенности50
21. Избегайте зависимостей инициализаций между единицами компиляции52
22. Минимизируйте зависимости определений и избегайте циклических
зависимостей53
23. Делайте заголовочные файлы самодостаточными55
24. Используйте только внутреннюю, но не внешнюю защиту директивы
#include56
 
Функции и операторы57
 
25. Передача параметров по значению, (интеллектуальному) указателю
или ссылке58
26. Сохраняйте естественную семантику перегруженных операторов59
27. Огдавайте предпочтение каноническим формам арифметических
операторов и операторов присваивания60
28. Предпочитайте канонический вид ++ и --, и вызов префиксных
операторов62
29. Используйте перегрузку, чтобы избежать неявного преобразования
типов64
30. Избегайте перегрузки &&, || и , (запятой)65
31. Не пишите код, который зависит от порядка вычислений аргументов
функции67
 
Проектирование классов и наследование69
 
32. Ясно представляйте, какой вид класса вы создаёте70
33. Предпочитайте минимальные классы монолитным72
34. Предпочитайте композицию наследованию73
35. Избегайте наследования от классов, которые не спроектированы
для этой цели75
36. Предпочитайте предоставление абстрактных интерфейсов77
37. Открытое наследование означает заменимость. Наследовать надо
не для повторного использования, а чтобы быть повторно
использованным79
38. Практикуйте безопасное перекрытие81
39. Виртуальные функции стоит делать неоткрытыми, а открытые —
невиртуальными83
40. Избегайте возможностей неявного преобразования типов85
41. Делайте данные-члены закрытыми (кроме случая агрегатов в стиле
структур С)87
42. Не допускайте вмешательства во внутренние дела89
43. Разумно пользуйтесь идиомой Pimpl91
44. Предпочитайте функции, которые не являются ни членами,
ни друзьями94
45. new и delete всегда должны разрабатываться вместе95
46. При наличии пользовательского new следует предоставлять все
стандартные типы этого оператора97
 
Конструкторы, деструкторы и копирование99
 
47. Определяйте и инициализируйте переменные-члены в одном порядке100
48. В конструкторах предпочитайте инициализацию присваиванию101
49. Избегайте вызовов виртуальных функций в конструкторах
и деструкторах102
50. Делайте деструкторы базовых классов открытыми и виртуальными
либо защищёнными и невиртуальными104
51. Деструкторы, функции освобождения ресурсов и обмена не ошибаются106
52. Копируйте и ликвидируйте согласованно108
53. Явно разрешайте или запрещайте копирование109
54. Избегайте срезки. Подумайте об использовании в базовом классе
клонирования вместо копирования110
55. Предпочитайте канонический вид присваивания113
56. Обеспечьте бессбойную функцию обмена114
 
Пространства имён и модули117
 
57. Храните типы и их свободный интерфейс в одном пространстве имён118
58. Храните типы и функции в разных пространствах имён, если только
они не предназначены для совместной работы120
59. Не используйте using для пространств имён в заголовочных файлах
или перед директивой #include122
60. Избегайте выделения и освобождения памяти в разных модулях125
61. Не определяйте в заголовочном файле объекты со связыванием126
62. Не позволяйте исключениям пересекать границы модулей128
63. Используйте достаточно переносимые типы в интерфейсах модулей130
 
Шаблоны и обобщённость133
 
64. Разумно сочетайте статический и динамический полиморфизм134
65. Выполняйте настройку явно и преднамеренно136
66. Не специализируйте шаблоны функции140
67. Пишите максимально обобщённый код142
 
Обработка ошибок и исключения143
 
68. Широко применяйте assert для документирования внутренних
допущений и инвариантов144
69. Определите разумную стратегию обработки ошибок и строго
ей следуйте146
70. Огличайте ошибки от ситуаций, не являющихся ошибками148
71. Проектируйте и пишите безопасный в отношении ошибок код151
72. Для уведомления об ошибках следует использовать исключения154
73. Генерируйте исключения по значению, перехватывайте — по ссылке158
74. Уведомляйте об ошибках, обрабатывайте и преобразовывайте их там,
где следует159
75. Избегайте спецификаций исключений160
 
STL: контейнеры163
 
76. По умолчанию используйте vector. В противном случае выбирайте
контейнер, соответствующий задаче164
77. Вместо массивов используйте vector и string166
78. Используйте vector (и string::с_str) для обмена данными с API
на других языках167
79. Храните в контейнерах только значения или интеллектуальные
указатели168
80. Предпочитайте push_back другим способам расширения
последовательности169
81. Предпочитайте операции с диапазонами операциям с отдельными
элементами170
82. Используйте подходящие идиомы для реального уменьшения ёмкости
контейнера и удаления элементов171
 
STL: алгоритмы173
 
83. Используйте отладочную реализацию STL174
84. Предпочитайте вызовы алгоритмов самостоятельно разрабатываемым
циклам176
85. Пользуйтесь правильным алгоритмом поиска179
86. Пользуйтесь правильным алгоритмом сортировки180
87. Делайте предикаты чистыми функциями182
88. В качестве аргументов алгоритмов и компараторов лучше
использовать функциональные объекты, а не функции184
89. Корректно пишите функциональные объекты186
 
Безопасность типов187
 
90. Избегайте явного выбора типов — используйте полиморфизм188
91. Работайте с типами, а не с представлениями190
92. Избегайте reinterpret_cast192
93. Избегайте применения static_cast к указателям193
94. Избегайте преобразований, отменяющих const194
95. Не используйте преобразование типов в стиле C195
96. Не применяйте memcpy или memcmp к не-POD типам197
97. Не используйте объединения для преобразований198
98. Не используйте неизвестные аргументы (троеточия)199
99. Не используйте недействительные объекты и небезопасные функции200
100. Не рассматривайте массивы полиморфно201
 
Список литературы202
Резюме из резюме206
Предметный указатель220

Книги на ту же тему

  1. Современное проектирование на C++: Обобщённое программирование и прикладные шаблоны проектирования, Александреску А., 2015
  2. Моя первая программа на C/C++, Нейбауэр А. Р., 1995
  3. STL. Карманный справочник, Лишнер Р., 2005
  4. Основы программирования на языках C и C++, Ашарина И. В., 2002
  5. Справочник программиста по C/C++. — 2-е изд., Шилдт Г., 2001
  6. Начальный курс C и C++, Березин Б. И., Березин С. Б., 2001
  7. Объектно-ориентированное программирование в C++. — 4-е изд., Лафоре Р., 2003
  8. C++ Boost Graph Library, Сик Д., Ли Л., Ламсдэйн Э., 2006
  9. Разработка приложений на C++ и С#. Библиотека программиста, Секунов Н. Ю., 2003
  10. Программирование на C++ в Linux, Секунов Н. Ю., 2003
  11. Мультипарадигменное проектирование для C++, Коплиен Д., 2005
  12. C++. Карманный справочник, Лоудон К., 2004
  13. Учимся программировать на языке C++, Джамса К., 2001
  14. Символьный C++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования, Тан К. Ш., Стиб В.-Х., Харди Й., 2001
  15. Язык программирования C. Лекции и упражнения. — 6-е изд., Прата С., 2015

© 1913—2013 КнигоПровод.Ruhttp://knigoprovod.ru