Правила программирования на Си и Си++ Ален И. Голуб




Название Правила программирования на Си и Си++ Ален И. Голуб
страница 1/19
Дата публикации 19.06.2014
Размер 3 Mb.
Тип Реферат
literature-edu.ru > Авто-ремонт > Реферат
  1   2   3   4   5   6   7   8   9   ...   19



Содержание

ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ… ВЫСТРЕЛИТЬ СЕБЕ В НОГУ

Правила программирования на Си и Си++

Ален И. Голуб

Москва 2001

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

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

Голуб рассматривает универсальные правила, форматирование и правильную организацию программ перед тем, как углубиться в такие основополагающие вопросы, как:

  • Практические способы организации и написания сопровождаемого кода.

  • Объектно-ориентированное программирование и методы абстракции данных.

  • Как избежать проблем, специфических для Си и Си++.

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

    © Original copyright. McGraw–Hill, 1995

    © Перевод с английского языка. В.Зацепин, 1996

    © Редакция и текст примечаний. В.Базаров, 1998

    © Оформление Интернет–версии. В.Зацепин, 2001



Посвящается Аманде

Содержание

Содержание 6

Благодарности 13

Введение 14

Часть 17

Процесс проектирования 17

1. Сущность программирования: без сюрпризов, минимум сцепления и максимум согласованности 19

2. Подавляйте демонов сложности (часть 1) 20

2.1. Не решайте проблем, которых не существует 21

2.2. Решайте конкретную проблему, а не общий случай 21

3. Интерфейс пользователя не должен быть похожим на компьютерную программу (принцип прозрачности) 23

4. Не путайте легкость в изучении с легкостью в использовании 27

5. Производительность может измеряться числом нажатий клавиш 29

6. Если вы не можете сказать это по-английски, то вы не сможете выполнить это и на Си/Си++ 29

6.1. Начинайте с комментариев 32

7. Читайте код 32

7.1. В цехе современных программистов нет места примадоннам 34

8. Разбивайте сложные проблемы на задачи меньшего размера 34

9. Используйте весь язык 35

9.1. Используйте для работы соответствующий инструмент 35

10. Проблема должна быть хорошо продумана перед тем, как она сможет быть решена 36

11. Компьютерное программирование является индустрией обслуживания 37

12. Вовлекайте пользователей в процесс проектирования 38

13. Заказчик всегда прав 38

14. Малое — это прекрасно (большое == медленное) 39

Часть 42

Общие проблемы разработки программ 42

15. Прежде всего, не навреди 43

16. Редактируйте свою программу 43

17. Программа должна быть переписана не менее двух раз 43

18. Нельзя измерять свою производительность числом строк 43

19. Вы не можете программировать в изоляции 44

20. Пустые потери времени 46

21. Пишите программу с учетом сопровождения — вы специалист по сопровождению 47

21.1. Эффективность — часто просто пугало 48

Часть 49

Форматирование и документация 49

22. Программа без комментариев ничего не стоит 51

23. Располагайте программу и документацию вместе 51

24. Комментарии должны быть предложениями 52

25. Пропустите свой исходный тест через систему проверки орфографии 53

26. Комментарий не должен подтверждать очевидное 53

27. Комментарий должен предоставлять только нужную для сопровождения информацию 54

29. Комментарии должны быть выровнены вертикально 57

30. Используйте аккуратные столбцы везде, где можно 61

31. Не располагайте комментариев между именем функции и открывающей скобкой 63

32. Помечайте конец длинного составного оператора чем-нибудь, имеющим смысл 63

33. Располагайте в строке только один оператор 65

34. Указывайте имена аргументов в прототипах функций 67

35. Используйте "предикатную" форму при разбиении длинных выражений 67

36. Подпрограмма должна помещаться на экране 69

37. Нужно обеспечивать возможность распечатки всего текста программы 69

38. Используйте штриховую линию для зрительного разделения подпрограмм 70

39. Пробел — один из наиболее эффективных комментариев 72

40. Используйте отступы в четыре пробела 74

41. Условные операторы выделяются абзацными отступами 76

41.1. Комментарии должны иметь тот же отступ, что и окружающий текст программы 78

42. Выравнивайте скобки вертикально по левой границе 79

43. Используйте скобки, если в условном операторе имеется более, чем одна строка 79

Часть 81

Имена и идентификаторы 81

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

44.1. Не используйте в качестве имен тарабарщину 83

45. Имена макросов должны записываться ЗАГЛАВНЫМИ_БУКВАМИ 85

45.1. Не используйте заглавных букв для констант перечисления 85

45.2. Не используйте заглавных букв в именах типов, созданных при помощи typedef 85

46. Не пользуйтесь именами из стандарта ANSI Cи 86

47. Не пользуйтесь именами Microsoft 86

48. Избегайте ненужных идентификаторов 88

49. Именованные константы для булевых величин редко необходимы 88

Часть 92

Правила обычного программирования 92

50. Не путайте привычность с читаемостью 93

51. Функция должна делать только одно дело 96

52. Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало 96

53. Функция должна вызываться более одного раза, но… 97

53.1. Код, используемый более одного раза, должен быть помещен в функцию 98

54. Функция должна иметь лишь одну точку выхода 99

54.1. Всегда предусматривайте возврат значения из блока внешнего уровня 100

55. Избегайте дублирования усилий 101

56. Не захламляйте область глобальных имен 102

56.1. Избегайте глобальных идентификаторов 102

56.2. Никогда не требуйте инициализации глобальной переменной при вызове функции 103

56.2.1. Делайте локальные переменные статическими в рекурсивных функциях, если их значения не участвуют в рекурсивном вызове 105

56.3. Используйте счетчик экземпляров объектов вместо инициализирующих функций 106

56.4. Если оператор if завершается оператором return, то не используйте else 107

57. Помещайте более короткий блок условного оператора if/else первым 109

58. Старайтесь сдвинуть ошибки с этапа выполнения на этап компиляции 109

59. Применяйте указатели на функции Си в качестве селекторов 113

60. Избегайте циклов do/while 114

60.1. Никогда не используйте do/while для бесконечного цикла 116

61. В цикле со счетчиком его значение должно по возможности уменьшаться 116

62. Не делайте одно и то же двумя способами одновременно 116

63. Используйте оператор for, если имеются любые два из инициализурующего, условного или инкрементирующего выражений 118

64. То, чего нет в условном выражении, не должно появляться и в других частях оператора for 119

65. Допускайте, что ситуация может измениться в худшую сторону 120

66. Компьютеры не знают математики 121

66.1. Рассчитывайте на невозможное 122

66.2. Всегда проверяйте коды возврата ошибки 123

67. Избегайте явно временных переменных 123

68. Не нужно магических чисел 124

69. Не делайте предположений о размерах 125

70. Опасайтесь приведения типов (спорные вопросы Си) 127

71. Немедленно обрабатывайте особые случаи 130

72. Не старайтесь порадовать lint 131

73. Помещайте код, динамически распределяющий и освобождающий память, в одном и том же месте 132

74. Динамическая память — дорогое удовольствие 134

75. Тестовые подпрограммы не должны быть интерактивными 136

76. Сообщение об ошибке должно подсказывать пользователю, как ее исправить 136

77. Не выводите сообщения об ошибке, если она исправима 137

78. Не используйте системно-зависимых функций для сообщений об ошибках 138

Часть 140

Препроцессор 140

79. Все из одного .h файла должно быть использовано в, по меньшей мере, двух .c файлах 142

80. Используйте вложенные директивы #include 142

81. Вы должны быть всегда способны заменить макрос функцией 144

81.1. Операция ?: не то же самое, что и оператор if/else 151

81.2. Помещайте тело макроса и его аргументы в круглые скобки 152

82. enum и const лучше, чем макрос 153

83. Аргумент параметризированного макроса не должен появляться в правой части более одного раза 154

83.1. Никогда не используйте макросы для символьных констант 155

84. Если все альтернативы отпали, то используйте препроцессор 156

Часть 159

Правила, относящиеся к языку Си 159

85. Подавляйте демонов сложности (часть 2) 160

85.1. Устраняйте беспорядок 160

85.2. Избегайте битовых масок; используйте битовые поля 161

85.3. Не используйте флагов завершения 163

85.4. Рассчитывайте, что ваш читатель знает Си 164

85.5. Не делайте вид, что Си поддерживает булевый тип (#define TRUE) 165

86. Для битового поля размером 1 бит должен быть определен тип unsigned 167

87. Указатели должны указывать на адрес, больший, чем базовый для массива 167

88. Используйте указатели вместо индексов массива 168

89. Избегайте goto, за исключением… 170

Часть 173

Правила программирования на Си++ 173

Часть 8а. Вопросы проектирования и реализации 174

90. Не смешивайте объектно-ориентированное и "структурное" проектирование 174

90.1. Если проект не ориетирован на объекты, то используйте Си 174

91. Рассчитывайте потратить больше времени на проектирование и меньше на разработку 177

92. Библиотеки классов Си++ обычно не могут быть использованы неискушенными пользователями 178

93. Пользуйтесь контрольными таблицами 180

94. Сообщения должны выражать возможности, а не запрашивать информацию 183

95. Вам обычно не удастся переделать имеющуюся структурную программу в объектно-ориентированную 184

96. Объект производного класса является объектом базового класса 186

97. Наследование — это процесс добавления полей данных и методов-членов 186

98. Сначала проектируйте объекты 190

99. Затем проектируйте иерархию снизу вверх 190

99.1. Базовые классы должны иметь более одного производного объекта 191

100. Возможности, определенные в базовом классе, должны использоваться всеми производными классами 192

101. Си++ — это не Smalltalk: избегайте общего класса object 192

102. Смешения не должны наследоваться от чего попало 198

103. Смешения должны быть виртуальными базовыми классами 198

104. Инициализируйте виртуальные базовые классы при помощи конструктора, используемого по умолчанию 198

105. Наследование не подходит, если вы никогда не посылаете сообщения базового класса объекту производного класса 200

106. Везде, где можно, предпочитайте включение наследованию 200

107. Используйте закрытые базовые классы лишь когда вы должны обеспечить виртуальные замещения 200

108. Проектируйте структуры данных в последнюю очередь 202

109. Все данные в определении класса должны быть закрытыми 202

110. Никогда не допускайте открытого доступа к закрытым данным 202

110.1. Не пользуйтесь функциями типа get/set (чтения и присваивания значений) 208

111. Откажитесь от выражений языка Си, когда программируете на Си++ 210

112. Проектируйте с учетом наследования 211

112.1. Функция-член должна обычно использовать закрытые поля данных класса 213

113. Используйте константы 214

114. Используйте структуры только тогда, когда все данные открытые и нет функций-членов 215

115. Не размещайте тела функций в определениях классов 216

116. Избегайте перегрузки функций и аргументов, используемых по умолчанию 221

Часть 8б. Проблемы сцепления 224

117. Избегайте дружественных классов 224

118. Наследование — это форма сцепления 225

119. Не портьте область глобальных имен: проблемы Си++ 227

Часть 8в. Ссылки 231

120. Ссылочные аргументы всегда должны быть константами 231

121. Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями 231

122. Не возвращайте ссылки (или указатели) на локальные переменные 236

123. Не возвращайте ссылки на память, выделенную оператором new 237

Часть 8г. Конструкторы, деструкторы и operator=( ) 239

124. Операция operator=( ) должна возвращать ссылку на константу 240

125. Присваивание самому себе должно работать 240

126. Классы, имеющие члены-указатели, должны всегда определять конструктор копии и функцию operator=() 242

127. Если у вас есть доступ к объекту, то он должен быть инициализирован 243

128. Используйте списки инициализации членов 243

129. Исходите из того, что члены и базовые классы инициализируются в случайном порядке 243

130. Конструкторы копий должны использовать списки инициализации членов 245

131. Производные классы должны обычно определять конструктор копии и функцию operator=( ) 246

132. Конструкторы, не предназначенные для преобразования типов, должны иметь два или более аргумента 250

133. Используйте счетчики экземпляров объектов для инициализации на уровне класса 251

134. Избегайте инициализации в два приема 253

135. Суперобложки на Си++ для существующих интерфейсов редко хорошо работают 253

Часть 8д. Виртуальные функции 258

136. Виртуальные функции — это те функции, которые вы не можете написать на уровне базового класса 258

137. Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора 259

138. Не вызывайте чисто виртуальные функции из конструкторов 264

139. Деструкторы всегда должны быть виртуальными 265

140. Функции базового класса, имеющие то же имя, что и функции производного класса, обычно должны быть виртуальными 266

141. Не делайте функцию виртуальной, если вы не желаете, чтобы производный класс получил контроль над ней 267

142. Защищенные функции обычно должны быть виртуальными 267

143. Опасайтесь приведения типов (спорные вопросы Си++) 269

144. Не вызывайте конструкторов из операции operator=( ) 270

  1   2   3   4   5   6   7   8   9   ...   19

Добавить документ в свой блог или на сайт

Похожие:

Правила программирования на Си и Си++ Ален И. Голуб icon Основы информатики и вычислительной техники системы программирования
Рассматриваются основные понятия языков программирования. Излагаются процедурный и объектный подходы в программировании. Более подробно...
Правила программирования на Си и Си++ Ален И. Голуб icon Рабочая программа по курсу «основы Программирования на языке ассемблер»
Программа предназначена для обучения основам программирования на языке низкого уровня Ассемблере учащихся средних школ, учреждений...
Правила программирования на Си и Си++ Ален И. Голуб icon Конспект лекций доцента и. А. Волковой по курсу «системы программирования»
Система программирования – комплекс программных инструментов и библиотек, который поддерживает создание и существование программного...
Правила программирования на Си и Си++ Ален И. Голуб icon Практикум на ЭВМ технология программирования в среде С++
Трунов К. В., Рыков В. И. Методы и технологии С++. Технология программирования в среде С++. /Издание Башкирского ун-та. Уфа 2007....
Правила программирования на Си и Си++ Ален И. Голуб icon Гигиенические требования к условиям обучения в общеобразовательных...
Настоящие Санитарно-эпидемиологические правила(далее — Санитарные правила) направлены на предотвращение неблагоприятного воздействия...
Правила программирования на Си и Си++ Ален И. Голуб icon Среда программирования Visual C++ 0 Общий вид окна
Совокупность средств и правил для представления алгоритма в виде пригодном для выполнения вычислительной машиной называется языком...
Правила программирования на Си и Си++ Ален И. Голуб icon Обоснование выбора средств и методов разработки
На данный момент существует огромное множество языков программирования с помощью которых можно написать данную дипломную работу....
Правила программирования на Си и Си++ Ален И. Голуб icon Учебно-методический комплекс по дисциплине «Технологии программирования»
Техническое задание по разработке дизайнерского проекта приложения «умк – учебно-методический комплекс по дисциплине «Технологии...
Правила программирования на Си и Си++ Ален И. Голуб icon Создание диалектов языков программирования с использованием грамматических аспектов
Такие языки называют диалектами. Диалекты языков программирования встречаются довольно часто: практически каждая субд использует...
Правила программирования на Си и Си++ Ален И. Голуб icon Календарно тематическое планирование по литературному чтению 2 класс
...
Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции