Вы находитесь на странице: 1из 697

, ACCU

(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

int error = doSomeMagicOperation();


if (error)
fprintf(stderr, "Error: exiting...\n");
exit(error);

, ,
.
%
, .
,
% .


, ,
. % %
, , . ,
:

, %
. ,
. . %
,
. , (%
) 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

Garbage In, Garbage Out ,


.

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

, %
. %
, . %
, !
, %
, .
,
, .

Darwinian Man, though well#behaved,


At best is only a monkey shaved!
( ,
!)
.

(
). : %
, %
,
( , %
).
. %
,
.
,
, .

, %
, %

,
, %
%

,


,

%

.
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.

(lp long pointer, %


; )

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

Read The () Manual.

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. 
?

: C++, Java, .NET %


Win32. Win32 %
, .

, , .
: %
throw catch,
, try.
.
Java, .NET Win32 finally.
, ,
try. , ,
, . C++ finally,
.
(raw) Win32 ( , %
) %
, . %
,
, .
Java ( Throwable) C# ( Ex
ception) , %
. .NET CLI
, C# ( %
). .NET %
.

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

(Gamma et al. 94)


Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design
Patterns: Elements of Reusable Object#Oriented Software. Addison%
Wesley, 1994. 0201633612.1
(Gosling et al. 94)
Gosling, James, Bill Joy, Guy Steele, and Gilad Bracha. The Java Langu#
age Specification. Addison%Wesley, 2000. Second Edition. 0201310082.
http://java.sun.com.
(Gould 75)
Gould, John. Some Psychological Evidence on How People Debug Compu%
ter Programs. International Journal of Man#Machine Studies. 1975.
(Groom 94)
Groom, Winston. Forrest Gump. Black Swan, 1994. 0552996092.2
(Hoare 81)
Hoare, Charles. The Emperors Old Clothes. Communications of the
ACM, Vol. 24, No 2. ACM, 1981.
(Humphrey 97)
Humphrey, Watts S. Introduction to the Personal Software Process. Ad%
dison%Wesley, 1997. 0201548097.
(Humphrey 98)
Humphrey, Watts S. The Software Quality Profile. Software Quality
Professional. December 1998. http://www.sei.cmu.edu/publications/ar%
ticles/quality%profile/.
(Hunt Davis 99)
Hunt, Andrew, and David Thomas. The Pragmatic Programmer. Addi%
son%Wesley, 1999. 020161622X.3
(IEEE 84)
IEEE Standard Glossary of Software Engineering Terminology. ANSI/
IEEE, 1984. ANSI/IEEE Standard 729.
(ISO 84)

ISO7498:1984(E) Information Processing Systems Open Systems


Interconnection Basic Reference Model. International Standard for In%
formation Systems, 1984. ISO Standard ISO 7498:1984(E).
(ISO 98)
ISO/IEC 14882:1998, Programming Languages C++. International
Standard for Information Systems, 1998. ISO Standard ISO/IEC
14882:1998.
1

2
3

., ., ., . %%
. . . .
.: , 2001, 2007.
. . . , 2004.
. . %. %
. . . , 2009.

691

(ISO 99)

ISO/IEC 9899:1999, Programming Languages C. International Stan%


dard for Information Systems, 1999. ISO Standard ISO/IEC 9899:1999.
(ISO 05)
ISO/IEC 23270:2003, Information technology C# Language Specifi#
cation. International Standard for Information Systems, 2005. ISO Stan%
dard ISO/IEC 23270:2003.
(Jackson 75)
Jackson, M.A. Principles of Program Design. Academic Press, 1975.
0123790506.
(Javadoc)
Javadoc. Sun Microsystems, Inc. http://java.sun.com/products/jdk/ jav%
adoc.
(Kernighan Pike 99)
Kernighan, Brian W., and Rob Pike. The Practice of Programming. Add%
ison%Wesley, 1999. 020161586X.1
(Kernighan Plaugher 76)
Kernighan, Brian W., and P.J. Plaugher. Software Tools. Addison% Wes%
ley, 1976. 020103669X.
(Kernighan Plaugher 78)
Kernighan, Brian W., and P.J. Plaugher. The Elements of Programming
Style. McGraw%Hill, 1978. 0070341990.
(Kernighan Ritchie 88)
Kernighan, Brian W., and Dennis M. Ritchie. The C Programming Lan#
guage. Prentice Hall, 1988. Second Edition. 0131103628.2
(Knuth 92)
Knuth, Donald. Literate Programming. CSLI Publications, 1992.
0937073806.
(Kurlansky 99)
Kurlansky, Mark. The Basque History of the World. Jonathan Cope,
1999. 0224060554.
(McConnell 96)
McConnell, Steve. Rapid Development. Microsoft Press, 1996.
1556159005.
(McConnell 04)
McConnell, Steve. Code Complete: A Practical Handbook of Software
Construction. Microsoft Press, 2004. Second Edition. 0735619670.3
1

. . . . . :
, 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.

ad hoc, , 537, 682, 685


API, 36, 101, 326, 356, 366, 474
Ariane 5, 406
assert, , 47, 91, 152,
191, 582, 595, 616
autoconf, 173
automake, 173
awk, , 169

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

PDL (Program Design Language


), 336
PERT (Program Evaluation and Review
Technique
), 520
pimpl, 39, 101
PRINCE (Projects in Controlled Environ%
ments
), %
, 520, 542
printf, , 304
ProperCase, , 81

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

UML (Unified Modeling Language %


),
335
UNIX, 141, 156, 161

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

, 297, 300306, 310, 313, 639


, 478
, 199

, 198


( ), 60

(UML), 335
, 457
, 456
, 153
,
547

,
%, 238
, 241

 
Books.Ru 
ISBN 9785932861271,
. 
 Books.Ru .
 , 

. , 
 (piracy@symbol.ru),
.

Вам также может понравиться