Академический Документы
Профессиональный Документы
Культура Документы
(Pete Goodliffe)
,
;
. ,
.
Professionalism in Prog
ramming C Vu
, ACCU (www
.accu.org).
,
,
.
remeslo10.indd 1
, , ,
?
? , ?
:
.
,
, , .
, , , , .
, ,
.
,
, ,
.
, :
* ,
*
*
*
-. ,
. .
//
, , , .
: , , , .
16.12.2008 18:53:44
Books.Ru
ISBN 9785932861271,
.
Books.Ru .
,
. ,
(piracy@symbol.ru),
.
Code Craft
The Practice of Writing
Excellent Code
Pete Goodliffe
2009
.
.
.
.
.
.
.
.
.
.
.
. . . .
.: %, 2009. 704 ., .
ISBN 978%5%93286%127%1
%%
. ,
. %
, , %
. , , %
? ? %
? %
.
%
. , :
. %
,
, , ,
, , , %
.
, %
. %
, .
ISBN 9785932861271
ISBN 978 1593271190 ()
%, 2009
Authorized translation of the English edition 2007 No Starch Press, Inc. This trans%
lation is published and sold by permission of No Starch Press, Inc., the owner of all
rights to publish and sell the same.
, %
. %
, , .
%. 199034, %, 16 , 7,
. (812) 324%5353, www.symbol.ru. N 000054 25.12.98.
26.12.2008. 701001/16 . .
44 . . 1500 . N
199034, %, 9 , 12.
, .
, .
, .
, .
150
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
? . . . . . . . . . . . . . . . . . . . . . . . . . 32
, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
. . . . . . . . . . . . . . . . . . . . . . . 36
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
( ) . . . . . . . . . . . . 63
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
. . . . . . . . . . . . . . . . . . 98
. . . . . . . . . . . . . . 103
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
II. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
? . . . . . . . . . . . . . . . . . . . . . . 160
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
, , , ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
. . . . . . . . 200
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
, , . . . . . . . . . . . . . . . . . . . . . . 231
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
10. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
? . . . . . . . . . . . . . . . . . . . . . 249
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
? . . . . . . . . . . . . . . . . . . . . . . . . . . 270
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
10
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
. . . . . . . . . . . . . . . . . 318
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
% ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
. . . . . . . . . . . . . . . . . . . . . . . 321
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
? . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
? . . . . . . . . . . . . . . 350
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
15. ? . . . . . . 363
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
IV. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
, . . . . . . . . . . . . . . . . . . . . . . . . 413
,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
. . . . . . . . . . . . . . . . . . . . . . . . . . . 449
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
, ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
? . . . . . . . . . . . . . . . . . . . . . . . . . 478
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
? . . . . . . . . . . . . . . . . . . . . . . . . . . 484
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
21. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
VI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
, ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
. . . . . . . . . . . . . . . . . . . . . . . . . . . 563
. . . . . . . . . . . . . . . . . . . . . 566
% . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
. . . . . . . . . . . . . . . . . . . . . . 571
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
24. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
13
3. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
6. . . . . . . . . . . . . . . . . . . . . . . . . . 607
7. . . . . . . . . . . . . . . . . . . . . . . . . 612
8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
10. , . . . . . . . . . . . . . . . . . . . . . . . . . 624
11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
14. . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
15. ? . . 652
16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
21. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
;
. , %
, . %
%
, .
(Kevlin Henney),
, , %
, ,
, , %
.
(Steve Love),
, %
.
(Tim Penhey), C VU
.
! %
, , ] %
.
(Lois Goldthwaite),
C++ POSIX BSI
, . %
,
, .
(Jon Jagger),
, , ,
15
%
.
(Andrew Burrows),
. %
,
( ), %
.
(Greg Law), CEO, UNDO Ltd.
, ,
. ,
.
(Andrew Bennett),
, B.ENG., Ph.D., MIET, MIEEE
, ,
.
, %
, .
. (Robert D. Schofield), M.SC.,
MIET, SCIENTIFIC SOFTWARE SERVICES Ltd.
, ,
, . %
, ,
.
(Chris Reed),
. %
,
, %
.
(Rob Voisey),
, AKAI DIGITAL Ltd.
.
, 4 1/2
(Pete Goodliffe)
,
; %
. , %
.
Professionalism in Programming C Vu, ACCU
(www.accu.org). ,
, %
.
, .
. , #
. %
,
. 1,3.
, %
(David Brookes), %
. , !
.
.
ACCU (www.accu.org),
.
cthree.org (Andy Burrows), (Andrew
Bennett) (Chris Reed), ,
(Steve Love) #ant.org. (Jon Jag%
ger) %
, %
.
%
%
,
. %
, % ,
, .
, !
, .
, No Starch Press,
XML %
. .
,
.
. ,
, ,
, . %
, ,
. , %
.
?
. , . %
.
, , %
, : ,
. ,
!
, . %
%
( ), %
%
, , %
, .
, . , %
, .
%
. !
.
, : %
. ,
, .
20
: , #
.
? %
:
, , . .
( ) , %
. : %
, . %
: .
: , %
, , %
( #
, ). %
. , %
, ,
,
, , , %
.
. ,
,
. .
, %
, %
. ,
.
, , %
. %
. .
. , , %
, .
?
? %
, %
C++, , .
,
, %
.
21
?
.
,
. , %
.
.
, .
%
, ,
.
(attitude) :
attitude (at.ti.tude)
1. ; .
2.
.
, %
.
:
, %
. %
: .
. , %
, ,
. %
, %
, .
,
%
.
,
. , %
%
, %
.
%
, %
. %
, . %
,
.
22
.
, %
,
.
, . %
. , %
.
?
, , %
. %
.
, . %
, .
,
, ,
.
.
; . %
,
.
: C, C++ Java.
,
, %
C++.
,
%
. %
, % %
,
.
%
, . :
23
, , %
. ? %
, ,
.
,
.
,
.
.
,
. . %
, , .
, , %
. , %
, .
.
:
. %
. ,
.
,
.
. %
, ,
. :
. !
%
. .
,
. , %
.
, %
, %
, .
24
; ,
!
.
,
.
. ,
,
. %
, #
, %
. :
.
.
. %
, %
, .
! %
(,
), .
#
. , %
.
. %
, .
. , %
. %
,
.
. %
.
, ,
, .
, %
.
:
I.
%
.
25
. %
.
.
II.
:
. ,
, ,
. %
, .
III.
. , %
( ) .
%
, , %
. %
,
.
IV. ?
. ( %
.)
. %
, %
.
V.
%
: , %
, .
VI.
%
, , %
.
, , .
, %
, .
, , , .
26
% , %
, , .
.
,
. , ,
,
. ,
, . , .
,
.
,
.
.
, %
.
, .
I
. ,
. : %
. %
. , , %
, .
?
. , %
, ,
%
. %
. , %
.
%
.
: %
, , , .
,
. .
, ,
. ,
, . , %
, %
.
28
I.
.
,
. , %
%
, .
:
1.
: ,
.
2.
: %
.
3. ?
.
4.
.
, .
5.
.
6.
: ,
, .
;
, %
. , , ,
, , %
, , %
,
.
.
.
10 , %
.
, .
, %
%
%
. %
. %
, .
,
.
, %
;
%
, .
,
30
1.
,
, .
, %
, . . . (M. A. Jackson)
: , %
, , , %
. (Jackson 75) :
, .
.
, .
. %
.
,
.
%
, , ,
.
, %
. , , , .
,
.
,
, .
,
, . %
,
, %
%
, . %
, !
?
.
(%%
, , , %
, . .) %
.
,
. %
, %
.
31
%
, , , %
. . %
, .
, %
.
.
, ,
. ,
, , %
, .
.
:
.
.
, %
.
,
,
.
.
, . %
, ,
.
, :
% . % #
. : %
, . %
, .1
,
,
, .
? , .
. , .
1
, ,
, , %
.
% . , %
.
32
1.
, %
( . 15). %
, ,
.
,
. %
.
.
, .
,
, : ,
. .
, %
, .
% .
%
, . %
, ,
. , , %
, ,
.
, %
. , %
,
.
?
, %
, . %
, ,
. %
, .
, .
, , %
. ,
,
, . 33.
, %
. ,
.
33
, , ,
:
,
,
, . , %
, , ,
.
,
. , . . %
, . %
.
?
:
.
: %
.
,
34
1.
,
. %
:
,
. .
%
.
.
. %
; , %
, , %
.
, ,
.
,
, . %
,
( %
, ,
).
, 100 000 ,
.
.
? ? %
. ,
, .
.
%
%
. : %
, .
, , ,
, %
, .
35
, %
, %
. ,
, %
.
, %
. %
.
,
, , %
.
( ) %
.
,
% ,
, .1
, .
,
, .
, %
.
, %
.
, %
, , .
%
, , %
, , %
. ,
, , %
.
.
% % %
,
.
, %
. %
12.
1
. ,
% , .
36
1.
. %
?
%
. , %
, ,
. . %
,
.
, , %
%
.
, %
.
. ,
, %
. %
. %
. :
% ,
.
, . %
?
?
, %
. %
. ,
,
.
, %
. %
. (Kernighan Plaugher 78)
, API,
,
.
. %
, %
37
, , ,
. %
.
: . %
?
? %
, %
.
, . , &
.
, , %
C, = ==.
, %
. (
) , %
, .
, ,
% . , %
,
, , ,
.
, . %
%
, ,
,
. ( , %
% .)
, %
. ,
, , %
. , , %
. , , %
, !
,
? ,
.
%
; , .
:
.
38
1.
%
.
,
.
%
.
, .
, %
, , , %
. ,
. , %
. %
.
. , ,
.
, , .
,
( ) ( %
) , , ,
. ,
,
.
, . , %
, ,
.
%
,
. .
, , . %
%
, .
. .
,
, , .
. %
. ,
, %
39
?
?
? ,
% ?
,
. . %
; ,
.
, %
.
, .
, %
, , . . %
, .
, .
.
, , %
.
.
%
. C++
( pimpl) %
, %
. (Meyers 97)
%
% , %
.
%
; , . %
,
. ,
.
,
% . #
, , ,
C C++ ,
40
1.
.1 %
.
, %
. ,
. .
,
, , %
. , %
%
. . , %
, ,
% %
, .
. &
. ,
.
%
,
.
%
, lint C FxCop
.NET. %
.
, .
, , ,
.
,
. % %
. %
, ,
.
, %
C++:
char *unsafe_copy(const char *source)
{
char *buffer = new char[10];
1
(, Java C#) .
41
strcpy(buffer, source);
return buffer;
}
(source) 10 , %
, (buffer). %
. %
, %
. %
%
, %
.
; .
.
! ,
,
string C++.
.
C++ , strcpy strncpy,
:
char *safer_copy(const char *source)
{
char *buffer = new char[10];
strncpy(buffer, source, 10);
return buffer;
}
, .
. , .
;
.
, %
. ,
. ,
(, errno C).
%
.
( )
, %
. %
, . ,
42
1.
, . %
.
, %
, , %
. , , %
. ,
.
, ,
, . .
.
; % ,
.
. &
.
Java .NET ,
, %
. , %
. ,
.
. ,
, ;
, . ,
(, A B, B A, %
). %
, .
,
. , %
. %
: , , #
. . %
% .
C C++ .
, %
, .
, %
, ,
. %
, ,
.
%
. , %
.
43
( Java C#)
.
,
.
%
.
, , .
, : %
.
%
, .
.
, , %
.
C C++ . %
,
%
. ,
. %
, .
, .
( %
), %
.
, ,
(, C %
char ,
). %
. ? %
, %
? ,
, %
.
,
, .
? ,
44
1.
, , %
.
, .
,
; .
()
. . %
64% , 8%%
, 56 ? %
%
, , .
, %
.
, %
. :
, .
.
: , ,
: . (%
, Java C#) %
, %
.
C C++ %
,
. , int long
, %
.
, .
,
. :
switch (), %
default (
). default , %
. , , %
.
, if else, %
, %
.
45
, ,
. .
. . %
%
. , %
.
. , %
, .
C/C++. %
const , . %
: const
.
, .
, %
.
, ?
.
, .1
,
.
%
?
(
) , %,
. :
, , .
(%
,
).
; (,
).
1
, .
46
1.
, C strlen
, , .
. , %
, %
%
.
:
.
, ,
.
.
, , %
.
%
, %
, . .
, .
.
%
%
,1 .
Eiffel
%
.
, %
, %
. #
,
.
, %
. , :
, %
.
1
, ,
.
47
%
.
.
, .
.
, .
.
C/C++. Java, C# %
, %
.
?
. %
, . %
? . %
: %
, , , ; ,
, , . (Kernighan Plaugher 76)
%
.
.
, (, ) %
, , %
.
.
C C++
assert. assert
, .
,
. ,
. %
, .
, . :
bugged.cpp:10: int main(): Assertion "1 == 0" failed.
assert
C, C++. %
, C++.
assert, #include <assert.h>.
% assert(ptr != 0);.
%
48
1.
NDEBUG.
assert
. , %
.
. , , %
.1 , %
%
. ( %
, ?)
, %
. , , :
int i = ();
assert(i = 6); // ... !
printf("i is %d\n", i);
, :
= 6 ( C ). %
assert , printf %
% .
.
, !
,
. ,
assert(invariants());, invari
ants() , .
%
, , %
. %
,
, .
? %
( )
, .
Java .2 %
JVM (java.lang.As
1
, %
.
, .
, .
JDK 1.4 .
49
sertionError), . .NET %
Debug.
,
. %
. ,
, .
C++/Java %
% bool invariant().
(, .)
% %
assert, . (
%
.) , circle
radius != 0; %
, %
(, ).
?
.
, : %
? ,
!
, %
. , %
%
.
,
,
. ,
, . %
. , , , ?
. 187,
%
. %
.
.
50
1.
; ;
, , .
3:14
, .
.
. ,
, . %
.
. %
(,
, . . 195), %
,
, %
, . ,
.
%
%
%
%
,
,
, %
, %
%
, %
, %
, % %
,
,
%
.
8.
.
9.
, %
.
51
12.
.
19.
; %
? %
, , %
.
. 581.
1. ?
52
1.
2. , %
?
3. %
? , %
?
4.
C?
5. % %
?
6. ?
?
7. ?
a. ,
? ?
b. , C C++ , %
?
8. %
?
1. ,
?
, , ?
2. %
?
a. %
?
b. ,
?
3. .
%
?
? %
?
?
4. ? ,
?
? %
, ?
a. ?
?
b. % %
, ?
,
.
7:24
,
%
(,
), , , %
: , ,
!.
, %
, %
. %
, %
,
%
.
%
,
54
2.
C. , % %
, .
? ,
, %
, . , %
:
, .
, .
, %
.
?
%
. %
, %
, 1960% %
: Fortran %
.
.
%
, , , %
.1 %
, , %
, (%
, goto
), ,
. .
%
, . %
%
.
. %
.
. , :
. %
, ,
, .
,
. C:
1
{ },
C.
55
, ,
.
%
, .
,
% .
, ,
. % %
, , . ,
:
, %
. ,
. . %
,
. , (%
) COBOL,
, Y2K?
, ,
. ,
. ,
, ,
, .
, .
,
.
, , %
. .
% . %
? , ? , %
.
,
.
. , %
, .
56
2.
,
. , %
. () %
, . ,
.
. ?
, .
,
. %
, %
.
#
, . , %
, .
, : &
. .
?
,
. , ,
, %
. ;
,
. , %
. ( %
, %
, .)
, .
.
. .
, ,
.
%
. . .
.
.
, C,
:
, .
57
.
, , . (Ker%
nighan Ritchie 88)
% ,
.
, . ,
.
?
. , # #
, , X;
% , %
, .
, ?
, %
, ,
, ,
C. ,
, %
.
, %
. ,
80 . %
.
.
%
, , ,
.
, , %
(. . 59).
, , %
K&R,
.
K&R
K&R , %
C, , %
C (Kernighan Ritchie 88).
58
2.
.
. , %
Java.
int k_and_r() {
int a = 0, b = 0;
while (a != 10) {
b++;
a++;
}
return b;
}
,
.
%
, , , ,
.
, %
.
,
.
.
(ex#
dented) , . %
.
int exdented()
{
int a = 0, b = 0;
while (a != 10)
{
b++;
a++;
}
return b;
}
, .
, %
. %
.
59
.
, %
.
Pascal.
%
, . %
, .
, , %
. %
:
. %
, %
. %
, %
.
. %
: , , %
. , %
.
%
,
.
.
%
. , %
.
% %
, , %
. %
: ,
. %
, , %
. , %
,
, .
60
2.
,
. %
, .
, %
, , ,
( ).
,
, %
.
.
, %
%
? %
(
%
), %
%
.
,
.
( )
, . %
, . %
,
Whitesmiths C .
int indented()
{
int a = 0, b = 0;
while (a != 10)
{
b++;
a++;
}
return b;
}
, .
61
. , GNU %
:
. %
: Linux K&R,
. C#
. :
int my_worst_nightmare()
{
int a = 0, b = 0;
while (a != 10) {
b++;
a++;
}
return b;
}
,
% .
,
, . &
.
, ,
, % .
. %
,
.
,
.
, , ,
. . ,
%
.
&
.
, %
, %
. , .
, % .
, %
. , ?
62
2.
, .
,
, ?
%
.
. : , , .
%
. , #
, .
, %
.
Indian Hill
Indian Hill
Recommended C Style and Coding Standards. %
, %
; %
Indian Hill AT&T Bell.
GNU
GNU , %
%
.
% GNU (www.gnu.org).
MISRA
(Motor Industry Soft%
ware Reliability Association MISRA)
C
. 127 %
, , %
. %
,
.
foo
. ,
. , Linux
, Mozilla.
( )
63
( )
, ,
, %
. ,
, , %
? ,
?
. ,
. ? %
. :
, ,
,
. %
.
, %
,
. %
, .
: %
IDE ,
.
( ).
, %
,
. , , %
.
%
%
, . %
,
, ,
.
%
.
%
. %
, , %
, %
.
64
2.
.
, .
,
. .
. , %
, , %
.
, ,
? #
. ( %
, .)
, .
7
?
...
65
, %
.
, ,
. %
: %
. ?
,
%
. !
, ,
,
. .
,
, . ? %
,
. ,
% %
.
:
,
, %
. , %
. , , %
, , .
,
%
. %
:
?
. %
, %
? %
.
66
2.
: , ,
. %
, , %
, , %
. ,
.
, . %
%
? : %
, .
,
.
, ,
.
, %
. %
, .
, %
. , %
, .
.
,
.
, %
,
.
%
, .
. %
,
.
%
, .
, .
, %
, .
67
,
%
. %
C, C++ Java,
C.
, ,
. %
if ,
, .
:
.
.
.
! ,
; %
. % ,
, .
, %
. .
, .
%
: , switch ,
, , .
%
.
.
. %
.
, ,
. ,
. %
.
, , %
? %
, %
%
. , .
68
2.
?
.
; ,
. : %
.
, , , 1 . .
. .
. %
, .
( %
) , . , #
, . %
% ,
.
. ( .)
: .
. %
, ,
.
. . .
, .
, %
.
, %
. %
,
.
1
C/C++, %
. %
, Pascal C %
( ), %
C++. %
!
69
?
%
. ,
, . %
, :
%
, %
.
, ,
, %
. , ,
.
, , %
, 400 , %
10 .
, , %
, 128% .
, %
, , , .
,
%
,
.
, %
, %
.
,
.
, %
.
.
,
. :
. (
,
70
2.
). , , %
,
,
%.
%
, %
,
, %
%
:
; %
%
.
3. ?
.
4.
%
.
5.
; %
.
71
. 585.
1. , %
? %
?
2. , %
.
? ?
3. ?
a. ?
?
b. , %
. ?
4. , %
? %
? .
5. #
? ?
1. ?
a. ,
?
b. %
, ? %
?
2. ? .
a. ?
?
?
b. %
, . %
?
c. ?
3. ?
a. . %
, switch %
.
72
2.
b. ?
?
c. ?
d. , ? ? %
?
i. : ? %
.
ii. : ? ( .) %
, ?
, ?
e. , %
? , ?
4. ?
a. ?
b. ?
c. ?
3
?
?
,
, ,
,
,
# ,
,
, .
, %
% ,
. %
.
, %
,
% %
.
.
,
. :
%
.
%
74
3. ?
, ,
% %
. ,
, , ,
, ,
.
,
. , ,
.
. , %
, % : %
,1 , %
. . %
.
. %
. % %
, , , %
%
. %
,
, . %
, , % , %
: Izena duen guzia omen da , ,
. (Kurlansky 99)
, %
( ) , %
, .
%
.
.
, .
%
, . %
%
. C++:
void checkForContinue(bool weShouldContinue)
{
if (weShouldContinue) abort();
}
75
(weShouldContinue )
, , , .
,
%
.
,
. .
?
.
. ,
. , #
.
. , %
1
( , ). %
, %
.
.
;
, .
, .
?
, %
. , %
, :
(, , , )
C++ Java
; %
, ,
1
, %
(Miller 56).
76
3. ?
, ,
, ,
. . .
?
, .
, %
, %
, .
, ,
. , %
, %
, , ?
.
, ,
. .
, ,
.
,
,
. %
, .
, . %
, . %
, ,
.
. %
.
. ,
, , .
. %
, %
.
%
.
,
77
(, , ) , %
% (, %
). %
.1
Unicode,
ISO8859%1 (ASCII).
. C/C++ %
:
str, %
, %
std. %
, .
% , %
, .
,
. %
, %
.
%
; Java , %
, C C++ %
. %
: ,
Windows Win32 API.
, . &
.
? .
%
:
,
. ,
.
, . a
apple_count .
1
, C
, .
, , .
78
3. ?
, ( )
. ,
loop_counter %
.
,
.
. %
, %
. , %
.
, blah wibble, %
foo bar. , %
. (
, , %
.) , %
.
% foo bar?
%
.
. , , : %
foo : ++foo;.
. ,
foo, bar baz.
,
.
.
FUBAR
(Mucked Up Beyond All Repair). ,
.
79
,
.
,
.
,
. , ,
. , GUI%
ok_button main_window. ,
, %
, elapsed_time (_) exchan
ge_rate (_).
, %
, , , count
(). , %
, widget_length (_).
,
, .
% %
%, , ,
( ) . %
, %
.1 , C++
, %
m_. ,
.2 , %
, %
.
% %
_ptr, _ref. %
. , %
, .
, %
, , , !
,
API % , ?
,
. C
.
80
3. ?
%
,
. , : SomeTypeWithMe
aningfulNaming stwmn(10); (). %
, ,
.
, %
. ,
. %
: Window window;.
,
.
,
,
.
1980% Microsoft
Win32 API MFC, %
.
, %
. ,
,
%: Windows %
lpszFile, rdParam hwndItem.
,
,
.
, ,
: .
, , ( %
) . , , %
. apples()? %
, ?
be, do perform
(, , ). , %
(
XXX). , %
.
81
, %
, , . (
%
.) , %
,
. %
, , ,
countApples().
, ,
. , .
%
, %
, %
.
,
%
.
:
camelCase
camelCase Java
C++. %
, , %
, Smalltalk 1970%.
ProperCase
camelCase, %
. Pascal%
Case. . , Java
ProperCase ,
camelCase . Windows API .NET %
ProperCase.
_
%
C++ (
std) GNU.
. ,
ProperCase %
.
82
3. ?
, , . %
( . 597) 9 .
ee ( %
%
). %
, . % void a()?
!
, , . C %
typedef, . %
. , ty
pedef . %
typedef , .
Java, C++ OO% %
(). C ,
structs. %
,
.
, :
, %
. .
% () , %
.
, , %
. (Gamma et al. 94)
, , %
, , %
.
(, C++
Java .NET)
. %
, Printable Serializable. .NET %
I
, ,
IPrintable.
, ;
. ,
DataObject , %
; .
. , ,
class, data, object type.
83
. , %
.
Window,
, , State.
, %
. ,
Strategy, %
. %
.
, .
, , #
. , .
,
? C++ C#, Java %
.
, .
% %
,
. .
. %
%
. ,
.
;
utils ,
utils. %
. Java , %
, :
. %
.
, .
, , %
. %
, , .
, , %
; UI, filesystem controls
84
3. ?
. , %
, controls_group .
,
.
C/C++. %
, %
. . ,
.
, %
%
. %
.
, ,
, .
,
, . %
.
. , PROJECTFOO_MY_MACRO ,
MY_MACRO.
C/C++ , &
, , &
. .
%
.
Java
. , C C++
, .1
, %
.
.
;
,
.
, .
85
C/C++, widget, %
widget.h, widget_interface.h, widget_decls.h %
. widget.h widget.cpp
widget.c (. , . 86),
, widget.h. %
. , .
,
:
.
. , ,
, %
. %
, %
; ,
, . (, Java,
PascalCase.)
,
foo.h Foo.h , . ,
, ,
.
, %
foo.c, foo.cpp foo.java. %
: foo.o,
foo?
%
, .
, . %
, , #include
"foo.h". %
. %
.
. , %
library_one/version.h library_two/version.h, %
.
.
C++,
: Daffodil %
Daffodil.h ( , ).
, %
, HerbaciousBorder HerbBdr.h. %
#include
. , Daffodil %
86
3. ?
Daffodil.cpp, %
FlowerStuff.cpp, Yogurt.cpp
. , %
.
, %
.
, , %
%
. ?
, :
,
. Java%
, %
.java. C C++ ,
.h
, .
;
C++, %
.C, .cc, .cpp, .cxx .c++.
C++ .hpp.
, / %
. : %
.
, %
. %
.
, .
, .
, %
:
class badly_named : public MyBaseClass
{
87
public:
void doTheFirstThing();
void DoThe2ndThing();
void do_the_third_thing();
};
%
,
.
,
,
. %
.
, .
.
. %
.
&
.
,
, . %
, .
, , %
. ,
, , .
.
:
, ,
, %
. , .
,
,
. %
Tree (),
countApplesInTree().
: Tree::countApples().
( %
) .
88
3. ?
, ,
2# : tu vous.
, %
. ,
, , %
. :
.
, . %
. (
, % .)
,
, address_string.
_string? , .
&
. , .
%
, %
. , ,
. , %
, ,
.
,
52:9
,
: . %
%
. , %
.
, ,
, , . . .
.
, , %
.
89
, ,
. , :
.
, %
.
, %
, ________.
, .
, , .
widget_list , %
. % widget,
widget.
%
. ignoramus . %
, ignoramous. .
, %.
data val
ue, ,
. temp tmp,
.
,
. ,
.
%
, .
, ,
,
.
i18n internationalization
.
, , , %
, , . %
. %
. (Gamma et al. 94)
90
3. ?
%
:
, ,
. .
%
%
( )
, %
%
%
.
2.
, %
. ,
, , .
4.
%
.
. 594.
91
1. ? %
( ), (%
) ( ).
a. int apple_count
b. char foo
c. bool apple_count
d. char *string
e. int loop_counter
2. ?
? %
?
a. doIt(...)
b. value(...)
c. sponge(...)
d. d. isApple(...)
3. %
? ?
a. ? (%
.) ?
.
b. %
? , C++ camelCase
STL (_%
). ?
4. %
?
5. C assert , %
? ?
6. %
?
7. ?
?
, ( %
) ? ?
8. .
?
?
9. %, #
. %
?
92
3. ?
1. ?
? %
%
?
?
2. ?
a. ? #
?
?
b.
?
3. ? %
, ?
, ?
4. ?
,
?
#
.
, , .
( %
) , %
. %
,
,
.
,
, %
.
%
. %
,
,
.
94
4.
, , .
. , %
, , %
COBOL. , %
, %
, , %
, .
.
,
, , %
.
, . %
%
, . %
, .
, %
, ,
.
. %
. . %
. , %
, ,
, . %
, .
,
, , %
. , %
.
:
.
, . %
.
%
.
. , (
),
.
.
, %
. ,
, %
.
95
, ,
.
, .
, . &
. , .
,
, . %
.
, .
? .
. ?
:
10 PRINT " "
20 GOTO 10
, , .
. %
, , %
. , Perl, : %
. , %
Perl . %
,
.
, %
. , ,
, ,
.
, ,
, . %
, , %
. %
. .
, %
( ), %
.
. %
. %
.
, ,
.
96
4.
%
. , , .
,
. .
.
, %
, .
, ,
.
, %
,
. .
%
(IDE) (
, , )
.
.
, ,
. %
. %
ASCII,
.
,
. %
, .
, ,
. (, ,
, %
.)
%
.
.
97
.
%
,
( , C).
, .
.
, %
IDE %
. .
, %
?
. %
, . ,
. %
. %
, .
, , &
. & .
, %
. , , ?
int fval(int i)
{
int ret=2;
for (int n1=1, n2=1, i2=i3; i2>=0; i2)
{
n1=n2; n2=ret; ret=n2+n1;
}
return (i<2) ? 1 : ret;
}
;
, %
. , %
. ,
.
int fibonacci(int position)
{
if (position < 2)
98
4.
{
return 1;
}
int previousButOne = 1;
int previous
= 1;
int answer
= 2;
for (int n = 2; n < position; ++n)
{
previousButOne = previous;
previous
= answer;
answer
= previous + previousButOne;
}
return answer;
}
. ,
, .
,
. ,
.1
,
. , , %
, .
,
.
%
. , %
.
;
.
%
. : %
, .
,
. %
.
if#then#else (%
, %
, ).
1
, ?
. ?
99
.
%
. ,
; Single Entry,
Single Exit (SESE, ). %
.
fibonacci, SESE:
int fibonacci(int position)
{
int answer = 1;
if (position >= 2)
{
int previousButOne = 1;
int previous = 1;
for (int n = 2; n < position; ++n)
{
previousButOne = previous;
previous
= answer;
answer
= previous + previousButOne;
}
}
return answer;
}
%
return .
return % %
,
.
, %
. ,
, .
.
, , %
. ,
.
, , .
%
. ,
, .
, ,
.
.
100
4.
, ,
.
, . . %
, ,
. %
. , %
. ,
.
,
. %
.
. . %
, %
, %
.
,
. :
, ,
( const C).
,
( ).
%
.
. C/C++ %
size_t, %
ptrdiff_t.
if (counter == 76) .
76? ?
. . %
:
const size_t bananas_per_cake = 76;
...
if (count == bananas_per_cake)
{
//
}
76 (, bananas_per_cake),
: %
101
,
, / 76,
.
. .
, %. %
, ,
.
?
. %
.
. :
.
,
. %
, %
.
. %
. C++
pimpl, %
. (Meyers 97)
. %
.
for,
, %
. .
. %
if %
.
&
. , .
.
, ESP. API
. %
,
, .
102
4.
%
. C++ C# #
. Java .
.
. &
.
%
, .
, . ,
, , .
: %
, %
.
:
/*********************************************************
* File: Foo.java
* Purpose: Foo class implementation
* Notice: (c) 1066 Foo industries. All rights reserved.
********************************************************/
.
/ , %
, .
(%
),
. ,
.
, ,
.
,
,
.
. &
.
,
.
103
? ,
% .
%
: , . %
,
, . %
.
, ,
. %
.
%
, %
.
. ,
.
,
. %
, , %
.
, , %
. ,
. ?
, &
.
. ,
, ,
, %
.
%
. , ,
, . ,
, .
(Kernighan Plaugher 78)
104
4.
, , (literate program#
ming) ,
. ,
(Knuth 92).
, ,
. .
, %
.
: , %
. %
. , ,
. %
, , .
,
.
, .
,
: %
.
.
TEX ( %
) C WEB.
%
, ,
.
, , %
% %
. . ,
, . %
, %
, .
% %
. %
%
.
:
%
.
, %
.
105
, %
, %
.
. , %
, ; .
%
, . %
: , %
, .
.
:
, %
. %
, %
. %
.
,
.
.
,
%
. ,
, C %
, #include
. %
.
,
. ,
, . %
, .
,
.
.
, ,
. ,
,
.
.
, ,
, .
, . %
,
106
4.
,
.
%
. %
? %
, . %
%
.
%
.
, %
.
,
. %
, Sun Javadoc %
Java. Java API
Javadoc.
, , .
, %
Widget :
/**
* Widget.
*
* '/**' .
*
* @author
* @version
*/
class Widget
{
public:
/**
* .
*/
void method();
};
,
, %
%
.
, :
, , , , , ,
107
, . . %
, :
%
, . Javadoc; %
NDoc C# %
Doxygen (www.doxygen.org).
, %
. ,
, .
:
, %
.
, %
.
%
.
,
.
, .
, , %
, :
%
API, %
. %
.
,
, %
, . %
, %
. ,
.
&
.
108
4.
,
. %
:
%
. .
, . %
.
, .
,
. ,
. %
, .
, %
, . %
, .
% ,
, .
,
.
, . %
. .
: %
,
.
%
. , %
.
; .
, .
( %
) . %
%
. API,
.
%
%
109
%
,
%
,
, %
,
.
3. ?
%
.
5.
, %
.
19.
,
.
. 599.
110
4.
1. %
. ?
?
2. . %
? ,
?
3.
. , %
% .
4. , , %
, %
?
5. , %
?
6. , %
% , ?
7. C% %
. ? ,
.
void bsrt(int a[], int n)
{
for (int i = 0; i < n1; i++)
for (int j = n1; j > i; j)
if (a[j1] > a[j])
{
int tmp = a[j1];
a[j1] = a[j];
a[j]
= tmp;
}
}
8. %
. :
a. ,
, #
, %
?
b. %
API ?
c. / ?
C/C++, %
?
111
d. , %
API ?
?
9. , %
,
,
?
10. ?
1. %
? ?
a. ?
? , %
, ?
b. , ,
, %
,
?
2. ,
?
3. ,
? %
?
4. , %
?
%
?
, .
.
, ,
. %
%
.
, .
, , %
%
. %
, %
, .
, . %
,
, . %
.
,
.
114
5.
,
.
, .
,
.
,
%
. %
. , %
,
,
.
%
. , %
.
?
! .
, ? %
] , .
%
, .
, ;
, .1
.
. ,
, %
. %
, ,
( ), %
, .
, .
%
, . %
. %
1
, , ,
. C/C++ %,
. %
. %
, %
.
115
, ,
.
%
. . .
API.1
, %
( % ).
, %
. .
.
?
, , .
C /* */
. C++, C99, C#
Java , , , //.
#
, .
, .
.
. %
, %
, .
?
.
.
, ,
, .
.
, , ,
.
%
. %
, ,
.
.
, ,
1
,
. 104.
116
5.
. %
, %
. .
,
# .
, % .
, ,
. .
, .
, .
, .
, , , %
, .
. %
.
,
. , f()
g(), , %
% someGoodExample() .
, , .
, &
.
, .
?
, !
, %
.
? , %
.
,
, .
. , %
. . ,
, , . %
117
, ? , %
, ,
.
, : /* WidgetList
GlbWLRegistry */ /* */.
, %
, .
,
, %
.
, .
,
.
, , ,
.
: ++i; //
i. : ,
, %
.
, ,
. , %
, .
. .
, %,
(, //
foo), %
.
, %
, .
. ,
, .
,
, .
, , %
. , %
118
5.
, , %
!
,
, , .
(
) .
, ,
, . ,
?
, %
. %
:
% , %
, .
, , %
, .
, , %
, .
, . :
!
? .
, %
,
.
. %
. 126 .
,
. . %
, , , %
. , %
,
,
.
%
. . %
( ). %,
119
, , ,
.
%
.
. %
, .
, ; .
. &
?
: ,
. %%
,
( ).
% %
,
. %
,
.
,
. %
. , :
, .
.
.
.
. (
, printfs), ,
. C #ifdef 0 . . .
#endif . %
, ( , %
).
120
5.
ASCII%
. :
aBadExample(n,
//
//
//
foo(wibble));
^^^
%
.
!
%
, // end if (a < 1) %
if. %
; , . %
, %
, ,
. .
%
. C++. %
, .
for (int i = 0; i < wlst.sz(); ++i)
k(wlst[i]);
, % , . %
, %
:
//
for (int i = 0; i < wlst.sz(); ++i)
{
//
k(wlst[i]);
}
! , .
.
, , %
.
for (int i = 0; i < widgets.size(); ++i)
{
printWidget(widgets[i]);
}
121
, i %
. %
. loopCounter , , #
.
, %
. : %
, . (Kernighan Plaugher 78)
, %
, . %
( %
), , . %
,
, .
.
. %
, , .
, , %
.
. , %
? %
, %
.
, ,
. %
. , % %
%
.
.
, %
. (. . /* */ C
C++) .
, ,
:
/*
*
122
5.
*
*
*/
, :
/*
,
.
*/
, %
.
,
. , .
. , :
void strangeCommentStyle()
{
for (int n = 0; n < JUST_ENOUGH_TIMES; ++n)
{
// .
doSomethingMeaningful(n);
// , .
anotherUsefulOperation(n);
}
}
( )
%
. %
, .
.
, %
%
.
, . :
class HandyExample
{
public:
... ...
private:
int appleCount;
//
123
bool isFatherADustman;
int favoriteNumber;
//
//
};
,
. %
, %
, .
, ,
.
. ,
.
%
. ,
, ,
, . %
, , %
, .
. , &
.
, %
, ,
.
, C, %
, .
, ,
, .
, %
.
: ,
, %
.
, , %
.
. %
%
. , %
.
124
5.
, .
: %
, (
) ( ).
, ,
:
/********************************************************
* foo
*********************************************************/
.
. %
.
, ,
.
%,
. .
, %
.
%
.
. . , %
, //XXX, //FIXME
() //TODO ().
. XXX
. TODO %
, .1 FIXME
, .
%
, . , %
, , %
, . ,
; %
1
TODO . , %
TODO, . ,
, %
.
125
, , %
.
.
,
, , . .,
. %
: .
, (%
, foo) %
, .
,
% ,
( %
) . % %
, , %
.
, .
:
%
.
,
. , %
, , ,
.
, .
, %
. :
( )
( , )
( ,
diff)
, ,
. , ,
, .
126
5.
,
. %
. : .
README
, ,
. ,
%
. %
, ,
;
.
README
, %
. README,
, .
README , %
; , %
.
, %
, ,
. , %
. .
,
.
, . ,
, 10
, .
, ,
.
. %
.
%
, %
. , , %
, , %
127
.
.
.
,
.
, , ,
. %
. , %
.
, TODO,
. %
.
, .
, , %
. % %
:
// < > blah.foo2()
// blah.foo()
// < >
blah.foo2();
( %
),
, . ,
%
, , .
, , %
, .
%
, .
%
%, %
, . %
#
, .
, .
, , , .
. %
;
128
5.
, ,
, A B .
, .
, B , A %
, B .
%
, .
. %
, %, , . %
, . .
: ,
, ,
, . %
. ,
. : %
, , %
.
, , .
, ,
.
%
. ,
.
, ,
. ? %
, ? ?
?
, ,
, %
. ,
, , %
.
, %
, .
,
% %
129
(, ). , %
, %
. , %
, %
.
XXX,
. ,
. , %
; !
. %
, foo.c, ,
. %
.
, .
. , %
. ,
.
;
. %
, %
.
#
, %
%
,
,
( %
. .)
130
5.
.
2.
%
.
3. ?
:
.
4.
, %
. , %
.
18.
,
.
. 605.
1. #
:
a. ( )
b.
c.
d. C/C++
131
2. %
. ?
?
3. , %
//, %
? ?
?
4. C/C++ API,
, ,
, ? %
?
1. , %
. .
, ? (, %
!)
2. , %
, , %
, , ?
3. %
, , ?
a. ? ? ?
%
?
b. , %
,
?
4. ? %
:
a. ? , %
? %
?
b. ? %
? %
?
5. %
, ? %
?
? %
% ?
,
.
.
.
% %
: ,
.
,
,
. %
. :
.
% ? %
? .
, ,
.
.
, ,
.
134
6.
, %
.
, %
.
, ,
. %
, , %
, . , %
, ,
.
,
. %
: %
. ,
.
.
. , , %
, . ,
, ,
, , %
%.
, %
; %
, .
, ! %
() 9.
,
:
.
, %
.
. %
.
, . %
, , %
135
( ).
.
: %
. %
%
. %
.
, %
. , %,
. ,
.
%
.
, %
. %
: %
, % %
.
.
.
%
, .
,
. , :
, %
,
.
, ( %
). , %
, #
, ,
.
, %
. .
%
. ,
136
6.
,
. %
.
.
() ,
. () , %
%
. %
, (%
, ). %
,
(, ).
%
. , %
, ,
.
. ,
, %
.
, ,
. ,
, , , %
, , .
. ,
, . &
, & .
%
. ,
, %
!
, %
/ .
/. %
%
. ; %
. %
,
137
% .
,
.
, ; %
.
int count() %
, %
? :
( , tuple), %
, .
C .
. C++ .NET
. C
. %
; , %
.
. , %
; %
.
. %
%
, ( NULL). Java
C# .
.
, %
%
. , %
; %
.1
,
.
,
.
, %
.
,
. %
1
unsigned int,
signed int.
138
6.
,
. %
.
C
errno. :
errno. %
; %
. , %
.
C errno, %
.
, , .
%
.
( ) %
; . %
,
. %
, ,
, . %
,
. %
, .
,
:
, %
. C++,
.NET Java.
,
.
, %
. ( , %
), (% %
).
. %
, %
, , . %
, %
139
. %
. %
%
.1 , #
. , %
, .
, , , %
, %
.
%, %
.
( %
) (
).
.
%
. %
, %
,
. , %
; %
!
#
. ( %
, ), , %
. ,
% .
%
, ,
; . %
, C++;
%
, , .
, ,
% .
. , %
%
.
140
6.
.
, %
. :
( %
%
), . %
(. . ), %
. : %
% 10 ,
. %
; ,
, %
10, .
, . %
,
.
, .
.
:
. %
,
, %
.
. , %
. %
,
.
, %
.1 %
.
%
.
.
1
, , C++ Java. C#
~X(), , %
. C# %
.
141
%
,
.
, #
,
.
, %
, .
,
.
, .
.
, UNIX, %
( ISO C [ISO99]).
%
, ,
,
. .
, C,
, / %
. %
.
, , , %
, . :
, %
. %
; , , , ,
.
.
%
. errno C %
%
. errno,
. %
errno. ,
, . ,
, %
.
142
6.
%
, ,
.
, , %
.
( ).
Java , %
.
, , %
. Java %
,
. , ,
, %
.1
: %
. . %
.
, %
, . %
, :
. &
, ,
.
: ,
%
. ,
, %
, .
, %
. %
. %
. , %
: try/catch,
, ,
1
C++ ,
. , %
. Java,
.
143
, ? %
.
, .
. , . %
: ? .
%
%
, .
:
. %
, .
%
. , :
, . %
?
.
?
? %
.
, , %
.
? , , %
.
? ,
, %
.
.
,
?
, %
,
. %
144
6.
, %
.
(, %
) (, %
, ). %
.
. %
%
, %
, .
? %
. .
, .
, %
, .
. %
,
.
, %
.
,
. , , ,
, . .
, %
, .
,
.
;
,
, . %
, %
. ,
, ,
, , .
% %
. , %
%, %
%
145
.
: , , %
/
, .
: , %
. ; %
, . %
,
, ,
, %
.
,
, .
, . .
? , ,
.
, %
:
%
. %
, %
.
, %
, %
%
.
;
.
,
.
, %
,
, %
.
.
,
. %
146
6.
%
. ,
. %
, . %
, % .
, %
, .
, .
,
%
, .
, , %
. ,
, %
; , %
!
%
.
. , , %
, .
, %
, .
, , %
. , %
.
. , %
%
. %
, ,
. %
. , %
, .
, , ,
. ? . ,
%
,
.
, ,
.
.
,
.
147
, , ,
, , .
%
. .
:
, %
( %
).
, %
(
).
, %
. ,
. , %
, , %
. %
.
!
. ,
,
, .
. ,
. ,
, ,
. %
, :
void nastyErrorHandling()
{
if (operationOne())
{
... ...
if (operationTwo())
{
... ...
if (operationThree())
{
... ...
}
}
}
}
148
6.
; .
.
, %
. %
.
; , , %
,
.
? , .
. , #
, %
ok, :
void flattenedErrorHandling()
{
bool ok = operationOne();
if (ok)
{
... ...
ok = operationTwo();
}
if (ok)
{
... ...
ok = operationThree();
}
if (ok)
{
... ...
}
if (!ok)
{
... ...
}
}
, %
% . ?
, . , , %
, ,
. :
,
, . %
. ,
,
, .
% %
, %
149
, . ,
. %
, %
.
, %
. : %
! (
, .)
,
:
, ,
, %
. , %
: 10K. %
,
OK , %
, , .
%
. , , %
. ( %
% %
.)
.
, ,
707E. %
.
.
( Error:) %
.
( : Yes/No?),
. , %
, , .
, , %
, ,
. ,
, %
.
150
6.
,
, , %
% . ,
,
.
(SESE),
, %
, .1
. , :
void shortCircuitErrorHandling()
{
if (!operationOne()) return;
... ...
if (!operationTwo()) return;
... ...
if (!operationThree()) return;
... ...
}
, %
. , #
goto.
.
void gotoHell()
{
if (!operationOne()) goto error;
... ...
if (!operationTwo()) goto error;
... ...
if (!operationThree()) goto error;
... ...
return;
error:
... ...
}
C++
Resource Acquisition Is Initialization (RAII)
(Stroustrup 97).
1
, SESE, ,
. , ,
,
. ,
SESE ,
.
151
: %
, %
. ,
, %
.
, %
, ,
, ( C++, Java
C#):
void exceptionalHandling()
{
try
{
operationOne();
... ...
operationTwo();
... ...
operationThree();
... ...
}
catch (...)
{
... ...
}
}
, ,
.
try/catch , %
, %
. , %
, %
.
, %
. %
: . %
, ,
.
. , ,
, .
, , .
? %
: %
.
152
6.
, ,
, ,
. Java C#
; %
. C++
, %
, C.
, %
. , %
, .
, %
:
%, ?
%
, #
.
. ,
. %
.
.
, %
.
. %
,
, .
,
. , %
(, ).
,
, . . %
, assert
(. . 45). %
: %
, %
.
% ,
. %
, .
, .
,
. : %
, .
? , %
, . %
, :
153
. ,
. %
,
. (
?)
.
.
.
.
.
. %
.
, %
while %
,
. ,
. %
:
. %
, %
.
%
.
%
,
. , %
, :
, . ,
. , %
, %
. ,
. ,
154
6.
, , %
, .
. , %
. , , %
,
GIGO?1
%
. .
, ,
.
:
? %
; % . %
, %
.
, ,
. &
. , , &
.
, ?
, %
, .
;
, .
, , .
( %
). .
%
.
.
% , %
.
1
155
. %
.
. 90% %
(Bentley 82). ,
, ,
, , .
%
%
%
%
, %
%
,
%
,
,
.
1.
%
.
4.
,
.
156
6.
9.
%
. . ( %
.)
. 607.
1. ,
? .
2. % %
? % %
.
?
3.
?
4. UNIX. %
, %
?
5. ?
6. , %
?
1. %
?
?
2.
, %
?
3. (
) . %
.
?
% %
. ! ? %
? , ?
4.
? ,
, ?
II
%
. %
,
% . %
, ,
;
.
:
7.
.
8.
, ,
; .
.
9.
: ,
.
10. ,
: %
.
158
II.
11.
, . , ,
.
12.
%
.
. %
%
%
, .
,
: ,
.
,
.
. . .
, %
. %
%
, %
, ,
,
, .
%
, ;
, %
. %
, ,
.
, %
.
. ,
,
160
7.
. ,
, .
. %
, ,
%
, ; %
. , , %
.
.
%
.
. %
,
,
.
, %
.
. %
, .
, , %
%
, . %
(, ), %
, %
.
, .
?
%
, ,
. , %
, .
. #
. ,
.
, .
, ,
, .
%
. %
, .
:
161
, #
# %
. %
, .
: , %
. , %
, . %
, % %
.
: %
(,
),
( ).
;
. ,
.
#
(GUI). #
(CLI) . %
,
.
Windows %
. UNIX %
, %
. , %
.
, %
#
(IDE).
,
,
.
GUI , %
.
, ,
, , %
,
. , %
UNIX, %
.
162
7.
.1
.
%
, .
. %
.
,
. %
, .
.
. %
. %
, %
: % % , %
.
, . ,
.
%
, . %
, , %
, .
Windows %
UNIX, UNIX% ,
Windows , , %
. .
, . ,
, %
.
?
; .
, ,
Free : free (
) free (
open source, ).
, . .
. 461.
163
. ,
, ,
, , %
.
, %
, %
.
, .
. ,
, .
, . %
, #
.
, . %
,
. , % !
%
. , % %
%
. :
;
, %
;
,
.
, :
, , %
, ;
, ,
, .
? .
,
,
. ,
%; , %
, . ,
% C %
, .
%
. , %
. %
, , . %
164
7.
,
.
, .
;
, .
, , ,
. ?
%, , %
.
, %
. , %
:
.
, .
%
, %
.
. ,
% ; , %
, %
. ,
,
. , %
; ] %
.
, . ,
, .
, ;
. , %
, %
, %
. ,
,
.
%
%
! ,
.
165
,
. %
,
, #
, . ,
( %
% ),
.
% , %
? , , %
. , ,
,
.
, , , .
,
, .
?
. , UNIX %
,
.1 %
,
.
, %
%
GUI. ? %
, .
,
, %
. ,
,
%
. , sed.2 %
1
, .
UNIX man bash, %
pipelines.
sed , %
.
166
7.
%
.
, , yacc,1 %%
,
.
. .
,
% %
. , ,
.
. %
, .
. %
. %
. ,
.
%
, ,
.
.
,
. , ,
!
, . %
? ?
, , , %
(man). ,
.
?
,
%
. %
; ,
.
167
. widgeti%
zer,
.
%
, , %
.
.
!
%
, . ,
.
,
.
,
.
?
.
, , ,
, . %
% , ,
% .
%
. %
%
. . %
, .
,
, IDE
. , %
,
;
, IDE.
IDE , %
,
. %
IDE.
, , %
. , ,
168
7.
, %
.
, ,
. ,
. . %
,
. %
.
;
, .
%
, .
, %
. IDE , ,
. , , ,
. %
:
( ,
. . )
(, %
)
( ,
)
,
,
, %
. ,
. %
.
, , %
.
( %
) , XML.
Vim Emacs UNIX,
, %
. , %
IDE.
169
UNIX
. GUI
,
.
GUI .
UNIX
:
diff
.
diff , %
. ,
, %
.
diff .
sed
stream editor . sed
%
. sed , %
.
awk
sed . awk %
, .
, awk %
.
grep
, . %
%
% .
find/locate
. %
, .
; %
. , wc /.
: sort, paste, join cut.
.
, , .
, .
%
170
7.
. , %
.
,
, , ,
.
, ,
.
, %
, . . %
.
LXR, Doxygen ctags.
, %
%
. 449. :
, .
.
, .
yacc,
LALR(1).1 ,
, %
, %
. C %
, . %
Bison.
, ,
. %
. %
GUI MFC. , %
,
, ( %
). !
, ,
, %
. ,
, .
1
( )
.
171
%
, , , .
, %
. ,
.
. Perl ,
.
, . %
, %
.
,
#
. , , %
%
, .
, %
. % . %
, %
,
.
.
, ,
.
, %
. ?
, %
,
.
,
?
.
?
, ( %
, ). %
,
, .
172
7.
?
C++ (ISO 98), 1999 C (ISO 98), %
Java (Gosling et al. 00)) ISO C# (ISO 05)?
,
?
CPU? %
386% , ,
Intel? %
, .
# , %
, . %
(
Visual C++ !).
. .
: %
, . %
? , % %
, ?
, , .
, , %
, , %
. %
.
, %
.
. 178 .
:
, %
.
.
.
, %
, %
. , .
?
?
? %
?
173
,
, , ,
.
gcc, Microsoft Visual C++
Borlands C++ builder.
(linker, ) .
, ,
. C C++ %
,
. Java C#
.
:
?
? %
,
%
.
?
?
?
%
. , UNIX%%
make , IDE.
. %
UNIX, autoconf
automake.
%
, .
10.
, %
, !
, %
. , %
, % , %
.
.
174
7.
, ,
.
, , %
. %
, %
.
,
%
. ,
%
( , . .).
%
, %
. . 231
, , .
%
, %
.
, ,
, %
. %
, printf!
gdb GNU ,
. ddd
. IDE %
.
, %
.
.
, , %
, .
.
, %
. lint ,
%
175
C. %
, %
.
, .
/ %
%
.1 %
.
,
, : %
, .
( %
).
. , %
%
.
.
.
,
. %
, , . #
,
.
, %
.
, %
. %
,
%
.
, %
, . %
, ,
1
,
Java, .
176
7.
, , , %
. , %
;
,
. , %
%
.
%
. ,
%
.
. , %
, .
, %
. ,
C ; %
.
( C++), %
.
.
, ,
.
.
.
. , &
.
%
. ( #
), %
. %
.
,
, .
JVM ( Java) %
. C++ , %
.
C# .NET .
177
! %
%
. %
.
%
,
, % #
. , %
.
, .
%
. %
C++ STL. Java .NET %
. %
, .
. %
. . . 179 %
, .
.
. ,
, ,
( %
. 103). %
.
, .
( %
).
,
. , %
, ,
.
.
178
7.
, , %
?
, .
. , %
, %
,
.
,
.
, , .
, :
UNIX,
.
( , Windows),
.
. %
,
Perl. ,
, .
.
, %
.
.
:
?
? %
%%
, . %
, , %
.
( %
?)
179
, .
%
. .
, %
.
? , %
? , ?
. #
. , %
. , %
. %
.
%
,
%
%
,
, , %
, %
, %
%
%
%
% %
,
, ,
%
, %
.
10. ,
%
.
?
180
7.
13.
, .
18.
.
. 612.
1.
IDE %
? %
?
2. %
?
3.
GUI?
4. , ?
5. ?
a.
b.
c.
181
d.
e.
1. ?
?
? ?
a. ?
b. %
?
c. ? % %
?
d. ?
2. ? %
, ?
3. (
) %
? ? %
?
4.
?
?
5. , %
? ,
?
?
?
?
, .
5:21
:
. %
, %
; %
.
, %
.
, .
%
,
.
?
. , %
,
,
.
, ,
184
8.
,
. , , %
; %
. %
%
,
. .
, %
, .
, . %
.
, , ,
. %
? ,
?
bug ( )
. , ,
. %
.
IEEE (IEEE 84):
(error)
, . ,
. , %
(, %
C, ), .
(fault)
, %
. , %
. . %
, %
.
, , %
, , %
.
. %
, %
; ,
.
185
,
, .
(failure)
#
. .
, . ,
, .
.
. ,
?
, ? %
.
, (bug)
,
(fault).
().
1947 . ,
Mark II Aiken
Relay Calculator, .
? #
? . %
%
. . %
, %
;
.
(Kernighan Pike 99).
, %
, %
.
.
, %
. ,
, (
).
. .
. , &
.
186
8.
,
, .
, .
:
%
( ). %
, , , %
, %
,
. .
, , %
. : %
, %
,
.
, . %
( )
, . %
, %
.1
.
, %
. ( %
) .
(QA).
, , ,
,
.
%
. %
, %
.
, , , ?
,
, , ,
.
,
?
187
, , , ?
QA: . , ?
? %
, . QA, %
%
.
QA , %
. %
, %
. QA . , %
. %
QA, %
%
.
, , %
( %
). , %
.
? %
, ( %
QA), , %
. , %
, .
, . ,
, %
; , %
.
, %
. %
, .
, , %
: %
,
.
, %
.
, , ; .
188
8.
. &
. &
, .
%
. %
%
, . .
, %
. (validation) %%
.
, , . %
10
.
,
, %
, %
, %
.
. ,
.
, %
. ,
, ,
, . %
% , %
%
. , ,
%
.
. ,
& .
, %
, , %
. ,
, %
. ,
, %
, .
, , , ?
189
,
, %
. %
:
. ,
;
. %
.
, (. %
. 195).
. , %
. %
, ?
.
, ; , %
. %
(. 20). %
,
.
. ; %
, . %
.
,
. ,
. %
.
, %
,1 %
( )
. , #
,
%
; ,
!
. . 216,
.
190
8.
, ,
.
, !
, %
.
. . ,
, .
, %
.
.
, .
, %
,
, . %
. ,
.
:
, , %
, .
; %
. 202.
, ,
, (%
, ).
, %
. ;
, %
.
.
, ,
? , , %
( ).
, %
. (. %
. 256) %
( ).
.
191
, , .
.
, , :
.
.
,
.
, %
.
.
, %
% .
. %
:
bool logical_not(bool b)
{
if (b)
return false;
else
return true;
}
, . %
:
void test_logical_not()
{
assert(logical_not(true) == false);
assert(logical_not(false) == true);
}
. %
(
). %
?
int greatest_common_divisor(int a, int b)
{
int low = min(a, b);
int high = max(a, b);
int gcd = 0;
for (int div = low; div > 0; div)
{
if ((low % div == 0) && (high % div == 0))
if (gcd < div)
gcd = div;
192
8.
}
return gcd;
}
, %
:
, %
. %
; .1 %
.
. ( for) %
.
. %
,
, , .
. , ,
. ? %
.2
, , &
. , , &
, , .
.
. , %
.
,
, %
.
.
,
. %
, ,
1
, . %
, int 32 (. . 264 )
(,
!),
600 !
%
(. 615).
193
.
, #
. (. %
. 202).
.
, ,
.
, %
, .
, .
. %
, (
) .
%
, .
%
.
%
. %
, , %
.
.
%
GUI .
%
,
(, %
).
:
, %
.
.
,
, , %
. %
, %
.
,
194
8.
, , %
.
%
,
.
, %
. %
, %
, API,
,
, .
, , .
, .
,
.
, . %
,
. %
, %
: ,
.
%
.
%
: , , %
, , %
, %
. %
!1 , .
, , .
%
%
.
. %
,
. ,
1
. 68000
, %
, .
195
%
.
, %
, .
, %
, , %
,
. %
(
, %
0.5 3 1000 ) (Myers 86).
100% ,
.
%
,
. .
,
. %
%
. .
#
(, ,
), ,
.
. %
, ,
, ;
, , .
%
%
. .
,
, .
,
. %
,
196
8.
, ,
. ,
. %
.
, %
. %
.
! . 203.
, %
, , ,
. ,
, ,
. , %
, ,
. , %
.
%
,
, .
. %
: .
,
; , %
, .
, ; %
.
%
,
. %
.
()
. %
%
,
, % %
.
, %
: , %
,
.
197
, ,
% %? %
, ,
. , , %
, .
.
, . %
, %
% . %
, , %
. % % %
%
, %
% .
:
. %
. %
% , %
,
.
%,
%
. . %
(. . %) %
,
. %
.
%
.
(validation),
. %
, .
% %, ,
(,
). %
.
198
8.
, %
. ,
, %
. ,
, %
.
%
: #
.
.
. %
;
.
.1
,
. %
API .
%
, .
%
, .
. %
. %
.
, %
.
.
, %
.
. ;
,
.
%
.
, %
1
; %
, .
199
.
,
.1
%
,
. %
. %
.
, , .
, , %
.
%
.
.
. , %
,
.
?
%
, QA
%
, QA
, ,
, %
,
, , % %
, , , QA
% ,
, , % QA
, ,
, ,
,
QA
%
( )
, %
, .
200
8.
, % (%%
, ),
.
.
, ,
.
, .
,
,
% .
%
, %
. %
, , %
.
? ? %
, ,
. , %
, ,
.
, &
. , &
, , 15 , 15 &
.
, %
. , ,
201
.
, .
:
,
%
.
: %
, , %
,
.
#
.
.
, :
( ).
(%
; , %
, %
).
( ,
; , %
).
. %
(, , %
). %
:
,
,
,
, %
.
, >
>= %
( ?).
.
202
8.
%
. . %
, %
, %
, .
,
. % %
, .
C/C++ , %
. , %
.
Java .
%
, .
,
. %
API, %
. %
. , , ,
%
.
, ,
.
.
.
, %
, . %
. %
, %
. .
, ,
.
.
%
. , %
203
, . %
:
.
,
, :
, %
. %
; %
,
.
( single#
ton, ).
, %
.
; ,
, , %
.
, %
, , %
, .
!
%
.
%
. %
. , , %
. : .
, . &
, , : &
, .
,
. %
, %
; %
%
.
.
%
,
204
8.
.
, ,
. %
, JUnit %
Java.
. %
, ,
;
. , %
, .
.
, %
, . .
, .
,
. , %
?
, ,
, .
, %
? ,
. , ( %
) . %
,
, :
1. ,
.
2. . , %
,
% .
3. . . . %
:
;
;
;
205
, %
;
, .
4. !
, , %
(. ?)
5. ,
, .
, ,
, .
: , %
! , ,
,
.
. ,
: , %
, . %
, , , %
. , ,
, .
?
. %
%
. %
, , %
, . , %
.
. :
,
.
%
.
QA .
%
, %
. ,
.
#
. , ,
% .
206
8.
, %
. ,
. , %
:
, #
.
. %
.
. % , .
,
; ,
.
.
( %
% ). %
, , % %
, .
, %
. , %
,
.
, , %
, ,
, .
:
,
.
.
, %
. , , %
, ,
% . %
, .
, %
( ).
, ; %
, , ,
207
, , . %
.
, ,
, %
.
%
:
, ,
, %
, .
, .
, %
. #
.
:
, %
. %
.
,
:
.
, %
.
,
, .
,
, Bugzilla,
Mozilla.
(bug review) %
. ,
,
. %
,
%
.
208
8.
:
, . ( , %
.)
,
, ,
. ( %
.)
, %
.
, %
. (
,
, .)
, . %
, %
. %
, ,
. %
.
, %
, .
, . %
. .1
%
. , ,
.
,
.
, %
,
. %
.
. QA
, %
1
. 435
.
209
. %
,
, .
(, #
)
,
%
%
%
%
,
%
,
QA ,
, %
,
,
.
9.
%
.
20.
.
. 615.
210
8.
1. %
(greatest_common_divisor),
. %
. ?
a. ?
b. ?
c. .
2.
?
3. , ?
4. , ,
QA?
5. %
?
6. , ,
. ?
7. C/C++,
, NULL ( %
)? ?
8. %
,
. ,
, ?
(,
),
?
9. , ? #
?
1. ? %
? %
? ?
? ?
2. QA?
?
3. , ?
4. ?
5. %
?
9
: ,
?
?
:
.
10 000 , .
. , %
. %
%
. ,
,
# #.
, ,
%
, , ,
.
, % %
. %
. .
.
,
, %
, ,
= %
== if.
212
9.
. .
, , .
, % % %
, : ,
. , . , , %
, .
, . , ,
.
, .
%
? .
. .
. ,
, , ,
, %
. . %
. :
, ,
, ,
, ,
, ? .
, , , , , . . %
. ( .) %
,
? ,
, .
, , %
, . . %
% ? .
: , . %
.
: . % , %
? ! (Simpsons 91).
, , %
. ,
, . %
, .
, ,
.
, %
213
. %
.
,
, .
(bug)
. 1870%
.
Mark II Aiken
. 1945 , %
,
, , %
, .
.
.
. , , %
? %
. 184. ,
, , , %
.
,
.
, , ,
. , %
:
, , %
, . ,
%
,
% .
, , %
. ? , %
. .1
, ; %
. 216. %
,
1
, ,
%
.
214
9.
. (
) .
, .
%
,
.
make%, (,
)
, .
%
, .
. %
. 60%
. ,
, .
, , , %
. , ,
. , . %
, %
, . , ,
, .
( ).
, %
, % . %
. ,
.
, .
? , %
COM%? ,
% , ,
. .
, %
, %
, %
.
, .
.
215
, %
. %
.
C :
== = && &
(%
for)
, %
. %
%
.
&
.
, .
, , , %
. %
, %
. %
. ,
, .
:
%
(, % make% %
%
). , , , %
, ,
. ,
, , %
.
. ,
% ,
. %
.1
1
, .
%
.
, . %
. Cest la vie.
216
9.
. ,
. , %
. %
%
.
, .
, ,
. %
; ,
.
%
, ; %
, %
. %
, %
(Boehm 81).
, % 1000
% 500
( %
, % 200
% 100
). 50
, 20
%
, 10
5
%
2
. %
1
7 7 7
%
, %
.
,
.
,
. %
; , , %
, (test%driven development),
.
217
%
, . %
%
, :
, %
, . %
, . %
:
()1
%
(
char)
unsigned int foo, %
if (foo < 0) !
%
.
, ,
. %
, ,
%
. : %
API .
, ;
%
, % %
.
. :
, .
. ,
. , %
, .
,
:
1
: %
, % .
218
9.
, , %
, %
. %
, %
, %
.
%
. %
C, , scanf("%d",
number);. & number , scanf %
, %
, ,
. , %
.
, %
, , %
.
, %
, , %
.
, .
( %
),
. .
%
. %
, , ,
. ,
, %
, . %
, %
.
, .1
,
( malloc C new C++). ,
, ( free de
lete ). , %
,
1
. %
, . %
, .
219
.
,
.
:
, , %
,
. (: ,
, .)
, %
. , %
( , %
),
. %
,
.
%
.
,
%
, .
, %
, %
. , .
%
, .1
: %
, , %
/ , (%
, ). %
, printf("%f"),
.
: %
%
. ,
,
1
Linux, , %
. malloc %
0, .
220
9.
, , , %
. %
, , , %
.
,
, .
% ,
. , Java
.
. %
, , %
, , , %
, .
%
: , %
. , , ,
, , , #
. . %
; .
, , , .
, %
( 60%) ,
( 35% ), %
(Gould 75). ?
, , .
; , %
. .
.
: . ,
. , ,
.
: .
:
. :
,
,
, .
221
. . %
? ;
. %
? , , ,
. %
, , , %
. %
:
.
,
. ,
. %
, , .
,
, .
, %
. . 228
.
, .
%
, ,
: .
. %
, ,
. .
.
, :
,
, . , %
, % ,
.
,
.
, &
.
, %
.
222
9.
. %
,
;
.
. %
, , , %
, %
.
, .
, .
.
? %
, %
. , , %
. , %
.
,
. % %
, , , ,
, , , %
. ;
,
. ,
, ?
,
.
%
. ; %
, .
, .
.
%
; %
( ,
). C++
223
%
, .
, %
, %
; .1
1:
%
.
%
.
, % %
. %
, , %
.
, .
,
%
.
, %
. , %
, . . %
. %
, .
, ,
.
,
, , %
, %
.
, .
C++ : %
! ; %
, %
. , , %
.
224
9.
:
, %
, %
.
.
,
, %
.
, ,
, .
, %
, .
.
, ,
( ).
, %
C++; %
% .
. %
, , %
, ,
. ,
, ,
.
.
.
, &
. .
,
. , %
. :
1. .
2. , .
3. %
.
4. , .
225
, ,
, ,
. %
, ,
.
, ,
. ,
.
(. . 205). %
, %
, . %
, .
%
.
,
, ,
. ,
: ?
, %
? ,
, ,
. , %
% .
? %
, , .
.
, .
, .
.
, .
,
. , %
, .
. ; %
, ,
226
9.
. ! , ,
%
.
, .
, % . %
, .
, .
, .
% ,
. ,
, .
, ,
. :
% , %
, . %
; , %
,
. , ,
. %
, , ,
, .
, &
. , &
.
:
% ,
. . ( %
!)
. , %
, 20 .
10%
. %
, , ,
; . %
, .
(dry run). ,
,
,
. %
, , %
, . , %
, , , %
.
227
, ,
. , %
= == (!), .
, , ,
, , %
, .
: ,
, ! %
(, ?). , %
, , ,
.
,
, .
, ,
, . &
.
.
, , %
.
, . %
.
, .
, .
: ! %
: , %
, . %
.
, ; ,
.
,
.
,
, .
, . %
,
.
228
9.
, , &
.
! , . .
, %
: ,
. ,
% . %
%
, % . %
. , #
.
, , .
.
. , ,
.
.
, %
. %
, ,
, .
. ,
.
, #
. ,
.
, ?
% ?
, ,
. %
, . ,
, %
.1
,
, . . . :
, %
.
229
, , .
: .
, . %
,
. ,
, , %
?
2: ,
%
.
,
.
; ,
,
. %
, .
,
. ,
. %
, %
% , %
. %
.
,
. %
%
, . %
, , %
( ). %
,
, .
%
.
;
, . %,
!
230
9.
, ,
. %
, , ,
. ,
, %
%
. ,
. %
%
,
%
.
,
.
,
,
%
. ,
( ).
%
%
.
. &
? ?
, , %
. %
. , , %
.
, ;
,
. ,
.
%
. %
.
, %
: . .
, ,
231
, ,
, .
%
,
, .
, , %
.
;
. (debugger) , %
%
. %
, ,
, , %
.
; %
,
. ,
( gdb
, , ).
, %
( ,
). %
%
.
, ,
, #
.
, ,
, %
, , %
. ]
, .
, ,
. ,
, , .
(Memory Access Validator) %
. %
, .
232
9.
, strace Linux, %
, . %
, %
. , , %
% , .
(core dump) UNIX %
. #
(ferrite core);
core. , %
.
( )
.
%
.
%
(, , , %
) %
.
,
, .
(
%
), , %
. %
,
.
.
, 8%%
,
. , %
!
: %
,
. ,
,
. %
.
233
,
. %
,
,
. , %
%
, %
, ,
.
,
.
, , %
: , %
.
, ,
.
,
. , ,
%
, , %
, , .
, .
,
.
%
; , %
, %
%
,
; %
%
%
, ,
, %
234
9.
, %
,
%
%
, %
, %
.
1.
.
8.
, . %
, %
.
235
20.
,
, %
.
. 622.
1. , ,
? , ,
?
2. , %
?
3. ,
. , %
, %
.
?
4. , %
.
5. %
?
1. /
?
2. , %
?
?
3. %
?
4. %
? ?
:
a. ;
b. ;
c. ;
d. ;
e. .
10
,
, ,
.
.
(Geekus maximus) %
, . . %
, %
%
. %
,
.
%
.
, %
,
, %
%
%
.
238
10. ,
( ),
, , .
. .
, , %
, %
,
(building code),
(making, compiling).
,
. , ] %
%
.
, %
. , %
; %
, ,
.
%
, ,
. ,
, , C
, %
, .
,
. , ,
.
,
%
. %
, .
, #
, #. %
. 10.1.
, , %
. , %
, ; %
. %
Perl, Python Java%
Script. OO% , %
239
1.
2.
3.
4.
, 7
JIT7
01010101
01010101
JIT7
. 10.1.
,
.
%
, #
; . ,
%
.
, .
:
, , %
, , %
. . %
, %
, %
. ,
: %
( %
) Just#In#Time
(JIT),
( ).
,
JIT% %
.
240
10. ,
?
%
, , %
. %
,
.
%
(. . 334),
(Christopher Alexan%
der) (Alexander 79).
.
, .
, , , %
%
. ;
.
, %
,
.
.
,
, ,
;
.
.
%
. ,
, .
,
. , %
,
.
:
.
%
.
241
%
, , %
, .
%
, .
. %
, ,
,
. %
build (, ).
: , %
. ,
, %
.
.
( )
. %
%
. UNIX,
Windows Tcl.
%
.
,
, ,
#. %
:
,
. %
, . 10.2, %
( ) () %
().
C C++, %
. %
, ,
( , JIT%
), ;
242
10. ,
. 10.2.
%
, .
, %
,
. ,
, .1
, N
% %
.
,
. , #:
,
. Java C#.
1
. , %
.
243
, % #
,
. . JIT% %
, %
(, %
, ).
, % %
, . %
, %
, (
).
( %) %
, , %
. ,
, %
. , .
, %
, , IDE
.
:
1. C. , %
,
. , %
, , main. %
.
compiler main.c,1 ,
. .
2. . %
, .
% .
compiler main.c func1.c func2.c. %
, , %
. .
3. ,
%
%
. , %
, .
1
, compiler ,
C; .
244
10. ,
. %
,
,
,
. main.c
.
%
. .
%
,
.
. , , %
,
. , %
.
, (
Windows), %
. %
, %
,
, %
, .
4. %
; %
. ,
, %
, ,
, . %
,
.
5. .
. %
.
, , , %
, %
, .
, %
%
(, %
). , %
% .
(, %
, %
).
245
.
, .
. %
, %
.
, %
. %
make (Feldman 78).
%
, ,
. make%, %
. ]
, %
make, ,
, . %
, , %
.
make, . GNU
Make ( %
). %
make, Make: . 248 %
.
, %
SCons, Ant, Nant Jam. %
(, Nant
.NET) ( %
make, !).
%
%
. ,
. %
, , ,
. .,
CD.
, %
,
. ,
, ,
246
10. ,
%
, . %
, ( ) %
.
,
.
.
,
%
:
(source code) ,
,
. %
.
. %
. #
%
%
.
,
. %
,
. make %
; , %
.
. %
.
;
(
). #
, #
.
247
;
, %
.
, %
. #
. , %
.
, . %
. %
,
.
%
, %
, %
.
(linker) #
( , ) %
.
. %
,
.
.
%
. , %
%
(, make).
,
. Make%
, ,
. %
.
&
. .
248
10. ,
Make:
Make
. %
.
Make make#, %
, %
. make% , %
. (target, %
), ,
, . %
#. ,
compiler:
# : ".o!
# .c!, ."
# $< $@ !
# . , make ...
%.o: %.c
compiler object $@ $<
# : " myapp .o,
# "
myapp: main.o func1.o func2.o
linker output $@ main.o func1.o func2.o
. Makefile
make myapp, %
. myapp %
.o%, %
.c% . %
, .
%
. , make%
, myapp :
OBJECT_FILES=main.o func1.o func2.o
myapp: $(OBJECT_FILES)
linker output $@ $(OBJECT_FILES)
make
,
. .
GUI %
, make%.
, %
.
249
?
.
,
. %
, . %
, .
:
, , %
, , .
, . %
, %
.
, , %
% ,
?
. %
, .
%
. .
:
, .
(, %
, , ,
).
(
).
( %
,
, . .).
%
.
, %
,
250
10. ,
. , %
, .1
, . %
. %
(
IDE, make#),
. %
, , %
.
%
. %
, .
, ,
. .
, , .
make%,
, %
, .
. %
. ,
, %
#
.
.
( %
) %
.
: %
, %
, ,
1
, ,
GNU Make, , %
. , GNU Make!
251
,
.
.
, %
, . %
, . %
__DATE__ C % %
, , %
.
#
. %
, .
,
.
.
:
, , %
.
%
% % %
.
. ,
% .
. %
, %
.
. . .
. &
.
( ),
. %
. %
( ) :
1. .
2. .
3. .
; , %
252
10. ,
;
%
. . %
, .
%
, %
. , %
. %
, %
. ,
.
?
, , ,
. . , %
, ,
.
%
, , %
%
.
,
.
;
.
, ,
. %
.
.
, %
. ,
. , %
%
. .
.
%
. ,
, . %
253
.
.
, .1
, , %
. , .
#
.
; %
, .
:
, .
, %
, . %
,
. .
%, .
%
. ,
make, make%,
,
( ).
Make% , ,
. ( ,
.) ,
, . make%
.
%
, :
( , %
).
(, %
Windows/ Apple/Linux /PDA).
%
, . %
.
254
10. ,
(, #
, /%
).
( , %
, ).
( ,
, ).
, %
PDA.1
, %
. %
make, make desktop make pda, %
. ( make
, .)
, %
. ,
] ,
. , ,
.2
?
:
(, save_release.c save_demo.c).
(%
, DEMO_VERSION,
#ifdef save.c).
(, %
).
%
(, ,
).
, %
, %
. %
.
.
: %
, ,
. .
%
.
.
255
make
C,
,
. %
. Java %
; javac
make, . %
,
, .
, Java,
:
javac. Java %
make. , %
. %
,
. Make
, ,
.
,
, .
, ,
,
,
, , %
.
, .1
, , %
, ?
.
(clean) . %
, %
, .
, , , %
.
256
10. ,
,
.
, ?
, ,
.
, %
make%. Make %
,
.
,
.
; %
#include, #include. %
. , %
: #include %
make%.
% ? %
; , %
. %
, %
. , make ,
,
, .
, %
,
.1 %
, .
, :
. %
%
. %
, %
.
%
. %
1
cron UNIX %
(Scheduled Tasks ) Windows.
257
, ,
. , ,
, .
. %
, % .
, %
. %
.
%
. ,
,
.
. ,
, %
, .
, %
.
, %
% , ,
.
&
. .
, (%
) %
(
).
%
, %
. , %
, .
, , %
.
.
, , .
, :
, %
, %
(, ). : #
, .
.
258
10. ,
,
.
.
. %
IDE, make%
. %
:
make
make%
:
PROJECT_ROOT, %
. , %
, .
, %
. %
.
,
(
).
, %
(, ).
(,
.) .
.
make%. %
: #
.
make
. %
, %
. ,
.
.
make%, , make%
, ,
259
make , . %
, make; %
, %
. %
make, %
, , , ,
. , .
make
, . %
( %
), , make
, %
. , make
. (
. 7 . 628.)
%
. ,
, . %
: %, %
. %
%
;
, , %
% %
.
, %
. %
, %
% %
. ,
:
%
, % %
. . , %
, .
, %
.
,
, %
.
, %
260
10. ,
. %
.
,
; %
. ,
. %
,
, .
, , %
, ?
. &
, &
.
( )
: %
, .
.
, %
. %
, .
, %
%
( %
).
.
, %
. %
. ,
. , %
; %
%
, .
. %
,
( )
. %
API , %
, .
261
: %
, ,
. %
,
. ,
,
.
.
%
.
: % %
( , %
). .
. , ,
. %
.
, CD, %
, . . %
.
%
. ,
,
( Zip%, EXE ).
, .
, , %
.
, %
%
. ,
, .
, %
. %
. . %
262
10. ,
,
, ,
, %
, . . %
, .
, %
. , %
. %
. ,
,
. , ,
,
, , %
.
. %
, %
.
.
,
. &
.
%
, ,
( %
).
, %
. %
, .
,
, (buildmaster).
.
,
. %
. , %
,
. .
, , .
%
. %
263
%
.
;
% %
.
, .
,
, %
. .
; %
, %
.
.
, ,
.
, %
, , .
, .
, %
,
%
,
%
,
,
%
%
,
%
, %
.
9.
, .
264
10. ,
18.
.
. 624.
1.
make,
, ?
2.
?
3. (, )
, ?
4.
%
?
5. ?
6. make , %
. %
, make%.
7. %
, . %
. %
.
265
1.
? %
make% %
?
2. ?
, ?
? :
a. ?
b. ?
c. ?
d. (, %
)?
e. %
, ?
3. %
? ?
4.
. %
, .
%
?
11
%
.
; %
, .
.
. .
,
.
, %
:
( %
)
,
,
. (Wulf 72)
, %
,
268
11.
. , %
. ,
: %
, , , %
, ,
.
. %
. : %
,
?
%, %
. ,
, .
. ,
, .
:
(
)
(,
)
%
(M. A. Jackson) :
1. .
2. ( ) .
, .
, ,
. %
% , . %
, %
, .
,
:
,
269
, %
.
.
.
, ( %
, )
, ! , %
,
. %
, .
, :
. %
. %
%
.
(, %
)
%
, ,
. %
,
, %
. %
.
, %
, .
&
,
.
,
, , .
,
,
.
.
. % %
, :
270
11.
. &
, !
, .
.
?
, , %
, .
%
. , .
.
, . %
%
.
%
:
, . %
.
%
OO%.
,
. , ,
%
.
.
.
: .
, (%
, ), %
. %
, .
/
. %
(,
), .
271
, ,
.
,
. %
, %
. ; %
, , %
. %
.
, .
. %%
, %
, ,
.
, . %
.
. %
. % %
. %
, .
, :
,
.
%
. %
.
, .
,
( %
) , %
. .
/
%
. , %
.
, , %
. %
.
272
11.
, %
. %
, .
. %
,
.
.
. ,
. , %
.
, %
. ,
, .
. , ,
, , %
.
. %
, .
, % %
. , ,
. %
, :
%
?
. %
, %
, , %
%
, .
%
,
. ,
.
, %
, , , %
. %
: %
.
273
.
, %
, , , %
.
, .
. %
, .
, . %
,
, %
.
,
. GUI %
, , ,
. %
: , , %
.
.
,
, %
. %
, .
%
%
( %
), .
; &
?
, , %
? . %
,
. ,
.
.
,
%
.
.
: ,
274
11.
, %
.
(DSP)
. %
, %
.
. %
DSP %
, %
.
DSP
.
,
,
.
%
, %
.
%
. ,
, .
. %
,
.
%
, , .
%
, , %
, .
, , %
.
, .
, . %
, , .
, ,
.
?
,
275
. , %
, %
.
:
1. ,
.
2. , ,
.
3. , .
4. .
5. , %
( ).
6. , , ,
.
, ,
,
.
, , %
. ,
, ,
, .
, , %
, . %
, , ,
. , %
.
,
.
, %
. :
, &
.
,
.
, %
, ,
. .
.
276
11.
,
, %
. , %
. ( C.A.R. Hoare):
97% ; %
. %
, %
, .
%
(usability).
,
.
.
, ,
. , %
80% 20% (Boehm 87).
80/20.1 %
, %
, %
, , %
.
, , %
, ,
; ,
.
, ? %
.
. %
, 80% ,
, .
,
, . ,
, ,
.2 ,
, %
. ;
.
1
2
, , 90/10.
, %
, ,
, .
277
%
. %
:
. .
, %
, .
. %
, %
%
.
( %
).
, ,
, %
. %
; .
; %
, , .
,
. ,
.
,
, .
, %
,
.1 %
10% , 10%
.
.
,
.
,
, %
. .
, .
,
, .
%
.
,
.
278
11.
. ,
.
,
. ,
, &
.
( ) %
%
, . %
, ,
.
. %
, .
.
, %
.
&
; .
, ,
.
.
.
( ) : 1) %
, , 2) ,
, 3) %
.
,
,
. ,
, , %
.
, .
,
, , %
; #
.
.
.
279
, %
:
,
.
; .
%
(. ! . 203) %
, .
, %
,
.
, %
,
. %
, .
.
%
, %
. , , .
, %
, . ; %
, %
.
.
,
.
, .
, %
.
, %
. , %
(, ,
).
; %
. , %
, , , %
. . ?
280
11.
.
, , (%
, ) %
.
:
. %
,
. %
, , %
, , .
. %
:
,
%
( , %
,
) %
( %
). , %
:
, .
, %
. . %
, , %
; .1 %
,
.
,
:
, %
. , %
, , .
%
. , %
1
, , %
, , .
281
,
. %
; %
. %
.
, . %
, .
#
(FPU) , %
. %
, ,
. C++ %
.
;
, %
. %
#
, , .
%
, . %
, , %
.
, .
, %
.
, %
%
. %
,
. .
:
. , %
%
. ,
, .
(exceptions). %
1 %
, .
,
. C++
, try/catch %
. , ,
.
282
11.
RTTI , %
.
: , %
. ,
, . . %
% . %
, .
. ,
.
: %
.
, .
%
.
,
: %
. %
,
.
( , %
. .).
, %
:
. %
, , , /
. . ,
,
. %
, . . %
, .
.
%
, %
. %
n :
O(1): 1
. %
, %
.
.
283
O(n): n
.
;
.
O(n2): n
:
, . %
,
, %
. %
O(n2).
; ,
O(n log n), ,
O(n), , O(n2).
,
.
%
.
O(2n+6). n ,
.
%
.
%
,
.
. , %
, %
. , %
, %
. , %
, , .
, .
. %
1000 . 5 %
. , , 5 . %
, ,
1 ; 1 . .
284
11.
, ,
7 , 100 .
4,5 , .
%
, . %
, %
, % %
.
,
.
; %
, %
. ,
, %
. %
1000 , %
O(n) %
( ) O(log n).
, %
.
,
.
, : %
, .
%
. , %
: ,
.
%
.
:
.
, ,
.1 %
, .
285
%
.
,
, . , %
.
, %
,
.
, : , %
. %
, , %
, .
, , ,
, . %
,
10 10 .
, %
. %
%
. , %
.
. %
: %
, %
.
%
.
.
( C/C++
inline),
. %
, , %
.
, ? %
.
%
( ).
286
11.
, ,
. return 6+4;
return 10;.
, %
.
,
return 6+4;. %
.
.
.
, %
,
.
, .
%
. ,
; x/4 x>>2, %
.
%
, %
.
int first = (a * b) + 10;
int second = (a * b) / c;
(a * b) . .
int temp = a * b;
int first = temp + 10;
int second = temp / c;
; , %
. %
, , , %
. .
, , %
, . %
.
287
, %
, . %
. %
, .
, . , %
Java% C, %
Java Native Interface (JNI).
JIT% .
, ,
, %
JNI. , OO% %
. . OO%
, .
OO% C, , , %
, , C++; %
C++ %
, .
,
.
,
. ,
. ,
; , .
, .
, %
. , %
,
% , .
, .
, ,
.
. for (int n = 0; n < tree.apple
Count(); ++n), appleCount() 1000 %
, . %
:
int appleCount = tree.appleCount();
for (int n = 0; n < appleCount; ++n)
{
... ...
}
, ,
. %
, :
C# , %
288
11.
, JIT%
, .
(lookup tables)
, . ,
, .
.
(short#circuit evaluation).
,
, , .
if (condition_one && condition_two),
, condition_one %
, condition_two ( condition_one
condition_two).
%
, . %
. ,
, , .
, %
, .
%
:
, %
. %
, %
.1 , %
% .
%
.
. %
.
, ,
( ). , %
. %
, ,
,
, .
1
:
.
289
, ,
%
? #
%
, .
, . ,
, .
,
.
%
.
, ,
? ,
. :
, , %
, %
. , , %
, , %
, .
. ,
(
), %
, .1 %
, , %
. ;
C , .
,
, .
, ,
,
. , %
, , %
. , , %
, .
1
, , . %
, %
. ,
( ). ,
.
290
11.
, %
. , %
,
. : copy%
on%write ( ).
1990 %
. , %
,
,
. %
.
,
, %
.
.
copy%on%write (COW)
: %
() .
( %
)
.
,
. %
.
COW ;
. COW%
. ( %
, %
, COW %
.) %
, %
. ,
, . COW
.
%
, %
,
. %
, C++ %
, %
% .
291
, %
:
,
%
.
,
,
.
, %
, .
, %
. ,
.
, %
. %
, . %
.
,
.
, .
, . , %
, .
.
%
%
%
, %
%
%
,
, %
,
, %
,
%
, %
: %
%
%
,
292
11.
.
1.
, ,
.
4.
%
.
13.
%
.
19.
%
, , , %
.
. 633.
1. , . . %
, .
, %
.
2. , %
. 271. , %
, , .
293
3. :
(Performance)
(Efficiency)
(Optimized)
4. %
?
5. ? %
?
6. ?
7. ? ,
?
8. List . %
List ?
a.
b. append
c. insert
d. isEmpty true,
e. contains true,
f. get
1. ,
( )? %
?
2. :
a. ?
b. , ?
c. , , ?
d. %
?
e. , ?
f. , ? , %
?
3. , %
, ,
. %
,
.
4.
? ,
?
12
.
,
.
, %
%
.
, %
, %
. %
%
%
.
. %
% %
,
. %
,
, ,
.
296
12.
, ,
. , %
, .
: , .
;
. ,
(, %
) , %
. %
.1
? , . %
, %
, .
, %
. %
%
.
, %
. .
.
, %
.
,
, .
? ,
, . :
.
(, ).
.
, %
, .
1
, ,
. ,
.
297
.
, %
, . %
, , %
, %
, . , , %
.
, .
, &
? .
, ,
(%
, %
) .
; %
, . %
. ,
( ) .
:
, PDA, %
.
,
. ,
!
, , ,
.
%
(, exploit), %
(
. 303).
%
. GUI %
, ,
, ,
, .
(privilege escalation) , %
%
.
,
.
298
12.
, ,
.
(, ),
%
. #
(man#in#the#middle attack): %
, %
, .
.
, , %
, ,
.
. , %
, %
. %
, .
, %
, .
( ) %
. :
; %
,
.
, %
, .
, %
, . ,
,
. %
, %
.
, %
,
.
, , .
. %
. %
,
.
299
%
,
.
%
.
( ,
%
), ( %
) (, %
, , , .) %
%
. ,
.
()
. ,
; %
%
, .
,
, ( ,
), (%
, , % XML)
( , % ).
, ,
, .
, ,
. , &
!
, , % ,
. .
, . %
, .
, , ,
.
.
,
(cracker), script kiddie ( %
, ;
, %
), ,
300
12.
N
%
:
(flaw)
.
(. . 184).
.
(vulnerability)
, % %
.
(exploit)
( ), %
%
. %
( ).
, ,
.
(, ) .
, %
. ,
,
.
. %
,
, ; .
, %
.
.
, ,
. ,
.
,
.
( %
) (%
301
% % %
). (
, ,
) ( %
, , %
% ).
, , %
, , , .
, ; %
, %
. ,
: ! ,
; % .
. &&
, &
.
.
:
, %
.
,
, %
. 70% %
. %
. %
:
, %
, %
. %
, .
, %
%
. ,
.
.
302
12.
,
? %
, %
. , ,
. %
. %
%
,
( ), ,
.
(, , . .),
%
, . ;
, ,
.
. , ,
; %
.
; , , ,
. ,
; , %
. , %
;
.
,
, .
? , .
, , %
.
,
.
, ,
, . %
,
.
, %
.
303
,
: , %
%
, .
%
.
; %
, %
. , Java %
, JVM, .
: %
, %
.
, .
C
sscanf. %
C C%,
.1
:
void parse_user_input(const char *input)
{
/* input */
int my_number;
char my_string[100];
sscanf(input, "%d %s", &my_number, my_string);
... ...
}
?
100 %
my_string %
.
, %
. ,
.2 ,
%
. ,
1
C C%, %
C.
, .
,
, % .
304
12.
. , %
, .
,
.
, %
, . %
, %
.
, .
, %
. ,
, %
,
.
C% %
.
printf , :
void parse_user_input(const char *input)
{
printf(input);
}
, %
printf ( %s %x), %
printf.
( %n).
.
printf("%s", input) , input %
.
, %
. , %
SQL,
, .
%
# %
: , , %%
, % . %
, % , %
, .
305
JavaScript,
.
, %
, %
. %
%
.
. ,
,
, ,
.
.
C UNIX. %
, %
.
fd = open("filename");
/* A (. ) */
write(fd, some_data, data_size);
close(fd);
chmod("filename", 0777);
/* */
/* */
/* */
/* */
, %
. A
, %
.
.
%
. %
, %
. %
8% (uint8_t) %
C:
uint8_t a = 254 + 2;
0, 256, ; 8
, 255.
,
. ,
; C %
% :
306
12.
void parse_user_input(const char* input)
{
uint8_t length = strlen(input) + 11; /* uint8_t */
char *copy = malloc(length);
/* */
if (copy)
{
sprintf(copy, "Input is: %s", input);
/* */
}
}
, uint8_t ,
, %
. ,
.
( #
(integer underflow),
, %
.
,
.
,
(. %
? . 240 14).
, ,
, %
( , %
, . .). %
: ,
.
:
, , %
%
.
, %
,
,
, .
307
.
.
%
.
, ,
. %
, %
!
.
.
, . %
, ; %
. .
, ; .
. ,
%
. , %
, ,
.
, %
.
, , %
, , %
.
: ,
, . %
%
, .
%
, .
:
?
, , %
( ). %
, , ,
. ( %
, ,
.)
308
12.
, %
.
, &
. &
.
,
. , %
.
,
, , ,
.
,
.
,
%
, , , .
. %
, %
. ,
.
: %, %
, . %
, %
,
. , %
, %
.
. , %
, %
, . %
.
&
. .
,
, , . %
, %
, , %
. 99,9% %
,
309
, , %
, ,
.
, ,
. :
.
, %
() .
, %
.1
. %
, , %
. %
UNIX setuid %
, .
, . %
, %
.
, .
.
, , .
, GUI %
, , %
.
, ,
.
%
, . , .NET
, , , , %
.
( %
), %
, .
. , %
, . %
, .
, .
.
310
12.
, %
; ,
%
, .
, %
. .
(security through obscurity), %
. ,
, , ,
.
,
.
. %
, % .
. %
, %
%
, % .
.
, ,
.
, %
? , . , %
,
.
, , , , %
%
. %
, %
; %
. .
. #
. , %
, %
, .
,
( , , %
311
)
,
.
.
%
. %
; , %
(,
).
.
,
.
C system, .
.
. , %
; .
, %
.
chmod . 305 %
, fchmod chmod
: , %
, .
,
, (
).
: %
, %
.
.
, %
.
.
%
; ,
. . %
312
12.
%
,
. %
, .
%
%
,
,
%
%
,
, %
%
, %
( #
)
%
%
, , %
,
,
.
1.
.
8.
.
13.
%
.
14.
%
.
.
. 638.
313
1. ?
2. ?
?
3. %
?
4. ,
?
?
5. %
?
6. , ?
7. C C++ %
, ?
314
12.
8. C C++
?
9. , ?
1. , %
? ? %
? ?
2.
?
3.
?
4. ? %
?
5. , ,
? :
a.
b.
c.
d.
e.
f. ,
g.
III
,
. , ,
, , ,
.
, % %
, .
, %
, %
, : %
. , ,
, .
?
, .
.
;
%
.
, %
, %
.
316
III.
. :
13.
: %
.
14.
%
.
15. ?
%
%
.
. %
,
.
.
13
,
.
,
.
. %
%
. ,
, . ,
. %
,
%
API %
. , %
, %
.
. 13.1.
318
13.
. 13.1.
,
. 13.2.
. ,
. %
, %
.
. 13.2.
, ( , %
). . %
. , , %
.
. . . : . %
,
. ,
. . (Hoare 81)
%
. , %
,
.
, ,
. %
,
.
. , %
, #
.
,
.
%
319
. , %
. %
, %
, , , %
, (Page Jones 96).
. &
, .
%
, . , #
, , . (Beck 99)
;
. %
. :
,
. .
, ,
? ! ,
, . %
,
. , , %
. , #
.
, ; .
, .
?
, . %
.
%
, .
:
, %
. %
%
. %
, .
,
.
320
13.
/
, ,
, %
. %
, .
, , .
%
; , %
, Java,
C++/C# .
%
.
%
. , %
%
, .
.
.
. %
, %
, , .
, , ,
. : %
, . %
, ,
,
.1 ,
,
.
N ?
, ,
. %
,
. (
.)
?
1
;
.
321
,
% , %
.
. %
, . %
, %
, , .
, , , ,
.
.
, . %
, , %
, . %
,
. %
,
, .
, :
( , ,
)
( ,
)
(
)
(
)
%
. . .
.
, ? %
,
. %
. !
, ?
, ,
. ;
, .
, %
322
13.
. ,
.
, %
?
, . %
. , ?
,
, .
. %
:
, %
, ,
. %
.
. % ,
. %
, %
. , %
, .
. ,
. %
, ;
.
,
, , %
%
. ,
. ,
,
.
(. %
. 530).
, .
%
. .
, , ,
, . , %
323
. #
.
, %
.
.
.
, ,
. .
, . %
. : ,
, %
. , %
, . %
, , %
, .
. ,
,
.
, . ,
.
. .
%
. %
, , ,
, %
( ).
. ,
, .
, %
,
, ,
.
%
. , ,
. %
. ,
:
324
13.
,
, %
.
.
:
, %
, , %
,
, %
, .
%
.
%
%
. %
, ,
.
%
; %
.
, ,
, ,
( %
). , %
, %
. , .
, . %
.
. , %
, %
16 , .
, %
.
325
.
.
.
: %
.
.
, , %
. %
.
,
, , . %
, , . . %
, ,
.
.
(cohesion)
(coupling). , :
, %
%
. , .
. %
, %
, %
( , ,
utils; , , ).
:
. %
%
. , ,
!
%
. %
. %
, , %
% (,
).
, . %
.
326
13.
, %
. ; %
. %
; ,
%
: %
, (.
. 411). ,
,
.
, &
. &
.
, .
%
, . %
#
(API). ,
,
, .
, :
API .
, %
:
1. .
2. .
, %
. , %
,
.
, ,
, %
, . %
.
3. .
, , ?
, %
,
. , CORBA
327
%
.
4. .
#
,
?
.
(. 13.3),
:
, %
. %
.
#
.
.
.
. %
. 13.3. ,
328
13.
. :
, , . .
%
,
. %
, . OO%%
. %
%
, , ,
.
, :
, , , %
, , :
, , ,
. %
; , , ,
.1
. %
, : , % %
. , :
, ,
,
%
% . %
,
.
,
.
,
: , ( ) %
. ,
, , .
1
%
.
. 533.
329
%
%
. , , %
%
, . . %
. .
,
.
:
( %
, , )
(, )
%
.
, ,
. , %
,
. %
, , ;
, .
. %
, , %
.
: , %
, %
,
.
, ,
, .
330
13.
%
. %
, %
. , %
, , %
,
.
;
. . %
:
, %
, ,
.
, .
#
# .
, %
.
, , %
. , , %
. %
, %
.
, %
%
, .
. . .
; %
. %
, ,
, . %
.
:
,
. %
. %
, . %
331
,
% . ? %
, %
#ifdef NEW_PLATFORM. %
, .
, .
,
( %
). , %
.
(
).
%.
,
.
, ,
, (.
. 530), %
.
.
( %
), ,
. , C++ , Resource Acquisi#
tion Is Initialization (RAII, )
,
. . . .
, %
. %
. %
. .
, %
. .
, ,
API.
332
13.
,
: ,
, ,
.
? %
?
? %
; .
%
, . %
.
%
. ( , .)
, . %
( ). , %
, , %
.
%
. . %
. %
, #
. %
; ,
.
%
; %
, . , %
, , .
: ,
. , %
,
. . .
%
, . %
, ( ) .
%
. , %
. ,
333
; %
.
% %
.
%
:
, %
. %
; %
.
,
, %
.
(top#down) #
(bottom#up) .
, %
. , , %
, , %
.
, %
,
. %
,
.
, %
, %
.
, %
, , OO%%
, %
.
, %
.
OO% %
. %
, , %
, .
%
. %
.
334
13.
% %
,
, , %
, OO%%
. %
(patterns)
%.
. . Design Patterns: Elements of Reusable Ob%
ject%Oriented Software1 (Gamma et al. 94), %
(Gang of Four
GoF), %
%
(Alexander 99).
,
%
. %
, , #
, .
,
. %
, , #
. %
.
%
.
. %
.
%
, .
,
. , %
, , #
.
%
, . ,
.
.
1
. , . , . , . %%
. . .
. .: , 2006.
335
,
.
.
. 530.
, %
. %
, %
%
, ,
.
, %
.
.
%
.
,
%
. %
UML (Unified Modeling Language #
).
, %
.
,
;
, % %
.
, %
. :
.
.
.
,
. %
, .
, %
. , ,
%
.
336
13.
, %
,
. . 334
.
%
.
, , , %
. %
.
.
%
, %
.
% . %
, ,
.
, .
. %
.
,
.
PDL (Program Design Language )
; . %
, % % .
.
. %
API %
, : ,
, ,
, . %
, ,
.
,
. %
%
.
337
CASE
CASE% (omputer#aided software engineering #
) %
%
. (%
) .
;
(round#trip engineering round#trip#
ping). CASE% , %
%
.
CASE%, %
RAD (Rapid Application Development)
.
( ,
), %
.
&
: , , &
.
. %
, .
, , %
. ,
, , %
,
. .
.
. , %
, .
.
338
13.
,
%
%
%
,
%
%
, %
, %
, %
, %
%
, %
, %
%
, ;
.
8.
,
, .
14.
%
.
, .
339
19.
.
22.
.
23.
.
. 643.
1. %
?
2. %
, ?
3. ? %
, , . .?
4. ? %
?
5.
?
6. ,
?
7. %
, , %
?
8. ?
1. , %
. %
?
2.
? ? %
? ?
340
13.
3. , %
?
4. , ,
? ?
5. , ,
, , %
. ?
6. , #
?
14
#
.
. . %
. %
,
.
.
. %
%
. . %
100 . .
, %
, , %
.
%
, %
, %
:
342
14.
, %
.
, , %
. , .
, ,
. %
(
), %
, %
( %
)
, % %
.
.
! ,
, %
, , %
. %
.
%
. %
, , %
. ,
.
, .
, , %
, . .
, %
, .
, ,
. , %
.
%
, ,
, .
343
?
, , %
(. %
? . 240)? , %
.
.
, .
, %
. %
,
,
, , %
. , .
;
%
.
:
( ,
; ).
, .
, %
.
,
. ,
.
%
.
,
.
, %
, ,
.
&
.
.
344
14.
( , %
) . %
, ,
.
, , %
. ,
; %
. :
%
, %
.
, %
. %
.
%
, (
).
.
,
.
: , %
, . .
%
. .
.
.
%
, .
,
; ,
.
. ,
345
,
,
. %
, %
. ,
.
,
. , %
, %
. , %
, , .
,
,
, %
.
. %
.
, , %
. ,
, %
! %
, ,
, .
%.
. %
. %
; .
?
,
% , #
. %
, ,
, %
.
346
14.
?
, %
, . %
, %
.
.
#
. , , %
. ,
%
, . %
.
, . %
, %
, %
.
, %
,
. .
.
,
, : , &
, , , .
. %
. ,
%
, %
.
.
, , . %
, ,
.
, %
%
, . %
,
. .
347
?
. %
. :
%
, . %
, %
. ,
.
, %
. %
.
,
. , %
% ,
. , , %
.
. %
, , ,
, . , %
, %
, %
.
&
. , &
.
, %
. , %
,
(Brooks 95).
%
. , , %
, ,
CORBA.
%
, .
. , %
%
, , %
348
14.
. %
,
. %
% ,
,
( % %
). %
. , %
.
, %
,
. %
, %
, .
&
. , &
. .
.
.
,
. , %
, , .
%
. . %
, %
.
, %
, , %
. %
: , , , .
, %
.
%
.
. %
%
. ( %
) ( %
349
% %
). , %
.
( ). ,
. : %
, ,
.
, %
; %
. %
.
, ;
. %
, %
. %
, (
/%
?), (
, %
, ?) %
, .
.
, %
, , %
,
.
%
,
,
. %
%
, , .
. %
350
14.
%
%
, . %
.
%
. ,
. % %
, %
, %
, .
?
. ,
. ,
. ,
, .
.
, .
%
. ,
. ,
( ) %
.
.
,
. , %
. , , %
; %
, . %
.
,
. ,
%
.
(. . 325) %
.
351
&
. .
,
.
, . %
;
, %
.
; %
. , %
%
,
. ,
.
, ,
, . %
,
. , %
; , %
.
, ,
. .
. %
( . ).
.
,
,
.
, %
, %
70%
, %
, .
352
14.
,
. , %
, %
. %
:
,
%
.
,
.
&
.
, , &
.
%
.
, ,
%
, .
%
%
.
.
,
.
, %
. %
.
, , %
%
. %
%
.
;
.
,
.
353
. %
, , %
.
, . %
OSI (ISO 84).
,
. 14.1.
,
.
, %
CORBA.
, , , %
. , %
, %
, , %
.
%
%
, . : , %
C++ , %
C++. %
, , ()
. .
, %
. %
,
, . %
, ,
. 14.1.
354
14.
. %
, .
,
; , ,
, , .
, %
.
,
.
, . (
%
RS232.)
. %
:
%
,
,
,
. %
.
(
).
(, ).
, .
, .
;
.
%
, ; %
%
.
.
%
. %
. ,
, .
%
. %
(, stderr),
.
355
/
,
/ %
:
:
. %
#
,
,
.
.
,
,
, .
/ , %
%
. :
.
,
( , , %
).
. %
.
. %
. %
, , %
(, %
, %
% ).
%
, , %
. %,
GUI, .
/ #
.
.
.
,
(RPC), SQL
.
%
. ( #)
356
14.
, ,
, %
. , %
, ,
. , %
, %
.
%
. .
.
, ,
,
.
?
; .
( %
, ) , %
. :
API
(API) %
%
. , %
API,
.
( Java C# ).
,
.
, COM CORBA,
%
. %
IDL (Interface De#
finition Language). , %
. %
.
357
%
, ,
. %
, .
, , %
,
. %
. ,
.
,
() . %
%, %
( %
), . #
.
/ (peer#to#peer)
,
. %
, %
. / %
, ( %
): %
, . ,
/, %
, .
,
:
#
. % %
,
, %
.
% %. %
%
(IDL)
% , %
(, .NET) %
.
358
14.
, , %
, ,
. , %
, . %
( %
), , ,
. , %
,
.
%
, ,
, %
.
, %
.
CORBA, JavaBeans
COM; .
1, , .
%
IDL. %
. . %
, ,
.
. %
( %
% . .), %
, %
(, ). %
.
,
.
%
,
% . %
.
. ,
, . %
, .
359
,
:
%
()
. (fra%
.
mework)
.
(
),
%
. ,
.
; %
, .
. ,
.
: .
.
%
. ,
.
,
. %
, , %
. %
,
(Gamma et al. 94) %
(. . 334).
, : %
(firmitas), (utilitas) (venustas).
.
%
. , . %
.
. %
360
14.
,
%
%
%
%
, %
%
%
,
, %
,
%
, %
%
%
%
,
; %
, %
.
12.
%
.
13.
.
15. ?
,
, .
22.
%
.
. 646.
1. , #
.
361
2. ?
, %
?
3. ?
4. :
a.
b.
c.
d.
5. , %
?
6.
? , ? , ?
7. , %
? #
? %
?
1. ,
?
, ?
2. ,
? %
?
362
14.
3. %
(
) .
.
( )?
4. %
? ? %
? %
, %
?
5. . %
%
?
15
?
?
, , ;
, .
.
,
%
%
, !
: ,
.
% ,
,
.
, %
, .
%
,
. %
, %
, .
, .
.
364
15. ?
.
, : ,
.
,
,
(. ?
. 240). .
:
, %
.
, %
.
, , %
, . ,
, , %
.
#
. %
, %
. %
;
. ,
, :
; %
.
. ,
.
, . %
,
,
.
365
. ,
, %
.
, , %
.
, ,
. %
, %
. , %
, ?
, . %
, ,
, %
.
, . , .
. %
, ,
, . %
.
, %
. %
1 .
, %
. . . (B.W. Boehm), %
, , 40 80% %
(Boehm 76).
, %
. , %
, . %
. %
. , ,
.
, ,
.
366
15. ?
, ,
.
,
. %
, , :
,
.
API ,
.
, %
.
%
( ) :
, .
%
.
;
.
%
, , ,
,
.
. %
.
% . .
;
.
, %
, .
,
. 2000 .1
,
. .
,
. , %
1
2000 , %
76 1976. 00,
.
367
. ,
40% (Brooks 95). %
( 99 Bottles of
Beer on the Wall), , %
:
99 , 99 ,
, , 101 .
( BUGS == 0)
%
. %
,
. %
: ,
, .
. %
, .
, . &
, .
, ?
, ? , %
%
. .
.
, . %
, %
.
. %
: %
, %
. .
:
%
.
.
, .
: , .
: ,
.
368
15. ?
: %
,
%
, , , . (. %
. 325).
(,
std::string, char*, Unicode, UTF%8 ).
API ;
%
.
API .
API %
.
: ,
. . %
, .
.
,
.
, %
. , ,
.
;
.
.
,
%
%
. , ,
, %
. ,
%
, %
.
. &
.
? : % .
, %
: , , %
, . . ,
369
. %
, , ,
,
. %
.
?
: %
,
, , ,
. %
. %
. %
.
%
, :
,
. , ,
. .
, ,
.
, %
. %
.
. ,
%
. ,
, . %
.
%
. % %
.
. .
.
,
. %
, , , ,
.
, %
370
15. ?
, , , %
, ,
. ,
, , %
. . %
.
, .
,
.
%
, , . %
%
, .
.
, , %
. %
%
.
. %
, . %
. %
, .
.
: %
%
, .
: ,
(
).
?
, ,
. , %
, %
%
.
, .
371
. ,
.
, %
. , %
,
.
%
. , %
(Fowler 99).1
, ,
,
. %
, %
. ( ), %
, %
% ,
.
, .
%
,
. . %
, .
, ,
. (%
). ,
. . %
,
. . %
,
:
, .
%
, . %
%
, %
. , %
.
: . .
. : %, 2002.
372
15. ?
, %
; ,
. %
, %
. , .
, %
, %
. %
, .
, ,1 %
, , %
. .
, ,
; , %
. #
, , %
.
, #
, %
, .
( %
, %
). ,
, , .
, %
,
, .
, %
. %
, ,
.
.
,
. , %
%
. . %
, .
. %
,
1
2:11
373
. ,
, ,
.
%
. ,
, %
. , , .
, ,
, % , %
. .1
, %
(.
. 322 %
. 545). %
. , %
20 , , .
?
, ,
, , , ,
, .
, , %
, , .
, ?
.
, . %
%
, , . %
% .
. &
, , ,
.
, , . %
% , %
. . %
.
, , .
374
15. ?
, %
, , %
:
, %
. , %
, ; %
.
(.
. 325) %
. %
, .
%
, , , .
/ %
%
.
.
, .
.
, %
, %
API . %
%
.
KISS (Keep It Simple, Stupid !).
. , %
, ,
, . %
, , , ,
, .
. , .
,
.
. %
, , %
. %
, .
375
, %
:
.
, , %
. %
?
, . # ,
. ,
, %
. ,
. .
. #
, ; , . %
.
,
. %
,
. ,
, , %
. %
.
. , &
& .
%
, . %
, %
. %
;
.
, &
. &
.
, ?
:
, .
, :
.
(. .
).
376
15. ?
(%
, ).
.
. , %
, .
, %
; , %
. .
.
, %
. .
,
. 367.
, %
. %
.
, % .
, . %
( ), %
: %
. ,
. ,
. , %
,
, .
. , &
.
, %
. %
.
%
, , ,
. , %
, . %
, % ,
, %
.
, (. %
. 128).
377
, %
.
.
%
.
,
. .
, , %
. , .
, , , %
. .
, ,
. %
: ,
, %
.
, %
. .
%
. ,
. , %
; %
.
, %
. , %
.
, ,
, . ,
, .
, ( ) %
, .
.
.
. %
. , %
.
378
15. ?
, %
. . , %
.
.
17.
%
. , , %
.
18.
.
22.
:
.
, %
%
,
, ,
, %
%
,
, ,
%
, %
,
,
,
, , , %
, ,
. 652.
1. %
?
379
2. %
, , %
:
3.
,
?
4. ?
5. %
?
6. %
?
380
15. ?
1.
?
a. ,
?
b. , ? ?
2. ? :
a. ?
?
b. ?
?
3. , ?
?
4. ?
a. %
? ?
b. , %
? ?
5. ,
?
IV
?
. .
, .
.
.
,
. open source .
, , %
.
: ,
%. %
, ,
. ,
%
. %
.
.
16.
.
17.
.
382
IV. ?
18.
, %
: .
?
: %
. : , %
% . ( , C%%
) : (brace) .
16
1
. ,
.
.
: %
,
? :
1. . , %
.
Code Monkeys
.
, , , %
%
%
. %
. #
. .
384
16.
2. ,
.
3. . ,
, .1
? %
, . %
%,
. 2,
.
, %
. %
: %
, , %
.
, .
, ,
.
, #
(code monkeys).
,
, .
, ,
, %
. , %
,
%
. , , , .
, , %
. %
, %
. , %
, , %
.
, ? , %
. .
, .
, Perl.
385
,
. %
:
, :
? %
? %
, %
?
? %
? %
?
, 1, , %
,
. ; . %
, , %
, .
, . ,
, %
, .
%
, .
, ,
.
. %
.
. %
.
, %
. , ,
, .
1
, .
386
16.
%
.
, . ,
, . %
, ,
.
. %
, ,
, .
,
; .
, , %
, ,
. %
. %
: . . ,
, , %
!
, %
. ,
. %
.
,
.
;
! ,
, %
.
, %
. ,
(
).
(Code Monkey)
,
, . (
; # !)
, . %
, %
. ,
, (grunt pro#
grammers).
387
.
, .
,
, %
.
, , . %
, , ,
. .
,
. , %
,
.
, .
.
, #
. .
, .
, %
%
.
% ; .
,
%
? , ,
. %
.
.
,
.
,
.
. %
, %
(. . ).
388
16.
: %
. , %
.1 ,
.
, %
, , . . %
( )
.
. %
.
. %
, . ( %
.) ,
, .
;
.
. , %
,
. , %
.
, %
. , % %
, .
,
.
, %
, . ,
. .
, . %
. ,
,
. .
, . %
, .
389
. . %
, .
, , : %
,
. , , %
.
. %
. . (,
.)
, , %
.
, .
. %
,
. .
, .
.
,
, .
. ,
, . , %
,
.
, .
.
, .
, .
: , ,
.
, .
, , %
. ,
. ,
, .
390
16.
,
,
. . %
, ,
. , ,
, .
. %
%
, .
%
.
.
,
.
, , # (Briggs
80). : (E)
(I); (S) %
(N); (T) (F); %
(J) (P). %
; %
ISTJ.
, #
(Belbin 81). %
%
, %
,
. ,
. %
: , %
% .
%
; %
,
.
%
, . ,
.
391
, , ,
. ;
. ,
#, .
,
, %
, . .
.
, %
, . %
, ,
.
, , %
. . %
. . %
, ;
.
, , .
.
,
. , . %
.
. , %
.1
,
. , %
,
, .
%
. % , %
. , .
. . %
. 301.
392
16.
, . %
, ( ).
, . , %
, . %
, . %
%
.
,
. %
. %
.
; % %
, ! % %
, . . %
. ( ;
, , %
.)
, %
, % .
,
, %
, .
.
, .
;
, %
. ( %
, .)
# . . %
.
, %
.
. #
, %
393
. %
.
,
. , .
,
,
%
.
% , .
.
%
. ,
,
.
%
. #
. , ,
. %
, .
.
.
.
,
, ,
.
, %
, ,
. , %
( %
, %
). : C++ %
. , .
. , %
.
.
. , %
%
.
394
16.
.
, ,
.
. %
.
,
, %
. % ,
, ?
, , .
, ,
. %
. , ,
.
. , %
, , ,
.
, ,
,
. % %;
.
.
.
, %
. ,
,
,
.1
%
.
,
, .
1
. open source
.
395
, . %
,
, . %
.
,
. ,
. .
. %
.
. %
. : %
, . .
(
), %
.
%
. , .
,
, %
.
, %
. ; ,
.
.
, %
, , .
, .
. %
, , .
, .
,
, , %
, .
396
16.
,
.
,
% , %
.
. , , .
. ,
, %
. . %
!
, %
. .
, ,
;
.
, . ,
%
. , %
,
. %
. (, ,
.)
, %
, , . %
, %
.
. ,
.
, .
, ; %
.
, .
. , ,
.
, ; , %
.
397
,
.
.
; .
.
,
.
.
, .
, . %
.
; %
. , .
: , %
,
.
, .
,
. .
,
.
,
. , %
, ; %
, .
%
. : , %
.
. ,
.
%
.
, %
. ,
.
398
16.
, . %
, ,
. ,
, %
. , %
, . %
,
.
,
. .
, ,
. ; %
, ,
. .
, %
.
,
%
. ,
.
; %.
%
.
. , , %
, %
% .
,
. , ,
,
.
?
?
399
,
. %
, ,
.
:
%
, , %
, , . .
. %
, %
. %
.
.
, .
, .
, , .
?
.
, code mon%
keys, . ?
, , , %
, .
, .
. ,
? , %
. , . %
.
, . %
,
.
400
16.
1. ? %
, % .
% , .
2. ?
3. ,
.
? ?
, . ,
.
%
, ?
, %
, %
. %
, :
. , %
,
.
: %
. ,
. %
.
,
, , ,
, . %
: %
. , .
.
, % .
. .
, %
. , %
.
401
, %
. %
, . %
, !
, %
, .
,
, .
(
). : %
, %
,
( , %
).
. %
,
.
,
, .
, %
, %
,
, %
%
,
,
%
.
17.
.
402
16.
,
, .
. 657.
1. ,
?
2. , ( %
), , ?
a. ?
b. ( )?
: %
?
3.
. ?
a.
b.
c.
d.
4. ,
%
?
?
403
.
. .
, .
, ,
.
, .
, ,
.
.
, ,
.
.
,
?
,
. ?
. ,
.
?
,
? 7
?
1. , ,
.
!
2. , %
, %
.
404
16.
, % .
. %
. ,
.
(
!).
( ); %
.
, NASA, ,
, %
, %
. :
. . , %
,
. (, )
, . %
? %
? ? ? %
, , .
, %
.
17
% , %
, %
. , %
% , %
,
. %
, ?
, , %
%
,
.
,
% %
(% %
).
, , %
.
406
17.
, %
. %
, .
, % .
, , %
, , %
, . . , %
, %
. %
, ?
%
.
. %
.
, %
,
. % ,
. , %
, . . %
, .
.
,
. , %
.
, %
. %
( ), %
,
, open source, %
, %
.
, %
. %
IBM OS/360 Linux .
Ariane 5; %,
, % ,
%
.
Mozilla; Netscape %
407
, ,
. Mozilla
open source.
, %
. :
,
. %
; .
. , %
( , %
, ,
) .
, ,
; .
%
. . 17.1
. %
, %
, : %
. 17.1.
408
17.
%
. , ,
, %
.
.
: . %
. ,
, %
. %
,
, ,
.
, %
%
. %
, %
.
%
.
,
. %
; , %
.
.
, &
. , .
%
. ,
, ,
. , , %
, .
, %
, , %
/.
:
, %
409
.1 %
.
, %
(
), %
, . %
, .
%
:
, . %
, %
%
, , %
.
, %
. %
,
. , .
, %
. %
!
, %
(agile development). %
, :
.
: , #
. () , (%
) ,
, . %
. , %
, ,
.
. . (Code Monkey) . 386.
410
17.
,
, %
, . % %
%
.
,
.
The Economist :
%% ,
15% , %
, 15% .
%
, , %
. (Economist 01)
.
,
( , , %
), %
( %
, ; %
, ).
%
. : %
%
( , %
).
, . %
, %
,
.
, . %
,
.
%
, , %
. %
, .
, ,
, %
, %
411
. (%
, , . .) %
, .
,
: %
, ,
,
. (
) %
.
.
, %
. %
, ; %
.
, %
.
, %
. %
, . %
, , .
. .
:
, %
. %
. ,
%
. ,
.
, .
,
. , %
% . %
; %
,
.
, , %
.
, ,
.
412
17.
,
, .
, %
. %
.
,
, ,
%
.
. %
, , ,
, %
, %
%
.
, , %
.
, (. %
. 205),
:
. %
, ,
. , %
, .
,
. ,
, %
, .
. (%
, ) %
( %
).
413
%
, %
. %
,
. %
, %
, . %
.
, %
.
,
. %
, %
, . 22.
% %
, . %
,
. ,
.
,
.
. %
, 21.
,
,
.
%
. %
, %
,
, , %
.
.
:
( , )
,
414
17.
%
( )1
, .
,
%
%
. %
, %
% ,
, , ,
.
%
. %
, %
,
,
,
. %
,
%
, %
.
% ,
.2
, %
.
, %
. , ,
%
. , ,
; .
,
.
, %
. %
1
, ;
.
11:19.
415
, %
.
, %
, %
% , , %
. %
. %
.
, , : %
, .
, %
, . %
, ,
.
. !
.
,
, %
, %
.
, .
% , %
, %
. .
% ,
. % %
. %
. .
, %
. %
, . , %
, ,
(
, %
).
.
,
,
.
416
17.
, ,
.
( )
, .
%
, .
,
%
(. %
. 389). %
, : %
, .
,
. %
(Brooks 95).
%
, ,1 %
: , . %
%
( ). %
. %,
, ,
. %
, , ,
(, ).
. , %
, %
;
%
. %
, .
, . , %
.
,
1
% %
.
417
. %
, ,
:
,
, , .
,
,
. %
. (
, , %
), , %
.
, %
, .
, , , %
.
( %
) .
,
.
( )
,
. %
, .
, .
%
; .
, ,
. %
%
,
.
, ,
% . %
.
,
. %
, .
418
17.
, %
. , , open source.
: #
, . %
.
, ,
, %
(, ) %
. ,
.
, .
,
:
, . %
, .
,
.
, .
, .
, %
, %
.
, %
, .
: , %
, . %
, ,
. %
; % .
; ,
, %
. , % %
, .
%
, %
.
, . : , ;
, ; , ,1
1
5:37. ,
Oui, Nein!
419
, % ,
.
%
% .
: %
, %
( ).
,
.
, %
. %
, %
.
,
, .
, ,
!
, %
; %
. , ,
. %
.
,
.
, %
.
.
N
%, %
, %
%
.
, %
.
%
,
. #
, %
.
420
17.
, %
, ,
.
, .
.
,
%
. , , %
. % :
%
, . %
.
.
. %
( %
). %
.
%%
, %
. .
: . %
%,
, , ,
, (
).
.
: %
.
, , %
. ,
, .
, , %
. %
, %
, .
. %
. , %
, %
. ;
,
.
421
% %
. %
, %
.
%
. %
, .
.
;
.
, %
.
.
, %
. ,
: . %
, %
.
%. %
. %
!
, %
. . ,
. %
%%
, , %
.
, . %
, . %
.
%, : ,
, .
, ,
. %
; %
,
422
17.
. %
%
,
. %
, %
,
.
%
%
:
%
, %
,
. ,
.
, %
. %
, .
%
.
,
.
,
, . %
, ,
. .
, %
. %
( ?) %
. %
.
, . %
. %
; .
; %
, . :
, . %
:
, . ,
, , %
423
,
.
, %
.
,
. , %
.
.
. %
,
.
%
?
.
, ,
. %
. .
, %
.
, , %
. . %
; %
.
,
, %
, %
. %
,
, ,
.
%
%
. %
:
, %
.
:
(, , . 391).
, , .
424
17.
, , %
.
%
, .
, %
% , .
# , %
: ,
, %
. ,
% .
, %
. , , .
, %
, . %
, ,
, ,
. ,
.
. , %
N
. %
. . , %
( ).
( , , %
) %
,
,
() ( , %
). , %
. %
.
.
. . %
%
. , %
.
425
. %
, .
, . ,
,1 , %
( ).
, ,
. , ,
. %
% %
, . %
, .
.
: !2
, , %
. , %
. %
% .
, %
; .
,
, %
. .
%
. %
,
. %
,
%
, %
1
%
. .
. .
6:42
426
17.
, , %
, %
, , .
%
. , : %
; .
; :
, , .
. %
, %
, .
%
20% . .
, %
, , .
.
,
,
. , .
, . %
, , %
. , , %
? %
,
?
.
.
, %
, , .
,
, ,
, .
, . ,
.
, %
427
.
, %
.
.
,
,
. ,
, .
. %
, , %
,
,
.
.
.
, . %
.
: %
, , , %
, %
. ! %
, %
.
, ( %
) . %
. %
; ,
, .
, . %
.
, , :
,
.
, %
.
.
,
. %
428
17.
, ,
. :
( ).
.
&
. &
. .
, .
%
. , .
, %
% .
; , %
.
, %
.
. %
, .
, %
. , , .
: ,
. %
( )
.
.
. , %
, .
%
. ,
, .
, %
,
.
,
. %
429
.
, ,
( . . 437).
: , , % %
. , %
. , %
,
.
, .
,
, . %
, ,
.
, , %
.
, %
. %
,
.
.
: .
.
, %
. ,
.
.
.
.
,
. %
;
, . %
.
430
17.
(Instant messaging)
, %
, ,
, . %
.
%
, . %
%
(. 19).
, %
.
, %
.
, %
,
.
(
!), %
.
. 435.
. . %
%
, .
. %
, ,
, .
%
.
, , %
, , #
. %
.
, %
. . ,
.
, , %
.
431
, , %
, . %
%
. :
, %
,
%.
. %
: .
, , , %
% . .
%
,
. , % %
. , , .
,
.
. &
.
, %
, .
, , ,
? % %
.
,
.
. %
. ,
; , .
, . %
,
. %
, .
,
, , %
. %
432
17.
. , .
, ;
.
,
. %
. %
. %
.
, %
. , %
, %
.
,
. .
%
, .
, %
, %
.
( %
, ). %
,
,
.
, , %
.
, ,
, %
.
,
,
. ,
: %
.
, , %
. %
? , %
,1 , %
1
433
? %
, ,
.
%.
%
. %
. %
. :
?
, /%
, , %
, , . .?
, %
, .
, %
, ?
#
? ,
?
. , %
, ,
, , .
. %
. , %
. %
, %
.
, %
. .
. %
.
; %
,
.
. .
,
.
434
17.
,
, .
,
. %
.
; &
.
: , , %
. . %
, %
. %
%
; . ,
.
. %
. . . ! ,
.
. %
, %
( ).
. . %
, .
:
%
. %
? , ,
%
.
, .
,
.
, %
, , %
.
, %
, , %
435
. %
, .
, %
.
%
, %
. %
,
.
,
, ,
.
, %
. ;
.
:
. , .
1. . %
, . %
, %
.
2. ,
. ; %
( , ,
, ) (
, , %
).
3. .
, ,
, .
4. . %
. ,
.
, %
.
5. ,
. .
, , ,
.
436
17.
6. .
, %
: , , ( %
, ).
7. . ,
:
, , %
, %
. %
(, %
).
, %
(
, ).
,
.
, %
% .
. %
( ),
(
). , %
.
%
;
.
,
.
,
.
, , %
.
, , %
. , %
, %
. , %
.
437
, %
. ,
. %
: , , %
.
, .
.
.
,
.
.
(DeMarco 99)
, %
.
, , %
.
,
. , %
. %
,
.
.
, . , %
. %
. %
. %
.
.
( ) %
, %
, .
, %
%
.
438
17.
%
.
, , ,
. .
, !
, %
.
( , ,
, ).
, %
.
QA %
.
, %
, . .
, . , %
, .
, %
.
. %
% , %
, .
,
, %
. ,
.
, .
, %
.
439
,
. %
.
(,
). %
.
.
%
, %
: ,
.
%
.
.
. , %
, %
%
, .
, , %
. , %
. ,
. ,
.
%
.
. , %
,
.
%
(, %
) . %
, .
. %
; . %
, .
, .
,
.
.
440
17.
. &
, ,
.
, ?
:
%
.
% ( , %
).
, .
!
%
. %
, ,
. %
, , %
, %
. , ,
.
,
, %
.
,
1: %
,
.
, %
. ; %
. ,
.
1
. : %
, ,
, %
, .
441
,
. %
.1 , %
, ,
. %
, . %
?
,
. ,
. %
.
,
.
,
, , .
, , %
(.
. 423).
, . .
, . %
%
.
1
: ,
.
( , ).
,
. ,
, , .
%
. %
.
%
. .
,
. : %
.
442
17.
,
.
, ,
, .
,
.
% , %
, % ? :
. . %
. ,
, , .
.
. , ,
. , .
% , .
,
. ,
.
.
.
, %
. %
. %
.
, .
: , %
.
,
, %
; ,
443
, %
%
, %
.
16.
.
18.
, %
.
444
17.
22.
: %
.
,
, .
. 659.
1. ? %
?
2. .
?
3. %
(. ?
. 240). ?
4. %
?
5. ?
6. , %
?
1. ,
? ?
a. ?
b. ?
c. ?
, ,
?
, . %
, , .
2. ? , %
?
3. %%
?
445
*
(15)
(15)
(15)
(/)
.
+ ( ) 1( )
5 ( ).
(/)
(/)
. .
* 7 , ?
(. )
1 ( ), 3 ()
5 ( ).
(1 , 5 )
?
?
(o : 1 , 5 )
,
,
( ?)
( ?)
,
,
1 ( )
5 ( ).
?
?
?
18
, ,
.
,
. ,
.
,
.
,
, %
,
.
,
%
.
( ) %
, %
.
, , :
,
, %
. %
448
18.
, , %
, , .
. .
, ,
.
? %
, :
, %
( %
)
,
,
. , , !
, %
.
, :
,
, %
, .
, , .
.
.
10 %
,
.
%
,
. %
? %
, ?
449
%
. %
;1 . %
, , %
, . %
,
.
,
%
. , ,
.
:
.
,
. %
, %
.
,
(. ! . 409).
, %
, .
.
.
. ,
,
. , %
Save, , ,
. , % %
,
? : %
,
.
, %
, #
,
, %
. ,
1
12.
450
18.
; , %
.
. .
%
, .
( , check out)
. #
,
. %
, ,
, .
, (checked in)
, .
,
:
,
.
. ,
foo.c; ,
,
.1
.
, . %
. %
. , %
( %
). #
(, , ).
, , .
, %
, . %
, ; %
.
1
%
. %
.
451
%
.
%
.
%
%
,
. , ,
enum . %
.
: %
. %
, .
. %
. %
, %
.
( ). :
! %
:
, .
, .
, (
, , %
,
).
.
( ) %
. %
: , %
, . ,
3,
, .
452
18.
%
. %
, .
, , %
, . .
, . %
, , ,
. %
; %
, .
: %
. %
, .
? %
, %
, :
,
(, , .)
, %
.
, %
, %
(. . make), %
.
% ,
, .
?
:
. %
,
.
: , %
, . .
453
, .
,
,
, .
.
.
(),
.
,
, %
. %
.
:
%
, . %
.
, ,
. %
.
(, ) ,
: %
,
. %
,
, .
. %
, %
.
.
, %
. ,
. %
, %
. % %
.
. , &
, .
454
18.
, %
, : %
.
, :
.
, %
.
.
, , %
. ,
. ,
.
. %
, . %
. %
, . .
,
. , %
, , (
). . 18.1 , %
. ( 1) %
( ). 2
( %
) . %
. %
, 3 .
, ,
. , %
, ,
. , %
, . .
2.9 4. %
5. .
, %
. %
: ,
. %
,
. ,
455
2.1
3.1
2.2
3.2
2.9
2.10
3.3
5
. 18.1.
. %
, , %
,
.
, . %
. (
.) , %
, . %
456
18.
; %
%
.
SCCS
(Source Code Control System), Bell Labs 1972 .
RCS (Revision Control System). %
CVS (Concur#
rent Versions System), . CVS,
RCS,
. RCS %
( . 450),
CVS . CVS
Subversion, CVS.
%
, %
.
IDE. ,
, Subversion %
.
, %
, %
. .
,
:
,
,
%
, %
.
. %
%
(Bersoff et al. 80). %
(,
) .
457
%
%
,
,
.
:
%
, ( ,
%
. , %
. %
. %
, %
:
(source control)
, %
. , %
.
(version control)
(revision control)
(change control), %
, , %
. , %
.
%
. : %
, . . %
,
.
%
.
, SCMS (
), VCS ( ) RCS
( ).
458
18.
).
, %
.
%
. % #
? (. , , . 197.)
,
; %
, , , %
.
,
, , .
.
. %
, , %
, %
. , , , %%
.
,
. ; ,
, ,
( ) . : %
, ,
, .
, , , %
( ).
, .
: ?
, , %
.
.
.
, , .
%
. .
% ,
459
, ,
. ( . 31): #
, .
, %
. , %
, %,
,
.1
, :
( %
)
, ,
.
, . , %
%
.
.
: , %
. %
, %
. %
, .
, , %
.
, %
, . ,
, .
, , %
.
,
1
, .
,
. ( )
.
460
18.
. ,
.
, %
. ,
,
,
%
, . %
#
(open
source), , %
. %
:
,
(NDA). , %
% ,
. ,
, %
%
.
, ,
, %
, . ,
, %
.
%
, ,
,
. %
.
%
. %
,
% . ,
, : %
,
.
, %
, %
( ) , %
. , , ,
. .
. 124.
461
, : %
, %
%
% Java C#.
% .
, . %
, . %
.
. ( %
) ,
.
,
. %
, , %
, . %
, , ,
. ,
open source
.
. , %
, %
. %
, %
. :
%
? %
,
.
open source , %
, %
.
, .
462
18.
, %
? %
% ? open source %
, %
open source,
, .
,
%
. open source .
Open source ( ) , %
Open Source Initiative (OSI), , %
. %
open source.
:
, ,
.
Open source %
, Free Software Foundation.
FSF ( GNU) ]
%
, , , ,
, . . free
libre. OSI
,
GNU. GNU %
(GNU General Public License, GPL)
(GNU Lesser
General Public License, LGPL). %
, .
,
.
, , .
, %
,
463
. %
; , %
, . %
.
. %
,
. , %
, %
.
%
%
%
,
%
%
%
,
%
, %
, %
%
, %
%
, %
%
%
%
, %
.
7.
, .
10. ,
, , %
.
12.
.
. 665.
464
18.
1. ?
2. (%
)
?
3.
%
?
4. %
?
5. , %
, ?
1.
?
2. ?
?
?
3. ?
V
%
. ,
. . .
; , %
. ,
. , %
, .
.
%
, ,
%
. :
19.
.
, %
. , ,
,
.
20.
() , %
.
466
V.
21. ?
, %
. %
, ,
.
, %
, .
. %
,
.
19
,
.
, ,
. DVD%
. %
.
,
. .
, %
, %
. %
% ,
%
.1
, %
,
1
,
; %
.
468
19.
, .
, . %
, , , %
. %
,
, ,
, ,
,
.
.
, %
. () %
. .
.
%
.
( % ) , %
.1 %
,
. ,
, , %
, , %
.
, , %
.
: , ,
, . ,
.
, .
. %
, %
. , %
,
.
, : %
, %
.
469
, ?
, ?
.
23:12
, %
. (
) %
.
%
. , %
( ,
, , ), %
, %
, . .
%
.
. ,
, . %
,
,
.
&
, .
. , %
. %
, . ( %
, %
, !)
.
, ,
,
.
&
. ,
.
470
19.
:
,
. %
,
: ,
.
,
%
, %
. %
.
. ,
, , %
,
. , %
.
,
, %
.
, , .
%
%
. , API %
,
.
; ,
. , %
, %
.
,
.
,
. %
. 19.1. , %
, %
; %
%.
471
. 19.1.
, (
.
. 539). , %
, ,
.
, %
.
,
, 10 %
.
, .
. %
,
. #
#
.
%
, %
. %
. %
. .
472
19.
; %
, %
( ).
,
, , %
. %
( , ) ,
. %
, %
.
%
, . :
1.3.5. #
, #
sans#serif 13 .
%
.
:
, . %
: BMP #
JPEG GIF.
, %
,
. : #
, ,
, .
, ,
. %
: HTTP RS232
.
,
, .
:
, #
.
.
. , , %
473
: %
, .
.
. %
, , .
, %
, ,
.
.
(
). %
,
#,
. %
.
;
, ,
.
, %
, . %
, %
. ,
, , %
, %
,
. %
, , ,
: . %
. ,
.
,
. %
,
. %
:
( ) %
, .
%
, .
#
, ,
.
474
19.
,
.
,
. ,
.
,
, &
.
:
. , %
,
, (
). %
.
, ,
, %
. %
. %
:
.
%
. %
API %
, . , %
, %
, .
%
.
.
. %
, .
: %
NASA ;
, %
. %
( ,
, %
).
475
%
, . , %
, , %
,
.
,
, .
%
. , :
. ( %
/ ?)
. ( %
? , ?)
. ( ?)
( ).
(,
.)
%
. ;
.
, :
, ,
. %
.
. %
14.
:
. %
. %
, ,
, , %
, .
, , %
, . :
, ,
.
476
19.
%
, .
%
, %
. %
.
%
. , %
, (, , ,
). ,
%
( , . . %
!)
%
. %
;
.
,
, . %
, %
.
( )
. ,
.
API,
. ,
. ,
%
.
.
,
; %
, .
.
, , , %
! %
, , .
,
%
. !
477
, ,
. ,
. #
(.
. 103) %
,
. %
.
&
. &
, .
, %
. %
. %
, ,
,
.
%
. , %
, %
. , %
, , %
, .
,
.
: , %
. %
.
8, %
.
, %
,
.
%
, , %
.
, %
. %
, . %
%
, !
478
19.
: ,
. .
? , :
, %
,
. %
: , %
, %
.
(.
. 547)
,
. %
, , %
, %
. %
. , #
, .
, %
, .
%
, %
(user story),
. :
.
,
,
. %
, %
.
?
. %
%
:
, . %
%
479
. , %
: , %
.
,
. , , ,
. ,
.
. %
, %
.
, (
) , , %
, .
%
(, %
).
/ %
.
.
, .
, %
, ( %
) , ,
. %
.
, %
, . , %
, .
% : %
, .
, . %
, ,
.
, %
. ,
. ,
, , %
%
.
. %
, ;
480
19.
, %
( ) %
.
%
,
. %
, . %
, %
, , .
%
:
. %
. %
, .
, .
(, %
), .
.
, . %
(. .
,
PDF),
.
,
.
:
, , %
, , , %
(, , %
NDA, ).
, , %
.
, %
. ( :
%,
, RAM.)
.
,
.
481
(
)
. %
, %
, ;
. %
%
.
(
, , . .), ,
.
, .
, , , , &
.
, ,
.
, ,
, . %
! :
1. .
. ,
.
2. . , . %
, .
3. . , %
.
4. (, , %
) , %
.
5. , %
, ,
. , %
.
. %
2 ,
. ,
; .
482
19.
, %
. %
:
, %
.
.
, , %
. ,
.
, ,
. %
, !
, % ,
. %
, .
. %
; %
. ; ,
.
, , ,
.
,
. %
;
, , .
:
%
. , .
,
%
, . %
,
(). %
.
;
.
. %
,
.
, .
.
483
.
,
.
.
.
.
, %
: Stolen
painting found by tree, Kids make nutritious snacks, Red tape
holds up new bridge Hospitals are sued by 7 foot doctors.
,
;
. ,
,
. %
. , %
.
, %
. . %
RFC 2119. %
(
):
Must ()
must ( shall, is required to) , %
%
.
Must not ( )
must not ( shall not) %
.
Should ()
should ( recommended, )
, %
,
.
484
19.
Should not ( )
should not ( not recommended, %
) , %
,
% .
May ()
may ( optional) ,
.
,
, %
.
, %
can. Can
; %
(must), #
(may).
?
, .
, , , .
7:15
,
. , ,
,
. %
%
. ( ,
, , %
.)
%
. ? ,
. ,
:
, .
.
.
, , %
( ?).
485
. %
, , , %
.
, .
;
, . ,
: , %
, .
, %
. , , #
. , .
,
,
. , : %
, . %
? %
. , ,
. %
.
. . .
.
, .
%
,
? .
.
, %
: , %
. %
, ,
, . , %
, ,
; %
.
%
; ,
. , %
, .
,
, :
. %
,
,
.
486
19.
.
, , , &
.
,
. , %
. ( %
, , )
.
,
.
, %
, %
. ,
,
. %
.
%
%
,
%
%
%
, %
, %
,
, ,
, %
%
.
4.
, %
.
, %
.
487
18.
, , .
20.
,
,
.
22.
.
. 671.
1. ?
2. ?
3. , / %
?
4. ? ,
( )?
5. ?
6. %
? % ?
488
19.
7. , %
?
1. , ?
2. . :
a. ?
b. ?
c. ?
d. ?
e. % ?
? ? %
, ?
?
3. ? ,
?
20
?
?
?
:
,
; .
?
. ,
, , %
%
.
, , ,
.
,
,
(, %
). %
, , %
, .
,
490
20.
.
.
( ,
) open source %
, %
, . . %
.
, .
: %
.
, % , %
, , .
, %
. ,
, %
.
, . 431.
, ? , %
,
?
, %
. ,
, .
,
( !).
, ;
, .
, .
:
( %
).
( ).
(
, , %
).
( ,
, ).
:
, %
. , , ; %
.
491
%
. , %
. %
. , , %
, , %
.
,
.
, %
. %
; %
.
%
, ,
.
%
. %
,
. %
.
. ,
, %
.
%
,
(. . 439).
&
, , &
.
?
, , .
%
, . %
%,
%
( )
492
20.
(Humphrey 98). ,
.1
, , , ,
.
,
. %
,
, .
, ,
#
, (Weinberg 71). %
% (: , ,
) (: , ,
), .
, %
. %
,
, . %
.
, 1 3
5 8 . %
2 4 ,
6 12 (Humphrey 97).
,
. , , ,
;
, .
%,
, %
. ,
! ,
.
, .
. ,
, , %
. ,
? .
1
,
.
493
,
. ,
, , %
, . %
:
( . 409), %
.
, ,
. %
%
,
.
Open source
%
, %
. .
, %
. %
.
, %
.
, %
(.
! . 203).
,
, . %
, .
,
, . %
,
. !
%%
. ,
%
%
, .
494
20.
%
. :
.
, ,
, %
.
, , %
.
, .
, , %
( !).
. , %
, %
(, . .)
. &
, .
.
, ,
, ,
.
.
.
. .
#
( , %
). ( %
) (%
, , ,
, ).
.
?
. %
. ( ,
% ).
495
, . %
, .
, %
.
?
, . , 5 %
. ,
, .
,
. %
, .
.
;
. :
, , , ,
, , %
,
( ).
,
. , %
% .
, %
, ,
API.
.
QA %
(. . 187), QA %
.
,
(. . 435). %
. , %
. ,
, .
,
.
496
20.
, , %
, .
(. . 504),
. , ,
.
,
. (%
.)1 ,
. , , %
%
.
:
, .
( ,
).
(, %
, . .).
, %
.
.
:
, %
.
( !) %
. %
, ,
.
.
, . %
,
. ( %
?)
. %
,
.
1
,
.
497
, %
, . , , %
( . 501).
%
. %
( ), , %
.
.
, (%
).
, ,
.
, %
.
:
Okay
, .
,
. %
.
.
,
.
,
.
, , %
. %
, ( , )
.
, .
%
. , ,
, %
.
, %
, %
.
498
20.
,
.
:
.
.
.
%
: %%
( 1)
, .
%
,
. , %
:
%
. ;
, %
, .
, . ,
, (, %
) %
. %
. %
(, ) %
.
(
), %
.
, ,
.
6:31
; %
. , %
.
1
open source, ,
,
, .
499
, , %
. .
.
,
. , %
.
,
. .
. %
,
. ,
. : %
%
, .
, %
1971 The Psychology of Computer Programming
( ): %
, %
. (Weinberg 71) , %
, % ,
. ,
, %
%.
,
. %
, . ,
. ,
, %
.
, % .
%
. , %
. . %
. ,
. : , .
: %
, .
,
.
, .
500
20.
, %
.
, %
. ,
. (
, .)
:
,
%
Defect Free Process
( ) (Fagan 76). %
%
, .
, .
%
.
, .
(shadow developer), %
. %
. %
%
.
.
, %
.
(
). ,
. %
. %
% . ,
% .
, ,
.
&
. ,
, .
501
, ,
, .
1 13:10
, %
, .
, , %
15 .
,
. :
.
,
.
, %
, (.
. 216).
%
. (,
). %
. %
( %
).
.
%
. , %
, !
(, ),
%
; %
, .
%
.
. .
, , %
, . , %
, #
.
502
20.
%
. , %
%
.
. %
( , . .).
( ,
). %
. .
.
%
. , %
%
. , /%
.
. %
. %
. %
.
.
, , &
.
, %
. %
, . .
, .
%
, .
%
503
, %
.
, ,
, .
. , %
;
. . %
,
.
%
,
%
%
%
: %
%
%
; %
.
1 15
%
.
9.
, .
504
20.
19.
. %
.
() ,
. , %
, . ,
.
.
. %
, ,
;
, .
. 675.
1. ? %
?
2. ?
3. ?
4. %
?
5. ?
6. ,
, , %
?
7. ?
8. ?
1. ? #
?
2. , ,
?
3. % ?
505
:
:
:
:
:
:
:
( . .)
( )
API
(/++)
assert
,
,
0 ( ) 5 ( )
():
:
21
?
?
?
.
.
( )
? %
?
,
.
#
%
%
. %
, ,
, %
. , %
,
.
%
. ,
508
21. ?
%
. %
%
. , , %
,
.
, .
, .
: %
, ?
;
. : %
. , , .
%
. , , .
,
,
, .
, %
, .
(. . 536) %
, %
.
, %
.
, .
, , %
. ,
, ! %
, , %
.
! %
.
, %
. %
, , ,
: ,
, , %
.1
1
, .
509
, , %
, . , %
,
% . ,
; ,
. %
, %
.
, %
.
, %
.
%
, %
. ,
. ?
. .
.
.
, .
, %
. .1
. #
. %
. , ,
.
?
, ;
. , %
, . %
.
, , ,
, ,
. % , %
. , %
;
1
14:28!
510
21. ?
( ). %
%
. %
, . %
: , , %
( ).
.
,
.
. ,
, , , .
,
. , %
:
. %
, %
, .
.
%
, . %%
%
. %
( %
, . . 471).
, %
. , %
, ,
,
. , %
.
.
,
. ,
, , .
%
.
,
, .
.
511
,
. .
, %
. %
, , ,
. %
, %
, .
%
.
. .
, %
. %
, (% ) %
.
. . &
.
.
. .
.
, , %
.
, % %
, , %
?
, %
,
.
. %
, , .
. %
%
, . ,
? %
, .
:
, , %
, %
, . %
!
512
21. ?
, ,
. ,
. , ,
, %
, . .
;
, .
. %
. ; %
, , , %
. : , %
!. %
, .
, %
.
( ) . &
, .
, , &
.
, , %
. .
, %
. ,
, ! %
, ,
.
, , %
. . %
( ),
, . %
, : %
, ,
,
. %
%
!
, ?
513
. %
. %
, %
: . %
.
( ), %
,
. . %
,
.
%
, : . %
%
. %
.
,
, %
.
,
.
, , %
, . %
.
%
? , %
, . ,
,
,
. .
%
. % %
!
,
. ,
:
1. , %
.
514
21. ?
2. %
, #
#.
3. ,
: .
, %
, %
. %
, %: ,
. %
,
, .
, &
. & &
&.
, %
; , %%
, .
.
. %
; ,
. ,
,
.
, %
. ,
:
,
,
.
;
.
515
.
, , %
, , .
( %
, , , %
).
.
,
. %
(. . 517).
? %
? :
. %
, 1000 , %
,
.
, .
.
; %
%
.
, %
:
, %
. ?
, %
. %
%
, , %
. .
, ,
, , , . %
, %
.1 , %
, .
, . %
.
.
. %
. , %
.
1
, , !
516
21. ?
, %
. , %
.
, %
. ,
, .
, .
, %
?
. %
( ,
). , ,
.
.
; , , %
(, %
).
, .
.
, : ( , &
) (, &
).
.
.
, .
, .
%
. , , , %
. (James
Surowiecki) The Wisdom of Crowds1 ,
. %
, %
.
!
. ,
.
. . . , 2007.
517
%
. , : ,
. %
%
. %
(%
, ,
, ).
, ,
, . 21.1 (%
).
A
D
. 21.1.
%
. .
:
, .
:
,
%
. %
%
.
.
! %
, ( %
) .
,
,
. . %
:
518
21. ?
, , %
.
%. (Brooks 95)
,
. %
,
, , %
. , %
:
%
.
, .
, (
% ).
, . %
.
%
(. %
. 545),
, %
. ; %
. %
, .
, %
, .
.
%
.
:
, %
, . %
.
.
, %
(, , . .). ,
80%.
, , %
. ,
519
, ,
, .
. , %
, %
, .
.
, , %
.
,
.
,
, .
:
?
!
, %
,
. %
, %
.
%
.
.
,
(,
).
, %
,
. .
,
.
, %
.
. %
. %
.
%
, ; %
.
. %
520
21. ?
.
, %
.
( %
, ),
. , .
; %
. %
,
, .
.
,
. .
; . %
. %
, ,
, .
%
. PERT (Program Evaluation and
Review Technique #
) , 1950%
.
. %
: ,
. ,
%
. %
, %
. %
.
(COCOMO Constructive Cost
Model) 1981 , %
. %
COCOMO II, %
. (Boehm 81) #
(Projects in Controlled Environments, PRINCE)
, %
; ,
!1
1
521
. PRINCE %
, ,
.
PRINCE2.
!
, ?
. . . .
.
,
, . %
% . %
. %
%
, ? %
, .1
%
%
:
, ,
%
. , %
. %
, ; ,
. %
, .
. ,
.
. %
, ,
%. %
,
. .
, .
, %
100%
(DeMarco 99). %
, , %
! ,
, !
522
21. ?
, , %
, .
, ,
. ,
, , , . .
. %
,
.
, %
! %
IT .
. %
. !
: .
. % , %
. .
.
, ,
,
. %
, .
, %
, .
. %
,
, .
.
, , , %
.
, . %
.
. &
.
, , . %
. %
. . ,
,
.
,
523
, ,
.
. %
, % %
.
.
!
.
. ,
. %
.
.
, %
. %
.
,
.
, . %
.
. %
, .
, %
.
,
; .
, ,
( ). %
, ,
, . %
,
. (DeMarco 99)
,
. %
. %
%
, .
. %
, , .
524
21. ?
%
.
. %
.
,
. %
, .
, %
%
%
%
%
, %
%
,
%
,
, %
,
, %
,
.
13.
.
19.
,
, #
.
22.
,
.
525
. 678.
1. %
?
2. , %
, %
?
3. ?
4. ?
?
1. , ,
?
a. : %
?
b. : ?
2. ?
?
VI
, .
,
. %
,
. ,
? , %
.
22.
:
. %
. , %
( %
).
23.
: %
, , . .
%
. , , %
.
24. ?
, %
. .
22
, ;
.
:
1 (, %
)
12
1
1
1
1
%
. , %
, %
. . %
. %
530
22.
. , ,
.
, , . %
. %
. %
; %
, . %
.
,
, , , %
, . .
: (%
) ( ).
, , ( % %
) , %
. %
, %
.
; , ,
, .
ZX spectrum ,
PDA, ,
%. %
, , ,
200 . %
( ).
, %
, .
,
.
, %
, .
,
. %
, %
; ,
.
%
. ,
531
.
: .
, . ,
.
( ),
%
. ( %
, %
.)
. (
, , %
.)
. %
, , %
.
.
%
,
. %
.
: , %
, ,
, ;
, %
, , %
. %
, %
, , . . %
Go To Statement Considered Harmful ( Go To ).
(Dijkstra 68)
, %
. %
, (,
_), (,
__, __, __, _,
__, _).
, ,
. %
, .
532
22.
:
%
. ( : %
, %
.)
:
goto ( %
) %
( SESE).
. %
, goto.
C, Pascal,
BASIC , Fortran COBOL. %
,
; %
, .1
N
%: ,
, %
, , %
. (Booch 94) %
,
; %
, .
(
, %
). ,
, , %
. () ( % )
( ).
. %%
, . %
.
% %
:
1
, ,
,
.
533
%
, %
. ,
get_next_item
, %
? , (
), .
(
) .
%
,
API: . %
API,
.
,
?
,
, .
,
. , %
, . %
(, ,
). ,
, %
, . %
.
%
( % %
), , . %
%
,
.
: .
%
. %
: ,
,
, .
534
22.
, %
, . , %
, :
( %
, ,
), ( %
, +, !=, <
&; %
) C++ (
).
, %
%, .
%
.
%
Simula 1970 ,
C++ Java. % %
Smalltalk. %%
, %;
%.
, #,
, .
, . %
, %
. , , . %
.1
% %
, ,
. . %
%
, .
Lisp ( ), Scheme,
Ml Haskell.
(, Java %
, JVM).
,
,
.
535
, %
, () . %
( %
) , %
. %
, , .
%
.
#
( %
).
Prolog.
:
. %
, .
, :
: %
, %
. , ,
. , ,
; , %
, % %
. , .
: %
, %
. , %
, .1 , %
.
, %
.2 , %
, %
, . (
, : %
. 545.)
, ,
( ). %
( )
. . %
.
536
22.
. %
, %
, .
,
.
.
, %
, .
,
.
, , %
. %
% . %
. , .
,
%
, .
:
/
.
, %
. %
ISO 9000,
,
.
, %
%
.
,
. 547.
, %
,
%
.
, . %
,
( ,
. .).
537
.
%
. %
%
.
%
.
. %
, %
, . %
, %
.
, %
. %
. %
%
%
,
.
.
.
, , %
, %
.
, %
.
Ad Hoc
, %. %
. %
, , ,
, % . ,
, . 22.1?
, , %
, ,
. ,
, .
, ?
538
22.
,
,
?
7 7
?
7
?
77
QA
?
!
?
,
?
,
?
QA?
7
?
,
,
7
QA?
( 7
)
. 22.1.
539
%
.1 %
, ] , ,
. , %
, %
.
.
, .
. %
, %
% . %
. , %
% .
%
. ( %
). %
. , ,
, .
%
1970 (Royce 70). %
.
:
. , %
. %
, %
.
. 22.2.2
, . %
, #
( ) %
.
1
, , %
, %
, %
.
open source .
.
, . %
,
, %
; .
540
22.
. %
, %
.
%
. , , %
, . %
% %
, .
: ?
? ?
%
.
%
, %
, %
.
.
.
, .
, %
.
,
. %
, .
, . , %
, ;
. %
(. %
. 374). %
,
, %
.
541
. 22.2.
% : , %
% . %
, , %
.
, , %
,
.
, . ,
, %
.
, ,
.
.
, ,
, %
. %
; .
%
.
SSADM PRINCE
SSADM ,
,
Structured Systems Analysis and Design Methodology
. %
,
.
,
, %
, %
. SSADM (
),
542
22.
, %
:
%
PRINCE (Projects In a Controlled Environment) %
PRINCE2 1989 1996
SSADM. SSADM, %
%. %
( ), %
,
.
VN
%
.
(
), ,
V, . 22.3.
,
: , . %
.1
,
.
V% .
( )
. 22.3. V#
1
, , %
,
!
543
( ) .
, :
%
. .
,
.
, .
V% .
. %
.
V% ,
%
.
,
, %
.
%
, %
, , %
. %
%
. ,
.
, .
%
( ,
).
. , %
,
. , %
.
%
. ,
. %
. ,
. %
, . %
. ;
544
22.
.
; .
. %
: 1
.
, ,
. %
, .
. %
, , , ,
.
%
.
,
.
, ,
.
%
, %
%
.
,
GUI %
, Java. %
, . %
,
. %
GUI , %
. ,
.
, :
, GUI, %
, ,
. %
, %
.
, (RAD)
GUI.
545
.
.
, %
. ,
, !
.
. %
() %
,
. %%
%
( ). %
.
.
, .
%
. %
, %
. %
, %
.
; , .
,
. : %
. %
,
. ,
%
. ,
:
, .
, 1988 (Boehm
88), .1
, %
.
546
22.
, . 22.4.
%
.
,
. %
360 , %
.
%
: . %
: , ,
, ,
. , : %
80
( ) 20 .
:
.
, %
, .
.
)
,
(
/
. 22.4.
547
%
, .
, , ,
%
; , %
.1
,
, .
,
, Crystal Clear Scrum. %
, %
() .
:
. %
, , , %
, .
, %
.
.
%
, (
, ).
, %
,
.
, %
. %
. %
%
.
%
, %
1
. ,
,
.
548
22.
. ( )
, %
.
#
,
. %
,
.
. %
, 10 %
, %
. %
, . %
.
,
, . %
%
, .
%
, , ,
,
( ).
,
, ;
.
.
(Rapid Application Development,
RAD) %
, %
. %
]
.
, ; %
.
Rational (RUP)1 %
IBM, Objectory Process
(Ivar Jacobson, 1987). ,
% , UML%%
1
, UML 2 ,
2% . . . : %, 2007.
, !
549
, 1 ( %
() %
). , %
. %
, .
, !
, %
. ,
? % %
, %
.
? ?
. %
, . 540.
%
. %
%
. ,
, %
.
%
. ?
? ,
.
. 20
, %%
C,
% Java.
, &
.
.
: %
. %
,
, .
, %
.
,
.
1
UML. , 3% . . . : %
, 2004.
550
22.
,
% . , %
.
: % ,
(
; . . 517).
, ,
. ,
. .
, , . %
.
%
,
. %
, %
.
, ,
.
.
.
.
; , %
, ,
. , . ,
,
, . %
, , , , %
, , .
, .
, %
. ; %
, ,
, .
, ? %
, %
%
, , .
. %
%
551
;
, . %
, ,
,
.
, %
. , %
; ,
. %
( ,
, %
open source). %
. %
%
.
, %
; %
, %
. . , %
.
. &
.
.
: ,
. , %
.
. ,
, %
, .
.
,
,
%
. ,
, .
%
,
%
%
%
552
22.
%
; %
,
%
,
,
%
#
.
8.
. %
.
17.
.
19.
.
. 681.
553
1.
?
2. ?
3. ?
4.
, . 536.
5.
,
?
6. , , %
?
1. %
?
a.
?
b. ? %
, ?
c. % ?
d. ?
, %
,
% ?
2. ?
?
3. , %
, ?
23
, ,
.
%
. %
. , %
. , ,
, 40 .
. %
,
.
. .
.
#
, ? %
,
%
. %
, %
(
556
23.
). ,
% %
, .
, , ,
, .
. ,
.
(. . %
), . %
,
. ,
; %
.
. %
, %
.
&
. &
.
.
, ,
,
,
.
. .
, . %
,
.
, .
, ,
.1 %, %
.
%
, %
. %
1
, . , %
, . , , %
, , , !
557
. %
%
Windows Mac OS.
Linux, , %
( , %
).
, , %
(.
. 563) %
.
.
. %
C C++. Visual Basic Delphi, Java
.NET, MFC Qt. %
,
.
%
.
%
,
. %
,
, . %
,
, ,
. ,
.
,
. , %
,
.
,
, (
) (
). %
,
.
, %
, .
;
(.
. 566).
558
23.
:
(shrink%wrap) (custom applications).
. %
,
. : ,
, . %
, ,
. %
,
.
. %%
, .
.
. ,
.
, %
,
, .
! % ( %
): .
: % %
.
. %
, %
.
. . %
. . %.
,
. %
.
,
, % %
. .
, ,
; ,
(, , %
% ).
559
.
,
.
,
, .
( )
%
, %, . . %
, %
, .
, , %
( , x86 Windows PC).
,
. %
(IDE)
, , , %
, %
. %
,
.
: C/C++ BASIC Java,
.
, %
.
, .
,
.
( ), %
. .
560
23.
%
, .
%
. %
, , .
3D% ,
. %
, %
,
,
,
,
. ,
,
.
,
, .
( )
, , 3D%, %
, ().
, ,
(PDA ), .
(
) %
, .
, %
, .
; %
, , , %
. , %
.
%
.
561
, , ,
, , %
. %
,
. %
. %
; %
, ,
.
%
.
, ,
, %
. ,
, %, %.
.
, %
. %
( %
), , %
, , %
, .
.
.
. %
, %
: , , ,
. . , %
, , %
, . ,
, . .
: %
, , %
, , ,
, ,
. . %
, %
. .
562
23.
USB .
, USB
USB#, .
,
. ,
API,
.
.
( )
, , %
, .
%
,
. %
%
, .
%
%
,
, . %
C, %
( %
C++ ).
,
.
, %
;
, . %
,
.
( ) %
, ,
.
563
, . %
%
; API, %
.
, %
, ,
, , %
.
( , , %
, . .),
, %
, , %
, %
. %
,
.
%
, . %
, %
, .
%
. ,
.
: %
, %
, . %
, : %
.
:
: /
. ROM
( ), RAM (,
). %
. %
( ) , %
.
: %
%
564
23.
? %
; ,
.
%
. , %
(, ) %
. %
, , %
, .
%
. %
; .
.
, .
,
.
( )
, %
/, .
%
.
, %
. %
, %
. (
.) %%
, %
. (, C% %
.)
.
C, ,
. C++
, ADA.
565
%
, ,
%
. %
(, %
), %
, %
,
.
,
.1
1
%
. %
%
, %
. , %
.
, , ;
. %
, . %
, , %,
, . .
%
. %
. .
. %
,
: , ABS, %
( ), %
, . . ( %
/ ) , %
% . , .
, %
! %
. , ,
.
,
,
.
566
23.
%
,
.
.
%
.
%
, .
, .
,
. , %
1.1 . , %
.
%
, . %
, .
%
,
.
PDA
,
.
.
,
,
, %
, %.
.
. %
.
. , , , %
. ,
,
. %
, %
, . %
, %
.
, , %
. %
, %
567
.
% ;
,
, %
. (RPC), %
#
(middleware). %
,
%
, ,
.
, (
?), ( ,
%
?),
. .
%
, %
.
%
.
, , ,
( ZX spectrum), %
. , %
, %
. ,
ZX spectrum!
, CORBA,
Java RMI, Microsoft DCOM .NET Remoting.
,
% ( ) %
(, ).
GUI %%
. (
/ . 355).
#API , %
%.
# (grid computing) %
, %
( . )
%
. ; %
, %
568
23.
. ; %
.
(,
HTTP/XML).
Smallpox, 2003 ,
#,
.
, ,
44 .
%
(%,
/ ), %
( , %
) .
,
.
.
, %
. %
% #
(IDL)
, %
,
.
%
. %
.
, %
, 100 .
. %
,
, %
.
569
N
1990 % HTML,
World Wide Web. ,
%
, %
, %.
, %
.
:
, %
,
, %;
, . %
(. .
). ,
. JavaScript %
.
%
, %
%
, HTTP
, . %
(, %
), %
( cookies %
, /). %
, ASP.NET Java Servlets,
%. ,
%
.
%
.
HTTP, XML
(, SOAP
% , XML).
, %,
,
, HTML Java%
Script. HTML, %
, %
570
23.
. %
( ,
. .),
, .
. %
, . %
, %
500 .
(.
. 196).
# .
#
.
(, ,
, ).
. ,
, .
( %)
, %
%
: .
% (
Apache IIS). , %
%. %,
. ,
, .
%, %
.
% %
, , %
. : Perl PHP.
; %
.
571
(enterprise) , ,
, . %
%.
(enterprise programming)
, %
.
.
( %
) , %
. . %
,
, .
%
, .
.
. ;
, .
, .
( )
% , %
.
.
, .
, %
, %
(legacy systems ). %
XML.
, .
572
23.
%
.
, %
, .
(
%
), .
,
, %
. , %
, %
. %
, .
,
%
. ,
, %
.
, .
, ,
.
, .
, %
, %
.
. %
,
, %
%%
.
. %
, %
%
. %
;
, .
, %
. %
%
%
573
.
,
,
.
,
( ) .
,
.
( )
, %
,
.
.
C++
C,
Fortran, %
( %
: ).
, %
.
. %
, :
, %
,
.
%
.
574
23.
?
.
?
, ? %
, , :
.
. ( %
%
? . 14.)
.
(, %
, %
?)
, .
%
.
. .
, .
.
..
%
. , , :
, . ,
, , %
, ,
. , %
. %
.
? : .
.
. %
%
.
575
%
. %
, , %
. %
, %
, .
%
, %
%
:
, %
,
( %
)
.
7.
.
14.
%
.
576
23.
. 685.
1. %
%
? ?
2. ?
3.
%
?
4. %
?
1. %
? , ? %
?
2. %
? %
, ?
3. , , %
, ? ,
, %
?
?
24
?
,
, .
! . , %
, . (
: .) ,
:
, %
.
, %
.
.
( ? ,
.)
, , %
%
.
, %
.
, , %
: %
578
24. ?
,
. ,
, .
,
, .
?
.
.
, ,
.
.
.
%
; , , .
, . ?
, , :
% %
.
,
% , , ,
, , . %
. , .
, %
, . , %
, ,
, .
, . #
. , %
. %
. , ,
.
, %
. . #
. , . %
? :
579
. ,
, .
, .
,
.
, %
, . %
%
.
%
, . , ,
.
, , , .
. ( ,
!)
. .
. %
, .
;
. %
.
. %
, %
. ,
, .
. ,
.
,
%
. ,
,
.
, .
(, !) %
. %
; .
:
The Mythical Man%Month1 (Brooks 95)
Gerald M. Weinberg The Psychology of Computer Programming,
Dorset House Publishing, 1998 (Weinberg 71)
% %
. . . .: %, 2000.
580
24. ?
Peopleware: Productive Projects and Teams1 (DeMarco 99)
The Pragmatic Programmer2 (Hunt Davis 99)
Code Complete3 (McConnell 04)
The Practice of Programming4 (Kernighan Pike 99)
Design Patterns: Elements of Reusable Object%Oriented Soft%
ware5 (Gamma et al. 94)
Refactoring: Improving the Design of Existing Code6 (Fowler 99)
, .
, % .
. %
. , .
,
, British Computer Society (BCS), Association
for Computing Machinery (ACM) ACCU (www.accu.org).
. ,
. , ACCU
. %
.
, %
, %
, .
! %
. , . :
, ,
.
. &
.
:
. . . .: %, 2005.
. . %. %
. . . , 2009.
. . %
. . . .: , 2005.
. . . . . :
, 2004.
., ., ., . %%
. . . .
.: , 2005.
. . .
. .: %, 2002.
:
. .
.
, .
, %
. %
. %
.
, ,
.
, %
, , %
. , %
, .
: . .
.
1.
1. ?
,
, . %
, %
.
582
2. ,
?
. ,
. % %
API. ,
% , %
. ,
, ( ),
% .
%
.
3.
? ,
?
.
; .
,
. %
.
% %
, ,
, ,
.
, %
, %
.
4.
C?
. %
: %
, ,
.
. assert, %
, ;
.
5.
?
.
. %
, , %
. %
.
1.
583
6. ?
?
.
. %
,
i >= 0. i , %
.
, , %
:
(
)
, .
,
, %
. , , !
,
.
7. ?
a. ,
? ?
b. , C C++ ,
?
, %
. , C %
.
,
. , Java
, %
. ( ,
.)
,
C (
), , %
, .
, %
.
, C C++
, %
. . %
.
8.
?
584
,
,
, . %
, .
,
. %
. ,
.
1. ,
?
, , ?
, .
, %
. C,
printf? , %
?
2. ?
a. ?
b. ,
?
(
), %
; , %
. : #
.
, , %
. . API %
, ,
.
3. .
?
?
?
?
%
. %
, ;
, .
2.
585
4. ? ,
?
?
, ?
a. ?
?
b.
, ?
;
. , %
. !
. ,
, .
, ,
.
2.
1. ,
?
?
,
, . %
,
.
, %
, , .
, .
, %
, .
. %
, .
, %
; %
. ,
.
2. ,
.
? ?
586
, , %
; .
,
80 . ,
. , ,
, . %
, ,
( %
).
.
,
, , ,
, .
C++ . %
, C; % %
, %
%
, %
.
3. ?
a. ?
?
b. ,
. ?
.
,
%
. ,
, .
, %
, %
. , %
, %
.
4. ,
?
? .
,
.
:
, , , %
2.
587
, , %
% .
, , %
, . %
. .
, %
. ,
.
.
, %
. %
, , %
%
. , %
.
, .
; .
1 %
.
.
, %
. %
79 80 . ; 80 %
,
.
.
public:, private: protected:
? case switch? %
goto, ?2
,
. %
.
%
,
1
2
, .
, , %
goto. .
. 531.
588
. %
:
int cat = 1;
int dog = 2;
char *mouse = "small and furry";
,
%
. , :
hamster = "cute". ,
. hamster="ugly" %
.
. :
feedLion(mouse)
feedLion( hamster )
feedLion (motherInLaw)
: %
.
%
? while(lionIsAsleep)? .
; ,
.
,
, . %
, , ,
. ,
, . .
, .
C/C++
( ). %
:
int *mole;
int* badger;
int * toad;
%
. %
, int* weasel, ferret;. %
, .
C/C++ , %
.
, %
.
2.
589
,
; , (statement) %
, .
; %
index[count++] = 2 if?
:
for (...) { ostrich++;
buryHead(ostrich);
}
, %
? ,
, :
if (weAreAllDoomed) startPanicking();
(clause) else , %
if, .
? %
,
switch . #
, %
, C
str, :
char *end;
for (end = str; *end; ++end);
C++
, ( ) ?
. %
?
, %
? , %
? %
?1
. %
,
, ASCII%.
Java : .
590
C/C++ ,
#include. %
. , %
. ,
;
, .
,
#include,
.
.
SQL , ?
, %
?
5.
? ?
.
, .
, .
.
, ,
, , %
.
:
, %
, , , , %
. , %
, %
.
1. ?
a. ,
?
b.
, ?
?
, %
, ( ] ,
).
,
. %
2.
591
, %
BASIC .
: %
, %
, .
. %
, , %
, ,
,
.
2. ? .
a. ?
?
?
b.
, .
?
c. ?
, , :
! . , ,
, %
!
( , %
) , % %
, , . %
,
. ,
. %
, .
, . ;
, , %
. (
, !)
%
. , %
. , %
,
. ,
,
.
, . , %
, . %
.
592
3. ?
a. .
, switch
.
b. ?
?
c. ?
d. , ? ? ?
i. : ?
.
ii. : ? ( .)
, ?
, ?
e. ,
? , ?
, ( %
), .
: %
,
. %
, ( %
) . %
, %
, .
%
.
4. ?
a. ?
b. ?
c. ?
,
. , ,
, . %
, %
. , %
.
% .
?
; n% .
2.
593
. . %
.
/* num .*/
bool
isPrime( int num ) {
for ( int x = 2; x < num; ++x ) {
if ( !( num % x ) ) return false;
}
return true;
}
/* 'n' ./
int
prime( int pos ) {
if ( pos ) {
int x = prime( pos1 ) + 1;
while ( !isPrime( x ) ) {
++x;
}
return x;
} else {
return 1;
}
}
, %
.
, ,
. ,
. .
,
, . , %
, .
?
?
: %
%
? %
? ?
?
? %
, ? ?
,
%, , , %
. ( %
; . . 274.)
594
3. ?
1. ?
( ), (
) ( ).
a. int apple_count
b. char foo
c. bool apple_count
d. char *string
e. int loop_counter
, %
, . %
. , , %
: apple_count %
.
foo . , %
foo. loop_counter ; %
, ,
, %
.
, bool apple_count; ,
. , %
,
: is_apple_count_valid.
2. ?
?
?
a. doIt(...)
b. value(...)
c. sponge(...)
d. isApple(...)
. %
;
. %
.
3.
? ?
a. ? (.)
?
.
3. ?
595
b. ?
, C++ camelCase
STL (_).
?
C++,
. %
camelCase, , %
, _ STL. %
.
, .
, %
.
4.
?
. ,
100 , i, .1
, , %
.
5. C assert ,
? ?
assert , assert %
. , %
, , %
. .
, . .
#defined %
%
. ,
, .
, %
, .
.
, %
. %
.
: tmp, tmp1, tmp2 . , a,
b, c . . , .
,
(, _ %
_ ).
1
100 .
596
.
, %
,
, , %
tmp. , tmp %
% .
6.
?
%
, .
,
%
.
, , %
! %
assert C.
7. ?
?
, (
) ? ?
%
. : %
?
.
;
.
8. .
?
?
, %
, .
C%. ,
,
. 1.
C (
, ) %
C++, , %
.
%
, , ,
3. ?
597
, , (
). .
1.
rg
(bool C typedef)
char
si
short int
int
li
long int
double
ld
long double
sz
char, (: p)
struct
class ( )
, .
. , , foo_ptr m_foo,
. :
theFoo, %
% myFoo. , , %
, ,
, . .
9. ,
.
?
, get set %
, , ,
.
.
. C++
camelCase foo Foo, :
598
Foo &getFoo();
void setFoo(const Foo &) const;
Foo &foo();
void setFoo(const Foo &) const;
,
Foo &foo();
void foo(const Foo &) const;
%
. %
%
, .
.
( %
), . , %
, . Tree::numAp
ples ,
, %
. , %
. Tree::countApples()
.
1. ?
?
? ?
. 79.
%
. ? %
(
. 86), ?
2. ?
a. ?
?
?
b.
?
#
,
4.
599
. , %
, , 3.
,
. %
, %
. %
, ,
.
.
3. ?
, ?
, ?
%
, ?1 ,
( , %
). .
.
4. ?
,
?
%
. %
. %
, .
.
. %
, #include %
.
4.
1.
. ?
?
, , %
, ,
,
1
, , !
600
C++/C#, Java, . %
?
,
. %
, .
%
, .
.
2. .
? , ?
%
; C
. 0 ?
ZERO , 0; %
. ,
%
? .
%
%
for (int i = SOME_ZERO_START_VALUE; i < SOME_END_VALUE; ++i). %
.
. %
% NO_BANANAS, #
. NO_
(, NUM_).
3.
. ,
.
%
. Cat. %
setCatName, setCatColor . .; cat
.
. ,
count ()
,
(). : name Cat
, Employee
, , , .
, . %
, .
4. , ,
,
?
4.
601
, , . %
, %
, .
, (
).
,
, . %
API , %
.
5. ,
?
. %
. %
, %
.
%
, %
.
6. ,
, ?
. %
,
, .
, , %
( %
, ).
, .
, %
, . ,
, %
, % .
, ,
, , ,
.
, %
.
7. C
. ? ,
.
void bsrt(int a[], int n)
{
for (int i = 0; i < n1; i++)
602
for (int j = n1; j > i; j)
if (a[j1] > a[j])
{
int tmp = a[j1];
a[j1] = a[j];
a[j]
= tmp;
}
}
, .
. , %
; , C %
qsort.
.
. ,
. %
API,
.
. %
, , ,
swap. %
. , :
void swap(int *first, int *second)
{
int temp = *first;
*first = *second;
*second = temp;
}
void bubblesort(int items[], int size)
{
for (int pos1 = 0; pos1 < size1; pos1++)
for (int pos2 = size1; pos2 > pos1; pos2)
if (items[pos21] > items[pos2])
swap(&items[pos21], &items[pos2]);
}
C%, %
.
. %
swap . ;
.
C++ swap ,
( , ). %
std::swap,
.
4.
603
8.
. :
a. ,
,
,
?
b.
API ?
c. / ?
C/C++,
?
d. ,
API ?
?
:
a. . %
. , .
b. , #
. %
, %
. .
c. , %
. %
. , , %
, %
.
d. ! ,
.
9. ,
,
,
?
%
. %
%, %
. %
. , , , %
!
10. ?
, . %
; , #
, !.
604
( ).
,
.
1. ?
?
a. ?
? ,
, ?
b. , ,
,
, ?
,
.
, ,
, , %
. ,
. ,
.
2. ,
?
, %
.
%
. ,
, .
3. ,
?
?
,
. , %
% . .
4. ,
?
?
:
a. % %
, , ( , %
), % %
5.
605
. , %
.
b. , %
RTFM.1
5.
1.
:
a. ( )
b.
c.
d. C/C++
.
,
,
, .
.
(shell scripts)
; %Perl. %
. C/C++
.
2.
. ?
?
,
. . %
.
%
.
3. ,
//,
? ?
?
.
, ,
, . ,
1
606
. , , %
.
, %
.
4. C/C++ API,
, , ,
?
?
, . %
, .c. %
,
, %
. , , %
.
,
, . %
API?
, %
, %
.
.
, Java C# ; %
Javadoc C# XML.
1. ,
. .
, ? (,
!)
, ,
, .
, . %
% , , (%
) .
2. ,
, ,
?
, :
, , %
(
). , ,
.
6.
607
%
.
3.
, , ?
a. ? ? ?
?
b. ,
,
?
, %
%
.
4. ?
:
a. ? ,
?
?
b. ?
?
?
, %
. ,
, . %
%
(, , ).
5.
, ?
?
?
?
. %
,
.
FIXME (%
) TODO ( ), %
. , , .
6.
1. ,
?
608
#
,
( ). %
,
.1
.
, .
.
, %
, :
, %
.
%
.
, ,
try, catch throw.
,
. , %
. %
%
.
,
. .
2.
?
.
?
C struct,
. :
/* */
struct return_float
{
int reason_code;
float value;
};
/* , ... */
return_float myFunction() { ... }
, , .
C++ Java/C#,
1
. C++
proxy, .
.
6.
609
,
C++ std::pair. C++
. : %
, . , %
Perl,
. %
.
:
. , .
,
, , ,
.
, %
.
3.
?
610
4. UNIX.
,
?
, % .
ISO C, . %
UNIX () System%V. %
/
. ,
, . %
, %
.
5. ?
.
. %
, %
.
6. ,
?
, %
, , . %
, %
, %
. , ,
.
,
( %
). .
1.
?
?
%
. ,
%
.
, .
2.
,
?
;
%
6.
611
?1 :
. %
,
.
.
3. (
) .
.
?
.
! ? ?
, ?
, %
. #
% . %
.2
, ,
.
, . %
, %
( ,
)
( ,
; catch(...),
).
4.
? ,
, ?
. %
. , %
, ,
. ,
.
, , . %
,
, . %
,
1
,
. %
.
, C , printf?
612
.
.
7.
1.
IDE
?
?
%
, %
. , , %
.
,
. %
, %
, .
,
. %
, %
.
2.
?
:
(,
)
,
%
. .
,
.
.
.
.
, %
.
3.
GUI?
7.
613
, . %
GUI . .
:
? %
? ? ?
? %
. , , %
.
4. , ?
, %
.
:
( GUI)
(, XML)
UML
(, CRC)
5. ?
a.
b.
c.
d.
e.
. %
, %
.
;
, %
. ,
Notepad vi.
1. ?
?
? ?
a. ?
b.
?
c. ?
?
614
d. ?
. %
, , , %
? . %
, .
2. ?
, ?
,
. %
, ,
. % %
, % %
. %
, ,
.
, %
. %
, , %
. . , %
, %
, .
.
, %
. %
. , .
, .
3. (
) ?
?
?
(. 3
. 612). %
,
.
4.
?
?
,
. %
. , %
, % (
: ).
8.
615
, .
,
.
,
, .
,
. #
, . , %
, ,
ENTER.
,
, .
5. ,
? ,
?
,
.
, %
(
) . , %
,
. %
.
, %
, % , %
.
, %
, %
. , %
.
.
.
, ,
, ,
. , , %
!
8.
1.
, .
.
?
616
a. ?
b. ?
c. .
, , ,
, . :
. , %
( , ),
.
(%
, 1, 10 100 ). ,
, 733 449. %
% .
? %
%
. ,
1; %
. ,
.
assert(greatest_common_divisor(10, 100) == 10);
assert(greatest_common_divisor(100, 10) == 10);
assert(greatest_common_divisor(733, 449) == 0);
... ...
.
, , ,
, ,
.
. %
? ,
.
greatest_common_divisor? %
. , #
. ( %
) , C++:
int greatest_common_divisor(int a, int b)
{
a = std::abs(a);
b = std::abs(b);
for (int div = std::min(a,b); div > 0; div)
{
if ((a % div == 0) && (b % div == 0))
return div;
1
%
% !
8.
617
}
return 0;
}
2.
?
, .
. .
,
,1
. ,
. .
.
3. , ?
, . %
, ,
? , %
.
% ,
.
, .
4. , ,
QA?
.
, ;
.
,
, .
, , ,
, , ! %
, , ,
, %
. , %
, % .
5.
?
, .
618
. %
, . %
, . %
.
,
? , , %
. , , %
% .
6. , , .
?
,
. ,
.
7. C/C++,
, NULL (
)? ?
, , , ,
.
. %
,
, .
, %
. ,
.
, %
, %
. %
, %
. , .
8.
, , .
,
, ?
(,
),
?
.
, ,
? ,
.
. %
, , %
.
8.
619
( ), %
. %
, , %
.
, %
.
, , %
. , %
.
9. , ?
?
,
, . %
,
, .
%
. 200.
,
. %
.
. %
, %
,
%
.
. %
. ,
, 95% .
,
. , %
.
%
:
( ).
, %
.
620
.
,
, , , %
:
(
). %
, , %
.
, (
).
% %.
. ,
%
. %
.
1. ? ?
?
? ?
?
.
. %
,
, : .
, , %
. : %
, .
, %
, .
, , %
, %
? !
, %
?
2. QA?
?
QA .
; %
,
8.
621
, , %
.
, .
.
. . . %
.
. %
, , , %
. , %
, , %
, .
3. , ?
:
%
, , ,
, ( ).
% , , ,
. ,
, %
? , %
; ,
, .
, %
.
.
4. ?
. ,
, .
%
. %
,
, .
,
. %
,
.
, , %
, ,
622
. %
, .
5. ?
, ,
. , .
%
. ,
, . , %
, ,
.
9.
1. , ,
? , ,
?
.
,
, ,
, , % %
.
, , , %
. ( ), , %
.
, .
, ,
,
. %
, %
. , (
) .
2. ,
?
. ( %
?)
: %
, , .
, ,
, .
.
9.
623
3. ,
. ,
,
.
?
, ,
, , ,
.
.
: %
, ,
. , ,
, % %
. . %
, .
4. ,
.
:
a. ,
, Java C#. ( %
. , ?)
b. ,
, .
c. ,
auto_ptr C++.
d. . %
,
.
e.
.
5.
?
. %
.
;
, %
.
(,
). , %
, . %
. ,
, .
624
1. /
?
: . %
!
2. ,
?
?
.
. , ,
.
3.
?
%
, , .
. %
. ,
,
.
, .
. ,
, .
4. ?
?
:
a.
b.
c.
d.
e.
. %
. %
, . %
, .
10. ,
1.
make, ,
?
10. ,
625
, %
, make
. %
%
make%. , %
GUI %
, .
%
. make ,
.
, make% %
. GUI
%
.
make %
. ,
.
,
make%, . %
: .
, %
.
2.
?
.
%
, %
, .
, %
.
, . ,
/
.
( %
, ). %
:
, (%
% ).
:
, %
. ,
.
626
, ,
.
:
, ,
? !
, %
, , %
. .
3. (, )
, ?
, .
,
.
, ] .
:
. ,
.o,
.
%
, ; %
, . %
, . 1.
%
.
. 1.
. 2. :
10. ,
627
, %
, . %
, . 2.
4.
?
(, make%
tests make all make tests). ,
. %
, . %
. %
, %
. .
. ,
. %
, .
5. ?
. %
. QA
.
%
, %
. %
. %
, , %
, , .
, %
, . %
%
. ,
, %
.
, %
.
6. make ,
. ,
make.
, %
, . %
,
dep,
628
. ,
make.1 GNU Make %
, :
%.o: %.c
compiler object %.o !dep %.d %.c
make% :
include *.d
! , .
. :
.
.
include ,
.d. .d,
, * %
make. :
make% %
, .o .d %
, .
,
.d%,
. : %
.
7.
, .
. .
, ,
make%, .
, make, %
, .
, ( ) make,
;
, .
make ? :
, ## .
, ,
.
: , %
.
10. ,
629
, , %
.
.1
:
.
,
.
.
make ;
make%
. make% %
, func1.c %
shared.h .
func1.c shared.h.
shared.h
, shared.tmpl.
.
, shared.h . %
, shared.tmpl
func1.c , .
, shared.h ,
func1.c. , %
.2
,
.
,
, %
, .
%
.
Make ,
. make
. , %
make% .
,
!
,
.
630
make . %
. % %
, .
,
.
.
make, ,
. make %
. make, , .
, make
.
? ,
.
, , %
. ; %
make. %
make%.
make% . make%
.
, make
. &
make.
, . %
make%?
%
:
make . %
. ,
files.mk, Makefile.
make
make %
. %
. %
, make
,
.
make ;
. ,
.
10. ,
631
1.
?
make ,
?
%
: %
( %
, ).
GNU Make . :
#
SRC_FILES = main.c func1.c func2.c
# ( )
BUILD_TYPE ?= release
#
# ( GNU Make,
# .c .o)
OBJ_FILES = $(SRC_FILES:.c=.o)
# :
# ( GNU Make)
OBJ_FILES = $(addprefix $(BUILD_TYPE)/, $(OBJ_FILES))
, (BUILD_TYPE) %
, . ,
, , %
. UNIX:
$(BUILD_TYPE):
mkdir p $(BUILD_TYPE)
,
,
:
BUILD_TYPE=release make all
BUILD_TYPE=debug make all
,
BUILD_TYPE.
2. ?
, ?
? :
a. ?
b. ?
c. ?
632
d. (,
)?
e. ,
?
, %
.
,
.
, , %
. .
%
.
; .
, %
; . %
. %
, . %
,
, .
.
3.
? ?
,
:
,
.
, ,
:
%
,
.
.
%
, , %
.
, ,
. %
11.
633
, %
.
4.
.
, .
?
:
.
,
; ,
,
.
:
.
, %
.
%
.
% ,
.
11.
1. , . .
, .
,
.
, %
:
; %
;
634
,
, %
2. ,
. 271.
, , ?
%
, %
. , %
,
. , , , .
. ,
(. . %
),
, %
.
3. :
(Performance)
(Efficiency)
(Optimized)
. %
. , %
; %
, %
.
4.
?
,
. %
, ,
. :
%
.
11.
635
5. ?
?
,
. ,
.
, . ,
,
. , C++ %
const, .1
. , %
, %
, 1030 , %
, %
.
, , ,
.
6. ?
,
. %
,
.
, %
.
, ,
, %
.
7. ? ,
?
, %
:
, %
. ,
, .
1
,
.
; ,
. , ,
.
636
, %
, . %
, ,
, .
. , %
, .
, %
, .1
% ,
, %
. , , %
. %
, , ,
, %
, .
8. List .
List ?
a.
b. append
c. insert
d. isEmpty true,
e. contains true,
f. get
:
a. O(1),
; . ,
%
, .
, %
List .
, (
).
O(n).
b. append O(1):
. %
, , %
O(n) (
).
1
, .
11.
637
c. insert O(n). %
. %
, %
. List ,
.
, , O(n).
d. , %
isEmpty O(1). , %
.
e. contains O(n) ,
. %
, .
f. get O(1) . %
. %
List ,
O(n).
1. ,
( )?
?
%
. , . %
; , %
. %
, , . %
,
.
2. :
a. ?
b. , ?
c. , , ?
d.
?
e. , ?
f. , ? ,
?
%
.
, ,
.
638
, %
, . ,
, %
.
3. ,
, ,
.
,
.
, . %
, , .
4.
? ,
?
, %
.
12.
1. ?
%
, ,
. ;
. %
.
, %
, . %
, !
%
, . ,
( %
). %
:
, .
,
.
12.
639
. %
( % %
?),
.
, ,
, /.
,
.
2. ?
?
.
, , %
, % ( JavaScript %
), URL CGI,
cookies, .
( %
), %
( ,
).
3.
?
. ,
, . %
%
, , %
.
:
, , ,
.
, %
.
, %
.
,
.
4. ,
? ?
640
, ,
,
. %
, %
/ , %
.
.
,
, . %
( %
), ( ).
5. ?
, ,
(, %
), .
:
, ,
,
. : %
%.
, %
.
C %
strncpy, strncat, snprintf, fgets . . %
stdio, printf scanf, %
.
,
.
( Java
C#).
%
.
6. , ?
, :
a. . % %
, . , %
, %
.
. ,
.
12.
641
b. . %
, . ,
;
.
c. . ,
. ,
.
7. C C++
, ?
C C++
, .
, ; %
C/C++,
. %
.
, C C++. %
, , ,
;
, .
, %
.
, ,
. %
,
.
8. C C++
?
C++ string,
. ,
, ,
char C. vector,
.
?
C++ , C, % ,
( %
). %
, %
.
C++ , ,
. %
642
, %
, .
9. , ?
, %
. %
. , ,
. ( %
) , %
, .
, %
? ,
%
.
1. ,
? ?
? ?
. % .
, ,
. %
.
2.
?
, .
, ,
. %
, ,
.
3.
?
%
? %
, , .
4. ?
?
, %
% .
.
5. , ,
? :
13.
643
% : ,
. %
?
13.
1.
?
, %
. %
%
,
.
2.
?
. %
,
, . %
, .
, %
, , %
.
? :
, %
.
3. ?
, , . .?
; %
. ?
, .
,
. % ,
. , A B, ,
A , B %
, , A .
644
, . %
; , , ,
. %
, . :
, ,
. , %
, .
,
.
4. ?
?
. %
. %
.
, % %
. %
,
.
5.
?
, %
. ,
, %
.
,
, %
,
%
.
.
6. ,
?
,
, ! C C++ %
, #include %
. , %
. , %
, .
7.
, ,
?
13.
645
, %
.
; . %
.
, , %
, .
8. ?
, ,
. %
, (Brooks 95). %
.
;
, .
,
,
.
1. ,
.
?
? , %
, , ?
.
, %
, .
, ,
. .
%
.
2.
? ?
? ?
%
? % ,
. C% %
% , %
% . ,
OO% .
646
3. ,
?
, . %
, , %
. , %
! ,
, ; ,
, .
4. , ,
? ?
, ,
. , .
, %
: !. %
, ,
.
5. , ,
, , .
?
, .
,
.
: Java
.
6. ,
?
, , .
, .
, , .
.
; .
.
.
14.
1. ,
.
, ,
. :
14.
647
.
,
, ,
. %
. %
, , %
.
, .
, , %
. %
. %
.
.
%
,
.
2. ?
,
?
%
. %
. % ,
, , %%
.
3. ?
%
.
%
( ),
% . %
.
%
. ,
.
, %
, ,
. %
, ,
%
.
648
4. :
a.
b.
c.
d.
, ,
, %
. , %
, %
. ,
.
a. , (
) . %
: %
, %
,
( , , %
). %
.
b. %
. %
, , %
%
. ,
.
?
c. , , %
%
( %
%
?).
: %
, ,
. , %
.
d. %
. %
, , %
, , %
. ,
;
.
14.
649
5. ,
?
,
, %
.
, . %
, %
. ,
,
.
%
;
.
, , %
.
6.
? , ? , ?
, .
, , %
; , %
.
,
, %
.
(, %
%
).
%
, ( , %
), ( %
CD),
.
7. ,
? ?
?
,
:
, (), %
(), , %
.
650
%
, . %
.
.
, ; %
, , %,
, . %
. %
, . %
, .
1. ,
?
, ?
. %
%
. , ,
, %
.
.
% .
, %
, , ,
, .
2. ,
?
?
%, , .
, ?
? ? %
.
% ,
, %
. %
.
, .
, .
; %
.
, %
14.
651
. %
.
, , ,
. ,
,
. ,
.
3.
(
) .
. ,
?
, . %
, ; %
% ,
% . ,
, , %
. %
.
.
, %
. , %
. %
,
, .
4.
? ?
?
,
?
, . %
?
%
,
,
.
, .
5. .
?
, %
%
. ( %
652
, .)
, %
, , %
.
.
, .
, %
, , ,
,
, % . %
, ,
, %
, .
15.
?
1.
?
. : ,
. (Groom 94)
, ,
.
; %
,
. %
.
% .
.
2.
, ,
, :
15. ?
653
,
. %
%
, . , ,
.
. %
. .
.
. . .
, .
. .
, . %
QA. , , ,
.
1.0. %
.
. %
.
, %
, %
. , %
. .
. , x %
. %
, .
: %
. . %
, %
, .
654
3.
,
?
, %
, . , %
.
, . %
, , , %
, ,
. %
. %
%
.
%
,
.
,
,
.
4. ?
. , %
.
%
. ,
.
.
, %
. ,
. , %
.
5.
?
.
, %
, , %
. %
,
.
. %
, %
. Y2K
15. ?
655
, ,
.
6.
?
, .
, %
, , %
. %
, , .
%
.
.
, .
.
, %
.
1.
?
a. ,
?
b. , ? ?
. %
%
, .
, %
, .
, %
. , %
, .
2. ? :
a. ?
?
b. ?
?
%
. , %
, ,
.
656
,
, %
. %
, .
3. , ?
?
( ) :
.
, .
.
,
.
.
,
. %
, ,
, %
.
4. ?
a.
? ?
b. ,
? ?
.
a. . %
. %
, ,
.
: %
, %
. ,
, %
, %
, .
%
, %
.
16.
657
(,
).
b. , ,
, %
.
5. ,
?
#
. , , %
.
.
, .
, , %
. %
.
, %
.
16.
1. ,
?
. , .
. , %
2. , (
) , ?
a. ?
b. ? ( )
?
, %
.
, %, %
. .
. :
,
658
. %
. , ,
.
,
. % %
, %
.
, %
, . %
, ,
. %
, .
3.
. :
, , %
.
%
%
. ,
. %
, .
, , ]%
, %
.
%
. , %
,
.
, , .
,
. %
. , %
17.
659
, %
.
%
, %
.
, .
, %
, , %
, %
.
4. ,
, ,
?
?
, %
.
. , %
, .
%
.
.
17.
1. ?
?
, , ; %
, %
. ,
, %
.
%
. %
. , %
, .
,
; %
. %
.
: %
. %
660
, .
, ,
, % ,
.
. ,
, %
. %
.
2. .
?
%
:
, %
.
;
. ,
. ( %
, , %
.)
.
, %
, , .
( , ,
%
).
( ).
%
, , ,
.
.
, %
. , :
, %
, . %
.
%
, .
, .
, , %
. ,
:
17.
661
, %
, .
%
.
.
.
?
.
.
, .
,
.
.
.
.
3.
(. ? . 240).
?
(, #
, , , %
) (DeMarco 99).
, .
. %
, ,
.
, . ,
,
( , %
). :
: ,
%
.
: %
.
% , :
.
: %
. , , ,
, , , , %
. .
662
: .
, , .
. %
%
. , %
,
( %
). %
. , ,
.
4.
?
. %
:
,
, :
%
.
, ,
.
: , %
, , %
, .
, ,
.
5. ?
, :
( %
, )
( )
17.
663
. , %
, .
,
; %
.
, %
, %
. % %
, %
(Brooks 95).
, %
,
.
, , ; %
, .
6. ,
?
.
.
%
. ,
% . %
( ), %
. %
.
,
:
. %
.
,
.
:
, %
.
.
,
.
.
.
.
.
664
1. ,
? ?
a. ?
b. ?
c. ?
, ,
?
, . 445.
, , .
, .
.
:
2. ? ,
?
%
, . 426.
, %
.
3.
?
%?
? ,
? :
18.
665
( ?)
.
? %
, %
?
?
? ,
?
18.
1. ?
, .
, %
%
. ,
, ,
.
%
; .
%
%
.
%
:
.
, %
, , %
.
, %
, %
%
, .
666
(tarball) ( %
UNIX tar). %
, FTP CD.
.
( ).
% ,
.
2. (
)
?
.
, %
%.
%
, .
,
,
,
, .
, , %
. , .
,
, . %
, %
, , . %
, . ,
, .
%
.
.
foo.c 10 20,
15 25, ! , %
, , %
, %
10 20.
, ,
, , ,
foo.c. %
;
.
.
, ,
. ,
10 20, 40 50; %
18.
667
,
. %
, %
.1
, .
, %
, .
3.
?
%
, , ,
,
, .
:
/.
( %
)
. %
(, ,
).
, %
.
: %
. %
, .
. %
%
. ; %
,
, ,
.
, %
. %
%
, . .
1
: . .
. : %, 2002.
668
4.
?
,
% . %
, .
, %
. ,
,
?
?
?
?
? Unicode? %
, %
? %
?
%
, , %
%
. ?
?
, , %
,
.
( ,
). , %
.
;
.
,
.
,
18.
669
.
, ?
, %
. , %
.
5. ,
, ?
,
. :
. , %
. , %
.
. %
%
.
.
(
).
stable (),
. %
, %
.
, %
.
( ), . %
, %
.
%
.
1.
?
, %
,
? %
:
?
%
?
?
670
?
?
, :
, %
, %
?
?
( ) ,
?
%
?
?
, %
?
, %
, ?
?
2. ?
?
?
, ,
, , . %
, :
. %
, %
.
. ,
.
: %
.
, ,
, ; %
, (
, ), %
.
%
, . %
% ,
19.
671
, .
, %
, .
. %
, %
. ( ,
?)
3. ?
,
. %
. ,
. %
?
?
19.
1. ?
. , %
. %
, ,
.
%
, , ,
. %
,
.
.
,
, , ( ) .
%
! ,
.
2. ?
: ,
, , , %
. ; ,
672
.
.
3. , /
?
, %
. ,
, , %
.
() , .
,
, .
, , .
4. ? ,
( )?
%
. , ,
.
( %
, , ). %
%
. ,
, .
, %
. %
,
.
, % %
, .
(. %
. 456).
5. ?
.
, %
:
, %
.
%
.
19.
673
, %
:
. (, . .?
.)
. ( %
?)
. (
? ,
!)
, %
. ( : %
, %
.) .
%
,
. , %
.
6.
? ?
. %
. API %
, %
. :
,
.
.
,
. %
, .
7. ?
, %
. HTML,
%.
. ,
; . %
,
674
.
,
.
%
, . %
,
.
, %
%
.
1. , ?
, %
. ,
, . ,
,
.
2. . :
a.
b.
c.
d.
e.
? ?
, ?
?
% %
, ? ?
?
; %
.
3. ? ,
?
:
.
(
).
:
, ( %
).
20.
675
,
(, #
).
, :
%
,
%
20.
1. ?
. ,
, %
.
, , %
, !
2. ?
, !
,
. , %
,
. %
,
.
, ,
. %
( %
% ).
3.
?
.
,
676
, .
. , %
?
.
, %
,
% .
4. ?
%
( ).
,
. , %
:
.
.
( %
; ,
,
).
%, . ,
, %
.
5. ,
, , ?
:
?
%
?
?
?
( ) ?
?
?
, .
. ,
.
, , %
. %
.
20.
677
6. ?
%
. , %
.
, %
.
, :
? %
,
.
.
, %
, %
.
.
.
: ,
. , %
, .
7. ?
, %
, , %
( ).
,
(McConnell 96):
(walkthrough)
,
.
.
(code reading)
, %
.
1. ?
?
,
, %
. ; , ,
, .
678
. ,
,
. %
%
.
%
?
2. , ,
?
% ,
%
. . .
, , %
, , %
. ,
,
. %
; .
3. ?
, ,
. ?
%
?
, ,
? ?
%
? %
?
%
, %
. ,
!
21. ?
1.
?
, .
!
21. ?
679
,
%
. :
; %
.
, %
. %
, ,
.
,
. ,
, (Brooks 95).
, %
,
. , %
.
2. ,
,
?
! %
: ,
, .
,
.
. , %
,
.
, , : %
, .
, , %
, , %
.
,
. , , %
; %
, %
.
3. ?
, %
, .
680
, %
.
, .
, ,
. , %
,
.
: ,
,
.
%
. %
.
.
,
. %
.
.
4. ?
?
:
, % %
. .
.
% , : %
, %
, , %
(, . .).
, . %
.
. , %
.
% %
, .
22.
681
, , %
.
,
%
. %
, , .
1. , ,
?
a. : ?
b. : ?
, ; ,
% , , %
. , %
, .
%
. %
, . %
, ,
. %
!
2. ?
?
, .
. , ,
. ?
, %
! % ,
. %
, . %
, ,
, . ,
,
.
22.
1.
?
, , ,
, .
682
,
% . %
, %
.
%
.
2. ?
! , %
30 .
3. ?
?
9% .
4.
(. . 536).
: / %
, %
, ,
, , %
%
.
Ad hoc ( )
?
%
. Ad hoc %
,
, . %
, %
, % ,
, , , !
, . %
, .
SSADM
:
. %
.
V
(
). %
22.
683
, %
.
(
).
, : %
,
.
,
, ( %
) %
. %
.
,
.
.
.
; . %
: %
; %
, .
, ,
.
, %
. ( .)
. , V%%
, %
, .
5.
,
?
, %
. , , !
, 1
1
, www.jamieoliver.com.
684
, %
.
,
.
, %
.
6. , ,
?
%
. %
, %
(, , , ),
(, , %
, . . 523) %
, .
, , %.
%
, .
%
,
.
, ,
, .
( : %
, , .)
%
.
, %
.
1.
?
a.
?
b. ? ,
?
c. ?
d. ?
,
,
?
, %
%
23.
685
.
,
?
,
? ? ?
, , %
% ?
2. ?
?
, ?
, ?
ad hoc. ,
; %,
.
.
3. ,
, ?
, %
, ? %
? , %
: ? %
%
, ,
.
?
23.
1.
?
?
, . %
:
% %
.
% %
.
%
.
686
%
.
.
2. ?
, %
.
%
. ( ,
, !)
, %
. , %
, ( %
. 574). %
, %
%
.
, %
, .
.
3.
?
.
% ,
. %
,
. :
, %
. %
, .
4.
?
.
; %
, % ,
. , %
, %
. , %
,
, % .
23.
687
%
,
,
.
, , ,
, .
1. ?
, ?
?
, , %
. ,
, , %
, , %
.
.
2.
?
, ?
. %
, . , %
, , %
,
(,
).
, ,
, .
3. , ,
, ? ,
,
? ?
,
, . %
, %
(, , ,
. .), %
, .
%
, .
(Alexander 79)
Alexander, Christopher. The Timeless Way of Building. Oxford Univer%
sity Press, 1979. 0195024028.
(Aristotle)
Aristotle (384322 BC). Rhetoric. Book 1, Chapter 11, Section 20. 350 BC.
(Beck 99)
Beck, Kent. Extreme Programming Explained. Addison%Wesley, 1999.
0201616416.1
(Belbin 81)
Belbin, Meredith. Management Teams: Why They Succeed or Fail. But%
terworth Heinemann, 1981. 0750659106.2
(Bentley 82)
Bentley, Jon Louis. Writing Efficient Programs. Prentice Hall Professio%
nal, 1982. 013970244X.
(Bersoff et al. 80)
Bersoff, Edward, Vilas Henderson, and Stanley Siegel. Software Configu#
raion Management: An Investment in Product Integrity. Longman
Higher Education, 1980. 0138217696.
(Boehm 76)
Boehm, Barry. Software Engineering. IEE Transactions on Compu#
ters. Vol. C%25, No. 12, pp. 1,2261,241. 1976. http://www.compu%
ter.org/tc.
(Boehm 81)
Boehm, Barry. Software Engineering Economics. Prentice Hall, 1981.
0138221227.
. . . .: ,
2002.
. %
. . . Hippo, 2003.
689
(Boehm 87)
Boehm, Barry. Improving Software Productivity. IEEE computer,
Vol. 20, No. 9. 1987.
(Boehm 88)
Boehm, Barry. A Spiral Model of Software Development and Enhance%
ment. IEEE computer, Vol. 21. May 5, 1988.
(Booch 97)
Booch, Grady. Object Oriented Analysis and Design With Applications.
Benjamin/Cummings, 1994. Second Edition. 0805353402.
(Briggs 80)
Briggs Myers, Isabel. Gifts Differing: Understanding Personality Type.
Consulting Psychologists Press, 1980. 0891060111.
(Brooks 95)
Brooks, Frederick P., Jr. The Mythical Man Month. Addison%Wesley,
1995. Anniversary Edition. 0201835959.1
(DeMarco 99)
DeMarco, Tom, and Timothy Lister. Peopleware: Productive Projects
and Teams. Dorset House, 1999. Second Edition. 0932633439.2
(Dijkstra 68)
Dijkstra, Edsger W. Go To Statement Considered Harmful. Communi#
cations of the ACM, Vol. 11, No. 3, pp. 147148. 1968.
(Doxygen)
van Heesch, Dimitri. Doxygen. http://www.doxygen.org.
(Economist 01)
Agility counts. The Economist. September 20, 2001.
(Fagan 76)
Fagan, Michael. Design and code inspections to reduce errors in program
development. IBM Systems Journal, Vol. 15, No. 3. 1976.
(Feldman 78)
Feldman, Stuart. Make A Program for Maintaining Computer Pro%
grams. Bell Laboratories Computering Science Technical Report 57.
1978.
(Fowler 99)
Fowler, Martin. Refactoring: Improving the Design of Existing Code.
Addison%Wesley, 1999. 0201485672.3
% %
. . . .: %, 2000.
., . : %
. . . .: %, 2005.
: . .
. : %, 2002.
690
2
3
., ., ., . %%
. . . .
.: , 2001, 2007.
. . . , 2004.
. . %. %
. . . , 2009.
691
(ISO 99)
. . . . . :
, 2004.
. , . . . . %
, 2000.
. . %
. . . .: , 2005.
692
(Meyers 97)
Meyers, Scott. Effective C++. Addison%Wesley, 1997. Item 34: Minimize
complication dependencies between files. 0201924889.1
(Miller 56)
Miller, George A. The Magical Number Seven, Plus or Minus Two: Some
Limits on our Capacity for Processing Information. First published in
Psychological Review, 63, pp. 8197. 1956.
(Myers 86)
Myers, Ware. Can software for the Strategic Defense Initiative ever be
error%free? IEEE computer. Vol. 19, No. 10, pp. 6167. 1986.
(Page Jones 96)
Page%Jones, Meilir. What Every Programmer Should Know About Ob#
ject#oriented Design. Dorset House Publishing Co., 1996. 0932633315.
(Royce 70)
Royce, W.W. Managing the Development of Large Software Systems.
Proceedings of IEEE WESCON, August 1970.
(Simpsons 91)
Simpsons, The. Do the Bart Man. Geffen, 1991. GEF87CD.
(Stroustrup 97)
Stroustrup, Bjarne. The C++ Programming Language. Addison%Wesley,
1997. Third Edition. 0%201%88954%4.
(UML)
Unified Modeling Language. Object Management Group. http://
www.uml.org.
(Vitruvius)
Vitruvius Pollio, Marcus (c. 7025 BC). De Architectura. Book 1, Chapter
3, Section 2.
(Weinberg 71)
Weinberg, Gerald. The Psychology Of Computer Programming. Van
Nostrand Reinhold, 1971. 0932633420.
(Wulf 72)
Wulf, William A. A Case Against the GOTO. Proceedings of the twenty%
fifth National ACM Conference, 1972.
++. 55 %
. . . , 2006.
Eiffel, 46
Emacs, , 168
errno, , 138
exdented,
(), 58
B
Bison, 170
bug, 184
C
C
, 44
, 54
camelCase, , 81
CASE%, 337
COCOMO,
, 520
core dump ( ), 232
COW (copy%on%write), 290
Crystal Clear,
, 547
CVS (Concurrent Versions System
), 456
D
ddd, gdb,
174
diff, , 169
Doxygen, ,
107
F
find, , 169
G
gdb, GNU, 174, 231
GNU, , 62
grep, , 169
I
Indian Hill, , 62
J
Javadoc, ,
106
JUnit, Java,
204
Just%In%Time (JIT%), 239
L
lint,
, 174
locate, , 169
M
make, , 245
, 258
malloc, 218
694
man%in%the%middle attack (
), 298
Mark II, 213
Memory Access Validator,
, 231
MFC (Microsoft Foundation Classes
Micro%
soft, 170
MISRA, , 62
Mozilla, 62, 406
N
NDoc, (#),
107
Netscape, 406
O
open source, 407, 462
S
SCCS (Source Code Control System %
),
456
SCMS (
), 457
sed, , 165, 169
SESE,
, 99, 150
setuid, (UNIX), 309
SSADM (Structured Systems Analysis and
Design Methodology
), 541
sscanf, (), 303
strace,
(Linux), 232
Subversion, ,
456
switch, (), 44
QA ( ), 187
WEB, %
, 104
R
RAD (Rapid Application Development),
, 337, 548
RAII (Resource Acquisition Is Initializa%
tion), , 150, 331
RCS (Revision Control System
), 456
README%, 126
RFC 2119, 483
RUP,
Rational, 548
V
VCS ( ),
457
Vim, (UNIX), 168
V% , 542
Y
yacc,
, 166, 170
, 533
, , 134
, 49
, 282
% %, 197
, , 346
695
, 319
, 298
, 311
, 212
%, 242
, 296
, 40
, , 390
,, 198
%, 336
, , 545
, 174
%, 569
, 80
, 43
, 53
, , 41
, 100
, 285
,
563
, , 267
, 46
, 75
,
40
, 65
, 218
, 46
() %
, 104
, 232
, 468, 531
, ,
300
, , 145
, 31
, , 39
, 219
, 558
, 326
, 31
, 30, 36,
310
, 308
, 45
, 39
, 331
, 84
, 79
, 82
, 84
, 80
, 77
, 77
, 76
, 78
, 76
, 100
, 46
, 42
, 533
,
106
, 159
, 238
, 326
, 326
, 329
, 138
, 138
, 281
, 170
, 171
, 169
, 169
, 170
, 219
, 545
696
, 539
, 57
/ , 355
,
483
, , 104
, 492
, 30
, , 98
, 102, 113
, 121
, 122
, 113
, 127
, 116
, 124
, 116
, 114
, 115
, 122
, 125
, 127
, 121
, 241
, 171
, 457
(QA), 186
, 34
, 326
, 83
, 558
, 270
, 38, 57, 78
, 301
, 56
%, 172, 241
% , 304
() %
, 104
,
461
, 535
% , 390
, 219
, 279
, 281
/, 320
, 325
, 537
, 533
, 333
% %
, 333, 532
, 43
, 45
, 47
, , 58
, 46
%, 390
copy%on%write, 290
, 272
, 283
, 284
, 278
, 267
(QA), 186
, 34
, 185
, 231
, 136
, 151
, 136
, 135
, 141
, 135, 143
, 207
,
, 137
, 147
, 215
, 218
, 217
, 215
, 205
697
, 184
, 224
, 330
, 303
, 493
, 297
, 533
, 30
, 44
, 367
, 500
, 196
, 49
(), 104
, 30, 36, 310
, 560
, 571
, 409, 493
, 561
, 534
, 572
, 343
, 324
, 537
, 333
( )
, 476
, 81
, 83
, 543
, 276
, 536
, 336
, 285
, 57
,
, 189
, 566
, 58
, 195
, 168
, 173
, 458
, 68
, , 42
, 370
, 490
, 492
, 497
, 390
, 93, 95
, 98
, 237
, 262
, 258
, 256
, 259
, 42, 218
, 286
(cohesion), 325
, 53
, 217
, 141
, 215
, 450
, 205
, 561
, , 249
, , 57
GNU, 61
K&R, 57
Linux, 61
( ), 58
( ), 60
, 270
, 282
, 460
, 94
, 298
, 475
, 475
, 483
, 477
, 471
, 545
, 297
, 540
, 53
698
, 65
, 40, 233
, 36, 54
, 63
, 530
, 306
, 531
, 333
, 86
(coupling), 325
, 34, 184
QA , 187
, 203
, 197
, 195
, 199
, 195
, 195
, 198
, 198
, 204
, 185
, 196
, 196
,
202
, 195
,
, 192
, 198
%
, 36
, 413
, 232
, 299
, 46
, 305
, 218
, 300
, 63
, 98
,
, 304
, 474
,
534
, 500
, 301
, 30
, 305
, 175
, , 198
, 572
, 175
, 334
, 198
( ), 60
(UML), 335
, 457
, 456
, 153
,
547
,
%, 238
, 241
Books.Ru
ISBN 9785932861271,
.
Books.Ru .
,
. ,
(piracy@symbol.ru),
.