Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 [250] 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

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

Организация файлов и программ

Пврехрестнай тыпиш О доку- Методики форматирования классов являются частным слу-

ментаЦйи cw. «одрашя Ком- " более общего вопроса форматирования: как органи-

меитирование шссов, файлов зовывать классы и методы внутри файла и какие классы

и программ» раздела 32.5. помещать в отдельный файл в первую очередь?

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

Пеихреетнай оеыиха О разн«* методы внутри файла составляют класс. Под классом

це между класшй и методами понимается как фактический класс программы, так и неко-

й о том, как сделать класс ш торая логическая сущность, являющаяся частью вашего про-

набора методов, см. глаеу 6. екта.

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

Называйте файл в соответствии с именем класса Большинство проектов поддерживает однозначное соответствие между названиями классов и именами файлов. Так, для класса CustomerAccount будут созданы файлы CustomerAccount.cpp и CustomerAccounLb.

Четко разделяйте методы внутри файла Отделяйте методы друг от друга с помощью хотя бы двух пустых строк. Пустые строки так же эффективны, как и длинные ряды звездочек или пунктира, но их гораздо проще набирать и сопровождать. Две или три строки нужны для визуального различия между пустыми строками внутри метода и строками, разделяющими методы (листинг 31-69:

Листинг 31-69. Пример применения пустых строк между методами (Visual Basic)

ищем арифметический максимум аргументов arg1 и агд2 Function Мах( argi As Integer, arg2 As Integer ) As Integer If ( argi > arg2 ) Then

Max = argi Else

Max = arg2 End If End Function

- Методы разделяют минимум две пустых строки.



ищем арифметический минимум аргументов argi и arg2 Function Min( argi As Integer, arg2 As Integer ) As Integer If ( argi < arg2 ) Then

Min = argi Else

Min = arg2 End If end Function

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

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

Аккуратно упорядочивайте исходный файл на С++ Далее приведена типичная организация файла с исходным кодом на С++:

1. комментарий с описанием файла;

2. файлы, включаемые директивой include;

3. определения констант, относящиеся к нескольким классам (если файл содержит несколько классов);

4. перечисления, относящиеся к нескольким классам (если файл содержит несколько классов);

5. определения макросов;

6. определения типов, относящиеся к нескольким классам (если файл содержит несколько классов);

7. импортируемые глобальные переменные и функции;

8. экспортируемые глобальные переменные и функции;

9. переменные и функции, видимые только в этом файле;

10. классы, вместе с определениями констант, перечислений и типов, относящимися к конкретному классу.

Контрольный список: форматирование

http: cc2e.corn/3194

Общие вопросы

□ Применяется ли форматирование в основном для логического структурирования кода?

□ Может ли схема форматирования применяться единообразно?

□ Позволяет ли форматирование получить код, который легко сопровождать?

□ Улучшает ли схема форматирования читаемость кода?

Управляющие структуры

□ Содержит ли код двойные отступы в парах begin-end или {}?

□ Отделяются ли последовательные блоки друг от друга пустыми строками?

□ Форматируются ли сложные выражения с учетом удобочитаемости?

□ Форматируются ли блоки из одного оператора единообразно?



□ Согласуется ли стиль форматирования операторов case с форматированием других управляющих структур?

□ Отформатированы ли операторы goto так, что их применение очевидно?

Отдельные операторы

□ Применяются ли пробелы для повышения удобочитаемости логических выражений, обращений к массивам и аргументов методов?

□ Выглядит ли конец строки с незавершенным оператором очевидно некорректным?

□ Сделан ли при переносе строк отступ стандартного размера?

□ Не содержит ли каждая строка более одного оператора?

□ Не содержат ли операторы побочных эффектов?

□ Не содержит ли каждая строка более одного определения данных?

Комментарии

□ Сделаны ли в комментариях отступы такого же размера, как и в коде, который они комментируют?

□ Легко ли сопровождать принятый стиль комментариев?

Методы

□ Отформатированы ли аргументы всех методов так, что каждый из них легко читать, исправлять и комментировать?

□ Используются ли пустые строки для разделения составных частей метода?

Классы, файлы и программы

□ Существует ли однозначное соответствие между классами и файлами для большинства классов и файлов?

□ Если файл содержит несколько классов, сгруппированы ли методы каждого класса вместе, и можно ли четко выделить каждый класс?

□ Разделяются ли методы в файле пустыми строками?

□ Вместо более строгого организационного принципа не стоит ли упорядочить все методы по алфавиту?

Дополнительные ресурсы

Большинство учебников по программированию упоминает Шр, сс2е.еогй/3101 форматировании и стиле вскользь, углубленное обсужде-

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

Kernighan, Brian W. and Rob Pike. The Practice of Programming. Reading, MA: Addison-Wesley, 1999. В главе 1 обсуждается стиль программирования на языках С и С++. Vermeulen, Allan, et al. The Elements offava Style. Cambridge University Press, 2000. Misfeldt, Trevor, Greg Bumgardner, and Andrew Gray The Elements of С++ Style. Cambridge University Press, 2004.

Kernighan, Brian W., and P J. Plauger. The Elements of Programming Style, 2d ed. New York, NY: McGraw-Hill, 1978. Этот классический труд по стилю программирования - первый в этом жанре.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 [250] 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0023