Escolar Documentos
Profissional Documentos
Cultura Documentos
ndice general
1
Programacin
1.1
Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
Lxico y programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Programas y algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4
Compilacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5
1.6
Referencias histricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7
Objetivos de la programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8
1.9
Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.10 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Portal:Programacin
&
3.1
Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3
Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Acoplamiento secuencial
4.1
Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Adobe Director
5.1
Interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2
Timeline
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3
Director y Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
5.4
Shockwave / Shockwave 3D
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
5.5
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
5.6
Enlaces externos
10
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anidamiento (informtica)
12
6.1
12
ii
NDICE GENERAL
6.2
En programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
6.3
Vase tambin
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Antipatrn de diseo
13
7.1
13
7.1.1
Antipatrones de gestin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
7.1.2
14
7.1.3
. . . . . . . . . . . . . . . . . . . . . . . .
14
7.1.4
Antipatrones de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
7.1.5
Antipatrones metodolgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
7.1.6
. . . . . . . . . . . . . . . . . . . . . . . . .
16
7.2
17
7.3
17
7.4
Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
7.5
Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
Archivo de cabecera
21
8.1
Motivacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
8.2
Alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
8.3
Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
8.4
Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Asercin (informtica)
24
9.1
24
9.1.1
24
9.1.2
24
9.1.3
25
9.1.4
Aserciones estticas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
9.2
25
9.3
25
9.4
Enlaces externos
26
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 Automatizacin de tareas
27
11 Base de cdigo
28
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 Bean
28
29
29
29
13 Beta tester
30
13.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
30
NDICE GENERAL
iii
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
13.4 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
31
14.1 UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
31
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 Binding
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
15.2 Informtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
33
33
33
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
16.5 Livelock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
16.4 Prevencin
17 Bodyshopping
35
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
18 BrookGPU
36
37
37
38
20.1 Justicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
38
38
38
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 CamelCase
40
21.1 Usos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
40
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22 Caml
22.1 Ejemplos
41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
41
42
iv
NDICE GENERAL
22.2 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
22.3 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
42
22.4.1 Libros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
43
43
43
24 Clase utilidad
44
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
25 Clear.gif
45
26 CMake
46
26.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
46
46
47
47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
48
27.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
48
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
27.4 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
49
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28 Cdigo cerrado
28.1 Vase tambin
50
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
29 Cdigo compilado
51
30 Cdigo mutante
52
31 Cdigo objeto
53
53
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
31.3 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
53
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32 Ofuscacin
32.1 Informtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
54
NDICE GENERAL
32.1.1 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
54
55
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 ColdFusion
56
33.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
33.2 Versiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
57
57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34 Coloreado de sintaxis
58
34.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
58
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35 Comentario (informtica)
59
59
35.2 Usos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
60
60
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
60
35.2.5 Depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
61
35.3 Estilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
35.3.1 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
35.4 Curiosidades
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.1 Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.2 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.3 C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.4 Delphi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.5 Lua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.6 Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.7 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.8 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.9 Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
62
35.5.11 SQL
62
35.5 Ejemplos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.13 Pauscal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.5.14 PHP
62
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
NDICE GENERAL
35.5.15 Cobol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
35.6 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
63
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36 Compatibilidad (informtica)
64
64
36.2 Emulacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
36.3 OpenSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
66
37.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
66
. . . . . . . . . . . . . . . . . . . . . . . . . .
67
67
37.5 Ganadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
37.7 Enlaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
68
38 Computacin parasitaria
69
38.1 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
69
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39 Conectiva lgica
70
39.1 Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
70
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
39.4 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
72
73
73
73
73
39.3 Redundancia
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
39.8 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
73
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NDICE GENERAL
vii
40 Conguracin regional
74
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
40.2 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
74
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41 Conteo de referencias
41.1 Vase tambin
75
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
76
76
42.2 Desafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
76
77
77
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
77
78
78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
42.6.2 Ada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
42.6.3 C y C++
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.4 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.5 JavaScript
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.6 Lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.7 .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.8 Objective-C
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
42.6.9 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
80
42.6.1 ActionScript
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
42.8 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
80
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43 Cracking (software)
43.1 Vase tambin
81
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
44 Cuaderno de carga
82
45 Curricacin
83
45.1 Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
45.2 Denicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
viii
NDICE GENERAL
45.3 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
83
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46 Cdigo enhebrado
84
84
85
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
85
86
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
86
87
46.4 Bifurcaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
87
46.6 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
87
88
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 Cdigo inalcanzable
47.1 Causas
89
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
47.2 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
47.3 Anlisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
47.3.1 Proling
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
47.5 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
47.6 Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
90
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48 Cdigo muerto
91
48.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
48.2 Anlisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
48.4 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
48.5 Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
91
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49 Cdigo redundante
49.1 Ejemplos
93
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
49.2 Eliminacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
49.4 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
NDICE GENERAL
ix
50 Dato
94
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
51 Depuracin de programas
95
51.1 Origen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
51.2 Aplicacin
95
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52 Desarrollador de software
52.1 Vase tambin
95
96
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53 Desarrollo en cascada
96
97
97
97
97
98
53.1.4 Codicacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.1.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.1.6 Vericacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.1.7 Mantenimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.2 Variantes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.3 Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.4 Desventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
53.6 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
99
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54 Desarrollo en espiral
54.1 Introduccin
100
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
103
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
NDICE GENERAL
55.2 Ciclo de vida
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
. . . . . . . . . . . . . . . . . . . . . . 103
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
107
108
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
110
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
58.10Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
58.11Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
59 Diagrama Nassi-Shneiderman
114
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
115
NDICE GENERAL
xi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
61 Direccin de retorno
118
62 Diseo estructurado
119
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
63 Distancia de Damerau-Levenshtein
122
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
123
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
xii
NDICE GENERAL
64.3 Aplicaciones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
126
127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
129
132
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
69 Efecto Hover
133
134
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
NDICE GENERAL
xiii
71 Enlace dinmico
135
72 Enlace esttico
136
73 Enlazado
137
74 Entrada chapuza
138
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
75 Error de software
139
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
. . . . . . . . . . . . . . . . . . . . . . . . . . 140
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
76 Estilo de programacin
142
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
144
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
145
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
146
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
xiv
NDICE GENERAL
79.4.1 El punto ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
79.4.2 La admiracin "!"
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
80 Flag
153
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
81 Front-end y back-end
154
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
156
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
158
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
159
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
161
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
NDICE GENERAL
xv
86 GPGPU
163
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
87 Hackathon
165
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
88 Hacker
166
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
172
173
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
xvi
NDICE GENERAL
91 Hola mundo
91.1 Vase tambin
174
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
175
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
94 Anexo:Implementaciones de Smalltalk
181
182
NDICE GENERAL
xvii
95.4 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
95.5 Perl 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.6 Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.7 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.8 Transact-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.9 MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.10PSeInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.11Python
95.12Ruby
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.13Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
95.14Pl/pgsql de PostgreSql
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
96 Inanicin (informtica)
185
97 Indireccin
186
187
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
99 Ingeniera de software
189
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
. . . . . . . . . . . . . . . . 191
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
. . . . . . . . . . . . . . . . . . . . . . . . 195
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
xviii
NDICE GENERAL
99.8.6 Modelo RAD (rapid application development) . . . . . . . . . . . . . . . . . . . . . . . . 197
99.8.7 Modelo de desarrollo concurrente
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
. . . . . . . . . . . . . . . . . . . . . . . . . . 199
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
99.14Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
99.15Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
99.16Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
100Instancia (informtica)
100.1Etimologa
202
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
204
101.1Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
101.2Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
101.3Repertorio
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
101.4Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
206
102.1Descripcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
102.2EABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
102.3Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
102.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
102.5Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
103Interfaz uida
208
103.1Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
103.2Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
NDICE GENERAL
xix
104Invariante (informtica)
210
104.1Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
105Jframe
105.1Herencia
211
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
105.2Constructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
105.3Mtodos propios de la clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
105.4Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
106Usuario discusin:Juliasocorro
213
107Kanban (desarrollo)
215
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
218
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
108.5Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
108.6Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
108.7Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
109Kommander
220
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
109.3Direcciones de Kommander
110Last Error (informtica)
110.1Errores personalizados
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
221
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
222
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
xx
NDICE GENERAL
111.2.3 Comerciales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
111.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
111.5Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
112Macintosh Toolbox
225
113Macro
226
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
113.4Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
114Malla de tringulos 3D
227
114.1Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
114.2Obtencin de las mallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
114.3Compresin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
115Mapeo objeto-relacional
229
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
115.5Enlaces relacionados
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
116Mquina de estados
231
117Mquina desnuda
232
118MCML
233
118.1Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
119Metaprogramacin
234
235
121Modelo de prototipos
236
121.1Etapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
121.2Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
121.3Inconvenientes
121.4Conclusiones
121.5Vase tambin
122Modicador
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
238
NDICE GENERAL
xxi
122.1Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
123Modularidad
239
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
124Mdulo (informtica)
241
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
125Monitor (concurrencia)
242
125.1Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
125.2Exclusin mutua en un monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
125.3Tipos de monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
125.3.1 Tipo Hoare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
125.3.2 Tipo Mesa
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
. . . . . . . . . . . . . . . . . . . . . . . . . . 244
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
125.6Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
126Anexo:Motores de persistencia
245
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
248
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
127.2Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
xxii
NDICE GENERAL
127.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
128Net Yaroze
249
128.1Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
128.2Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
128.3Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
129Nodo (informtica)
251
129.1Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
129.2Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
130Notacin Reddick
252
130.1Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
130.2Notacin para objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
130.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
131Notacin hngara
131.1Ejemplos
253
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
132Null
254
133NWNScript
255
133.1Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
134Objeto todopoderoso
256
134.1Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
134.2Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
134.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
135Oday
257
136Oset (informtica)
258
136.1Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
136.2Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
137OGNL
259
137.1Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
137.2Cadenas (chains) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
137.3Proyectos que usan OGNL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
137.4Enlaces externos
138OpenACS
138.1Arquitectura
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
260
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
NDICE GENERAL
xxiii
138.2Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
138.3Vase tambin
138.4Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
261
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
140Operador
262
265
141.1En informtica
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
141.2Conexiones externas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
266
142.1Especicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
142.2Cuerpo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
143Pascal Casing
268
143.1Enlaces externos
144Patch (Unix)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
269
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
270
145.1Detalles tcnicos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
xxiv
NDICE GENERAL
146Plataforma de desarrollo
146.1Vase tambin
272
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
273
147.1Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
147.2Herramientas que las componen
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
148Polling
275
148.1Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
148.2Polling del registro de Windows
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
149Poltergeist (informtica)
149.1Consecuencias
277
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
149.2Solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
149.3Vase tambin
149.4Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
150Portabilidad
150.1Vase tambin
278
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
150.2Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
151Postcondicin
279
280
152.1Programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
152.2Vase tambin
152.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
153Precondicin
281
282
154.1Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
154.2Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
NDICE GENERAL
xxv
155Proceso (informtica)
283
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
155.6Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
155.7Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
156Proceso para el desarrollo de software
286
156.1Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
156.2Actividades del desarrollo de software
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
. . . . . . . . . . . . . . . . . . . . . . . . . 286
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
156.7Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
156.8Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
157Programa informtico
291
157.1Programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
157.1.1 Paradigmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
157.1.2 Compilado o interpretando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
157.1.3 Programas que se auto-modican
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
. . . . . . . . . . . . . . . . . . . . . . . . . . . 293
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
157.5Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
157.6Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
xxvi
NDICE GENERAL
157.7Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
158Programa interactivo
296
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
297
159.1Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
160Programacin visual
298
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
161Programador
299
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
162Pseudocdigo
162.1Aplicaciones
301
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
162.2Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
162.3Denicin de datos del pseudocdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
162.4Funciones y operaciones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
162.7Funciones y procedimientos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
. . . . . . . . . . . . . . . . . . . . . . . 304
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
162.10Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
162.11Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
162.12Vase tambin
163Puente de aplicacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
305
NDICE GENERAL
xxvii
164Puntero inteligente
306
308
165.1Tipos de objetos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
165.7Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
166QuadTIN
313
167Query string
314
167.1Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
168Quest3D
315
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
168.5Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
168.6Enlaces externos
169Quine (programa)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
317
169.1Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.1 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.2 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.3 Scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.4 Common Lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.5 Ocaml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.6 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
169.1.7 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
xxviii
NDICE GENERAL
169.1.8 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.9 BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.10Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.11Brainfuck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.12HQ9+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.13DOS Batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.14PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.15PL/I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
169.1.16PostScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
169.1.17Visual FoxPro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
320
170.1Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
170.2Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
170.3Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
170.4Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
171Recolector de basura
321
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
. . . . . . . . . . . . . . . . . . . . . . . . . . . 322
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
172Recursin
323
172.1Recursin en matemticas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
172.5Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
172.6Enlaces externos
173Refactorizacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
326
NDICE GENERAL
173.3Etimologa
xxix
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
173.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
173.5Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
174Reexin (informtica)
328
174.1Implementacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
174.2Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
174.2.1 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
174.2.2 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
174.3Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
329
330
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
177Instancia (programacin)
333
335
179scanf
336
179.0.1 Modicantes de longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
179.1Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
179.2Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
179.3Funciones derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
179.3.1 fscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
179.3.2 sscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
179.4Vase tambin
179.5Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
xxx
NDICE GENERAL
180SCons
180.1Vase tambin
340
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
180.2Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
181Screen scraping
181.1Vase tambin
341
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
182Seccin crtica
182.1Vase tambin
342
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
183Serializacin
343
183.1Usos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
183.2Soporte en los lenguajes de programacin
183.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
184Sigil
344
185Signatura (informtica)
345
186Signum Framework
346
186.1Caractersticas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
348
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
187.2Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
187.3Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
187.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
187.5Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
187.5.1 Documentacin de SNL
187.6Enlaces externos
188Smarty
188.1Caractersticas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
349
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
188.2Crticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
188.3Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
188.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
NDICE GENERAL
xxxi
188.5Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
189Snippet
351
352
354
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
192Stub
355
192.1Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
192.2Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
193Subalgoritmo
356
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
194Tabla de saltos
357
194.1Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
194.2Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
194.3Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
195Tabla de verdad
359
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
. . . . . . . . . . . . . . . . . . 362
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
xxxii
NDICE GENERAL
195.5.2 Lgica de circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
195.5.3 Desarrollo del algoritmo fundamental en lgica de circuitos . . . . . . . . . . . . . . . . . 363
195.6Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
196Thunk
366
. . . . . . . . . . . . . . . . . . . . . . . . . . . 366
. . . . . . . . . . . . . . . . . . . . . . . . . . . 366
196.3Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
197Tipo de dato elemental
367
198Tringulo de Floyd
368
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
198.3Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
199Tubera (informtica)
369
371
200.1Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
201Waf
372
201.1Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
201.2Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
201.3Ejemplo Waf archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
201.4Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
201.5Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
201.6Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
374
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
375
203.1Computacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
203.2Vase tambin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
203.3Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
204XAML
204.1Tecnologa
204.2Ejemplos
376
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
NDICE GENERAL
204.3Vase tambin
xxxiii
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
204.4Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
204.5Enlaces externos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
205Zenphp
205.1Qu es zenphp?
378
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Captulo 1
Programacin
La programacin informtica, acortada como programacin, es el proceso de disear, codicar, depurar y
mantener el cdigo fuente de programas computacionales. El cdigo fuente es escrito en un lenguaje de programacin. El propsito de la programacin es crear programas que exhiban un comportamiento deseado. El proceso
de escribir cdigo requiere frecuentemente conocimientos en varias reas distintas, adems del dominio del lenguaje a utilizar, algoritmos especializados y lgica formal. Programar no involucra necesariamente otras tareas
tales como el anlisis y diseo de la aplicacin (pero s el
diseo del cdigo), aunque s suelen estar fusionadas en
el desarrollo de pequeas aplicaciones.
Para crear un programa, y que la computadora lo interprete y ejecute las instrucciones escritas en l, debe escribirse en un lenguaje de programacin. En sus inicios
las computadoras interpretaban solo instrucciones en un
lenguaje especco, del ms bajo nivel, conocido como
cdigo mquina, siendo ste excesivamente complicado
para programar. De hecho solo consiste en cadenas de
nmeros 1 y 0 (sistema binario). Para facilitar el trabajo
de programacin, los primeros cientcos, que trabajaban en el rea, decidieron reemplazar las instrucciones,
secuencias de unos y ceros, por palabras o abreviaturas
provenientes del ingls; las codicaron y crearon as un
lenguaje de mayor nivel, que se conoce como Asembly
o lenguaje ensamblador. Por ejemplo, para sumar se podra usar la letra A de la palabra inglesa add (sumar).
En realidad escribir en lenguaje ensamblador es bsicamente lo mismo que hacerlo en lenguaje mquina, pero
las letras y palabras son bastante ms fciles de recordar
y entender que secuencias de nmeros binarios. A medida que la complejidad de las tareas que realizaban las
computadoras aumentaba, se hizo necesario disponer de
un mtodo sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan
En los lenguajes de programacin de alto nivel se distinguen diversos elementos entre los que se incluyen el lxico propio del lenguaje y las reglas semnticas y sintcticas.
CAPTULO 1. PROGRAMACIN
Se han propuesto diversas tcnicas de programacin cuyo objetivo es mejorar tanto el proceso de creacin de Existe una tendencia a identicar el proceso de creacin
software como su mantenimiento. Entre ellas, se pueden de un programa informtico con la programacin, que es
mencionar las siguientes:
cierta cuando se trata de programas pequeos para uso
personal, y que dista de la realidad cuando se trata de
grandes proyectos.
Programacin declarativa
Programacin estructurada
Programacin modular
Programacin orientada a objetos
1.4 Compilacin
El programa escrito en un lenguaje de programacin de
alto nivel (fcilmente comprensible por el programador)
es llamado programa fuente y no se puede ejecutar directamente en una computadora. La opcin ms comn
es compilar el programa obteniendo un mdulo objeto,
aunque tambin puede ejecutarse en forma ms directa a
travs de un intrprete informtico.
El cdigo fuente del programa se debe someter a un
proceso de traduccin para convertirlo a lenguaje mquina o bien a un cdigo intermedio, generando as un mdulo denominado objeto. A este proceso se le llama
compilacin.
El proceso de creacin de software, desde el punto de vista de la ingeniera, incluye mnimamente los siguientes
pasos:
1. Reconocer la necesidad de un programa para solucionar un problema o identicar la posibilidad de
automatizacin de una tarea.
2. Recoger los requisitos del programa. Debe quedar
claro qu es lo que debe hacer el programa y para
qu se necesita.
3. Realizar el anlisis de los requisitos del programa.
Debe quedar claro qu tareas debe realizar el programa. Las pruebas que comprueben la validez del
programa se pueden especicar en esta fase.
4. Disear la arquitectura del programa. Se debe descomponer el programa en partes de complejidad
abordable.
3
Portabilidad. Un programa es portable cuando tiene
la capacidad de poder ejecutarse en una plataforma,
ya sea hardware o software, diferente a aqulla en la
que se desarroll. La portabilidad es una caracterstica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha elaborado
para el sistema GNU/Linux ejecutarse tambin en la
familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a ms usuarios
ms fcilmente.
La programacin debe perseguir la obtencin de programas de calidad. Para ello se establece una serie de factores El trmino ciclo de vida del software describe el desaque determinan la calidad de un programa. Algunos de los rrollo de software, desde la fase inicial hasta la fase nal,
incluyendo su estado funcional. El propsito es denir las
factores de calidad ms importantes son los siguientes:
distintas fases intermedias que se requieren para validar
Correctitud. Un programa es correcto si hace lo que el desarrollo de la aplicacin, es decir, para garantizar que
debe hacer tal y como se estableci en las fases pre- el software cumpla los requisitos para la aplicacin y vevias a su desarrollo. Para determinar si un progra- ricacin de los procedimientos de desarrollo: se asegura
ma hace lo que debe, es muy importante especi- que los mtodos utilizados son apropiados. Estos mtodos
car claramente qu debe hacer el programa antes de se originan en el hecho de que es muy costoso recticar
su desarrollo y, una vez acabado, compararlo con lo los errores que se detectan tarde dentro de la fase de implementacin (programacin propiamente dicha), o peor
que realmente hace.
aun, durante la fase funcional. El modelo de ciclo de vida
Claridad. Es muy importante que el programa sea permite que los errores se detecten lo antes posible y por
lo ms claro y legible posible, para facilitar tanto su lo tanto, permite a los desarrolladores concentrarse en la
desarrollo como su posterior mantenimiento. Al ela- calidad del software, en los plazos de implementacin y
borar un programa se debe intentar que su estructu- en los costos asociados. El ciclo de vida bsico de un softra sea sencilla y coherente, as como cuidar el es- ware consta de, al menos, los siguientes procedimientos:
tilo de programacin. De esta forma se ve facilita Denicin de objetivos: denir el resultado del prodo el trabajo del programador, tanto en la fase de
yecto y su papel en la estrategia global.
creacin como en las fases posteriores de correccin
de errores, ampliaciones, modicaciones, etc. Fases
Anlisis de los requisitos y su viabilidad: recopilar,
que pueden ser realizadas incluso por otro prograexaminar y formular los requisitos del cliente y examador, con lo cual la claridad es an ms necesaria
minar cualquier restriccin que se pueda aplicar.
para que otros puedan continuar el trabajo fcilmente. Algunos programadores llegan incluso a utilizar
Diseo general: requisitos generales de la arquitecArte ASCII para delimitar secciones de cdigo; una
tura de la aplicacin.
prctica comn es realizar aclaraciones en el cdigo
Diseo en detalle: denicin precisa de cada subfuente utilizando lneas de comentarios. Contrariaconjunto de la aplicacin.
mente, algunos por diversin o para impedirle un
anlisis cmodo a otros programadores, recurren al
Programacin (programacin e implementacin): es
uso de cdigo ofuscado.
la implementacin en un lenguaje de programacin
para crear las funciones denidas durante la etapa de
Eciencia. Se trata de que el programa, adems de
diseo.
realizar aquello para lo que fue creado (es decir, que
Prueba de unidad: prueba individual de cada subsea correcto), lo haga gestionando de la mejor forconjunto de la aplicacin para garantizar que se imma posible los recursos que utiliza. Normalmente,
plementaron de acuerdo con las especicaciones.
al hablar de eciencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la ta Integracin: para garantizar que los diferentes
rea para la que ha sido creado y a la cantidad de
mdulos y subprogramas se integren con la aplicamemoria que necesita, pero hay otros recursos que
cin. ste es el propsito de la prueba de integracin
tambin pueden ser de consideracin para mejorar
que debe estar cuidadosamente documentada.
la eciencia de un programa, dependiendo de su na Prueba beta (o validacin), para garantizar que el
turaleza (espacio en disco que utiliza, trco en la
software cumple con las especicaciones originales.
red que genera, etc.).
CAPTULO 1. PROGRAMACIN
Documentacin: se documenta con toda la informacin necesaria, sea funcional nal para los usuarios
del software (manual del usuario), y de desarrollo
para futuras adaptaciones, ampliaciones y correcciones.
Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento
continuo).
Wikiproyecto:Informtica/Programacin
error de software
losofas del desarrollo de software
historia de la ingeniera del software
ingeniera en computacin
Desarrollo De Software
ingeniera en informtica
lnea de cdigo fuente
lenguaje de programacin
programacin automtica
programacin dirigida por eventos
programacin estructurada
programacin extrema
programacin en pareja
programacin dinmica
programacin orientada a objetos
pruebas de software
software
1.10 Referencias
[1] Laboda, Xavier; Josep Galimany, Rosa Mara Pena, Antoni Gual (1985). Software. Biblioteca prctica de la
computacin. Barcelona: Ediciones Ocano-xito, S.A.
Captulo 2
Portal:Programacin
Captulo 3
&
El signo en s es una ligadura combinacin de diseo de
dos letras en un nico grafema, usado primero para aumentar la velocidad de la escritura manualdesarrollada
por Marco Tulio Tirn, secretario del gran orador romano
Cicern. Para poder registrar los discursos y la correspondencia dictada por este ltimo, Tiro, que era un esclavo liberto, invent varias formas de acelerar la escritura, siendo por ello considerado el padre de la taquigrafa. En la
Edad Media o en los primeros tiempos de la imprenta el
uso de ligaduras era muy comn, en este caso por la economa de espacio, cuando la materia prima pergamino
o papelaada mucho al precio de los libros.
El signo &, cuyo nombre en espaol es et,* [1] es una alternativa grca de la conjuncin copulativa latina et, que
signica y de la que deriva la espaola y.
3.1 Historia
Un uso extendido es el que persiste en la bibliografa acadmica en ingls, en la enumeracin de los autores, in- El smbolo fue usado en el antiguo Imperio romano, y su
cluidas la expresin como & al. (del latn et alii, plural uso data del primer siglo d.C. Se adjudica su invencin a
masculino, o et alia, plural neutro) que se traduce como Marco Tulio Tirn.* [2]
y otros.
Para el siglo viii, la caligrafa occidental estaba bien desarrollada, particularmente en la forma uncial, escritura insular y minscula carolingia. Los calgrafos hicieron un
extensivo uso del et, ya que la condensacin de una palabra en una sola letra haca su trabajo ms fcil. Durante
aquel tiempo, se desarroll una versin mucho ms comprimida del et. Normalmente se le llama ampersandRoEn la tipografa de la derecha es evidente el origen de la ligadura mana.
et.
3.2 Referencias
[1] Real Academia Espaola (2001). Apndice 4: Lista de
smbolos o signos no alfabetizables. Diccionario de la
lengua espaola. Consultado el 25 de septiembre de 2012.
[2] The History of Court Reporting. National Court Reporters Association.
Captulo 4
Acoplamiento secuencial
En Programacin orientada a objetos el antipatrn de diseo acoplamiento secuencial se reere a una clase que
requiere que sus mtodos sean llamados en un orden secuencial particular.
Los mtodos cuyo nombre comienza por Init, Begin, en
Inicio, etc puede indicar la existencia de acoplamiento
secuencial.
Usando el ejemplo de un coche a modo de analoga, si el
usuario sigue los pasos de acelerar sin antes arrancar el
motor, el coche no se mueve y enva una Excepcin.
Las excepciones son aceptables en algunas ocasiones porque los programas (en particular los grandes) necesitan la
informacin para determinar por qu en un objeto no se
est realizando el comportamiento esperado cuando uno
de sus mtodos es llamado. La inicializacin de objetos
no siempre es posible en el constructor y puede ser necesario retrasarla a un momento posterior.
El acoplamiento secuencial puede ser reprogramado con
el Template Method (patrn de diseo)* [1] para superar
los problemas planteados por el uso de este antipatrn.
4.2 Referencias
[1] Andriy, Buday. Refactor: Acoplamiento secuencial =>
Template Method. The Code Project. Consultado el 23
de abril de 2011.
Captulo 5
Adobe Director
Adobe Director Es una aplicacin de Desarrollo de
Software (o Autora de Software) Multimedia (que inspir a Adobe Flash ) destinado para la produccin de
programas ejecutables ricos en contenido multimedia. Es
considerada una de las herramientas ms poderosas de
integracin y programacin de medios digitales, debido a
su versatilidad de poder incorporar imgenes, audio, vdeo digital, pelculas ash, y un engine 3D, en una sola
aplicacin, y manipularlas a travs de un lenguaje de programacin (Lingo; Javascript).
5.1
Interfaz
A lo largo de todas sus versiones, la interfaz de Director ha sido el a su concepcin inicial, y a su nombre:
entregarle al desarrollador un escenario (Stage), para el
armado de su Aplicacin. Cada uno de los mltiples medios que pueden ser utilizados en Director son consideradosactores(casts), cuyas caractersticas pueden ser
manipuladas a travs de guiones (o Scripts) escritos en
lenguaje Lingo o Javascript. En sntesis, el desarrollador
es el director de su propia pelcula, controlando todos sus
aspectos.
5.2 Timeline
1985: VideoWorks (Disponible para Apple Macintosh)
1988: Director 1.0
Se pueden generar varios tipos de archivos, sin embargo lo ms normal es crear un archivo ejecutable para
Windows (.exe) o Macintosh (.app). De esta forma puede verse la presentacin en cualquier ordenador, sin tener
instalado Adobe Director.
10
1997: Macromedia Director 6.5 (integracin de
Xtras)
Desde la aparicin de Director 5, Shockwave es el for 1998: Macromedia Director 7 (Se re-escribi el en- mato exclusivo de publicacin para web de Director. El
gine)
plugin de shockwave permite ejecutar aplicaciones realizadas en Director (archivos DCR), a travs de Internet,
2000: Macromedia Director 8
sin que estas pierdan su calidad ni caractersticas, adems
de aprovechar al mximo las potencialidades de aquellas
2001: Macromedia Director 8.5 (Aparicin de que poseen engine multiusuario. Con la aparicin de Director 8.5, Shockwave tuvo un nuevo impulso, al incorShockwave3D)
porar capacidades de manipulacin de elementos en 3D
2002: Macromedia Director MX (Tambin conoci- (Shockwave 3D). Esto abri las puertas a los desarrolladores de Director a un nuevo mundo, a partir del cual fue
do como Director 9)
posible crear ambientes modelados en 3D (generados en
2004: Macromedia Director MX 2004 (Tambin Director, o importados como archivos W3D desde aplicaciones externas) y utilizar toda la riqueza del cdigo linconocido como Director 10)
go / javascript, para manipular dichos modelos en tiempo
real.
2008: Adobe Director 11
El motor 3D de Shockwave es todava el lder indiscutible en su mercado, y hace que este plugin sea muy popular
entre un gran nmero de desarrolladores de juegos en lnea y de jugadores. Los archivos Flash (swf) pueden ser
2010: Adobe Director 11.5.8
incorporados a Director y ser ejecutados en Shockwave,
2013: Adobe Director 12. (Publicacin a dispositi- pero no a la inversa.
vos iOS, estereoscopa, mejora de Engine 3D)
Otras caractersticas no incorporadas por Flash incluyen un motor de render mucho ms rpido, junto con
aceleracin 3D por medio de hardware, acceso directo
al pxel en imgenes bitmap, diferentes modos de ltrado
5.3 Director y Flash
para composiciones en capas de los grcos y compatibilidad con diversos protocolos de red, incluido Internet
Histricamente, la comunidad ms cercana a Flash y Relay Chat. Adems, a travs de los Xtras, los desarrodesconocedora de Director, tiende a preguntarse sobre lladores pueden ampliar la funcionalidad de Shockwave
las comparaciones entre ambos programas. Literalmen- con aplicaciones hechas a medida.
te, Director y Flash no son competidores. Flash naci en
1996, orientado al desarrollo de aplicaciones multimedia
Macromedia Shockwave Player, instalado en un
en Web, y en poco tiempo evolucion poderosamente de
50% de los navegadores. Ficheros con extensin
la mano del lenguaje ActionScript. Director naci varios
".dcrdesarrollados con Adobe Director
aos antes (1985), y evolucion como una poderosa herramienta de integracin de medios digitales de alta cali Macromedia Flash Player, instalado en un 98%
dad para plataformas de escritorio, y que tambin gener
de los navegadores. Utiliza cheros con extensin
una arista para su incorporacin a Web (Shockwave).
".swfdesarrollados con Macromedia Flash, Macro 2009: Adobe Director 11.5
La evolucin de la popularidad de Flash sobre Shockwave tiene varias explicaciones; no solo el plugin de Shockwave fue histricamente ms pesado y menos amigable
de instalar que Flash, sino tambin la autora de Director siempre ha requerido la mano de un desarrollador de
software, con conocimientos en programacin; en cambio
Flash se posicion rpidamente en el universo de diseadores Web (sin necesidad de poseer conocimientos de
programacin), y de hecho ha incentivado con los aos el
aprendizaje de programacin ActionScript a varios no
programadores, generando una importante sinergia en
el mundo del diseo y la programacin -antes estrictamente lejanos-. Por otro lado, Macromedia logr acuerdos con empresas como DELL y Apple, para que Flash
sea preinstalado en sus sistemas, evitando que los usuarios
deban instalar software adicional.
5.5 Referencias
5.6 Enlaces externos
Sitio ocial de Adobe Director
Adobe Director Forum
Director-Online.com Foro temtico sobre el programa (en ingls).
Foro de usuarios de Adobe Director (en ingls).
11
Captulo 6
Anidamiento (informtica)
El anidamiento (llamado nesting en ingls) es la
prctica de incorporar llamadas (calls) a funciones o
procedimientos (unas) dentro de otras, mediante la inclusin de diversos niveles de parntesis.
Procedimiento (programacin)
En las hojas de clculo, se suelen anidar o agrupar funciones unas dentro de otras, derivando en frmulas relativamente complejas. El programa OpenOce.org Calc
permite, mediante su asistente de funciones (function wizard), navegar a travs de los varios o mltiples niveles
de anidamiento, permitiendo editar (y eventualmente corregir) cada una de ellas por separado. Tal vez de manera
sorprendente, su rival Microsoft Excel no posee esa caracterstica, eventualmente deseable cuando se trabaja en
algunas grandes planillas.
6.2 En programacin
En los lenguajes de programacin estructurada, el anidamiento est relacionado a la inclusin de estructuras de
control dentro de otras, usualmente indicado mediante la
inclusin de distintos niveles de sangra (llamada indentation en ingls) dentro del cdigo fuente, como se muestra
en el sencillo cdigo BASIC siguiente:
function BuscarCodigo(cod as string) as integer dim
12
Programacin estructurada
Pseudocdigo
Captulo 7
Antipatrn de diseo
Un antipatrn de diseo es un patrn de diseo que invariablemente conduce a una mala solucin para un problema.
Al documentarse los antipatrones, adems de los patrones de diseo, se dan argumentos a los diseadores de
sistemas para no escoger malos caminos, partiendo de
documentacin disponible en lugar de simplemente la
intuicin.
El trmino se origina inspirado en el libro Design Patterns,
escrito por un grupo de autores conocido como Gang of
Four, y que aglutina un conjunto de buenas soluciones
de programacin. Los autores bautizaron dichas soluciones con el nombre de patrones de diseopor analoga con el mismo trmino, usado en arquitectura. El libro
Anti-Patterns (de William Brown, Raphael Malveau, Skip
McCormick y Tom Mowbray, junto con la ms reciente
incorporacin de Scott Thomas) describe los antipatrones
como la contrapartida natural al estudio de los patrones
de diseo. El estudio formal de errores que se repiten permite reconocer y reconducir los elementos involucrados
hacia una mejor solucin. Los antipatrones no se mencionan en el libro original de Design Patterns, puesto que
ste es anterior.
Los antipatrones se consideran una parte importante de
una buena prctica de programacin. Es decir, un buen
programador procurar evitar los antipatrones siempre
que sea posible, lo que requiere su reconocimiento e identicacin tan pronto como sea posible, dentro del ciclo de
vida del software.
El concepto de antipatrn se puede aplicar a la ingeniera
en general, e incluso a cualquier tarea realizada por el
hombre. Aunque no se escucha con frecuencia fuera del
campo ingenieril, la nocin est ampliamente extendida.
7.1 Algunos
antipatrones
desarrollo de software
7.1.1
de
Antipatrones de gestin
Productividad a toda costa: La empresa busca la productividad a costa de la calidad del software y de la
13
calidad de vida de sus empleados, intenta homogeneizar los puestos de trabajo quitando en la medida
de lo posible los permisos a los programadores para
que no daen los sistemas operativos, monitoriza a
los equipos de trabajo y acta cortando la visibilidad de ciertas pginas o las reuniones de programadores, al nal se consigue que se vaya la gente de
la empresa cuando la situacin es insostenible, esto
suele ocurrir en ciclos de uno o dos aos.
Responsable ausente (absentee manager): Situacin
en la que el principal responsable o coordinador se
ausenta o permanece en paradero desconocido o no
localizable durante importantes perodos de tiempo.
Todo lo que tienes es un martillo (all you have is a
hammer): Gestin gris y plana, incapaz de tratar a
los subordinados de manera personalizada y acorde
con sus necesidades particulares.
Negociador de jaula de acero (cage match negotiator): Se aplica cuando un coordinador, gestor o responsable aplica una losofa de "xito a cualquier
precio.
Dos caras (doppelganger): Coordinador o compaero que en un determinado momento puede ser agradable y de trato fcil, pero igualmente puede volverse irracional y despiadado de modo inesperado.
Rodeos improductivos (fruitless hoops): Gestor o
coordinador que solicita grandes cantidades de datos (en ocasiones sin relevancia alguna) antes de tomar una decisin.
Niito de oro (golden child): Situacin en la que
ciertas responsabilidades, oportunidades, reconocimientos o recompensas van a parar a un determinado miembro del equipo como consecuencia de una
relacin personal o en clara contradiccin con su
rendimiento real.
Pollo sin cabeza (headless chicken): Se aplica al gestor, coordinador o responsable que vive en una permanente situacin de pnico y medidas desesperadas.
14
Mala gestin (bad management): Gestionar un proyecto sin tener sucientes conocimientos sobre la
materia.
Gestor pero no lder (manager not leader): Un coor- 7.1.3 Antipatrones generales de diseo de
dinador brillante en sus deberes administrativos y de
software
gestin, pero que carece de habilidades de liderazgo.
Base de datos como comunicador de procesos (data Abuso de la mtrica (metric abuse): Utilizacin mabase as an IPC): Usar una base de datos para comunipuladora o incompetente de las medidas y las mnicar procesos en uno o varios ordenadores, cuando
tricas.
la comunicacin entre procesos directa es ms adecuada.
Sr. Amigo de todos (Mr. Nice Guy): Se aplica al gestor que pretende convertirse en amigo de todos.
Blob: Vase Objeto todopoderoso.
Hroe del proletariado (proletariat hero): El empleado para todoque siempre es puesto como ejemplo ante sus compaeros, pero que realmente es la
excusa perfecta para demandas crecientes y constantes incrementos de expectativas.
Estrellas nacientes (rising upstart): Se aplica a quienes, teniendo potencial, no son capaces de respetar la progresin profesional establecida, y pretenden sortear los plazos y requisitos de aprendizaje y
madurez.
Ejecutivo sin carcter (spineless executive): Gestor,
coordinador o responsable que no tiene el coraje de
enfrentarse a las situaciones, asumir las responsabilidades de los errores, o dar la cara por sus subordinados.
BOMQ (Batch Over MQ): Abuso en el empleo de integracin basada en mensajes en tiempo real para
transferencias espordicas de gran tamao en segundo plano.
Clase Gorda: Dotar a una clase con demasiados atributos y/o mtodos, hacindola responsable de la mayora de la lgica de negocio.
Botn mgico (magic pushbutton): Tender, desarrollando interfaces, a programar la lgica de negocio
en los mtodos de interaccin, implementando los
resultados de las acciones del usuario en trminos
no sucientemente abstractos.
Carrera de obstculos (race hazard): Incapacidad de
prever las consecuencias de diferentes sucesiones de
eventos.
Arma denitiva (ultimate weapon): Individuos altamente competentes en los que la organizacin o sus
compaeros confan tanto que se convierten en el
canal por el que todo pasa.
7.1.2
15
16
Reinventar la rueda (reinventing the wheel): Enfrentarse a las situaciones buscando soluciones desde cero, sin tener en cuenta otras que puedan existir ya
para afrontar los mismos problemas.
7.1.5
Antipatrones metodolgicos
Conicto de extensiones (extension conict): Problemas con diferentes extensiones que tratan de gestionar las mismas partes del sistema (especco de Mac
OS).
Inerno de dependencias (dependency hell): Escenario de problemas producidos por las versiones de
otros productos que se necesitan para hacer funcionar un tercero.
Bala de plata (silver bullet): Asumir que nuestra solucin tcnica favorita puede resolver un problema
mucho mayor.
Desarrollo conducido por quien prueba (tester driven development): Permitir que un proyecto software avance a base de extraer sus nuevos requisitos de
los informes de errores.
Inerno JAR (JAR hell): Problemas con diferentes versiones o ubicaciones de cheros JAR
(Java), tpicamente causados por la falta de
comprensin del modelo de carga de clases.
17
Sistema de caeras (stovepipe): Tener una organizacin estructurada de manera que favorece el ujo
de informacin vertical, pero inhibe la comunicacin horizontal.
Te lo dije (I told you so): Permitir que la atencin se
centre en que la desoda advertencia de un experto
se ha demostrado justicada.
Gallina de los huevos de oro (cash cow): Pecar de autocomplacencia frente a nuevos productos por disponer de un producto legacy muy lucrativo.
18
Compensacin equitativa (egalitarian compensation): Compensar al personal por el trabajo individual hecho.
El correo electrnico es peligroso (email is dangerous): Peligro de olvidar que detrs de los emails recibidos hay personas de carne y hueso.
Contenedor mgico (magic container): La implementacin de mtodos que intentan ser tan exibles
como para adaptar su comportamiento a multitud de
circunstancias, sobrepasando el umbral de una mantenibilidad adecuada del mismo.
El traje nuevo del emperador (emperor's new clothes): Temor a sealar los defectos de un producto o
proceso que un gerente o manager cree que funciona
bien.
El viejo gran duque de York (the grand old Duke of
York): Cuando los arquitectos o analistas no intervienen (uno o los dos), dejando a los programadores
(especialistas en la implementacin) prcticamente
todas las decisiones a nivel e ejecucin de las especicaciones del usuario.
Ellos me entendieron (they understood me): Explicar a programadores o diseadores junior lo que se
espera de ellos muy brevemente, y asumir que entendieron lo que se les pidi.
Embudo de excepciones (exception funnel): Atrapar
una excepcin e ignorarla, sin reportarlo.
Entrenar al entrenador (train the trainer): Contratar
una formacin sin haber precisado con cierta exactitud la materia sobre la que se desea la misma. Esto puede provocar que la formacin no se enfoque
de manera adecuada, tratando aspectos que no son
necesarios en el proyecto o dejando fuera aspectos
fundamentales. Contratar una formacin sin tener
referencias del formador, ya que lo mismo su nivel
de conocimiento no es el adecuado a la naturaleza
de la formacin a impartir.
Es un problema de operadores (it is an operator problem).
Esconder las armas (cover your assets).
Falsa economa (false economy): Permitir que los
recortes de presupuesto afecten la eciencia de los
trabajadores (las prdidas terminan siendo mayores
que lo ahorrado).
Falso punto nal subrogado (false surrogate endpoint).
Fechas en punto otante (oating point times).
Haz tu propia base de datos (roll your own database): Ante la necesidad de persistencia de datos se
utiliza una solucin que no se basa en un estndar.
Ingenieros compatibles e intercambiables (plug
compatible interchangeable engineers).
Introduccin de dicultad por analoga (analogy
breakdown): Disear por analoga con problemas
resueltos, posiblemente introduciendo dicultades
no inherentes al problema, o descuidando dicultades propias del nuevo caso que se maneja.
19
contingencias del proceso de desarrollo, o cuando no
se es exible ante una planicacin inicial, conservndose a lo largo del proyecto pese a que se pueda
apreciar que resulta absolutamente irreal.
La experiencia mata el diseo (architecture by implication): Descuidar el diseo por conar excesivamente en la experiencia previa.
Mquina de Rube Goldberg (Rube Goldberg machine): Realizar implementaciones muy complejas para
tareas sencillas.
No inventado aqu (not invented here): Cuando la organizacin o uno se niega a utilizar soluciones, metodologas, prcticas, herramientas, etc. externas slo porque no se nos ocurri previamente.
Proyecto del da de la marmota (ground hog day project): Discutir los mismos temas en todas las reuniones, slo para llegar a la conclusin de que algo
debe hacerse.
Prueba incompleta (asynchronous unit testing): Descuidar en la etapa de pruebas, algunas unidades en
todos los casos, o todas las unidades en algunos casos.
20
Requisitos esparcidos por la pared (requirements tossed over the wall): Existe un desorden general en los
requisitos: se encuentran en distinto grado de terminacin, no hay priorizacin de los mismos o es muy
general como para poder hacer una ordenacin adecuada por ese criterio, etc. Esto normalmente es provocado por una colaboracin inadecuada por parte
del rea usuaria.
Requisitos ocultos (Hidden requirements): El equipo
de proyecto conocedor de la dicultad de implementar un determinado requisito lo obvia dentro del catlogo de requisitos, le asigna una prioridad muy baja o lo engloba dentro de un requisito de mayor nivel
quedando difuminado en el mismo. El rea usuaria
no especica un requisito o no lo especica de manera adecuada, solicitando explicaciones a posteriori por la no implementacin de ese requisito o por
su comportamiento incorrecto.
Si funciona, no lo toques (if it is working don't change):.
Somos tontos (we are idiots): Pensar que el conocimiento interno del problema es peligroso (por riesgo
de que sea pobre o equivocado), y pedir validacin
del cliente para cada caracterstica o decisin mayor.
Tarjetas CRCI (CRCI cards): Cuando se usa
la tcnica de tarjetas CRC, se aprovecha e
incluye en la misma la implementacin de la
clase, convirtindose automticamente la tarjeta CRC (Class-Responsibility-Collaboration)
en CRCI (Class-Responsibility-CollaborationImplementation).
Tormenta de reproches (blame storming): En un
equipo de proyecto se llega a la conclusin de que
la mejor forma de analizar las causas de la no consecucin de los objetivos es que se discuta quines
internamente han tenido la culpa.
Torre de vud (tower of voodoo):Se tiene un cdigo
que se sabe que funciona (aunque generalmente no
se sabe muy bien cmo) y se pretende aadir algn
tipo de funcionalidad adicional, en ocasiones no muy
cohesionada con la ya implementada y se le coloca
un envoltorio (wrapper) proporcionando una nueva
interfaz de acceso a ese nuevo componente.
Trampa para osos (bear trap): Invertir mucho en
una herramienta poco adaptada o factible, de manera que despus es imposible deshacerse de ella.
nico punto de salida de funcin (single function exit
point).
Valor por defecto indenido (zero means null): Escoger un valor arbitrario para representar la indenicin, sin garantizar que ese valor no puede realmente
ocurrir.
Captulo 8
Archivo de cabecera
Se denomina header le, al espaol chero/archivo (de)
cabecera, o include le, al espaol chero de inclusin, en ciencias de computacin, especialmente en el
mbito de los lenguajes de programacin C y C++, al
archivo, normalmente en forma de cdigo fuente, que el
compilador incluye de forma automtica al procesar algn otro archivo fuente. Tpicamente los programadores
especican la inclusin de los header les por medio de
pragmas al comienzo (head o cabecera) de otro archivo
fuente.
Un header le contiene, normalmente, una declaracin
directa de clases, subrutinas, variables, u otros
identicadores. Aquellos programadores que desean
declarar identicadores estndares en ms de un archivo
fuente pueden colocar esos identicadores en un nico
header le, que se incluir cuando el cdigo que contiene
sea requerido por otros archivos.
La biblioteca estndar de C y la biblioteca estndar de
C++ tradicionalmente declaran sus funciones estndar en
header les.
8.1 Motivacin
En la mayora de lenguajes de programacin modernos,
los programadores pueden dividir los programas en componentes de menor tamao (como pueden ser clases y
subrutinas) y distribuir esos componentes entre muchas
unidades por traducir (tpicamente en forma de archivos),
que el sistema puede compilar de forma autnoma. Si una
subrutina se tiene que usar al margen de la unidad por
traducir donde ha sido denida, se tiene que introducir el
concepto de declaracin directa o prototipos de funciones. Por ejemplo, una funcin denida as en un archivo
fuente:
La unidad por traducir representada por el archivo fuente main.c referencia a la funcin print_heading() que est
denida en otra unidad por traducir (print-heading.c). De
int add(int a, int b) { return a + b; }
acuerdo con las reglas de C99, los programadores deben
declarar una funcin externa antes del primer uso. Para
puede declararse (con un prototipo de funcin) y ser re- cumplir con este requisito el archivo main.c declara la
ferida desde un segundo archivo fuente como sigue:
funcin en la primera lnea. Esta versin del cdigo funint add(int, int); int triple(int x) { return add(x, add(x, ciona de forma correcta.
x)); }
Posteriormente, el programador que mantiene el archivo
21
22
fuente print-heading.c puede decidir hacer la funcin ms /* File add.c */ #include add.hint add(int a, int b) {
exible y dar soporte a cabeceras a gusto del usuario. Una return a + b; }
posible implementacin podra ser la siguiente:
/* File print-heading.c */ #include <stdio.h> void Normalmente, los programadores slo utilizan los heaprint_heading(const char *heading) { printf("%s\n, der les para especicar los interfaces, y suelen aportar al
heading); }
menos, una pequea cantidad de informacin explicando
cmo usar los componentes declarados en el archivo. Al
Si el programador olvida actualizar la declaracin en igual que en este ejemplo, las implementaciones de sumain.c, se pueden dar resultados devastadores. La fun- brutinas permanecen en un archivo fuente separado, que
cin print_heading() espera un argumento y hace uso del continua siendo compilado de forma independiente. (Una
valor del mismo, sin embargo la funcin main() no pro- excepcin comn entre C y C++ son las "funciones inlivee ningn valor. Al ejecutar este programa se produce un ne", que suelen incluirse en header les porque la mayora
comportamiento impredecible: la aplicacin puede im- de implementaciones no pueden expendir funciones inliprimir basura, terminar de forma inesperada o dar pie a ne de forma adecuada sin ver sus deniciones durante el
resultados impredecibles en la plataforma en la que es eje- tiempo de compilacin.)
cutado.
Por qu se puede compilar y enlazar este cdigo sin problema alguno? El motivo es que el compilador se gua por
la declaracin en main.c a la hora de compilar la unidad
por traducir main.c. Y esa declaracin se ajusta con la forma de la funcin. Ms tarde, cuando el enlazador combina
las unidades de traduccin ya compiladas main.c y printheading.c (en la mayora de implementaciones representadas como archivos main.o o main.obj), probablmente
podra detectar la inconsistencia pero no en C. Las
implementaciones en C referencian las funciones por el
nombre al nivel de archivo objeto y archivo binario, esto
no incluye el valor de retorno o la lista de argumentos. El
enlazador encuentra una referencia a print_heading() en
main.o y una funcin adecuada en print-heading.o. Llegado este punto, toda la informacin relativa a tipos de
argumentos de funciones se pierde.
Cmo es entonces posible llevar a cabo declaraciones
mltiples sin problema alguno? La solucin se llama header le. El header le de un mdulo declara cada funcin,
objeto y tipo de dato que forma parte del interfaz pblico del mdulo por ejemplo, en este caso el header le
incluira slo la delcaracin de add. Todo aquel archivo
fuente que se reera a add usa la directiva #include en el
header le:
8.2 Alternativas
Los header les no son la nica solucin al problema de
acceder identicadores declarados en diferentes archivos.
Tienen la desventaja de que los programadores siguen teniendo que realizar cambios en dos sitios diferentes (en
el archivo fuente y en el header le) cuando se realiza un
cambio en una denicin. Algunos lenguajes ms jvenes (como Java) prescienden de los header les y usan, en
su lugar, una esquema de nombres que permite al compilador localizar los archivos fuente asociados con implementaciones de clases e interfaces (pero, al hacerlo, se
restringe la libertad a la hora de nombrar archivos). En
estos lenguajes, el problema de ODR se suele resolver
por medio de dos tcnicas: la primera, el compilador pone toda la informacin necesaria sobre los tipos en el cdigo compilado y esta informacin es accesisble incluso
cuando el programa se ejecuta.; la segunda, Java y otros
lenguajes modernos tienen la posiblidad de vericar el
nmero y tipo de los argumentos como mtodo de invocacin. Todo esto tiene su precio: un exceso en espacio
y tiempo de ejecucin que no es aceptable para algunas
aplicaciones donde el tiempo de respuesta es crtica.
/* File add.h */ #ifndef ADD_H #dene ADD_H int COBOL y RPG IV tienen una forma de incluir archivos
llamada copybooks. Los programadoresincluyenstos
add(int, int); #endif /* ADD_H */
en la fuente del programa de forma similar a como se hace con los header les, permitiendo tambin reemplazar
(Ntese que el header le utiliza un "Include guard".)
ciertas partes del texto. La palabra clave de COBOL para
/* File triple.c */ #include add.hint triple(int x) { la inclusin es copy, y el reemplazo se realiza por medio
de la clusula replacing...by.
return add(x, add(x, x)); }
Esto reduce la carga del mantenimiento: cuando una denicin cambia, solo se tiene que actualizar una nica
copia de la declaracin (la del chero de cabecera). El
chero de cabecera tambin se puede incluir en el chero fuente que contiene las correspondientes deniciones,
dndole al compilador la oportunidad de comprobar si la
declaracin y la denicin son consistentes.
23
Captulo 9
Asercin (informtica)
En programacin, una asercin es un predicado (i.e., una 9.1 Uso de las aserciones
sentencia verdadero-falso) incluido en un programa como indicacin de que el programador piensa que dicho En lenguajes como Eiel, las aserciones son parte del propredicado siempre se cumple en ese punto del ujo de ceso de diseo, mientras que en otros, como C o Java,
programa.
solamente son utilizadas para comprobar suposiciones en
Por ejemplo, el siguiente cdigo contiene dos aserciones: tiempo de ejecucin.
x := 5; {x > 0} x := x + 1 {x > 1}
25
26
int *ptr = malloc(sizeof(int) * 10); assert(ptr != NULL);
// usar ptr
Aqu, el programador advierte que malloc puede devolver un puntero a NULL si no resulta posible realizar la
asignacin de memoria. Esto es posible: el sistema operativo no garantiza que cada llamada a malloc termine con
xito, y el programa debe estar preparado para manejar
el error. Una asercin quizs no es la mejor eleccin en
este caso, ya que un error causado por malloc no es lgicamente imposible es una posibildad legtima, aunque
no es muy comn que suceda. En este ejemplo, es cierto
que la asercin resulta til, aclarando que el programador
ha decidido de forma deliberada no construir una rutina
robusta de control de errores de asignacin de memoria.
El programador tambin puede decidirse por una utilizacin mixta de aserciones y rutinas estndar de control de
errores para un mismo problema. Esto es til en situaciones donde el programador quiere recibir aviso inmediato
del error, pero con la seguridad de que ser manejado de
forma correcta en situaciones reales de explotacin del
programa. En el ejemplo anterior, esto supondra aadir
una rutina de control de errores, pero tambin habra que
mantener la asercin para que el programador supiese del
fallo de memoria durante el proceso de depuracin. Esto
permite al programador localizar errores de forma ms
sencilla, lo que a su vez har que el usuario nal pueda ejecutar el programa sin recibir mensajes de error innecesarios. Esta tctica solamente resulta til cuando el
error especicado no supone la terminacin abrupta del
programa o afecte a los datos que ste maneja, sino que
har que el programa siga funcionando aunque sea ms
lentamente o de forma menos eciente.
Captulo 10
Automatizacin de tareas
La automatizacin de tareas es, en informtica, el conjunto de mtodos que sirven para realizar tareas repetitivas en un ordenador. Algunos mtodos para la automatizacin de tareas son la programacin simple, los macros,
los intrpretes y las bombas lgicas. Tambin hay algunos
programas especcos que automatizan tareas. Incluso los
virus informticos utilizados de forma benca podran
considerarse otro mtodo para la automatizacin de tareas para el usuario.
27
Captulo 11
Base de cdigo
El trmino codebase, o base de cdigo, es usado en
el desarrollo de software con el signicado de la coleccin completa de cdigo fuente usada para construir una
aplicacin o componente particular. Tpicamente, el codebase incluye solamente los archivos del cdigo fuente
escritos por humanos y no los archivos del cdigo fuente
generados por otras herramientas o archivos de biblioteca
binaria. Sin embargo, incluye generalmente archivos de
conguracin y de propiedades.
El codebase para un proyecto es tpicamente almacenado en un repositorio de control de fuentes. Un repositorio del cdigo fuente es un lugar en donde son guardadas
grandes cantidades de cdigo fuente, tanto pblicamente como privadamente. Son frecuentemente usados por
proyectos de multi-desarrolladores para manejar, de una
manera organizada, varias versiones y los conictos que
se presentan con los desarrolladores sometiendo modicaciones conictivas. Subversion y Mercurial son herramientas populares usadas para manejar este ujo de trabajo, y son comunes en proyectos de fuente abierta.
Rerindose a mltiples codebases como distintosse
declara que hay implementaciones independientes sin cdigo fuente compartido y que histricamente, estas implementaciones no evolucionaron de un proyecto comn.
En el caso de estndares, esto puede ser una manera de
demostrar interoperabilidad mostrando dos piezas independientes de software que implementan un estndar dado.
28
Captulo 12
Bean
Un Bean es un componente software que tiene la particularidad de ser reutilizable y as evitar la tediosa tarea de
programar los distintos componentes uno a uno. Se puede decir que existen con la nalidad de ahorrarnos tiempo
al programar. Es el caso de la mayora de componentes
que manejan los editores visuales ms comunes. Los que
hayan utilizado Visual Studio, Eclipse o Delphi por ejemplo, ya estarn familiarizados con ellos. Un Bean puede
representar desde un botn, un grid de resultados, un panel contenedor o un simple campo de texto, hasta otras
soluciones mucho ms complejas como conexiones a bases de datos, etc.
Son bastante conocidas las EJB (Enterprise JavaBeans)
que ofrecen numerosos Beans para Java.
29
Captulo 13
Beta tester
Un Beta tester es un usuario de programas cuyos ejecutables estn pendientes de terminar su fase de desarrollo,
o alcanzar un alto nivel de funcionamiento, pero que an
no son completamente estables.* [1]
13.1 Generalidades
Los beta testers usan sus conocimientos informticos y su
tiempo para detectar errores en la versin beta del software y as poder informar de stos para que los desarrolladores los corrijan, o corregirlos ellos mismos. Algunas compaas los contratan para asegurarse de que sus
programas van a funcionar lo mejor posible en el mercado. Otro tipo de beta testers son los que trabajan desinteresadamente ofreciendo soporte y ayuda a la comunidad
GNU.
Generalmente elbetatestercomparte una cierta anidad con la herramienta puesta a prueba en cuestin, de ah
el entusiasmo por probarla, vericar nuevas funcionalidades y detectar anomalas en pos de mejorar el desarrollo
de la herramienta en cuestin.
13.4 Referencias
[1] S.E. Smith (2003). What is a Beta Tester? (en ingls).
Consultado el 20 de octubre de 2010.
30
Captulo 14
Una bifurcacin o fork, cuando se aplica en el contexto de un lenguaje de programacin o un sistema operativo, hace referencia a la creacin de una copia de s mismo por parte de un programa, que entonces acta como
un "proceso hijo" del proceso originario, ahora llamado
"padre". Los procesos resultantes son idnticos, salvo que
tienen distinto nmero de proceso (PID).
Ms generalmente, una bifurcacin en un entorno
multihilo signica que un hilo de ejecucin se bifurca.
El orden de la salida ser determinada por diversos parmetros del ncleo del sistema operativo. Como se puede observar, el valor contenido en la variable idPropio es
compartido por proceso padre e hijo; sin embargo, la referencia a la variable no es la misma y su posterior modicacin en cada cdigo, ya sea del padre o del hijo, no se
ver reejada en ambos procesos.
14.1 UNIX
En el caso de los sistemas operativos derivados de UNIX,
la llamada al sistema fork permite realizar una bifurcacin del proceso. Esta llamada devuelve el identicador
de proceso del proceso hijo al padre y un 0 al proceso
hijo.
Aqu hay un ejemplo escrito en lenguaje de programacin
C que muestra el uso de esta llamada. El cdigo que se
ejecute depende de si el proceso es padre o hijo.
#include <stdio.h> #include <unistd.h> #include
<sys/types.h> int main(void) { pid_t idHijo; pid_t idPropio; idPropio = getpid(); //Se obtiene el id del proceso
actual idHijo = fork(); //Se crea un proceso 'hijo' if
(idHijo == 1) { //Si hay un cdigo menor que cero,
hubo un error perror(Error al realizar la bifurcacin
); //Se notica al usuario return 1; //Se interrumpe la
ejecucin del proceso con una salida distinta a cero } if
(idHijo == 0) //la ejecucin de la llamada al sistema fork
devuelve un cero al proceso 'hijo' printf(Soy el hijo
con id %ld id proceso original %ld\n, (long)getpid(),
(long)idPropio); else //la ejecucin de la llamada al
sistema fork devuelve el identicador al proceso 'padre'
printf(Soy el padre con id %ld id proceso original
%ld\n, (long)getpid(), (long)idPropio); return 0; }
Este cdigo imprimir:
31
Captulo 15
Binding
15.4 Enlaces externos
15.2 Informtica
En informtica, un binding es una ligadurao referencia a otro smbolo ms largo y complicado, y que se
usa frecuentemente. Este otro smbolo puede ser un valor
de cualquier tipo, numrico, de cadena, etc o el nombre
de una variable que contiene un valor o un conjunto de
valores.
En el campo de la programacin, un binding es una adaptacin de una biblioteca para ser usada en un lenguaje de
programacin distinto de aqul en el que ha sido escrita.
Captulo 16
Bloqueo mutuo
En sistemas operativos, el bloqueo mutuo (tambin conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de
procesos o hilos de ejecucin en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de
concurrencia de procesos, no existe una solucin general
para los interbloqueos.
R1
R2
B
Ejemplo de representacin de Bloqueo Mutuo en grafos de alocacin de recursos con dos procesos A y B, y dos recursos R1 y
R2.
El Bloqueo mutuo tambin puede ser representado usando grafos dirigidos, donde el proceso es representado por
un cuadrado y el recurso, por un crculo. Cuando un proceso solicita un recurso, una echa es dirigida del crculo
al cuadrado. Cuando un recurso es asignado a un proceso,
una echa es dirigida del cuadrado al crculo.
En la gura del ejemplo, se pueden ver dos procesos diferentes (A y B), cada uno con un recurso diferente asignado (R1 y R2). En este ejemplo clsico de bloqueo mutuo,
es fcilmente visible la condicin de espera circular en
la que los procesos se encuentran, donde cada uno solicita
un recurso que est asignado a otro proceso.
33
34
Condicin de espera circular: dado el conjunto
de procesos P0 ...Pm (subconjunto del total de procesos original),P0 est esperando un recurso adquirido
por P1 , que est esperando un recurso adquirido por
P2 ,... ,que est esperando un recurso adquirido por
Pm , que est esperando un recurso adquirido por P0 .
Esta condicin implica la condicin de retencin y
espera.
16.5 Livelock
16.4 Prevencin
Los bloqueos mutuos pueden prevenirse asegurando que
no suceda alguna de las condiciones necesarias vistas anteriormente.
Eliminando la exclusin mutua: ningn proceso puede tener acceso exclusivo a un recurso. Esto es imposible para procesos que no pueden ser encolados
(puestos en un spool), e incluso con colas tambin
pueden ocurrir interbloqueos.
La condicin de posesin y espera puede ser eliminada haciendo que los procesos pidan todos los recursos que van a necesitar antes de empezar. Este
conocimiento por adelantado muchas veces es imposible nuevamente. Otra forma es requerir a los
procesos liberar todos sus recursos antes de pedir todos los recursos que necesitan. Esto tambin es poco
prctico en general.
La condicin de no expropiacin puede ser tambin
imposible de eliminar dado que un proceso debe poder tener un recurso por un cierto tiempo o el procesamiento puede quedar inconsistente.
Captulo 17
Bodyshopping
Bodyshopping es un trmino ligado al mundo empresarial informtico o tecnolgico que hace referencia a la
venta de capital humano. Conlleva la cesin de personal
de este tipo a terceras empresas con nimo de lucro.
Trmino que proviene del ingls que podramos denir
como anglicismo o extranjerismo y que en su traduccin
literal hace referencia a la compra de cuerpos. Una forma castiza de denominar estas empresas es charcuteras o
crnicas.
Esta prctica es muy habitual en el mundo de la consultora informtica y existen multitud de empresas que basan
su negocio en esta "venta" de personal actuando prcticamente como empresas de trabajo temporal orientadas
a la tecnologa.
En ocasiones ciertas compaas que tienen esta prctica
como ncleo de su negocio, fundamentan sus ingresos en
la contratacin de este personal, normalmente con poca
experiencia y bajo salario, con contratos temporales o
por obra, quienes posteriormente son revendidos a terceras empresas como profesionales altamente cualicados y
con una gran experiencia, siendo sta nica y exclusivamente la base de su negocio y de su Retorno de la inversin, ya que a menos experiencia y salario del personal,
mayor benecio por las altas tarifas cobradas.
La legislacin espaola expone claramente en su Estatuto
de los Trabajadores (Artculo 43. Cesin de trabajadores.)
que el bodyshopping es ilegal.
Captulo 18
BrookGPU
BrookGPU fue desarrollado por la Universidad de Stanford, es un grupo de compiladores y aplicaciones basadas en el lenguaje Brook para utilizar con unidades de
procesamiento grco (GPU). la programacin con unidades GPU es continuamente abreviada con el nombre
de General-purpose computing on graphics processing
units (GPGPU). Para usar este programa es necesario
una unidad de procesamiento grco (GPU) tipo ATI,
NVIDIA o Grcos integrados Intel, capaces de soportar
gran paralelismo. BrookGPU compila programas escritos
en Brook, una extensin de ANSI C diseado para incorporar computacin de datos paralelos y aritmticos con
un ecaz y familiar lenguaje. respecto al modelo general de programacin, por ujo de datos tipo por Stream,
ofrece 2 grandes ventajas respecto a estos:
Paralelismo de datos: permite al programador especicar cmo realizar las mismas operaciones en
paralelo sobre diferentes datos.
Intensidad aritmtica: le da a los programadores
el poder para minimizar la comunicacin global de
las operaciones y maximizar la comunicacin local
de las mismas
Muchos de los progresos en este lenguaje se han visto en
el proyecto de computacin distributiva Folding@home,
adems con el n de expandir las nuevas tcnicas
GPGPU, viene bajo licencia GPL, y as abrir las puertas
a nuevos programadores de Direct3D, OpenGL o hasta
Close to Metal sin dejar los detalles implementados en
estos dichos lenguajes.* [cita requerida]
36
Captulo 19
37
Captulo 20
20.1 Justicacin
Un sistema formado por mdulos que cumplan las caractersticas de caja negra ser ms fcil de entender ya que
permitir dar una visin ms clara del conjunto. El sistema tambin ser ms robusto y fcil de mantener, en caso
de ocurrir un fallo, ste podr ser aislado y abordado ms
gilmente.
39
Captulo 21
CamelCase
En nombres de empresas tales como
BellSouth
CompuServe
LinuxCabal
Microsoft, antiguamente MicroSoft
PriceWaterhouseCoopers
OmegaSoft
VaxaSoftware
La Sexta
eDreams
En algunos hashtag
21.1 Usos
En varios lenguajes de programacin
Java
.NET
C
C++
Python
C#
Objective-C
ActionScript
PHP
En las primeras herramientas wiki
40
Captulo 22
Caml
Caml (Originalmente un acrnimo para Categorical let rec fact = function | 0 -> 1 | n -> n * fact(n - 1);;
Abstract Machine Language, en espaol Lenguaje Mquina Abstracto Categrico) es un dialecto de lafamilia de Esta ltima forma es la denicin matemtica de factorial
losmeta lenguajes, desarrollado en INRIA y anteriormen- como una relacin de recurrencia.
te en ENS.
Note que el compilador inri el tipo de esta funcin para
Como muchos descendientes delML, Caml es un len- ser int -> int, signica que esta funcin mapea enteros a
guaje de tipado esttico, evaluacin estricta, y utiliza enteros. Por ejemplo, 12! Es:
administracin de memoria automtica.
# fact 12;; - : int = 479001600
La primera implementacin de Caml en Lisp fue apodada
CAML pesadodebido a los requisitos de memoria y
CPU relativos a su sucesor Caml Light, aquello fue
implementado en C por Xavier Leroy y Damien Doligez.
Adems de una reescritura completa, CAML Special 22.1.3 Derivacin numrica (funciones de
Lightaadi un potente sistema de mdulos al ncleo
alto orden)
del lenguaje.
Actualmente, la implementacin principal de Caml es Desde que OCaml es un lenguaje de programacin funOCaml, el cual aade muchas caractersticas nuevas al cional, es fcil crear y repasar funciones en programas de
lenguaje, entre ellas una capa de objeto.
OCaml. Esta capacidad tiene un nmero enorme de aplicaciones. Calcular la derivada numrica de una funcin es
una de ellas. La funcind en Caml computa la derivada
22.1 Ejemplos
numrica de una funcin dada f en un punto dado x:
Lo siguiente, # representa el prompt de OCaml.
22.1.1
Hola Mundo
42
22.1.4
La transformada Wavelet de Haarde de una lista de nmeros enteros de potencia en base dos puede ser implementada muy sucintamente en Caml y es un ejemplo excelente del uso de la concordancia de patrones sobre listas, tomando pares de elementos (h1 y h2) del frente y
almacenando sus sumas y diferencias en las listas s y d,
respectivamente:
# let haar l = let rec aux l s d = match l, s, d with [s], [],
d -> s :: d | [], s, d -> aux s [] d | h1 :: h2 :: t, s, d -> aux t
(h1 + h2 :: s) (h1 - h2 :: d) | _ -> invalid_arg haarin
aux l [] [];; val haar : int list -> int list = <fun>
Por ejemplo:
# haar [1; 2; 3; 4; 4; 3; 2; 1];; - : int list = [0; 20;
4; 4; 1; 1; 1; 1]
El patrn de emparejamiento permite transformaciones
complicadas para ser representadas claramente y sucintamente (brevemente). Adems, el compilador de OCaml
realiza concordancia de patrones en un cdigo muy ecaz, el tiempo en el que los programas arrojan resultados
es ms corto y ms rpido que el cdigo equivalente escrito con una estructura "switch-case" (Cardelli 1984, p.
210.).
22.3 Referencias
Cardelli, Luca (1984). Compiling a functional language
ACM simposio en LISP y programacin funcional, Asso-
Captulo 23
Algo muy importante es que todos los procesos/hilos deben utilizar el mismo protocolo para bloquear y desbloquear los cerrojos en el acceso a los recursos, ya que si
mientras dos procesos/hilos utilizan el cerrojo de forma
correcta, existe otro que simplemente accede a los datos
protegidos, no se garantiza la exclusin mutua y pueden
darse condiciones de carrera y errores en los resultados.
El cerrojo, usado de esta manera, forma una seccin crtica en cada proceso/hilo, desde que es tomado hasta que
se libera. En el ejemplo del bao, dentro de la seccin
crtica se encuentran las funciones que se realizan generalmente dentro de este tipo de instalaciones sanitarias.
Como garantizan la exclusin mutua, muchas veces se los
denomina mutex (por mutual exclusion).
En general hay un nmero de restricciones sobre los cerrojos, aunque no son las mismas en todos los sistemas.
43
Captulo 24
Clase utilidad
En programacin, una clase utilidad es una clase que dene un conjunto de mtodos que realizan funciones, normalmente muy reutilizadas. La mayora de las clases utilidad denen estos mtodos comunes con alcance esttico.
Ejemplos de clases utilidad incluyen java.util.Collections
que proveen muchos mtodos estticos (tales como ordenar) en objetos que implementan una Collection (java.util.collection ).
44
Captulo 25
Clear.gif
El lenguaje HTML para desarrollar pginas web no permite el alineamiento arbitrario de los objetos dentro del
documento.
Cuando Internet no se encontraba tan desarrollado, y
prcticamente el HTML era lo nico con lo que se contaba para mostrar contenidos, un truco que los desarrolladores utilizaban para poder alinear los textos a la altura y
anchura que se desearan dentro de la pgina, era crear un
archivo transparente de un pxel de tamao y en formato
grco GIF, que en aquel entonces era el nico que permita manejar transparencia en las imgenes. El archivo
era manipulado dentro del cdigo de la pgina web para
que apareciera con cierta alineacin, ya que las imgenes
si permitan la alineacin, pero no el texto.
La transparencia era importante, pues permita que la
imagen no apareciera dentro de la visualizacin de la pgina web.
El archivo era usualmente llamado clear.gif, aunque
cualquier desarrollador que hiciera la imagen poda crearla con el nombre que quisiera. El nombre de dicho archivo
dio lugar al de la tcnica.
La manera sencilla en la que se hace trabajar este truco
en el cdigo HTML es la siguiente:
<IMG
hspace=x
SRC="/ruta/al/archivo/clear.gif">
vspace=y
Donde x y y son las coordenadas de espaciado horizontal y vertical que se desean, y el atributo SRC seala la
ruta hacia el archivo clear.gif. El texto que se escriba a
continuacin de ese fragmento de cdigo, se alinear a la
altura y anchura indicada en la etiqueta.
45
Captulo 26
CMake
CMake es una herramienta multiplataforma de generacin o automatizacin de cdigo. El nombre es una abreviatura paracross platform make(make multiplataforma); ms all del uso de makeen el nombre, CMake
es una suite separada y de ms alto nivel que el sistema
make comn de Unix, siendo similar a las autotools.
CMake es una familia de herramientas diseada para
construir, probar y empaquetar software. CMake se utiliza para controlar el proceso de compilacin del software usando cheros de conguracin sencillos e independientes de la plataforma. Cmake genera makeles nativos
y espacios de trabajo que pueden usarse en el entorno
de desarrollo deseado. Es comparable al GNU build system de Unix en que el proceso es controlado por cheros
de conguracin, en el caso de CMake llamados CMakeLists.txt. Al contrario que el GNU build system, que est
restringido a plataformas Unix, CMake soporta la generacin de cheros para varios sistemas operativos, lo que
facilita el mantenimiento y elimina la necesidad de tener
varios conjuntos de cheros para cada plataforma.
26.1 Historia
CMake se cre en respuesta a la necesidad de disponer
de un entorno multiplataforma apropiado de construccin para el Insight Segmentation and Registration Toolkit (ITK) creado por la United States National Library of
Medicine como parte del Visible Human Project. Fue inuenciado por un sistema anterior llamado pcmaker creado por Ken Martin y otros desarrolladores para soportar
46
47
Automake
Compilador cruzado
Autoconf
premake
SCons
VTK
Waf
Listas de correo
26.5 Aplicaciones
CMake
Avidemux
Compiz
Kicad
KVIrc
LMMS
MiKTeX
MuseScore
MySQL
OpenCV
Poppler
PvPGN
Quantum GIS
Scribus
Second Life
SuperTux
OGRE 3D
Ryzom
que
utilizan
Captulo 27
Codecademy
Codecademy es una plataforma interactiva en lnea que
ofrece clases gratuitas de codicacin en lenguajes de
programacin como Python, PHP, JavaScript, y Ruby,
as como lenguajes de marcado incluyendo HTML y
CSS* [2]* [3] y tambin uso de API's. A partir de septiembre del 2011, el sitio ha tenido ms de 550,000 usuarios que han completado ms de seis millones de ejercicios.* [4]* [5] El sitio ha recibido crticas positivas de varios blogs y sitios web, incluyendo el New York Times* [6]
y TechCrunch.* [7]
Coursera
Dev Bootcamp
edX
Gilles Babinet
Khan Academy
lynda.com
27.1 Historia
Udacity
Udemy
27.4 Referencias
Finalmente en el ao 2014, la empresa Codecademy decide vender publicidad, comenzando con brindar un banner
al gobierno de la ciudad de buenos aires.
[6] Wortham, Jenna. Codecademy Oers Free Coding Classes for Aspiring Entrepreneurs. The New York Times.
Consultado el 26 de julio de 2012.
[7] Cincaid, Jason. Codecademy Surges To 200,000 Users,
2.1 Million Lessons Completed In 72 Hours. TechCrunch. Consultado el 26 de julio de 2012.
[8] 30 Under 30: Zach Sims and Ryan Bubinski, Codecademy. Inc.com. 2 de julio de 2012. Consultado el 13 de
agosto de 2012.
[9] Segall, Laurie (29 de noviembre de 2011). Codecademy
says it can turn anyone into a Web programmer - Nov.
29, 2011. Money.cnn.com. Consultado el 13 de agosto
de 2012.
[10] Wortham, Jenna (27 de octubre de 2011). Codecademy
Lands $2.5 Million From Investors - NYTimes.com.
Bits.blogs.nytimes.com. Consultado el 13 de agosto de
2012.
[11] Colao, JJ (19 de junio de 2012). Codecademy Raises $10
Million To Conquer The World. Forbes.com.
[12] Segall, Laurie (6 de enero de 2012). Code Year draws
200,000 aspiring programmers - Jan. 6, 2012. Money.cnn.com. Consultado el 16 de febrero de 2013.
[13] Learning JavaScript With Code Year " Feld Thoughts
Feld Thoughts. Feld.com. Consultado el 16 de febrero
de 2013.
[14] Codecademy. Code Year. Code Year. Consultado el 16
de febrero de 2013.
49
Captulo 28
Cdigo cerrado
En informtica un programa es de cdigo cerrado cuando el cdigo fuente no se encuentra disponible para cualquier usuario, es decir no se hace pblico. Se le llama as
en contraposicin al cdigo abierto.
El software no libre generalmente utiliza un cdigo cerrado. Por su calidad de secreto industrial, su divulgacin
podra ser constituyente de delito en algunos pases.
50
Captulo 29
Cdigo compilado
Un cdigo compilado es un cdigo que previamente fue
un cdigo simblico interpretable por un compilador, y
luego ese compilador lo convirti en un cdigo directamente interpretable por un controlador (Cdigo mquina).
51
Captulo 30
Cdigo mutante
En informtica, el trmino cdigo mutante o cdigo
ambiguo se emplea para referirse a un cdigo cuya integridad es modicada por s mismo durante su ejecucin, generalmente este cdigo trata de un malware por
el hecho de que si como algoritmo (cuando es ejecutado) se automodica como informacin (donde est almacenado) fcilmente puede engaar a un programa del tipo antivirus o similar. Aunque de todas maneras, ciertos
programas Antivirus son capaces de detectar este tipo de
modicaciones.
52
Captulo 31
Cdigo objeto
En programacin, se llama cdigo objeto al cdigo que con parmetros incorrectos o inexistentes puede generar
resulta de la compilacin del cdigo fuente.* [1]
un error que generalmente el compilador no detecta ya
Consiste en lenguaje mquina o bytecode y se distribuye que el cdigo objeto no es vericado, nicamente unien varios archivos que corresponden a cada cdigo fuente do. Este tipo de error se puede solucionar reescribiendo
compilado. Para obtener un programa ejecutable se han el cdigo de manera correcta y re compilarlo a cdigo
objeto.
de enlazar todos los archivos de cdigo objeto con un programa llamado enlazador (linker).
31.3 Referencias
[1] http://www.alegsa.com.ar/Dic/codigo%20objeto.php
el cdigo objeto es el resultado de la compilacin del cdigo fuente. Puede ser en lenguaje mquina o bytecode, y
puede distribuirse en varios archivos que corresponden a
cada cdigo fuente compilado. Luego un enlazador (linker) se encarga de juntar todos los archivos de cdigo
objeto para obtener el programa ejecutable. - See more at: http://www.alegsa.com.ar/Dic/codigo%20objeto.
php#sthash.ktzQpZxJ.dpuf Cdigo objeto: Conjunto de
instrucciones y datos escritos en un lenguaje que entiende el ordenador directamente: binario o cdigo mquina.
Provienen de la traduccin de cierto cdigo fuente, es un
fragmento del programa nal y es especco de la plataforma de ejecucin.
Captulo 32
Ofuscacin
La ofuscacin se reere a encubrir el signicado de una 32.1.1 Ejemplos
comunicacin hacindola ms confusa y complicada de
interpretar.
Un ejemplo simple de ofuscacin es llamar a las variables
o funciones con palabras reservadas del lenguaje aadiendo algn smbolo
int int_;
32.1 Informtica
55
Captulo 33
ColdFusion
Coldfusion (Adobe ColdFusion) es una plataforma de
desarrollo rpido de aplicaciones web que usa el lenguaje
de programacin CFML. En este aspecto, es un producto
similar a ASP, JSP o PHP.
33.2 Versiones
Muchas de las funciones poderosas de ColdFusion, como leer desde y escribir en discos duros del servidor, son
basadas en tags. As como el tag
puede tener argumentos como 'width' o 'align', el
tag <CFFILE> tiene argumentos que especican 'action=read/write/copy/delete', path=' etc.
El tag <CFFORM> construye automticamente todo el
cdigo JavaScript para vericar los campos requeridos
antes de hacer el formulario. ColdFusion tambin tiene
tags para COM, Corba y Applets y Servlets de Java.
ColdFusion fue diseado para desarrollar sitios complejos y de alto trco. ColdFusion est diseado para correr
en mquinas multi-procesador, y permite construir sitios
que pueden correr en clusters de servidores.
56
57
<cfquery
name="nombredelaconsultadatasource="conexion_odbc"> SELECT * FROM table WHERE
campo = 'hola' </cfquery>
<cfset sCadena = Hola mundo!"> Contenido de la va 31 de agosto, 2012: Adobe ColdFusion 10 Update riable: <cfoutput>#sCadena#</cfoutput>
1
Usar servicios web:
11 de septiembre, 2012: Adobe ColdFusion 10 Up<cnvoke webservice="http://web.service/service?wsdl"
date 2
method="pruebareturnVariable="resultado">
16 de octubre, 2012: Adobe ColdFusion 10 Update
3
2 de noviembre, 2012: Adobe ColdFusion 10 Update 4
19 de noviembre, 2012: Adobe ColdFusion 10 Update 5
11 de diciembre, 2012: Adobe ColdFusion 10 Update 6
15 de enero, 2013: Adobe ColdFusion 10 Update 7
27 de febrero, 2013: Adobe ColdFusion 10 Update
8
10 de abril, 2013: Adobe ColdFusion 10 Update 9
14 de mayo, 2013: Adobe ColdFusion 10 Update
10
9 de julio, 2013: Adobe ColdFusion 10 Update 11
12 de noviembre, 2013: Adobe ColdFusion 10 Update 12
10 de enero, 2014: Adobe ColdFusion 10 Update
13
14 de octubre, 2014: Adobe ColdFusion 10 Update
14
9 de diciembre, 2014: Adobe ColdFusion 10 Update 15
29 de abril, 2014: Adobe ColdFusion 11
22 de septiembre: Adobe ColdFusion 11 Update 1
14 de octubre, 2014: Adobe ColdFusion 11 Update
2
9 de diciembre, 2014: Adobe ColdFusion 11 Update 3
Captulo 34
Coloreado de sintaxis
34.1 Ejemplo
Abajo se muestra un trozo de cdigo en C++:
// Bucle for normal for (int i=0; i<maximo; i++) {
*(Una_estructura).un_campo = i+5; }
A veces, estos editores pueden resaltar las llaves, parntesis y corchetes de forma que al posicionar el cursor sobre uno de ellos, se destacan los dos elementos, tanto el
de apertura, como el de cierre incluso con etiquetas
HTML. Esto es de gran ayuda al escribir programas con
gran nmero de anidamientos hechos con estos elementos.
Un ejemplo de cdigo HTML con coloreado de sintaxis
Este resaltado se utiliza a modo de notacin secundaria, habitualmente para mejorar la legibilidad del cdigo
fuente de programas o de textos escritos en algn lenguaje
de marcado, permitiendo aumentar la productividad de
los programadores. Los estilos aplicados por defecto dependen de cada programa informtico, alguno de los cuales permiten congurar los estilos e incluso reconocer diversos lenguajes.
Geany
Vim
Emacs
gedit
El visor de cdigo fuente de la mayora de los
navegadores web.
58
Captulo 35
Comentario (informtica)
/**
* Simple HelloButton() method.
* @version 1.0
* @author john doe <doe.j@example.com>
*/
HelloButton()
{
JButton hello = new JButton( "Hello, wor
hello.addActionListener( new HelloBtnList
a un amplio abanico de formas de uso distintas y a la inclusin de informacin intil dentro del cdigo fuente.
Para evitar este inconveniente, muchos programadores y
analistas de software adoptan alguna de las losofas
o metodologas para la correcta utilizacin de los comentarios.
60
35.2.1
Planeacin / Revisin
Descripcin algortmica
35.2.2
Descripcin de cdigo
Los comentarios pueden ser utilizados para resumir el cdigo o para explicar la intencin del programador. Se- 35.2.4 Inclusin de recursos
gn esta escuela de pensamiento, re-explicar el cdigo en
lenguaje natural se considera superuo y la necesidad de
volver a explicar el cdigo puede ser un signo de que es Logotipos, diagramas y diagramas de ujo consistentes
en construcciones de arte ASCII pueden ser insertados en
demasiado complejo y debe ser reescrito.
el cdigo fuente en forma de comentario.* [14] Adems,
puede incrustarse como comentarios avisos de derechos
de autor, fecha de creacin, versin del producto, contacNo documentes mal cdigo re-escrbelo.
*
to con el propietario y/o creador, etc..
[11]
El fragmento de cdigo que sigue es un simple diagrama
ASCII que representa el ujo de proceso para un script
Los buenos comentarios no repiten el cdigo,
de administracin de sistemas contenido en un Fichero
ni lo explican. Estos aclaran su intencin. Los
Windows Script que se ejecuta en Windows Script Host
comentarios deben explicar, a un nivel de absA pesar de que la seccin que marca el cdigo aparece cotraccin ms alto que el propio cdigo, lo que
mo un comentario, el diagrama de hecho aparece en una
*
se intenta conseguir [12]
seccin XML CDATA seccin, que tcnicamente se considera distinta de los comentarios, pero que puede servir
*
Los comentarios tambin pueden ser utilizados para ex- para propsitos similares. [15]
plicar por qu un bloque de cdigo no se ajusta a las con- <!-- begin: wsf_resource_nodes --> <resource
<![CDATA[
HostApp
venciones o las buenas prcticas. Esto est especialmente id="ProcessDiagram000">
relacionado con proyectos de escaso tiempo de desarro- (Main_process) | V script.wsf (app_cmd) --> ClientApp
(async_run, batch_process) | | V mru.ini (mru_history)
llo, o en la correccin de errores. Por ejemplo:
' Se asigna una segunda variable debido a que se pro- ]]> </resource>
ducen errores ' en el servidor cuando se reutilizan los
datos del formulario. No se encontr documentacin
' sobre el comportamiento extrao del servidor, as
que simplemente se codic para resolverlo. vtx =
server.mappath(local settings)
35.3. ESTILOS
35.2.5
Depuracin
61
35.3 Estilos
El fragmento de cdigo de arriba sugiere que el programador opt por desactivar la opcin de depuracin por
alguna razn. Este estilo especco de comentario es ms
adecuado para la depuracin. Un carcter de barra simple
delante del delimitador de apertura es el que permite habilitar o deshabilitar el comentarios de bloque completo.
Factores tales como la preferencia personal, la exibilidad de las herramientas de programacin, y otras consideraciones tienden a inuir en las variantes de estilo utilizado en el cdigo fuente.
35.2.6
Generacin de documentacin
Las herramientas de programacin en ocasiones incorporan documentacin y metadatos en los comentarios.* [16]
Estas pueden incluir las posiciones de insercin para la
inclusin automtica de archivos de cabecera, comandos
para congurar el modo de resaltado de sintaxis* [17] o el
nmero de revisin del archivo.* [18] Estos comentarios
de control funcional son tambin conocidos comnmente como anotaciones. Mantener la documentacin dentro
de comentarios en el cdigo fuente es considerado como una forma de simplicar el proceso de documentacin, as como un aumento en las posibilidades de que la
documentacin se mantendr al da con los cambios en
el cdigo.* [19] Habitualmente este tipos de comentarios
requiere utilizar una sintaxis bsica para que puedan ser
interpretados por el generador de documentacin a diferencia de los comentarios anteriores donde no necesariamente se debe de utilizar una sintaxis predenida.
35.3.1 Etiquetas
Algunas etiquetas se utilizan en los comentarios para ayudar en la indexacin de los problemas comunes. Tales
etiquetas son comnmente resaltado de sintaxis y permite bsquedas con herramientas de programacin comn,
como la utilidad grep de UNIX. Ejemplos de convenios
etiqueta son:
FIXME: para marcar cdigo problemtico potencial
que requiere una atencin especial y/o revisin.
NOTE: peligros potenciales para documentar el funcionamiento interno del cdigo y de indicar.
TODO: para indicar las mejoras planicadas.
XXX: para advertir a otros programadores de cdigo
problemtico o equivoco.
Existe el riesgo de que las etiquetas se acumulan con el
tiempo, es conveniente incluir la fecha y el propietario
de etiqueta en el comentario de etiquetas para facilitar el
seguimiento.
35.4 Curiosidades
62
35.5 Ejemplos
35.5.1
Ensamblador
;comentario
35.5.2
Java
35.5.11 SQL
//comentario de lnea /*comentario de bloque*/ /** co//esto es un comentario --este tambin /* y este en bloque
mentario que ser usado por javadoc */
*/
35.5.3
C/C++
//comentario en lnea /* comentario en bloque*/ #if 0 Comentario de bloque aunque el bloque contenga /* este tipo 'comentario '''comentario XML
de comentarios */ #endif
35.5.13 Pauscal
35.5.4
Delphi
//comentario en lnea
{ comentario en bloque }
35.5.14 PHP
(* comentario en bloque *)
//comentario en lnea #este tambin /* comentario en bloEn delphi se pueden anidar comentarios de bloque siem- que */
pre que no usen el mismo delimitador, e.g.
(* comentario en bloque { que contiene otros comentarios
en bloque } // o de n de lnea y que es perfectamente 35.5.15 Cobol
vlido *)
* Comentario
35.5.5
Lua
35.5.6
Ruby
35.5.7
Python
#comentario
35.5.8
Perl
#comentario
35.5.9
Javascript
35.6 Referencias
[1] Para los propsitos de este artculo, los comentarios de
un lenguaje de programacin son tratados indistintamente de comentarios que aparecen en lenguajes de marcas,
archivos de conguracin u otros contextos similares. Ms
an, los lenguajes de marcas con frecuencia se relacionan de manera cercana con cdigo de lenguajes de programacin, especialmente en el contexto de generacin
de cdigo. Ver por ejemplo Ganguli, Madhushree (2002).
Making Use of Jsp (en ingls). Nueva York: Wiley. ISBN
0471219746., Hewitt, Eben (2003). Java for Coldfusion
Developers (en ingls). Upper Saddle River: Pearson Education. ISBN 0130461806.
[2] Source code can be divided into program code (which consists of machine-translatable instructions); and comments
(which include human-readable notes and other kinds of
annotations in support of the program code).Penny Grubb,
Armstrong Takang (2003). Software Maintenance: Concepts and Practice (en ingls). World Scientic. pp. 7,
120121. ISBN 981238426X.
[3] Algunos entornos de programacin incluyen los comentarios como uno de los elementos de la sintaxis del lenguaje
que son retenidos para procesamiento posterior, en lugar
63
[19] Ambler, Scott (2004). The Object Primer: Agile ModelDriven Development with UML 2.0 (en ingls). Cambridge
University Press. ISBN 1397805218.
[20] Murach. C# 2005. p. 56.
Captulo 36
Compatibilidad (informtica)
La compatibilidad es la condicin que hace que un
programa y un sistema, arquitectura o aplicacin logren
comprenderse correctamente tanto directamente o indirectamente (mediante un algoritmo). A este algoritmo que hace que un programa logre ser comprendido
por un sistema, arquitectura o aplicacin se lo denomina emulador por el hecho de que es un intrprete entre el
programa y el sistema, arquitectura o aplicacin.
Un ejemplo:
Ejecucin de orden del programa:
programa_orden_decir=(huta)
Ejecucin del emulador:
emul transformar
ma_realizar_*
programa_orden_*
en
siste-
Resultado en el sistema:
El programa le indica una orden al sistema y el sistema la Luego compila el cdigo con el siguiente comando:
interpreta pero de forma errnea, devolviendo un resulmake
tado no esperado.
Y por ltimo instala los ejecutables compilados con:
Incompatibilidad Caso B (Imposibilidad de ejecucin):
make-install
El programa le indica una orden al sistema que para l es Logrando as obtener un programa genrico completamente adaptado al sistema operativo que lo ha compilado.
arbitraria y por ende no logra interpretarla.
36.2 Emulacin
La emulacin consiste en utilizar un algoritmo de por medio, denominado emulador que simula ser el sistema, arquitectura o aplicacin para el cual el programa est preparado, el emulador modica los comandos del programa
en memoria para que el sistema pueda interpretarlo como
si estuviera especialmente diseado para l.
64
Compatibilismo e incompatibilismo
Emulador
Software
Wine
65
Captulo 37
37.1 Historia
La ACM ICPC es una competicin que hubo en la Universidad A&M de Texas en 1970. Pas a ser una competicin con varias rondas clasicatorias en 1977 y la nal
mundial se organiz en colaboracin con la ACM Computer Science Conference.
De 1977 a 1989, compitieron principalmente equipos de
Estados Unidos y Canad. La sede central est ubicada en
la Universidad de Baylor desde 1989 y las competiciones
regionales se ubican en universidades de todo el mundo,
bajo el auspicio de la ACM y la colaboracin de grandes
empresas de la industria informtica. La ACM ICPC ha
ido aumentando en nmero de participantes y pases por
lo que ahora es una competicin mundial con equipos de
84 pases (en 2005).
universidad antes del concurso. Los estudiantes que hayan competido en dos nales mundiales (World Finals) o
cinco competiciones regionales no pueden participar otra
vez.
Durante la competicin, los equipos tienen 5 horas para resolver entre 8 y 10 problemas (lo normal es 8 para
las competiciones regionales y 10 para la nal). Se deben
programar las soluciones con C, C++ o Java. Los programas enviados por los equipos se compilan y ejecutan con
unos ciertos datos de entrada, si el programa falla al calcular la solucin, el equipo es noticado del error y pueden enviar nuevamente el programa o probar con otros
problemas.
El ganador es el equipo que resuelve ms problemas. Si
hay equipos empatadas con el mismo nmero de problemas resueltos, el orden de clasicacin se calcula a partir
de los que han tardado menos en resolver los problemas.
Ejemplo: si un equipo A ha enviado sus soluciones para 2
problemas los 60 y 120 minutos desde el inicio del concurso, y otro equipo B lo ha hecho a los 80 y 90 minutos.
El desempate entre ambos equipos se hara mirando los
tiempos, para el equipo A: 60+120 = 180 minutos. Para
el equipo B: 80+90 = 170 minutos. El equipo B ganara.
66
37.5. GANADORES
67
- Manila
- Seul
- Teern
La competicin tiene distintas fases clasicatorias. Algunas universidades tienen competiciones locales para elegir a los componentes de los equipos. Cada universidad
puede mandar un mximo de 2 equipos de 3 personas a
la fase regional, si desean participar con un tercer equipo
deben solicitarlo a la organizacin que determinar si les
conceden permiso o no. Las competiciones locales son
opcionales y las organiza cada universidad como estime
conveniente. Algunas universidades optan por seleccionar a los alumnos con notas ms altas o a los que muestran
ms inters.
- Xian
Los equipos de cada universidad participan en la fase regional, con otros equipos de universidades prximas geogrcamente. Hay ms de 30 regiones en todo el mundo.
Algunas regiones agrupan distintos pases (por ejemplo la
SWERC incluye a Espaa, Portugal, Francia y otros pases Europeos), otras son un slo pas (la regin de Brasil)
y otras son slo parte un pas (Estados Unidos est dividido en varias regiones). Los mejor clasicados en cada
competicin regional participarn en la nal mundial. Cada regin enva a la nal un cierto nmero de equipos, no
puedo haber ms de un equipo de una misma universidad.
- Caribe
- Shanghai
- Yokohama
- Hanoi
Regiones de Oceana:
- Pacco sur (SPacic)
Regiones de Amrica Latina:
- Mxico y Centroamrica (CAmerica)
- Brasil
- Suramrica Norte
- Suramrica Sur
Regiones de Norteamrica:
- Pacic Northwest (PacNW)
- North Central (NCNA)
- East Central (ECNA)
- Mid-Atlantic (MAUSA)
37.5 Ganadores
2015 - Instituto de ptica y Mecnica Fina de San
Petersburgo, Rusia
2014 - Universidad Estatal de San Petersburgo,
Rusia
2013 - Instituto de ptica y Mecnica Fina de San
Petersburgo, Rusia
2012 - Instituto de ptica y Mecnica Fina de San
Petersburgo, Rusia
- Coimbatore (Coim)
- Kanpur (Kolkata)
- Dhaka
- Kaohsiun
68
37.7 Enlaces
Sitio ocial
Captulo 38
Computacin parasitaria
Computacin parasitaria es un paradigma de
programacin por el cual una aplicacin consigue
realizar clculos complejos utilizando interacciones
autorizadas sobre otras aplicaciones. Surge a partir de un
trabajo publicado en Nature en el ao 2000.
En el trabajo original se utilizan dos ordenadores comunicndose a travs de internet y protocolo TCP/IP, en una
sesin de comunicacin estndar. Uno de los ordenadores intenta solucionar un complicado problema, el de la
satisfactibilidad de la lgica booleana, o 3-SAT; Lo hace descomponiendo el problema original en un nmero
considerable de problemas ms pequeos. Cada uno de
estos problemas ms pequeos se codica como una relacin entre un checksum (suma de control) y un paquete
de red, de manera que la comprobacin de si el checksum
es correcto o no es la solucin del problema ms pequeo. El ordenador enva estos paquetes al ordenador que
pretende realice la computacin, el ordenador de destino
comprueba el checksum del paquete recibido, si es correcto solicita mas paquetes, si es incorrecto, solicita la
retransmisin.
38.1 Referencias
1. Parasitic computing, Barabasi et al., Nature, 412:
894-897 (2000).
69
http://www.nd.edu/~{}parasite
http://www.szene.ch/parasit/
Captulo 39
Conectiva lgica
En lgica, una conectiva lgica, o simplemente conectiva, (tambin llamado operador lgico o conectores lgicos) es un smbolo o palabra que se utiliza para conectar dos frmulas bien formadas o sentencias (atmicas o
moleculares), de modo que el valor de verdad de la frmula compuesta depende del valor de verdad de las frmulas
componentes.
39.1 Lenguajes
39.1.1
Lenguaje natural
Los conectivos lgicos pueden ser utilizados para conectar ms de dos armaciones, entonces es comn hablar
de conector lgico n-ario.
La gramtica de los lenguajes naturales, dos frases pueden unirse mediante una conjuncin gramatical para formar una oracin gramaticalmente compuesta. Algunas de
estas conjunciones gramaticales, pero no todas, son fun- 39.2.1 Lista de conectivos lgicos comunes
ciones de verdad. Por ejemplo, considere las siguientes
Conectivos lgicos comnmente usados:
frases:
A: Juan subi la montaa.
Negacin (no): , ~
Conjuncin (y): , y,
Disyuncin (o)
39.3. REDUNDANCIA
71
39.2.2
39.3 Redundancia
72
Tres elementos { , , }, { , , }, { ,
, }, { , , }, { , , }, { , , }.
Vea ms detalles sobre integridad funcional.
Otro enfoque es utilizar en igualdad de derechos, de un
cierto conjunto conveniente y funcionalmente completo,
pero no mnimo. Este enfoque requiere ms axiomas proposicionales y cada equivalencia entre las formas lgicas
debe ser o bien un axioma o comprobada como un teorema.
Pero la lgica intuicionista tiene una situacin ms complicada. De sus cinco conectivos {, , , , } solamente la negacin tiene que ser reducida a otros conectivos (p (p )). Ni la conjuncin, disyuncin
y condicional material tiene una forma equivalente construida de los otros cuatro conectivos lgicos.
39.4 Propiedades
73
39.6.1
Sin argumentos
39.6.2
Con un argumento
39.6.3
Captulo 40
Conguracin regional
En informtica, la conguracin regional* [1] conocida como locale en inglses un conjunto de parmetros
que dene el idioma, pas y cualquier otra preferencia especial que el usuario desee ver en su interfaz de usuario.
Generalmente, un identicador de conguracin regional
consiste como mnimo de un identicador de idioma y un
identicador de regin. Este concepto es de fundamental
importancia en el campo de la localizacin de idiomas.
40.2 Referencias
[1] Microsoft Corporation. Traduccin del trmino en el
Portal de idiomas de Microsoft. Consultado el 1 de noviembre de 2014.
74
Captulo 41
Conteo de referencias
Conteo de referencias, en ingls Reference counting, es
una tcnica para contabilizar las veces que un determinado recurso est siendo referido. Por lo general ese recurso
son bloques de memoria y la tcnica permite establecer
cuando no existe ninguna referencia a ese bloque y ste
puede ser liberado. Es una tcnica de muy fcil implementacin, pero tiene una importante desventaja: Si las
referencias forman un ciclo los objetos involucrados no
se liberarn nunca. Otra tcnica ms efectiva es el uso de
un recolector de basura.
75
Captulo 42
Razones para utilizar una convencin de nombres (en lugar de permitir a los programadores elegir cualquier secuencia de caracteres) incluyen los siguientes:
para proporcionar datos signicativos que se utilizarn en los traspasos de proyectos que requieren la
presentacin de cdigo fuente del programa y toda
la documentacin pertinente
para reducir el esfuerzo necesario para leer y entender el cdigo fuente;* [1]
para mejorar la apariencia del cdigo fuente (por
ejemplo, al no permitir nombres excesivamente largos o abreviaturas poco claras).
para proporcionar una mejor comprensin en el caso de la reutilizacin de cdigo despus de un largo
intervalo de tiempo.
42.4.1
Longitud de identicadores
77
primeros enlazadores que requeran nombres de variables que se limitan a 6 caracteres para ahorrar
memoria. Un avancems adelante permiti que
los nombres de variables ya que se utilizarn para
la comprensin humana, pero donde slo los primeros caracteres fueron signicativas. En algunas versiones de BASIC como TRS-80 Nivel Bsico 2, los
nombres largos se les permiti, pero slo las dos primeras letras fueron signicativas. Esta caracterstica
permitir el comportamiento errneo de que podra
ser difcil de depurar, por ejemplo, cuando fueron
utilizados y destinados a ser distinto nombres como
VALORy VAI.
editor de cdigo fuente temprana s autocompletar
careciendo
monitores tempranas de baja resolucin con longitud
de lnea limitada (por ejemplo, slo 80 caracteres)
gran parte de la informtica procedentes de las matemticas, donde los nombres de variables son, tradicionalmente, slo una sola letra
78
guin es usado por casi todos los programadores que es- ve en los 8,3 (mximo 8 caracteres con periodo separador
criben COBOL, Forth, y Lisp; tambin es comn que los seguido de 3 caracteres tipo de archivo) estilo MS-DOS.
nombres de selector en Cascading Style Sheets. La mayora de los otros idiomas (por ejemplo, las lenguas en las
familias C y Pascal) se reservan el guin para su uso como el operador injo resta, por lo que no est disponible 42.5.3 Esquema de palabra compuesta (del
lenguaje)
para su uso en los identicadores y por lo tanto se utilizan
en lugar de subrayado. Vase el caso de serpientes.
Uno de los sistemas de convenciones publicadas primeros fue de IBM del lenguajedocumentada en un IMS
Carta de los casos separados palabras
(Information Management System) 1980 Manual * [cita
requerida].
Otro enfoque consiste en indicar los lmites de palabra utilizando capitalizacin medial (tambin llamado Se detalla el esquema de palabra PRIME-MODIFIER"CamelCase" y muchos otros nombres), haciendo as CLASS, que consista en nombres como MEM-ACTtwo wordsya sea comotwoWordsoTwoWords NOpara indicar nmero de cuenta del cliente.
. Esta convencin se utiliza comnmente en Java, C# y PRIME palabras estaban destinadas a indicar las princiVisual Basic. Tratamiento de las siglas en identicadores pales entidadesde inters para un sistema.
(por ejemplo, elXMLyHTTPen XMLHttpRequest
) vara. Algunos dictan que sean en minsculas (por Palabras MODIFIER fueron utilizados para el renaejemplo XmlHttpRequest ) para facilitar la mecanogra- miento adicional, la cualicacin y la legibilidad.
fa y la lectura, mientras que otros los dejan upperca- Palabras CLASS ideal sera una lista muy corta de los
sed (por ejemplo XMLHTTPRequest ) para la exacti- tipos de datos relevantes para una aplicacin particular.
tud. Una opcin menos popular es ampliar siempre las Clase de palabras comunes pueden ser: NO (nmero),
siglas (por ejemplo ExtensibleMarkupLanguageHyper- ID (identicador), TXT (texto), AMT (cantidad), CANT
TextTransferProtocolRequest ).
(cantidad), FL (bandera), CD (cdigo), W (trabajo) y as
sucesivamente. En la prctica, la clase de palabras disponibles sera una lista de menos de dos docenas de trmi42.5 Metadatos y convenciones h- nos.
bridas
Algunas convenciones de nombres representan normas o
requisitos que van ms all de los requisitos de un proyecto especco o dominio del problema, y en lugar de
reejar una mayor conjunto general de principios denidos por la arquitectura de software, lenguaje de programacin subyacente u otro tipo de metodologa entre
proyectos.
42.5.1
Notacin hngara
Palabras CLASS, normalmente situados a la derecha (sujo), sirven el mismo propsito como prejos de notacin
hngara.
El propsito de la clase de palabras, adems de la consistencia, era especicar al programador el tipo de datos de
un campo de datos particular. Antes de la aceptacin de
BOOLEAN (dos valores nicos) Campos, FL (bandera)
indicaran un campo con slo dos valores posibles.
Tal vez la ms conocida es la notacin hngara, que codica ya sea el propsito (Aplicaciones de Hungra)
o el tipo (Sistemas de Hungra) de una variable en su 42.6.1 ActionScript
nombre.* [3] Por ejemplo, el prejoszpara el szName
variable indica que la variable es una cadena de cero (es
Las convenciones y las mejores prcticas de codicadecir null-) terminado.
cin de Adobe sugieren estndares de nomenclatura para
ActionScript que en su mayora son consistentes con los
de ECMAScript. * [cita requerida] El estilo de identica42.5.2 Notacin posicional
dores es similar a la de Java.
Un estilo utilizado para muy cortas (8 caracteres y menos)
podra ser: LCCIIL01, donde LC sera la aplicacin (cartas de crdito), C para COBOL, IIL para el subconjunto 42.6.2
proceso en particular, y el 01 un nmero de secuencia.
Ada
Este tipo de convenciones se encuentra todava en uso En Ada, el nico estilo recomendado de identicadores
activo en mainframes que dependen de JCL y tambin se es Mixed_Case_With_Underscores.* [4]
42.6.3
79
C y C++
42.6.7 .NET
80
mentos, como: aplicacin: didFinishLaunchingWithOp- [11] Microsoft NET Framework Estilos de Capitalizacin
tions:, stringWithFormat: y IsRunning.
42.6.9
Perl
Perl toma algunas seales de su patrimonio C para convenciones. A nivel local ambito de variables y nombres [14] Perl style guide.
de subrutinas son minsculas con guiones bajos injos. [15] perlmodlib - constructing new Perl modules and nding
Subrutinas y variables con la intencin de ser tratado coexisting ones.
mo privado estn prejadas con un guin bajo. Las variables del paquete son ttulo entubado. Constantes de- [16] [Gua de Estilo https://www.python.org/dev/peps/
pep-0008/ de cdigo Python PEP8]
claradas son maysculas. Los nombres de paquetes son
camel case-exceptuando prgmata por ejemplo, strict y
mro -que son minsculas. * [14] * [15]
42.6.10
Python y Ruby
Python y Ruby tanto recomiendan UpperCamelCase para nombres de clases, CAPITALIZED_WITH_UNDERSCORES para las constantes
y lowercase_separated_by_underscores para otros
nombres. En Python, si un nombre est destinado a ser
privado, que est precedido de un guin bajo.* [16]
Americana Name Society - Promueve la onomstica, el estudio de los nombres y las prcticas de asignacin de nombres, tanto en Estados Unidos como
en el extranjero.
Codicacin-guidelines.com tiene una de 100 pginas pdf que usa la lingstica y la psicologa para
intentar un anlisis de costo / benecio de las cuestiones de nomenclatura de identicadores
Convenciones de nomenclatura de Ontologa La
aplicacin de etiquetado o las convenciones de nomenclatura unicadas en la ingeniera de la ontologa ayudarn a armonizar la apariencia y aumentar
la robustez de las unidades de representacin ontolgica, como nombres de clases y relaciones dentro
del conjunto ortogonal de ontologas OBO Foundry.
Captulo 43
Cracking (software)
El cracking es la modicacin del software con la intencin de eliminar los mtodos de proteccin de los cuales
este disponga: proteccin de copias, versiones de prueba, nmeros de serie, claves de hardware, vericacin de
fechas, vericacin de CD o publicidad y adware.
La distribucin y uso de copias modicadas es ilegal en
casi todos los pases desarrollados. Muchos juicios se han
llevado a cabo debido al cracking de software; sin embargo, la mayora de estos han tenido que ver con la distribucin de copias duplicadas en vez de con el proceso de quebrantar la proteccin, debido a la dicultdad de construir
pruebas vlidas de culpabilidad individual en el segundo caso. En Estados Unidos, la aprobacin de la Digital
Millennium Copyright Act (DMCA) declar a la modicacin de software, as como a la distribucin de informacin que habilita el cracking de software, ilegal. Sin
embargo, la ley ha sido apenas probada en el poder judicial de EE. UU. en casos de ingeniera inversa para nico uso personal. La Unin Europea aprob la Directiva
de la Unin Europea sobre derecho de autor en mayo de
2001, haciendo la infraccin de los derechos de autor de
software ilegal en los estados miembros, una vez que la
legislacin nacional fuera promulgada en favor de la directiva.
81
Captulo 44
Cuaderno de carga
El cuaderno de carga es, dentro de la terminologa
informtica, el modo de comunicacin ms frecuente entre el analista y el programador de un proyecto. En l el
analista detalla las especicaciones que el programador
debe seguir para desarrollar un programa informtico.
82
Captulo 45
Curricacin
En la ciencia de la computacin, curricar es la tcnica inventada por Moses Schnnkel y Gottlob Frege que
consiste en transformar una funcin que utiliza mltiples
argumentos (o ms especcamente una n-tupla como argumento) en una funcin que utiliza un nico argumento.
Currying in Python
Implicit currying in Scheme
45.1 Nomenclatura
Currying in Ruby
El nombre curricar, acuado por Christopher Strachey en 1967, es una referencia al lgico Haskell Curry.
Un nombre alternativo, Schnnkelisation, ha sido propuesto.* [1]
Currying in Smalltalk
Currying in Algol68G
Currying != Generalized Partial Application! - post
at Lambda-the-Ultimate.org
Currying in Scala
45.2 Denicin
Currying in Perl
Dada una funcin f del tipo f : (X Y ) Z , curricndola sera una funcin del tipo curry(f ) : X
(Y Z) . En otras palabras, curry(f ) toma un argumento del tipo X y retorna una funcin del tipo Y Z
. Descurricar es la transformacin inversa.
Intuitivamente, la curricacin expone queSi jas algunos argumentos, tendrs una funcin de los argumentos
restantes. Por ejemplo, si la funcin div signica la versin curricada de la operacin x / y, entonces div con
el parmetro x jado en 1 es otra funcin: igual que la
funcin inv que devuelve la inversa multiplicativa de sus
argumentos, denida por inv(y) = 1 / y.
La motivacin prctica para curricar es que en ocasiones, muy seguidas, las funciones obtenidas al utilizar algunos, pero no todos, los argumentos en una funcin curricada pueden resultar tiles; por ejemplo, muchos lenguajes tienen una funcin o un operador similar
a plus_one. Curricar hace fcil denir dichas funciones.
45.3 Referencias
[1] I. Heim and A. Kratzer (1998). Semantics in Generative
Grammar. Blackwell.
83
Captulo 46
Cdigo enhebrado
En ciencias de la computacin, el trmino cdigo enhebrado se reere a una tcnica de implementacin
del compilador donde el cdigo generado tiene una forma que esencialmente consiste enteramente en llamadas a subrutinas. El cdigo puede ser procesado por un
intrprete, o simplemente puede ser una secuencia de instrucciones de llamadas a cdigo de mquina.
Una de las principales ventajas del cdigo enhebrado es
que es muy compacto, comparado al cdigo generado
por tcnicas alternativas de generacin del cdigo y de
convencin de llamadas. Esta ventaja usualmente viene a
expensas de una velocidad de ejecucin ligeramente ms
lenta (usualmente apenas una sola instruccin de mquina). Sin embargo, a veces hay un efecto sinergtico - a
veces un cdigo ms compacto es ms pequeo y signicativamente ms rpido que el cdigo no enhebrado.* [1] Un programa sucientemente pequeo para caber enteramente en la memoria de acceso aleatorio puede correr ms rpido que un programa menos compacto
en el espacio de intercambio que requiere un constante
acceso mecnico de la unidad de disco, aunque sufra de
la sobrecarga en la interpretacin del cdigo enhebrado.
Similarmente, un programa lo sucientemente pequeo
para caber enteramente en el cach del procesador de la
computadora puede correr ms rpido que un programa
menos compacto que sufra fallas de cach constantes.
plataforma de hardware especca. Un acercamiento diferente usa un conjunto de instrucciones de una mquina
virtual - que no tiene un destino particular de hardware.
Un intrprete lo ejecuta en cada nuevo hardware de destino.
Los computadores tempranos tenan relativamente poca
memoria. Por ejemplo, la mayora de los Data General
Nova, IBM 1130, y muchas computadores Apple II tenan solamente 4 k palabras de memoria RAM instalada.
Consecuentemente se pasaba mucho tiempo intentando
encontrar formas de reducir el tamao de los programas
de tal manera que pudieran caber en la memoria disponible. Al mismo tiempo, los computadores eran relativamente lentos, as que la interpretacin simple era perceptiblemente mucho ms lenta que ejecutar el cdigo de
mquina.
En vez de escribir cada paso de una operacin en cada
parte del programa donde era necesaria, los programadores ahorraban memoria escribiendo cada paso de tales
operaciones una sola vez y ponindolo en una subrutina
(ver "no te repitas").
84
85
*tp++
Esto se llama cdigo enhebrado directo (DTC). Aunque
la tcnica sea ms vieja, el primer uso extensamente circulado del trminocdigo enhebradoes probablemente
el artculo cdigo enhebradode Bell de 1973.* [2]
En 1970, Charles H. Moore invent una notacin ms
compacta para su mquina virtual Forth: el cdigo enhebrado indirecto (ITC). Originalmente, Moore invent esto porque era fcil y rpido en los minicomputadores de NOVA, que tenan un bit de indireccin en cada
direccin. Moore dijo (en comentarios publicados en la
edicin de la revista Byte sobre Forth) que l encontr
esto tan conveniente que lo propag en todos los diseos
Forth posteriores.
86
46.3.2
Enhebrado indirecto
46.3.3
Enhebrado de subrutina
bytecode: top: pushA: pushB: add: 0 /*pushA*/ i = decode(vpc++) *sp++ = A *sp++ = B *sp++ = *--sp + *--sp
1 /*pushB*/ addr = table[i] jump top jump top jump top
2 /*add*/ jump *addr
Si la mquina virtual usa solamente instrucciones del tamao de un byte, el decode() es simplemente un ferch
desde el bytecode, pero a menudo hay instrucciones comunes de 1 byte ms instrucciones menos comunes de
mltiples bytes (ver CISC), en este caso, decode() es ms
complejo. La decodicacin de opcodes de un solo byte puede ser muy simple y ecientemente manejado por
una tabla de saltos usando el opcode directamente como
un ndice.
Para, en las instrucciones donde las operaciones individuales son simples, por ejemplo pushy add, la
sobrecarga implicada en decidir lo que se debe ejecutar
es ms grande que el costo real de la ejecucin, tales intrpretes son a menudo mucho ms lentos que el cdigo de
mquina. Sin embargo para instrucciones (compuestas
) ms complejas, el porcentaje de sobrecarga es proporcionalmente menos signicativo.
46.6. REFERENCIAS
gos estn organizados midiendo la frecuencia en que cada
subrutina ocurre en el cdigo. A las llamadas frecuentes se le dan los cdigos ms cortos. Las operaciones con
frecuencias aproximadamente iguales se le dan cdigos
con longitudes de bits casi iguales. La mayora de los sistemas enhebrados de Human han sido implementados
como sistemas Forth de enhebrado directo, y son usados
para grandes cantidades de paquetes de cdigo corriendo
lentamente dentro de pequeos y baratos [[microcontrolador}}es. La mayora de las aplicaciones publicadas han
estado en juguetes, calculadoras o relojes.
87
SP o s (puntero de pila de parmetros, usado para
pasar parmetros entre las palabras)
A menudo, las mquinas virtuales enhebradas tales como
las implementaciones de Forth tienen una mquina virtual
simple en su corazn, consistiendo en tres primitivas. sas
son:
nest, tambin llamado docol
unnest, o semi_s (; s)
46.3.6
46.4 Bifurcaciones
Los ejemplos de arriba no muestran bifurcaciones. Para
todos los intrpretes, una bifurcacin cambia el puntero
del enhebrado (arriba indicado como tp). Como ejemplo,
una bifurcacin condicional cuando el valor tope de la pila es cero puede ser codicada como sigue. Observe que
el &thread[123] es la localizacin a saltar (jump), no la
direccin de un handler, y as que debe ser saltada (tp++)
independientemente de si la bifurcacin es tomada.
thread: brz: ... tmp = *tp++ &brz if (*sp++ == 0) &thread[123] tp = tmp ... jump *tp++
next
En una mquina virtual de enhebrado indirecto, la que
est dada aqu, las operaciones es:
next: (ip)+ -> w ; jmp (w)+ nest: ip -> -(rp) ; w -> ip ;
next unnest: (rp)+ -> ip ; next
ste es quizs el intrprete ms simple y ms rpido o
mquina virtual.
46.6 Referencias
[1] Speed of various interpreter dispatch techniques V2
[2] James R. Bell, Threaded Code, CACM, 1973, 16, 6,
pp 370372
w (puntero de trabajo)
88
Captulo 47
Cdigo inalcanzable
En programacin, el cdigo inalcanzable es una parte
del cdigo fuente que nunca podr ser ejecutado porque
no existe ningn camino dentro de las estructuras de control en el resto del programa para llegar a este cdigo.* [1]
Cdigo complejo obsoleto que se retuvo intencionalmente, pero se dej inalcanzable para que pueda
ser utilizado ms adelante en el desarrollo si es necesario.
El cdigo inalcanzable generalmente se considera indeEn los ltimos cinco casos, el cdigo que es inalcanzaseable por las siguiente razones:
ble, a menudo existe como parte de un legado, es decir,
cdigo que una vez fue til, pero ya no se utiliza o no
1. Ocupa memoria innecesaria.
se requiere. Sin embargo, el cdigo inalcanzable tambin
2. Genera almacenamiento innecesario en la cach de puede ser parte de un componente complejo (biblioteca,
instrucciones de la CPU - lo que tambin disminuye mdulo o rutina), donde el cdigo sigue siendo til en
la localidad de datos.
conjuncin con diferentes datos de entrada (nunca gene3. Desde la perspectiva de mantenimiento de soft- rada por la aplicacin actual) o en condiciones que no se
ware, se pierde tiempo y esfuerzo en mantener y cumplen en el entorno de ejecucin actual, haciendo el
documentar una pieza de cdigo que nunca se eje- cdigo correspondiente inalcanzable, pero puede ocurrir
en otros entornos de ejecucin, para que el componente
cuta.
no ha sido desarrollado.
Un ejemplo de tal cdigo condicionalmente inalcanzable
puede ser la implementacin de una funcin printf() en
la biblioteca de tiempo de ejecucin de un compilador, el
La existencia de cdigo inalcanzable puede ser debido a cual contiene el cdigo complejo para procesar todos los
argumentos de cadenas posibles, de los que en realidad
varios factores, tales como:
es slo un pequeo subconjunto utilizados en el progra Errores de programacin en situaciones complejas ma. Sin tener que recompilar la biblioteca de ejecucin,
los compiladores normalmente no sern capaces de elide saltos condicionales.
minar las secciones de cdigo no utilizadas en tiempo de
Consecuencia de las transformaciones internas rea- compilacin.
lizadas por un compilador optimizador.
47.1 Causas
47.2 Ejemplo
90
47.3 Anlisis
La deteccin de cdigo inalcanzable es una forma de
anlisis esttico y consiste en realizar un anlisis de control de ujo para encontrar el cdigo que nunca se ejecutar independientemente de los valores de las variables y otras condiciones en tiempo de ejecucin. En algunos lenguajes (como Java* [3]) algunas formas de cdigo inalcanzable no estn permitidas y no es posible compilar el programa con este tipo de cdigo. Se conoce a
la optimizacin que remueve cdigo inalcanzable como
eliminacin de cdigo muerto (que es la misma para el
cdigo muerto y cdigo redundante).
A veces el cdigo puede volverse inalcanzable por alguna optimizacin introducida por el compilador como por
ejemplo: eliminacin de subexpresiones comunes.
En la prctica la sosticacin del anlisis realizado tiene
un impacto signicativo en la cantidad de cdigo inalcanzable que se detecta. Por ejemplo, el plegamiento de
constantes y un simple anlisis de control de ujo muestra que la declaracin a = 2 en el siguiente cdigo no se
puede alcanzar:
int N = 2 + 1; if (N == 4) { a = 2; }
Sin embargo se necesita mas sosticacin para determinar si esta declaracin a = 2 es o no inalcanzable debido
que con un mtodo tradicional habra que calcular la raz
cuadrada en tiempo de compilacin:
double d = sqrt(2); if (d > 5) { a = 2; }
47.3.1
Proling
47.5 Referencias
[1] Debray, S. K.; Evans, W., Muth, R., and De Sutter, B.
(2000-03). Compiler techniques for code compaction.
(PDF). Volume 22, issue 2 (en ingls). New York, USA:
ACM Transactions on Programming Languages & Systems (TOPLAS). Bibcode:378-415. |autor= y |apellido=
redundantes (ayuda)
[2] Eliminacin de Cdigo Inalcanzable y Cdigo Muerto.
[3] Java Language Specication.
47.6 Bibliografa
Muchnick S. S. 1997 Advanced Compiler Design
and Implementation. Morgan Kaufmann.
Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.
Captulo 48
Cdigo muerto
En programacin, se conoce como cdigo muerto a una
parte del cdigo fuente que se ejecuta pero sus resultados
nunca se usan.* [1]* [2] La ejecucin de este tipo de cdigo
consume tiempo de computo en algo que jams se utiliza.
Es frecuente confundirlo con el cdigo inalcanzable aunque conservan una diferencia (este jams se ejecuta, y si
bien los dos son indeseables el cdigo muerto es ms grave que el inalcanzable).
Adems de consumir tiempo de computo el cdigo muerto puede arrojar excepciones o afectar un estado global
del programa. por lo tanto si bien los resultados jams
se utilizan remover este cdigo puede cambiar la salida
del programa y evitar bugs innecesarios. Esta es una razn por la cual el cdigo muerto es menos deseado que el
cdigo inalcanzable.
48.4 Referencias
48.1 Ejemplo
En el cdigo anterior la divisin entre X e Y se calcula pero jams se utiliza, adems, en el caso que Y sea 0
el programa arrojara una excepcin con posibilidad de
abortar la ejecucin, por lo tanto la salida del programa
se ve afectada por esta lnea.
48.5 Bibliografa
48.2 Anlisis
Se puede utilizar una optimizacin de compilador llamada eliminacin de cdigo muerto para eliminar este
cdigo. Este anlisis se puede llevar a cabo mediante el
anlisis de variable viva, que es una forma de anlisis esttico de software y anlisis de ujo de datos. Esta tambin
es una diferencia con respecto al cdigo inalcanzable que
se descubre mediante un anlisis de control del ujo.
Optimizacin de cdigo
Dead Code Detector (DCD) Java/JEE
Comparacin de DCD para Java
92
UCDetector Plugin Eclipse para encontrar cdigo
muerto Java
Captulo 49
Cdigo redundante
En programacin, se conoce como cdigo redundante 49.2 Eliminacin
a cualquier parte del cdigo fuente que tenga algn tipo
de redundancia tales como recalcular un valor que ha sido Existen tcnicas de optimizacin de software comnmencalculado previamente y todava esta disponible.* [1]
te llevadas a cabo por un compilador optimizador para
Una instruccin NOP podra ser considerado como cdi- eliminar el cdigo redundante del cdigo fuente. La ms
go redundante que ha sido explcitamente insertado para comn es la eliminacin de cdigo muerto.
rellenar el ujo de instrucciones o introducir un retardo
de tiempo, por ejemplo para crear un bucle de temporizacin paraperder el tiempo. Los identicadores que se 49.3 Vase tambin
declaran, pero nunca se les hace referencia, se denominan
declaraciones redundantes.
Cdigo muerto
Cdigo inalcanzable
49.4 Referencias
49.1 Ejemplos
Captulo 50
Dato
Un dato es una representacin simblica (numrica, alfabtica, algortmica, espacial, etc.) de un atributo o variable cuantitativa o cualitativa. Los datos describen hechos
empricos, sucesos y entidades. Es un valor o referente
que recibe el computador por diferentes medios, los datos
representan la informacin que el programador manipula
en la construccin de una solucin o en el desarrollo de
un algoritmo.
Dato experimental
Procesamiento
Informacin
Un dato por s mismo no constituye informacin, es el procesamiento de los datos lo que nos proporciona informacin.
Captulo 51
Depuracin de programas
51.1 Origen
Existe una controversia acerca del origen del trmino depuracin o debuggingen ingls. Los trminos bug
y debuggingson atribuidos popularmente a la almirante Grace Murray Hopper por los aos 1940. Mientras
trabajaba con un Mark II en la Universidad de Harvard,
ella encontr una polilla atrapada en un rel impidiendo
las operaciones de dicha computadora, por lo cual ella coment que cuando se sac aquella polilla le haban hecho
debuggingal sistema. Sin embargo el trmino bug
cmo signicado de error tcnico data cerca de 1878, y
el trmino debuggingo depuracin ha sido usado en
aeronutica antes de entrar al mundo de las computadoras.
51.2 Aplicacin
Como el software y los sistemas electrnicos se vuelven
generalmente ms complejos, se han desarrollado varias
tcnicas comunes de depuracin para detectar anomalas,
corregir funcionalidades y optimizar cdigo fuente. ExisDepuracin de programas es el proceso de identicar y
ten algunos acionados que consideran la depuracin cocorregir errores de programacin. En ingls se le conoce
mo una forma de arte.
como debugging, es que se asemeja a la eliminacin de
bichos (bugs), manera en que se conoce informalmente a
los errores de programacin. Se dice que el trmino bug
proviene de la poca de los ordenadores de vlvula ter- 51.3 Vase tambin
moinica, en los cuales los problemas se generaban por
Depurador
los insectos que eran atrados por las luces y estropeaban
el equipo. Si bien existen tcnicas para la revisin siste Error de software
mtica del cdigo fuente y se cuenta con medios computacionales para la deteccin de errores (depuradores) y fa Emulador BOCHS
cilidades integradas en los sistemas lower CASE y en los
ambientes de desarrollo integrado, sigue siendo en buena
medida una actividad manual, que desafa la paciencia,
la imaginacin y la intuicin del programador. Muchas
veces se requiere incluir en el cdigo fuente instrucciones auxiliares que permitan el seguimiento de la ejecucin del programa, presentando los valores de variables
y direcciones de memoria y ralentizando la salida de datos (modo de depuracin). Dentro de un proceso formal
de aseguramiento de la calidad, puede ser asimilado al
concepto de prueba unitaria.
95
Captulo 52
Desarrollador de software
El desarrollador de software es una persona
programadora que se dedica a uno o ms aspectos
del proceso de desarrollo de software. Se trata de un
mbito ms amplio de la programacin.
El desarrollador puede contribuir a la visin general del
proyecto ms a nivel de aplicacin que a nivel de componentes o en las tareas de programacin individuales.
Conforme pasa el tiempo, las diferencias entre el diseo
de sistemas informticos, el desarrollo de software y la
programacin se van haciendo ms claras. En el nicho de
mercado puede encontrarse una separacin entre programadores y desarrolladores, siendo estos ltimos los que
disean la estructura o jerarqua de clases. Incluso esos
desarrolladores se convierten en arquitectos de sistemas
informticos, aquellos que disean la arquitectura a varios niveles o las interacciones entre componentes de un
proyecto de software grande.
El concepto de desarrollo de software incluye:
trabajo en equipo: los proyectos son en general una
colaboracin entre varios desarrolladores, que tratan cada uno una parte del programa, y tambin de
otros colaboradores como los comerciales, que denen con el cliente la nalidad del producto, diseadores grcos que denen el aspecto y la ergonoma,
entre otros temas.
concepcin o diseo: a partir de un pliego de condiciones (user requirement specications), denir las
especicaciones tcnicas (estructura de los datos,
comunicacin entre los mdulos, etctera).
pruebas: que sirven para detectar las disconformidades y los errores
mantenimiento: la correccin de los errores despus
de la salida del programa informtico, y la mejora
para hacer evolucionar el producto.
Captulo 53
Desarrollo en cascada
En Ingeniera de software el desarrollo en cascada, tambin llamado modelo en cascada (denominado as por la
posicin de las fases en el desarrollo de esta, que parecen caer en cascada por gravedad hacia las siguientes fases), es el enfoque metodolgico que ordena rigurosamente las etapas del proceso para el desarrollo de
software, de tal forma que el inicio de cada etapa debe
esperar al trmino de la etapa anterior.* [1] Al nal de cada etapa, el modelo est diseado para llevar a cabo una
revisin nal, que se encarga de determinar si el proyecto
est listo para avanzar a la siguiente fase. Este modelo fue
el primero en originarse y es la base de todos los dems
modelos de ciclo de vida.
Requisitos
Diseo
Implementacin
Vericacin
Maintenimiento
1. Anlisis de requisitos.
qu objetivos debe cubrir. De esta fase surge
una memoria llamada SRD (documento de especicacin de requisitos), que contiene la especicacin completa de lo que debe hacer el
sistema sin entrar en detalles internos.
98
53.1.3
53.1.4
Codicacin
53.2 Variantes
Existen variantes de este modelo; especialmente destacamos la que hace uso de prototipos y
en la que se establece un ciclo antes de llegar
a la fase de mantenimiento, vericando que el
sistema nal este libre de fallos.
Otros ejemplos de variantes del modelo en cascada son el modelo en cascada con fases solapadas, cascada con subproyectos, y cascada
con reduccin de riesgos.* [2]
53.3 Ventajas
Realiza un buen funcionamiento en equipos
dbiles y productos maduros, por lo que se requiere de menos capital y herramientas para
hacerlo funcionar de manera ptima.
Es un modelo fcil de implementar y entender.
Est orientado a documentos.
Es un modelo conocido y utilizado con frecuencia.
Promueve una metodologa de trabajo efectiva: Denir antes que disear, disear antes que
codicar.* [3]
53.4 Desventajas
53.1.5
Pruebas
53.1.6
Vericacin
En la creacin de desarrollo de cascada se implementa los cdigos de investigacin y pruebas del mismo.
Una etapa determinada del proyecto no se puede llevar a cabo a menos de que se haya culminado la etapa anterior.
53.1.7
Mantenimiento
53.6 Referencias
[1] S. Pressman, Roger. Ingeniera del Software: Un enfoque
prctico, 3. Edicin, Pag. 26-30.
[2] , Patricia Arieta Melgarejo, Modelos del ciclo de vida de
software.
[3] , Ruby Casallas, Andrs Yie, Ingeniera de Software: Ciclos de Vida y Metodologas.
99
Captulo 54
Desarrollo en espiral
El desarrollo en espiral es un modelo de ciclo de vida
del software denido por primera vez por Barry Boehm
en 1986,* [1] utilizado generalmente en la Ingeniera de
software. Las actividades de este modelo se conforman en
una espiral, en la que cada bucle o iteracin representa un
conjunto de actividades. Las actividades no estn jadas
a ninguna prioridad, sino que las siguientes se eligen en
funcin del anlisis de riesgo, comenzando por el bucle
interior.
54.1 Introduccin
La Ingeniera de software, se vale y establece a partir de En cada vuelta o iteracin hay que tener en cuenta:
una serie de modelos que establecen y muestran las distintas etapas y estados por los que pasa un producto soft Los Objetivos: qu necesidad debe cubrir el proware, desde su concepcin inicial, pasando por su desaducto.
rrollo, puesta en marcha y posterior mantenimiento, hasta
la retirada del producto. A estos modelos se les denomina
Alternativas: las diferentes formas de conseguir los
modelos de ciclo de vida del software. El primer modeobjetivos de forma exitosa, desde diferentes puntos
lo concebido fue el de Royce, ms comnmente conocido
de vista como pueden ser:
como desarrollo en cascada o desarrollo lineal secuencial.
Este modelo establece que las diversas actividades que se
1. Caractersticas: experiencia del personal, requisivan realizando al desarrollar un producto software sucetos a cumplir, etc.
den de forma lineal.
Boehm, autor de diversos artculos de ingeniera del soft2. Formas de gestin del sistema.
ware; modelos de estimacin de esfuerzo y tiempo que
se consume en hacer productos software; y Modelos de
3. Riesgo asumido con cada alternativa.
Ciclo de Vida; ide y promulg un modelo desde un enfoque distinto al tradicional en Cascada: El Modelo Evo Desarrollar y Vericar: Programar y probar el
lutivo Espiral. Su Modelo de Ciclo de Vida en Espiral tiesoftware.
ne en cuenta fuertemente el riesgo que aparece a la hora
de desarrollar software. Para ello, se comienza mirando
las posibles alternativas de desarrollo, se opta por la de Si el resultado no es el adecuado o se necesita implemenriesgo ms asumible y se hace un ciclo de la espiral. Si el tar mejoras o funcionalidades:
cliente quiere seguir haciendo mejoras en el software, se
vuelve a evaluar las distintas nuevas alternativas y riesgos
Se planicaran los siguientes pasos y se comienza un
y se realiza otra vuelta de la espiral, as hasta que llegue
nuevo ciclo de la espiral. La espiral tiene una forma
un momento en el que el producto software desarrollado
de caracola y se dice que mantiene dos dimensiones,
sea aceptado y no necesite seguir mejorndose con otro
la radial y la angular:
nuevo ciclo.
Este modelo fue propuesto por Boehm en 1986 en su artculo A Spiral Model of Software Development and
100
101
Dependiendo del resultado de la evaluacin de los
riesgos, se elige un modelo para el desarrollo, el que
puede ser cualquiera de los otros existentes, como
formal, evolutivo, cascada, etc. As si por ejemplo
si los riesgos en la interfaz de usuario son dominantes, un modelo de desarrollo apropiado podra ser
la construccin de prototipos evolutivos. Si lo riesgos de proteccin son la principal consideracin, un
desarrollo basado en transformaciones formales podra ser el ms apropiado.
54.2.1
Tareas
Se lleva a cabo el estudio de las causas de las posibles amenazas y probables eventos no deseados y los
daos y consecuencias que stas puedan producir.
Se evalan alternativas. Se debe tener un prototipo
antes de comenzar a desarrollar y probar.
1. Determinar Objetivos.
En resumen, es para tener en cuenta los riesgos de cada
uno de los ambitos
4. 'Planicacin.'
Desarrollar y probar
Fijar tambin los productos denidos a obtener: re- Las 6 regiones que componen este modelo son las siguienquisitos, especicacin, manual de usuario.
tes:
Fijar las restricciones.
Identicacin de riesgos del proyecto y estrategias
alternativas para evitarlos.
Hay una cosa que solo se hace una vez: planicacin
inicial.
Comunicacin con el cliente - Tareas necesarias para plantear la comunicacin entre el desarrollador y
el cliente.
Planicacin - Tareas inherentes a la denicin de
recursos, el tiempo y otras informaciones relacionadas con el proyecto. Son todos los requerimientos.
Anlisis de riesgos Tareas para evaluar riesgos tcnicos y otras informaciones relacionadas con el proyecto.
102
Construccin y adaptacin - Tareas requeridas para
construir, probar, instalar y proporcionar soporte a
los usuarios.
54.7 Inconvenientes
54.5 Ventajas
El anlisis del riesgo se hace de forma explcita y clara.
Une los mejores elementos de los restantes modelos.
Reduce riesgos del proyecto
Incorpora objetivos de calidad
Integra el desarrollo con el mantenimiento, etc.
Adems es posible tener en cuenta mejoras y nuevos requerimientos sin romper con la metodologa, ya que este
ciclo de vida no es rgido ni esttico.
54.6 Desventajas
Genera mucho tiempo en el desarrollo del sistema
Modelo costoso
Requiere experiencia en la identicacin de riesgos
54.9 Referencias
[1] Boehm B, A Spiral Model of Software Development
and Enhancement, ACM SIGSOFT Software Engineering Notes, ACM, 11(4):14-24, Agosto 1986.
[2] Boehm B, A Spiral Model of Software Development
and Enhancement", IEEE Computer, IEEE, 21(5):61-72,
May 1988
[3] http://modeloespiral.blogspot.com/2009/08/
modelo-tipico-de-seis-regiones.html
[4] http://www.hanantek.com/win-win
[5] Developing a Software Project Life Cycle Process (IEEE
1074), 30 de marzo de 2006.
Captulo 55
Etapa de iteracin
Lista de control de proyecto
104
desarrollo iterativo. Por ejemplo, las tcnicas para desarrollar el concepto del producto estn concebidas para su
aplicacin en los primeros esfuerzos del desarrollo, cuando las necesidades se identican y el esquema general del
sistema se establece. Aunque es aconsejable aplicarlas
tambin ms tarde, para renar el concepto, su principal esfuerzo de aplicacin esta en las tareas iniciales de
desarrollo.* [5]
55.2.2
Etapa de inicializacin
55.2.3
Etapa de iteracin
55.4 Caractersticas
105
106
Sufre fuertes penalizaciones en proyectos en los cuales los requerimientos estn previamente denidos,
o para proyectostodo/nadaen los cuales se requiere que se completen en un 100% el producto para ser
implementado (por ejemplo, licitaciones) otro punto muy importante es asegurarnos de que el trabajo
se pueda cumplir tomando en cuenta los costos que
podamos usar en nuestros propios recursos.
55.9 Referencias
[1] |Proceso de Desarrollo Iterativo| http://fernandosoriano.
com.ar/?p=13
[2] |Desarrollo de software. Ciclo de vida iterativo incremental| https://jummp.wordpress.com/2011/03/31/
desarrollo-de-software-ciclo-de-vida-iterativo-incremental/
[3] |Desarrollo iterativo e incremental| http://www.
proyectosagiles.org/desarrollo-iterativo-incremental
[4] |Modelo Iterativo| http://procesosoftware.wikispaces.
com/Modelo+Iterativo
[5] Constantine, L. L., Lockwood, L. A. D.: Software for Use:
A Practical Guide to the Models and Methods of Usage Centred Design. Addison - Wesley ( 1999)
[6] Ian Sommerville (2005). Entrega Incremental. Ingeniera del Software, Sptima edicin edicin... Espaa: Pearson.
[7] |Proceso de Desarrollo Iterativo| http://fernandosoriano.
com.ar/?p=13
[8] |Desarrollo iterativo e incremental| http://www.
proyectosagiles.org/desarrollo-iterativo-incremental
Captulo 56
56.1 Implementaciones
La implementacin ms famosa es Daikon
107
Captulo 57
Diagrama de colaboracin
Un diagrama de colaboracin en las versiones de UML
1.x es esencialmente un diagrama que muestra interacciones organizadas alrededor de los roles. A diferencia de los
diagramas de secuencia, los diagramas de colaboracin,
tambin llamados diagramas de comunicacin, muestran
explcitamente las relaciones de los roles. Por otra parte, un diagrama de comunicacin no muestra el tiempo
como una dimensin aparte, por lo que resulta necesario
etiquetar con nmeros de secuencia tanto la secuencia de
mensajes como los hilos concurrentes.
implcitas. Un diagrama de comunicacin muestra relaciones entre roles geomtricamente y relaciona los mensajes con las relaciones, pero las secuencias temporales
estn menos claras.
57.2 Tipos
Es til marcar los objetos en cuatro grupos: los que exis Muestra cmo las instancias especcas de las clases
ten con la interaccin entera; los creados durante la intrabajan juntas para conseguir un objetivo comn.
teraccin (restriccin {new}); los destruidos durante la
Implementa las asociaciones del diagrama de clases interaccin (restriccin {destroyed}); y los que se crean
mediante el paso de mensajes de un objeto a otro. y se destruyen durante la interaccin (restriccin {transient}).
Dicha implementacin es llamada enlace.
Un diagrama de comunicacin es tambin un diagrama
de clases que contiene roles de clasicador y roles de asociacin en lugar de slo clasicadores y asociaciones. Los
roles de clasicador y los de asociacin describen la conguracin de los objetos y de los enlaces que pueden ocurrir cuando se ejecuta una instancia de la comunicacin.
Cuando se instancia una comunicacin, los objetos estn
ligados a los roles de clasicador y los enlaces a los roles
de asociacin. El rol de asociacin puede ser desempeado por varios tipos de enlaces temporales, tales como
argumentos de procedimiento o variables locales del procedimiento. Los smbolos de enlace pueden llevar estereotipos para indicar enlaces temporales.
57.3 Mensajes
57.1 Usos
Un uso de un diagrama de colaboracin es mostrar la implementacin de una operacin. La comunicacin muestra los parmetros y las variables locales de la operacin,
as como asociaciones ms permanentes. Cuando se implementa el comportamiento, la secuencia de los mensajes corresponde a la estructura de llamadas anidadas y el
paso de seales del programa.
Un diagrama de secuencia muestra secuencias en el tiempo como dimensin geomtrica, pero las relaciones son
Los mensajes se muestran como echas etiquetadas unidas a los enlaces. Cada mensaje tiene un nmero de secuencia, una lista opcional de mensajes precedentes, una
condicin opcional de guarda, un nombre, una lista de
argumentos y un nombre de valor de retorno opcional.
El nombre de serie incluye el nombre (opcional) de un
hilo. Todos los mensajes del mismo hilo se ordenan secuencialmente. Los mensajes de diversos hilos son concurrentes a menos que haya una dependencia secuencial
explcita. En conclusin en un diagrama muy sencillo de
hacer.
108
57.4 Flujos
Generalmente, un diagrama de comunicacin contiene un
smbolo para un objeto durante una operacin completa.
Sin embargo, a veces, un objeto contiene diferentes estados que se deban hacer explcitos. Por ejemplo, un objeto
pudo cambiar de localizacin o sus asociaciones pudieron
diferenciarse.
Los diferentes smbolos de objeto que representan un objeto se pueden conectar usando ujosbecomeoconversin. Un ujobecomees una transicin, a partir
de un estado de un objeto a otro. Se dibuja como una echa de lnea discontinua con el estereotipo becomeo
conversiny puede ser etiquetado con un nmero de
serie para mostrar cuando ocurre. Un ujo de conversin
tambin se utiliza para mostrar la migracin de un objeto
a partir de una localizacin a otra distinta para otro lugar
tambin se deben marcar con el nmero en secuencias.
109
Captulo 58
Diagrama de ujo
La lmpara no
funciona
Est
enchufada
la lmpara?
No
Enchufar
la lmpara
Est
quemada la
ampolleta?
Cambiar la
ampolleta
No
Comprar
nueva lmpara
Diagrama de ujo sencillo con los pasos a seguir si una lmpara
no funciona.
111
58.2 Descripcin
En UML 1.x, un diagrama de actividades es una variacin
del diagrama de estado UNL donde los estadosrepresentan operaciones, y las transiciones representan las
actividades que ocurren cuando la operacin se completa.
El diagrama de mensajes de UML 2.0, mientras que es
similar en aspecto al diagrama de actividades UML 1.x,
ahora tiene semnticas basadas en redes de Petri. En
UML 2.0, el diagrama general de interaccin est basado
en el diagrama de actividades. El diagrama de actividad
112
Crculo: Conector (Representa el enlace de actividades con otra dentro de un procedimiento).
58.6 Historia
113
Captulo 59
Diagrama Nassi-Shneiderman
En programacin de computadores un diagrama NassiShneiderman (o NSD por sus siglas en ingls), tambin
conocido como diagrama de Chapin* [1]* [2] es una representacin grca que muestra el diseo de un programa
estructurado.
do lo que se puede representar con un diagrama NassiShneiderman se puede representar con un diagrama de
ujo. Las nicas excepciones se dan en las instrucciones
GOTO, break y continue.
59.2 Referencias
[1] Molina Marco, A.; Letelier Torres, P.; Snchez Palma, P.;
Snchez Daz, J. (1997). Mtodos para especicacin
de mdulos. Metodologa y tecnologa de la programacin. Valencia: Universidad Politcnica de Valencia. p. 50.
ISBN 8477215197. Consultado el 26 de agosto de 2013.
[2] Eslava Muoz, V.J. (2012). Diseo de algoritmos.
Aprendiendo a programar paso a paso con C. Bubok Publishing. p. 42. ISBN 9788468610610. Consultado el 26
de agosto de 2013.
Fue desarrollado en 1972 por Isaac Nassi y Ben Shneiderman. Este diagrama tambin es conocido como estructograma, ya que sirve para representar la estructura de los
programas. Combina la descripcin textual del pseudocdigo con la representacin grca del diagrama de ujo.
59.1 Descripcin
Wikimedia Commons alberga contenido mulBasado en un diseo top-down (de lo complejo a lo simtimedia sobre Diagrama Nassi-Shneiderman.
ple), el problema que se debe resolver se divide en subCommons
problemas cada vez ms pequeos - y simples - hasta que
solo queden instrucciones simples y construcciones para
A short history of structured owcharts (Nassiel control de ujo. El diagrama Nassi-Shneiderman reShneiderman Diagrams), por Ben Shneiderman
eja la descomposicin del problema en una forma simple usando cajas anidadas para representar cada uno de
los subproblemas. Para mantener una consistencia con los
59.3.1 Software
fundamentos de la programacin estructurada, los diagramas Nassi-Shneiderman no tienen representacin para las
Structorizer Editor de diagramas Nassiinstrucciones GOTO.
Shneiderman para Linux, Mac OS X & Microsoft
Windows, distribuido bajo GNU General Public
Los diagramas Nassi-Shneiderman se utilizan muy raraLicense
mente en las tareas de programacin formal. Su nivel de
abstraccin es muy cercano al cdigo de la programacin
Nessi Editor e intrprete de diagramas Nassiestructurada y ciertas modicaciones requieren que se reShneiderman, multiplataforma (Java), distribuido
dibuje todo el diagrama.
bajo GNU General Public License
Los diagramas Nassi-Shneiderman son (la mayora de
las veces) isomrcos con los diagramas de ujo. To114
Captulo 60
di
En informtica, di es una utilidad para la comparacin
de archivos que genera las diferencias entre dos archivos o los cambios realizados en un archivo determinado
comparndolo con una versin anterior del mismo archivo. Di expone los cambios realizados por lnea en los
archivos de texto. Las implementaciones modernas tambin soportan archivos binarios.* [1] El resultado se conoce como di o patch ya que el mismo puede ser aplicado
con el programa Unix patch. El resultado de la comparacin de un archivo similar tambin se llama di.
De la misma manera que se usa la palabra "grep" para
describir la accin de buscar, la palabra di se usa en la
jerga como un verbo que se reere al clculo de cualquier
diferencia. Un ejemplo de di.
60.1 Historia
La utilidad di fue desarrollada a comienzos de los aos
setenta en el sistema operativo Unix que estaba crendose en AT&T Bell Labs en Murray Hill, Nueva Jersey. La
versin nal, que apareci por primera vez con la 5 edicin de Unix en 1974, fue toda ella escrita por Douglas
McIlroy. Este trabajo fue publicado en un artculo de
1976 co-escrito con James W. Hunt que desarroll un
prototipo inicial de di.* [2]
El trabajo de McIlroy fue precedido e inuido por el programa comparison de Steve Johnson en GECOS y por
el programa proof de Mike Lesk tambin originado en
Unix y, como di, produca cambios lnea a lnea e incluso utilizaba parntesis angulares (">" y "<") para presentar las inserciones y borrados de lnea en el resultado
del programa. Las heursticas utilizadas en estas primeras aplicaciones fueron, sin embargo, juzgadas como no
ables. La utilidad potencial de la herramienta di provoc que McIlroy acometiese la investigacin y diseo
de una herramienta ms robusta que poda usarse en una
gran variedad de tareas pero que al tiempo se condujese
bien en los procesos y con las limitaciones de tamao del
hardware de PDP-11. Su anlisis del problema lo llev
a cabo con la colaboracin de distintas personas de Bell
Labs como Alfred Aho, Elliot Pinson, Jerey Ullman y
Harold S. Stone.
60.2 Algoritmo
La operacin de di se basa en resolver el problema
Problema de Subsecuencia Comn mas Larga (LCS).
En el contexto de Unix, el uso del editor de lnea ed pro- En el problema LCS, se tienen dos secuencias de tems:
115
116
abcdfghjqzabcdefgijkrxyz
60.4 Variantes
La mayora de las implementaciones de di se han mantenido aparentemente sin cambios desde 1975. Las modicaciones consisten en mejoras en el algoritmo base,
la adicin de caractersticas tiles al comando y el diseo de un nuevos formatos de salida. El algoritmo bsico
se describe en el artculo An O(ND) Dierence Algorithm
and its Variations de Eugene W. Myers* [4] y en A File
abcdfgjz
Comparison Program de Webb Miller and Myers.* [5] El
De la subsecuencia comn ms larga solo hay un pequeo algoritmo fue descubierto independientemente y descripaso para conseguir un resultado del tipo de di:
to en Algorithms for Approximate String Matching, de E.
Ukkonen.* [6] Las primeras ediciones del programa di
ehiqkrxy+-+-++++
fueron diseadas para la comparacin de lneas de archivos de texto dejando que el carcter newline delimitase
las lneas. En los aos ochenta, la ayuda para los archivos
binarios dio lugar a un cambio en el diseo y la implementacin de la aplicacin.
60.3 Uso
Es invocado desde la lnea de comando con los nombres
de dos archivos: di original new. El resultado del comando representa los cambios requeridos para hacer que
el archivo original se convierta en el nuevo archivo.
En este formato de salida tradicional, a sustituye a aadido, d a borrado (deleted) y c a cambiado. Los nmeros
de lnea del archivo original aparecen antes de a/d/c y los
del archivo modicado despus. Los parntesis angulares
aparecen al comienzo de las lneas que son aadidas, borradas o cambiadas. Las lneas aadidas se incluyen en el
archivo original para aparecer en el archivo nuevo. Las
lneas borradas se eliminan del archivo original para ser
borradas en el archivo nuevo.
Por defecto, las lneas comunes a los dos archivos no se
muestran. Las lneas que se han movido se muestran como aadidas en su nuevo lugar y como borradas en su
antiguo lugar.* [3]
60.5 Referencias
[1] MacKenzie et al. Binary Files and Forcing Text Comparisonin Comparing and Merging Files with GNU Di
and Patch. Descargado el 28 de abril de 2007.
[2] James W. Hunt and M. Douglas McIlroy (June 1976).
An Algorithm for Dierential File Comparison. Computing Science Technical Report, Bell Laboratories 41.
[3] David MacKenzie, Paul Eggert, and Richard Stallman
(1997). Comparing and Merging Files with GNU Di and
Patch. ISBN 0-9541617-5-0.
[4] E. Myers (1986). An O(ND) Dierence Algorithm and
Its Variations. Algorithmica 1 (2): 251266.
[5] Webb Miller and Eugene W. Myers (1985). A File Comparison Program. Software Practice and Experience 15
(11): 10251040. doi:10.1002/spe.4380151102.
[6] E. Ukkonen (1985). Algorithms for Approximate
String Matching. Information and Control 64: 100118.
doi:10.1016/S0019-9958(85)80046-2.
117
Captulo 61
Direccin de retorno
Direccin de retorno es un trmino de programacin
informtica con el que se reere a un dato almacenado
dentro de la pila, dato que le indica al programa en qu
lnea situarse luego de nalizar una funcin.
118
Captulo 62
Diseo estructurado
En programacin y diseo de algoritmos, el diseo estructurado persigue elaborar algoritmos que cumplan la
propiedad de modularidad, para ello, dado un problema
que se pretende resolver mediante la elaboracin de un
programa de ordenador, se busca dividir dicho programa
en mdulos siguiendo los principios de diseo de Descomposicin por renamientos sucesivos, creacin de
una Jerarqua modular y elaboracin de mdulos Independientes.
Ciencias de la Computacin Niklaus Wirth, que consiste precisamente en volver a aplicar el estudio descendente
Top-Down a cada subproblema una y otra vez hasta obtener subproblemas sucientemente pequeos, que puedan
ser resueltos por mdulos que cumplan, en la medida de
lo posible, las caractersticas deseables en un mdulo en
el mbito de la programacin. En palabras del propio Niklaus Wirth:
En cada paso (del renamiento), una o varias instrucciones del programa dado, se descomponen en
instrucciones ms detalladas. Esta descomposicin
sucesiva o renamiento de especicaciones termina
cuanto todas las instrucciones estn expresadas en
trminos de la computadora usada o del lenguaje de
programacin...
Descomposicin
Para ello se requiere un adecuado anlisis de dicho problema, siendo necesario denir primeramente el problema, para lo cual deber de contener una detallada pero
concisa descripcin del mismo, un problema bien denido es aquel que lleva implcitas tanto una situacin inicial
como nal claras
Cada paso de renamiento implica algunas decisiones de diseo. Es importante que el programador sea
consciente de los criterios subyacentes (en las decisiones de diseo adoptadas) y de la existencia de
soluciones alternativas...
119
120
mdulo que representar al programa global y en los niveles inferiores aparecern los mdulos resultantes de las
sucesivas divisiones.
Al nal, debe obtenerse una estructura piramidal donde
los mdulos de los niveles superiores se encargan de las
tareas de coordinacin, lgica de la aplicacin y manipulacin de los mdulos inferiores; estos otros debern
realizar tareas de clculo, tratamiento y entrada/salida de
informacin.
62.1.3
Independencia
62.2.2 Cohesin
Se dene como la medida de fuerza o relacin funcional existente entre las sentencias o grupos de sentencias de un mismo mdulo. Un mdulo cohesionado
Para evaluar o determinar cmo es de bueno un diseo ejecutar una nica tarea sencilla interactuando muy poco
estructurado se utilizan los conceptos de acoplamiento o nada con el resto de mdulos del programa. Se persigue
y cohesin; stos estn muy relacionados entre s, tanto que los mdulos tengan una alta cohesin.
que difcilmente se puede variar uno sin que eso afecte
al otro. Tambin cabe decir que estos conceptos no son En el diseo estructurado podemos encontrarnos con los
medidas que se puedan cuanticar numricamente, son siguientes 7 tipos de cohesin (de la mejor o ms deseable
ms bien magnitudes cualitativas. Tambin se tienen en a la menos recomendable):
consideracin los conceptos de fan-in y fan-out.
Cohesin funcional: Los elementos del mdulo estn relacionados en el desarrollo de una nica fun62.2.1 Acoplamiento
cin.
62.2.3
Fan-In y Fan-Out
121
Captulo 63
Distancia de Damerau-Levenshtein
En la teora de la informacin y en la ciencia de computadores, se llama distancia de Damerau-Levenshtein o
distancia de edicin al nmero mnimo de operaciones
requeridas para transformar una cadena de caracteres en
otra. Se entiende por operacin, bien una insercin, eliminacin, sustitucin o transposicin de dos caracteres.
Lo que la distingue de la distancia de Levenshtein es que
esta ltima cuenta como una sola operacin de edicin a
cualquiera de las tres primeras, pero cuenta la transposicin como dos operaciones de edicin.
63.3 Referencias
122
Captulo 64
Distancia de Levenshtein
La distancia de Levenshtein, distancia de edicin o
distancia entre palabras es el nmero mnimo de operaciones requeridas para transformar una cadena de caracteres en otra, se usa ampliamente en teora de la informacin y ciencias de la computacin. Se entiende por
operacin, bien una insercin, eliminacin o la sustitucin de un carcter. Esta distancia recibe ese nombre en
honor al cientco ruso Vladimir Levenshtein, quien se
ocup de esta distancia en 1965. Es til en programas que
determinan cun similares son dos cadenas de caracteres,
como es el caso de los correctores de ortografa.
El invariante mantenido a travs del algortmo es que pueda transformar el segmento inicial str1[1..i] en str2[1..j]
empleando un mnimo de d[i,j] operaciones. Al nal, el
Por ejemplo, la distancia de Levenshtein entre casay elemento ubicado en la parte INFERIOR derecha de la
callees de 3 porque se necesitan al menos tres ediciones matriz contiene la respuesta.
elementales para cambiar uno en el otro.
1. casa cala (sustitucin de 's' por 'l')
64.2 Implementacin
124
64.2.2
C++
#include <string> #include <vector> #include <algorithm> using namespace std; int levenshtein(const string
&s1, const string &s2) { int N1 = s1.size(); int N2 =
s2.size(); int i, j; vector<int> T(N2+1); for ( i = 0; i <=
N2; i++ ) T[i] = i; for ( i = 0; i < N1; i++ ) { T[0] = i+1;
int corner = i; for ( j = 0; j < N2; j++ ) { int upper =
T[j+1]; if ( s1[i] == s2[j] ) T[j+1] = corner; else T[j+1]
= min(T[j], min(upper, corner)) + 1; corner = upper; } }
return T[N2]; }
64.2.5 Perl
64.2.8 PHP
<?php $lev = levenshtein($input, $word); ?>
64.2.9 Delphi
function LevenshteinDistance(Str1, Str2: String): Integer; var d : array of array of Integer; Len1, Len2
: Integer; i,j,cost:Integer; begin Len1:=Length(Str1);
Len2:=Length(Str2); SetLength(d,Len1+1); for i :=
Low(d) to High(d) do SetLength(d[i],Len2+1); for i := 0
to Len1 do d[i,0]:=i; for j := 0 to Len2 do d[0,j]:=j; for i:=
1 to Len1 do for j:= 1 to Len2 do begin if Str1[i]=Str2[j]
then cost:=0 else cost:=1; d[i,j]:= Min(d[i-1, j] + 1, //
64.3. APLICACIONES
125
deletion, Min(d[i, j-1] + 1, // insertion d[i-1, j-1] + cost) == s2[j - 1]) c = 0; else c = 1; var r = d[j * a + i - 1] +
// substitution ); end; Result:=d[Len1,Len2]; end;
1; var s = d[(j - 1) * a + i] + 1; var t = d[(j - 1) * a + i
- 1] + c; d[j * a + i] = Math.min(Math.min(r, s), t); } }
return(d[l2 * a + l1]); }
64.2.10
VB.NET
64.2.11
ActionScript 3.0
64.3 Aplicaciones
El proyecto ASJP usa la distancia de Levenshtein
total en una lista de palabras en diferentes lenguas
del mundo, para medir la similaridado cercanade las mismas, esa distancia calculada puede
emplearse para proponer una clasicacin logentica tentativa de las lenguas del mundo.* [1]
La distancia de Damerau-Levenshtein es una generalizacin de la distancia de Levenshtein usada
por los correctores ortogrcos y en la deteccin de
fraudes en listas de datos.
64.2.12 ColdFusion
<cfscript> function levDistance(s,t) { var d = ArrayNew(2); var i = 1; var j = 1; var s_i = A"; var t_j =
A"; var cost = 0; var n = len(s)+1; var m = len(t)+1;
d[n][m]=0; if (n is 1) { return m; } if (m is 1) { return n;
} for (i = 1; i lte n; i=i+1) { d[i][1] = i-1; } for (j = 1; j lte
m; j=j+1) { d[1][j] = j-1; } for (i = 2; i lte n; i=i+1) { s_i
= Mid(s,i-1,1); for (j = 2; j lte m; j=j+1) { t_j = Mid(t,j1,1); if (s_i is t_j) { cost = 0; } else { cost = 1; } d[i][j] =
min(d[i-1][j]+1, d[i][j-1]+1); d[i][j] = min(d[i][j], d[i1][j-1] + cost); } } return d[n][m]; } </cfscript>
64.2.13
JavaScript (NodeJS)
Ratcli/Obershelp
Dynamic time warping
Distancia de Jaro-Winkler
64.5 Referencias
[1] ASJP - World Language Tree
Captulo 65
DLO
La expresin DLO (Document Like Object) est ampliamente reconocida en la literatura sobre metadatos para
aludir a los documentos de Internet (texto, imagen, audio, video, etc.) y se utiliza para referirse a una unidad
documental o al documento digital mnimo, que forma parte de una coleccin digital, al cual se le aplican
metadatos para su descripcin y recuperacin.
El acrnimo DLO surge en el desarrollo de metadatos
del Dublin Core, concretamente en el primer taller que
se llev a cabo en Ohio (Estados Unidos), donde empez a utilizarse para diferenciar nociones individuales que
constituyen un objeto discreto, digno de una descripcin
individual a travs de metadatos.
En el tercer taller que se realiz se ampli su signicado
para referirse a cualquier recurso de informacin especco que se caracterizase por ser estable (es decir,
que tena un contenido idntico para cada usuario).
126
Captulo 66
4. Todos los drivers de la cadena usarn el mismo cdigo de escape para controlar la comunicacin entre
los usuarios y los controladores.
66.1 Qu hace?
DCM es un conjunto de rutinas de la biblioteca MSDN
usada por la tecnologa de asistencia de Windows. Permite la instalacin, desinstalacin y mantenimiento de interceptadores del driver grco.
66.1.1
2. Para los vendedores que soportan DCM, Los drivers instalados pueden permanecer despus de los
que usan DCM. Sin embargo DCM no tendr conocimiento de ellos.
3. Puede haber otros driver que no usen DCM, pero
DCM no tendr conocimiento de ellos.
Objetivos
128
Freedom Scientic:
JAWS 4.51 y superior,
Magic 8.1 y superior.
GW Micro:
Window-Eyes 4.21 y superior.
Ai Squared:
Empresas desarrolladoras
66.2.3
66.3.1
El problema
El problema es que el orden de la cadena no es aleatorio. Algunas aplicaciones deben ejecutar sus rutinas antes que otras. Por ejemplo, si ejecutamos el magnicador
antes que un lector de pantalla, es posible que el primero
Tiotecnologa.
Windows.
MSDN.
Captulo 67
Dublin Core
Dublin Core es un modelo de metadatos elaborado y auspiciado por la DCMI (Dublin Core Metadata Initiative),
una organizacin dedicada a fomentar la adopcin extensa de los estndares interoperables de los metadatos y a
promover el desarrollo de los vocabularios especializados
de metadatos para describir recursos para permitir sistemas ms inteligentes el descubrimiento del recurso.
Se pueden repetir
Pueden aparecer en cualquier orden
Este sistema de deniciones fue diseado especcamente para proporcionar un vocabulario de caractersticas
base, capaces de proporcionar la informacin descriptiva bsica sobre cualquier recurso, sin que importe el formato de origen, el rea de especializacin o el origen cultural.
130
Relacin: es un identicador de un segundo recurso y su relacin con el recurso actual. Este elemento
permite enlazar los recursos relacionados y las descripciones de los recursos.
Etiqueta: DC.Relation
Cobertura: es la caracterstica de cobertura espacial y/o temporal del contenido intelectual del recurso.
La cobertura espacial se reere a una regin fsica, utilizando por ejemplo coordenadas.
La cobertura temporal se reere al contenido
del recurso, no a cundo fue creado (que ya lo
encontramos en el elemento Date).
Etiqueta: DC.Coverage
Propiedad Intelectual:
Autor o Creador: la persona u organizacin responsable de la creacin del contenido intelectual del
recurso. Por ejemplo, los autores en el caso de documentos escritos; artistas, fotgrafos e ilustradores
en el caso de recursos visuales.
Etiqueta: DC.Creator
Editor: la entidad responsable de hacer que el recurso se encuentre disponible en la red en su formato actual.
Fecha: una fecha en la cual el recurso se puso a disposicin del usuario en su forma actual. Esta fecha
no se tiene que confundir con la que pertenece al
elemento Coverage, que estara asociada con el recurso en la medida que el contenido intelectual est
de alguna manera relacionado con aquella fecha.
Etiqueta: DC.Date
Formato: es el formato de datos de un recurso, usado para identicar el software y, posiblemente, el
hardware que se necesitara para mostrar el recurso.
Etiqueta: DC.Format
Identicador del Recurso: secuencia de caracteres
utilizados para identicar unvocamente un recurso.
Ejemplos para recursos en lnea pueden ser URLs
y URNs. Para otros recursos pueden ser usados
otros formatos de identicadores, como por ejemplo ISBN (International Standard Book Number
).
Etiqueta: DC.Identier
Lengua: lengua/s del contenido intelectual del recurso.
Etiqueta: DC.Language
67.3 Usos
67.4 Ventajas
La simplicidad
La exibilidad
La independencia sintctica
La interoperabilidad semntica
Alto nivel de normalizacin formal
Crecimiento y evolucin del estndar a travs de una
institucin formal consorciada: la DCMI.
Consenso internacional
Modularidad de Metadatos en la Web
Arquitectura de Metadatos para la Web
131
Captulo 68
eAthena
eAthena es emulador de cdigo abierto de Ragnarok Online. Est escrito en C, aunque se est trabajando en una
versin en C++ llamada eApp(eA++). eAthena soporta
Linux 32bit y 64bit y Win32/64, aunque se recomienda
el uso de Linux para su mejor desempeo y seguridad.
eAthena est bajo licencia GPL. eAthena posee 2 versiones, TXT y SQL. Como sus nombres lo dicen SQL trabaja con bases de datos MySQL mientras que txt trabaja
con archivos de texto. Se recomienda utilizar SQL para un mejor desempeo. Est actualizado segn el cliente
coreano de Ragnarok Online (kRO) ya que es el que tiene
las ltimas novedades de Ragnarok Online.
Muchos de los servidores Ragnarok Online son creados
sobre la base de eAthena ya que estos son muy modicables y no son el juego en si, es solo una emulacin a
diferencia de los servidores basados en el mismo cdigo de Ragnarok Online que son ilegales ya que violan los
Derechos de autor que impone Gravity Corp..
Algunos de los servidores ms populares funcionan bajo
eAthena, debido a ser normalmente gratuitos
Cabe resaltar que todo el material que se encuentra en la
parte del cliente, es el que se distribuye sin costo alguno
en los ociales y que Gravity Corp, solamente exime a
Gravity de toda responsabilidad por ello, incluido su servidor gratuito de prueba.
132
Captulo 69
Efecto Hover
El efecto Hover consiste en la alteracin del aspecto de
un elemento de la interfaz grca* [1] cuando se sita
el puntero sobre el mismo, pero no se ha seleccionado
an.* [2]
69.1 Referencias
[1] Ejemplo de efecto Hover sobre un enlace.
[2] Blog de Andrs Nieto
133
Captulo 70
Emtp
EMTP es un programa de computadora destinado al an- sistema simulado.
lisis de circuitos elctricos, especialmente en rgimen
transitorio. El programa permite modelar matemticamente sistemas elctricos, mecnicos y de control, mo- 70.4 Distribucin de EMTP-ATP
nofsicos y polifsicos. Su nombre proviene del acrnimo
ingls ElectroMagnetic Transients Program.
El ATP se distribuye por medio de los grupos de usuarios
existentes en varias regiones del mundo. Cualquier persona puede solicitar los materiales del programa siempre
70.1 Historia
que est de acuerdo con la licencia y que sea aprobado
por el grupo de usuarios.
El programa EMTP fue desarrollado como contrapar- Algunos grupos de usuarios son:
te del Transient Network Analyzer (TNA, Analizador de
transitorios en redes) en los aos nales de la dcada de
Canadian/American EMTP User Group
1960 por Hermann W. Dommel. Aos ms tarde l cede European EMTP-ATP Users Group Assoc.
ra los derechos de autor sobre el programa a la Bonneville
(EEUG)
Power Administration (BPA) de los Estados Unidos.
Japanese ATP User Group (JAUG)
Latin American EMTP User Group (CAUE)
70.2 ATP
70.6 Referencias
Captulo 71
Enlace dinmico
Un enlace dinmico es aquel en el cual una biblioteca de
cdigo es enlazada cuando un determinado programa se
ejecuta (en oposicin a un enlace esttico, que se produce en tiempo de compilacin). La ventaja de este tipo de
enlace es que el programa es ms liviano, y que evita la
duplicacin de cdigo (por ejemplo, cuando dos programas requieren usar la misma biblioteca, se necesita slo
una copia de sta).
Las bibliotecas de enlace dinmico, o bibliotecas compartidas, suelen encontrarse en directorios especcos del
sistema operativo, de forma que, cada vez que un programa necesite usar alguna, el sistema operativo conozca el
lugar en el que se encuentra, para as poder enlazarla. Esto
ocasiona algunos problemas de dependencias, principalmente entre diferentes versiones de una misma biblioteca.
Muchos programas tienen procedimientos a los que no
llaman, salvo en circunstancias excepcionales. Haciendo
uso de bibliotecas de enlace dinmico, despus del ensamblaje, podemos enlazar cada procedimiento en el momento en que es llamado.
135
Captulo 72
Enlace esttico
Una biblioteca esttica es aquella que se enlaza en tiempo
de compilacin (en oposicin a una de enlace dinmico,
que se enlaza en tiempo de ejecucin). La ventaja de este
tipo de enlace es que hace que un programa no dependa
de ninguna biblioteca (puesto que las enlaz al compilar),
haciendo ms fcil su distribucin.
El enlazado permite al programador y al propio sistema
operativo dividir un programa en varios archivos llamados mdulos, que pueden ensamblarse por separado y enlazarse en una ocasin posterior, el enlace puede ser de
naturaleza esttica o dinmica. El enlace esttico da como
resultado, un archivo ejecutable con todos los smbolos y
mdulos respectivos incluidos en dicho archivo.
136
Captulo 73
Enlazado
Enlazado, es un proceso que une el cdigo de los mdulos y bibliotecas que forman un programa para generar el
ejecutable nal.
Este proceso es realizado muchas veces directamente por
el compilador y coloca las referencias externas (como a
las DLL) de manera que funcionen directamente, como
puede ser la situacin de las funciones de manera numrica. En algunos compiladores viene un ejecutable especco link.exe para esta funcin.
137
Captulo 74
Entrada chapuza
En computacin el antipatrn de diseo Chapuza de entrada ocurre cuando la entrada de datos de un programa
especco no se maneja adecuadamente. Por ejemplo, si
un programa acepta la entrada de cualquier texto por parte del usuario nal y se utiliza un algoritmo que manipule
mediante muchas combinaciones todas las cadenas posibles tanto si son vlidas como si no lo son.
Por lo general es difcil para un programador detectar, en
una prueba de unidad, todas las posibles combinaciones
errneas de una entrada de datos. Sin embargo es muy
fcil para el usuario nal reconocer que la cadena de entrada es incorrecta y as bloquear el programa. De hecho,
el Desbordamiento de bfer es un ejemplo de agujero de
seguridad provocado por los problemas que causa un mal
manejo de los datos de entrada.
Para evitar la Chapuza de entrada se pueden utilizar algoritmos de validacin que determinen que datos deben
ser vlidos y evitar el tratamiento de los datos no vlidos. Por ejemplo, realizar el anlisis lxico y/o sintctico
utilizando software especco tales como la Herramienta
de programacin lex, Yacc y GNU_Bison que permiten
obtener un control robusto de texto compuesto por expresiones regulares y gramticas libres de contexto del lenguaje. Se recomienda el empleo de estas tecnologas para
asegurar el manejo adecuado de entradas inesperadas.
138
Captulo 75
Error de software
realidad, el trmino bugya formaba parte del idioma, al menos desde que Thomas Alva Edison lo utiliz en
1889 rerindose a interferencias y mal funcionamiento.
Es posible que Hopper lo haya asociado por primera vez a
la informtica, en este caso, relacionado a un insecto real.
Por otra parte, aunque durante los aos 50 del siglo XX,
Hopper tambin emple el trminodebugal hablar de
la depuracin de errores en los cdigos de programacin,
el primer uso registrado del trmino se encuentra en la
Journal of the Royal Aeronautical Society de 1945.* [7]
Entre las numerosas incidencias notables causadas por este tipo de error se incluyen la destruccin, en 1962, de
la sonda espacial Mariner 1,* [1] en 1996, del Ariane 5
501.* [2] y, en 2015, el Airbus A400M* [3]
140
Los diferentes lenguajes de programacin permiten diferentes construcciones lgicas a los programadores para
atrapar y resolver errores en tiempo de ejecucin, como
pueden ser las sentencias assert, try y on error en diferentes lenguajes de programacin.
Agujero de seguridad
Hotx
Bugzilla
Depurador
Depuracin de programas
Ingeniera de software
75.7 Referencias
[1] (en ingls) History's Worst Software Bugs., p. 1. Wired.
Consultado el 20 de marzo de 2014.
[2] (en ingls) History's Worst Software Bugs., p. 2. Wired.
Consultado el 20 de marzo de 2014.
[3] (en ingls) Airbus Cites Assembly Problem in A400M
Crash. Consultado el 22 de junio de 2015
[4] (en ingls) Rear Admiral Grace Murray Hopper, USNR,
(1906-1992): imagen: Photo #: NH 96566-KN. Naval
History and Heritage Command. Consultado el 20 de marzo de 2014.
[5] bug
141
Captulo 76
Estilo de programacin
Estilo de programacin (tambin llamado estndares de o bien:
cdigo o convencin de cdigo) es un trmino que des- if(horas < 24 && minutos < 60 && segundos < 60) {
cribe convenciones para escribir cdigo fuente en ciertos return true; } else { return false; }
lenguajes de programacin.
El estilo de programacin es frecuentemente dependien- con algo como:
te del lenguaje de programacin que se haya elegido para
escribir. Por ejemplo el estilo del lenguaje de programa- if(horas<24&&minutos<60&&segundos<60){return
true;} else{return false;}
cin C variar con respecto al del lenguaje BASIC.
76.1.2
Estilo de indentacin
if(horas < 24 && minutos < 60 && segundos < 60){ El extracto anterior cumple con las dos recomendaciones
return true; }else{ return false; }
de estilo anteriores, pero el siguiente uso de la construccin for hace el cdigo mucho ms fcil de leer:
142
143
(traduccin al espaol)
Gua de estilo para cdigo Python (traduccin al espaol)
Estndar de cdigo: C# (Philips Medical Systems)
Estilo de programacin para Mono
76.1.5
Espaciado
76.3.3 Convenciones de cdigo de proyecint cuenta; for (cuenta = 0; cuenta < 10; cuenta++) {
tos
printf("%d, cuenta * cuenta + cuenta); }
En los lenguajes de programacin de la familia C se recomienda tambin evitar el uso de caracteres tabulador en
medio de una lnea, ya que diferentes editores de textos
muestran su anchura de forma diferente.
El lenguaje de programacin Python usa indentacin para
indicar estructuras de control, por tanto se requiere obligatoriamente una buena indentacin. Haciendo esto, la
necesidad de marcar con llaves ({ y }) es eliminada, y la
legibilidad es mejorada sin interferir con los estilos de codicacin comunes. Con todo, esto lleva frecuentemente
a problemas donde el cdigo es copiado y pegado dentro de un programa Python, requiriendo un tedioso reformateado. Adicionalmente, el cdigo Python se vuelve
inusable cuando es publicado en un foro o pgina web que
elimine el espacio en blanco.
76.3.2
Captulo 77
144
Captulo 78
Algunos sistemas tienen instrucciones multioperacin indivisibles similares a las anteriormente descritas para manipular las listas enlazadas que se utilizan para las colas
de eventos y otras estructuras de datos que los sistemas
operativos usan comnmente.
La mayora de los mtodos de exclusin mutua clsicos
intentan reducir la latencia y espera activa mediante las
colas y cambios de contexto. Algunos investigadores arman que las pruebas indican que estos algoritmos especiales pierden ms tiempo del que ahorran.
A pesar de todo lo dicho, muchas tcnicas de exclusin mutua tienen efectos colaterales. Por ejemplo, los
semforos permiten interbloqueos (deadlocks) en los que
un proceso obtiene un semforo, otro proceso obtiene el
145
Captulo 79
Expresin regular
Una expresin regular, a menudo llamada tambin re- Agrupacin Los parntesis pueden usarse para denir
gex, es una secuencia de caracteres que forma un patrn
el mbito y precedencia de los dems operadores.
de bsqueda, principalmente utilizada para la bsqueda
Por ejemplo, "(p|m)adrees lo mismo que pade patrones de cadenas de caracteres u operaciones de
dre|madre, y "(des)?amorse corresponde con
sustituciones. Por ejemplo, el grupo formado por las caamor y con desamor.
denas Handel, Hndel y Haendel se describe con el patrn
H(a||ae)ndel. La mayora de las formalizaciones proporcionan los siguientes constructores: una expresin regular es una forma de representar a los lenguajes regulares (nitos o innitos) y se construye utilizando caracteres Los constructores pueden combinarse libremente dentro
de la misma expresin, por lo queH(ae?|)ndelequivale
del alfabeto sobre el cual se dene el lenguaje.
a H(a|ae|)ndel.
En informtica, las expresiones regulares proveen una
manera muy exible de buscar o reconocer cadenas de La sintaxis precisa de las expresiones regulares cambia
segn las herramientas y aplicaciones consideradas, y se
texto.
describe con ms detalle a continuacin.
79.2 Aplicaciones
147
C++: Desde su versin C++11 es posible utilizar expresiones regulares mediante la biblioteca estndar,
usando la cabecera <regex>.
Perl: es el lenguaje que hizo crecer a las expresiones regulares en el mbito de la programacin hasta
llegar a lo que son hoy en da.
PCRE: biblioteca de ExReg para C, C++ y otros
lenguajes que puedan utilizar bibliotecas dll (Visual
Basic 6 por ejemplo).
PHP: tiene dos tipos diferentes de expresiones regulares disponibles para el programador, aunque la
variante POSIX (ereg) va a ser desechada en PHP
6.
Python: lenguaje de scripting con soporte de expresiones regulares mediante su librera <regex>.
.Net Framework: provee un conjunto de clases mediante las cuales es posible utilizar expresiones regulares para hacer bsquedas, reemplazar cadenas y
validar patrones.
grep: programa
Unix/Linux.
de
los
sistemas
148
motores de bsqueda permiten adicionalmente especicar que se desea encontrar solamente palabras completas, solucionando este problema. Las expresiones regulares permiten especicar todas estas opciones adicionales y muchas otras sin necesidad de congurar opciones
adicionales, sino utilizando el mismo texto de bsqueda
como un lenguaje que permite enviarle al motor de bsqueda exactamente lo que deseamos encontrar en todos
los casos, sin necesidad de activar opciones adicionales al
realizar la bsqueda.
Para especicar opciones dentro del texto a buscar se utiliza un lenguaje o convencin mediante el cual se le transmite al motor de bsqueda el resultado que se desea obtener. Este lenguaje le da un signicado especial a una serie
de caracteres. Por lo tanto cuando el motor de bsqueda
de expresiones regulares encuentre estos caracteres no los
buscar en el texto en forma literal, sino que buscar lo
que los caracteres signican. A estos caracteres se les llama algunas vecesmeta-caracteres. A continuacin se
listan los principales meta-caracteres y su funcin y cmo
los interpreta el motor de expresiones regulares.
El punto ".
Se utiliza para realizar una bsqueda anticipada negativa. La construccin de la expresin regular es con el
par de parntesis, el parntesis de apertura seguida de un
signo de interrogacin y un signo de exclamacin. Dentro
de la bsqueda tenemos la expresin regular. Por ejemplo, para excluir exactamente una palabra, habr que utilizar "^(palabra.+|(?!palabra).*)$"
Se utiliza para escapar el siguiente carcter de la expresin de bsqueda de forma que este adquiera un signicado especial o deje de tenerlo. O sea, la barra inversa no se
utiliza nunca por s sola, sino en combinacin con otros
caracteres. Al utilizarlo por ejemplo en combinacin con
el punto "\.este deja de tener su signicado normal y se
comporta como un carcter literal.
De la misma forma, cuando se coloca la barra inversa seguida de cualquiera de los caracteres especiales que discutiremos a continuacin, estos dejan de tener su signicado especial y se convierten en caracteres de bsqueda
literal.
Como ya se mencion con anterioridad, la barra inversa
tambin puede darle signicado especial a caracteres que
no lo tienen. A continuacin hay una lista de algunas de
estas combinaciones:
\t Representa un tabulador.
\r Representa elretorno de carrooregreso al
inicioo sea el lugar en que la lnea vuelve a iniciar.
\n Representa lanueva lneael carcter por medio del cual una lnea da inicio. Es necesario recordar que en Windows es necesaria una combinacin
de \r\n para comenzar una nueva lnea, mientras que
en Unix solamente se usa \n y en Mac_OS clsico se
usa solamente \r.
\a Representa una campanao beepque se
produce al imprimir este carcter.
\e Representa la tecla Esco Escape
\f Representa un salto de pgina
\v Representa un tabulador vertical
\x Se utiliza para representar caracteres ASCII o
ANSI si conoce su cdigo. De esta forma, si se busca
el smbolo de derechos de autor y la fuente en la que
se busca utiliza el conjunto de caracteres Latin-1 es
posible encontrarlo utilizando "\xA9.
\u Se utiliza para representar caracteres Unicode
si se conoce su cdigo. "\u00A2representa el smbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
149
La barra "|"
150
de una fecha tambin es posible mediante expresiones re- denen grupos annimos, sin embargo el signo de
gulares, como se ejemplica ms adelante.
pregunta en conjunto con los parntesis triangulares "<>"
permite nombrarestos grupos de la siguiente forma:
"^(?<Da>\d\d)\/(?<Mes>\d\d)\/(?<Ao>\d\d\d\d)$";
79.4.8 Los parntesis "()"
Con lo cual se le especica al motor de bsqueda que
los primeros dos dgitos encontrados llevarn la etiqueta
De forma similar que los corchetes, los parntesis sirven Da, los segundos la etiqueta Mesy los ltimos
para agrupar caracteres, sin embargo existen varias dife- cuatro dgitos llevarn la etiqueta Ao.
rencias fundamentales entre los grupos establecidos por
medio de corchetes y los grupos establecidos por parn- NOTA: a pesar de la complejidad y exibilidad dada por
los caracteres especiales estudiados hasta ahora, en su
tesis:
mayora nos permiten encontrar solamente un carcter
a la vez, o un grupo de caracteres a la vez. Los meta Los caracteres especiales conservan su signicado
caracteres enumerados en adelante permiten establecer
dentro de los parntesis.
repeticiones.
Los grupos establecidos con parntesis establecen
una etiquetao punto de referenciapara el
motor de bsqueda que puede ser utilizada poste- 79.4.10 Las llaves "{}"
riormente como se denota ms adelante.
Comnmente las llaves son caracteres literales cuando se
Utilizados en conjunto con la barra "|" permite ha- utilizan por separado en una expresin regular. Para que
cer bsquedas opcionales. Por ejemplo la expresin adquieran su funcin de metacaracteres es necesario que
regular al (este|oeste|norte|sur) depermite bus- encierren uno o varios nmeros separados por coma y que
car textos que den indicaciones por medio de puntos estn colocados a la derecha de otra expresin regular
cardinales, mientras que la expresin regular es- de la siguiente forma: "\d{2}" Esta expresin le dice al
te|oeste|norte|surencontraraesteen la palabra motor de bsqueda que encuentre dos dgitos contiguos.
esteban, no pudiendo cumplir con este propsito. Utilizando esta frmula podramos convertir el ejemplo
"^\d\d/\d\d/\d\d\d\d$" que serva para validar un formato
Utilizados en conjunto con otros caracteres especiade fecha en "^\d{2}/\d{2}/\d{4}$" para una mayor clales que se detallan posteriormente, ofrece funcionaridad en la lectura de la expresin.
lidad adicional.
"\d{2,4}" Esta forma aade un segundo nmero separado
por una coma, el cul indica al motor de bsqueda que
79.4.9 El signo de interrogacin "?"
como mximo debe aparecer 4 veces la expresin regular
\d. Los posibles valores son:
El signo de interrogacin tiene varias funciones dentro
del lenguaje de las expresiones regulares. La primera de
"^\d\d$" (mnimo 2 repeticiones)
ellas es especicar que una parte de la bsqueda es opcional. Por ejemplo, la expresin regular ob?scuridad "^\d\d\d$"(tiene 3 repeticiones, por lo tanto entra en
permite encontrar tanto oscuridadcomo obscuriel rango 2-4)
dad. En conjunto con los parntesis redondos permite
"^\d\d\d\d$" (mximo 4 repeticiones)
especicar que un conjunto mayor de caracteres es
opcional; por ejemploNov(\.|iembre|ember)?" permite
encontrar tanto Novcomo Nov., Noviembre Nota: aunque esta forma de encontrar elementos repetiy November. Como se mencion anteriormente, los dos es muy til, algunas veces no se conoce con claridad
parntesis nos permiten establecer un punto de refe- cuantas veces se repite lo que se busca o su grado de rerenciapara el motor de bsqueda. Sin embargo, algunas peticin es variable. En estos casos los siguientes metaveces, no se desea utilizarlos con este propsito, como caracteres son tiles.
en el ejemplo anterior Nov(\.|iembre|ember)?". En
este caso el establecimiento de este punto de referencia
(que se detalla ms adelante) representa una inversin 79.4.11 El asterisco "*"
intil de recursos por parte del motor de bsqueda.
Para evitarlo se puede utilizar el signo de pregunta El asterisco sirve para encontrar algo que se encuentra rede la siguiente forma: Nov(?:\.|iembre|ember)?". petido 0 o ms veces. Por ejemplo, utilizando la expresin
Aunque el resultado obtenido ser el mismo, el motor "[a-zA-Z]\d*" ser posible encontrar tanto Hcomo
de bsqueda no realizar una inversin intil de recursos H1,H01,H100yH1000, es decir, una letra
en este grupo, sino que lo ignorar. Cuando no sea seguida de un nmero indenido de dgitos. Es necesario
necesario reutilizar el grupo, es aconsejable utilizar tener cuidado con el comportamiento del asterisco, ya que
este formato. De forma similar, es posible utilizar el ste, por defecto, trata de encontrar la mayor cantidad posigno de pregunta con otro signicado: Los parntesis sible de caracteres que correspondan con el patrn que se
79.4.12
151
Se utiliza para encontrar una cadena que se encuentre repetida una o ms veces. A diferencia del asterisco, la expresin "[a-zA-Z]\d+" encontrarH1pero no encontrar H. Tambin es posible utilizar este metacarcter en conjunto con el signo de interrogacin para limitar
hasta donde se efecta la repeticin.
Utilizando el ejemplo anterior es posible convertir "<([azA-Z]\w*?)>" en "<(?<TagName>[a-zA-Z]\w*?)>" Pa79.4.13 Grupos annimos
ra encontrar etiquetas HTML. Ntese el signo de pregunta y el textoTagNameencerrado entre parntesis trianLos grupos annimos se establecen cada vez que se en- gulares, seguido de ste. Para utilizar este ejemplo en el
cierra una expresin regular en parntesis, por lo que la .Net Framework es posible utilizar el siguiente cdigo:
expresin "<([a-zA-Z]\w*?)>" dene un grupo annimo.
Regex _TagParser = new Regex("<(?<TagName>[aEl motor de bsqueda almacenar una referencia al grupo
zA-Z]\w*?)>"); foreach(Match CurrentMatch in
annimo que corresponda a la expresin encerrada entre
_TagParser.Matches(sText)){ String sTagName = Culos parntesis.
rrentMatch. Groups["TagName"]. Value; }
La forma ms inmediata de utilizar los grupos que se
denen, es dentro de la misma expresin regular, lo
Es posible denir tantos grupos como sea nececual se realiza utilizando la barra inversa "\" seguida
sario, de esta forma se puede denir algo como:
del nmero del grupo al que se desea hacer referen"<(?<TagName>[a-zA-Z]\w*?) ?(?<Attributes>.*?)>"
cia de la siguiente forma: "<([a-zA-Z]\w*?)>.*?</\1>"
para encontrar no solo el nombre del tag HTML sino
Esta expresin regular encontrar tanto la cadena
tambin sus atributos de la siguiente forma:
"<font>Esta</font>" como la cadena "<b>prueba</b>"
en el texto "<font>Esta</font> es una <b>prueba</b>" a Regex _TagParser = new Regex("<(?<TagName>[apesar de que la expresin no contiene los literalesfont zA-Z]\w*?) ?(?<Attributes>.*?)>"); foreach(Match
CurrentMatch in _TagParser.Matches(sText)){ String
y B.
sTagName = CurrentMatch. Groups["TagName"].
Otra forma de utilizar los grupos es en el lenguaje de proValue;
String
sAttributes
=
CurrentMatch.
gramacin que se est utilizando. Cada lenguaje tiene una
Groups["Attributes"]. Value; }
forma distinta de acceder a los grupos. Los ejemplos enumerados a continuacin utilizan las clases del .Net Framework, usando la sintxis de C# (la cual puede fcil- Pero es posible ir mucho ms all de la siguiente forma:
mente adaptarse a VB .Net o cualquier otro lenguaje del "<?(?<TagName>[a-zA-Z][\w\r\n]*?) ?(?:(?<AttribuFramework o incluso Java o JavaScript).
te>[\w-\r\n]*?)='?"?(?<Value>[\w-:;,\./=
\r\n]*?)'?"?
Para utilizar el motor de bsqueda del .Net Framework ?)>"
es necesario en primer lugar hacer referencia al espacio
de nombres System.Text.RegularExpressions. Luego es Esta expresin permite encontrar el nombre de la etiquenecesario declarar una instancia de la clase Regex de la ta, el nombre del atributo y su valor.
siguiente forma:
Sin embargo, una etiqueta HTML puede tener ms de un
Regex _TagParser = new Regex("<([a-zA-Z]\w*?)>");
152
atributo. Este puede resolverse utilizando repeticiones de
la siguiente forma:
"<?(?<TagName>[a-zA-Z][\w\r\n]*?) ?(?:(?<Attribute>[\w-\r\n]*?)='?"?(?<Value>[\w-:;,\./=
\r\n]*?)'?"?
?)*?>"
Y en el cdigo puede utilizarse de la siguiente forma:
Regex _TagParser = new Regex("<?(?<TagName>[azA-Z][\w\r\n]*?)?
(?:(?<Attribute>[\w-\r\n]*?)='?"?
(?<Value>[\w-:;,\./= \r\n]*?)'?"? ?)*?>"); foreach(Match
CurrentMatch in _TagParser.Matches(sText)){ String
sTagName = CurrentMatch. Groups["TagName"]. Value; foreach(Capture CurrentCapture in CurrentMatch.
Groups["Attribute"]. Captures){ AttributesCollection.
Add(CurrentCapture. Value) } foreach(Capture CurrentCapture in CurrentMatch. Groups["value"]. Captures){
ValuesCollection. Add(CurrentCapture. Value) } }
Es posible profundizar utilizando una expresin regular
como esta:
"<?(?<TagName>[a-zA-Z][\w\r\n]*?) ?(?:(?<Attribute>[\w-\r\n]*?)='?"?(?<Value>[\w-:;,\./=
\r\n]*?)'?"?
?)*?>(?<Content>.*?)</\1>"
La cual permitira encontrar el nombre de la etiqueta, sus
atributos, valores y el contenido de esta, todo con una sola
expresin regular.
Captulo 80
Flag
En programacin, la bandera o ag se reere a uno o
ms bits que se utilizan para almacenar un valor binario
o cdigo que tiene asignado un signicado. Las banderas
normalmente forman parte de una determinada estructura de datos, como un registro de una base de datos, y el
signicado del valor que gura en una bandera tpicamente se denir en relacin a la estructura de datos de la que
forma parte. En muchos casos el valor binario de la bandera se entender como la representacin de uno de los
posibles estados. En otras ocasiones, los valores binarios
pueden representar uno o ms atributos de un campo de
bits, a menudo relacionados con habilidades o permisos,
como se puede escribiro puede ser borrado. De
todos modos, hay muchos otros posibles signicados que
pueden asignarse a los valores de la bandera. Un uso comn de las banderas es marcar o designar estructuras de
datos para un posterior tratamiento.
Dentro de los microprocesadores y otros dispositivos
lgicos, las banderas se utilizan mayoritariamente para
controlar o indicar el estado intermedio o nal o el resultado de diferentes operaciones. Por ejemplo, los microprocesadores suelen tener un registro de estado que se
compone de varias de estas banderas que se usarn para
indicar varias condiciones establecidas como resultado de
una operacin, como podra ser hacer notar que ha habido un desbordamiento en una operacin aritmtica. Una
vez establecidas, las banderas pueden utilizarse en operaciones posteriores como el control de ujo en una operacin de salto condicional. Por ejemplo, la instruccin
en lenguaje ensamblador de Intel x86 je (salta si igual)
comprobar el ag Z (cero) del registro de estado y si est establecido (por una operacin anterior) ejecutar un
salto a la direccin indicada.
A los diferentes parmetros de control de una shell de
lnea de comandos tambin se les suele llamar banderas.
Estas shells utilizan un analizador sintctico para traducir
los parmetros pasados en banderas al uso de las vistas en
este artculo.
153
Captulo 81
Front-end y back-end
Front-end y back-end son trminos que se reeren a la
separacin de intereses entre una capa de presentacin y
una capa de acceso a datos, respectivamente. Pueden traducirse al espaol el primero como interfaz, nal frontal o frontal y el segundo como motor, dorsal nal* [1]o
zaga,* [2] aunque es comn dejar estos trminos en ingls.
Muchos programas tienen su concepto de diseo dividido en front-ends y back-ends, pero en la mayora de los
casos, el back-end est oculto del usuario nal y solo pueden utilizarlo el cliente intermedio o el administrador que
se encargar de gestionar el sistema de informacin. Sin
embargo, muchos programas estn escritos para servir de
simple front-end para otros que ya existen, como es el ca81.1 Informtica
so de las interfaces grcas construidas sobre una interfaz
de lnea de rdenes. Este tipo de front-end es comn en
En diseo de software el front-end es la parte del software entornos de escritorio Unix (como los GUI), donde los
que interacta con el o los usuarios y el back-end es la programas son desarrollados siguiendo la losofa de diparte que procesa la entrada desde el front-end. La se- seo de muchos programas pequeos capaces de ejecutarparacin del sistema en front-ends y back-ends es un tipo se independientemente o combinados.
de abstraccin que ayuda a mantener las diferentes partes
del sistema separadas. La idea general es que el front-end
sea el responsable de recolectar los datos de entrada del
81.2 Tecnologa
usuario, que pueden ser de muchas y variadas formas, y
los transforma ajustndolos a las especicaciones que demanda el back-end para poder procesarlos, devolviendo En radiotelescopios y antenas parablicas, el front-end
generalmente una respuesta que el front-end recibe y ex- consiste en un paquete que contiene a la antena de bopone al usuario de una forma entendible para este. La co- cina y a la gua de ondas, como un requisito para que las
nexin del front-end y el back-end es un tipo de interfaz. antenas detecten la seal de radio. El back end se reere
al amplicador y al ltro que rena y modica la seal
En diseo web (o desarrollo web) hace referencia a la vi- antes de presentarla al usuario.
sualizacin del usuario navegante por un lado (front-end),
y del administrador del sitio con sus respectivos sistemas En la automatizacin de diseo electrnico, el ciclo del
diseo, que es el front-end, equivale al diseo lgico y
por el otro (back-end).
elctrico (ej. captura esquemtica, sntesis lgica). A veMuchos mtodos conocidos para interactuar con ordenaces el boceto de una estructura (del ingls oorplanning),
dores pueden ser conceptualizados en trminos de front- es considerado como un front-end. Un place and route
end y back-end. Por ejemplo, un administrador de archi- (del idioma ingls, un lugar y ruta) o un diseo personavos grco como Windows Explorer, Dolphin, Nautilus lizado de la capa de vericacin fsica (design rule checy Finder puede ser considerado como un front-end para king), o una disposicin (layout) versus esquemtica, son
el sistema de archivos de la computadora. Otro ejemplo considerados como back-end.
consiste en considerar al Shell como front-end que sirve
como interfaz para interactuar con el ncleo del sistema En diseo de circuitos integrados de radiofrecuencia el
front-end hace referencia a los bloques de la cadena de
operativo que cumple el rol back-end.
recepcin que se encargan de ltrar, amplicar y traslaEn un compilador el front-end traslada el lenguaje del c- dar la seal de RF a banda base. Generalmente los blodigo fuente a una representacin intermedia que a su vez ques comprendidos son balun, amplicador de bajo ruido
funciona con el back-end para producir en la salida el c- (LNA), ltros y mezcladores de seal. Por otro lado, acdigo.
tualmente las tecnologas de radio denida por software
En sintetizadores del habla, el front-end se reere a la par- (SDR) y radio cognitiva (CR), entre otras, implementan
te del sistema que convierte la entrada del texto en una re- front-ends que no necesariamente integran todos los blo154
81.4. REFERENCIAS
ques anteriormente citados.
81.4 Referencias
[1] http://forum.wordreference.com/showthread.php?t=
215444
[2] http://es.bab.la/diccionario/ingles-espanol/back-end
155
Captulo 82
Fuga de memoria
Una fuga de memoria (ms conocido por el trmino
ingls memory leak) es un error de software que ocurre
cuando un bloque de memoria reservada no es liberada en
un programa de computacin. Comnmente ocurre porque se pierden todas las referencias a esa rea de memoria
antes de haberse liberado.
La versin en C requiere que el desarrollador haga la liberacin de memoria, a diferencia de la versin en C++.
Esto evita la sobrecarga de los esquemas de la recoleccin
de basura, e incluso puede ser aplicado a otros recursos
como:
82.1 RAII
157
Captulo 83
Generacin de cdigo
En programacin, la generacin de cdigo es una de
las fases mediante el cual un compilador convierte un
programa sintcticamente correcto en una serie de instrucciones a ser interpretadas por una mquina. La entrada en esta fase viene representada, tpicamente, por
un rbol Sintctico, un rbol de Sintaxis Abstracta, o
una Representacin Intermedia; la mquina destino puede ser un microprocesador o una mquina abstracta tal
como una mquina virtual o un lenguaje intermedio, legible por un humano. Compiladores ms sosticados realizan mltiples traducciones en cadena (pipelining) con el
n de poder construir cdigo para mltiples plataformas y
evitar tener que construir todas las capas del compilador.
En trminos ms generales, la generacin de cdigo: es
usada para construir programas de una manera automtica evitando que los programadores tengan que escribir el
cdigo a mano. La generacin de cdigo puede realizarse en tiempo de ejecucin, Tiempo de carga, o Tiempo
de compilacin. Los compiladores JIT son un ejemplo de
generadores de cdigo.
158
Captulo 84
84.1 Algoritmos
Si c0:
m.c.d.(c, m) = 1
a 1 (mod p) para cada primo p de m
a 1 (mod 4) si 4 es divisor de m
Si c=0:
La constante multiplicativa: a
m es primo
La constante aditiva: c
El nmero m respecto al cual se calculan los restos
Estos cuatro valores deben ser nmeros enteros no nega- Por ejemplo, tomando como valores m = 25 = 32 ,
tivos y que cumplan la siguiente condicin: x0 , a, c < m a = 5 , x0 = 1 y c = 3 se obtiene la siguiente secuencia
.
de nmeros, que tiene longitud mxima:
La mayor parte de los generadores de nmeros aleatorios 18-11-26-5-28-15-14-9-16-19-2-13-4-23-22-17-24son, en realidad, pseudoaleatorios; se calcula (o introduce 27-10-21-12-31-30-25-0-3-18-29-20-7-6-1
159
160
84.2 Bibliografa
Alberto, Marva; Schwer, Ingrid; Cmara, Viviana; Fumero, Yanina (2005). Matemtica Discreta. Universidad Nac. del Litoral. p. 295. ISBN
9789875084315.
Blanco Castaeda, Liliana (2004). Probabilidad.
textos. Univ. Nacional de Colombia. p. 295. ISBN
9789587014495.
Captulo 85
Gledplay
GledPlay es un SDK para desarrollar juegos para cepto de Sprite. Las caractersticas principales de Gleddispositivos mviles. Los juegos construidos con Gled- Draw son:
Play corren sobre PC de escritorio con Microsoft Windows, PocketPC and Smartphones.
copiado rpido de supercies, con transparencia
alpha blending o color clave.
GledPlay contiene 4 mdulos de desarrollo:
GledDraw: Un framework de grcos 2D orientado
a Supercies, basado en DirectDraw.
GledVideo: Un reproductor de video integrado con
GledDraw.
GledSave: Un mdulo de abstraccin del Sistema de
archivos, que permita la lectura y escritura de archivos en paquetes.
GledApplication: Un mdulo especco para manejar los detalles de programacin no relacionados con
la lgica del juego.
Smartphones
GledPlay fomenta el desarrollo sobre PC de escritorio,
sin utilizar emuladores o dispositivos mviles reales. Una
vez nalizado el desarrollo con GledPlay para computadores de escritorio, la aplicacin se compila para las
plataformas deseadas utilizando el mismo cdigo. De esta manera se reduce el tiempo de desarrollo.
85.2 GledDraw
GledDraw es un framework de grcos 2D orientado a
Supercies, basado en DirectDraw. Se maneja con entidades llamadas supercies, que seran similares al con161
162
85.3 GledVideo
Las principales funcionalidades de GledVideo son:
reproduccin de videos OGG Theora
Manejo de subtitulos, utilizando an archivo de subtitulos SubRip
85.4 GledSave
GledSave provee un API comn para acceder a diferentes sistemas de archivo, basado en Jakarta's Common Virtual File System. Es una interfaz simple que permite acceder a diferentes sistemas de la misma manera. Funciona
para:
Computadores de escritorio con MS Windows.
Pocket PC
Smartphones
Archivos ZIP
85.5 GledApplication
GledApplication maneja los detalles especcos de la
programacin que no estn relacionadas con la lgica del
juego como la inicializacin de threads, el manejo de
eventos, el ciclo del juego, los estados del juego, etc.
Manejo de la aplicacin como inicio y n.
Conguracin de la mquina de estados para usar
diferentes ciclos.
Manipulacin de los fps.
Captulo 86
GPGPU
GPGPU o General-Purpose Computing on Graphics Processing Units es un concepto reciente dentro de
informtica que trata de estudiar y aprovechar las capacidades de cmputo de una GPU.
86.1 Modelo
GPU
de
programacin
Debido a las diferencias fundamentales entre las arquitecturas de la GPU y la CPU, no cualquier problema se
puede beneciar de una implementacin en la GPU. En
concreto, el acceso a memoria plantea las mayores dicultades. Las CPU estn diseadas para el acceso aleatorio a memoria. Esto favorece la creacin de estructuras
de datos complejas, con punteros a posiciones arbitrarias en memoria. En cambio, en una GPU, el acceso a
memoria est mucho ms restringido. Por ejemplo, en un
procesador de vrtices (la parte de una GPU diseada para transformar vrtice en aplicaciones 3D), se favorece el
modelo scatter, en el que el programa lee en una posicin
predeterminada de la memoria, pero escribe en una o varias posiciones arbitrarias. En cambio, un procesador de
pxeles, o fragmentos, favorece el modelo gather, pudiendo el programa leer de varias posiciones arbitrarias, pero
escribir en slo una posicin predeterminada.
La tarea del diseador de algoritmos GPGPU consiste
principalmente en adaptar los accesos a memoria y las
estructuras de datos a las caractersticas de la GPU. Generalmente, la forma de almacenar datos es en un buer
2D, en lugar de lo que normalmente sera una textura. El
acceso a esas estructuras de datos es el equivalente a una
lectura o escritura de una posicin en la textura. Puesto
86.2 Herramientas
Tradicionalmente, el desarrollo de software GPGPU se
haba hecho bien en lenguaje ensamblador, o bien en alguno de los lenguajes especcos para aplicaciones grcas usando la GPU, como GLSL, Cg o HLSL. Pero
recientemente han surgido herramientas para facilitar el
desarrollo de aplicaciones GPGPU, al abstraer muchos de
los detalles relacionados con los grcos, y presentar una
interfaz de ms alto nivel. Una de ellas es BrookGPU,
desarrollada en la Universidad de Stanford, consistente
en una extensin a ANSI C que proporciona nuevos tipos
de datos y operaciones (stream, kernel, reduction, etc.) automticamente convertidos a una implementacin que aprovecha la GPU sin intervencin explcita por parte del programador. Otra herramienta con
objetivos similares es Sh, una extensin de C++ para
metaprogramacin con una implementacin automtica
en la GPU. La opcin ms extendida en la actualidad es
CUDA, de NVidia, una extensin de C que permite la codicacin de algoritmos en GPU de NVidia. Por ltimo,
podemos incluir en esta discusin a OpenCL, una combinacin de interfaz y lenguaje de programacin para el
desarrollo de aplicaciones paralelas que puedan ser ejecutadas, de forma transparente, en diversas unidades de
procesamiento (CPU multincleo, GPU, etc.).
163
164
86.3 Crticas
Pese a que las ventajas del uso de la GPU para ciertas
aplicaciones es evidente, no faltan las crticas, generalmente referidas a la inconveniencia de usar un procesador
para nes completamente diferentes a lo que se pensaba
al disearlos. Un argumento comn es la falta de continuidad de las arquitecturas usadas. Debido a la rpida
evolucin del hardware grco, implementaciones de algoritmos que funcionaban ptimamente en un modelo de
GPU, dejan de hacerlo, o lo hacen subptimamente en
un modelo posterior. Otra crtica es la falta de precisin
de los registros de coma otante presentes en las GPU.
Generalmente, se utilizan 2 o 4 bytes para representar un
nmero real en una GPU, que en comparacin con los 4,
8 o ms usados en las CPU modernas, no es suciente
para muchas aplicaciones cientcas.
86.4 Otros
Microsoft ha terminado de desarrollar la nueva versin 11
de su API Direct3D. A pesar de que la anterior versin,
Direct3D 10, es relativamente nueva, debido a la cantidad de novedades que estn apareciendo ltimamente en
el mundo de las tarjetas grcas, entre ellas el teselado,
Microsoft desarroll esta nueva versin, en la que cabe
destacar la nueva tecnologa de computacin de shaderspara permitir que la GPU no sea solamente usada
para grcos 3D y as puedan los desarrolladores tomar
ventaja de las tarjetas grcas como procesadores en paralelo.
El proyecto de computacin distribuida Folding@home,
creado por la Universidad de Stanford, ha dado soporte
para utilizar la potencia computacional de la GPU, adems de la CPU. Pruebas recientes hablan de que son posibles ganancias de rendimiento de hasta 40 veces una CPU
Intel Pentium 4, aunque claro, todo esto depende de la
GPU utilizada.
Captulo 87
Hackathon
Un hackathon o hackatn, es un trmino usado en las
comunidades hacker para referirse a un encuentro de
programadores cuyo objetivo es el desarrollo colaborativo de software, aunque en ocasiones puede haber tambin
un componente de hardware. Estos eventos pueden durar
entre dos das y una semana. El objetivo es doble: por un
lado hacer aportes al proyecto de software libre que se
desee y, por otro, aprender sin prisas.* [1]
87.1 Referencias
[1] Harn una hackatn para promover alternativas a los
problemas porteos. diario La nacin. Consultado
el 13 de mayo de 2013.
165
Captulo 88
Hacker
El trmino hacker tiene diferentes signicados. Segn el
diccionario de los hackers,* [1] es todo individuo que se
dedica a programar de forma entusiasta, o sea un experto entusiasta de cualquier tipo, que considera que poner
la informacin al alcance de todos constituye un extraordinario bien.* [2] De acuerdo a Eric Raymond el motivo
principal que tienen estas personas para crear software en
su tiempo libre, y despus distribuirlos de manera gratuita, es el de ser reconocidos por sus iguales.* [3]El trmino
hacker nace en la segunda mitad del siglo XX y su origen
est ligado con los clubes y laboratorios del MIT.
El emblema hacker, un proyecto para crear un smbolo reconocible para la percepcin de la cultura hacker.
166
88.2. HISTORIA
167
Denicin 2: Persona que disfruta aprendiendo de- Los hackers de MIT crearon su propio sistema operativo,
talles de los sistemas de programacin y cmo ex- el ITS que usaba el lenguaje LISP.* [10]
tender sus capacidades, tan intensamente como, al
contrario, muchos usuarios preeren aprender slo
88.2.2 UNIX
el mnimo necesario.
No obstante, ms all de las deniciones del trmino
Hackervinculadas al mundo informtico o tecnolgico, cabe destacar el uso de esta palabra por extensin (y
de hecho as fue en sus inicios el origen de la misma) a
toda persona que implementa soluciones para cualquier
sistema, sea informtico o no, de manera que ste pueda emplearse de formas no pensadas por quienes crearon
dichos sistemas. As mismo, el trmino Hacker est indisolublemente unido a toda persona que manipula o que
posee conocimientos prcticos que modican los usos de
Placa que dicevive libre o muere UNIX* *marca registrada de
las cosas de modo que stas puedan emplearse para nes
laboratorios Bell
no previstos en su origen. De ah el uso de los trminos
dehackeadocomo sinnimo dealterado en su nes
Al mismo tiempo que ARPANET naca, tambin era
para cumplir otras funciones.
creado el sistema
88.2 Historia
En 1961 el MIT, el Massachusetts Institute of Technology, adquiri la microcomputadora PDP-1, lo que atrajo la curiosidad de un grupo de estudiantes que formaban parte del Tech Model Railroad Club, TMRC, ya que
podran interactuar directamente con ella mediante cdigos de programacin. Debido a que la microcomputadora
tardaba mucho en encender, se quedaba prendida toda la
noche haciendo que los miembros del TMRC tuvieran acceso a ella y pudieran empezar a experimentar, uno de los
logros ms famosos de estos experimentos fue la creacin
del videojuego Spacewar. Tiempo despus algunos miembros del TMRC se volvieron miembros del Laboratorio
de Inteligencia Articial del MIT y se llevaron con ellos
la tradicin de jugarse bromas inocentes entre ellos, a las
cuales llamaban hacks. Fueron los miembros de este laboratorio los primeros en autonombrarse hackers.* [7] Esta
comunidad se caracteriza por el lanzamiento del movimiento de software libre. La World Wide Web e Internet
en s misma son creaciones de hackers.* [8]
88.2.1
ARPANET
88.2.3 GNU
En 1983 Stallman buscaba crear un propio sistema operativo de tipo UNIX que estuviese disponible de forma
libre* [13], y fund el proyecto GNU (acrnimo de GNU
No es UNIX). Stallman sustituy el copyright o todos los
derechos reservados, por el copyleft o todos los derechos
reversados, con lo que buscaba que cualquier programa
publicado en la red por la FSF pudiera ser utilizado y
modicado bajo una licencia de la Fundacin y con la
condicin de difundir las modicaciones que se llegasen
a hacer al programa tambin respetando las libertades del
usuario. Otro de sus logros fue haber popularizado el trmino "software libre" en un intento de conseguir su objetivo y ponerle nombre al producto de toda cultura hacker.* [14]
168
88.2.4
LINUX
88.4 Controversia
En la actualidad se usa de forma corriente para referirse mayormente a los criminales informticos, debido a su
utilizacin masiva por parte de los medios de comunicacin desde la dcada de 1980.* [21] Segn Helen Nissenbaum que los hackers sean mal vistos ayuda al gobierno
y a los poderes privados con dos cosas: 1) a denir lo que
es normal en el mundo computacional haciendo creer que
un buen ciudadano es todo lo que el hacker no es; 2) a justicar la seguridad, la vigilancia y el castigo.* [22]
A los criminales se le pueden sumar los llamados "script
kiddies", gente que invade computadoras, usando programas escritos por otros, y que tiene muy poco conocimiento sobre cmo funcionan. Este uso parcialmente incorrecto se ha vuelto tan predominante que, en general, un gran
segmento de la poblacin no es consciente de que existen
diferentes signicados.
88.6. TERMINOLOGA
Algunos* [quin?] desaprueban el uso del hacking como
un sinnimo de cracker, en marcado contraste con el resto
del mundo,* [dnde?] en el que la palabra hacker se utiliza normalmente para describir a alguien que se inltra
en un sistema informtico con el n de eludir o desactivar
las medidas de seguridad.* [23]
169
clasicada que se considera debe estar, por denicin, a
disposicin de la sociedad (casos de WikiLeaks o las ltraciones de Snowden sobre las actividades militares y
casos de espionaje gubernamentales).
Por tanto, el fenmeno hacker tiene un importante componente de aperturismo y liberacin de conocimientos e
En un principio se utilizaba hackcomo verbo para informacin que, a travs del activismo de estos especiaexpresar perder el tiempo(e.j. Puedo hackear con listas, benecian a la sociedad en general.
el computador), el signicado del trmino ha cambiado En este caso, los roles de un hacker pueden entenderse en
a lo largo de dcadas desde que empez a utilizarse en un cuatro aspectos:
contexto informtico. Como su uso se ha extendido ms
ampliamente, el signicado primario de la palabra, por
Apoyar procesos de apropiacin social o comunitaparte de los nuevos usuarios, ha pasado a uno que entra
ria de las tecnologas.
en conicto con el nfasis original.
88.5 Activismo
Poner a disposicin del dominio pblico el manejo tcnico y destrezas alcanzadas personal o grupalmente.
Crear nuevos sistemas, herramientas y aplicaciones
tcnicas y tecnolgicas para ponerlas a disposicin
del dominio pblico.
Realizar acciones de hacktivismo tecnolgico con el
n de liberar espacios y defender el conocimiento
comn y abierto.
88.6 Terminologa
En sentido amplio el trmino Hacker o Hacking se puede asociar
a movimientos sociales que promueven cambios en los modos de
vida.
Desde el ao 2002-2003, se ha ido congurando una perspectiva ms amplia del hacker, pero con una orientacin a su integracin al hacktivismo en tanto movimiento. Aparecen espacios autnomos denominados hacklab
o hackerspace y los hackmeeting como instancias de dilogo de hackers. Desde esta perspectiva, se entiende al
hacker como una persona que es parte de una conciencia
colectiva que promueve la libertad del conocimiento y la
justicia social.
Se entiende, por tanto, el Hacktivismo como el empleo de
las destrezas tcnicas ms diversas, en pro de nes sociales, ecolgicos, humanitarios o de cualquier otra ndole
con repercusin o tendente a la defensa de los derechos
humanos.
As, el Hacktivismo debe ser entendido no desde un prisma reduccionista como equivalente siempre al desarrollo
de actividades subversivas. Encontramos ramicaciones
del hacktivismo en la liberacin de conocimiento (como
puede ser la misma Wikipedia, en la que los conocimientos informticos y tcnicos de sus creadores dieron lugar
a toda una revolucin en el modo de crear y compartirse el conocimiento humano ms all de barreras acadmicas o comerciales); O en la liberacin de informacin
88.6.1 OverHat
Un trmino acuado a mediados del ao 2014 por
un Hacker de la comunidad Underground llamado
T4r4t3uX* [24], quien deni como sobre el sombreroa todos los profesionales vinculados con las artes Hacking. En un corto escrito, explica como a travs del tiempo deben comprender y aprender todas las formas existentes deHackeo. Lo cual causa una doble moral, por
un lado existe la tica a la cual han sido eles y por ello
prestan servicios profesionales a miles de empresas en el
mundo asegurando su infraestructura; por otro, conocer
y usar mtodos propios de los BlackHat que incluyen ataques de denegacin de servicio e ingeniera social agresiva entre otros. Segn el escrito, estn por encima del bien
y del mal electrnico, lo cual concluye que solo una amplia capacidad moral autodeterminada por ellos mismos
los convierte en profesionales con la capacidad de determinar adecuadamente y con las regulaciones de la actual
sociedad.
170
88.6.3
Samuri
88.6.4
Phreaker
88.9. DESCRIPCIN
171
[24]
[25] [http://searchsecurity.techtarget.com/sDefinition/0,
,sid14_gci550882,00.html Qu es sombrero blanco? una denicin de Whatis.com (en ingls)]
[26] [http://www.catb.org/jargon/html/T/tiger-team.html
tiger team (en ingls)]
88.9 Descripcin
espaol)
Captulo 89
Heisenbug
En jerga de programacin, un heisenbug es un tipo de
bug que parece desaparecer o comportarse de otro modo
al intentar ser observado en detalle.* [1] El trmino es un
juego de palabras a partir del nombre de Werner Heisenberg, el fsico que dedujo el efecto de observacin de la
mecnica cuntica, segn el cual el mero hecho de observar un sistema de una manera determinada altera el
estado de este.
Trminos similares como bohrbug, mandelbug,* [2]* [3]* [4] y schrdinbug* [5]* [6] han sido
propuestos ocasionalmente para otro tipo de bugs
inusuales;* [7]* [8] de todos modos, no son tan conocidos
ni empleados como el heisenbug.* [9]
89.1 Referencias
[1] The Jargon File: heisenbug.
[2] The Jargon File: Mandelbug. Catb.org. Consultado el 5
de septiembre de 2013.
[3] Raymond, Eric S.; The New Hacker's Dictionary, 3rd edition, 1996
[4] Clarke, Arthur C., The Ghost from the Grand Banks, Bantam Books, 1990
[5] The Jargon File: Schroedinbug. Catb.org. Consultado el
5 de septiembre de 2013.
[6] Raymond, Eric S.; The New Hacker's Dictionary, 3rd edition, 1996
[7] The following article investigates the various denitions
of bohrbug, mandelbug and heisenbug proposed in the literature, as well as the statements made about the relationships between these fault types: Grottke, Michael; and
Trivedi, Kishor S.; Software Faults, Software Aging and
Software Rejuvenation, Journal of the Reliability Engineering Association of Japan, Vol. 27, No. 7, pp. 425-438,
2005.
[8] Grottke, Michael; and Trivedi, Kishor S.; Fighting Bugs:
Remove, Retry, Replicate, and Rejuvenate, IEEE Computer
vol. 40, no. 2 (February 2007), pp. 107-109
[9] A February 2012 Google Books search returns about 70
hits for schroedinbug, 100 for mandelbug, 400
for bohrbugor heisenbug.
172
Captulo 90
Hoja de estilo
Las hojas de estilo (style sheets) son conjuntos de instrucciones, a veces en forma de archivo anexo, que se asocian a los archivos de texto y se ocupan de los aspectos de
formato y de presentacin de los contenidos: tipo, fuente y tamao de letras, alineacin y posicionamiento del
texto, colores y fondos, etc. Las hojas de estilo permiten
liberar la composicin del texto de los aspectos visuales
y favorecen que se estructure y anote mediante cdigos
que permiten un tratamiento ms ecaz de los contenidos.
El uso adecuado de las hojas de estilo es uno de los aspectos clave de la edicin digital. Las hojas de estilo son
una herramienta de gran utilidad de los programas de
tratamiento de textos, como OpenOce.org o Microsoft
Word. Asimismo, constituyen una parte esencial de los
lenguajes de marcas para edicin digital: LaTeX, XML
y XHTML. Dos lenguajes de hojas de estilo son CSS y
XSL.
90.3 Referencias
Captulo 91
Hola mundo
91.2 Enlaces externos
Hello World! Ms de 200 ejemplos de Hola Mundo
(en ingls). Versin del sitio guardada en el Internet
Archive.
The Hello World Collection Otra extenssima lista
de ejemplos (en ingls).
Resultado de la ejecucin de un programa Hola mundo en una
Interfaz grca de usuario.
91.3 Referencias
En informtica, un programa Hola mundo es el que imprime el texto Hola, mundo! en un dispositivo de visualizacin, en la mayora de los casos una pantalla de
monitor. Este programa suele ser usado como introduccin al estudio de un lenguaje de programacin, siendo
un primer ejercicio tpico, y se lo considera fundamental
desde el punto de vista didctico.
El programa Hola Mundo tambin puede ser til como
prueba de conguracin para asegurar que el compilador,
el entorno de desarrollo y el entorno de ejecucin estn
instalados correctamente y funcionando. En algunos lenguajes, congurar un conjunto de herramientas bsicas
completo desde cero hasta el punto en que los programas triviales puedan ser compilados y ejecutados involucra una cantidad de trabajo sustancial. Por esta razn,
generalmente es usado un programa muy simple para probar un nuevo conjunto de herramientas.
En los sistemas basados en microcontroladores empleados para el aprendizaje, se suele considerar Hola mundoal programa que permite poner en modo intermitente
un led.* [1] El programa consiste en mandar alternativamente un nivel alto y uno bajo por uno de los puertos del
sistema, dando a cada uno de dichos niveles un valor de
retardo.
[1] Gonzlez, Juan (2008). Taller de Robtica Bsico - Skybot v1.4. - SESION 3 - Hola mundoen Linux. Consultado el 12 de abril de 2009.
Captulo 92
Homebrew
alterar el normal funcionamiento del ordenador en forma
de virus informtico son en su mayora programas homebrew tambin. Este amplio colectivo ha dedicado su esfuerzo en forma de trabajo individual o en proyectos comunes que van acumulando en internet funcionalidades y
libreras de cdigo abierto que son utilizadas y ampliadas
por nuevos programadores autodidactas.
El homebrew es importante porque: abre las puertas a que
muchos de los acionados a desarrollarlo puedan conseguir un empleo remunerado y, adems, a que otros desarrolladores continen ampliando el uso comercial de nuevos y viejos productos, a que surja la posibilidad profeCaptura de pantalla de Duck Attack!, homebrew para Atari
sional de nuevos sistemas operativos, se ample la oferta
2600.
de aplicaciones... etc. Lo que conlleva a la evolucin tecnolgica de la sociedad y al abaratamiento de recursos
Se suele denominar homebrew (software casero no oque de otra manera solo estaran disponibles para unos
cial) a las aplicaciones y juegos creados por programapocos privilegiados.
dores -acionados y expertos- para cualquier plataforma,
*
generalmente videoconsolas propietarias. [1] Reciente- Aunque su uso ms conocido es la creacin de softwamente, se han desarrollado consolas diseadas espec- re para videoconsolas recreativas porttiles o de sobrecamente para la ejecucin de software homebrew, el cual mesa, se ha adaptado software desarrollado para cualquier tipo de aparato; como software original libre en prose caracteriza por ser gratuito y en su mayora abierto.
gramas operativos para maquinaria computerizada industrial, diccionarios y agendas electrnicas, telfonos, emisores o receptores de gps, maquinaria de uso mdico y
92.1 Generalidades
ordenadores actuales o antiguos de los 80 y 90, que ya no
estn a la venta por lo sencillo de su interfaz. El softwaHomebrew consiste en software de todo tipo creado por re nuevo original se ha desarrollado muchas veces como
programadores acionados o expertos. Ya los primeros prcticas en lenguajes informticos relativamente poco
programas desarrollados por la industria privada en los conocidos como C++, LUA, Palib, etc, o por otros moinicios de la informtica, eran juegos y, poco ms tar- tivos. Son muy conocidos por ser noticia desarrollos de
de, aplicaciones de omtica hechas en casa por acio- lenguajes de programacin cuyo uso afecta a millones de
nados. Hoy en da, en la mayora de los casos conocidos, personas o algoritmos con aplicaciones homebrew destilos programas homebrew son versiones de prueba com- nadas a la industria, agricultura, banca, tratamiento mpartidas como freeware o shareware que se distribuyen dico, lectura, enseanza... y que vuelven millonarios a sus
libremente por internet. Muchas veces, estas herramien- creadores. Algunos autores incluso han realizado su softtas han sido desarrolladas en importantes universidades ware para optar a premios de entidades pblicas o privapor grupos de estudiantes que distribuyen versiones de das, obtener becas de especializacin o conseguir un emprueba de su software bajo licencias de uso pblico y sin pleo remunerado. Aparte de la tradicional forma de pago,
afn de lucro, aunque tambin hay programadores a ni- existen otros autores que se conforman con menos, desde
vel individual que desarrollan interesantes aplicaciones los que llegan al presupuesto insertando publicidad en su
autodidactas que desde su domicilio particular llegan a software o los que se ven recompensados por el reconodiversas partes del mundo y de este modo le dan a co- cimiento del pblico, como ocurri en el caso del autor
nocer como autor creativo o prestigian el nivel tecnol- de Facebook. Muchas de las licencias empleadas por los
gico del autor o de su pas. Ejemplos muy conocidos son creadores permiten el uso gratuito de su software, siemAudacity y Emule. Los malwares que tienen por objeto
175
176
pre y cuando se respeten sus derechos y se les acredite
como autores del mismo. Muchas veces podemos mandar
un mensaje de felicitacin si nos ha gustado su trabajo o
ponernos en contacto con el autor o los autores o con sus
representantes para nes particulares o comerciales. Muchas empresas privadas han comercializado legalmente el
software creado en un principio como homebrew.
integrados para el usuario se utilizan dentro de los cartuchos de NES para ampliar las capacidades del sistema,
la mayora son difciles de replicar, excepto al eliminar
cartuchos usados. El mecanismo de bloqueo de hardware
de la NES complica an ms la construccin de cartuchos
fsicos utilizables. Sin embargo, la NES-101 elimina el
chip de cierre 10NES para cualquier juego, ya sea homeLa palabra homebrew tiene relacin con el Homebrew brew, sin licencia, o de otra regin de un partido ocial,
se reproduce. El chip 10NES nalmente se puede desacComputer Club, aunque se desconoce si fue ste el origen. En Japn estos juegos son llamados Dojin Soft, que tivar de forma permanente mediante la realizacin de un
pequeo cambio en el hardware.
es la manera de decir que este software no es ilegal, en
principio, aunque depende del uso que se haga de l. Suele cuestionarse la legalidad del homebrew; sin embargo,
su uso est muy extendido entre los usuarios avanzados. 92.2.3 Super Nintendo Entertainment
Adems, su uso, excluyendo las copias de seguridad no
System (SNES)
propietarias, es completamente legal.
Despus de la interrupcin de los juegos en 1998, y la
produccin en 1999, los fans de la Super Nintendo En92.2 Homebrew en diferentes con- tertainment System hicieron imgenes ROM homebrew,
incluso sin el apoyo de Nintendo para la consola. Dessolas
pus del lanzamiento de la SNES haba un gran inters
en la ingeniera inversa del sistema para permitir jugar
homebrew y copias de seguridad. Nintendo equipado la
92.2.1 Sega Dreamcast
mquina con varias medidas de seguridad, tales como el
La Sega Dreamcast (DC) es, en muchos aspectos, una de chip de bloqueo para evitar que cdigo no autorizado que
las pioneras en incorporar homebrew. Para lograr correr se ejecuta en la mquina. Finalmente, la comunidad hoeste tipo de software era necesario utilizar una puerta tra- mebrew descubierto cmo los juegos corran en el hardsera que permita iniciar la consola desde discos compac- ware SNES y fueron capaces de eludir sus mecanismos de
tos convencionales (la DC utilizaba un formato especial seguridad. Empresas como TAPN plugins hardware liberados como la serie SF doctor Game. Los usuarios que
llamado GD-ROM).
pueden no solo los juegos de copia, sino tambin para eje Aplicaciones: Reproductores de MP3 y de video, cutar juegos caseros elaborados en el hardware de SNES.
ROMs Homebrew se podran convertir en el formato SF
visores de Flash, y versiones de Linux entre otras.
Mdico juego y poner en un 3 1/2 disquete. Juegos tan
grandes como 12 Mbits (1.5 megabytes) podran poner Emuladores: Con el tiempo, la consola ha llegado se en disquetes formateados de 1.6 megabytes. Un disa ejecutar emuladores de SNES, Genesis, NES, Neo positivo alternativo fue el Super Flash, por Tototek, que
Geo y Neo Geo CD, entre otros.
permita mltiples juegos para quemarla en un chip de
memoria ash de cartucho (que permite hasta 48Mbits).
Juegos: Se han realizado ports del clsico Doom y Este chip es el rom mscara para el cartucho ash Sper
de la primera y segunda versin de Quake entre otras desarrollo. El dispositivo es fcil de usar y tiene una inadaptaciones. Adems, se ha desarrollado un sinn- terfaz de usuario en el extremo del ordenador. Conectar
mero de juegos freeware y de cdigo abierto, des- el cartucho de Super Flash y cargar los juegos que quieras
tacndose los clones de Tetris y de juegos de naves simplemente. Esto permiti a los usuarios hacer un jue(shoot'em ups).
go de SNES y juegan en un cartucho real en lugar de un
disquete. La legalidad de homebew SNES lanzamientos
de juegos no ha sido probado en los tribunales, y es dis92.2.2 Nintendo Entertainment System cutible si o no pasar por sus medidas de seguridad caera
en conicto con las leyes modernas de ingeniera inver(NES)
sa. Presumiblemente juegos caseros se pueden producir
Varios compiladores estn disponibles para la Nintendo legalmente los SNES, siempre y cuando se incluye ninEntertainment System, pero como el Atari 2600, la mayo- gn material con derechos de autor. Anteriormente, en la
ra del desarrollo se aplica directamente en lenguaje en- dcada de 1990, Nintendo demand Color Dreams para
samblador. Un impedimento para la NES desarrollo ho- producir juegos de NES sin licencia ocial. El resultado
mebrew es la relativa dicultad involucrada con la pro- fue un acuerdo no revelado, pero los sueos de color siduccin de cartuchos fsicos, aunque cartuchos ash de gui produciendo juegos sin licencia. La fuerza del color
terceros existen, haciendo posible homebrew en el hard- de la posicin de los sueos se encuentra con que trabaware original de NES. Muchas variedades de circuitos jaron todo el cdigo de chip de cierre 10NES en lugar de
92.2.4
Nintendo DS
177
Versiones: Han surgido innidad de versiones
para este sistema PSP entre las que se incluyen el primer homebrew que surgi llamado
DevHook, seguido ya de otras generaciones y
los llamados CFW(Custom Firmwares), que han
tenido un gran desarrollo gracias a hackers como
Dark_Alex, Total Noob, Virtuous Flame, Coolbird, Neur0n y Lktd9 los cuales actualmente
han sacado CFW rmados como por ejemplo:
PRO-(A,A1,A2,A3..B,1,2,3,4,5,6,7,8,9,10
,TN-HEN/-A-B... , ME 1,2,3..(6.39), CLFW
1,2,3..(6.39),LK-A,LK-II v1,Lk-B,etc
92.2.5
Sony PSP
178
92.2.8
Nintendo Wii
92.2.9
PlayStation 3
PlayStation 3 puede ser utilizada para homebrew mediante la utilizacin del dispositivo PS Jailbreak o sus derivados clnicos o de cdigo abierto, nicamente con el rmware 3.41 o anteriores.* [6]* [7] Adicionalmente, es posible realizar un downgrade desde las versiones 3.42 y 3.50.
En este caso, se estara ejecutando software no rmado.
Tambin es posible instalar y ejecutar homebrew hasta
la versin de rmware 3.55, a partir del descubrimiento
de las claves privadas de la consola que el hacker George
Hotz sac a la luz con su rmware personalizado. versin
3.55 GeoHot* [8] En este caso, se estara ejecutando software rmado.
Aplicaciones: Servidores FTP, cargadores de rmwares modicados, y cargadores de juegos (Backup
Manager y Open Manager inicialmente; luego Multiman, Gaia y Rogero).
Emuladores: han sido lanzados emuladores de
NES, SNES, Sega Genesis, Game Boy Advance,
PSX, SCUMM, as como versiones del emulador
92.4 Referencias
[1] The Complete Guide to Whats Needed for Homebrew
on Each Console. (en ingls). DC Emu UK. Archivado
desde el original el 28 de noviembre de 2015. Consultado
el 12 de enero de 2011.
[2] Homebrew de NDS. El Otro Lado. 3 de abril de 2010.
Consultado el 12 de enero de 2011.
[3] Homebrew Xbox 360. El Otro Lado. 30 de diciembre
de 2010. Consultado el 12 de enero de 2011.
[4] Cargar Homebrew en Wii. El Otro Lado. 18 de diciembre de 2010. Consultado el 12 de enero de 2011.
[5] Homebrew Channel. El Otro Lado. 9 de enero de 2011.
Consultado el 12 de enero de 2011.
[6] PS3 Jailbreak: un pendrive para hackear la PlayStation
3. Red Users. 21 de agosto de 2010. Consultado el 25 de
octubre de 2010.
[7] PlayStation 3 ha sido hackeada. Meristation. 20 de
agosto de 2010. Consultado el 25 de octubre de 2010.
[8] Hackers se hacen con las claves de seguridad secretas de
PlayStation 3. Meristation. 3 de enero de 2011. Consultado el 6 de enero de 2011.
Captulo 93
ICONIX
ICONIX es una metodologa pesada-ligera de desarrollo
Modelo de casos de usos
del Software que se halla a medio camino entre un RUP
(Rational Unied Process) y un XP (eXtreme Program93.2.2 Fase 2: Anlisis y diseo preliminar
ming).
Iconix deriva directamente del RUP y su fundamento es
Dentro de esta fase se realizan las siguientes tareas:
el hecho de que un 80% de los casos pueden ser resueltos
tan solo con un uso del 20% del UML, con lo cual se sim Descripcin de los casos de uso
plica muchsimo el proceso sin perder documentacin al
dejar solo aquello que es necesario. Esto implica un uso
Diagramas de robustez
dinmico del UML de tal forma que siempre se pueden
utilizar otros diagramas adems de los ya estipulados si
se cree conveniente. Iconix se gua a travs de casos de
uso y sigue un ciclo de vida iterativo e incremental. El 93.2.3 Fase 3: Diseo
objetivo es que a partir de los casos de uso se obtenga el
Dentro de esta fase se realiza la siguiente tarea:
sistema nal.
Diagramas de secuencia
Dedicada a la construccin de sistemas de gestin de Dentro de esta fase se realiza la siguiente tarea:
pequea y mediana complejidad con la participacin
de los usuarios nales.
Escribir y generar cdigo
Tareas de la metodologa Iconix =
La metodologa est formada por cuatro fases principales
que son:
93.3 Referencias
1. Rosenberg, Doug; Stephens, Matt (2007). Use Case Driven Object Modeling with UML: Theory and
Practice. Apress. ISBN 1590597745.
93.2.1
Extreme Programming
180
93.5.1
93.5.2
Fase 3: Diseo
93.5.3
Fase 4: Implementacin
93.6 Referencias
1. Rosenberg, Doug; Stephens, Matt (2007). Use Case Driven Object Modeling with UML: Theory and
Practice. Apress. ISBN 1590597745.
2. Rosenberg, Doug; Stephens, Matt; Collins-Cope,
Mark (2005). Agile Development with ICONIX Process. Apress. ISBN 1590594649.
Captulo 94
Anexo:Implementaciones de Smalltalk
En informtica, el lenguaje de programacin Smalltalk,
est normalizado desde 1998 en el estndar ANSI NCITS
319-1998. Una implementacin de Smalltalk es un sistema de programacin que conforma al estndar si implementa todas las caractersticas denidas tal como estn
especicadas en ese documento.
Cada implementacin de Smalltalk, suele incluir como
propias:
Una Mquina virtual.
Un archivo llamado 'Archivo de imagen virtual' que
sirve como contenedor de objetos.
Un Entorno de desarrollo que funciona como un
sistema en tiempo de ejecucin, por ello de dice que
es interactivo. En el caso de no poseer un entorno interactivo orientado a controles visuales, es llamado
de scripting.
Una biblioteca de clases.
Esta pgina incluye un listado de implementaciones conocidas del lenguaje de programacin Smalltalk, y una tabla comparativa de algunas caractersticas relevantes para
cada implementacin:
181
Captulo 95
95.1 Objective-C
//validation with parse logic from RUT string format
XX.XXX.XXX-Y + (BOOL)validRUT:(NSString*)rut{
//remove any dots or signs from RUT string with format
XX.XXX.XXX-Y //http://es.wikipedia.org/wiki/Rol_
%C3%9Anico_Tributario rut = [rut stringByReplacingOccurrencesOfString:@".withString:@""];
rut
= [rut stringByReplacingOccurrencesOfString:@"-"
withString:@""]; //get rut validator digit (Y) char dv =
[rut characterAtIndex:[rut length]1]; NSLog(@"DV:
%c, dv); //get rut numeric value from (XX.XXX.XXX)
int rutnumber = [[rut substringToIndex:[rut length]1]
integerValue]; NSLog(@"RUT NUMBER: %d, rutnumber); //check valid RUT number (XX.XXX.XXX)
with validator digit (Y) return [self validRUT:rutnumber
with:dv]; } //algorithm module 11 based on the Java
version + (BOOL)validRUT:(int)rut with:(char)dv { //to
accept 'k' lowercase to avoid issues with Kclients dv
= (dv == 'k')?'K':dv; NSLog(@"RUT DV: %c, dv); int
m = 0, s = 1; for (; rut != 0; rut /= 10) { s = (s + rut % 10
* (9 - m++ % 6)) % 11; } //generate DV to check char
dvcheck = (char) (s != 0 ? s + 47 : 75); NSLog(@"RUT
DV: %c, dv); NSLog(@"GEN DV: %c, dvcheck);
return dv == dvcheck; }
95.2 C++
char digito_vericador_rut(unsigned rut) { unsigned sum
= 0, factor = 2; while(rut) { sum += (rut%10)*factor;
rut/=10; factor = factor==7 ? 2 : factor+1; } const
unsigned res = 11 - sum%11; return res == 11? '0' : res
== 10? 'k' : res+'0'; }
95.4 C#
private string digitoVericador(int rut) { int Digito;
int Contador; int Multiplo; int Acumulador; string
RutDigito; Contador = 2; Acumulador = 0; while (rut
!= 0) { Multiplo = (rut % 10) * Contador; Acumulador
= Acumulador + Multiplo; rut = rut/10; Contador
= Contador + 1; if (Contador == 8) { Contador =
2; } } Digito = 11 - (Acumulador % 11); RutDigito = Digito.ToString().Trim(); if (Digito == 10 ) {
RutDigito = K"; } if (Digito == 11) { RutDigito
= 0"; } return (RutDigito); } } } /// Una versin
mas corta public static string Dv(string r) { int suma
= 0; for (int x = r.Length - 1; x >= 0; x--) suma
+= int.Parse(char.IsDigit(r[x])?r[x].ToString():"0) *
(((r.Length - (x + 1)) % 6) + 2); int numericDigito = (11 suma % 11); string digito = numericDigito == 11 ?0:
numericDigito == 10 ?K: numericDigito.ToString();
return digito; } /// Una versin funcional public static
char GenerarDV (int num) { return 0K987654321
[ Enumerable.Range (0, (int) Math.Floor (Math.Log10
(num)) + 2) .Select (i => ((i % 6) + 2) * ((num / (int)
Math.Pow (10, i)) % 10)) .Sum () % 11]; }
182
95.10. PSEINT
183
95.5 Perl 6
h=r-(10^7*a+10^6*b+10^5*c+10^4*d+10^3*e+100*f+10*g);
sum=h*2+g*3+f*4+e*5+d*6+c*7+b*2+a*3;
#!/usr/bin/perl6 my ($RUT, @RUT, $digito); $RUT = resto=sum-oor(sum/11)*11; verif=11-resto; disp('El
@*ARGS; # leemos el argumento pasado al programa numero vericador es:') if (verif<10) disp(verif) end if
@RUT = $RUT.split('').reverse; # lo pasamos a array y (verif==11) disp('0') end if (verif==10) disp('K') end
le damos la vuelta $digito = [+](@RUT <<*>> (2..7)); #
clculo del dgito vericador $digito = 11 - $digito % 11;
$digito = ( 0 .. 9, 'K', 0 )[$digito]; say "$RUT-$digito";
95.10 PSeInt
# salida
Proceso digito_vericador Denir rut, a1, pa, c, sum,
di, digi Como Enteros; Escribir Este programa dene
su dgito vericador "; Escribir Ingrese su rut sin el
95.6 Javascript
dgito vericador "; Leer rut; pa<-rut; c<2; sum<0;
dv
=
function(T)
{
var
M=0,S=1; Mientras rut>0 Hacer a1<-rut%10; rut<-trunc(rut/10);
for(;T;T=Math.oor(T/10))
S=(S+T%10*(9- sum<-sum+(a1*c); c<-c+1; Si c=8 Entonces c<2; FinM++%6))%11; return S?S-1:'K'; } alert('El digito Si FinMientras di<-sum%11; digi<11-di; Si digi=11
vericador del rut ingresado es '+ dv(prompt('Ingrese rut Entonces Escribir El dgito vericador es 0"; Escribir
pa,"0"; Sino Si digi=10 Entonces Escribir El dgito
para mostrar su digito vericador:')));
vericador es K"; Escribir pa,"-K"; Sino Escribir El
dgito vericador es ",digi; Escribir pa,"-",digi; FinSi
FinSi FinProceso
95.7 PHP
function dv($r){ $s=1; for($m=0;$r!=0;$r/=10)
$s=($s+$r%10*(9-$m++%6))%11; echo 'El digito
vericador del rut ingresado es ',chr($s?$s+47:75); }
95.8 Transact-SQL
CREATE FUNCTION RutDigito (@Rut as integer)
RETURNS varchar(1) AS BEGIN declare @Digito as
integer declare @Contador as integer declare @Multiplo
as integer declare @Acumulador as integer declare @retorno as varchar(1) set @Contador = 2 set @Acumulador
= 0 WHILE @Rut <> 0 BEGIN set @Multiplo = (@Rut
% 10) * @Contador set @Acumulador = @Acumulador
+ @Multiplo set @Rut = @Rut / 10 set @Contador =
@Contador + 1 If @Contador > 7 set @Contador = 2
END set @Digito = 11 - (@Acumulador % 11) select
@retorno = case when @Digito = 10 then 'K' when
@Digito = 11 then '0' else cast(@Digito as varchar(1))
end return @retorno END
95.9 MATLAB
95.11 Python
def digito_vericador(rut): value = 11 - sum([
int(a)*int(b)
for
a,b
in
zip(str(rut).zll(8),
'32765432')])%11 return {10: 'K', 11: '0'}.get(value,
str(value))
95.12 Ruby
def
digito_vericador(rut)
dv
=
(11(rut.split('').map(&:to_i).reverse.each_with_index.map
{ |e, i| e*(2+i%6) }).inject(:+))%11 if dv < 10 then
dv.to_s else 'k' end end
95.13 Java
public static boolean ValidarRut(int rut, char dv) { int m
= 0, s = 1; for (; rut != 0; rut /= 10) { s = (s + rut % 10 *
(9 - m++ % 6)) % 11; } return dv == (char) (s != 0 ? s +
47 : 75); }
184
Captulo 96
Inanicin (informtica)
En informtica, inanicin (starvation en ingls) es un
problema relacionado con los sistemas multitarea, donde
a un proceso o un hilo de ejecucin se le deniega siempre
el acceso a un recurso compartido. Sin este recurso, la
tarea a ejecutar no puede ser nunca nalizada.
La inanicin es una situacin similar al interbloqueo, pero
las causas son diferentes. En el interbloqueo, dos procesos
o dos hilos de ejecucin llegan a un punto muerto cuando
cada uno de ellos necesita un recurso que es ocupado por
el otro. En cambio, en este caso, uno o ms procesos estn
esperando recursos ocupados por otros procesos que no
se encuentran necesariamente en ningn punto muerto.
Un caso de inanicin la ilustra perfectamente la paradoja
conocida como la cena de los lsofos de Edsger Dijkstra
cuando se da el caso de que todos los lsofos cogen el
tenedor a la vez.
La utilizacin de prioridades en muchos sistemas operativos multitarea podra causar que procesos de alta prioridad estuvieran ejecutndose siempre y no permitieran
la ejecucin de procesos de baja prioridad, causando inanicin en estos. Es ms, si un proceso de alta prioridad
est pendiente del resultado de un proceso de baja prioridad que no se ejecuta nunca, entonces este proceso de alta
prioridad tambin experimenta inanicin (esta situacin
se conoce como inversin de prioridades). Para evitar estas situaciones los planicadores modernos incorporan algoritmos para asegurar que todos los procesos reciben un
mnimo de tiempo de CPU para ejecutarse.
185
Captulo 97
Indireccin
La in-direccin es una tcnica de programacin. El concepto se basa en hacer referencia indirecta a los datos
usando las direcciones de memoria que los contienen o
mediante punteros que sealan hacia esos datos o a las
direcciones que los contienen.
En la memoria no slo se almacenan datos de los
programas (como letras, caracteres grcos, nmeros naturales, nmeros enteros, coma otante, etc.) sino tambin direcciones de memoria, que al n y al cabo tambin
son datos.
Para efectos de almacenamiento y manipulacin por
el microprocesador, todos estos datos no son ms que
una secuencia de bytes en diferentes celdas. El que una
secuencia de bits determinada se intrprete como un
nmero o como una direccin depende del programador.
El mecanismo de in-direccin se puede encadenar de manera arbitrariamente larga. La direccin que contiene la
direccin de un dato, a su vez se puede almacenar de nuevo en memoria. Es posible almacenar las direcciones de
tal forma que haya que seguir un encadenamiento de indirecciones para llegar nalmente a acceder al dato.
En el siguiente ejemplo, lacelda(direccin de memoria
0x00000100) contiene el dato 0x00000200 que a su vez
representa la direccin de la nuevaceldaque contiene
el dato que corresponde a una direccin que contiene un
dato que representa la direccin 0x00000400 que nalmente contiene el dato que nos interesa. Y as podemos
denir a voluntad o conveniencia los diferentes niveles de
in-direccin que necesitemos.
186
Captulo 98
La infraestructura de lenguaje comn (en ingls Common Language Infrastructure o CLI) es una especicacin estandarizada que describe un entorno virtual para
la ejecucin de aplicaciones, cuya principal caracterstica es la de permitir que aplicaciones escritas en distintos
lenguajes de alto nivel puedan luego ejecutarse en mltiples plataformas tanto de hardware como de software sin
necesidad de reescribir o recompilar su cdigo fuente.
Si bien el CLI tuvo sus orgenes en Microsoft (en principio se pensaba desarrollar un entorno de ejecucin compartido para COM con el nombre de Common Object
Runtime, que luego se extendi y generaliz para dar
lugar a CLI), sus especicaciones fueron llevadas ante ECMA (European Computer Manufacturers Association), una importante organizacin europea de estndares, para su estandarizacin en el ao 2000. Luego de un
ao de trabajo conjunto entre ECMA, Microsoft y otras
empresas que co-patrocinaron el proceso (Intel, HP, IBM
y Fujitsu entre otras), el estndar ECMA-335 que dene el entorno CLI nalmente vio la luz en diciembre de
187
Cargar los tipos de forma tal que se encuentren aislados unos de otros en tiempo de ejecucin, pero que
puedan a su vez compartir recursos.
Resolver dependencias entre tipos en tiempo de ejecucin usando una poltica exible que pueda tener
en cuenta la versin, atributos de localizacin y polticas administrativas.
Ejecutar aplicaciones bajo la supervisin de un entorno privilegiado que permita controlar y hacer
cumplir polticas en tiempo de ejecucin.
Disear toda la infraestructura y servicios basndose
en metadatos extensibles, de manera tal que toda la
arquitectura pueda acomodarse con poco impacto a
nuevas incorporaciones y cambios.
Poder realizar tareas de bajo nivel, como carga de
tipos en memoria, enlace con libreras y compilacin a cdigo nativo slo cuando sea necesario (este
enfoque se conoce tpicamente comoon demand
, o just in time).
Proveer una serie de funcionalidades comunes mediante un grupo de libreras de programacin que
los desarrolladores puedan utilizar para construir sus
aplicaciones.
188
Microsoft .NET de hecho es un sper conjunto de esta especicacin, es decir, provee todo lo necesario para
cumplir con la misma y adems agrega una serie de herramientas, libreras y funcionalidades no contempladas
por ella originalmente y que proveen una enorme utilidad y exibilidad a los desarrolladores (por ejemplo, libreras para la creacin de aplicaciones y servicios web,
acceso a motores de bases de datos, controles grcos,
herramientas para desensamblar assemblies, debuggers,
etc.). Si bien es gratuito, su cdigo fuente no es abierto,
y es distribuido por Microsoft en versiones para sistemas
operativos Windows 98 y sus sucesores nicamente.
La especicacin del CLI est formada por cuatro partes:
Sistema comn de tipos, en ingls Common Type
System (CTS).
Metadatos.
Especicaciones de lenguaje comn, en ingls Common Language Specication (CLS).
Sistema de ejecucin virtual, del ingls Virtual Execution System (VES).
Captulo 99
Ingeniera de software
Ingeniera de software es la aplicacin de un enfoque sistemtico, disciplinado y cuanticable al desarrollo,
operacin y mantenimiento de software,* [1] y el estudio
de estos enfoques, es decir, la aplicacin de la ingeniera al software.* [2] Integra matemticas, ciencias de la
computacin y prcticas cuyos orgenes se encuentran en
la ingeniera.* [3]
190
tra la vida de estas personas.* [9] Esto remarca los riesgos ternet; esto hace que los desarrolladores tuviesen que made control por software,* [10] afectando directamente al nejar imgenes mapas y animaciones para optimizar la
nombre de la ingeniera de software.
visualizacin/almacenamiento de imgenes (como el uso
*
A principios de los 1980, [11] la ingeniera del software de imgenes en miniatura). El uso de los navegadores y
ya haba surgido como una genuina profesin, para estar utilizacin de lenguaje HTML cambia drsticamente la
al lado de las ciencias de la computacin y la ingeniera visin y recepcin de la informacin.
tradicional. Antes de esto, las tareas eran corridas poniendo tarjetas perforadas como entrada en el lector de tarjetas de la mquina y se esperaban los resultados devueltos
por la impresora.
99.5. NOTACIONES
99.3 Recursos
99.3.1
Recurso humano
191
proyectos exitosos donde se han usado mtodos de ingeniera de software incluyen a GNU/Linux, el software del
transbordador espacial, los cajeros automticos y muchos
otros.
Son todas aquellas personas que intervienen en la planicacin de cualquier instancias de software (por ejemplo:
gestor, ingeniero de software experimentado, etc.), El n- 99.5
mero de personas requerido para un proyecto de software
slo puede ser determinado despus de hacer una estima- 99.5.1
cin del esfuerzo de desarrollo...
Notaciones
LUM (lenguaje unicado de modelado) o UML
Es un lenguaje de modelado muy reconocido y utilizado actualmente que se utiliza para describir o especicar
mtodos. Tambin es aplicable en el desarrollo de softSon aquellos componentes de un software que son usa- ware.
dos en otras aplicaciones de la misma ndole, ya sea para
Las siglas UML signican lenguaje unicado de modereducir costos o tiempo.
lado esto quiere decir que no pretende denir un modelo
estndar de desarrollo, sino nicamente un lenguaje de
modelado.* [14]
99.3.3 Recursos de entorno
99.3.2
El objetivo de la notacin para el modelado de procesos de negocios es proporcionar de una manera fcil de
denir y analizar los procesos de negocios pblicos y privados simulando un diagrama de ujo. La notacin ha
99.4.1 Econmicamente
sido diseada especcamente para coordinar la secuencia de los procesos y los mensajes que uyen entre los
En los Estados Unidos, el software contribuy a una ocparticipantes del mismo, con un conjunto de actividades
tava parte de todo el incremento del PIB durante la drelacionadas. Caractersticas bsicas de los elementos de
cada de 1990 (alrededor de 90,000 millones de dlares
BPMN
por ao), y un noveno de todo el crecimiento de productividad durante los ltimos aos de la dcada (alrededor
Objetos de ujo: eventos, actividades, rombos de
de 33.000 millones de dlares estadounidenses por ao).
control de ujo (gateways).
La ingeniera de software contribuy a US$ 1 billn de
crecimiento econmico y productividad en esa dcada.
Objetos de conexin: ujo de secuencia, ujo de
Alrededor del globo, el software contribuye al crecimienmensaje, asociacin.
to econmico de maneras similares, aunque es difcil de
Swimlanes (carriles de piscina): pool, lane.
encontrar estadsticas ables. * [cita requerida]
Adems, con la industria del lenguaje est hallando cada
vez ms campos de aplicacin a escala global.
Socialmente
Un diagrama de ujo de datos permite representar el movimiento de datos a travs de un sistema por medio de
modelos que describen los ujos de datos, los procesos
que tranforman o cambian los datos, los destinos de datos y los almacenamientos de datos a la cual tiene acceso
el sistema.
192
presentan, los motivos que crean insatisfaccin y aquellos que deben ser cubiertos a plenitud. Por ejemplo: El
contenido de los reportes generados, satisface realmente
las necesidades del usuario? Los tiempos de respuesta
ofrecidos, son oportunos?, etc.
99.7 Metodologa
Un objetivo de dcadas ha sido el encontrar procesos y
metodologas, que sean sistemticas, predecibles y repetibles, a n de mejorar la productividad en el desarrollo y
la calidad del producto software, en pocas palabras, determina los pasos a seguir y como realizarlos para nalizar
una tarea.
Extraer los requisitos de un producto software es la primera etapa para crearlo. Durante la fase de anlisis, el
cliente plantea las necesidades que se presenta e intenta
explicar lo que debera hacer el software o producto nal para satisfacer dicha necesidad mientras que el desarrollador acta como interrogador, como la persona que
resuelve problemas. Con este anlisis, el ingeniero de sistemas puede elegir la funcin que debe realizar el software y establecer o indicar cual es la interfaz ms adecuada
para el mismo.* [16]
El anlisis de requisitos puede parecer una tarea sencilla, pero no lo es debido a que muchas veces los clientes
piensan que saben todo lo que el software necesita para
La ingeniera de software requiere llevar a cabo numero- su buen funcionamiento, sin embargo se requiere la habisas tareas agrupadas en etapas, al conjunto de estas etapas lidad y experiencia de algn especialista para reconocer
se le denomina ciclo de vida. Las etapas comunes a casi requisitos incompletos, ambiguos o contradictorios. Estodos los modelos de ciclo de vida son las siguientes:
tos requisitos se determinan tomando en cuenta las necesidades del usuario nal, introduciendo tcnicas que nos
permitan mejorar la calidad de los sistemas sobre los que
Obtencin de los requisitos
se trabaja.* [17]
99.7.1
99.7. METODOLOGA
obteniendo los mejores resultados posibles.
193
Arquitectura
Tener un control ms completo en la etapa creacin La integracin de infraestructura, desarrollo de aplicaciodel software, en cuanto a tiempo de desarrollo y cos- nes, bases de datos y herramientas gerenciales, requieren
de capacidad y liderazgo para poder ser conceptualizatos.
dos y proyectados a futuro, solucionando los problemas
Utilizacin de mtodos ms ecientes que permitan de hoy. El rol en el cual se delegan todas estas actividades
el mejor aprovechamiento del software segn sea la es el del Arquitecto.
nalidad de uso del mismo.
El arquitecto de software es la persona que aade valor
a los procesos de negocios gracias a su valioso aporte de
Aumentar la calidad del software desarrollado al dis- soluciones tecnolgicas.
minuir los riesgos de mal funcionamiento.* [18]
La arquitectura de sistemas en general, es una actividad
de planeacin, ya sea a nivel de infraestructura de red y
No siempre en la etapa de anlisis de requisitoslas hardware, o de software.
distintas metodologas de desarrollo llevan asociado un
estudio de viabilidad y/o estimacin de costes. El ms co- Lo principal en este punto es poner en claro los aspectos
nocido de los modelos de estimacin de coste del software lgicos y fsicos de las salidas, modelos de organizacin y
representacin de datos, entradas y procesos que compoes el modelo COCOMO
nen el sistema, considerando las bondades y limitaciones
de los recursos disponibles en la satisfaccin de las pacicaciones brindadas para el anlisis.
Limitaciones* [14]
Los software tienen la capacidad de emular inteligencia
creando un modelo de ciertas caractersticas de la inteligencia humana pero slo posee funciones predenidas
que abarcan un conjunto de soluciones que en algunos
campos llega a ser limitado. Aun cuando tiene la capacidad de imitar ciertos comportamientos humanos no es
capaz de emular el pensamiento humano porque acta bajo condiciones.
Otro aspecto limitante de los software proviene del proceso totalmente mecnico que requiere de un mayor esfuerzo y tiempos elevados de ejecucin lo que lleva a tener
que implementar el software en una mquina de mayor
capacidad.
Especicacin
La especicacin de requisitos describe el comportamiento esperado en el software una vez desarrollado.
Gran parte del xito de un proyecto de software radicar
en la identicacin de las necesidades del negocio (denidas por la alta direccin), as como la interaccin con
los usuarios funcionales para la recoleccin, clasicacin,
identicacin, priorizacin y especicacin de los requisitos del software.
Hay que tener en consideracin la arquitectura del sistema en la cual se va a trabajar, elaborar un plan de trabajo
viendo la prioridad de tiempo y recursos disponibles. En
los diseos de salidas entra los que es la interpretacin de
requerimientos lo cual es el dominio de informacin del
problema, las funciones visibles para el usuario, el comportamiento del sistema y un conjunto de clases de requerimientos que agrupa los objetos del negocio con los
mtodos que les dan servicio.
La arquitectura de software consiste en el diseo de componentes de una aplicacin (entidades del negocio), generalmente utilizando patrones de arquitectura. El diseo arquitectnico debe permitir visualizar la interaccin
entre las entidades del negocio y adems poder ser validado, por ejemplo por medio de diagramas de secuencia.
Un diseo arquitectnico describe en general el cmo se
construir una aplicacin de software. Para ello se documenta utilizando diagramas, por ejemplo:
Diagramas de clases
Diagramas de base de datos
Diagrama de despliegue
Diagrama de secuencia
Siendo los dos primeros los mnimos necesarios para desEntre las tcnicas utilizadas para la especicacin de recribir la arquitectura de un proyecto que iniciar a ser
quisitos se encuentran:
codicado. Dependiendo del alcance del proyecto, complejidad y necesidades, el arquitecto elegir cuales de los
Caso de uso
diagramas se requiere elaborar.
Historias de usuario
Siendo los primeros ms rigurosas y formales, los segundas ms giles e informales.
194
Microsoft Visio for Enterprise Architects
Programacin
Implementar un diseo en cdigo puede ser la parte ms
obvia del trabajo de ingeniera de software, pero no necesariamente es la que demanda mayor trabajo y ni la ms
complicada. La complejidad y la duracin de esta etapa est ntimamente relacionada al o a los lenguajes de
programacin utilizados, as como al diseo previamente
realizado.
Desarrollo de la aplicacin
Para el desarrollo de la aplicacin es necesario considerar
cinco fases para tener una aplicacin o programa eciente, estas son:
Desarrollo de la infraestructura: Esta fase permite el desarrollo y la organizacin de los elementos
que formaran la infraestructura de la aplicacin, con
el propsito de nalizar la aplicacin ecientemente.
Adaptacin del paquete: El objetivo principal de
esta fase es entender de una manera detallada el funcionamiento del paquete, esto tiene como nalidad
garantizar que el paquete pueda ser utilizado en su
mximo rendimiento, tanto para negocios o recursos. Todos los elementos que componen el paquete
son inspeccionados de manera detallada para evitar
errores y entender mejor todas las caractersticas del
paquete.
Desarrollo de unidades de diseo de interactivas: En esta fase se realizan los procedimientos que
se ejecutan por un dilogo usuario-sistema. Los procedimientos de esta fase tienen como objetivo principal:
1. Establecer especcamente las acciones que debe
efectuar la unidad de diseo.
195
Modelo de prototipos
En ingeniera de software, el modelo de prototipos perte Facilitar la evaluacin de resultados y cumplimiento nece a los modelos de desarrollo evolutivo. Este permite
de objetivos
que todo el sistema, o algunos de sus partes, se construyan rpidamente para comprender con facilidad y aclarar
ciertos aspectos en los que se aseguren que el desarrollaDesde el punto de vista de los ingenieros de Software dor, el usuario, el cliente estn de acuerdo en lo que se
necesita as como tambin la solucin que se propone pa Ayudar a comprender el problema
ra dicha necesidad y de esta manera minimizar el riesgo y
la incertidumbre en el desarrollo, este modelo se encarga
Permitir la reutilizacin
del desarrollo de diseos para que estos sean analizados y
prescindir de ellos a medida que se adhieran nuevas espe Facilitar el mantenimiento del producto nal
cicaciones, es ideal para medir el alcance del producto,
pero no se asegura su uso real.
Optimizar el conjunto y cada una de las fases del
Este modelo principalmente se aplica cuando un cliente
proceso de desarrollo
dene un conjunto de objetivos generales para el software a desarrollarse sin delimitar detalladamente los requisitos de entrada procesamiento y salida, es decir cuando
Desde el punto de vista de cliente o usuario nal
el responsable no est seguro de la ecacia de un algoritmo, de la adaptabilidad del sistema o de la manera en que
Garantizar el nivel de calidad del producto nal
interacta el hombre y la mquina.
Obtener el ciclo de vida adecuado para el proyecto
Conanza en los plazos del tiempo mostrados en la
denicin del proyecto
Este modelo se encarga principalmente de ayudar al ingeniero de sistemas y al cliente a entender de mejor manera
cul ser el resultado de la construccin cuando los requisitos estn satisfechos.* [25]
196
99.8.3
Modelo en espiral
El modelo en espiral, que Barry Boehm propuso originalmente en 1986, es un modelo de proceso de software
evolutivo que conjuga la naturaleza iterativa de la construccin de prototipos con los aspectos controlados y sistemticos del modelo en cascada, es decir, cuando se aplica este modelo, el software se desarrolla en una serie de
entregas evolutivas (ciclos o iteraciones), cada una de estas entregando prototipos ms completas que el anterior,
todo esto en funcin del anlisis de riesgo y las necesidades del cliente. Aunque el modelo espiral representa
ventajas por sobre el desarrollo lineal, el clculo de los
riesgos puede ser muy complicado y por lo cual su uso en
el mbito real es muy escaso.* [26]
99.8.4
Diseo inicial.
Cuando es por etapas, en el diseo global estas fases pue- Este modelo tambin presenta sus desventajas entre las
den repetirse segn la cantidad de etapas que sean reque- cuales podemos mencionar algunas:
ridas.
Se poda encontrar datos repetidos en diferentes
Entre sus ventajas tenemos:
partes del programa.* [28]
Deteccin de problemas antes y no hasta la nica
entrega nal del proyecto.
99.8.6
197
estado hecho al estado cambios en espera. Este modelo de desarrollo se utiliza a menudo como el paradigma
de desarrollo de aplicaciones cliente/servidor. Un sistema
cliente/servidor se compone de un conjunto de componentes funcionales. Cuando se aplica a cliente/servidor,
el modelo de proceso concurrente dene actividades en
dos dimensiones: una divisin de sistemas y una divisin
de componentes. Los aspectos del nivel de sistemas se
afrontan mediante dos actividades: diseo y realizacin.
La concurrencia se logra de dos maneras:
Las actividades del sistema y de componente ocurren simultneamente y pueden modelarse con el enfoque orientado a objetos descrito anteriormente;
Una aplicacin cliente/servidor tpica se implementa
con muchos componentes, cada uno de los cuales se
pueden disear y realizar concurrentemente.
Modelo RAD (rapid application de- En realidad, el modelo de desarrollo concurrente es aplivelopment)
cable a todo tipo de desarrollo de software y proporciona
198
La segunda dimensin representa el aspecto esttico del para el usuario el producto nal es la informacin que de
proceso: cmo es descrito en trminos de componentes cierto modo soluciona el problema planteado por el usuadel proceso, disciplinas, actividades, ujos de trabajo, ar- rio.
tefactos y roles.
El renamiento ms conocido y documentado del proceso
unicado es el RUP (proceso unicado racional).
El proceso unicado no es simplemente un proceso, sino
un marco de trabajo extensible que puede ser adaptado a
organizaciones o proyectos especcos. De la misma manera, el proceso unicado de rational, tambin es un marco de trabajo extensible, por lo que muchas veces resulta
imposible decir si un renamiento particular del proceso
ha sido derivado del proceso unicado o del RUP. Por
dicho motivo, los dos nombres suelen utilizarse para referirse a un mismo concepto.* [35]
El desarrollo de software de gran porte requiere una ade Productos genricos: Son los producidos por una or- cuada gestin del proyecto. Hay presupuestos, estableciganizacin para ser vendidos al mercado.
miento de tiempos de entrega, un equipo de profesionales
Productos hechos a medida: Sistemas que son desa- que liderar. Recursos (espacio de ocina, insumos, equirrollados bajo pedido a un desarrollador especco. pamiento) por adquirir. Para su administracin se debe
tener una clara visin y capacitacin en gestin de proEstos productos deben cumplir varias caractersticas al yectos.
ser entregados, estas son:
Mantenibles: El software debe poder evolucionar
mientras cumple con sus funciones.
Conabilidad: No debe producir daos en caso de Para el desarrollo de un sistema de software es necesaria
la colaboracin de muchas personas con diversas compeerrores.
tencias, capacidades e intereses. Al conjunto de personas
Eciencia: El software no debe desperdiciar los re- involucradas en el proyecto se les conoce como particicursos.
pantes.
Utilizacin adecuada: Debe contar con una interfaz Al conjunto de funciones y responsabilidades que hay
de usuario adecuada y su documentacin.
dentro del proyecto o sistema se le conoce como roles
o papeles. Los roles estn asociados a las tareas que son
Lo que constituye el producto nal es diferente para el asignadas a los participantes, en consecuencia, una persoingeniero y los usuarios, para el ingeniero son los progra- na puede desempear uno o mltiples roles, as tambin
mas, datos y documentos que conguran el software pero un mismo rol puede ser representado por un equipo.* [36]
99.11.1
Cliente
Es frecuente el uso de los trminosusuarios,usuarios nalesy clientescomo sinnimos, lo cual puede provocar confusin; estrictamente, el cliente (persona,
empresa u organizacin) es quin especica los requisitos
del sistema,* [37] en tanto que el usuario es quien utiliza
u opera nalmente el producto software, pudiendo ser o
no el cliente.
99.11.2
Desarrolladores
99.11.3
Gestores
99.11.4
Usuarios nales
99.11.5
Un ingeniero de software debe tener un cdigo donde asegura, en la medida posible, que los esfuerzos realizados
se utilizarn para realizar el bien y deben comprometerse
para que la ingeniera de software sea una profesin benca y respetada. Para el cumplimiento de esta norma,
se toman en cuenta ocho principios relacionados con la
conducta y las decisiones tomadas por el ingeniero; donde estos principios identican las relaciones ticamente
responsables de los individuos, grupos y organizaciones
donde participen. Los principios a los que deben sujetarse son sobre la sociedad, cliente y empresario, producto,
juicio, administracin, profesin, colegas y por ltimo el
personal.
Sociedad: Los ingenieros de software deben actuar
de manera congruente con el inters social, aceptando la responsabilidad total de su trabajo, moderan-
199
do los intereses con el bienestar social, aprobando
el software solamente si se tiene una creencia bien
fundamentada, cooperando en los esfuerzos para solucionar asuntos importantes de inters social, ser
justo y veraz en todas las armaciones relativas al
software o documentos asociados.
Cliente y empresario: Se debe actuar de manera tal
que se llegue a conciliar los mejores intereses de los
clientes y empresarios, congruentemente con el inters social. Estos debern prestar servicios en sus
reas de competencia, siendo honestos y francos sobre las limitaciones, no utilizar un software que se
obtenga ilegalmente o sin tica, usar la propiedad
de los clientes o empresarios de manera autorizada,
mantener secreto cualquier documento de informacin condencial.
Producto: Hay que asegurarse que los productos y
sus modicaciones cumplan con los estndares profesionales ms altos posibles, procurando la alta calidad, costos aceptables y una agenda razonable asegurando que los costos y benecios sean claros y
aceptados por el empresario y el cliente. Asegurar
que las metas y objetivos de cualquier proyecto sean
adecuados y alcanzables.
Juicio: Se debe mantener una integridad e independencia en el juicio profesional, moderando todo juicio tcnico por la necesidad de apoyar y mantener
los valores humanos, mantener la objetividad profesional con respecto a cualquier software o documento relacionado, no involucrarse en prcticas nancieras fraudulentas.
Administracin: Se deber asegurar una buena administracin para cualquier proyecto en el cual se
trabaje, utilizando procedimientos efectivos para
promover la calidad y reducir riesgos, asegurndose tambin que se conozcan las polticas y procedimientos del empresario para proteger contraseas,
archivos e informacin condencial.
Profesin: Se debe incrementar la integridad y reputacin de la profesin en conjunto con el inters social, ayudando al desarrollo de un ambiente organizacional favorable para actuar, promoviendo el conocimiento pblico de la ingeniera de software, extendiendo el conocimiento de la ingeniera de software por medio de participaciones en organizaciones, reuniones y publicaciones profesionales.
Colegas: Cada ingeniero deber apoyar y ser justos
con los colegas, motivando a sus colegas sujetndose
al cdigo, ayudando tambin a su desarrollo profesional, reconocer los trabajos de otros y abstenerse
a atribuirse de mritos indebidos, revisar los trabajos de manera objetiva, sincera y propiamente documentada.
200
Organizaciones
Usabilidad
MTRICA
[20]
99.14 Referencias
[1]IEEE Standard Glossary of Software Engineering
Terminology,IEEE std 610.12-1990, 1990. ISBN
155937067X.
[2] SWEBOK executive editors, Alain Abran, James W.
Moore; editors, Pierre Bourque, Robert Dupuis. (2004).
Pierre Bourque and Robert Dupuis, ed. Guide to the Software Engineering Body of Knowledge - 2004 Version.
IEEE Computer Society. pp. 11. ISBN 0-7695-2330-7.
99.15 Bibliografa
Ingeniera de software (sexta edicin), Ian Sommerville. Addison Wesley. Sitio en Ingls
Pressman, Roger S.: Ingeniera del software: un enfoque prctico (informacin en ingls). McGraw Hill
Higher Education, sexta edicin, pg. 50-51.</ref>
Is software engineering actually engineering?, artculo publicado en The Iron Warrior, publicacin
de la University of Waterloo Engineering Society.
201
Captulo 100
Instancia (informtica)
En el paradigma de la orientacin a objetos, una instancia la que pertenece y, por tanto, puede llamar a los mtodos
(en ingls, instance) se reere a una realizacin especca de instancia que hayan sido declarados como de instancia,
de una clase o prototipo determinados.
as como a todos aquellos que hayan sido heredados por
En general, cuando se ejecuta un programa en un compu- la jerarqua de herencia esttica entre clases.
tador, se dice que ste se instancia. En lenguajes que crean
objetos a partir de clases, un objeto es una instancia de
una clase. Esto es, un miembro de una clase que tiene
atributos en lugar de variables. En un contexto del mundo real, podramos pensar en Perrocomo una clase
y en un perro concreto es una instancia de esta clase.* [1]
En este caso no nos importa la raza del perro. Si fuese
de nuestro inters modelarla, y diferencisemos entre un
dberman y un chihuahua, no solo cada instancia sera
diferente, sino que perteneceran a clases o prototipos diferentes, c.f. herencia (informtica).
100.1 Etimologa
El trmino en informtica procede del ingls, en donde
instance viene del signicado que podra traducirse por
caso o ejemplo en castellano. Aunque la palabra existe
en el idioma ingls por incorporacin desde el latn como instantia (que es de donde lo hace tambin la palabra en castellano), pero posteriormente tambin adquiri
(del latn tambin) parte de la semntica de instns, que
en nuestro caso deriv nicamente en instante.* [2] Esta
incorporacin desde el ingls tendra la consideracin de
prstamo semntico, aunque esta acepcin no est contemplada todava por la Real Academia Espaola.* [3]
Ciertos lenguajes de programacin permiten utilizar clases mixin, que permiten adems realizar asociaciones entre instancias de objetos para establecer relaciones similares a la herencia en tiempo de ejecucin.
100.5. REFERENCIAS
las propiedades y mtodos se heredan en la profundidad
completa del rbol de herencia de prototipados.
En el caso particular de JavaScript, aunque no se puede
cambiar el prototipo de un objeto una vez instanciado, s
se pueden cambiar las propiedades y mtodos que tiene
el prototipo, afectando a todas las instancias (en profundidad) de ese prototipo. En el caso particular de este lenguaje, en el que todos los objetos son instancias de Object, modicar o aadir mtodos a Object tendr como
consecuencia la modicacin de esos mtodos u objetos
entodos los dems objetos que no los hayan redenido
posteriormente, incluyendo los ya instanciados. Este es
el mecanismo que utilizan algunas bibliotecas de JavaScript* [Nota 2] para proporcionar funciones que no hayan
implementado ciertos motores a ciertos objetos del lenguaje.
100.4 Notas
[1] Erlang, por ejemplo, permite la ejecucin concurrente de varias versiones de un mismo programa,
vase change-3 http://www.erlang.org/doc/man/gen server.html#Module:code change-3, y CLOS.
[2] http://augmentjs.com, por ejemplo, proporciona mtodos
al objeto Array.prototype, cambiando todos los Array del
programa.
100.5 Referencias
[1] http://whatis.techtarget.com/definition/instance (en ingls)
[2] Vase Etymology en http://www.wordreference.com/
definition/instance
[3] http://lema.rae.es/drae/?val=instancia
203
Captulo 101
Instruccin (informtica)
Se denomina instruccin en informtica al conjunto de
datos insertados en una secuencia estructurada o especca que el procesador interpreta y ejecuta.
101.2 Tipos
Los tipos de instruccin permitidos estn denidos y determinados dentro de cada plataforma en el conjunto de
instrucciones (en ingls ISA, instruction set architecture),
que tambin determina los registros de origen y destino
de la CPU, y en ocasiones un dato inmediato (aquellos
que son especicados explcitamente en la instruccin).
Estas instrucciones del computador son las que determinan el funcionamiento de la CPU que las ejecuta. La CPU
puede realizar una diversidad de funciones, que son el reejo de la variedad de las instrucciones denidas para dicha CPU. El programador tiene un repertorio de instrucciones como medio para controlar la CPU.
101.1 Campos
Normalmente una instruccin se divide en dos campos:
205
Captulo 102
La adhesin a las ABIs (las cuales pueden o no estar ocialmente estandarizadas) es normalmente trabajo
del compilador, sistema operativo o de la librera, pero los programadores de aplicaciones pueden tratar con
las ABIs directamente cuando escriben las aplicaciones
en una mezcla de lenguajes de programacin, utilizando
interfaces de funciones forneas entre ellas.
Linux kernel-internal
API
I/O
interface
Network
interface
Linux OS
"Alpha"
DRM
MotionBuilder
Siemens NX
BricsCAD
CATIA5
Maya
et al.
ABI
IPC
manager
Linux
process
scheduler
binary
device
driver
Linux OS
"Bravo"
Linux OS
"Charlie"
compiled against
LSB 5.0 for x86-64
DRM
compiled for
Linux kernel 3.0
compiled against
LSB 5.0 for x86-64
DRM
Compilando los sistemas operativos y software comercial conforme a Linux Standard Base, resultar en una Interfaz Binaria de
Aplicacin (ABI) y por ello en portabilidad binaria.
static int collect(const char *root) {
enum {
FD_FANOTIFY, /* Get the actual fs events */
FD_SIGNAL,
/* We get notifications to quit early via this fd */
FD_INOTIFY,
_FD_MAX
};
struct pollfd pollfd[_FD_MAX] = {};
int fanotify_fd = -1, signal_fd = -1, inotify_fd = -1, r = 0;
pid_t my_pid;
Hashmap *files = NULL;
Iterator i;
char *p, *q;
sigsdet_t mask;
FILE *pack = NULL;
char *pack_fn_new = NULL, *pack_fn = NULL;
bool on_ssd, on_btrfs;
struct statfs sfs;
usec_t not_after;
uint64_t previous_block_readahead;
bool previous_block_readahead_set = false;
assert(root);
assert(root);
assert(root);
API
78
D2
03
DE
2A
D1
9D
68
5D
35
5C
0B
BF
CA
B7
7D
DB
75
7E
C7
1F
5E
F8
3C
89
F7
B2
56
E3
18
1E
77
E4
6E
8D
B3
CA
47
D9
DC
FA
EA
F3
7E
B0
51
1E
B3
B3
6D
AC
4C
63
7B
1D
71
02
71
63
16
F9
76
F7
EE
29
FC
FC
7F
E0
A6
98
65
5B
5A
4D
D5
F8
BD
8E
1F
78
D7
DB
F2
21
D0
CE
6C
8B
31
FD
AB
4F
76
EB
B8
C5
49
AA
21
7A
50
AF
31
6E
4F
EB
84
C3
CF
F8
2F
00
6B
6F
3D
CC
56
7D
CE
E1
D5
34
F6
20
0F
5B
B2
83
6F
E8
75
A7
E5
B1
83
ED
BE
06
14
56
F2
BC
C2
AC
5D
24
E8
05
53
32
25
28
48
02
5B
11
76
06
F6
05
80
12
AE
A4
3C
0B
5D
E7
3E
09
EA
EF
D2
2B
2F
0C
D9
D7
E6
FD
0C
D2
E0
E9
12
5A
89
8E
2E
B7
83
3E
18
31
37
C9
87
2F
C3
6D
AE
CD
7A
08
D2
CC
D3
42
5D
8C
9B
E0
8E
FF
8E
07
76
67
CA
BB
E7
A0
DB
E1
9F
96
8F
BD
73
A6
97
6F
19
39
ED
BB
7D
EE
B5
85
DC
48
EC
F6
7F
77
F7
CF
FD
D1
6C
CE
B2
30
FF
3D
83
F7
6E
C4
5D
ED
69
48
27
E1
9B
BF
00
C0
A2
FC
AF
DC
AB
A7
9F
8B
8A
F2
DE
BF
9A
BB
71
BD
D7
2F
D4
6F
BE
F0
60
C5
33
5F
B4
BB
A8
32
FE
AC
8A
E7
8D
B5
86
87
6D
90
BF
29
C2
9C
C3
30
4B
C3
5F
19
FD
88
79
70
CC
0A
91
19
EB
FB
3E
E1
57
80
53
66
7F
BC
88
C8
87
00
80
DB
55
12
01
4C
34
C7
D3
D8
1F
44
FD
54
39
70
B3
EE
1F
CF
CA
0D
76
59
6F
AB
93
93
26
5D
1F
A6
B2
C9
99
29
BA
4F
39
35
39
F9
E7
CC
25
EC
C7
19
Compilation
Linux kernel & GNU C Library
(machine code)
ABI
D7
26
27
4F
A3
27
32
75
FC
55
4A
B9
FE
5D
DE
BC
61
0B
64
2B
CC
1F
36
la convencin de llamada, que controla cmo se pasan los argumentos de las funciones y se recuperan
los valores devueltos; por ejemplo, si todos los parmetros se pasan a la pila o si algunos parmetros
pasan a los registros, qu registros se utilizan para qu parmetros de una funcin, y qu parmetro
pasa primero a la pila, si pasa el primero o el ltimo
Siemens NX
(source code)
API
binary compatible
(same instruction set,
same compilation environment)
ABI
systemd
not
(machine code) binary compatible
45
71
C8
F9
AA
B8
5D
CC
37
69
35
FB
A9
F2
F8
46
D6
8F
9F
09
13
53
C1
binary compatible
(same instruction set,
same compilation environment)
systemd
(source code)
102.1 Descripcin
Siemens NX
not
binary compatible (machine code)
34
4C
4E
9C
6F
39
76
2B
A0
05
E3
EF
9D
3C
B9
F1
DE
B7
F6
B3
AB
27
74
45
71
C8
F9
AA
B8
5D
CC
37
69
35
FB
A9
F2
F8
46
D6
8F
9F
09
13
53
C1
78
D2
03
DE
2A
D1
9D
68
5D
35
5C
0B
BF
CA
B7
7D
DB
75
7E
C7
1F
5E
F8
3C
89
F7
B2
56
E3
18
1E
77
E4
6E
8D
B3
CA
47
D9
DC
FA
EA
F3
7E
B0
51
1E
B3
B3
6D
AC
4C
63
7B
1D
71
02
71
63
16
F9
76
F7
EE
29
FC
FC
7F
E0
A6
98
65
5B
5A
4D
D5
F8
BD
8E
1F
78
D7
DB
F2
21
D0
CE
6C
8B
31
FD
AB
4F
76
EB
B8
C5
49
AA
21
7A
50
AF
31
6E
4F
EB
84
C3
CF
F8
2F
00
6B
6F
3D
CC
56
7D
CE
E1
D5
34
F6
20
0F
5B
B2
83
6F
E8
75
A7
E5
B1
83
ED
BE
06
14
56
F2
BC
C2
AC
5D
24
E8
05
53
32
25
28
48
02
5B
11
76
06
F6
05
80
12
AE
A4
3C
0B
5D
E7
3E
09
EA
EF
D2
2B
2F
0C
D9
D7
E6
FD
0C
D2
E0
E9
12
5A
89
8E
2E
B7
83
3E
18
31
37
C9
87
2F
C3
6D
AE
CD
7A
08
D2
CC
D3
42
5D
8C
9B
E0
8E
FF
8E
07
76
67
CA
BB
E7
A0
DB
E1
9F
96
8F
BD
73
A6
97
6F
19
39
ED
BB
7D
EE
B5
85
DC
48
EC
F6
7F
77
F7
CF
FD
D1
6C
CE
B2
30
FF
3D
83
F7
6E
C4
5D
ED
69
48
27
E1
9B
BF
00
C0
A2
FC
AF
DC
AB
A7
9F
8B
8A
F2
DE
BF
9A
BB
71
BD
D7
2F
D4
6F
BE
F0
60
C5
33
5F
B4
BB
A8
32
FE
AC
8A
E7
8D
B5
86
87
6D
90
BF
29
C2
9C
C3
30
4B
C3
5F
19
FD
88
79
70
CC
0A
91
19
EB
FB
3E
E1
57
80
53
66
7F
BC
88
C8
87
00
80
DB
55
12
01
4C
34
C7
D3
D8
1F
44
FD
54
39
70
B3
EE
1F
CF
CA
0D
76
59
6F
AB
93
93
26
5D
1F
A6
B2
C9
99
29
BA
4F
39
35
39
F9
E7
CC
25
EC
C7
19
D7
26
27
4F
A3
27
32
75
FC
55
4A
B9
FE
5D
DE
BC
61
0B
64
2B
CC
1F
36
34
4C
4E
9C
6F
39
76
2B
A0
05
E3
EF
9D
3C
B9
F1
DE
B7
F6
B3
AB
27
74
45
71
C8
F9
AA
B8
5D
CC
37
69
35
FB
A9
F2
F8
46
D6
8F
9F
09
13
53
C1
78
D2
03
DE
2A
D1
9D
68
5D
35
5C
0B
BF
CA
B7
7D
DB
75
7E
C7
1F
5E
F8
3C
89
F7
B2
56
E3
18
1E
77
E4
6E
8D
B3
CA
47
D9
DC
FA
EA
F3
7E
B0
51
1E
B3
B3
6D
AC
4C
63
7B
1D
71
02
71
63
16
F9
76
F7
EE
29
FC
FC
7F
E0
A6
98
65
5B
5A
4D
D5
F8
BD
8E
1F
78
D7
DB
F2
21
D0
CE
6C
8B
31
FD
AB
4F
76
EB
B8
C5
49
AA
21
7A
50
AF
31
6E
4F
EB
84
C3
CF
F8
2F
00
6B
6F
3D
CC
56
7D
CE
E1
D5
34
F6
20
0F
5B
B2
83
6F
E8
75
A7
E5
B1
83
ED
BE
06
14
56
F2
BC
C2
AC
5D
24
E8
05
53
32
25
28
48
02
5B
11
76
06
F6
05
80
12
AE
A4
3C
0B
5D
E7
3E
09
EA
EF
D2
2B
2F
0C
D9
D7
E6
FD
0C
D2
E0
E9
12
5A
89
8E
2E
B7
83
3E
18
31
37
C9
87
2F
C3
6D
AE
CD
7A
08
D2
CC
D3
42
5D
8C
9B
E0
8E
FF
8E
07
76
67
CA
BB
E7
A0
DB
E1
9F
96
8F
BD
73
A6
97
6F
19
39
ED
BB
7D
EE
B5
85
DC
48
EC
F6
7F
77
F7
CF
FD
D1
6C
CE
B2
30
FF
3D
83
F7
6E
C4
5D
ED
69
48
27
E1
9B
BF
00
C0
A2
FC
AF
DC
AB
A7
9F
8B
8A
F2
DE
BF
9A
BB
71
BD
D7
2F
D4
6F
BE
F0
60
C5
33
5F
B4
BB
A8
32
FE
AC
8A
E7
8D
B5
86
87
6D
90
BF
29
C2
9C
C3
30
4B
C3
5F
19
FD
88
79
70
CC
0A
91
19
EB
FB
3E
E1
57
80
53
66
7F
BC
88
C8
87
00
80
DB
55
12
01
4C
34
C7
D3
D8
1F
44
FD
54
39
70
B3
EE
1F
CF
CA
0D
76
59
6F
AB
93
93
26
5D
1F
A6
B2
C9
99
29
BA
4F
39
35
39
F9
E7
CC
25
EC
C7
19
D7
26
27
4F
A3
27
32
75
FC
55
4A
B9
FE
5D
DE
BC
61
0B
64
2B
CC
1F
36
34
4C
4E
9C
6F
39
76
2B
A0
05
E3
EF
9D
3C
B9
F1
DE
B7
F6
B3
AB
27
74
cmo una aplicacin debera realizar llamadas al sistema del sistema operativo y, si la ABI especica
llamadas directas al sistema en vez de llamadas de
procedimiento, las direcciones de llamada
En software de ordenador, una interfaz binaria de aplicacin (ABI) es la interfaz entre dos mdulos de programa, uno de los cuales es, a menudo, una librera o sistema
operativo, a nivel de lenguaje de mquina. Una ABI determina detalles como la forma de llamar a las funciones,
en qu formato binario se debera pasar la informacin
de un componente de programa al siguiente, o al sistema
operativo en el caso de una llamada al sistema.
y en el caso de un ABI de sistema operativo completo, el formato binario de los archivos objeto de las
libreras de programa, etc.
Un ABI completo, como el Estndar de Compatibilidad
Binaria de Intel (iBCS),* [1] permite a un programa de
un sistema operativo soportar dicho ABI para ejecutarse
sin modicaciones en cualquier otro sistema al que se le
provean de las libreras compartidas necesarias y tenga
los mismos pre-requisitos.
206
102.2 EABI
Una interfaz binaria de aplicacin embebida (EABI) especica convenciones estandarizadas para los formatos
de archivo, tipos de datos, uso de registros, organizacin
de la pila y paso de parmetros en funciones de una aplicacin de un sistema embebido.
Los compiladores que soportan EABI crean cdigo objeto compatible con el cdigo generado por otros compiladores, permitiendo a los desarrolladores enlazar libreras
generadas con otros compiladores. Los desarrolladores
que escriben su propio cdigo en lenguaje ensamblador
pueden usar EABI para interactuar con el ensamblador
generado por otro compilador.
207
[4] EABI Summary. PowerPC Embedded Application Binary Interface: 32-Bit Implementation (Version 1.0 edicin). Freescale Semiconductor, Inc. 01-10-1995. pp. 28
30.
[5] Debian ARM accelerates via EABI port. Linuxdevices.com. 19-01-2007. Archivado desde el original el 21
de enero 2007. Consultado el 11-10-2007.
[6] Andrs Caldern and Nelson Castillo (14-03-2007).
Why ARM's EABI matters. Linuxdevices.com.
Archivado desde el original el 31 de marzo 2007.
Consultado el 11-10-2007.
[7] PowerPC Embedded Processors Application Note
[8] ARM Information Center. Infocenter.arm.com. Consultado el 27-02-2014.
[9] Eric Christopher - mips eabi documentation. Cygwin.com. 11-06-2003. Consultado el 27-02-2014.
Las diferencias principales entre EABI y ABI para sistemas operativos de propsito general son que se permiten
instrucciones privilegiadas en el cdigo de la aplicacin
sin necesidad de enlazado dinmico y se utiliza un marco de pila ms compacto para ahorrar memoria.* [4] La
eleccin de EABi puede afectar al rendimiento.* [5]* [6]
102.4 Referencias
[1] Intel Binary Compatibility Standard (iBCS)
[2] Itanium C++ ABI (compatible con mltiples arquitecturas)
[3] Itanium C++ ABI: Exception Handling (compatible con
mltiples arquitecturas)
Captulo 103
Interfaz uida
En ingeniera de software, una interfaz uida (trmino
acuado por primera vez por Eric Evans y Martin Fowler) es una construccin orientada a objeto que dene un
comportamiento capaz de retransmitir el contexto de la
instruccin de una llamada subsecuente. Generalmente,
el contexto es
Este estilo es benecioso debido a su capacidad de proporcionar una sensacin ms uida al cdigo, aunque algunos ingenieros encuentran el estilo difcil de leer. Una
segunda crtica es que generalmente, las necesidades de
programacin son demasiado dinmicas para conar en
la denicin esttica de contacto ofrecida por una interfaz uida.
103.1 Ejemplos
El siguiente ejemplo muestra una clase implementando
una interfaz no uida, y otra implementando una contraparte uida, junto con las diferencias en el uso. El ejemplo se escribe en C #:
namespace Example.FluentInterfaces { using System;
public interface IConguration { void SetColor(string
color); void SetHeight(int height); void SetLength(int
length); void SetDepth(int depth); } public interface
ICongurationFluent { ICongurationFluent SetColor(string color); ICongurationFluent SetHeight(int
height); ICongurationFluent SetLength(int length);
ICongurationFluent SetDepth(int depth); } public
class Conguration : IConguration { string color;
int height; int length; int width; void SetColor(string
color) { this.color = color; } void SetHeight(int height)
{ this.height = height; } void SetLength(int length)
{ this.length = length; } void SetDepth(int depth) {
this.depth = depth; } } public class CongurationFluent :
208
209
Captulo 104
Invariante (informtica)
En la informtica se conoce como invariante a una condicin que se sigue cumpliendo despus de la ejecucin
de determinados comandos. Se cumple tanto antes como despus de estos comandos, permaneciendo sin variacin, por ello se denomina invariante. Las invariantes se pueden utilizar para demostrar el buen funcionamiento de algoritmos y cumplen con un papel importante en el diseo por contrato. En estos casos se describen
las precondiciones, postcondiciones e invariantes para un
mtodo de un interfaz. Este concepto se puede implementar con la ayuda de aserciones, siempre y cuando el
lenguaje de programacin o la API los soporte.
210
Captulo 105
Jframe
JFrame es una clase utilizada en Swing (biblioteca grca) para generar ventanas sobre las cuales aadir distintos
objetos con los que podr interactuar o no el usuario. A
diferencia de JPanel, JFrame posee algunas nociones tpicas de una ventana como minimizar, cerrar, maximizar
y poder moverla.
addImpl(Component comp, Object constraints, int index): Aade el componente especicado al JFrame.
105.1 Herencia
getAccessibleContext():
Obtiene
AccessibleContext asociado a dicho JFrame.
el
105.2 Constructores
Existen 4 tipos de constructores para inicializar un objeto
JFrame:
JFrame(): Construye un nuevo marco que es
inicialmente invisible.
JFrame(GraphicsConguration): Crea una ventana
con la conguracin grca especicada en el
objeto GraphicsConguration.
JFrame(Cadena de texto): Crea una nueva ventana
a la que se le pone por ttulo la cadena de texto que
se le indique.
JFrame(Cadena de texto, GraphicsConguration):
Crea una nueva ventana con el ttulo y la conguracin grca especicados.
getTransferHandler():
Devuelve
transferHandler del JFrame.
el
objeto
212
isDefaultLookAndFeelDecorated(): Comprueba si
la apariencia de la ventana JFrame es la apariencia
por defecto; en caso armativo ser cierto.
isRootPaneCheckingEnabled(): Devuelve un valor
de cierto si las llamadas add y setLayout se remiten
a la contentPane.
paramString(): Devuelve una representacin en
cadena de texto del JFrame.
processWindowEvent(WindowEvent e): Procesa los
eventos que se producen en el JFrame.
http://docs.oracle.com/javase/7/docs/api/javax/
swing/JFrame.html
Captulo 106
Usuario discusin:Juliasocorro
Hola, Julia. Olvid introducir el aviso en obras. Por ello
hubo un conicto de edicin. Si te convencen los cambios,
mi versin era sta:
5. Programador Web.
Personal:
Si se considera una puesta en comn de las ofertas generales recientes a nivel nacional, el perl laboral del Agente
SEO, segn la demanda de empleabilidad actual de las
empresas en cuanto a conocimientos, habilidades y destrezas, es el siguiente:
Contratado:
6. Estratega y Auditor.
7. Dominio de:
2. Por una empresa de alto nivel que empiece a expandir sus departamentos porque debe atender un alto
porcentaje de marketing digital.
1. SEO on page, optimizacin de la web, Web performance (HTML, PCHP, CCS, Bootstrap y Respon- El Agente SEO es un perl profesional novel. Data de pocos aos en el mercado nacional. Su demanda empieza a
sive Design).
aorar ahora mismo. En el transcurso del tiempo surgi2. Bases de datos, MysQL.
rn muchos cambios y especialidades. Porque, si bien en
213
214
SEO estamos en la etapa de madurez, en un momento que
el SEO participa de un porcentaje del trabajo webmaster,
con una porcin del marketing digital, tambin es cierto
que en Espaa comienza a aorar en Internet en cuanto a
subida de los negocios al mundo online y ms con sitios
web con Diseo Web adaptado a dispositivos mviles.
A medida que se implemente este perl profesional se
conrmar cada una de sus aptitudes. Una faceta positiva
adicional de Wikipedia es su apertura a la visin y a valores a nivel nacional de todos y cada uno de nosotros. Por
otra parte, no necesariamente el perl del Agente SEO
ha de ser equiparable con el inherente al Agente SEM.
Es positivo comenzar a disear las lneas que los cruzan
y de otras que los separan.
Esta es una propuesta para empezar a disear el perl laboral del Agente SEO, que no se imparte en las escuelas,
sino en los negocios.
Captulo 107
Kanban (desarrollo)
Este artculo se reere a la gestin de procesos y mtodo
de mejora. Para el proceso de manufactura esbelta, consulte Kanban.
Kanban es un mtodo para gestionar el trabajo intelecEl mtodo Kanban tiene sus races en cuatro principios
tual, con nfasis en la entrega justo a tiempo, mientras no
bsicos:
se sobrecargan a los miembros del equipo. En este enfoque, el proceso, desde la denicin de una tarea hasta su
1. Comience con lo que hace ahora
entrega al cliente, se muestra para que los participantes lo
vean y los miembros del equipo tomen el trabajo de una
El mtodo Kanban se inicia con las funcola.
ciones y procesos que ya se tienen y estiKanban se puede dividir en dos partes:
mula cambios continuos, incrementales
y evolutivos a su sistema.
Kanban - Un sistema de gestin de proceso visual
2. Se acuerda perseguir el cambio incremental y evoque le indica qu producir, cundo producirlo, y
lutivo
cunto producir.
El mtodo Kanban - Una aproximacin a la mejora
del proceso evolutivo e incremental para las organizaciones.
216
Anderson identic cinco caractersticas bsicas que haban sido observadas en cada implementacin correcta
del mtodo Kanban. Posteriormente fueron etiquetadas
como prcticas y se ampliaron con la adicin de una sexta caracterstica.* [3]
1. Visualizar
Visualizar el ujo de trabajo y hacerlo
visible es la base para comprender cmo
avanza el trabajo. Sin comprender el ujo de trabajo, realizar los cambios adecuados es ms difcil. Una forma comn
de visualizar el ujo de trabajo es el uso
de columnas. Las columnas representan
los diferentes estados o pasos en el ujo
de trabajo.
2. Limitar el trabajo en curso
Limitar el trabajo en curso implica que
un sistema de extraccin se aplica en la
totalidad o parte del ujo de trabajo. El
sistema de extraccin acta como uno de
los principales estmulos para los cambios continuos, incrementales y evolutivos en el sistema.
3. Dirigir y gestionar el ujo
Se debe supervisar, medir y reportar el
ujo de trabajo a travs de cada estado. Al gestionar activamente el ujo, los
cambios continuos, graduales y evolutivos del sistema pueden ser evaluados para tener efectos positivos o negativos.
4. Hacer las Polticas de Proceso Explcitas
Congure las reglas y directrices de su
trabajo. Entienda las necesidades y asegrese de seguir las reglas. Las polticas
denirn cundo y por qu una tarjeta
debe pasar de una columna a otra. Escrbalas. Cambie las reglas cuando la realidad cambie.
5. Utilizar modelos para reconocer oportunidades de
mejora
Cuando los equipos tienen un entendimiento comn de las teoras sobre el trabajo, el ujo de trabajo, el proceso y el
riesgo, es ms probable que sea capaz
de construir una comprensin compartida de un problema y proponer acciones
de mejora que puedan ser aprobadas por
107.6 Referencias
[1] Anderson, David (septiembre de 2003). Agile Management for Software Engineering: Applying the Theory of
Constraints for Business Results. Prentice Hall. ISBN 013-142460-2.
217
Captulo 108
108.5 Referencias
[1] http://dev.live.com/virtualearth/sdk/
[2] Java 2 Software Development Kit.
219
Captulo 109
Kommander
Kommander es denido con un conjunto de herramientas que permite la construccin de interfaces para scripts.
Estos scripts pueden tener interaccin con aplicaciones
propias del entorno de KDE y programas compilados en
algn lenguaje como por ejemplo C, C++, Phyton, etc.
Estas propiedades lo hacen ser muy til al momento de
integrar soluciones.
109.1 El editor
Es la interfaz disponible para el programador, en la cual
se crean las ventanas o cuadros de dilogo. Dentro de los
cuadros de dilogo se pueden insertar controles o widget,
tales como barras de progreso, botones, cuadros de imagen, etc.
109.2 El ejecutor
Es simplemente el motor que ejecuta el cdigo generado
por el editor.
Captulo 110
Captulo 111
Un estudio similar, revel que Debian versin 2.2 (conocido por su nombre clave Potato) contiene unos 55
millones de LCFU y de haber sido realizado mediante las
propiedades convencionales, hubiese tardado unos 14005
aos/persona y costado unos 1900 millones de dlares.
Ms tarde se ejecut una de las herramientas utilizadas
en el informe para la siguiente versin y se report que
En el lenguaje de programacin C, por ejemplo, una lnea Debian posee 104 millones de LCFU, y a partir del ao
2005, las siguientes versiones poseern, al menos, ms de
de cdigo puede ser:
213 millones de LCFU.
1. una instruccin acabada en un salto de lnea,
223
Get-ChildItem -recurse -include *.cxx,*.cpp,*.h,*.c
| Get-Content | Measure-Object -line ls -r -i
*.cxx,*.cpp,*.h,*.c | gc | measure-object -l
111.2.1
111.2.2
111.4 Referencias
[1] How Many Lines of Code in Windows?, Knowing.NET,
6 de diciembre de 2005, archivado del original
el 23 de noviembre de 2015, http://web.archive.
org/web/http://www.knowing.net/PermaLink,guid,
c4bdc793-bbcf-4fff-8167-3eb1f4f4ef99.aspx, consultado el 18 de octubre de 2007
This in turn cites Vincent Maraia's The Build Master as
the source of the information.
Source Monitor [10] es una herramienta gratuita para Windows que cuenta las lneas de cdigo y medidas derivadas de los lenguajes C++, C, C#, Java, y
de otro cdigo fuente
Dos maneras de contar LCFU en Windows PowerShell en todos los archivos .cxx, .cpp, .h, and .c dentro
y debajo del directorio.
224
Captulo 112
Macintosh Toolbox
El Macintosh Toolbox es un conjunto de APIs con un
mecanismo de acceso particular. Estas APIs implementan
varias de las caractersticas de alto nivel de Mac OS.
El Toolbox consiste en una serie de gestoresresponsables de generar los grcos en pantalla (componentes
de software como QuickDraw), y el Gestor de Men, que
mantiene las estructuras de datos que describen la barra
de men.
225
Captulo 113
Macro
Para la fotografa, vase Macrofotografa.
Este trmino ha sido popularizado por la pelcula de ccin Tron, ambientada en un mundo informtico virtual,
en la que se puede escuchar una voz fuera de campo
(probablemente de un programa dependiente del Control
Central) que advierte a los habitantes de ese mundo que
Las macros tienden a almacenarse en el mbito del pro- tengan cuidado con las macros ocultas.
pio programa que las utiliza y se ejecutan pulsando una
combinacin especial de teclas o un botn especialmente
creado y asignado para tal efecto.
La diferencia entre una macroinstruccin y un programa
es que en las macroinstrucciones la ejecucin es secuencial y no existe otro concepto del ujo de programa.
Captulo 114
Malla de tringulos 3D
La Malla de tringulos 3D es una coleccin de DirectX, no son compatibles con las mallas arbitrarias de
tringulos y vrtices que aproximan una supercie en 3D. tringulos. Sin embargo, estructuras como tiras de trinAunque el campo de aplicacin de la generacin auto- gulos - (donde cada tringulo, comparte un vrtice con un
mtica de una malla triangular, ha sido tradicionalmen- vecino y otro con el prximo) y el abanicos de tringulos
te la obtencin de modelos digitales de elevaciones del (un conjunto de tringulos conectados por un vrtice central) se tratan de manera eciente con la necesidad de slo
terreno, su aplicacin es mucho ms amplia. Cualquier
variable espacial relacionada con una cierta tipologa, es procesar N+2 vrtices para dibujar N tringulos.
susceptible de ser modelizada como una supercie tridi- Una malla de tringulos, construida a partir de tiras, en
mensional, en la que la cota de cada punto es el valor de abanico y posiblemente tringulos independientes, genela variable a estudiar.
ralmente se obtienen mediante un mosaico de objetos poPara saber cmo podramos descomponer un objeto con ligonales.
todas sus partes, la mnima regla es la teora del sistema
de visin humano. Para interpretar cmo los seres humanos pueden descomponer un objeto en mallas, podramos
desarrollar un algoritmo de segmentacin de malla ya que
adems ste nos permite obtener un nivel superior de descripciones del objeto en cuestin.
114.1 Aplicaciones
114.2 Obtencin de las mallas
228
man la malla sean los puntos inicialmente dados.
114.3 Compresin
Un mtodo de compresin de una malla con pluralidad
de vrtices, es decir, que cada vrtice se caracteriza por
un grado igual al nmero de bordes incidentes y con la
casi totalidad de vrtices en un orden consecutivo. As
generamos una lista con la tipologa de los grados de los
vrtices en orden consecutivo y el cdigo de secuencia de
seales con la tipologa de la lista.
Captulo 115
Mapeo objeto-relacional
El mapeo objeto-relacional (ms conocido por su nombre en ingls, Object-Relational mapping, o sus siglas
O/RM, ORM, y O/R mapping) es una tcnica de programacin para convertir datos entre el sistema de tipos
utilizado en un lenguaje de programacin orientado a objetos y la utilizacin de una base de datos relacional como
motor de persistencia. En la prctica esto crea una base
de datos orientada a objetos virtual, sobre la base de datos relacional. Esto posibilita el uso de las caractersticas
propias de la orientacin a objetos (bsicamente herencia
y polimorsmo). Hay paquetes comerciales y de uso libre
disponibles que desarrollan el mapeo relacional de objetos, aunque algunos programadores preeren crear sus
propias herramientas ORM.
115.2 Implementaciones
230
la base de datos. Peor an, la capa de traduccin puede ser 115.3 Bases de datos distintas a
lenta e ineciente (comparada en trminos de las sentenSQL
cias SQL que escribe), provocando que el programa sea
ms lento y utilice ms memoria que el cdigo escrito
Las bases de datos como Cach no necesitan mapeo
a mano.
objeto-relacional manual. El acceso del SQL a los valoUn buen nmero de sistemas de mapeo objeto-relacional res no escalares ya ha sido construido. Cach permite a
se han desarrollado a lo largo de los aos, pero su efec- los desarrolladores disear cualquier combinacin de protividad en el mercado ha sido diversa. NeXT's Enter- gramacin orientada a objetos y almacenamiento estrucprise Objects Framework (EOF) fue una de las prime- turado en tablas en la misma base de datos en lugar de
ras implementaciones, pero no tuvo xito debido a que depender de herramientas externas.
estaba estrechamente ligado a todo el kit de NeXT's,
OpenStep * [cita requerida]. Fue integrado ms tarde en Otra solucin puede ser el uso de un sistema de adminisNeXT's WebObjects, el primer servidor web de apli- tracin de base de datos orientada a objetos (OODBMS:
caciones orientado a objetos. Desde que Apple compr Object-oriented database management system), lo cual,
NeXT's en 1997, EOF provey la tecnologa detrs de los como el nombre lo sugiere, es una base de datos diseasitios web de comercio electrnico de Apple: los servicios da especcamente para trabajar con valores orientados a
.Mac y la tienda de msica iTunes. Apple provee EOF en objetos. Usar un OODBMS puede eliminar la necesidad
dos implementaciones: la implementacin en Objective- de convertir datos desde y hacia su forma SQL, y los daC que viene con Apple Developers Tools y la implemen- tos pueden ser almacenados en su representacin original
tacin Pure Java que viene en WebObjects 5.2. Inspirado como objetos.
por EOF es el open source Apache Cayenne. Cayenne Las bases de datos orientadas a objetos an no han contiene metas similares a las de EOF e intenta estar acorde seguido una alta aceptacin y uso. Una de las principales
a los estndares JPA.
limitaciones reside en que, cambiar de un sistema de adUna aproximacin alternativa ha sido tomada por tecno- ministracin de base de datos SQL a un sistema orientalogas como RDF y SPARQL, y el concepto detriplesto- do totalmente a objetos implica que se pierde la capacire. RDF es una serializacin del concepto objeto-sujeto- dad de crear sentencias SQL, un mtodo ya probado para
predicado, RDF/XML es una representacin en XML de obtener combinaciones especcas de datos. Por esta raaquello, SPARQL es un lenguaje de consulta similar al zn, muchos programadores se encuentran ms a gusto
SQL, y un triplestorees una descripcin general de trabajando con un sistema de mapeo de objetos y SQL,
una base de datos que trabaja con un tercer componente. an cuando la mayora de las bases de datos comerciales
orientadas a objetos son capaces de procesar consultas
Ms recientemente, un sistema similar ha comenzado a SQL de manera limitada.
evolucionar en el mundo Java, conocido como Java Data Objects (JDO). A diferencia de EOF, JDO es un estndar, y muchas implementaciones estn disponibles por
parte de distintos distribuidores de software. La especi- 115.4 Vase tambin
cacin 3.0 de Enterprise Java Beans (EJB) tambin cubre
Propel (PHP)
la misma rea. Han existido algunos conictos de estndares entre ambas especicaciones en trminos de pre Doctrine (PHP)
eminencia. JDO tiene muchas implementaciones comerciales, mientras que EJB 3.0 est an en desarrollo. Sin
JPA (Java)
embargo, recientemente otro estndar ha sido anuncia Hibernate (Java)
do por JCP para abarcar estos dos estndares de manera
conjunta y lograr que el futuro estndar trabaje en diver ADO.NET Entity Framework (C#)
sas arquitecturas de Java. Otro ejemplo a mencionar es
Hibernate, el framework de mapeo objeto-relacional ms
LINQ to SQL (C# slo para SQL Server) su sintaxis
usado en Java que inspir la especicacin EJB 3.
es similar a JPA
En el framework de desarrollo web Ruby on Rails, el mapeo objeto-relacional juega un rol preponderante y es manejado por la herramienta ActiveRecord. Un rol similar
es el que tiene el mdulo DBIx::Class para el framework
basado en Perl Catalyst, aunque otras elecciones tambin
son posibles.
NHibernate (C#)
peewee (Python)
Captulo 116
Mquina de estados
Se denomina mquina de estados a un modelo de comportamiento de un sistema con entradas y salidas, en donde las salidas dependen no slo de las seales de entradas
actuales sino tambin de las anteriores.
La bibliografa a veces llama autmata nito a las aceptoras, mientras que en otros casos se emplea autmata
como sinnimo de mquina de estados sin importar su
tipo.
Una mquina de estados se denomina mquina de estados nitos (FSM por nite state machine) si el conjunto
de estados de la mquina es nito, este es el nico tipo de
mquinas de estados que podemos modelar en un computador en la actualidad; debido a esto se suelen utilizar los
trminos mquina de estados y mquina de estados nitos de forma intercambiable. Sin embargo un ejemplo de
una mquina de estados innitos sera un computador
cuntico esto es debido a que los Qubit que utilizara este tipo de computadores toma valores continuos, en contraposicin los bits toman valores discretos (0 1). Otro
buen ejemplo de una mquina de estados innitos es una
Mquina universal de Turing la cual se puede denir tericamente con una cintao memoria innita.
Captulo 117
Mquina desnuda
En informtica, cuando no hay un ncleo (S.O.) instalado
en el hardware, se suele decir que es una mquina desnuda. Suelen ser sistemas sencillos, que ejecutan alguna
tarea cuando se produce una interrupcin, y que el resto
del tiempo ejecutan una tarea idle muy bsica, normalmente que no hace nada.
Suelen usarse en los sistemas en tiempo real, cuando el
nmero y complejidad de las tareas es pequeo.
En las mquinas desnudas suelen usarse las mquinas de
estados. Es decir, se supone que el comportamiento de
nuestra mquina puede modelarse como una mquina de
estados. La rutina de interrupcin lo que nos dara es el
estado al que tiene que cambiar. Esto fue muy popular,
incluso hay herramientas que generan automticamente
el cdigo de cambios entre estados. Pero no es buena idea
para las aplicaciones complejas.
232
Captulo 118
MCML
MCML (acrnimo del ingls Media Center Markup
Language, Lenguaje de Formato para Centro de Multimedios en espaol) es el lenguaje de formato para la interfaz
de usuario para el centro de Multimedios (Media Center)
de Windows Vista, el cual es la forma nativa en la cual
se crean las interfaces de usuarios en este ambiente de
desarrollo.
MCML es un lenguaje declarativo basado en XML, optimizado para describir grcamente interfaces de usuarios visuales ricas desde el punto de vista grco, tales como las creadas por medio de Macromedia Flash. XAML,
XUL y UIML son otros ejemplos de lenguajes de interfaz
basados en XML.
En su uso tpico, los archivos tipo MCML seran producidos por una herramienta de desarrollo, como Microsoft
Visual Studio. El XML resultante es interpretado en
forma instantnea por un sub-sistema de despliegue de
Windows Vista denominado Windows Media Center, el
cual est orientado a la visualizacin del contenido del
computador a mayor distancia que la normal, similar a la
que se acostumbra para un aparato de televisin y utilizando un control remoto en lugar de un teclado y un mouse. Debido a esto las interfaces de usuario para Media
Center estn construidas bajo premisa diferentes, pues
deben tomar en cuenta el hecho de que sus usuarios estarn utlizndolas a una distancia mayor y por medio de dispositivos de control no convencionales. Los elementos de
XAML se interconectan con objetos del Entorno Comn
de Ejecucin para Lenguajes. Los atributos se conectan
con propiedades o eventos de esos objetos.
MCML fue diseado para soportar las clases y mtodos
de la plataforma de desarrollo .NET que tienen relacin
con la interaccin con el usuario, en especial el despliegue
en pantalla.
233
Captulo 119
Metaprogramacin
La metaprogramacin consiste en escribir programas
que escriben o manipulan otros programas (o a s mismos) como datos, o que hacen en tiempo de compilacin
parte del trabajo que, de otra forma, se hara en tiempo
de ejecucin. Esto permite al programador ahorrar tiempo en la produccin de cdigo.
Un ejemplo sencillo de un metaprograma sera este script
de Bash:
#!/bin/bash # metaprogram echo '#!/bin/bash' >program
for ((I=1; I<=992; I++)); do echoecho $I>>program
done chmod +x program
Este script genera un nuevo programa que imprime por
pantalla los nmeros 1 a 992. Esto es slo una muestra de
cmo usar cdigo para escribir ms cdigo, no la forma
ms eciente de imprimir una lista de nmeros. En cualquier caso, un buen programador puede escribir y ejecutar este metaprogama en apenas un par de minutos, y
habr generado exactamente 1000 lneas de cdigo en esa
cantidad de tiempo.
La herramienta de metaprogramacin ms comn es el
compilador, el cual permite al programador escribir un
programa relativamente corto en un lenguaje de alto nivel para, posteriormente, escribir un programa equivalente en lenguaje ensamblador o lenguaje mquina. Esto, por
lo general, signica un buen ahorro de tiempo si se compara con la posibilidad de escribir el programa en lenguaje mquina de forma directa.
Otro ejemplo bastante comn de metaprogramacin se
puede encontrar en el uso de Lex (vase tambin: Flex) y
Yacc (vase tambin: bison), que son usados para generar
compiladores e intrpretes.
234
Captulo 120
235
Captulo 121
Modelo de prototipos
El Modelo de prototipos, en Ingeniera de software, pertenece a los modelos de desarrollo evolutivo. El prototipo
debe ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar muchos recursos.
El diseo rpido se centra en una representacin de aquellos aspectos del software que sern visibles para el cliente
o el usuario nal. Este diseo conduce a la construccin
de un prototipo, el cual es evaluado por el cliente para una
retroalimentacin; gracias a sta se renan los requisitos
del software que se desarrollar. La interaccin ocurre
cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el
desarrollador entienda mejor lo que se debe hacer y el
cliente vea resultados a corto plazo.
121.3 Inconvenientes
El usuario tiende a crearse unas expectativas cuando
ve el prototipo de cara al sistema nal. A causa de la
intencin de crear un prototipo de forma rpida, se
suelen desatender aspectos importantes, tales como
la calidad y el mantenimiento a largo plazo, lo que
obliga en la mayor parte de los casos a reconstruirlo
una vez que el prototipo ha cumplido su funcin. Es
frecuente que el usuario se muestre reaccin a ello y
pida que sobre ese prototipo se construya el sistema
nal, lo que lo convertira en un prototipo evolutivo, pero partiendo de un estado poco recomendado.
121.1 Etapas
Plan rpido.
Modelado, diseo rpido
Construccin del Prototipo
Desarrollo, entrega y retroalimentacin
Comunicacin
121.2 Ventajas
Este modelo es til cuando el cliente conoce los objetivos generales para el software, pero no identica
los requisitos detallados de entrada, procesamiento
o salida.
121.4 Conclusiones
Tambin ofrece un mejor enfoque cuando el responsable del desarrollo del software est inseguro de la
ecacia de un algoritmo, de la adaptabilidad de un A pesar de que tal vez surjan problemas, la construccin
sistema operativo o de la forma que debera tomar de prototipos puede ser un paradigma efectivo para la ingeniera del software. La clave es denir las reglas del
la interaccin humano-mquina
juego desde el principio; es decir, el cliente y el desarro Se puede reutilizar el codigo
llador se deben poner de acuerdo en:
236
237
Captulo 122
Modicador
Un modicador es un conjunto de funciones de
programacin del lenguaje C que se aplican a las variables
dentro de la estructura de un programa antes de que ste
sea mostrado.
Los modicadores pueden ir encadenados, y son rutinas
que distorsionan la forma de los objetos de una manera
determinada, sin cambiar su naturaleza. As por ejemplo
CALIF_FINAL es una variable numrica y su modicador informar si se utilizar en todo el programa o solo
en parte de l.
238
Captulo 123
Modularidad
La modularidad es la capacidad que tiene un sistema 123.3 Modularidad en Economa y
de ser estudiado, visto o entendido como la unin de vaen la Empresa
rias partes que interactan entre s y que trabajan para
alcanzar un objetivo comn, realizando cada una de ellas
una tarea necesaria para la consecucin de dicho objeti- En economa y en la empresa, la modularidad de los provo. Cada una de esas partes en que se encuentre dividido ductos, servicios y procesos es un factor clave en el desa*
*
el sistema recibe el nombre de mdulo. Idealmente un rrollo tecnolgico, econmico y social. [1] [2]
mdulo debe poder cumplir las condiciones de caja negra, es decir, ser independiente del resto de los mdulos
y comunicarse con ellos (con todos o slo con una parte) 123.4 Modularidad en el diseo
a travs de unas entradas y salidas bien denidas.
240
Captulo 124
Mdulo (informtica)
En programacin un mdulo es una porcin de un
programa de ordenador. De las varias tareas que debe
realizar un programa para cumplir con su funcin u objetivos, un mdulo realizar, comnmente, una de dichas
tareas (o varias, en algn caso).
En general (no necesariamente relacionado con la programacin), un mdulo recibe como entrada la salida que
haya proporcionado otro mdulo o los datos de entrada al
sistema (programa) si se trata del mdulo principal de ste; y proporcionar una salida que, a su vez, podr ser utilizada como entrada de otro un mdulo o bien contribuir
directamente a la salida nal del sistema (programa), si
se retorna al mdulo principal.
Particularmente, en el caso de la programacin, los mdulos suelen estar (no necesariamente) organizados jerrquicamente en niveles, de forma que hay un mdulo principal que realiza las llamadas oportunas a los mdulos de
nivel inferior.
Algoritmo
Programa
Modularidad
Diseo estructurado
Programacin modular
Captulo 125
Monitor (concurrencia)
En la programacin paralela, los monitores son objetos
destinados a ser usados sin peligro por ms de un hilo de
ejecucin. La caracterstica que principalmente los dene
es que sus mtodos son ejecutados con exclusin mutua.
Lo que signica, que en cada momento en el tiempo, un
hilo como mximo puede estar ejecutando cualquiera de
sus mtodos. Esta exclusin mutua simplica el razonamiento de implementar monitores en lugar de cdigo a
ser ejecutado en paralelo.
En el estudio y uso de los semforos se puede ver que las
llamadas a las funciones necesarias para utilizarlos quedan repartidas en el cdigo del programa, haciendo difcil
corregir errores y asegurar el buen funcionamiento de los
algoritmos. Para evitar estos inconvenientes se desarrollaron los monitores. El concepto de monitor fue denido
por primera vez por Charles Antony Richard Hoare en un
artculo del ao 1974.* [1] La estructura de los monitores
se ha implementado en varios lenguajes de programacin,
incluido Pascal concurrente, Modula-2, Modula-3 y Java,
y como biblioteca de programas.
125.1 Componentes
Un monitor tiene cuatro componentes: inicializacin, datos privados, mtodos del monitor y cola de entrada.
Inicializacin: contiene el cdigo a ser ejecutado
cuando el monitor es creado
Datos privados: contiene los procedimientos privados, que slo pueden ser usados desde dentro del
monitor y no son visibles desde fuera
243
ejecutarlo a seguir con el proceso despertante.
Desventajas:
Si el proceso que ejecuta cond_signal no termin
con su ejecucin se necesitarn dos cambios de contexto para que vuelva a tomar el lock del monitor.
Al despertar a un thread que espera en una variable
de condicin, se debe asegurar que reanude su ejecucin inmediatamente. De otra forma, algn otro thread podra cambiar la condicin. Esto implica que
la planicacin debe ser muy able, y diculta la implementacin.
244
hacen correcto. Dicha vericacin se puede realizar me- en espera vuelva a ser ejecutado, debe garantizarse que el
diante axiomas y reglas de inferencia como, por ejemplo, invariante del monitor sigue siendo vlido.
los propuestos por la Lgica de Hoare.
{IM L}wait(){IM L}
125.4.1
Los
procesos
bloqueados,
se
desbloquean
con
Inicializacin de las variables del cond_signal o con cond_broadcast pero, esta vez,
el proceso que llama a cond_signal sigue ejecutndose y
monitor
125.4.2
125.4.3
125.6 Referencias
[1] Hoare, Charles Antony (octubre de 1974). Monitors: An
Operating System Structuring Concept. ACM 17: 549
57. Consultado el 9 de diciembre de 2012.
[2] Capel Tun, Rodrguez Valenzuela (2012). Sistemas
Concurrentes y Distribudos. Copicentro. pp. 8992. ISBN
978-84-15536-68-0.
Captulo 126
Anexo:Motores de persistencia
Esta es una lista alfabtica de los principales motores
de mapeo objeto relacional, indicando si son libres o
comerciales.
Ebean
Enterprise Objects Framework
FireStorm/DAO
126.0.1
ColdFusion
Hydrate
iBATIS
Reactor Reactor es un sencillo API para ColdFusion que abstrae la base de datos al vuelo segn se
necesite.
objectBreeze objectBreeze crea objetos directamente desde tu capa de persistencia.
Transfer Transfer es una librera para generar objetos de negocio al vuelo y abstraer las transacciones
sobre ellos.
126.0.2
Common Lisp
OpenAccess
CLSQL
OJB,
cl-perec
OpenJPA,
elephant
POEM,
postmodern
PriDE
submarine
126.0.3
SavePoint
SimpleORM
Java
Speedo
BuzzSQL
TopLink de Oracle
Carbonado
Torque de ASF
Castor
WebObjects de Apple.
Cayenne
JavaScript
GearsORM
245
246
126.0.5
.NET
.netTiers
Persistor.NET
CodeFluent Entities
126.0.6 Perl
Class::DBI (open source)
Rose::DB::Object (open source)
OOPS (open source)
ORM (open source)
DBIx::Class (open source)
Alzabo (open source)
Tangram (Perl) (open source)
126.0.7 PHP
GURA
Habanero
iBATIS.NET
IdeaBlade DevForce
Lattice.DataMapper
LightSpeed
LLBLGen Pro
NConstruct
NJDX
Nolics
Opf3
ObjectMagix
OpenAccess
247
126.0.8
Python
Axiom
Ape , para [[Zope]
SQLAlchemy (open source)
SQLObject (open source)
PyDO (open source)
PyDO2
MiddleKit, parte de Webware (open source)
Modeling
ForgetSQL (open source)
QLime (open source)
Storm (open source)
The open source Django web framework
Dejavu
Twisted Asynchronous Database Api (open source)
PyDAO
126.0.9
Ruby
126.0.10
Smalltalk
126.0.11
C++
DTL
DataXtend CE for C++
Object Builder
SOCI
StactiveRecord (open source)
Captulo 127
127.2 Referencias
[1] The Pragmatic Programmer: From Journeyman to Master.
Addison Wesley. ISBN 978-0201616224. p. 95, footnote.
[2] Baker, SJ, The Contribution of the Cardboard Cutout Dog
to Software Reliability and Maintainability, http://www.
sjbaker.org/humor/cardboard_dog.html.
El mtodo de depuracin del patito de goma es un trmino informal utilizado en ingeniera de software para
describir un mtodo de revisin de cdigo. El nombre es
una referencia a una historia del libro The Pragmatic Programmer en donde un programador toma un patito de goma y revisa su cdigo forzndose a s mismo a explicarlo,
lnea por lnea, al pato.* [1] Existen otros muchos trminos para esta tcnica, que a menudo tienen que ver con
objetos inanimados.
Muchos programadores han tenido una experiencia de
explicar un problema de programacin a alguien ms,
posiblemente a alguien que no sabe nada sobre programacin, y luego encuentran la solucin en el proceso de
explicar el problema. Al comparar lo que supuestamente hace el cdigo con lo que hace en realidad, cualquier
incongruencia resulta ntida.* [2] Usando un objeto inanimado, el programador puede tratar de completar esto sin
tener que involucrar adems a otra persona.
Captulo 128
Net Yaroze
La Net Yaroze ( netto yarze* ?) era
un kit de desarrollo de software de Sony Computer Entertainment creado en 1997 para juegos de PlayStation.
Estaba enfocado a los desarrolladores acionados. Yaroze signica Vamos a hacerlo juntos.* [1]
Costaba alrededor de los $750 USD. El pack inclua, adems de la consola, que era idntica a la Playstation pero
en negro, documentacin y software. No inclua bloqueo
regional.* [2] Para usarla, el usuario necesitaba tener un
ordenador personal IBM, Macintosh o NEC PC-9801.
As, el usuario, en el propio ordenador escriba el cdigo del juego, lo compilaba y lo enviaba a la Net Yaroze
para probarlo.
A pesar de ser un kit de desarrollo para juegos de PlayStation, la Net Yaroze careca de varias caractersticas
que s tenan los desarrolladores de PlayStation. No tena
hardware avanzado, software, bibliotecas, herramientas
varias y una amplia asistencia tcnica de Sony. Adems,
A pesar de no tener bloqueo regional, existan tres ver- los grupos de Usenet existentes, estaban restringidos a los
siones, la japonesa, la americana y la europea/australiana. miembros de Net Yaroze, lo que provoc que la colaboLa principal diferencia entre ellas era que, las versiones racin entre usuarios fuese poco prctica.
europea/australiana era en modo Pal mientras que la ver- La memoria principal de la Net Yaroze era la misma que
sin japonesa y americana tena modo NTSC. Entre la la de la PlayStation, de 2 Megabytes. Sin embargo, la Net
versin japonesa y americana, la diferencia estaba en el Yaroze tena una memoria secundaria extra que ofreca
idioma del manual, el software para PC japoneses, discos 1,5 megabytes ms a la consola. As pues, contaba con
y los diferentes dibujos en las calcomanas. Extraocial- un total de 3,5 megabytes de memoria RAM. Esta capamente, la versin japonesa es llamada DTL-3000 en lugar cidad era la que marcaba el espacio total del juego, es dede DTL-H3000.
cir, lo que tena que ocupar como mucho su cdigo fuenLa Net Yaroze estaba slo disponible a travs de pedido te, grcos, msica y bibliotecas, pues todo esto deba
por correo. No obstante, Sony, proporcion este kit a al- de instalarse para poder ser probado. No obstante, exisgunas universidades del Reino Unido, Francia (Epita) y ten muchos ttulos comerciales que estn completamente
instalados en la RAM, a excepcin del sonido, y podran
Japn.* [3]
haber sido desarrollados complemente con la Net Yaroze.
El kit europeo de la Net yaroze contena:
Muchos ttulos desarrollados por acionados con la Net
Yaroze fueron distribuidos con la PlayStation: The O 1 Net Yaroze (textura negro mate)
cial Magazine en Europa desde diciembre de 1997 hasta
2 controladores de PlayStation (textura negro mate) marzo de 2004. El ltimo nmero ocial revista PlayStation del Reino Unido, la nmero 108, present una re Un cable de alimentacin de corriente alterna (con copilacin con muchos juegos de la Net Yaroze. Algunos
enchufe para Reino Unido y adaptador para Francia) ttulos que salieron con la revista fueron:
Un conector AV
Haunted maze
Terra Incognita
Blitter Boy
250
A dog tale
Adventure game
Rocksn'Gems
Psychon
Pushy II
Between the eyes
Super bub
Clone
Gravitation
Mah Jongg
No fueron muchos, pero algunos de estos juegos prosperaron a nivel comercial, siendo el ms famoso de ellos
Devil Dice (Xi en Japn), que entonces llevaba el nombre
de Para-Dice.
128.3 Referencias
[1] Absolute PlayStation, Section I. PlayStation FAQ. Archivado desde el original el 23 de noviembre de 2015.
Consultado el 15 de Junio, 2012.
[2] IGN UK. NET Yaroze. Archivado desde el original el
23 de noviembre de 2015. Consultado el 15 de Junio,
2012.
[3] IGN UK. NET Yaroze. Consultado el 15 de Junio,
2012.
Captulo 129
Nodo (informtica)
En informtica y en telecomunicacin, de forma muy general, un nodo es un punto de interseccin, conexin o
unin de varios elementos que conuyen en el mismo lugar. Ahora bien, dentro de la informtica la palabra nodo
puede referirse a conceptos diferentes segn el mbito en
el que nos movamos:
En redes de computadoras cada una de las mquinas es un nodo, y si la red es Internet, cada servidor
constituye tambin un nodo. El concepto de red puede denirse como:
En estructuras de datos dinmicas un nodo es un
registro que contiene un dato de inters y al menos
un puntero para referenciar (apuntar) a otro nodo. Si
la estructura tiene slo un puntero, la nica estructura que se puede construir con l es una lista, si el
nodo tiene ms de un puntero ya se pueden construir
estructuras ms complejas como rboles o grafos.
129.1 Referencias
[1] Castells, Manuel (1997). La era de la informacin. Economa, sociedad y cultura. Vol I: La sociedad red. Madrid:
Alianza Editorial. ISBN 84-206-4247-9.
251
Captulo 130
Notacin Reddick
La notacin Reddick en programacin informtica, es
un sistema usado normalmente para crear los nombres
de variables e identicar rpidamente su tipo de dato. El
nombre de la notacin proviene de su inventor Greg Reddick.
Esta convencin es muy utilizada en las nuevas versiones
de Visual Basic y Visual Basic 2005. Tambin es muy utilizada por los programadores de Microsoft y en tecnologas .NET. Consiste entagsde tres letras en minsculas
que se aaden a los nombres de las variables, y que indican su tipo. El resto del nombre indica, lo ms claramente
posible, la funcin que realiza la variable.
130.1 Ejemplo
intContador: una variable del tipo INTEGER que se
usa como un contador.
strNombre: variable del tipo STRING que se usa para almacenar un nombre.
252
Captulo 131
Notacin hngara
En programacin informtica, la notacin hngara es
un sistema usado normalmente para crear los nombres de
variables. Tambin se utiliza para nombrar las instancias
de objetos en lenguajes de programacin visuales, como
por ejemplo Delphi. El nombre de la notacin proviene
del hecho de que su inventor, Charles Simonyi, naci en
Hungra.
Esta convencin es muy poco utilizada en las viejas versiones de Delphi pero es muy utilizada por los programadores de Microsoft y, en particular, en la programacin
del sistema operativo Windows.
editores de cdigo inteligente que utilicemos, la mayora de proyectos siempre acaban teniendo ciertas partes
escritas en lenguajes dinmicamente tipados, en especial JavaScript, el nico implementado por la mayora de
navegadores web para ejecutar cdigo en cliente
Puesto que a la hora de realizar proyectos se suelen establecer previamente unas Coding Style Guidelines (Guas
de estilo de programacin), no conviene hacerlas distintas para cada lenguaje y se podra denir un estndar de
notacin hngara que tenga un ligero compromiso con
la facilidad de reconocimiento de tipos, sin que llegue a
suponer un inerno sobre la complejidad de lectura de
cdigo.
131.1 Ejemplos
Programacin
Sistema operativo
Captulo 132
Null
El trmino null o nulo o DG es a menudo utilizado en la
computacin, haciendo referencia a la nada.
En programacin, null resulta ser un valor especial aplicado a un puntero (o referencia) usado para indicar que el
puntero no apunta a un objeto o dato vlido. Usualmente
se utiliza el valor 0 (cero) para signicar null, debido a que
muchos sistemas operativos consideran el intentar acceder a una direccin de memoria tan baja como un error.
Null es tambin utilizado en varias otras disciplinas y no
nicamente en programacin.
En contexto de bases de datos null se utiliza para indicar
la ausencia de valor asociado a un campo para un determinado registro.
As mismo se denen los resultados para null en operaciones lgicas:
Operacin O Verdadero O null = Verdadero
Falso O null = null
Operacin Y Verdadero Y null = null
Falso Y null = Falso
254
Captulo 133
NWNScript
NWNScript es el lenguaje interpretado empleado en el
videojuego Neverwinter Nights y Neverwinter Nights 2.
255
Captulo 134
Objeto todopoderoso
En programacin orientada a objetos, un objeto todopoderoso (en ingls God Object) es un objeto que conoce
demasiado o hace demasiado. El objeto todopoderoso es
un ejemplo de un anti-patrn.
134.2 Referencias
Ravioli code, patrones opuestos.
Captulo 135
Oday
Oday fue un descomunal bug que afect a los sistemas
operativos Windows XP y que permita a quien lo aprovechaba escalar privilegios y acceder como SYSTEM en su
ordenador (SYSTEM es la cuenta de Windows que ms
privilegios tiene, y que no pertenece a ningn usuario sino
al sistema). El bug ya fue arreglado, pero en su da poda
aprovecharse con un exploit llamado AT-EXPLOIT, con
un programa en batch especco o con el modo manual
echando mano del cmd.exe.
257
Captulo 136
Oset (informtica)
En informtica, un oset dentro de un array u otra
estructura de datos es un entero que indica la distancia
(desplazamiento) desde el inicio del objeto hasta un punto o elemento dado, presumiblemente dentro del mismo
objeto. El concepto de distancia es solamente vlido si
todos los elementos del objeto son del mismo tamao (tpicamente dados en bytes o palabras).
Por ejemplo, dado un array de caracteresAque contengaabcdef, se puede decir que el elemento que contiene
la letra ctiene un oset de 2 desde el comienzo de A.
En ingeniera informtica y programacin de bajo nivel
(como el lenguaje ensamblador), un oset normalmente
indica el nmero de posiciones de memoria sumadas a
una direccin base para conseguir una direccin absoluta especca. Con este signicado (que es el original) de
oset, slo se usa la unidad bsica de direccionamiento,
normalmente el byte de 8 bits, para especicar el tamao del oset. En este contexto se puede llamar a veces
direccin relativa.
136.2 Referencias
258
Captulo 137
OGNL
Object-Graph Navigation Language (OGNL), creado
por OGNL Technology, es un Lenguaje de Expresiones
de cdigo abierto para Java,el cual, mediante el uso de expresiones ms simples que el amplio espectro que soporta
Java, permite obtener y establecer propiedades (a travs
de mtodos ya denidos getProperty y setProperty similares a los presentes en todos los JavaBeans) y la ejecucin
de mtodos de clases Java.
137.1 Aplicaciones
Nombres de propiedades.
encabezado.texto
Llamadas a mtodos.
hashCode()
ndices de Array.
listeners[0]
Ejemplo:
name.toCharArray()[0].numericValue.toString()
Se pasa a String la propiedad namede la que se toma
el carcter de la posicin 0 y se obtiene su valor numrico
que se pasa a String nuevamente.
259
Captulo 138
OpenACS
OpenACS del ingls Open Architecture Community Sys- comenz a reescribir ACS en Java dando lugar a Red Hat
tem (Arquitectura Abierta para Sistemas de Comunida- CMS. La comunidad de OpenACS asumi mantenimiendes) es un kit de herramientas libre (de cdigo abierto) to del cdigo escrito en Tcl.
para el desarrollo rpido de aplicaciones web, con licencia GPL.
OpenACS proporciona:
Un gran conjunto de aplicaciones que pueden ser
usadas para desarrollar sitios web, siendo especialmente til para aquellos que son colaborativos.
Algunas de las aplicaciones ms importantes son
.LRN, dotFolio, WorkFlow, CMS, blogger, comercio electrnico, foros.
Un sosticado kit de herramientas que proporciona
un gran conjunto de APIs y servicios para el desarrollo rpido de nuevas aplicaciones.
Un modelo de datos que escribe la losofa de
orientacin a objetos desde SQL estndar y mtodos PL/SQL, haciendo elegante el soporte a distintas
bases de datos (actualmente PostgreSQL y Oracle).
Un sistema robusto con capacidad de soportar una
gran cantidad de trco sin una baja considerable de
desempeo gracias a ser un sistema multi-thread.
Un sistema de documentacin integrado que permite buscar fcilmente sobre el cdigo existente en el
sistema.
138.2 Historia
OpenACS era originalmente desarrollado con el ArsDigita Community System, teniendo como base de datos
Oracle. ACS fue la razn por la que AOLServer fue liberado. OpenACS surgi como un fork para soportar ACS
con PostgreSQL. Despus RedHat compr ArsDigita y
260
openacs.org
Captulo 139
261
Captulo 140
Operador
rs en un espacio de Banach. En este espacio, existe una
norma y podemos denir una esfera de radio unidad. Se
llama operador lineal acotado al operador lineal que est
acotado en esta esfera. Los operadores lineales acotados
entre dos espacios de Banach forman a su vez un espacio
de Banach cuyo estudio es bastante interesante. Una extensin de la derivada real a los operadores es la derivada
de Frechet que es un operador lineal acotado.
No todos los operadores lineales interesantes son acotados: hay muchos ejemplos de operadores importantes en
mecnica cuntica que no son acotados.
El ejemplo ms tpico de operador lineal no acotado es
la derivada -considerada como una aplicacin entre dos
d
espacios de funciones reales-. El operador diferencial, dx
, acta sobre la funcin f (x) que se escribe a su derecha,
produciendo una nueva funcin derivada: f (x)
Si un operador est denido entre dos espacios vectoriales de funciones, acta transformando unas funciones en
otras.
140.3.2
Operadores de orden
Los operadores de orden establecen o verican clasicaciones entre nmeros (A < B, A > B, etc.) u otro tipo de
valores (caracteres, cadenas, ...).
Todo tipo de dato susceptible de
ser ordenado por cualquier criterio puede ser comparado con estos
operadores; como los anteriores devuelven un valor de verdad en funcin del resultado que tenga la comparacin en cada caso.
A > B Devuelve V si A es estrictamente mayor que B y F
en caso contrario
A < B Devuelve V si A es estrictamente menor que B y F
en caso contrario
A B Devuelve V si A es mayor o igual que B y F en caso
contrario
A B Devuelve V si A es menor o igual que B y F en caso
contrario
263
lgicos nos proporcionan un resultado a partir de que se
cumpla o no una cierta condicin. Esto genera una serie de valores que, en los casos ms sencillos, pueden ser
parametrizados con los valores numricos 0 y 1, como se
puede apreciar en los ejemplos de abajo. La combinacin
de dos o ms operadores lgicos conforma una funcin
lgica.
Los ms sencillos son (ntese su relacin con los
operadores relacionales):
Operador NO-lgico: 'A' signica todo lo
que no es A'
Operador Y-lgico: 'A B' signica 'A y B a
la vez'; resultando FALSO (0) si no se cumple
y VERDADERO (1) si lo hace.
Operador O-lgico: 'A B' signica 'O bien
A, o bien B, o bien los dos'; resultando FALSO
(0) si no se dan ni A ni B y VERDADERO (1)
si se da alguno de los dos o los dos a la vez.
Operador =: 'A = B' signica 'A debe ser igual
a B'; resultando FALSO (0) si esto no es as y
VERDADERO (1) en caso contrario.
Operador <: 'A < B' signica 'A debe ser menor que B'; resultando FALSO (0) si no se satisface y VERDADERO (1) en caso contrario.
Operador >: 'A > B' signica 'A debe ser mayor que B'; resultando FALSO (0) si no se satisface y VERDADERO (1) en caso contrario.
Los operadores ms complejos se construyen a
partir de los anteriores (podra incluirse alguno
ms) y ya entran dentro de lo que sera una
funcin lgica. Un ejemplo muy utilizado sera
'SI(condicin;A;B)' ('IF condicin THEN A ELSE
B' en la mayora de los lenguajes de programacin)
cuyo resultado sera A si se satisface la 'condicin' o
B en caso contrario.
Otros operadores relacionales menos usuales son los Otras operaciones, derivadas de las operaciones aritllamados operadores geomtricos: paralelismo (A || mticas usuales son la potenciacin, radicacin y
B), perpendicularidad y otros
logaritmacin.
140.3.3
Operadores lgicos
264
Operador diferencial
Operador hermtico
Operador cuntico
Operador lineal
Operador norma
Operador nabla
Gradiente
Divergencia
Rotacional
Laplaciano
Transformada integral
Sumatorio
Productorio
140.6 Referencias
[1] Domingo Agustn Vzquez. Diccionario de ciencias.
Captulo 141
Operando
En matemticas, un operando es una de las entradas (ar- 141.2.2 Informtica
gumentos o variables) de un operador. Por ejemplo, en
Expresiones y Atribuies Escales - Fortran en
UFPEL. Acessado en 23 de febrero de 2008.
3+6=9
" + " es el operador, " 3 " y " 6 " son los operandos. Si
el operando va acompaado de un signo menos (" ") se
considera que es un operando negativo, en caso contrario
se considera operando positivo o simplemente operando.
La cantidad de operandos de un operador es denominada
aridad. Basndose en la aridad, los operadores son clasicados como unarios, binarios, ternarios etc.
141.1 En informtica
En los lenguajes de programacin de computadora, las
deniciones de operador y operando son casi las mismas
que las de matemticas.
Adicionalmente, en lenguaje mquina, un operando es
un valor (un argumento) con el cual la instruccin, nombrada por un mnemnico, opera. El operando puede ser
un registro, una direccin de memoria, una constante literal, o una etiqueta. Un ejemplo simple en la arquitectura
PC es
MOV DS, AX
donde el valor en el operando del registro AX debe ser
movido al registro DS. Dependiendo de la instruccin,
puede haber cero, uno, dos o ms operandos.
Matemtica
Captulo 142
Paquetes en PL/SQL
Los paquetes en PL/SQL tienen el objetivo de agrupar procedimientos y funciones de forma lgica. De esta manera, se consigue agrupar en un nico objeto, toda la casustica asociada a un determinado tipo de tarea.
Por ejemplo, si tenemos un conjunto de procedimientos y
funciones para realizar clculos matemticos complejos,
los podemos poner en un paquete.
142.1 Especicacin
Es obligatorio en la creacin de un paquete (PACKAGE).
Se declaran todos los subprogramas pblicos. Lo lgico
es declarar en esta seccin aquellos procedimientos o funciones que actan como interfaz. Tambin se declaran las
variables o constantes que se quieren tratar como globales
y que se puedan cambiar o referenciar fuera del paquete.
Llamada interna
Se pone el nombre del subprograma y entre parntesis los parmetros que se deben pasar.
Por ej. para llamar a la funcin Multiplica(real r1, real r2)" desde la funcin CalculaBenecios, se pondra r3:= Multiplica(2.5,3.5)"
Llamada externa
Hay que preceder el nombre del paquete al
nombre del procedimiento o funcin. Adems,
el subprograma llamado debe ser pblico para
que pueda ser referenciado.
Por ejemplo para llamar a la funcin Multiplica
que se encuentra en el paqueteOperacionesMatematicasdesde un procedimiento externo
al paquete sera r3:= OperacionesMatematicas.Multiplica(2.5,3.5)"
Para eliminar un paquete de la base de datos tanto la esCREATE [OR REPLACE] PACKAGE nom- pecicacin como el cuerpo:
bre_paquete IS | AS declaraciones de variables,
DROP PACKAGE nombre_paquete
cursores... subprogramas en PLSQL END nombre_paquete
Oracle proporciona algunos paquetes que permiten la realizacin de distintas tareas muy comunes al desarrollar o
administrar la base de datos. Entre estos paquetes se pueden destacar:
142.2 Cuerpo
En el cuerpo es donde se denen los procedimientos y
funciones pblicos y privados.
La sintaxis sera:
CREATE [OR REPLACE] PACKAGE BODY
nombre_paquete IS | AS declaraciones de variables, cur266
142.2. CUERPO
UTL_FILE: aade capacidades de entrada/salida a
cheros.
267
Captulo 143
Pascal Casing
Pascal Casing es un procedimiento de programacin comn en el lenguaje Java y .Net. Es parecido al Camel casing con la excepcin que la letra inicial del identicador
debe estar en mayscula.
La nomenclatura est compuesta por tantas palabras como sean necesarias. La primera letra de cada una de las
palabras ir siempre en maysculas. Tanto para Pascal
Casing como para Camel casing, se obvia el uso de artculos. Un uso correcto de nomenclatura sera WriteInformation y no WriteTheInformation, WriteInformation y
no writeInformation o Writeinformation.
268
Captulo 144
Patch (Unix)
Patch es un comando de Unix y Unix-like que actualiza
cheros de texto de acuerdo a las instrucciones contenidas en un archivo separado, llamado archivo de parche.
Este archivo (denominado patch) es un archivo de texto
que consiste en una lista de las diferencias entre cheros y
se produce mediante la ejecucin del comando di comparando con el chero original y actualizndolo con los
argumentos de di.
El programa original fue escrito por Larry Wall (creador
del lenguaje de programacin Perl) en mayo de 1985. Una
nueva versin del programa es parte del proyecto GNU y
es mantenido por la FSF.
269
Captulo 145
Phrogram
Phrogram (anteriormente Kid's Programming Language, or KPL) es un lenguaje de programacin diseado para ser inteligible y fcil para los nios. La versin
1 (KPL) fue nalizada en Agosto de 2005, y la versin 2
(Phrogram) es ahora mismo la versin ms actual.
El principal objetivo de The Phrogram Company es distribuir un simple pero poderoso grupo de herramientas
145.1 Detalles tcnicos
que hacen del aprender a programar algo fcil y divertido. Phrogram (KPL) se ha convertido en una gran herraPhrogram es un lenguaje de programacin y un IDE que mienta para los programadores novatos por la facilidad
guarda cierta similitud con Visual Basic. El lenguaje so- para crear programas multi-media con sprites, msica,
porta un nmero de datos complejos, incluyendo estruc- efectos sonoros, animaciones y algunas opciones ms.
turas.
El objetivo secundario de Phrogram es proveer un lenguaje moderno con algunas opciones de lenguajes avanzados como C++, Java, Visual Basic y C#, y la sintaxis
de Visual Basic, para hacer la transicin entre estos lenguajes lo ms sencilla posible. Phrogram (KPL) soporta programacin orientada a objetos (OOP) y permite la
denicin de clases y de sus propiedades y mtodos asoUn programa de Phrogram es una coleccin de bloques
ciados, los cual provee a los programadores principiantes
anidados. En el nivel mayor hay un bloque Program, y
una introduccin a la programacin OOP.
dentro de este, otros bloques Method y Function son denidos. Las funciones y los mtodos (functions y methods) Para lograr estos objetivos, los desarrolladores de Phroson ambos un conjunto de acciones reusables, pero exis- gram construyeron la Versin 2 sobre el reciente .NET
te una diferencia: las funciones devuleven un valor y los Framework Version 2 (Noviembre de 2005). Phrogram
mtodos no tienen esa obligacin. Las estructuras (struc- intenta ser completamente compatible con otros lenguatures) son declaradas fuera de mtodos y funciones. Las jes que usen.NET Framework, por lo que esasruntime
variables deben ser declaradas en el momento de decla- librariespueden ser redistribuidas donde o a quien se
quiera.
racin.
Phrogram depende de Microsoft .NET Framework y provee muchas funciones y mtodos para interactuar con esa
plataforma. Por esto, Phrogram actualmente slo puede
usarse en la serie de sistemas operativos Microsoft Windows que soporten.NET Framework.
271
Captulo 146
Plataforma de desarrollo
En informtica, una plataforma de desarrollo es el
ambiente o entorno de software comn en el cual se
desenvuelve la programacin de un grupo denido de
aplicaciones. Comnmente se encuentra relacionada directamente a un sistema operativo; sin embargo, tambin
es posible encontrarla ligada a una familia de lenguajes de
programacin o a una interfaz de programacin de aplicaciones (API, por las siglas en ingls: Application Programming Interface). Cabe recordar que funciona como
sistema plataforma o multiusuario.
272
Captulo 147
147.5 Ventajas
1. Ahorro en gastos de libros, libretas y material para
escribir
2. Se disminuyen los tiempos de transporte de los usuarios que utilizan las plataformas virtuales didcticas
3. Posibilidad de utilizar los dispositivos digitales para
acceder a las plataformas
4. Uso de diferentes recursos didcticos, tales como:
videos, audios, libros electrnicos, pruebas digitales, que permitirn realizar un seguimiento a los
alumnos que utilizan las plataformas.
147.7 Bibliografa
274
Captulo 148
Polling
Polling en computacin hace referencia a una operacin 148.2 Polling del registro de Winde consulta constante, generalmente hacia un dispositivo
dows
de hardware, para crear una actividad sincrnica sin el
uso de interrupciones, aunque tambin puede suceder lo
En cualquier versin del sistema operativo Microsoft
mismo para recursos de software.
Windows desde la versin 3.11 podemos encontrar apliEsto, aplicado a programacin puede ser visto como una caciones pobremente desarrolladas que consultan repepobre implementacin en bsqueda del sincronismo de titivamente llaves del registro de Windows en busca de
procesos. Por ejemplo, se podra consultar constantemen- cambios, degradando el rendimiento general del sistema.
te un directorio del sistema de archivos para indicarle al En versiones antiguas este modelo de implementacin era
usuario cuando lleguen nuevos contenidos a la misma sin la nica alternativa, pero ahora en versiones modernas de
embargo estas constantes consultas degradaran el rendi- Windows desde NT 3.1 o Windows 98 en adelante exismiento del equipo y probablemente sera mejor imple- te la funcin RegNotifyChangeKeyValue* [1] dentro de
mentar la solucin por otro medio, en particular, pidin- la biblioteca Advapi32, la cual forma parte de la API de
dole al sistema operativo que informe de transferencias a Windows. Esta funcin permite hacer una especie deinese directorio en particular.
terrupcin de softwarela cual nos avisar ante cambios
en el contenido de una clave de registro sin tener que consultarla directamente ni peridicamente.
A pesar de la funcin comentada anteriormente hay aplicaciones que siguen haciendo un mal uso de los recursos
del equipo e incluso programas de Microsoft (como MSN
Desktop Search) pobremente desarrollados que producen
polling.* [2]
148.1 Historia
148.3 Soluciones para el polling
En los primeros sistemas de computacin cuando una
aplicacin necesitaba leer la pulsacin de una tecla, interrogaba continuamente al teclado esperando hasta que la
tecla fuera presionada. Debido a la ausencia de sistemas
multitarea, mientras se esperaba una tecla, no se podan
ejecutar otras tareas.
La solucin a este problema apareci con la llamada
interrupcin de teclado en donde el controlador del dispositivo, en este caso el teclado, es quien genera una
interrupcin slo cuando el dispositivo est listo para
transferir datos. La CPU maneja estas interrupciones que
el sistema operativo sabe como priorizar y obtener informacin de ellas.
Estas mltiples consultas pueden referirse a uso excesivo
de recursos de red, registros o cheros, aunque tambin
pueden relacionarse con actividades de ms bajo nivel del
equipo.
En sistemas de cdigo abierto la solucin simplemente abarca la correccin sobre el cdigo de las funciones
que generen el problema, empleando funciones como las
nombradas anteriormente o en su defecto las apropiadas
segn la plataforma utilizada.
El problema se torna ms interesante en aplicaciones de
cdigo cerrado, en este caso la solucin generalmente est
en manos de la empresa desarrolladora, sin embargo, es
posible aplicar prcticas de ingeniera inversa para lograr
cambiar el comportamiento que causa el problema.
148.4 Referencias
275
276
Captulo 149
Poltergeist (informtica)
Anlisis y diseo de modelo inestables.
En Programacin orientada a objetos el antipatrn de diseo poltergeist es una clase de objetos de corta duracin, normalmente sin estado, que se utiliza para realizar la inicializacin o para invocar a los mtodos de otras
clases. La denicin original es de Michael Akroyd en la
Object World West Conference de 1996:
Como un poltergeist que aparece y desaparece
misteriosamente, lo mismo ocurre con el objeto de breve duracin. Como consecuencia, el
cdigo es ms difcil de mantener y hay un desperdicio de recursos innecesario. La causa habitual de este antipatrn es un pobre diseo de
objetos.
149.2 Solucin
Eliminar clases externas, que no tengan relevancia,
clases transitorias y operacionales (Init, Manager,
Controller, etc).
Las clases poltergeist se pueden identicar por su nombre. A menudo se llaman manager_, controller_
, start_process, etctera.
A veces, las clases poltergeist demuestran la necesidad de
una arquitectura ms compleja. Por ejemplo, un poltergeist surge si el mismo mtodo acta como el cliente y
el invocador en un patrn de comando, y el programador
separa las dos fases. Sin embargo, esta arquitectura ms
compleja puede que nunca llegue a materializarse.
No se debe confundir con objetos de larga duracin que
almacenan el estado de un patrn como es el caso de
Modelo-vista-controlador, que traspasa el ujo de informacin entre las tres clases principales.
149.1 Consecuencias
Proliferacin de clases.
Clases con poca duracin, sin estados y pocas responsabilidades.
Complejidad excesiva. Difcultad de comprender la
arquitectura del programa, las asociaciones de clases
y las llamadas que se realizan entre ellas.
277
Captulo 150
Portabilidad
La portabilidad (en ingls portability) es uno de los conceptos clave en la programacin de alto nivel.
Se dene como la caracterstica que posee un software
para ejecutarse en diferentes plataformas, el cdigo fuente del software es capaz de reutilizarse en vez de crearse
un nuevo cdigo cuando el software pasa de una plataforma a otra (ver la nota, a continuacin de este prrafo). A
mayor portabilidad menor es la dependencia del software
con respecto a la plataforma.
150.2 Referencias
(Nota: la portabilidad no tiene relacin directa con el cdigo fuente de una aplicacin y, por eso, tampoco tiene
relacin directa con la reutilizacin del mismo. En cambio, la portabilidad se reere exclusivamente a la propiedad que posee un software que le permite ser ejecutado
en diferentes plataformas y/o sistemas operativos. De este modo, si un determinado software compilado pudiere ser ejecutado en cualquier sistema operativo, diramos
que ese software es 100% portable. ste es el ncleo del
concepto de portabilidad. En este sentido, la armacin
precedente: el cdigo fuente del software es capaz de
reutilizarse en vez de crearse un nuevo cdigo cuando el
software pasa de una plataforma a otra, tiene como supuesto errneo que tenemos acceso al cdigo fuente, el
cual podra reutilizarse (como es la meta que buscan los
diseadores de los lenguajes cuyos cdigos corren sobre
mquinas virtuales, como es el caso de Java y la familia
DOT NET). Esto es incorrecto: la portabilidad es un concepto que se reere exclusivamente a la relacin software
<-> plataforma).
El prerrequisito para la portabilidad es la abstraccin generalizada entre la aplicacin lgica y las interfaces del
sistema. Cuando un software se puede compilar en diversas plataformas (x86, IA64, amd64, etc.), se dice que es
multiplataforma. Esta caracterstica es importante para
el desarrollo de reduccin costos, cuando se quiere hacer
una misma aplicacin.
En algunos casos el software es independientede
la plataforma y puede ejecutarse en plataformas diversas sin necesidad de ser compilado especcamente para cada una de ellas, a este tipo de software se le llama
interpretado, donde un "intrprete" traduce (propiamente
interpreta) las instrucciones en tiempo de ejecucin para
que sean entendidas por diferentes plataformas.
278
Diccionario de Informtica. Portabilidad. Pgina 254. Editorial Cultural. 1999. Madrid, Espaa.
ISBN 84-8055-256-5
Mooney (1997). "Bringing Portability to the Software Process" (PDF). West Virginia University. Dept.
of Statistics and Computer Science. Revisado el 17
de marzo de 2008.
Garey (2007),Software Portability: Weighing Options, Making Choices, The CPA Journal 77(11):
3
Captulo 151
Postcondicin
En programacin, una postcondicin es una condicin o
predicado lgico que siempre debe cumplirse justamente despus de la ejecucin de una seccin de cdigo o
de una operacin (especicacin formal). Las postcondiciones se prueban a veces mediante aserciones incluidas
en el cdigo. A menudo, las postcondiciones se incluyen
simplemente en la documentacin de la correspondiente
seccin de cdigo.
Por ejemplo: el resultado de un factorial es siempre un
entero mayor o igual que 1. De este modo un programa
que calcula el factorial de un nmero dado tendra como
postcondiciones que el resultado debe ser un entero y que
ste debe ser mayor o igual que 1.
279
Captulo 152
Pragma
La palabra griega pragma (), pragmata en plural (), que signica: 'lo que ha sido hecho', un
acto, un hecho, y cuyas connotaciones y los sentidos ms
ampliados cubren una riqueza de sentidos a este signicado, incluso: accin, asunto, negocio, circunstancia, preocupacin, conveniencia, innovacin, trabajo, necesidad,
objeto, objetivo, ocupacin, ocina, papel, o trabajo de
vida, asuntos privados, cosa, problema.
Tambin el pragma es un tipo de Arquetipos amatorios.
152.1 Programacin
Los pragmas son sentencias especiales que controlan el
comportamiento del compilador, es decir son directivas
de compilador. Tienen esta forma estndar:
pragma Nombre (lista_de_argumentos);
La lista_de_argumentos es opcional, no todos los pragmas
necesitan argumentos.
280
Captulo 153
Precondicin
Una precondicin es una condicin que ha de satisfacerse
justo antes del comienzo de la ejecucin de una porcin
de cdigo (normalmente un subprograma o mtodo).
Por ejemplo: el factorial de un nmero slo est denido
para valores positivos (o cero). Por tanto, un subprograma
que calcule el factorial de un nmero exigir que dicho
nmero sea mayor o igual que cero.
Existen lenguajes de programacin que incorporan construcciones sintcticas para reejar las precondiciones de
sus subprogramas o mtodos. El clculo del factorial en
el lenguaje Eiel, por ejemplo, quedara as:
factorial(n: INTEGER): INTEGER -- Calcula el factorial
de un nmero. No est denido para cantidades negativas.
require no_negativo: n >= 0 do if n = 0 then Result := 1
else Result := n * factorial(n - 1) end end
En donde la palabra require introduce la precondicin del
mtodo factorial.
281
Captulo 154
154.1 Ejemplo
Ejemplo en Ada donde el proceso Cola acepta un rendevouz de nombre agregar:
task type Cola is entry agregar(n: in Integer); entry eliminar(x: out Integer); ... end Cola -- Implementacin de
Cola task body Cola is begin ... accept agregar(n: in Integer) do ... -- Cuerpo de la operacin end agregar; ...
end Cola; --LLamada desde otro proceso: begin ... Cola.agregar(n) end
282
Captulo 155
Proceso (informtica)
Este artculo se reere al proceso
informtico, para otros usos vase
Proceso.
Un proceso se rige en pequeas porciones, conocidas como pginas, y cada proceso tiene su propia tabla de paginacin, fungiendo como una optimizacin del sistema
operativo ante los fallos de pgina.
En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La diferencia estriba en que un
proceso solamente puede crear hilos para s mismo y en
que dichos hilos comparten toda la memoria reservada
para el proceso.
Los procesos pueden ser cooperativos o independientes.
Dos o ms procesos pueden cooperar mediante seales
de forma que uno obliga a detenerse a los otros hasta que
reciban una seal para continuar.
Otra informacin que permite al sistema operativo La sincronizacin explcita entre procesos es un caso parsu planicacin.
ticular del estado bloqueado. En este caso, el suceso
283
284
que permite desbloquear un proceso no es una operacin Salida normal, sta se presenta cuando el proceso termide entrada/salida, sino una seal generada a propsito por na de forma voluntaria, por ejemplo, cuando se cierra en
el programador desde otro proceso.
navegador web o el procesador de textos.
Hay cuatro eventos principales que provocan la creacin Salida por error, sta se presenta cuando el proceso tiede procesos:
ne que salir debido a insuciencia de datos, por ejemplo,
cuando solicita un archivo que no existe.
El arranque del sistema.
155.7. BIBLIOGRAFA
transicin 3 se realiza cuando todos los procesos han ocupado tiempo del procesador y debe retomarse el primer
proceso.
La transicin 4 ocurre cuando se produce un evento externo por el que un proceso estaba en espera, por ejemplos, introducir datos desde la terminal. Si no hay otro
proceso en ejecucin en ese instante, la transicin 3 se
activa y el proceso comienza a ejecutarse; tambin podra pasar al estado de listoy esperar un momento
para iniciar la ejecucin.
155.6 Referencias
[1] Stallings 5 edicin pag. 109
155.7 Bibliografa
Tanenbaum, Andrew S. (2009). 2 Procesos e hilos. Sistemas operativos modernos (3 edicin). Prentice Hall. p.
1076.
285
Captulo 156
156.1 Generalidades
La gran cantidad de organizaciones de desarrollo de software implementan metodologas para el proceso de desarrollo. Muchas de estas organizaciones pertenecen a la industria armamentstica, que en los Estados Unidos necesita un certicado basado en su modelo de procesos para
poder obtener un contrato.
156.2.1 Planicacin
El estndar internacional que regula el mtodo de seleccin, implementacin y monitoreo del ciclo de vida del La importante tarea a la hora de crear un producto de
software es obtener los requisitos o el anlisis de los resoftware es ISO 12207.
quisitos. Los clientes suelen tener una idea ms bien absDurante dcadas se ha perseguido la meta de encontrar
tracta del resultado nal, pero no sobre las funciones que
procesos reproducibles y predecibles que mejoren la prodebera cumplir el software.
ductividad y la calidad. Algunas de estas soluciones intentan sistematizar o formalizar la aparentemente desorgani- Una vez que se hayan recopilado los requisitos del cliente,
zada tarea de desarrollar software. Otros aplican tcnicas se debe realizar un anlisis del mbito del desarrollo. Este
de gestin de proyectos para la creacin del software. Sin documento se conoce como especicacin funcional.
una gestin del proyecto, los proyectos de software corren el riesgo de demorarse o consumir un presupuesto
mayor que el planeado. Dada la cantidad de proyectos 156.2.2 Implementacin, pruebas y documentacin
de software que no cumplen sus metas en trminos de
funcionalidad, costes o tiempo de entrega, una gestin de
La implementacin es parte del proceso en el que los
proyectos efectiva es algo que a menudo falta.
Algunas organizaciones crean un grupo propio (Software ingenieros de software programan el cdigo para el proEngineering Process Group, abreviado SEPG) encargado yecto.
de mejorar los procesos para el desarrollo de software en Las pruebas de software son parte esencial del proceso
de desarrollo del software. Esta parte del proceso tiene la
la organizacin.
286
287
156.2.3
Despliegue y mantenimiento
El despliegue comienza cuando el cdigo ha sido sucientemente probado, ha sido aprobado para su liberacin y
ha sido distribuido en el entorno de produccin.
Entrenamiento y soporte para el software es de suma importancia y algo que muchos desarrolladores de software descuidan. Los usuarios, por naturaleza, se oponen al
cambio porque conlleva una cierta inseguridad, es por Si se aplica este paradigma, unos de los principales proello que es fundamental instruir de forma adecuada a los blemas , es que las etapas realizadas no son autnomas de
futuros usuarios del software.
las siguientes, creando una dependencia estructural y en
El mantenimiento o mejora del software de un software el acaso de un error atrasara todo el proyecto. Se tiene
con problemas recientemente desplegado, puede requerir que tener pautas bien denidas, y que no se incurra a moms tiempo que el desarrollo inicial del software. Es po- dicacin porque implicara en que el software no cumpla
que el cliente no se
sible que haya que incorporar cdigo que no se ajusta al con su ciclo de vida. Tener en cuenta
*
vea
afectado
por
la
impaciencia.
[3]
diseo original con el objetivo de solucionar un problema
o ampliar la funcionalidad para un cliente. Si los costes
de mantenimiento son muy elevados puede que sea oportuno redisear el sistema para poder contener los costes
de mantenimiento.
2. Paradigma Orientado a Objetos: Estos modelos se basan en la Programacin orientada a objetos; por lo tanto,
se reere al concepto de clase, el anlisis de requisitos y el
diseo. El modelo o paradigma orientado a objetos posee
dos caractersticas principales, las cuales son:
Permite la re-utilizacin de software.
288
7. Mantenimiento
Siguiendo el modelo de cascada de forma estricta, slo
cuando se naliza una fase, comienza la otra. En ocasiones se realiza una revisin antes de iniciar la siguiente
fase, lo que permite la posibilidad de cambios (lo que
puede incluir un proceso de control formal de cambio).
Las revisiones tambin se utilizan para asegurar que la
fase anterior ha sido totalmente nalizada; los criterios
para completar una fase se conocen frecuentemente con
el trmino inglsgate(puerta). Este modelo desaconseja revisitar y revisar fases que ya se han completado.
Esta falta de exibilidad en un modelo de cascada puro
ha sido fuente de crtica de los defensores de modelos
ms exibles.
156.3.2
Modelo de espiral
La principal caracterstica del modelo en espiral es la gestin de riesgos de forma peridica en el ciclo de desarrollo. Este modelo fue creado en 1988 por Barry Boehm,
combinando algunos aspectos clave de las metodologas
del modelo de cascada y del desarrollo rpido de aplicaciones, pero dando nfasis en un rea que para muchos no
jug el papel que requiere en otros modelos: un anlisis
iterativo y concienzudo de los riesgos, especialmente en
el caso de sistema complejos de gran escala.
2. Si la implementacin del riesgo de anlisis afectar de forma esencial los benecios del proyecto, no
debera utilizarse este modelo.
3. Los desarrolladores de software han de buscar de
forma explcita riesgos y analizarlos de forma exhaustiva para que este modelo funcione.
La primera fase es la bsqueda de un plan para conseguir
los objetivos con las limitaciones del proyecto para as
buscar y eliminar todos los riesgos potenciales por medio
de un cuidadoso anlisis, y si fuera necesario incluyendo
la fabricacin de un prototipo. Si es imposible descartar
algunos riesgos, el cliente ha de decidir si es conveniente terminar el proyecto o seguir adelante ignorando los
riesgos. Por ltimo, se evalan los resultados y se inicia
el diseo de la siguiente fase.
La espiral se visualiza como un proceso que pasa a travs de algunas interaciones con el diagrama de los cuatro 156.3.4
cuadrantes representativos de las siguientes actividades:
Desarrollo gil
El desarrollo gil de software utiliza un desarrollo iterativo como base para abogar por un punto de vista ms ligero y ms centrado en las personas que en el caso de las
soluciones tradicionales. Los procesos giles utilizan retroalimentacin en lugar de planicacin, como principal
mecanismo de control. La retroalimentacin se canaliza
2. Anlisis de riesgos: una evaluacin analtica de pro- por medio de pruebas peridicas y frecuentes versiones
gramas seleccionados, para evaluar como identicar del software.
y eliminar el riesgo;
Hay muchas variantes de los procesos giles:
3. la implementacin del proyecto: implementacin del
desarrollo del software y su pertinente vericacin;
En el caso de la programacin extrema (XP), las fa1. crear planes con el propsito de identicar los objetivos del software, seleccionados para implementar
el programa y claricar las restricciones en el desarrollo del software;
289
todas las pruebas se superan sin errores, y los desa- 156.4 Modelos de mejora de procerrolladores ya no sabran como mejorar el conjunsos
to de pruebas necesario. El diseo y la arquitectura
emergen a partir de la refactorizacin del cdigo, y
se da despus de programar. El diseo lo realizan Capability Maturity Model Integration El Capability
Maturity Model Integration (CMMI), en espaol
los propios desarrolladores del cdigo. El sistema,
Integracin
de Modelos de Madurez de Capaciincompleto, pero funcional se despliega para su dedades
es
uno
de los modelos lderes basados en
mostracin a los usuarios (al menos uno de los cuamejores
prcticas.
Son evaluaciones independientes
les pertenece al equipo de desarrollo). Llegado eslas
que
conrman
el grado con el que una organite punto, los profesionales comienzan a escribir las
zacin
siguen
sus
propios
procesos, que no evala
pruebas para la siguiente parte del sistema de ms
la
calidad
de
los
procesos
o del software que se
importancia.
produce. CMMI ha reemplazado a CMM y tiene
un mbito global, no slo en procesos destinados al
desarrollo del software.
156.3.5
Codicacin y correccin
ISO 9000 ISO 9000 describe estndares para un proceso organizado formalmente para resultar en un producto y los mtodos de gestin y monitoreo del progreso. Aunque este estndar se cre inicialmente para el sector de produccin, los estndares de ISO
9000 tambin se han aplicado al desarrollo del software. Al igual que CMMI, que una organizacin est
certicada con el ISO 9000 no garantiza la calidad
del resultado nal, slo conrma que se ha seguido
los procesos establecidos.
El desarrollo de codicacin y correccin (en inglsCode and x) es, ms que una estrategia predeterminada,
el resultado de una falta de experiencia o presin que se
ejerce sobre los desarrolladores para cumplir con una fecha de entrega.* [7] Sin dedicar tiempo de forma explcita
para el diseo, los programadores comienzan de forma inmediata a producir cdigo. Antes o despus comienza la
fase de pruebas de software (a menudo de forma tarda)
y los inevitables errores que se encuentran han de eliminarse antes de poder entregar el software.
ISO 15504 ISO 15504, tambin conocido como Software Process Improvement Capability Determination
(SPICE), en espaol Determinacin de la Capacidad de Mejora del Proceso de Software es un marco para la evaluacin de procesos de software. Este
156.3.6 Orientado a la Reutilizacin
estndar tiene como objetivo un modelo claro para poder comparar procesos. SPICE se utiliza como
en el caso de CMMI. Modela procesos para gestioLa reutilizacin de software es un proceso donde se recunar, controlar, guiar y monitorear el desarrollo del
rre al uso de activos de software en las especicaciones de
software. Este modelo se utiliza entonces para meanlisis, diseos, implementacin y pruebas de una aplidir lo que una organizacin o proyecto hace durante
cacin o sistemas de software.* [8]
el desarrollo del software. Esta informacin se anaLa reutilizacin tiene ciertos Indicadores por ejemplo:
liza para identicar puntos dbiles y denir acciones
para subsanarlos. Tambin identica puntos fuertes
1. Entre el 40% y 60% de una aplicacin es re-utilizable
que pueden adoptarse en el resto de la organizacin.
en otra.
2. Aproximadamente el 60% de una aplicacin administrativa es re-utilizable.
3. Aproximadamente el 75% de las funciones son comunes a ms de un programa.
Los mtodos formales son soluciones matemticas pa4. Solo el 15% del cdigo encontrado en muchos sistemas ra resolver problemas de software y hardware a nivel de
es nico y novedoso a una aplicacin especica.
requisitos, especicacin y diseo. Ejemplos de mtoEl rango general de uso recurrente esta entre el 15% y dos formales incluyen el Mtodo B, la red de Petri, la
demostracin automtica de teoremas, RAISE y el VDM.
85%.* [9]
La reutilizacin tiene Principios como la existencia de Hay varias notaciones de especicaciones formales, taparecidos en distintos sistemas de un mismo dominio, les como el lenguaje Z. Ms generalmente, se puede utidonde el software puede representarse como una com- lizar la teora de autmatas para aumentar y validar el
binacin de mdulos y los sistemas nuevos se puede ca- comportamiento de la aplicacin diseando un sistema
racterizar por diferencias respecto a los antiguos siste- de autmata nito.
mas.* [10]
290
[7] McConnell, Steve. 7: Lifecycle Planning. Rapid Development. Redmond, Washington: Microsoft Press. p. 140.
[8] J.Sametinger.Software engineering with reusable components. Springer Verlag, Agosto 1997
[9] Jonas A. Montilva, Nelson Arape y Juan Andres Colmenares. (14 de noviembre de2003). Desarrollo de software basado en componentes. Consultado el 2 de abril de
2014.
156.7 Referencias
[1]
[2] [https://owned030.blogspot.com/
[3]
[4] Ingeniera de software
[5] Ingeniera de software
[6] ieeecomputersociety.org
Captulo 157
Programa informtico
den ejecutar con la ayuda de un intrprete, o pueden ser
empotrados directamente en hardware.
De acuerdo a sus funciones, los programas informticos se clasican en software de sistema y software de aplicacin. En las computadoras de 2015, al hecho de ejecutar varios programas de forma simultnea y eciente, se
lo conoce como multitarea.
157.1 Programacin
La programacin de computadoras es el proceso iterativo de escribir o editar cdigo fuente. Dicha edicin de
cdigo fuente implica probar, analizar y perfeccionar, y,
a veces, coordinar con otros programadores, en el caso
de un programa desarrollado en conjunto. Una persona
que practica esta tcnica se le conoce como programador
de computadoras, desarrollador de software, o codicaUn programa informtico escrito en un estilo orientado a objetos. dor. El proceso, a veces a largo plazo, de programacin de
computadoras normalmente se lo conoce como desarrollo
Un programa informtico o programa de computado- de software. El trmino ingeniera de software se est
ra es una secuencia de instrucciones, escritas para rea- convirtiendo en muy popular, ya que esta actividad es vislizar una tarea especca en una computadora.* [1] Es- ta como una disciplina de ingeniera.
te dispositivo requiere programas para funcionar, por lo
general, ejecutando las instrucciones del programa en un
procesador central.* [2] El programa tiene un formato eje- 157.1.1 Paradigmas
cutable que la computadora puede utilizar directamente para ejecutar las instrucciones. El mismo programa Los programas de ordenador se pueden clasicar segn
en su formato de cdigo fuente legible para humanos, el paradigma del lenguaje de programacin utilizado padel cual se derivan los programas ejecutables (por ejem- ra producirlos. Dos de los principales paradigmas son
plo, compilados), le permite a un programador estudiar y imperativos y declarativos.
desarrollar sus algoritmos. Una coleccin de programas Los programas escritos con un lenguaje imperativo espede computadora y datos relacionados se conoce como cican un algoritmo utilizando declaraciones, expresiosoftware.
nes e informes.* [4] Una declaracin asocia un nombre de
Generalmente, el cdigo fuente lo escriben profesionales
conocidos como programadores de computadora.* [3] Este cdigo se escribe en un lenguaje de programacin que
sigue uno de los siguientes dos paradigmas: imperativo
o declarativo, y que posteriormente puede ser convertido en un archivo ejecutable (usualmente llamado un programa ejecutable o un binario) por un compilador y ms
tarde ejecutado por una unidad central de procesamiento. Por otra parte, los programas de computadora se pue-
291
292
Los programas escritos en un lenguaje declarativo especican las propiedades que tienen o que deben cumplirse para la salida. No especican detalles expresados en
trminos de ujo de control de la mquina de ejecucin
pero s de las relaciones matemticas entre los objetos
declarados y sus propiedades. Los lenguajes funcionales
y lgicos son dos amplias categoras de lenguajes declarativos. El principio detrs de los lenguajes funcionales (como Haskell) es el de no permitir efectos secundarios, lo
que hace que sea ms fcil para razonar sobre los programas como si se tratasen de funciones matemticas.* [5] El
principio detrs de los lenguajes lgicos (como Prolog) es
denir el problema a ser resuelto - la meta - y dejar la solucin detallada al propio sistema Prolog.* [6] El objetivo
se dene proporcionando la lista de sub-objetivos. Luego,
cada subobjetivo se dene ms arriba, proporcionando la
lista de sus sub-objetivos, etc. Si la ruta de sub-objetivos
no encuentra una solucin, entonces ese subobjetivo se
retrocede y otra va se intenta sistemticamente.
representacin intermedia eciente para la ejecucin futura. BASIC, Perl y Python son ejemplos de programas de
computadora ejecutados inmediatamente. Por otra parte,
los programas de computadora de Java se compilan antes
de tiempo y se almacena como un cdigo independiente de la mquina llamado bytecode. Entonces, dicho bytecode es ejecutado a peticin de un intrprete llamado
mquina virtual.
La principal desventaja de los intrpretes es que los programas de computadora corren ms lento que cuando son
compilados. La interpretacin de cdigo resulta ms lenta
que la ejecucin de la versin compilada porque el intrprete debe decodicar cada declaracin cada vez que se
carga y luego realizar la accin deseada. Sin embargo, el
desarrollo de software puede ser ms rpido usando un intrprete porque la prueba es inmediata cuando se omite el
paso de la compilacin. Otra desventaja de los intrpretes
es que debe estar presente al menos uno en la computadora durante la ejecucin del programa de computadora. Por
La forma en que se crea el programa puede ser textual o el contrario, los programas de computadora compilados
visual. En un programa de lenguaje visual, los elementos no necesitan compilador presente durante la ejecucin.
en vez de ser textualmente especicados son manipulados No se requieren propiedades de un lenguaje de progragrcamente.
macin si se est compilado exclusivamente o interpre-
157.1.2
Compilado o interpretando
Un programa de computadora bajo la forma de lenguaje de programacin de computadoras legible por un humano, se lo llama cdigo fuente. Dicho cdigo fuente se puede convertir en una imagen ejecutable por un
compilador o ejecutarse inmediatamente con la ayuda de
un intrprete.
Cualquiera de los programas compilados o interpretados
pueden ser ejecutados en un proceso por lotes sin intervencin humana, pero los programas interpretados le permiten al usuario escribir comandos en una sesin interactiva. En este caso, los programas son los comandos separados, cuya ejecucin se produce secuencialmente, y por
lo tanto simultneamente. Cuando se utiliza un lenguaje
para dar rdenes a una aplicacin de software (como un
shell de Unix u otra interfaz de lnea de comandos), se le
llama un lenguaje de scripts.
293
o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente
al procesador. El procesador ejecuta (corre) el programa,
instruccin por instruccin hasta que termina. A un programa en ejecucin se le suele llamar tambin proceso.
Un programa puede terminar su ejecucin en forma normal o por causa de un error, dicho error puede ser de
software o de hardware.
157.2.1
157.2.2
Histricamente, los programas eran cargados al procesador central de forma manual mediante interruptores. Una
instruccin se representaba por una conguracin de estados de interruptores de abierto o cerrados. Despus de
establecer la conguracin, se ejecutaba un botn de ejecucin. Este proceso era repetitivo. Asimismo, los programas se cargaban manualmente mediante una cinta de
papel o tarjetas perforadas. Despus de que se cargaba el
294
Tambin se puede lograr la multitarea por medio del
hardware; las computadoras modernas que usan varios
procesadores o procesadores con varios ncleos pueden
correr muchos programas a la vez.* [12]
[4] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition (en ingls). Addison-Wesley. p. 75.
ISBN 0-201-56885-3.
[5] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition (en ingls). Addison-Wesley. p.
213. ISBN 0-201-56885-3.
[6] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition (en ingls). Addison-Wesley. p.
244. ISBN 0-201-56885-3.
157.5 Referencias
[1] Stair, Ralph M., et al. (2003). Principles of Information
Systems, Sixth Edition (en ingls). Thomson Learning, Inc.
p. 132. ISBN 0-619-06489-7.
[2] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition (en ingls). Addison-Wesley. p. 58.
ISBN 0-201-50480-4.
[3] Algorithms and Computer Programming (en ingls).
Consultado el 8 de setiembre de 2014.
157.6 Bibliografa
Knuth, Donald E. (1997). The Art of Computer Programming, Volume 1, 3rd Edition (en ingls). Boston: Addison-Wesley. ISBN 0-201-89683-4.
Knuth, Donald E. (1997). The Art of Computer Programming, Volume 2, 3rd Edition (en ingls). Boston: Addison-Wesley. ISBN 0-201-89684-2.
Knuth, Donald E. (1997). The Art of Computer Programming, Volume 3, 3rd Edition (en ingls). Boston: Addison-Wesley. ISBN 0-201-89685-0.
295
Captulo 158
Programa interactivo
Un programa interactivo aqul que necesita la
realimentacin contina del usuario para poder ejecutarse. Este concepto se enfrenta al de procesamiento por
lotes en el cual se le indica al programa todo lo que debe
hacer antes de empezar, con lo cual el usuario se puede
desentender de la mquina. Sin embargo esto ltimo
requiere mayor planicacin.
Ventajas
158.1.2
Inconvenientes
Requieren una mayor velocidad, ya que hay que evitar el cansancio del usuario.
Obliga a hacer tareas repetitivas al usuario.
158.2 Ejemplos
158.2.1
Cajero automtico
158.2.2
Compresor de archivos
Captulo 159
159.1 Referencias
HILLER - LIEBERMAN. INVESTIGACIN DE
OPERACIONES. Mc Graw Hill Interamericana Editores S.A. OCLC 16822487. Texto edicin: Sptima
ignorado (ayuda)
297
Captulo 160
Programacin visual
La programacin visual brinda los conocimientos nece- la programacin orientada a objetos y permiten aprovesarios para disear y desarrollar aplicaciones con un en- char al mximo toda la funcionalidad que ofrecen estos
torno visual amigable y fcil de utilizar para el usuario.
lenguajes para el desarrollo de aplicaciones de gestin.
Los lenguajes de programacin visual tienden a facilitar
la tarea de los programadores, dado que con los primeros
lenguajes de programacin crear una ventana era tarea de
meses de desarrollo y de un equipo de trabajo.
Captulo 161
Programador
Un programador o una programadora es aquella persona que escribe, depura y mantiene el cdigo fuente de
un programa informtico, es decir, el conjunto de instrucciones que ejecuta el hardware de una computadora, para
realizar una tarea determinada.
Un programador o programadora, es la persona que elabora programas de computadora.* [1]
Los programadores tambin son denominados
desarrolladores de software, aunque estrictamente forman parte de un equipo de personas de distintas
especialidades (mayormente informticas), y siendo que
el equipo es propiamente el desarrollador.
La programacin es una de las principales disciplinas
dentro de la informtica.
En muchos pases, el/la programador/a es tambin una
categora profesional reconocida.
300
nes menos mecnicas.
La profesin de analista tambin ha evolucionado, surgiendo el concepto diseador (de software). Esto se debe
a los avances de la ingeniera del software donde se reconoce que el anlisis es una actividad compleja y distinta
del diseo. Escuetamente, el anlisis describe el problema
(es decir, quhacer) mientras que el diseo describe
la solucin (cmohacerlo).
En la mayora de pases industrializados esto ha dado lugar a la categora diseador o arquitecto del software.
161.3 Especialidades
Estrictamente hablando, la profesin de programador si
conoce especialidades. No obstante, existen diversas ramas por las que se decantan los propios profesionales y
que se ven reejadas en la oferta de empleo. As, es posible mencionar algunas:
Programadores de mainframe: aunque se cree extinta la actividad en los viejos grandes sistemas informticos, lo cierto es que an existen muchos en funcionamiento que requieren mantenimiento. La tecnologa que manejan estos programadores es radicalmente distinta a la del resto, motivo por el que
se puede considerar esta como la rama ms especializada. Entre sus conocimientos se cuenta COBOL,
RPG, JCL, base de datos jerrquicas, etc.
Programadores denuevas tecnologas": esta es una
rama que gira en torno a Internet, los nuevos servicios como la Web 2.0 y los negocios por medios
electrnicos o e-commerce. Entre sus conocimientos
destacan lenguajes del lado del servidor como Java,
ASP, .NET, JSP, PHP, Ruby, Python o Perl, y lenguajes del lado de cliente como HTML, XHTML,
CSS, Javascript AJAX (conjunto de tecnologas
existentes como XML y Javascript).
Programadores de rmware y videojuegos, o
desarrollador de videojuegos: destacan sus conocimientos de hardware, microprocesadores,
ensamblador y C.
Programadores de sistemas abiertos": rama asociada a la Arquitectura Cliente-Servidor. Requiere conocimientos de lenguaje de programacin C,
lenguaje de programacin Pascal, etc.
Programadores de sistemas de control y adquisicin
de datos: adems de conocimientos de hardware,
microprocesadores, ensamblador y algunos otros
lenguajes, requieren formacin especca de fsica
e ingeniera de control.
Captulo 162
Pseudocdigo
En ciencias de la computacin, y anlisis numrico, el
pseudocdigo (o falso lenguaje) es una descripcin de
alto nivel compacta e informal* [1] del principio operativo de un programa informtico u otro algoritmo.
Un programador que tiene que aplicar un algoritmo especco, sobre todo uno desfamiliarizado, generalmente
comienza con una descripcin en pseudocdigo, y luego
traduceesa descripcin en el lenguaje de programacin
meta y lo modica para que interacte correctamente con
el resto del programa. Los programadores tambin pueden iniciar un proyecto describiendo la forma del cdigo
en pseudocdigo en el papel antes de escribirlo en su lenguaje de programacin, como ocurre en la estructuracin
de un enfoque de Top-down y Bottom-up arriba hacia
abajo.
162.1 Aplicaciones
Generalmente se utiliza pseudocdigo en los libros de
texto y publicaciones cientcas relacionadas con la informtica y la computacin numrica, para la descripcin
de algoritmos, de manera que todos los programadores
puedan entenderlo, aunque no todos conozcan el mismo
lenguaje de programacin. Generalmente, en los libros
de texto se adjunta una explicacin que acompaa a la
162.2 Sintaxis
En la actualidad y por lo general, el pseudocdigo, como
su nombre lo indica, no obedece a las reglas de sintaxis de
ningn idioma en particular ni es de forma estndar sistemtica, a pesar de que cualquier escritor en particular
vaya a pedir prestado las estructuras de control general,
la sintaxis y el estilo, por ejemplo, de algn lenguaje de
programacin convencional. Pero en caso de que se quiera ejecutar, se debe llevar a forma tipo, para que no genere
mensajes de error. Las fuentes populares incluyen la sintaxis de Pascal, BASIC, C, C++, Java, Lisp, y ALGOL.
Por lo general, se omiten las declaraciones de variables.
A veces, las llamadas a funciones, los bloques de cdigo
y el cdigo contenido dentro de un loop se remplazan por
una sentencia de una lnea en lenguaje natural.
Dependiendo del escritor, el pseudocdigo puede variar
mucho en su estilo, yendo desde en un extremo, una imitacin casi exacta de un lenguaje de programacin real,
hasta al acercarse a una descripcin en prosa de formato
de pseudocdigo en el otro extremo.
Este es un ejemplo de pseudocdigo (para el juego matemtico bizz buzz):
301
302
162.5.1
Estructuras secuenciales
Las instrucciones se siguen en una secuencia ja que normalmente viene dada por el nmero de rengln. Es decir
que las instrucciones se ejecutan de arriba hacia abajo.
162.5.2
Estructuras selectivas
Selectiva mltiple
La instruccin alternativa realiza una instruccin de dos Tambin es comn el uso de una seleccin mltiple que
posibles, segn el cumplimiento de una condicin.
equivaldra a anidar varias funciones de seleccin.
La condicin es una variable booleana o una funcin reducible a booleana (lgica, Verdadero/Falso). Si esta condicin es cierta se ejecuta Instrucciones1 , si no es as, entonces se ejecuta Instrucciones2 .
303
Bucle hacer
En esta estructura si Condicin1 es cierta, entonces se ejecuta slo Instrucciones1 . En general, si Condicin es ver- El Bucle hacer se utiliza para repetir un bloque de cdigo
mientras se cumpla cierta condicin.
dadera, entonces slo se ejecuta Instrucciones
Selectiva mltiple-Casos
Bucle para
Una construccin similar a la anterior (equivalente en al- Una estructura de control muy comn es el ciclo para,
la cual se usa cuando se desea iterar un nmero conocigunos casos) es la que se muestra a continuacin.
do de veces, empleando como ndice una variable que se
En este caso hay un Indicador es una variable o una funincrementa (o decrementa): Plantilla:Definiciones
cin cuyo valor es comparado en cada caso con los valores "Valor", si en algn caso coinciden ambos valores, la cual se dene como:
entonces se ejecutarn las Instrucciones correspondientes. La seccin en otro caso es anloga a la seccin si no
Bucle para cada
del ejemplo anterior.
Por ltimo, tambin es comn usar la estructura de control para cada. Esta sentencia se usa cuando se tiene una
lista o un conjunto L y se quiere iterar por cada uno de
Las instrucciones iterativas representan la ejecucin de sus elementos:
instrucciones en ms de una vez.
Si asumimos que los elementos de L son L0 , L1 , . . . , Ln
, entonces esta sentencia equivaldra a:
Bucle mientras
Que es lo mismo que:
162.5.3
Estructuras iterativas
El bucle se repite mientras la condicin sea cierta, si al Sin embargo, en la prctica existen mejores formas de
llegar por primera vez al bucle mientras la condicin es implementar esta instruccin dependiendo del problema.
falsa, el cuerpo del bucle no se ejecuta ninguna vez.
Es importante recalcar que el pseudocdigo no es un lenguaje estandarizado. Eso signica que diferentes autores
podran dar otras estructuras de control o bien usar estas
mismas estructuras, pero con una notacin diferente. Sin
embargo, las funciones matemticas y lgicas toman el
signicado usual que tienen en matemtica y lgica, con
las mismas expresiones.
162.5.4 El anidamiento
Cualquier instruccin puede ser sustituida por una estructura de control. El siguiente ejemplo muestra el pseudocdigo del ordenamiento de burbuja, que tiene varias estructuras anidadas. Este algoritmo ordena de menor a mayor los elementos de una lista L .
Bucle repetir
En general, las estructuras anidadas se muestran indentadas, para hacer ms sencilla su identicacin a simple
vista. En el ejemplo, adems de la indentacin, se ha conectado con echas los pares de delimitadores de cada
nivel de anidamiento.
Existen otras variantes que se derivan a partir de la anterior. La estructura de control repetir se utiliza cuando Con este pseudocdigo se puede desarrollar cualquier ales necesario que el cuerpo del bucle se ejecuten al menos goritmo que:
una vez y hasta que se cumpla la condicin:
La estructura anterior equivaldra a escribir:
304
Tenga un nmero nito de posibles puntos de trmino.
Haya un nmero nito de caminos, entre el punto de
inicio y los posibles puntos de trmino.
162.10 Referencias
[1] Pseudocdigo - Estructuras condicionales. Consultado
el 7 de diciembre de 2012.
[2] Instroduccin al PseudoCdigo. Consultado el 7 de diciembre de 2012.
162.11 Bibliografa
1. Pea Mar, Ricardo (2005). Diseo de programas:
formalismo y abstraccin (3 edicin). Pearson Alhambra. p. 488. ISBN 978-84-205-4191-4.
2. Pseudocdigos y programacin estructurada (1 edicin). Centro Tcnico Europeo de Enseanzas Profesionales. 2 de 1997. ISBN 978-84-8199-065-2.
3. Brassard, Gilles; Bratley, Paul (1996). Algortmica:
concepcin y anlisis. Pea Mari, Ricardo Tr. (1 edicin). Masson, S.A. p. 384. ISBN 978-84-458-0535-0.
4. Rodeira, ed. (6 de 1994). Pseudocdigos e programacin estructurada (en gallego) (1 edicin). ISBN
978-84-8116-287-5.
5. Edeb, ed. (8 de 1993). Pseudocdigos y programacin estructurada (1 edicin). ISBN 978-84-236-31261.
Captulo 163
Puente de aplicacin
En informtica, un puente de aplicacin o application
bridge es el cdigo que conecta diferentes entornos de un
lenguaje con otros lenguajes.
Los puentes, delimitan el trco entre redes a las redes
que tiene acceso directo y deben preservar las caractersticas de las LANs que interconectan (retardo de transmisin, capacidad de transmisin, probabilidad de prdida,
etc.).
La conexin es utilizada exclusivamente para transmitir
llamadas a mtodos con sus propios parmetros y retornar
los valores de un entorno de lenguaje a otro. Por ejemplo,
se necesita un puente para acceder desde Delphi a la API
de OpenOce.org.
305
Captulo 164
Puntero inteligente
En programacin, un puntero inteligente (o smart pointer) es un tipo abstracto de datos que simula el comportamiento de un puntero corriente pero aadiendo nuevas
caractersticas adicionales, como recolector de basura automtico y comprobador de lmites. Estas caractersticas
adicionales tienen como objetivo reducir errores causados por el mal uso de punteros, manteniendo la eciencia.
Los punteros inteligentes suelen llevar un registro de los
objetos a los que apunta con el prposito de gestionar la
memoria.
auto_ptr<algun_tipo> funcion_obvia1();
La funcin hace explcitamente que elllamadortenga
la propiedad del resultado y, adems, si no se hace nada,
no se ltrar memoria. Del mismo modo, si la intencin
es devolver un puntero a un objeto gestionado en otros
lugares, la funcin podra devolver una referencia:
algun_tipo& funcion_obvia2();
307
boost::shared_ptr<Observado> fan; Mirador(){ cout <<
tab() << "+ Creando Mirador<< endl; } ~Mirador(){
cout << tab() << "- Borrando Mirador<< endl; } }; /*
La funcin popular rellena el atributo del Mirador con
un shared pointer a Observado. */ void popular(Mirador
& m1, Mirador & m2){ boost::shared_ptr<Observado>
O(new Observado); m1.fan = O; m2.fan = O; } int
main(int argc, char *argv[]) { tabulados = 0; cout <<
"-- Inicio<< endl; { tabulados ++; cout << tab() <<
"-- Inicio del primer scope<< endl; Mirador M1; {
tabulados ++; cout << tab() << "-- Inicio del segundo
scope<< endl; Mirador M2; popular(M1, M2); cout <<
tab() << "-- Fin del segundo scope<< endl; } tabulados
--; cout << tab() << "-- Final del primer scope<< endl;
} tabulados--; cout << "-- Fin<< endl; return 0; }
164.1.2
Shared pointer
Captulo 165
Pure data
construccin para programas escritos en el software. Esto hace el programa arbitrariamente extensible a travs de
una API pblica, y alienta a los desarrolladores a aadir
sus propias rutinas de audio y control, ya sea en el lenguaje de programacin C o, con la ayuda de otros externos,
en Python, Javascript, Ruby, y potencialmente otros lenguajes tambin. Sin embargo, Pd es un lenguaje de programacin en s mismo. Unidades de cdigo modulares
y reusables, escritas nativamente en Pd, llamadas parcheso abstracciones, son usadas como programas
independientes y compartidas libremente entre la comunidad de usuarios de Pd, y ninguna otra habilidad de programacin es requerida para usar Pd pero ayuda.
Con la adicin del externoEntorno Grco para Multimedia(GEM, por su nombre en ingls), y otros externos
diseados para trabajar con l (como Pure Data Packet,
PiDiP para Linux, framestein para Windows, GridFlow
Captura de pantalla de Pure Data.
para proceso de matrices n-dimensionales que integra PuPure Data (o Pd) es un lenguaje de programacin gr- re Data con el lenguaje de programacin Ruby, etc.), es
co desarrollado por Miller Puckette durante los aos 90 posible crear y manipular vdeo, grcos OpenGL, impara la creacin de msica por ordenador interactiva y genes, etc, en tiempo real con aparentemente innitas poobras multimedia. Aunque Puckette es el principal autor sibilidades de interactividad con audio, sensores exterdel software, Pd es un proyecto de cdigo abierto y tie- nos, etc.
ne una gran base de desarrolladores trabajando en nuevas Adicionalmente, Pd est diseado nativamente para perextensiones al programa. Est publicado bajo una licen- mitir colaboracin en vivo a travs de redes o de Internet,
cia similar a la licencia BSD.
permitiendo a msicos conectados va LAN, o incluso en
Pd es muy similar en alcance y diseo al programa ori- distintas partes del mundo, hacer msica juntos en tiemginal de Puckette, Max(desarrollado cuando l estaba po real.
en IRCAM), y es hasta cierto grado interoperable con
Max/MSP, el sucesor comercial del lenguaje Max. Ambos Pd y Max son ejemplos discutibles de lenguajes de
programacin de ujo de datos. En este tipo de lenguajes, funciones uobjetosson conectados oparcheadosunos con otros en un ambiente grco que modela
el ujo del control y el audio. A diferencia de la versin
original de Max, sin embargo, Pd siempre fue diseado
para hacer procesado de seales y tasas de control en la
CPU nativa, en vez de descargar la sntesis y el proceso
de seales a un tablero de PDS (como el Ariel ISPW que
era usado para Max/FTS). El cdigo de Pd es la base de
las extensiones MSP de David Zicarelli al lenguaje Max
para hacer proceso de audio en software.
309
Objeto: Su comportamiento depender del texto que tenga introducido en l mismo. El programa tiene unos objetos predenidos, programados por terceras personas en
diferentes lenguajes como puede ser C. El Pd reconoce
el tipo de objeto y esa caja ya se comporta como tal.
Subpatch.
Nmeros: Su utilidad puede ser diversa, desde la de controlar el valor que tiene la seal en diferentes puntos del
patch, hasta la de inicializar valores que se pasan a objetos que controlan, por ejemplo, un nivel de opacidad de
una imagen.
Oscilador.
El objeto [osc~] nos genera una seal sinusoidal. La frecuencia de oscilacin depender del valor que se introduzca en la entrada que tiene el objeto en la parte superior izquierda. Siempre que coloquemos un oscilador,
tenemos que colocar tambin un multiplicador y un convertidor digital analgico(dac~). Esto se hace porque el
osc~por defecto posee la amplitud mxima en 1, por
eso la multiplicamos por 0.01 para reducir su amplitud y
luego enviarla al dac~. El objeto dac~tiene dos
entradas que hacen referencia a los dos canales de salida
de la tarjeta de sonido de tu mquina.
Un [bang] tiene como funcin la activacin de la accin
que tiene inmediatamente conectada despus.
Objetos de Pd.
Metro: Enva series de [bang] peridicamente. Lo crearemos escribiendo la palabra metrodentro de un objeto. Este objeto tiene dos entradas, la de la izquierda
310
Bang.
metro_pd.
Start
Selector.
Moses: Escribiremos la palabramosesdentro de un objeto para poder tenerlo operativo. Contiene dos entradas
y dos salidas. En la entrada de la izquierda conectamos el
valor que est en el proceso y en la derecha el valor que
queremos que acte de frontera. Si el valor del proceso
es inferior a la frontera, nos saca el valor de entrada por
la salida de la izquierda. En cambio, si el valor es igual o
superior al valor que acta de frontera, nos sacar el nmero por la salida de la derecha. Podramos asemejar el
[moses] a un ltro paso bajo y paso alto simultneo.
Test audio/MIDI.
311
Tambin existe otra biblioteca referente al video llamada OpenCV. Es una biblioteca abierta desarrollada por
Intel. Esta biblioteca proporciona un alto nivel de funciones de procesado de imgenes. Permite al programador crear aplicaciones en el dominio de la visin digital.
OpenCV es Open Source permitiendo as poder funcionar en muchas plataformas. Esta biblioteca nos permite
hacer operaciones bsicas, procesado de imgenes, anlisis de reconocimiento del modelo, anlisis estructural,
reconstruccin 3D, calibracin de la cmara, anlisis de
movimiento, interfaz grca y adquisicin, etc. Implementa una gran variedad de herramientas para la interpretacin de la imagen, como por ejemplo, deteccin de
facciones o anlisis de la forma (geometra, contorno que
procesa en ese instante), entre otras.
312
mos el objeto [osc~]. En la entrada izquierda le conectaremos un mensaje con un nmero dentro que actuar
de frecuencia de oscilacin. Su salida la enviaremos a un
multiplicador que nos convertir esta frecuencia en audible y nalmente esto lo enviamos a un convertidor digital
analgico [dac~] para poder reproducirlo por los altavoces de nuestra mquina. Una vez ya hemos creado este
patch, podemos modicar la frecuencia clicando y manteniendo pulsado el ratn encima del mensaje del nmero
y desplazando el cursor arriba abajo, aumentando y disminuyendo as el valor de la frecuencia.
Captulo 166
QuadTIN
QuadTIN es una estructura de datos en forma de rbol
ideada por Renato Pajarola, Roberto Lario y Marc Antonijuan. Dicha estructura de datos se basa en la estructura
del quadtree, pero, a diferencia de ste, los hijos de un
nodo no han de ser del mismo tamao, y ni siquiera ser
cuadrados. De esta forma, el quadTIN permite almacenar
de forma jerrquica triangulaciones irregulares.
313
Captulo 167
Query string
Query string, en espaol: cadena de consulta, este trmino generalmente se utiliza para hacer referencia a una
interaccin con una base de datos. Es la parte de una URL
que contiene los datos que deben pasar a aplicaciones web
como los programas CGI.
314
Pgina web
Web 2.0
HTML dinmico
Captulo 168
Quest3D
Quest3D es la conjuncin de un motor de videojuego con
una plataforma de desarrollo. Generalmente se usa para
arquitectura, diseo de producto, videojuegos, software
de entrenamiento y simuladores. Los datos y animaciones
son importados de paquetes CAD tales como Maya, 3D
Studio Max y AutoCAD, a Quest3D donde son utilizados
para la creacin de aplicaciones interactivas 3D en tiempo
real. Quest3D es un producto desarrollado por Act-3D
B.V. en Holanda. Su primera versin fue publicada en
septiembre del 2001.
168.1.3 Editores
168.1.4 Publicacin
Las aplicaciones nalizadas pueden ser publicadas en diferentes formatos, para permitir su visualizacin en diferentes medios: Fichero ejecutable standalone(plata168.1.1 Lgica de las aplicaciones
forma Microsoft Windows) y visor WEB basado en control ActiveX. Los navegadores soportados en la actualiLas aplicaciones Quest3D se desarrollan conectando dad son Internet Explorer y FireFox.
componentes funcionales (cajas negras), denominadas
Channels. LosChannelsvinculados componen una
estructura de rbol, que representa la estructura del pro- 168.2 Requerimientos del sistema
grama que se implementa. El rbol de cajas negras se ejecuta por completo una vez (al menos) por frame, invocanAlgunas funcionalidades del motor 3D requieren hardwado a cadachannel. Lo que se obtiene como resultado
re ms especco.
es una aplicacin 3D en tiempo real.
Como no hay fase de compilacin, o interpretacin de un
lenguaje de scripting, ya que los Channelsson cajas
con su cdigo precompilado (implementadas en Dynamic
Link Libraries), el rendimiento de las aplicaciones es el
mismo en fase de diseo que en ejecucin, caracterstica muy apreciada cuando se desarrollan aplicaciones en
tiempo real.
315
316
32 MB de memoria grca
400MB de espacio en disco duro
168.3 Licencias
Se pueden adquirir diferentes licencias para el uso tanto
comercial como educacional.
168.4 Aplicaciones
Realidad virtual, Videojuegos, visualizacin arquitectnica, serious games, simuladores, TV y cine.
168.5 Referencias
DevMaster.net Quest3D specications
Gamasutra Rapid gameplay iterations are crucial
to me, so I use Quest3D for everything else., Dylan
Fitterer in The road to IGF
Captulo 169
Quine (programa)
En informtica, un quine (pronunciado kwain) es
un programa (un tipo de Metaprogramacin) que produce su cdigo fuente como su salida nica. Para diversin,
algunos hackers intentan desarrollar el quine ms corto
posible en cualquier lenguaje de programacin.
169.1 Ejemplos
169.1.4
Common Lisp
169.1.1 C
169.1.2 C#
Y otro que comparte los caracteres ltimos con la anterior (solamente para mostrar que asignaciones mltiples
Nota: Debe ser una sola lnea. Los saltos de lnea se agre- no salva mecanografa):
garon para hacerlo ms fcil de leer.
b,g,p,s='\\','"','%',"b,g,p,s='%s%s','%s','%s',%s%s%s;print
using
gram
318
169.1.7 JavaScript
169.1.11
Brainfuck
Nota: Debe ser una sola lnea. Los cortes de lnea se agreunescape(q="unescape(q=%22*%22).replace('*',q)").replace('*',q)
garon para hacerlo ms fcil de leer.
->+>+++>>+>++>+>+++>>+>++>>>+>+>+>++>+>>>>+++>+>>++>+
+>>>>+++>+>>>>++>++>>>>+>>++>+>+++>>>++>>++++++>>+>>+
169.1.8 Perl
>>>++>>++>>+>>++>+>+++>>>++>>+++++++++++++>>+>>++>+>+
++>+>>>>+++>>+++++>>>>++>>>>+>+>++>>+++>+>>>>+++>+>>>
$_=q{$_=q{Q};s/Q/$_/;print};s/Q/$_/;print
++>+>++>++>>>>>>++>+>+++>>>>>+++>>>++>+>+++>+>+>++>>>
+>>>+>>++>+>++++++++++++++++++>>>>+>+>>>+>>++>+>+++>>
El ms corto conocido:
>>+++>>++++++>>>+>++>>+++>+>+>++>+>+++>>>>>+++>>>+>+>
>>+>>++>+>>>>+++>>++++>>+>+++>>>>>>++>+>+++>>+>++>>>>
open+0;print<0>
[[->>+<<]]<+]+++++[>+++++++++<]>.[+]>>[<<+++++++[Y una combinacin de Perl y script de shell:
>+++++++++<]>.------------------->-[perl
-le
'$n=q{perl
-le <.<+>>]<[+]<+>>>]<<<[-[-[-[>>+<++++++[a$n=q{$x};($_=$n)=~s/\141/\47/g;s/\$x/$n/;printa};($_=$n)=~s/\141/\47/g;s/\$x/$n/;print'
>+++++<]]>++++ ++++++++++<]>+++<]++++++[>+++++++<]>+<<<-[->>>++<<<]>[->>.<<]<<]
169.1.9 BASIC
169.1.12
10 LIST
169.1.10
Pascal
const
a='const
a=';b='begin
write(a,#39,a,#39#59#98#61#39,b,#39#59#10,b)
end.';
begin write(a,#39,a,#39#59#98#61#39,b,#39#59#10,b)
end.
169.1.13
HQ9+
DOS Batch
169.1.16
PostScript
169.1.17
Visual FoxPro
319
Captulo 170
Rebanamiento esttico
El rebanamiento esttico es una tcnica en el rea de
programacin de computadoras conocida como mantenimiento de software. Es usada para identicar todo el
cdigo de programa que puede afectar de algn modo el
valor de una variable dada.
Una descripcin breve de su clculo es el siguiente: Basado en la denicin original de Mark Weiser una rebanada
esttica de programa (S) consiste de todas las sentencias
en un programa P que pueden afectar el valor de la variable v en algn punto p. La rebanada es denida por un
criterio de rebanamiento C=(x,V), donde x es una sentencia en un programa P y V es un subconjunto de variables
en P. Una rebanada esttica incluye todas las sentencias
que afectan la variable v para un conjunto de todos los
posibles inputs en el punto de inters. Las rebanadas estticas son computadas encontrando conjuntos consecutivos de sentencias indirectamente relevantes, de acuerdo
a los datos y dependencias de control.
170.3 Referencias
Meilir Page-Jones, "The Practical Guide to Structured Systems Design", Yourdon Press,1980, ISBN 0917072-17-0
170.1 Ejemplo
int i; int suma = 0; int producto = 1; for(i = 0; i < N;
++i) { suma = suma + i; producto = producto * i; }
write(suma); write(producto);
El siguiente programa es un rebanamiento vlido del anterior, respecto al criterio (write(suma),{suma}):
int i; int suma = 0; for(i = 0; i < N; ++i) { suma = suma
+ i; } write(suma);
De hecho, la mayora de tcnicas de rebanamiento esttico, incluida la propia tcnica de Weiser, tampoco incluiran la sentencia write(suma), ya que en la sentencia
write(suma), el valor de suma no es afectado por la sentencia en s.
Tufts University: Ensayo sobre Mantenimiento como parte del Ciclo de Vida del Software (en ingls)
Captulo 171
Recolector de basura
Compactar espacios de memoria libres y consecutivos entre s.
Llevar cuenta de qu espacios estn libres y cules
no.
Generalmente, el programador dispone de una biblioteca
de cdigo que se encarga de estas tareas. No obstante, el
propio programador es responsable de utilizar adecuadamente esta biblioteca.
Esto tiene la ventaja de que se hace un uso eciente de la
memoria, es decir, los espacios de memoria quedan libres
cuando ya no son necesarios. No obstante, este mecanismo explcito de gestin de memoria es propenso a errores. Por ejemplo, un programador puede olvidar liberar
la memoria de manera que, tarde o temprano, no quede
memoria disponible, abortando la ejecucin del programa.
El concepto de recoleccin de basura fue inventado por Cuando un lenguaje dispone de recoleccin de basura, el
John McCarthy en 1958 para evitar la gestin manual de programador no tiene que invocar a una subrutina para
memoria en el lenguaje Lisp.
liberar memoria. La reserva de memoria tambin es ms
o menos automtica sin la intervencin del programador.
Por ejemplo:
171.2 Contexto
En los lenguajes orientados a objetos: se reserva memoria cada vez que el programador crea un objeto,
pero ste no tiene que saber cunta memoria se reserva ni cmo se hace esto.
En los lenguajes declarativos: cada vez que se construye una expresin se reserva memoria (de una manera inteligente), pero el programador no es consciente de ello.
322
Que el entorno de ejecucin o mquina virtual implemente la subrutina del recolector de basura.
Fuga de memoria
Captulo 172
Recursin
Imagen recursiva formada por un tringulo. Cada tringulo est compuesto de otros ms pequeos, compuestos a su vez de la
misma estructura recursiva.
323
324
x1
da lugar
De forma similar, la identidad x = 1 + 1+
x
172.1 Recursin en matemticas
a una denicin como fraccin continua de cualquier raz
x1
cuadrada:* [3] x = 1 +
x1
172.1.1 Conjuntos denidos de forma re2+
x1
currente
2+
.
2 + ..
Un ejemplo de conjunto denido de forma recurrente es
el de los nmeros naturales, es decir, el conjunto de los
nmeros enteros no negativos:* [1]
1. 0 pertenece a .
2. Si n pertenece a , entonces n + 1 pertenece a .
3. Si x verica las anteriores condiciones, entonces x
est incluido en * [cita requerida].
172.1.2
Funciones denidas de forma re- b) Se reemplaza an por r , an1 por r y an2 por 1
, quedando una ecuacin de segundo grado con races
currente
reales y distintas r1 y r2 .
si n = 0 1
si n 1 n (n 1)!
{
u+v =k
u r1 + u r2 = k
Veamos cmo se usa esta denicin para hallar el valor La resolucin de este sistema nos da como resultado los
valores u0 y v0 , que son nmeros reales conocidos.
del factorial de 3:
e) La solucin general es:
3! = 3 (3 1)!
= 3 2!
= 3 2 (2 1)!
= 3 2 1!
= 3 2 1 (1 1)!
= 3 2 1 0!
=3211
an = u0 r1 n + v0 r2 n
El ejemplo del clculo recursivo del factorial de un nmero llevado al campo de la programacin, en este ejemplo
C++:
172.5. REFERENCIAS
int factorial(int x) { if (x > 1 && x < 2) return 1; //
Cuando 1 < x < 2 devolvemos 1 puesto que 0! = 1 y 1!
= 1 else if (x < 0) return 0; // Error no existe factorial de
nmeros negativos return x * factorial(x - 1); // Si x >= 2
devolvemos el producto de x por el factorial de x - 1 }
Este ejemplo est basado en el lenguaje de programacin
Pascal:
Proc Factorial(x:Entero):Entero Si (x > 1 Y x < 2)
Devolver 1 ' Cuando x sea mayor que 1 y menor que 2
Devolver 1. Si (x < 0) Devolver 0 ' Cuando x sea menor
a 0, devolver 0 Devolver x * Factorial(x - 1) ' Si x igual o
mayor que 2 devolvemos el producto de x por el factorial
de x - 1 FinProc
El seguimiento de la recursividad programada es casi
exactamente igual al ejemplo antes dado, para intentar
ayudar a que se entienda mejor se ha acompaado con
muchas explicaciones y con colores que diferencia los
distintos sub-procesos de la recursividad.
X = 3 //Queremos 3!, por lo tanto X inicial es 3 X >= 2
-> return 3*factorial(2); X = 2 //Ahora estamos solicitando el factorial de 2 X >= 2 -> return 2*factorial(1);
X = 1 // Ahora estamos solicitando el factorial de 1 X <
2 -> return 1; [En este punto tenemos el factorial de 1
por lo que volvemos marcha atrs resolviendo todos los
resultados] return 2 [es decir: return 2*1 = return 2*factorial(1)] return 6 [es decir: return 3*2 = return 3*factorial(2)*factorial(1)] // El resultado devuelto es 6
325
Algoritmo recursivo
Fractal
Sistema-L
Torres de Hani
Relacin de recurrencia
172.5 Referencias
[1] Algunos autores consideran que los nmeros naturales son
los nmeros enteros positivos, es decir, excluyen el 0 de
este conjunto. En ese caso, basta sustituir la lnea que dice
0 pertenece a por 1 pertenece a .
[2] Nociones de espacios normados , Cotlar y Cignoli, Eudeba, Buenos Aires
[3] Ben Thurston,Estimating square roots, generalized continued fraction expression for every square root, The Ben
Paul Thurston Blog
[4] Hunter, David (2011). Essentials of Discrete Mathematics.
Jones and Bartlett. p. 494.
[5] Daniel Rodrguez Herrera (29 de julio de 2009). Qu es
la recursividad? Qu es la recursividad? Qu es la recursividad?.... Libertad Digital. Consultado el 20 de enero
de 2013.
Captulo 173
Refactorizacin
La refactorizacin (del ingls refactoring) es una tcnica de la ingeniera de software para reestructurar un
cdigo fuente, alterando su estructura interna sin cambiar
su comportamiento externo.
La refactorizacin es la parte del mantenimiento del cdigo que no arregla errores ni aade funcionalidad. El objetivo, por el contrario, es mejorar la facilidad de comprensin del cdigo o cambiar su estructura y diseo y
eliminar cdigo muerto, para facilitar el mantenimiento
en el futuro. Aadir nuevo comportamiento a un programa puede ser difcil con la estructura dada del programa,
as que un desarrollador puede refactorizarlo primero pa- La refactorizacin es un concepto tan importante que ha
ra facilitar esta tarea y luego aadir el nuevo comporta- sido identicado por David A. Wheeler como una de
miento.
las ms importantes innovaciones en el campo del softEl trmino se cre como analoga con la factorizacin de ware.* [1]
nmeros y polinomios. Por ejemplo, x2 1 puede ser factorizado como (x + 1)(x 1) , revelando una estructura
interna que no era visible previamente (como las dos ra173.2 Refactorizacin de otros texces en 1 y +1). De manera similar, en la refactorizacin
del software, el cambio en la estructura visible puede fretos
cuentemente revelar la estructura interna ocultadel
cdigo original.
El trmino refactorizacin se origin en el mbito de la
La refactorizacin debe ser realizada como un paso separado, para poder comprobar con mayor facilidad que no
se han introducido errores al llevarla a cabo. Al nal de
la refactorizacin, cualquier cambio en el comportamiento es claramente un bug y puede ser arreglado de manera
separada a la depuracin de la nueva funcionalidad.
173.3 Etimologa
El primer uso conocido del trmino refactorizacin en
la literatura publicada se encuentra en el artculo Refactoring: An Aid in Designing Application Frameworks
and Evolving Object-Oriented Systems, Proceedings of the
Symposium on Object Oriented Programming Emphasizing Practical Applications (SOOPPA) September, 1990,
ACM por William F. Opdyke y Ralph E. Johnson.* [2] La
tesis doctoral de William Opdyke titulada Refactoring
Object-Oriented Framework(Universidad de Illinois) se
public en 1992.* [3] Tanto el trmino refactorizacin como la tcnica que dene se usaban ya con toda seguridad
antes.
173.4 Referencias
[1]
[2]
[3]
327
Captulo 174
Reexin (informtica)
En informtica, reexin (o reexin computacional) es
la capacidad que tiene un programa para observar y opcionalmente modicar su estructura de alto nivel.
174.2 Ejemplos
174.2.1
Python
174.2.2
C#
174.1 Implementacin
Un lenguaje con reexin proporciona un conjunto de caractersticas disponibles en tiempo de ejecucin que, de
otro modo, seran muy difcilmente realizables en un lenguaje de ms bajo nivel. Algunas de estas caractersticas
son las habilidades para:
Descubrir y modicar construcciones de cdigo
fuente (tales como bloques de cdigo, clases, mtodos, protocolos, etc.) como objetos decategora
superioren tiempo de ejecucin.
Convertir una cadena que corresponde al nombre
simblico de una clase o funcin en una referencia
o invocacin a esa clase o funcin.
Evaluar una cadena como si fuera una sentencia de
cdigo fuente en tiempo de ejecucin.
328
Captulo 175
175.0.1
Vase tambin
Compresor digital
329
Captulo 176
Cuando un usuario plantea a un programador un problema que resolver mediante su ordenador, por lo general
ese usuario tendr conocimientos ms o menos amplios
sobre el dominio del problema, pero no es habitual que
tenga conocimientos de informtica. Por ejemplo, un contable que necesita un programa para llevar la contabilidad
de una empresa ser un experto en contabilidad (dominio del problema), pero no tiene por qu ser experto en
programacin.
Del mismo modo, el informtico que va a resolver un determinado problema puede ser un experto programador,
pero en principio no tiene por qu conocer el dominio
del problema; siguiendo el ejemplo anterior, el informtico que hace un programa no tiene por qu ser un experto
en contabilidad.
176.2.1
Acciones elementales
331
Se entiende por acciones elementales aquellas que el or- Tambin es posible que a la hora de especicar la ejecucin de una accin haya que escoger sta entre varias
denador es capaz de realizar y que sern de dos tipos:
dependiendo del valor de una determinada variable (o indicador). Este caso se expresa del siguiente modo:
Aritmtico lgicas: Operaciones que, a partir de
unos determinados datos, realizan un clculo arit- Segn Indicador Hacer Caso Valor 1: Accin 1; Caso
mtico (suma, resta, multiplicacin,...) o un clculo Valor 2: Accin 2; ... Caso Valor n: Accin n; [De Otro
lgico (mayor que, menor que, igual que,...).Las pri- Modo: Accin X;] FinSegun
meras devuelven un valor numrico (4, 5.67,...) y En esta construccin Indicador debe tener un determilas segundas un valor lgico (verdadero o falso).
nado valor que en caso de coincidir con alguno de los
n valores provocar la ejecucin de la accin asociada a
De entrada salida: Acciones que permiten cap- dicho valor. Si el valor del Indicador no coincidiera con
turar datos para su posterior tratamiento (las de en- ninguno de los especicados se ejecutar la Accin X. No
trada) y guardar los resultados de dicho tratamiento tiene por qu haber una Accin X para cuando el Indicador' no coincida con ninguno de los n valores; en ese
(las de salida).
caso, si el Indicador' no coincide con ningn valor no se
ejecutara ninguna accin.
176.2.2
176.2.4
En ocasiones, se deben ejecutar unas acciones u otras dependiendo de la ocurrencia de una determinada condicin. Esta especicacin se realiza del siguiente modo:
Si Condicin Entonces Accin A; SiNo Accin B; FinSi
Dependiendo de si la Condicin es verdadera o falsa se
ejecutar la Accin A o la Accin B respectivamente. De
forma anloga a como ocurra en el caso anterior, tanto la
Accin A como la Accin B pueden referirse a una accin
elemental o a un conjunto de ellas.
Si en las estructuras 1 y 2, cuando se evala laCondicin, sta toma por primera vez un valor tal que
no permita ejecutar laAccin(FALSO en la 1 y
VERDADERO en la 2), sta no se ejecutar ninguna vez. Es decir, puede ocurrir que la Accin,
en las estructuras 1 y 2, no se ejecute nunca.
En las estructuras 3 y 4, al estar laCondicinde
terminacin al nal, laAccinse ejecutar antes
de que la condicin se evale por primera vez, por
lo que aunque laCondicintome un valor tal que
no se permita realizar ms iteraciones, la Accin
se ejecutar al menos una vez.
Si las Condicionesde las estructuras 1 y 2 son
complementarias, es decir, que siempre que una es
verdadera la otra es falsa y viceversa (ejemplo: [a
> b] y [a b] son condiciones complementarias),
entonces ambas estructuras son equivalentes ya que
en ambas laAccinse ejecutar el mismo nmero
de veces.
332
De forma anloga, si las Condicionesde las estructuras 3 y 4 son complementarias tambin ambas
estructuras sern equivalentes.
Existe una construccin especial para indicar una repeticin de acciones que se suele emplear cuando se quiere
que dicha repeticin se realice un nmero determinado
de veces:
Para i = 1 Hasta n Hacer Accin; FinPara
En este caso laAccinse repetir n veces eiser una
variable que tomar todos los valores entre 1 y n (ambos
inclusive) en cada una de las sucesivas repeticiones. Esta
construccin, aunque de apariencia diferente a las anteriores, se podra expresar como un caso particular de la
estructura 1 del siguiente modo:
i = 1; Mientras i <= n Hacer Accin; i = i + 1; FinMientras
En este caso la condicin de nalizacin del bucle es que
la variableisea mayor queny siempre, al nalizar
la ejecucin de laAccin,ise incrementa en una
unidad antes de volver a evaluar la Condicinpara el
nuevo valor de i.
Captulo 177
Instancia (programacin)
En el paradigma de la orientacin a objetos, una instan- se (puede hacerlo para permitir ejecuciones concurrencia se reere a una realizacin especca de una clase o tes de distintas versiones de una clase)* [Nota 1] entonces
prototipo determinados.
las clases sern representadas utilizando un Singleton. En
En general, cuando se ejecuta un programa en un compu- Java, por ejemplo, si tenemos una clase denida como:
tador, se dice que ste se instancia. En lenguajes que crean
objetos a partir de clases, un objeto es una instancia de
una clase. Esto es, es un miembro de una clase que tiene
atributos en lugar de variables. En un contexto del mundo
real, podramos pensar en Perrocomo una clase y en
un perro conreto en una instancia de esta clase.* [1]
177.2 Programacin
prototipos
basada
en
334
177.3 Notas
[1] Erlang, por ejemplo, permite la ejecucin concurrente de varias versiones de un mismo programa, vase
[server.html#Module:code change-3 http://www.erlang.
org/doc/man/gen server.html#Module:code change-3], y
CLOS.
[2] http://augmentjs.com, por ejemplo, proporciona mtodos
al objeto Array.prototype, cambiando todos los Array del
programa.
177.4 Referencias
[1] http://whatis.techtarget.com/definition/instance (en ingls)
Captulo 178
Anexo:Scan code
Son los cdigos que enva el teclado al ordenador para
indicar la tecla pulsada o soltada. Su valor no depende
de la tecla, sino de su posicin, as se consigue que sea
independiente del idioma del teclado.
Para el teclado QWERTY (PS/2) y cdigos ASCII los
scan codes son:
335
Captulo 179
scanf
En C, la funcin scanf() (scan-format, analizar con formato), en realidad representa a una familia de funciones
que analizan una entrada de datos con formato y cargan el
resultado en los argumentos que se pasan por referencia
a dicha funcin o funciones:
La funcin scanf() lee los datos de entrada en el stdin (ujo de entrada estndar).
Todas ellas leen caracteres, los interpretan segn un formato, y almacenan los resultados en sus argumentos. Cada uno cuenta con varios argumentos: por un lado, un formato de la secuencia del control (se describe ms abajo),
por otro, un sistema de argumentos del indicador que seala dnde la entrada convertida debe ser almacenada.
El resultado es indenido si hay escasos argumentos para dar formato. Si se agota el formato mientras que sigue
habiendo las argumentos, los argumentos sobrantes son
evaluados pero no procesados de ninguna otra manera.
179.0.1
mento con el tipo indicador al doble; o que una c siguiente, s, o [el especicador de la conversin se aplica a una
argumento con el tipo indicador al wchar_t.
Modicantes de longitud
i - Empareja un entero con signo opcionalmente, que formato es igual segn lo esperado para la secuencia sujeta
del strtol() con 0 para el argumento bajo. En ausencia de
un modicante del tamao, el uso se asegurar de que el
argumento correspondiente sea un indicador a interno.
337
signo, que formato es igual segn lo esperado para la secuencia sujeta del strtoul() con el valor 8 para el argumento bajo. En ausencia de un modicante del tamao,
el uso se asegurar de que el argumento correspondiente
sea un indicador a sin rmar.
u - Empareja un nmero entero decimal opcionalmente
con signo, que formato es igual segn lo esperado para la
secuencia sujeta del strtoul() con el valor 10 para el argumento bajo. En ausencia de un modicante del tamao,
el uso se asegurar de que el argumento correspondiente
sea un indicador a sin rmar.
x - Empareja un nmero entero hexadecimal opcionalmente con signo, que formato es igual segn lo esperado
para la secuencia sujeta del strtoul() con el valor 16 para el argumento bajo. En ausencia de un modicante del
tamao, el uso se asegurar de que el argumento correspondiente sea un indicador a sin rmar.
a, e, f, g - Empareja un nmero, un innito, o un NaN
oating-point opcionalmente con signo, que formato es
igual segn lo esperado para la secuencia sujeta del strtod
(). En ausencia de un modicante del tamao, el uso se
asegurar de que el argumento correspondiente sea un indicador a otar.
>>>Si la familia del fprintf() de funciones genera las representaciones de la cadena de caracteres para el innito y NaN (una entidad simblica codicada en formato
oating-point) para apoyar IEEE Std 754-1985, la familia
del fscanf () de funciones las reconocer como entrada. s
- Empareja una secuencia de los octetos que no son caracteres del blanco-espacio. El uso se asegurar de que
el argumento correspondiente sea un indicador al octeto
inicial de un arsenal del carbn, del carbn rmado, o
del carbn sin rmar bastante grande aceptar la secuencia y un cdigo de carcter nulo que termina, que sern
agregados automticamente.
c - Empareja una secuencia de los octetos del nmero especicado por la anchura del campo (1 si no hay anchura
del campo presente en la especicacin de la conversin).
El uso se asegurar de que el argumento correspondiente
sea un indicador al octeto inicial de un arsenal del carbn, del carbn rmado, o del carbn sin rmar bastante
grande aceptar la secuencia. No se agrega ningn octeto nulo. Los caracteres excesivos del blanco-espacio del
>>>Si un l (codo) calicador est presente, la entrada es salto normal sern suprimidos en este caso.
una secuencia de caracteres que comienza en el estado >>>Si un l (codo) calicador est presente, la entrada seinicial de la cambio. Cada carcter ser convertido a un r una secuencia de caracteres que comienza en el estado
carcter ancho como si por una llamada a la funcin del inicial de la cambio. Cada carcter en la secuencia se conmbrtowc (), con el estado de la conversin descrito por vierte a un carcter ancho como si por una llamada a la
un objeto del mbstate_t inicializado a cero antes del pri- funcin del mbrtowc (), con el estado de la conversin
mer carcter sea convertido. El uso se asegurar de que el descrito por un objeto del mbstate_t inicializado a cero
argumento correspondiente sea un indicador a un arsenal antes del primer carcter sea convertido. El uso se asegude wchar_t bastante grande para aceptar la secuencia y rar de que el argumento correspondiente sea un indicael carcter ancho nulo que termina, que sern agregados dor a un arsenal de wchar_t bastante grande para aceptar
automticamente.
la secuencia que resulta de caracteres anchos. No se agre[ - Empareja una secuencia no vaca de octetos de un sis- ga ningn carcter ancho nulo.
tema de los octetos previstos (el scanset). Los caracteres s - Indica que es una cadena de caracteres (string). La enexcesivos del blanco-espacio del salto normal sern supri- trada se termina con un espacio en blanco y un caracter
midos en este caso. El uso se asegurar de que el argu- null es guardado al nal de la cadena de caracteres. Esto
mento correspondiente sea un indicador al octeto inicial signica que el buer utilizado debe ser por lo menos un
de un arsenal del carbn, del carbn rmado, o del car- caracter ms grande que la longitud de entrada especicabn sin rmar bastante grande aceptar la secuencia y un da. De no ser as podra darse el caso que se sobrescriban
octeto nulo que termina, que sern agregados automti- porciones de memorias adyacentes, generando resultados
camente.
inesperados.
338
/*Posibles resultados no deseados al leer un solo caracter*/ char a; scanf("%s,&a); /*Una forma non-sancta
de evitarlo usando arreglos el caracter quedara en a[0] */
char a[2]; scanf("%s,a);
179.1 Sintaxis
valor_devuelto=scanf(tipo, &var);
179.3.2 sscanf
La funcin sscanf lee datos de entrada desde un buer,
en lugar de utilizar la entrada estndar.
scanf_s
printf
stdio.h
Lenguaje de programacin C
PHP
339
Captulo 180
SCons
SCons es una herramienta de cdigo abierto para la construccin e instalacin de software a travs de scripts hechos en Python, para los sistemas operativos basados en
Unix. Su objetivo es ser una variante al mtodo de compilacin tradicional de fuentes. Entre sus ventajas se encuentra el anlisis de dependencias.
Scons utiliza el lenguaje de programacin Python de propsitos generales como fundacin, para que todas las de
proyectos de conguraciones software y construccin de
procesos implementarios sean los scripts de Python.
340
Captulo 181
Screen scraping
Screen scraping es el nombre en ingls de una tcnica
de programacin que consiste en tomar una presentacin
de una informacin (normalmente texto, aunque puede
incluir informacin grca) para, mediante ingeniera inversa, extraer los datos que dieron lugar a esa presentacin. Por ejemplo:
Extraer de la pgina web de un diario el tiempo meteorolgico previsto.
Extraer los datos originales a partir de la imagen de
una grca elaborada.
Hacer una consulta automtica a la pgina de gestin
de nuestro banco para vericar si el saldo es inferior
a un umbral.
Extraer los datos de un informe en PDF para verterlos en una hoja de clculo.
En general, hay que destacar que los sistemas de los que
se extrae la informacin no estn diseados para extraer
dicha informacin (en algunos casos, es al contrario, como en los sistemas de captcha).
La traduccin aproximada de screen scraping es raspado
de pantalla.
341
Captulo 182
Seccin crtica
Se denomina seccin crtica, en programacin concurrente, a la porcin de cdigo de un programa de ordenador en la que se accede a un recurso compartido (estructura de datos o dispositivo) que no debe ser accedido
por ms de un proceso o hilo en ejecucin. La seccin
crtica por lo general termina en un tiempo determinado
y el hilo, proceso o tarea slo tendr que esperar un perodo determinado de tiempo para entrar. Se necesita un
mecanismo de sincronizacin en la entrada y salida de la
seccin crtica para asegurar la utilizacin en exclusiva
del recurso, por ejemplo un semforo.
El acceso concurrente se controla teniendo cuidado de las
variables que se modican dentro y fuera de la seccin
crtica. La seccin crtica se utiliza por lo general cuando
un programa multihilo actualiza mltiples variables sin
un hilo de ejecucin separado que lleve los cambios conictivos a esos datos. Una situacin similar, la seccin
crtica puede ser utilizada para asegurarse de que un recurso compartido, por ejemplo, una impresora, pueda ser
accedida por un solo proceso a la vez.
La manera en cmo se implementan las secciones puede
variar dependiendo de los diversos sistemas operativos.
Slo un proceso puede estar en una seccin crtica a la
vez.
El mtodo ms comn para evitar que dos procesos accedan al mismo tiempo a un recurso es el de la exclusin
mutua.
342
Captulo 183
Serializacin
En ciencias de la computacin, la serializacin (o mars- 183.3 Enlaces externos
halling en ingls) consiste en un proceso de codicacin
de un objeto en un medio de almacenamiento (como pue- Para Java:
de ser un archivo, o un buer de memoria) con el n de
transmitirlo a travs de una conexin en red como una
XML Data Binding
serie de bytes o en un formato humanamente ms legible como XML o JSON, entre otros. La serie de bytes o
Generar el serialVersionUID de una clase
el formato pueden ser usados para crear un nuevo objeto
que es idntico en todo al original, incluido su estado inPara C#:
terno (por tanto, el nuevo objeto es un clon del original).
La serializacin es un mecanismo ampliamente usado
Serializacin XML de objetos en .net con C# (en
para transportar objetos a travs de una red, para hacer
espaol)
persistente un objeto en un archivo o base de datos, o
para distribuir objetos idnticos a varias aplicaciones o
localizaciones.
183.1 Usos
Serializacin tiene una serie de ventajas:
Un mtodo de persistencia de objetos que es ms
conveniente que escribir sus propiedades a un archivo de texto en disco.
Un mtodo de emisin de llamadas a procedimiento
remoto, por ejemplo, como en SOAP.
Un mtodo para la distribucin de objetos, especialmente en los componentes software, tales como
COM, CORBA, etc.
Un mtodo para detectar cambios en variables en el
tiempo.
Captulo 184
Sigil
En programacin y sistemas de informacin, un sigil
(pronunciado/sdl/ o /sl/; plural sigilia o sigiles) o
sigilo es un smbolo agregado al nombre de una variable,
especicando el tipo o alcance de la misma. Este trmino,
basado en la palabra inglesa para sello mgico, fue usado
por Philip Gwyn en 1999 para designar el extrao carcter inicial en el nombre de una variable de Perl".
344
Captulo 185
Signatura (informtica)
La signatura o rma de un mtodo o una funcin dene
su entrada y su salida. Incluye por lo menos el nombre de
la funcin o mtodo y el nmero de sus parmetros. En
algunos lenguajes de programacin, puede incluir el tipo
que devuelve la funcin o el tipo de sus parmetros.
En el caso de un tipo de dato abstracto (TDA), se dene
signatura como los tipos que utiliza junto con los nombres
y perles de las operaciones.
Por ejemplo, para especicar el TDA de los booleanos se
utiliza la siguiente signatura:
1. tipos bool
2. operaciones
3. verdadero : bool
4. falso : bool
5. And : bool x bool -> bool
6. Or : bool x bool -> bool
7. Not : bool -> bool
345
Captulo 186
Signum Framework
Signum Framework es un framework ORM Open Source creado por una empresa espaola en C# orientado
al desarrollo de aplicaciones sobre la tecnologa .Net de
Microsoft, con un visin centrada en las entidades, de manera que es el modelo de datos el que determina el esquema de la base de datos. Como base de datos slo est
soportado MS SQL Server.
Signum Framework se distribuye bajo licencia LGPL.
186.1 Caractersticas
186.1.1
186.2. HISTORIA
186.1.5
186.1.6
LINQ
Signum Framework tiene un proveedor LINQ completo, de manera que todas las operaciones se ejecutan en
LINQ, e internamente el motor las traduce a SQL. Algunas de las caractersticas del proveedor de LINQ son las
siguientes:
347
186.2 Historia
2004 - Primera versin de un motor ORM basado
en los principios de reutilizacin y centrado en entidades.
2007 - Segunda versin del motor ORM, incluyendo
el Gestor de Operaciones y Procesos.
2008 - Signum Framework 1.0 Beta 1, incluyendo
las funcionalidades de ORM, WPF y LINQ.
2009 - Release de Signum Framework 1.0 en Codeplex.
2010 - Signum Framework 2.0 Beta 1, con soporte
para .Net Framework 4 y ASP.Net MVC 2.0 (versin interna).
2011 - Signum Framework 2.0 Beta 2, con soporte
para ASP.Net MVC 3.0 (versin interna).
2011 - Release de Signum Framework 2.0, incluyendo soporte para .Net Framework 4 y ASP.Net
MVC 3.0
Soporta joins.
Captulo 187
187.4 Referencias
187.1 Origen del nombre
187.5 Bibliografa
El origen del nombre, Simple Network Library, puede 187.5.1 Documentacin de SNL
considerarse como un guio a la biblioteca Simple DirectMedia Layer, SDL, ya que como se puede observar
Jess Hernndez Gormaz (2009). Documentacion de
las siglas solo varan de una D, SDL, a una N, SNL. Esto
SNL (1). p. 2.
es debido a que al igual que SDL es ampliamente usada
para el desarrollo de videojuegos, especialmente de videojuegos que sean software libre, SNL se cre con la
187.6 Enlaces externos
intencin de facilitar el desarrollo y programacin de videojuegos multijugador en red an ms de lo que pueda
www.snl.ya.st - Pgina ocial de SNL (en esperanto,
facilitarlo otras bibliotecas como SDL Net, de forma que
espaol e ingles).
el trabajo de el programador con los sockets y la labor
de conseguir Multiplexacin, para que un servidor pueda atender a varios clientes de forma no bloqueante, sea
lo sucientemente sencillo para que el programador no
pierda tiempo en la comunicacin que podra invertir en
el juego en si.
348
Captulo 188
Smarty
Smarty es un motor de plantillas para PHP, es decir, separa el cdigo PHP, como lgica de negocios, del cdigo
HTML, como lgica de presentacin, y genera contenidos web mediante la colocacin de etiquetas Smarty en un
documento. Se encuentra bajo la Licencia Pblica General Reducida de GNU.
index.tpl
350
188.4 Referencias
188.5 Enlaces externos
Sitio web ocial
Documentacin en espaol
Problemas con Smarty
Captulo 189
Snippet
Snippet es un trmino del idioma ingls utilizado en programacin para referirse a pequeas partes reusables de
cdigo fuente, cdigo binario o texto. Comnmente son
denidas como unidades o mtodos funcionales que se
pueden integrar fcilmente en mdulos mucho ms grandes, aportando funcionalidad. Tambin se utiliza la palabra para referirse a la prctica de minimizar el uso de
cdigo repetido que es comn en muchas funciones, por
medio del uso de un solo mtodo que pueda ser reutilizado. (No te repitas).
189.1
Rich snippets
Los rich snippets son etiquetas de cdigo HTML utilizados por los programadores web para facilitar mayor informacin acerca del contenido de una web a los buscadores. La relacin de etiquetas existentes en la actualidad,
se puede encontrar en Schema.org.
351
Captulo 190
Stack Overow
Stack Overow es un sitio web desarrollado por Je Att- 190.3 Moderacin
wood, este sitio web es utilizado por una comunidad de
desarrolladores informticos, en la cual otros desarrolla- Hasta enero del 2012, Stack Overow tena un registro de
dores pueden encontrar soluciones a problemas de pro- 771.000 usuarios registrados, y 12 moderadores, en programacin en diferentes lenguajes.* [2]
medio, cada moderador tena gestionar 64250 usuarios y
sus actividades.
190.2 Reputacin
Stack Overow posee un aspecto interesante, la reputacin, este trmino es destacado de acuerdo a la cantidad de votos que poseen las preguntas y las respuestas,
a mayor cantidad de votos relevantes o aciertos, mayor
es la reputacin en el sitio web. De hecho, el nmero de
votos es un indicador para muchos aspectos, entre estos
tenemos:
1. Conanza de los usuarios.
190.4 Estadsticas
Un estudio en 2013 encontr que el 77% de los usuarios
slo hacen una pregunta, el 65% solamente responden a
una pregunta, y slo el 8% de los usuarios responden a
ms de 5 preguntas.* [3] A partir de 2011, el 92% de las
preguntas fueron contestadas en un tiempo medio de 11
minutos.* [4] Desde 2013, el software de red Stack Exchange elimina automticamente las preguntas que cumplen con ciertos criterios, entre ellos el no tener respuestas
en una cierta cantidad de tiempo.* [5]
A partir de agosto de 2012, 443.000 de los 1,3 millones
de usuarios registrados haban respondido al menos una
pregunta, y de ellos, unos 6.000 (0,46% del nmero total de usuarios) se haba ganado una puntuacin de reputacin superior a 5000.* [6]La Reputacin se puede ganar
ms rpido contestando a preguntas relacionadas con las
etiquetas con menor densidad de conocimientos, el hacerlo con prontitud (en particular, siendo la primera persona
en contestar una pregunta), estar activo durante las horas
de menor uso, y contribuyendo a diversas reas.* [7]
2. Habilidades de comunicacin.
[1] Stack Overow ranking alexa.com.
190.4. ESTADSTICAS
353
Captulo 191
StarBasic
StarOce Basic, tambin conocido como StarBasic, es
un dialecto de Basic que Soporta Unicode, incluido en las
Suites de Ocina OpenOce.org y StarOce.
354
Captulo 192
Stub
Un stub es, en el contexto del testeo del software, un trozo de cdigo usado como sustituto de alguna otra funcionalidad. Un stub puede simular el comportamiento de
cdigo existente (tal como un procedimiento en una mquina remota) o ser el sustituto temporal para un cdigo
an no desarrollado. Los stubs son, por tanto, muy tiles para porting, computacin distribuida as como en el
desarrollo y pruebas de software en general.
Un ejemplo de stub en pseudocdigo podra ser como ste:
INICIO Temperatura = LeerTermometro(Afuera) SI
Temperatura > 40 ENTONCES ESCRIBIR Hace calor!" FIN SI FIN INICIO LeerTermometro(Fuente adentroOafuera) RETORNAR 28 FIN LeerTermometro
El pseudocdigo de arriba utiliza la funcin LeerTermometro, que devuelve la temperatura. Aunque se pretende que LeerTermometro obtenga la temperatura de algn dispositivo, la funcin en este momento no contiene el cdigo necesario. LeerTermometro, en esencia, no
simula ningn proceso aunque devuelve un valor legal,
permitiendo as probar aunque sea en parte el programa
principal. Hay que notar tambin que aunque acepta un
parmetro de tipo Fuente para determinar si se va a leer
la temperatura externa o interna, ste no se usa.
Un stub* [1] es una rutina que realmente no hace otra cosa
que declararse a s misma y a los parmetros que acepta
y que devuelve un valor habitual dentro de los 'escenarios felices' del que llama al stub. Los stubs se usan habitualmente como sustitutos de la implementacin an no
nalizada de una interfaz ya denida. El stub contendra
slo el cdigo necesario para que compile y enlace con el
resto del programa.
192.1 Referencias
[1] http://www.webopedia.com/
Stub/mock frameworks for Java Review and comparison of stub & mock frameworks for Java
Captulo 193
Subalgoritmo
Se llama subalgoritmo a cada una de las partes de un
algoritmo ms general que resuelve cada una de las tareas particulares necesarias para que dicho algoritmo general alcance el objetivo para el que fue diseado, es decir resolver un problema. Este concepto est vinculado al
diseo estructurado de algoritmos, en el cual un problema
se divide en partes que posteriormente son resueltas por
un mdulo. Cada mdulo coincidir con un subalgoritmo.
Programacin modular
Subrutina
Captulo 194
Tabla de saltos
En programacin, se denomina tabla de saltos a un m- funciones por su nmero (el ndice en la tabla) pueden
todo eciente de transferencia de control de programas ser tiles en ciertos programas.
saltando a otra parte del cdigo mediante una tabla de
instrucciones de salto. Este sistema es utilizado normalmente en la programacin en ensamblador aunque estas 194.1 Ejemplo
tablas tambin pueden ser generadas por un compilador.
Una tabla de saltos consiste en una lista de instrucciones
de salto incondicional que se ejecutan utilizando un oset
creado mediante la multiplicacin de un ndice secuencial
por la longitud de la instruccin (los bytes que ocupa en
memoria cada instruccin). Se basa en el hecho de que
las instrucciones de salto en cdigo mquina tienen una
longitud ja y pueden ser ejecutadas de forma extremadamente eciente por la mayora del hardware, adems
de ser ms til cuando se trabaja con datos sin formato
fcilmente convertibles a valores secuenciales de ndice.
Dados estos datos, una tabla de saltos suele ser bastante
eciente, siguiendo normalmente estos pasos: validacin
opcional de los datos de entrada, transformacin de los
mismos en un oset dentro de la tabla de saltos (esto suele necesitar multiplicarlos o desplazarlos para su longitud
coincida con las instrucciones de salto) y salto a una direccin obtenida a partir de la base de la tabla y el oset
generado (esta operacin suele incluir la suma del oset
al registro del contador de programa).
Un ejemplo simple del uso de tablas de saltos en ensamblador del microcontrolador PIC de 8 bits es:
194.2 Historia
357
358
en lugar de por una cadena de texto. Esto evita almacenamientos masivos de datos y por consiguientes grandes
tiempos de procesado. Las comparaciones numricas son
signicativamente ms rpidas que las de cadenas de texto, y las bsquedas indexadas son tambin notablemente
ms rpidas que las de cadenas. Sin embargo, entre las
desventajas se incluye la aparicin de un nivel ms de
indireccin. Esto es de poca importancia para los ordenadores, pero supone mayor complejidad de cdigo y de
datos para el programador. Adems, tal y como se pudo ver en el Efecto 2000, esta aproximacin al problema
puede llevar posteriormente a problemas si los requisitos
de espacio para el ndice o la representacin superan a los
reservados para la tarea.
Captulo 195
Tabla de verdad
Una tabla de verdad, o tabla de valores de verdad, Negacin La negacin es un operador que se ejecues una tabla que muestra el valor de verdad de una ta, sobre un nico valor de verdad, devolviendo el valor
proposicin compuesta, para cada combinacin de ver- contradictorio de la proposicin considerada.
dad que se pueda asignar.* [1]
Fue desarrollada por Charles Sanders Peirce por los
aos 1880, pero el formato ms popular es el que introdujo Ludwig Wittgenstein en su Tractatus logicophilosophicus, publicado en 1921.
A
V
F
A
F
V
A
V
F
A
V
F
A
V
V
F
F
B
V
F
V
F
AB
V
V
V
F
360
A
V
V
F
F
B
V
F
V
F
AB
V
F
V
V
n
0
1
2
3
4
5
...
n
Nc
1
2
4
8
16
32
...
2n
Si consideramos que un sistema combinacional de n variables binarias, puede presentar un resultado verdadero:
V, o falso: F, para cada una de las posibles combinaciones
de entrada tenemos que se pueden construir Cp circuitos
posibles con n variables de entrada, donde:
Cp = 22
Equivalencia, doble implicacin o Bicondicional El
bicondicional o doble implicacin es un operador que
funciona sobre dos valores de verdad, tpicamente los valores de verdad de dos proposiciones, devolviendo el valor
de verdad verdadero cuando ambas proposiciones tienen
el mismo valor de verdad, y falso cuando sus valores de
verdad son diferentes.
La tabla de verdad del bicondicional es la siguiente:
A
V
V
F
F
B
V
F
V
F
AB
V
F
F
V
n
0
1
2
3
4
5
...
n
Cp
2
4
16
256
65. 536
4. 294.967.296
...
n
22
Para componer una tabla de verdad, pondremos las n variables en una lnea horizontal, debajo de estas variables
desarrollamos las distintas combinaciones que se pueden
formar con V y F, dando lugar a la distintas Nc, nmero de combinaciones. Normalmente solo se representa la
Que se corresponde con la columna 7 del algoritmo fun- funcin para la que se confecciona la tabla de verdad, y en
damental.
todo caso funciones parciales que ayuden en su clculo,
en la gura, se pueden ver todas las combinaciones posibles Cp, que pueden darse para el nmero de variables
dado.
N c = 2n
el nmero de combinaciones que se pueden dar con n variable, cada una de las cuales puede tomar uno entre dos
valores lgicos es de dos elevado a n, esto es, el nmero de combinaciones: Nc, tiene crecimiento exponencial
respecto al nmero de variable n:
Nc
A B
1 2 3 4 5 6 7
V
V
F
F
V
V
V
V
V
F
V
F
V
V
V
F
V
V
F
V
V
V
F
F
V
F
V
V
V
F
V
F
V
F
F
V
361
Considrese adems a "" como una operacin o funcin
lgica que realiza una funcin de verdad al tomar los valores de verdad de A y de B, y devolver un nico valor de
verdad. Entonces, existen 16 funciones distintas posibles,
y es fcil construir una tabla que muestre qu devuelve cada funcin frente a las distintas combinaciones de valores
de verdad de A y de B.
195.2.2
El caso de una variable binaria, que puede presentar dos Las tablas nos maniestan los posibles valores de verdad
combinaciones posibles: Nc=2, con 4 circuitos posibles: de cualquier proposicin molecular, as como el anlisis
de la misma en funcin de las proposicones que la inteCp=4.
gran, encontrndonos con los siguientes casos:
A
V
V
F
F
B
V
F
V
F
Una columna (columna 5) en la que se establecen los valores resultantes de aplicar la denicin de la conjuncin
entre los valores de A (columna 1) y valores de la columna
B C , (columna 4) que representarn los valores de la
proposicin completa A (B C) , cuyo valor de ver-
362
dad es V o F segn la la de los valores de A, B, y C que No obstante la sencillez del algoritmo, aparecen dos diconsideremos. (Columnas 1,4 5)
cultades.
Donde podemos comprobar cundo y por qu la proposicin A (B C) es V y cundo es F.
195.3.2
Contradiccin
Se entiende por proposicin contradictoria, o contradic Que nicamente ser aplicable a un esquema de incin, aquella proposicin que en todos los casos posibles
ferencia, o argumento cuando la proposicin condide su tabla de verdad su valor siempre es F. Dicho de otra
cionada, como conclusin, sea previamente conociforma, su valor F no depende de los valores de verdad de
da, al menos como hiptesis, hasta comprobar que
las proposiciones que la forman, sino de la forma en que
su tabla de verdad maniesta una tautologa.
estn establecidas las relaciones sintcticas de unas con
otras. Sea el caso:
Por ello se construye un clculo mediante cadenas deductivas:
Las proposiciones que constituyen el antecedente del esquema de inferencia, se toman como premisas de un arProcederemos de manera similar al caso anterior. Par- gumento.
tiendo de la variable A y su contradiccin, la conjuncin Se establecen como reglas de clculo algunas tautologas
de ambos siempre es falso, dado que si A es verdad su como tales leyes lgicas, (pues garantizan, por su carcter
contradiccin es falsa, y si A es falsa su contradiccin es tautolgico, el valor V).
verdad, la conjuncin de ambas da falso en todos los caSe permite la aplicacin de dichas reglas como reglas de
sos.
sustitucin de frmulas bien formadas en las relaciones
que puedan establecerse entre dichas premisas.
A A
195.3.3
Tautologas
Deduciendo mediante su aplicacin, como teoremas, todas las conclusiones posibles que haya contenidas en las
Se entiende por proposicin tautolgica, o tautologa, premisas.
aquella proposicin que en todos los casos posibles de su
tabla de verdad su valor siempre es V. Dicho de otra for- Cuando en un clculo se establecen algunas leyes como
ma, su valor V no depende de los valores de verdad de principios o axiomas, el clculo se dice que es axiomtico.
las proposiciones que la forman, sino de la forma en que El clculo lgico as puede utilizarse como demostracin
estn establecidas las relaciones sintcticas de unas con argumentativa.
otras. Sea el caso:
A A
Siguiendo la mecnica algortmica de la tabla anterior
construiremos su tabla de verdad, tenemos la variable A
en disyuncin con su contradiccin, si A es verdad, su negacin es falsa y si A es falsa su negacin es verdad, en
cualquier caso una de las dos alternativas es cierta, y su
disyuncin es cierta en todos los casos.
195.5 Aplicaciones
195.5.1 Clculo lgico
La aplicacin fundamental se hace cuando se construye
un sistema lgico que modeliza el lenguaje natural sometindolo a unas reglas de formalizacin del lenguaje. Su
aplicacin puede verse en el clculo lgico.
195.5. APLICACIONES
363
El primer caso en una funcin lgica que para todas las
posibles combinaciones de A y B, el resultado siempre es
verdadero, es un caso de tautologa, su implementacin
en un circuito es una conexin ja.
V
Caso 2
Los valores de entrada o no entrada de corriente a travs de un diodo pueden producir una salida 0 1 segn
las condiciones denidas como funcin segn las tablas A B
mostradas anteriormente.
Caso 3
As se establecen las algunas funciones bsicas: AND,
NAND, OR, NOR, XOR, XNOR (o NXOR), que se coEn el tercer caso es verdad si A es verdad y cuando A y
rresponden con las funciones denidas en las columnas 8,
B son falsos el resultado tambin es verdad.
9, 2, 15, 10 y 7 respectivamente, y la funcin NOT.
Su funcin seria:
En lugar de variables proposicionales, considerando las
posibles entradas como EA y EB, podemos armar una
tabla anloga de 16 funciones como la presentada arriba,
A B
con sus equivalentes en lgica de circuitos.
Esta aplicacin hace posible la construccin de aparatos
Caso 4
capaces de realizar estas computaciones a alta velocidad,
y la construccin de circuitos que utilizan este tipo de En el cuarto caso la funcin es cierta si A es cierta, los
anlisis se hace por medio de puertas lgicas.
posibles valores de B no inuyen en el resultado.
La Tabla de la verdad es una herramienta imprescindible La funcin solo depende de A:
en la recuperacin de datos en las bases de datos como
Internet con los motores de bsqueda o en una biblioteca
con sus cheros informatizados. As mismo se utilizan
para programar simulaciones lgicas de inteligencia arti- A
cial con lenguajes propios. Tambin en modelos mate Caso 5
mticos predictores: meteorologa, marketing y otros muchos.
En el quinto caso si A es falso el resultado es verdadero,
y si A y B son verdaderos el resultado tambin es verdadero, puede verse que este caso es idntico al tercero
195.5.3 Desarrollo del algoritmo funda- permutando A por B.
Y si funcin es:
AB =AB
Caso 6
En el sexto caso la funcin es cierta si B es cierta, los
valores de A no inuyen en el resultado.
La funcin solo depende de B:
364
Caso 7
El sptimo caso corresponde a la relacin bicondicional En el caso decimotercero podemos ver que el resultado
entre A y B, el resultado solo es verdad si A y B son ambos es el opuesto de A, independientemente del valor de B:
verdad o si A y B son ambos falsos.
(A B) ( A B) = A B
Caso 8
A
Caso 14
En el octavo caso el resultado es verdad si A y B son verdad, en el resto de los valores de A y B el resultado es
falso, corresponde a la conjuncin de A y B, equivalente
a un circuito en serie.
Caso decimocuarto, el resultado de la funcin solo es verdad si A es falso y B verdadero, luego es equivalente a un
circuito en serie de A en conexin inversa y de B en conexin directa.
AB
AB
Caso 9
Caso 15
En el noveno caso el resultado solo es falso si A y B son En el caso decimoquinto, el resultado solo es verdad si A
verdad, en el resto de los valores de A y B el resultado es y B son falsos, Luego es necesario que tanto A como B
verdadero, corresponde a la disyuncin de la negacin A y sean falsos para que el resultado sea verdadero.
de B, equivalente a un circuito en paralelo de conexiones
inversas.
A B
A B
Caso 16
Caso 10
Por ltimo en el caso decimosexto, tenemos que el resultado siempre es falso independientemente de los valores
Podemos ver que el dcimo caso es lo opuesto a la bide A o de B.
condicional, solo es verdad si A y B discrepan, si A y B
son diferentes el valor es verdad, si A y B son iguales el
resultado es falso.
F
(A B) ( A B)
Caso 11
En este caso podemos ver que cuando B es verdad el resultado es falso y que cuando B es falso el resultado es
verdadero, independientemente del valor de A, luego la
funcin solo depende de B, en sentido inverso.
B
Caso 12
En el caso doce, vemos que solo hay un combinacin de
A y B con resultado verdadero, que es A y la negacin de
B.
Clculo lgico
Lgica binaria
Lgica proposicional
Puerta lgica
Funcin lgica
A B
Funcin de verdad
365
Captulo 196
Thunk
Thunk es un trmino usado en la jerga del desarrollo de
software que designa la llamada o invocacin a un cdigo
que pertenece a otra plataforma o a otro Framework. En
el paso de 16 a 32 bit por ejemplo, los sistemas operativos
(OS/2, Windows NT etc.) podan resolver cdigo de 16
bit a travs de la transformacin de los parmetros de llamadas y direcciones, de modo tal que fue posible seguir
utilizando los programas de 16 bit.
196.3 Bibliografa
Captulo 197
367
Captulo 198
Tringulo de Floyd
El Tringulo de Floyd, llamado as en honor a Robert
Floyd, es un tringulo rectngulo formado con nmeros
naturales. Para crear un tringulo de Floyd, se comienza con un 1 en la esquina superior izquierda, y se contina escribiendo la secuencia de los nmeros naturales de
manera que cada lnea contenga un nmero ms que la
anterior:
198.3 Referencias
Una de los ejercicios ms comunes en los cursos de introduccin a la programacin de ordenadores consiste en
escribir un pequeo programa que produzca este tringulo.* [1]* [2] El tringulo de Floyd tiene varias propiedades
matemticas interesantes. Los nmeros del cateto de la
parte izquierda forman la secuencia de los nmeros poligonales centrales, mientras que los de la hipotenusa nos
dan el conjunto de los nmeros triangulares. La suma de
los nmeros de la lnea n equivale a n(n2 + 1)/2 (sucesin
A006003 en OEIS).
[1] Keller, Arthur M. (1982), A rst course in computer programming using PASCAL, McGraw-Hill, p. 39.
[2] Peters, James F. (1986), Pascal with program design, Holt,
Rinehart and Winston, pp. 137, 154.
Captulo 199
Tubera (informtica)
La comunicacin por medio de tuberas se basa en la interaccin productor/consumidor, los procesos productores (aquellos que envan datos) se comunican con los
procesos consumidores (que reciben datos) siguiendo un
orden FIFO. Una vez que el proceso consumidor recibe
un dato, ste se elimina de la tubera.
369
370
Pleca
Captulo 200
Violacin de acceso
Se dene como violacin de acceso (violacin del segmento o access violation y segmentation fault en Ingls)
al intento fallido de acceso a informacin o a programas
a los que no se tiene autorizacin para ver o modicar.
Este mensaje puede ser causado por la conguracin de
software, por los programadores o por falla de hardware,
siendo los ms comunes los 2 primeros.
Con los sistemas operativos actuales, cada proceso tiene
uno o ms segmentos de la memoria del sistema donde
puede almacenar y recuperar la informacin. Cada proceso puede solicitar ms o menos memoria (segn lo necesitado), y la peticin ser reconocida por el sistema operativo y comparada con la seccin de memoria concedida
para el proceso. Generalmente, el proceso que solicit la
memoria es el nico que puede leerla o modicarla.
Una violacin de acceso ocurre cuando un proceso trata
de acceder a una parte de la memoria asignada a otra aplicacin, o a una rea no usada de la memoria, no teniendo los permisos para hacerlo. Normalmente se produce
como resultado de un error de programacin, por ejemplo, un puntero descarriado. Otra forma en que podra
producirse unsegmentation faultes con una memoria
daada fsicamente, puesto que algn programa escribir
en la memoria, luego intentar acceder a esos datos, pero al tener una falla la memoria, es posible que los datos
se hayan borrado, por ende el programa considerar esa
direccin de memoria como vaca, o sea no usada, con lo
que arrojar el error.
371
Captulo 201
Waf
Waf es una herramienta que ayuda a congurar automticamente la compilacin y la instalacin de otros programas o bibliotecas (build).
201.1 Funciones
General
Busca archivos fuente de forma inteligente para facilitar el mantenimiento del script .
Requerimientos
No requiere instalacin: el script WAF (menos de 201.2 Historia
100KB) puede ser distribuido y utilizado directamente.
Era alrededor del ao 2005, el proyecto KDE us durante mucho tiempo el Autotools como su principal sistema
Slo necesita a Python como dependencia externa.
de construccin. Autotools tiene una arquitectura que es
difcil de comprender, y ha sido apodadoauto-inerno
No requiere sh (a diferencia de GNU Autotools).
.,* [1] en KDE estaban considerando la posibilidad de pa No requiere de conocimientos acerca de M4 (a di- sar de Autotools a SCons.
ferencia de GNU Autotools).
Thomas Nagy haba creado una herramienta de construccin automatizada llamada BKsys que fue diseada para
Soporte de lenguajes:
colocarse encima de SCons, proporcionando mayor nivel
de funcionalidad similar a la de autotools. Cuando Thomas Nagy decide que los problemas fundamentales de
Preprocesador de dependencias C/C++.
SCons (sobre todo la mala escalabilidad) eran demasia Soporte para programas hbridos en OCaml, en pro- do complejos y requeran mucho tiempo para arreglarse,
gramas de GNOME.
comienza una reescritura completa llamada Waf.
Soporte para el lenguaje de programacin D (tanto Waf fue objeto de un poco de atencin cuando el proyecto en KDE decidieron utilizar BKsys (y ms tarde WAF)
GDC y dmd son compatibles).
como su principal sistema de construccin, aunque ms
Proyectos escritos en vala son soportados ( como tarde, esa decisin fue revocada en favor de CMake porVal(a)IDE ).
que BKsys no pudo resolver los problemas de SCons, y
Waf todava estaba en una fase muy temprana de desaOtros:
rrollo (pre-alfa) en ese momento.* [1]
372
201.5 Referencias
[1] Por qu el proyecto KDE cambi a CMake(ingles)
373
Captulo 202
[1]
Captulo 203
Wrapper
203.1 Computacin
Funcin wrapper, una funcin cuyo principal propsito es llamar a otra funcin.
Biblioteca wrapper
Driver wrapper, software que funciona como
un adaptador entre un sistema operativo y un
driver.
Patrn Wrapper, donde algunos cdigos de
programacin permiten que ciertas clases trabajen juntas, lo que no sera posible de otra
forma.
Clase wrapper, trmino de computacin que se reere a una clase Java en programacin orientada a
objetos.
TCP Wrapper, software usado para ltrar el acceso
a la red.
Wrapper (Minera de datos), tcnica usada en la minera de datos.
203.3 Referencias
Esta obra deriva de la traduccin parcial de Wrapper
de Wikipedia en ingls, concretamente de esta versin del 15 de mayo de 2014, publicada por sus editores bajo la Licencia de documentacin libre de
375
Captulo 204
XAML
XAML (acrnimo pronunciado xammel del ingls
eXtensible Application Markup Language, Lenguaje Extensible de Formato para Aplicaciones en espaol) es el
lenguaje de formato para la interfaz de usuario para la
Base de Presentacin de Windows (WPF por sus siglas en
ingls) y Silverlight(wpf/e), el cual es uno de lospilares
de la interfaz de programacin de aplicaciones .NET en
su versin 3.0 (conocida con anterioridad con el nombre
clave WinFX).
En su uso tpico, los archivos tipo XAML seran producidos por una herramienta de diseo visual, como
Microsoft Visual Studio o Microsoft Blend. El XML resultante es interpretado en forma instantnea por un subsistema de despliegue de Windows que reemplaza al GDI
de las versiones anteriores de Windows. Los elementos de
XAML se interconectan con objetos del Entorno Comn
de Ejecucin para Lenguajes. Los atributos se conectan
con propiedades o eventos de esos objetos.
204.2 Ejemplos
Este ejemplo en XAML muestra un textoHola Mundo!"
dentro de un contenedor del tipo Canvas.
<Canvas
xmlns="http://web.archive.org/web/http:
//schemas.microsoft.com/client/2007"
xmlns:x=\_
_xunadd_text_character:nN{\textquotedbl}{"}{}http:
//web.archive.org/web/http://schemas.microsoft.
com/winfx/2006/xaml">
<TextBlock>Hola
Mundo!</TextBlock> </Canvas>
204.1 Tecnologa
Un archivo XAML puede ser compilado para obtener un
archivo binario XAML .baml, el cual puede ser insertado
376
Adobe Flex
JavaFX
204.4 Referencias
204.5 Enlaces externos
Microsoft Expression
Blog del Equipo de Silverlight (espaol)
Blog del Equipo de Expression(espaol)
Informacin general sobre XAML
United XAML Initiative - Alternativas a XAML de
cdigo libre.
Editor XAML gratuito - Aurora
377
Captulo 205
Zenphp
205.1 Qu es zenphp?
zenphp es un completo framework con cdigo fuente,
comentarios y documentacin en espaol. Hace las tareas de creacin de aplicaciones, no slo para la web,
ms sencillas gracias al patrn MVC modicado, y una
jerarqua que conecta los componentes de forma que cada parte es accesible mediante variables "$padre. Est
desarrollado en PHP 4 y 5, de forma que es compatible
con la mayor parte de los servidores web. Ha sido probado en numerosos proyectos reales. Es posible usarlo para
conectar con sistemas gestores de bases de datos como
MySQL, PostgreSQL, Oracle o Microsoft SQL Server.
Se puede ejecutar por tanto en plataformas *nix (Unix,
Linux, etc.) como en plataformas Windows. Hace uso
de varios lenguajes de programacin:HTML, XHTML,
CSS, JavaScript, PERL(CGI), AJAX, PHP, Gtk y XML
Se llama zen PHP porque no slo simplicamucho
el cdigo sino que es llevado con la mxima concentracin y poco a poco, cada vez ms lejos, en cada versin,automticamente, instantneamente se van generando nuevas lneas de trabajo...
205.2 Qu
ventajas
zenphp?
ofrece
378
379
Texto
Programacin Fuente: https://es.wikipedia.org/wiki/Programaci%C3%B3n?oldid=87243057 Colaboradores: Youssefsan, EL Willy, Soniautn, Sabbut, Moriel, Josmanbernal, Sauron, ManuelGR, Sanbec, Javier Carro, Dodo, Ejmeza, Fortran~eswiki, Ascnder, Rsg, Tostadora,
Tano4595, Fernandomirandamuro, Jecanre, Pablomdo, Cinabrium, Porao, Elsenyor, Renabot, Richy, FAR, Mejiad, Mendocino, Digigalos,
Sicarul, Airunp, Edub, Emijrp, Magister Mathematicae, Viko~eswiki, Guanxito, Murven, Unf, Mikel Gmez, Dromero, Yrbot, Vitamine,
BOTijo, Ivancp, GermanX, Jyon, Gaijin, Quiron, The Photographer, Lucascr, Jesuja, Tigerfenix, Eduardo Lima, Gtz, Morza, Ciencia Al
Poder, Cheveri, Chlewbot, Tomatejc, Zanaqo, Rbonvall, Electrican MV, Jstitch, BOTpolicia, Qwertyytrewqqwerty, CEM-bot, Jorgelrm,
Krli2s, Laura Fiorucci, Chabacano, X.Cyclop, Retama, Rosarinagazo, Antur, Dorieo, Thijs!bot, Esoya, Alvaro qc, Jonpagecr, RoyFocker,
Isha, Rrmsjp, JAnDbot, Jugones55, Cmontero, Kved, Pmisiones, Mansoncc, Bboccioz, NaBUru38, Humberto, Netito777, Xsm34, Marvelshine, Nioger, Chabbot, Plux, Biasoli, AchedDamiman, Snakeyes, Technopat, Matdrodes, Autonomia, Fernando Estel, Elabra sanchez, Lic.
Armando, BlackBeast, Shooke, Lucien leGrey, Sdfk, Dinopmi, Gerakibot, SieBot, Ctrl Z, Cousteau, Ortellado, Manw, Correogsk, 3xxx,
Mafores, Yonseca, Tirithel, Jarisleif, Javierito92, Amorde2, Eduardosalg, Leonpolanco, Botito777, Petruss, Aliuk, Moucaisius, JMDC,
UA31, SergioN, AVBOT, David0811, Diegusjaimes, IATG, Jjorescueto, CarsracBot, HerculeBot, Arjuno3, Andreasmperu, Luckas-bot,
Jaromero, Cata11, Roinpa, Bifus, Jotterbot, Vitucho3005, ArthurBot, SuperBraulio13, Xqbot, Jkbw, NeoTommy, Serolillo, Pedrovicenterosero, Voetius, Chester269, Albertochoa, Torrente, Botarel, BenzolBot, Stuy, MauritsBot, TigreVMMM, MAfotBOT, Gusbelluwiki,
Linux65, RedBot, KamikazeBot, Slashcsc, Dinamik-bot, Angelito7, Ripchip Bot, Tarawa1943, GrouchoBot, EmausBot, Savh, HRoestBot,
Sergio Andres Segovia, Fabian Rod, Rubpe19, Jcaraballo, ChuispastonBot, Merryt, Waka Waka, WikitanvirBot, Upc, RobotEducativo,
Renly, Communities, AvicBot, Sebrev, Travelour, Acratta, Brainup, LlamaAl, EnzaiBot, Helmy oved, DavidUlquiorra, MaKiNeoH, Ovallesoft, Xx.the.samuel.xx, Ivanretro, Addbot, Balles2601, Advarg, Tenganmemiedo, Qwerty asdfg zxcvb, Eliazibh Bojorquez, MrCharro,
Jarould, Eurodyne, Sapristi1000, Castillo.melanii y Annimos: 437
Portal:Programacin Fuente: https://es.wikipedia.org/wiki/Portal%3AProgramaci%C3%B3n?oldid=68731535 Colaboradores: Emijrp,
Jesuja, Bienchido, AchedDamiman, VolkovBot, Shooke, PaintBot, KLBot2, MetroBot, Addbot y Annimos: 1
& Fuente: https://es.wikipedia.org/wiki/%26?oldid=87472056 Colaboradores: Josemoya, Rosarino, Cookie, Tano4595, Rodrigouf,
M3c4n0, Edupedro, Jo-Con-El, Taichi, Emijrp, LP, Kenedhor, Orgullobot~eswiki, RobotQuistnix, Platonides, Caiserbot, Amads, BOTSuperzerocool, YurikBot, Martingala, Armin76, KnightRider, Kazahana, No s qu nick poner, Ephraim33, DivByZ, Faelomx, Futbolero, Cerato, SaulPerdomo, Qwertyytrewqqwerty, Nethac DIU, CEM-bot, Jorgelrm, Al2, Corbu, Araltor, Penquista, Rastrojo, Antur, D.o,
Thijs!bot, Zigurat, JAnDbot, Mansoncc, TXiKiBoT, Aalvarez12, Humberto, Guillermo D.~eswiki, Rei-bot, Chabbot, Plux, Bucephala,
Aibot, Vicdesan, Technopat, Lahi, DRMProd, Matdrodes, RandomJambo, Muro Bot, Edmenb, SieBot, Bigsus-bot, BOTarate, Ceat 700,
Greek, Tirithel, Farisori, Eduardosalg, TronaBot, Petruss, Osado, Purbo T, Abajo estaba el pez, AVBOT, LucienBOT, Marifernan, Lampsako, Luckas-bot, 67wkii, Almabot, Jkbw, Cally Berry, TobeBot, Alph Bot, GrouchoBot, AVIADOR, WikitanvirBot, Serlack, KLBot2,
Bibliolotranstornado, Stramin, Ralgisbot, Thegastiinthedark, Jarould, ~Expresses life y Annimos: 68
Acoplamiento secuencial Fuente: https://es.wikipedia.org/wiki/Acoplamiento_secuencial?oldid=65390358 Colaboradores: Kavanagh,
Hctor Guido Calvo, Invadibot, Dalbela y Addbot
Adobe Director Fuente: https://es.wikipedia.org/wiki/Adobe_Director?oldid=79460596 Colaboradores: BOT-Superzerocool, BOTijo,
FedericoMP, Sinopsis, Boja, Faelomx, BOTpolicia, Mampato, CEM-bot, Laura Fiorucci, Muro de Aguas, JoseA, Rei-bot, Plux, VolkovBot, Muro Bot, SieBot, Pedro Felipe, Ivgarci, Mit3d, Alecs.bot, Alexbot, Orgullo Illustrator, Spider pig, BotSottile, AVBOT, Diegusjaimes, MelancholieBot, Luckas-bot, Wikisilki, Dangelin5, Ortisa, AstaBOTh15, EmausBot, Grillitus, Ruos, MerlIwBot, KLBot2,
Elvisor, Helmy oved, Ralgisbot, Digmin3 y Annimos: 19
Anidamiento (informtica) Fuente: https://es.wikipedia.org/wiki/Anidamiento_(inform%C3%A1tica)?oldid=72430597 Colaboradores:
Muro Bot, Poco a poco, Dangelin5, MaxBech1975, Patasik, EmausBot, KLBot2, Gins90, Harpagornis y Annimos: 3
Antipatrn de diseo Fuente: https://es.wikipedia.org/wiki/Antipatr%C3%B3n_de_dise%C3%B1o?oldid=87450852 Colaboradores: Pacoqueen, Vanbasten 23, Rosarino, Fortran~eswiki, Ascnder, Tostadora, Porao, Benjavalero, Renabot, RobotQuistnix, YurikBot, GermanX, KnightRider, Dmlambea~eswiki, Cad, Zoid, CEM-bot, Davius, Thijs!bot, Yeza, Kavanagh, Gitano.canalla, Pvent, Kijote, PJTraill,
VolkovBot, Jarm.yo, Technopat, Lauramcastro, SieBot, Ozewi, Pablo323, BetoCG, Zeliq, BotSottile, Diegusjaimes, Amirobot, Ptbotgourou, Vic Fede, Xqbot, Silvioq, AstaBOTh15, Enrique Cordero, ArwinJ, Xiidarkevil, EmausBot, ZroBot, WikitanvirBot, MovGP0,
KLBot2, MetroBot, Addbot y Annimos: 44
Archivo de cabecera Fuente: https://es.wikipedia.org/wiki/Archivo_de_cabecera?oldid=84684202 Colaboradores: Sabbut, Basquetteur,
CEM-bot, BlackSalamander, Cratn, Isha, JAnDbot, TXiKiBoT, Phirosiberia, Muro Bot, MaSt, Poco a poco, Kroji, MastiBot, Angel GN,
DumZiBoT, Luckas-bot, Marioxcc, SuperBraulio13, Xqbot, Jkbw, Panderine!, KamikazeBot, Mr.Ajedrez, Sergio Andres Segovia, Grillitus,
Hoo man, MerlIwBot, Elvisor, Addbot y Annimos: 15
Asercin (informtica) Fuente: https://es.wikipedia.org/wiki/Aserci%C3%B3n_(inform%C3%A1tica)?oldid=87499440 Colaboradores:
Robbot, BOT-Superzerocool, GermanX, Escarbot, Fabeirojorge, Carmin, Poco a poco, MystBot, Alph Bot, Waeswaes, EmausBot, ZroBot,
KLBot2, Bibliolotranstornado, Elvisor y Annimos: 5
Automatizacin de tareas Fuente: https://es.wikipedia.org/wiki/Automatizaci%C3%B3n_de_tareas?oldid=74686365 Colaboradores:
CF, Walking Mind, Technopat, BlackBeast, PaintBot, M S, Farisori, Diegusjaimes, DiegoFb, Victor carmonag, Jkbw, Khavas, RodolfoLay
y Annimos: 5
Base de cdigo Fuente: https://es.wikipedia.org/wiki/Base_de_c%C3%B3digo?oldid=86838733 Colaboradores: GermanX, CEM-bot y
KLBot2
Bean Fuente: https://es.wikipedia.org/wiki/Bean?oldid=84356720 Colaboradores: Pilaf, Sunsinron, Robotico, Soulreaper, Taichi, FlaBot,
Rosarinagazo, Desert69, Kved, VolkovBot, Carmin, Umondri, PatruBOT, Canyq, Goica, Dark Bane, HRoestBot, ChuispastonBot, Addbot
y Annimos: 26
Beta tester Fuente: https://es.wikipedia.org/wiki/Beta_tester?oldid=77021285 Colaboradores: SimnK, Digigalos, FlaBot, Varano, Vitamine, GermanX, Smrolando, Nethac DIU, CEM-bot, Marianov, Madoks, JAnDbot, TXiKiBoT, Krun00, Mstreet linux, Muro Bot, Fadesga,
UA31, AVBOT, MastiBot, Ezarate, Arjuno3, Hoenheim, SuperBraulio13, Jkbw, Ignasi Gorina, Irak Gaitn, Addbot, BOTito y Annimos:
10
380
Bifurcacin (sistema operativo) Fuente: https://es.wikipedia.org/wiki/Bifurcaci%C3%B3n_(sistema_operativo)?oldid=83423061 Colaboradores: Yearofthedragon, Niqueco, Chobot, FlaBot, Qwertyytrewqqwerty, TXiKiBoT, VolkovBot, Shooke, PaintBot, Diegusjaimes,
Ptbotgourou, DiegoFb, Kizar, ZroBot, ChessBOT, MerlIwBot, KLBot2, Martin Ariel Ramirez, Porrasporrasporras y Annimos: 11
Binding Fuente: https://es.wikipedia.org/wiki/Binding?oldid=79485676 Colaboradores: Robbot, Loco085, Airunp, Genba, Yrbot, Beto29,
CEM-bot, Thijs!bot, Gusgus, Segedano, Aika~eswiki, Synthebot, Muro Bot, Farisori, Jerowiki, Diamondland, MerlIwBot, KLBot2, Elvisor,
Addbot, Hipocamp15 y Annimos: 8
Bloqueo mutuo Fuente: https://es.wikipedia.org/wiki/Bloqueo_mutuo?oldid=74685861 Colaboradores: Sabbut, Moriel, Sauron, Vanbasten 23, Dodo, Sms, Niqueco, Hari Seldon, Rembiapo pohyiete (bot), RobotQuistnix, Francosrodriguez, Superzerocool, Caiserbot, Yucon, Yrbot, BOT-Superzerocool, Martincarr, YurikBot, GermanX, Gothmog, Tigerfenix, Eskimbot, CEM-bot, Isha, Dogor, JAnDbot,
TXiKiBoT, Rei-bot, NaSz, VolkovBot, Matdrodes, Estirabot, Leonpolanco, Alexbot, BotSottile, AVBOT, Luckas-bot, Amirobot, Jkbw,
AstaBOTh15, D'ohBot, PatruBOT, Waeswaes, EmausBot, ZroBot, Elvisor, Legobot, Ideator 2.0 y Annimos: 21
Bodyshopping Fuente: https://es.wikipedia.org/wiki/Bodyshopping?oldid=80659893 Colaboradores: SimnK, Yrbot, Varano, Olea,
CEM-bot, Tortillovsky, Isha, Phirosiberia, Rolloqui, Muro Bot, Diegusjaimes, Marcomogollon, Caritdf, Grillitus, Johnbot, Elvisor y Annimos: 12
BrookGPU Fuente: https://es.wikipedia.org/wiki/BrookGPU?oldid=68993723 Colaboradores: Boticario, CEM-bot, Montgomery, Filiprino, VolkovBot, Alexbot, Krysthyan, AVBOT, Bethan 182, InaBOT, MerlIwBot, KLBot2, Elvisor, EduLeo y Annimos: 3
Caja blanca (sistemas) Fuente: https://es.wikipedia.org/wiki/Caja_blanca_(sistemas)?oldid=85453584 Colaboradores: Carutsu, Xexito,
Cinevoro, Robertorp, Espilas, Nicop, Farisori, VkN, UA31, AVBOT, Angel GN, KLBot, MerlIwBot, KLBot2, YeltFlor y Annimos: 11
Caja negra (sistemas) Fuente: https://es.wikipedia.org/wiki/Caja_negra_(sistemas)?oldid=85423326 Colaboradores: Oblongo, Jesuja,
Davius, Tortillovsky, Amire80, JAnDbot, VolkovBot, Synthebot, Muro Bot, Feministo, Loveless, David.Horat, XalD, Cyborg ar, Alejandro
Lodes, UA31, AVBOT, Diegusjaimes, CarsracBot, Luckas-bot, Ptbotgourou, DiegoFb, Botarel, MondalorBot, PatruBOT, Dinamik-bot,
Angelito7, Foundling, Wikilptico, EmausBot, HRoestBot, WikitanvirBot, MerlIwBot, KLBot2, TeleMania, Elvisor, MahdiBot, AS-W,
BOTito, Jarould, Crystallizedcarbon y Annimos: 33
CamelCase Fuente: https://es.wikipedia.org/wiki/CamelCase?oldid=80299007 Colaboradores: Robbot, Miuler, Ascnder, Fernandomirandamuro, Fleam, Emijrp, Rembiapo pohyiete (bot), Aadrover, RobotQuistnix, Maquiavelo, Yrbot, Baito, BOT-Superzerocool, FlaBot,
BOTijo, Eskimbot, Floppy3, Rei-bot, Biasoli, VolkovBot, Technopat, Chechurisk, Muro Bot, SieBot, Loveless, Mrfoxtalbot, Jaontiveros,
Alexbot, MastiBot, Luckas-bot, MystBot, Marioxcc, Vivaelcelta, Invelg, Yago AB, EmausBot, David camelo, Grillitus, Albertojuanse,
WikitanvirBot, KLBot2, Allan Aguilar, Makecat-bot, Addbot y Annimos: 28
Caml Fuente: https://es.wikipedia.org/wiki/Caml?oldid=86731214 Colaboradores: UAwiki y Brivadeneira
Cierre de exclusin mutua Fuente: https://es.wikipedia.org/wiki/Cierre_de_exclusi%C3%B3n_mutua?oldid=77602139 Colaboradores:
Periku, Boticario, Yrbot, Martincarr, YurikBot, GermanX, CEM-bot, Thijs!bot, Dogor, CommonsDelinker, VolkovBot, Muro Bot, Racso,
STBot~eswiki, Luckas-bot, Amirobot, Diogeneselcinico42, EmausBot, WikitanvirBot, Dexbot, Legobot y Annimos: 3
Clase utilidad Fuente: https://es.wikipedia.org/wiki/Clase_utilidad?oldid=22946124 Colaboradores: Matiasmoreno, Muro Bot, Gizbot y
Annimos: 1
Clear.gif Fuente: https://es.wikipedia.org/wiki/Clear.gif?oldid=35650490 Colaboradores: Eloy, CEM-bot, Beaire1 y Annimos: 1
CMake Fuente: https://es.wikipedia.org/wiki/CMake?oldid=87507838 Colaboradores: Emijrp, Anonimato1990, El Pantera, Menthalo,
UA31, Billinghurst, Monkey.libre, Paroga, KLBot2, Conopo, Silentter y Annimos: 8
Codecademy Fuente: https://es.wikipedia.org/wiki/Codecademy?oldid=85518557 Colaboradores: Eloy, CEM-bot, CommonsDelinker,
Fremen, TheDarkFear, EmausBot, Grillitus, Invadibot, Flashlack, Harry Canyon, Quethzel, Jaod98 y Annimos: 4
Cdigo cerrado Fuente: https://es.wikipedia.org/wiki/C%C3%B3digo_cerrado?oldid=85015301 Colaboradores: Pino, Joseaperez, Dodo,
Ejrrjs, Ascnder, Sms, Yakoo, JCCO, Digigalos, Hari Seldon, RobotQuistnix, FlaBot, Usrwp, AtilaElHuno, Gabriel Acquistapace, Thijs!bot,
JAnDbot, TXiKiBoT, Rei-bot, AlnoktaBOT, Shooke, Muro Bot, SieBot, PaintBot, Javierito92, Marcecoro, UA31, X-DNA-X, DiegoFb,
MerlIwBot, Addbot, Balles2601 y Annimos: 12
Cdigo compilado Fuente: https://es.wikipedia.org/wiki/C%C3%B3digo_compilado?oldid=83041666 Colaboradores: CEM-bot, Netito777, AchedDamiman, Muro Bot, PaintBot, Farisori, DiegoFb, Jarould, Ivan santillo y Annimos: 1
Cdigo mutante Fuente: https://es.wikipedia.org/wiki/C%C3%B3digo_mutante?oldid=65069407 Colaboradores: Hari Seldon, Tomatejc,
Sirpuppet, AchedDamiman, VolkovBot, Muro Bot, PaintBot, BOTarate, Farisori, DiegoFb, Jorge c2010, Addbot y Annimos: 2
Cdigo objeto Fuente: https://es.wikipedia.org/wiki/C%C3%B3digo_objeto?oldid=84835561 Colaboradores: Oblongo, Moriel, ManuelGR, Sms, Rsg, Rembiapo pohyiete (bot), RobotQuistnix, Yrbot, Baito, Icvav, GermanX, Jesuja, Aleator, Chabacano, Escarlati,
Thijs!bot, TXiKiBoT, Gacq, Rei-bot, Biasoli, Shooke, AlleborgoBot, Muro Bot, Loveless, BOTarate, Marodok, AVBOT, Arjuno3, Luckasbot, Kender00, RedBot, PatruBOT, KamikazeBot, GrouchoBot, EmausBot, Grillitus, ChuispastonBot, Legobot, DarkBlueZV, Jarould y
Annimos: 21
Ofuscacin Fuente: https://es.wikipedia.org/wiki/Ofuscaci%C3%B3n?oldid=86976670 Colaboradores: JMPerez, Nuen, Thijs!bot, Matdrodes, Alejandroadan, BenzolBot, Gusbelluwiki, Acastiello, Elvisor, Addbot, Comnetgt y Annimos: 14
ColdFusion Fuente: https://es.wikipedia.org/wiki/ColdFusion?oldid=84655763 Colaboradores: Pino, Tostadora, Benjavalero, Boticario,
Yrithinnd, Taichi, RobotQuistnix, Yrbot, FlaBot, GermanX, The Photographer, Aladiah, FedericoMP, Kekkyojin, Mrpollo, Faelomx,
CEM-bot, Thijs!bot, Ernesto r., JAnDbot, C4rlitoz, Tuliopa, Spa karmona, TXiKiBoT, AlnoktaBOT, Shinji14, AlleborgoBot, Muro Bot,
Bucho, Rrrafa, BotMultichill, SieBot, Loveless, Abrenoite, WikiBotas, Alexbot, LucienBOT, Emiliot11, HerculeBot, Nallimbot, Cristianpark, Ptbotgourou, Xqbot, TiriBOT, Alph Bot, EmausBot, KLBot2, LlamaAl, Elvisor, Legobot y Annimos: 23
Coloreado de sintaxis Fuente: https://es.wikipedia.org/wiki/Coloreado_de_sintaxis?oldid=77127817 Colaboradores: Oblongo, Murphy
era un optimista, Barcex, Ictlogist, RobotQuistnix, Icvav, Eloy, Antur, Diosa, Isha, JAnDbot, Humberto, Biasoli, Dusan, VolkovBot, AlleborgoBot, Muro Bot, SieBot, Pan con queso, MenoBot, Heallo, AVBOT, MastiBot, Luckas-bot, WikiDreamer Bot, Xqbot, Josemiguel93,
Adryitan, EmausBot, Guarddon, Grillitus, Diego Moya, Gcosta87, Draug, Legobot y Annimos: 16
381
382
383
Distancia de Damerau-Levenshtein Fuente: https://es.wikipedia.org/wiki/Distancia_de_Damerau-Levenshtein?oldid=86009827 Colaboradores: Sabbut, RobotQuistnix, Pinar~eswiki, Muro de Aguas, Rapid2k1, VolkovBot, Cibi3d, CiaPan, Luckas-bot, Ptbotgourou, DiegoFb, Addbot, Fivestarts y Annimos: 2
Distancia de Levenshtein Fuente: https://es.wikipedia.org/wiki/Distancia_de_Levenshtein?oldid=87168183 Colaboradores: Sabbut, Dodo, Chewie, LeonardoRob0t, Orgullobot~eswiki, RobotQuistnix, Yrbot, FlaBot, YurikBot, Gaeddal, KnightRider, Tamorlan, Pinar~eswiki,
Davius, RoyFocker, Rei-bot, Dante Alighieri 1975, AlleborgoBot, Luigli, Oncina, DragonBot, Amsantosr, Botito777, DumZiBoT, Luckasbot, ArthurBot, Sharop, Halfdrag, Tomasdev, Sigifredo89, MerlIwBot, Elvisor, Addbot, Juankmx y Annimos: 44
DLO Fuente: https://es.wikipedia.org/wiki/DLO?oldid=85277666 Colaboradores: BOTijo, Gusgus, Anna Montull~eswiki, Elvisor y Addbot
Driver Chain Manager Fuente: https://es.wikipedia.org/wiki/Driver_Chain_Manager?oldid=77766026 Colaboradores: BOTSuperzerocool, CEM-bot, Shooke, LucienBOT, Abece y Siwel
Dublin Core Fuente: https://es.wikipedia.org/wiki/Dublin_Core?oldid=85005569 Colaboradores: RGLago, JosebaAbaitua, Ecemaml, Niqueco, Wikier~eswiki, RobotQuistnix, Chobot, Yrbot, FlaBot, BOTijo, Fariel, CEM-bot, Laura Fiorucci, Rosarinagazo, Thijs!bot, Esenabre, Gusgus, Humberto, Rei-bot, Amisadai, Anna Montull~eswiki, Zesar88, SieBot, Francisco Mochis, Wekeland, DragonBot, Alejandrocaro35, Webposible, Luckas-bot, Gallega61, Abece, Jorge c2010, Kasirbot, Senator2029, MetroBot, Legobot, Ramonjeria y Annimos:
21
EAthena Fuente: https://es.wikipedia.org/wiki/EAthena?oldid=86400364 Colaboradores: Joseaperez, Taichi, Lord cradet, Rastrojo, Kamen~eswiki, Muro Bot, PaintBot, BOTarate, Manw, Revealer, Lockalbot, Remember the dot, DumZiBoT, Streiker~eswiki, Diego Plaza,
0scar0nOjeda, MetroBot, Elvisor, Addbot y Annimos: 10
Efecto Hover Fuente: https://es.wikipedia.org/wiki/Efecto_Hover?oldid=85911552 Colaboradores: Akhram, Muro Bot, FBaena, Botelln,
Fidelbotquegua, DiegoFb, Marsal20, Elvisor y Annimos: 2
Emtp Fuente: https://es.wikipedia.org/wiki/Emtp?oldid=65129941 Colaboradores: Akhram, FlaBot, CEM-bot, Ernesto Genis, Muro Bot,
Bigsus-bot, DoN vErDuGo, DiegoFb, Addbot y Annimos: 3
Enlace dinmico Fuente: https://es.wikipedia.org/wiki/Enlace_din%C3%A1mico?oldid=67606875 Colaboradores: Ecemaml, Digigalos,
Genba, GermanX, Lobillo, CEM-bot, Shooke, Muro Bot, PaintBot y Annimos: 3
Enlace esttico Fuente: https://es.wikipedia.org/wiki/Enlace_est%C3%A1tico?oldid=60295530 Colaboradores: Digigalos, Yrbot, GermanX, Jesuja, CEM-bot, Technopat, Shooke, Muro Bot, PaintBot, Omegakent y Annimos: 3
Enlazado Fuente: https://es.wikipedia.org/wiki/Enlazado?oldid=57226529 Colaboradores: Zuirdj, Digigalos, Zeioth, Platonides, Caiserbot, EL WIKIPEDIA ES COMUNISMO!, Yrbot, GermanX, Lobillo, X.Cyclop, Muro Bot, PaintBot, Leonpolanco, AVBOT, PatruBOT
y Annimos: 2
Entrada chapuza Fuente: https://es.wikipedia.org/wiki/Entrada_chapuza?oldid=65375984 Colaboradores: Kavanagh, Waeswaes, Dalbela,
Addbot y Annimos: 1
Error de software Fuente: https://es.wikipedia.org/wiki/Error_de_software?oldid=87138345 Colaboradores: 4lex, Neodraco, Moriel,
Sauron, Wiki Wikardo~eswiki, Comae, Stoni, Sms, Robotito, Sonett72~eswiki, Carnendil, Edub, Rembiapo pohyiete (bot), OMenda, Orgullobot~eswiki, RobotQuistnix, Adept~eswiki, Superzerocool, Yrbot, Baito, Vitamine, YurikBot, GermanX, Quiron, Eskimbot, Kuanto,
Sking, Linus~eswiki, CEM-bot, CF, Thijs!bot, Bark~eswiki, Escarbot, Hanjin, JAnDbot, Jugones55, Cuate77, Zyder, AchedDamiman,
Aibot, Technopat, Matdrodes, ElVaka, DJ Nietzsche, BlackBeast, Gmarinp, Muro Bot, Gerakibot, SieBot, Wilfreddehelm, Bigsus-bot,
Xqno, Helenio, Poco a poco, UA31, AVBOT, MastiBot, Joaferna2008, Diegusjaimes, DumZiBoT, Eldelgas, Arjuno3, Luckas-bot, Nallimbot, Markoszarrate, Yuri Grille Orce, Feedehh, Obersachsebot, Xqbot, Jkbw, Rubinbot, Josemiguel93, ChenzwBot, Igna, BenzolBot,
Alfre204, TobeBot, RedBot, PatruBOT, Alph Bot, Waeswaes, EmausBot, ZroBot, JackieBot, ChuispastonBot, Albertojuanse, HarrySanti,
VR0, MetroBot, Invadibot, Lfgg2608, LSonico2012, Bibliolotranstornado, Minsbot, Salvador85, Elvisor, Rotlink, Legobot, Addbot, Roger de Lauria, JacobRodrigues, DarkBlueZV, Das MiMaMi, Pololo gibby, Eschweiler-1964, Jarould, GTX-TTT, GanksLocos y Annimos:
76
Estilo de programacin Fuente: https://es.wikipedia.org/wiki/Estilo_de_programaci%C3%B3n?oldid=87423753 Colaboradores: Grstain~eswiki, GermanX, CEM-bot, Thijs!bot, Alvaro qc, JAnDbot, TXiKiBoT, Barri, SieBot, Jpereza, AVBOT, Luckas-bot, ArthurBot,
Jkbw, EmausBot, ChuispastonBot, WikitanvirBot, Bibliolotranstornado, Elvisor, Addbot y Annimos: 14
Eventos del ratn Fuente: https://es.wikipedia.org/wiki/Eventos_del_rat%C3%B3n?oldid=83714919 Colaboradores: Pino, Pertile, GermanX, Manolo456, No s qu nick poner, Guialven, Dani26, Filipo, CEM-bot, NickelSpider, Educhip, Satin, Muro de Aguas, Gustronico,
PaintBot, Marcecoro, Machucho2007, AVBOT, DiegoFb, Elvisor, Jarould, Aramiza y Annimos: 7
Exclusin mutua (informtica) Fuente: https://es.wikipedia.org/wiki/Exclusi%C3%B3n_mutua_(inform%C3%A1tica)?oldid=
72980957 Colaboradores: PACO, Pantulis, Ascnder, Robotito, Niqueco, Emijrp, RobotQuistnix, Yrbot, Martincarr, GermanX,
KnightRider, Chlewbot, Xibranc, CEM-bot, AugustoIturri, Thijs!bot, Dogor, JAnDbot, Plux, VolkovBot, Muro Bot, SieBot, Mcapdevila,
Almabot, Rubinbot, EmausBot, ChuispastonBot, WikitanvirBot, BendelacBOT, Addbot y Annimos: 9
Expresin regular Fuente: https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular?oldid=87549861 Colaboradores: Moriel, JorgeGG,
Pilaf, SpeedyGonzalez, ManuelGR, Diegojc, Bigsus, Dodo, Crescent Moon, Triku, Ascnder, Sms, Tano4595, SantiagoGala, Periku,
Toto~eswiki, Digigalos, Boticario, Hari Seldon, Silvestre, Korg, Viko~eswiki, Murven, RobotQuistnix, Caiserbot, Yrbot, GermanX,
M4r10c354r, George McFinnigan, Maldoror, Er Komandante, Chlewbot, UberKaeL, CEM-bot, 333, Rbrena, Damifb, Laura Fiorucci,
Alexav8, Exos, Lcmarzulli, Resped, Cfvergara, TXiKi, JoaquinFerrero, Botones, JAnDbot, Muro de Aguas, Erwin, TXiKiBoT, Luis junco, ColdWind, Humberto, Luisgulo, Rlizarralde, Vector Mike Bravo Sierra, NaSz, Fixertool, Nioger, Mcanto, Feandir, Technopat, Alvlin,
Matdrodes, Muro Bot, SieBot, Loveless, BOTarate, Macarse, Cristhiangr, Arafael, MetsBot~eswiki, Borja Snchez, Eduardosalg, Leonpolanco, Alecs.bot, Hernaldo, SilvonenBot, AVBOT, Antolingarcia, Dermot, LucienBOT, Vituzzu, Diegusjaimes, CarsracBot, Andreasmperu, Luckas-bot, QuBote, Nixn, ArthurBot, Ee, 0x~eswiki, Xqbot, Igna, Botarel, Joaquin medina, Jomabeal, Foundling, GrouchoBot,
Savh, ChuispastonBot, Albertojuanse, Waka Waka, Hiperfelix, KLBot2, Angelgonzg, John plaut, scar Becerril, Bibliolotranstornado,
Elvisor, Legobot, Francisco2289, Addbot, Paconaranjo, Jarould, Matiia, Egis57, Enxaneta y Annimos: 147
Flag Fuente: https://es.wikipedia.org/wiki/Flag?oldid=72869566 Colaboradores: Sabbut, BOT-Superzerocool, GermanX, VolkovBot, Aleposta, Ptbotgourou, Rubinbot, Puck2099, ZroBot, Grillitus, KLBot2, Addbot, JacobRodrigues, Giliofelix y Annimos: 3
384
385
Doble, BOTirithel, Kizar, Ravmn, PatruBOT, Sergi70, Nanopulga, Gerda Arendt, ASTUR2000, EmausBot, Yayolas, KLBot2, Gusama
Romero, Elvisor, Daltreck, BenjaBot y Annimos: 62
ICONIX Fuente: https://es.wikipedia.org/wiki/ICONIX?oldid=86024206 Colaboradores: BOT-Superzerocool, CEM-bot, CommonsDelinker, Technopat, Rwheimle, Ortisa, Marsal20, PatruBOT, Angelito7, KLBot2, Invadibot, Arvelo592, Jarould y Annimos: 12
Anexo:Implementaciones de Smalltalk Fuente: https://es.wikipedia.org/wiki/Anexo%3AImplementaciones_de_Smalltalk?oldid=
70775907 Colaboradores: Sabbut, Tano4595, Dusan, Stickel, Shooke, Muro Bot, Carmin, MiguelAngelCaballero, Alelapenya, Lividiniski,
Elvisor y Annimos: 1
Anexo:Implementaciones para algoritmo de rut Fuente: https://es.wikipedia.org/wiki/Anexo%3AImplementaciones_para_algoritmo_
de_rut?oldid=87166683 Colaboradores: Josemoya, Isha, Terinchu y Annimos: 1
Inanicin (informtica) Fuente: https://es.wikipedia.org/wiki/Inanici%C3%B3n_(inform%C3%A1tica)?oldid=79794169 Colaboradores: Sabbut, GermanX, Thijs!bot, Mcapdevila, Angelito7, Ripchip Bot, EmausBot, KLBot2, Nejnadusho, Angeldefuego22 y Annimos:
2
Indireccin Fuente: https://es.wikipedia.org/wiki/Indirecci%C3%B3n?oldid=77015655 Colaboradores: DMG, Glia, Muro de Aguas, Biasoli, Elabra sanchez, Xqbot, KLBot2, Lizbeth Melissa Appleton Tavarez y Sociologiaipa
Infraestructura de lenguaje comn Fuente: https://es.wikipedia.org/wiki/Infraestructura_de_lenguaje_com%C3%BAn?oldid=
70047167 Colaboradores: Pino, Wikier~eswiki, Yrbot, BOTijo, Dangertn, Biasoli, Muro Bot, Bcnbits.com, XalD, Leonpolanco,
Luckas-bot, SuperBraulio13, Canyq, Waeswaes, EmausBot, Javiermarinros, MerlIwBot, KLBot2, Dexbot y Annimos: 6
Ingeniera de software Fuente: https://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software?oldid=87347378 Colaboradores: Zeno
Gantner, 4lex, Caligari~eswiki, Soniautn, Sabbut, Moriel, Sauron, JorgeGG, Lourdes Cardenal, ManuelGR, Head, Lsanabria, Rosarino,
Dodo, Jonik, Jynus, Ascnder, Sms, Rsg, Cookie, Tano4595, Robotito, JavierCantero, Amana, Ograma, Rodrigouf, Cinabrium, Porao, Loco085, Jabernal, Renabot, Richy, Robotkarel, Chlewey, Soulreaper, Petronas, Airunp, JMPerez, Edub, Taichi, Emijrp, Rembiapo pohyiete
(bot), Magister Mathematicae, RobotQuistnix, Platonides, Chobot, Afpineda, Yrbot, Baito, BOT-Superzerocool, Adrruiz, Mortadelo2005,
Martingala, GermanX, The Photographer, Tigerfenix, Ppja, Maldoror, Covi, BOTpolicia, CEM-bot, Jorgelrm, Laura Fiorucci, Eneaslabra,
Ignacio Icke, Osepu, Dou1985, Davius, Govelamo, Antur, Juan.palacio, Julian Mendez, Gafotas, Genaro Rafael, Fsd141, Jonpagecr, Diosa, Bot que revierte, Eidansoft, Ninovolador, Botones, Isha, Arcibel, Migp~eswiki, JAnDbot, Jugones55, Antipatico, Xavigivax, Gsrdzl,
Fugarte, Humberto, Netito777, Fixertool, Nioger, Plux, Developer, Manuel Trujillo Berges, Biasoli, Bucephala, VolkovBot, Drever, Technopat, Jose gueredo, Galandil, Queninosta, Raystorm, MasterNoX, Belgrano, Matdrodes, Autonomia, Gmarinp, Muro Bot, Jmvgpartner,
SieBot, Ctrl Z, Carmin, Hompis, Bigsus-bot, Alben9586, Switcher6746, Navarroaxel, Greek, BuenaGente, Mafores, Fadesga, Arnombela,
Tirithel, Javierito92, Marcecoro, Antn Francho, Nicop, Brayan Jaimes, Eduardosalg, Qwertymith, Graimito, Leonpolanco, Pan con queso,
Alejandrocaro35, LordT, Furti, Poco a poco, Rge, Camilo, UA31, SergioN, Climens, Andres romeroc, AVBOT, Flakinho, Diegusjaimes,
Davidgutierrezalvarez, CarsracBot, Arjuno3, Saloca, Andreasmperu, Luckas-bot, Jaromero, Nallimbot, Sergiportero, Vic Fede, Dangelin5,
ArthurBot, Usuwiki, Txangu22, Jefrcast, Angelux3000, SuperBraulio13, Xqbot, Jkbw, FrescoBot, Josemariasaldana, Igna, Botarel, Kraixx,
Ochonueve98, Yabama, BOTirithel, Maria.Jose.Garcia.UEM, Brian26, Luysys, RedBot, Fidelleandro, Abece, Leugim1972, PatruBOT,
Dinamik-bot, Jpussacq, Axvolution, EmausBot, Burny~eswiki, Savh, ZroBot, Joinsolutions, Hdavila1, Grillitus, Cris Dav CDVS, Kasirbot, MerlIwBot, JABO, KLBot2, Ayaita, Thehelpfulbot, Iranvaur, AvocatoBot, Sebrev, MetroBot, Diegosangz, TQLEOFULL, Raes123,
Aine Takarai, Elvisor, Felener, Makecat-bot, Ralgisbot, Withsell, Legobot, Ssamuel, Addbot, Balles2601, MarielCB, Guilberth, Ricardo
concepcion, DianaJMZr18, Isaacjuc, Bryanro, Franklin.ayarza, Starmird, FlareXIII, Abdiel Williams, LisleidysDominguez, Joseline Jaramillo, Neogeo02, RicardoFong, Albert-507, Joxeph18, Javrro, Alecjz, Jarould, Lomejordejr, Miranda23~eswiki, BenjaBot, Jos Toms
reyes rodriguez, FidiasX y Annimos: 403
Instancia (informtica) Fuente: https://es.wikipedia.org/wiki/Instancia_(inform%C3%A1tica)?oldid=86236359 Colaboradores: Carlos
Castaeda Girn, Ascnder, BOT-Superzerocool, Varano, CEM-bot, Laura Fiorucci, Santhy, Nightwish, Isha, Netito777, Technopat, Carmin, Javierito92, Poco a poco, AVBOT, Msanguino, David0811, Diegusjaimes, Bethan 182, Boto a Boto, SuperBraulio13, Jkbw, FrescoBot,
Botarel, Grillitus, Balles2601, Jarould, Unmanitito y Annimos: 28
Instruccin (informtica) Fuente: https://es.wikipedia.org/wiki/Instrucci%C3%B3n_(inform%C3%A1tica)?oldid=84858207 Colaboradores: Vanbasten 23, Dodo, Airunp, RobotQuistnix, Joanfusan, Yrbot, Amads, BOT-Superzerocool, GermanX, Jesuja, Maldoror, Cheveri,
Folkvanger, Feiri25, BOTpolicia, CEM-bot, Rastrojo, Fsd141, Tortillovsky, ngel Luis Alfaro, Dogor, JAnDbot, Netito777, Bedwyr, Biasoli, Cinevoro, Rmarcel, Muro Bot, SieBot, PaintBot, Loveless, LordT, Al Lemos, Juan Mayordomo, Diegusjaimes, DumZiBoT, Arjuno3,
Kavor, Txangu22, Ortisa, Jkbw, Botarel, Pablotol, AnselmiJuan, Grillitus, Elas, MerlIwBot, JABO, Matiia y Annimos: 34
Interfaz binaria de aplicaciones Fuente: https://es.wikipedia.org/wiki/Interfaz_binaria_de_aplicaciones?oldid=83104096 Colaboradores: JKD, Lobillo, Hprmedina, Invadibot y Korislife
Interfaz uida Fuente: https://es.wikipedia.org/wiki/Interfaz_fluida?oldid=64499560 Colaboradores: GermanX, TXiKiBoT, Shooke, LucienBOT, Luckas-bot, ZroBot, KLBot2 y Annimos: 1
Invariante (informtica) Fuente: https://es.wikipedia.org/wiki/Invariante_(inform%C3%A1tica)?oldid=64502259 Colaboradores: Poco
a poco, Waeswaes, EmausBot y KLBot2
Jframe Fuente: https://es.wikipedia.org/wiki/Jframe?oldid=77831062 Colaboradores: Ivordro UV
Usuario discusin:Juliasocorro Fuente: https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n%3AJuliasocorro?oldid=80551923
Colaboradores: Frank sin Otra
Kanban (desarrollo) Fuente: https://es.wikipedia.org/wiki/Kanban_(desarrollo)?oldid=87051531 Colaboradores: Lourdes Cardenal, Invadibot, Elvisor, Marco.unno, Jarould, Bossarro, Galo Jerez y Annimos: 9
Kit de desarrollo de software Fuente: https://es.wikipedia.org/wiki/Kit_de_desarrollo_de_software?oldid=87227842 Colaboradores:
Aleator, Laura Fiorucci, Bryant1410, TXiKiBoT, Humberto, Biasoli, Shooke, Marcecoro, Quijav, LucienBOT, MastiBot, Ambil, Diegusjaimes, MystBot, Gua-naiko-che, SuperBraulio13, Xqbot, Rubinbot, RedBot, MarioGL, PatruBOT, Cifz, EmausBot, ZroBot, ChuispastonBot, Cybelmar, KLBot2, Minsbot, Elvisor, Javier casas sevilla, BOTito y Annimos: 18
Kommander Fuente: https://es.wikipedia.org/wiki/Kommander?oldid=64677101 Colaboradores: CEM-bot, Phirosiberia, Moises.coronado, Loveless, StarBOT, KLBot2 y Annimos: 3
386
387
Nodo (informtica) Fuente: https://es.wikipedia.org/wiki/Nodo_(inform%C3%A1tica)?oldid=86760466 Colaboradores: Rosarino, Magister Mathematicae, Echani, Jesuja, Gtz, Tomatejc, Nihilo, CEM-bot, Jorgelrm, Antur, Ggenellina, Alvaro qc, Technopat, Lucien leGrey,
Farisori, Alejandrocaro35, Gomariles, AVBOT, Diegusjaimes, Arjuno3, DiegoFb, SuperBraulio13, Jkbw, Botarel, PatruBOT, EmausBot,
Waka Waka, Hiperfelix, Bibliolotranstornado, Helmy oved, Jean70000, Addbot, The$oul, Jarould, Matiia y Annimos: 44
Notacin Reddick Fuente: https://es.wikipedia.org/wiki/Notaci%C3%B3n_Reddick?oldid=21138085 Colaboradores: Vanbasten 23, Airunp, Vitamine, Jesuja, Folkvanger, CEM-bot, StarBOT, LordT y Annimos: 3
Notacin hngara Fuente: https://es.wikipedia.org/wiki/Notaci%C3%B3n_h%C3%BAngara?oldid=75873474 Colaboradores: Pjimenez,
Moriel, Pablo.cl, Sauron, SpeedyGonzalez, Angus, Elwikipedista, Airunp, Rembiapo pohyiete (bot), RobotQuistnix, Mortadelo, Yrbot,
BOTijo, YurikBot, Beto29, CEM-bot, Thijs!bot, Knocte~eswiki, Snakefang, Aibot, Loveless, BOTarate, Locos epraix, Reyiyo, Luckasbot, MerlIwBot, Ni.cero, Elvisor, Ralgisbot, Addbot y Annimos: 21
Null Fuente: https://es.wikipedia.org/wiki/Null?oldid=85452031 Colaboradores: Moriel, Pilaf, Sms, B1mbo, Tano4595, Renabot, Orgullobot~eswiki, RobotQuistnix, Superzerocool, Chobot, Caiserbot, Yrbot, FlaBot, YurikBot, Qwertyytrewqqwerty, CEM-bot, Thijs!bot, JAnDbot, Camahuetos, Muro de Aguas, Plux, VolkovBot, Technopat, Jos Daniel, Matdrodes, Carcediano, Gabo rage, Cebrianm, Nullsound,
SilvonenBot, CarsracBot, LyingB, Secdio, Manuelt15, Xqbot, Rubinbot, PatruBOT, Dinamik-bot, EmausBot, MerlIwBot, BendelacBOT,
Elvisor, Addbot, Jarould y Annimos: 23
NWNScript Fuente: https://es.wikipedia.org/wiki/NWNScript?oldid=75144330 Colaboradores: Emijrp, Muro Bot, PaintBot, Akhran,
Mctpyt, Grillitus y Annimos: 1
Objeto todopoderoso Fuente: https://es.wikipedia.org/wiki/Objeto_todopoderoso?oldid=86476755 Colaboradores: CEM-bot, Poco a poco, Luckas-bot, MartinDM, TiriBOT, EmausBot, KLBot2, Igorov87, AxVirus, Addbot, Jarould y Annimos: 1
Oday Fuente: https://es.wikipedia.org/wiki/Oday?oldid=69581302 Colaboradores: CF, Gusgus y Cinevoro
Oset (informtica) Fuente: https://es.wikipedia.org/wiki/Offset_(inform%C3%A1tica)?oldid=84332849 Colaboradores: El Moska, Digigalos, Deividmeil, GermanX, Eskimbot, Calsbert, CEM-bot, Thijs!bot, TXiKiBoT, Jmvgpartner, PaintBot, Loveless, El bot de la dieta,
Marcecoro, Jost Riedel, MystBot, DiegoFb, ArthurBot, SuperBraulio13, Xqbot, Isseu, Vascodecai, EmausBot, Grillitus, Addbot y Annimos: 11
OGNL Fuente: https://es.wikipedia.org/wiki/OGNL?oldid=86821108 Colaboradores: Cinabrium, Benjavalero, Isha, DragonBot, UA31,
Luckas-bot, Rodamaker, EmausBot, KLBot2, MetroBot, Elvisor, Addbot y Annimos: 3
OpenACS Fuente: https://es.wikipedia.org/wiki/OpenACS?oldid=78499694 Colaboradores: Barcex, Dianai, Halcn, GermanX, Lobillo,
KnightRider, Davidam, Ca in, Thijs!bot, Cinevoro, Matdrodes, Muro Bot, Obelix83, Mcordova, Cjervis, PixelBot, LordboT, Salva84,
Javiertoledos, Chemaur, Legobot, Ashaverus y Annimos: 6
Operaciones con archivos (informtica) Fuente: https://es.wikipedia.org/wiki/Operaciones_con_archivos_(inform%C3%A1tica)
?oldid=85017788 Colaboradores: Jesuja, CEM-bot, PaintBot, Poco a poco, DiegoFb, LordboT, Jkbw, Grillitus, Elas, rico y Annimos:
2
Operador Fuente: https://es.wikipedia.org/wiki/Operador?oldid=87368515 Colaboradores: 4lex, Yrbot, Jesuja, Gtz, ManuelMore, Marianov, Mister, Davius, Julian Mendez, Ingenioso Hidalgo, Thijs!bot, IrwinSantos, Isha, JAnDbot, Gaius iulius caesar, MONIMINO, Nioger,
Jmvkrecords, VolkovBot, Matdrodes, 3coma14, Ctrl Z, Mel 23, Greek, Mafores, Farisori, ElMeBot, Alejandrocaro35, Juan Mayordomo,
Raulshc, SilvonenBot, AVBOT, Diegusjaimes, Luckas-bot, LordboT, CayoMarcio, ArthurBot, SuperBraulio13, Jkbw, Botarel, Adriana03,
PatruBOT, KamikazeBot, Jorge c2010, EmausBot, TuHan-Bot, Rubpe19, Kallikanzarid, Rezabot, Abin, Travelour, Acratta, Fer13413,
Legobot, Balles2601, Jarould, Lectorina y Annimos: 73
Operando Fuente: https://es.wikipedia.org/wiki/Operando?oldid=86610212 Colaboradores: Gtz, JAnDbot, VolkovBot, Muro Bot, SieBot, Eduardosalg, Poco a poco, AVBOT, LucienBOT, Luckas-bot, Xqbot, PatruBOT, Foundling, EmausBot, HRoestBot, JackieBot, MerlIwBot, Acratta, Elvisor, Dexbot, Addbot y Annimos: 11
Paquetes en PL/SQL Fuente: https://es.wikipedia.org/wiki/Paquetes_en_PL/SQL?oldid=86909034 Colaboradores: Sabbut, Vanbasten
23, Dodo, Platonides, Baito, GermanX, Lobillo, Nicop, Botito777, LordT, PatruBOT y Annimos: 6
Pascal Casing Fuente: https://es.wikipedia.org/wiki/Pascal_Casing?oldid=60127173 Colaboradores: BOT-Superzerocool, Galandil, Ezarate y Annimos: 2
Patch (Unix) Fuente: https://es.wikipedia.org/wiki/Patch_(Unix)?oldid=86042448 Colaboradores: Alejandrocaro35, UA31, Esceptic0,
JackieBot, KLBot2, Elvisor, Zerabat y Annimos: 1
Phrogram Fuente: https://es.wikipedia.org/wiki/Phrogram?oldid=87258582 Colaboradores: Airunp, GermanX, Suomi 1973, CEM-bot,
Rastrojo, Hymake, STBot~eswiki, Botito777, Boto a Boto, PatruBOT, TONYKRAZY, KLBot2, Elvisor y Annimos: 12
Plataforma de desarrollo Fuente: https://es.wikipedia.org/wiki/Plataforma_de_desarrollo?oldid=82814138 Colaboradores: Digigalos,
Airunp, Murven, Gustronico, Shooke, Muro Bot, PaintBot, Marcecoro y Annimos: 4
Plataforma virtual didctica Fuente: https://es.wikipedia.org/wiki/Plataforma_virtual_did%C3%A1ctica?oldid=86908914 Colaboradores: Sabbut, FAR, Airunp, Taichi, Lestaire~eswiki, CEM-bot, Rosarinagazo, Damelac, Netito777, Amanuense, Matdrodes, Bigsus-bot,
Eduardosalg, BetoCG, UA31, AVBOT, David0811, Diegusjaimes, Arjuno3, Mindsociety, Andreasmperu, SuperBraulio13, Jkbw, Figaronline, Ganmedes, Savh, Waka Waka, Palissy, Invadibot, Nescalab, Elvisor, Helmy oved, Josgarfel, Jean70000, JuanG83, Jarould, Worldwriter3, Kintsugi, Oaxaco3293 y Annimos: 65
Polling Fuente: https://es.wikipedia.org/wiki/Polling?oldid=64497459 Colaboradores: Zyder, VolkovBot, FBaena, Eried, Alexbot, LucienBOT, DumZiBoT, Ykhwong, KLBot2 y Annimos: 10
Poltergeist (informtica) Fuente: https://es.wikipedia.org/wiki/Poltergeist_(inform%C3%A1tica)?oldid=65390382 Colaboradores: Kavanagh, Hctor Guido Calvo, ZroBot, Dalbela y Addbot
Portabilidad Fuente: https://es.wikipedia.org/wiki/Portabilidad?oldid=70481568 Colaboradores: Joseaperez, Dodo, Cookie, Daniel G.,
Jag2k4, Renabot, Digigalos, Taichi, Rembiapo pohyiete (bot), RobotQuistnix, Yrbot, YurikBot, Glia, GermanX, KnightRider, Eskimbot,
Siabef, CEM-bot, Spazer, Sir Magician, Karshan, Thijs!bot, Mapep, JAnDbot, TXiKiBoT, Aibot, VolkovBot, Oxigenia, SieBot, Armando.Mejia, Ugly, Jkbw, Marsal20, PatruBOT, ErikvanB, Jef.smets, KLBot2, Leojd88 y Annimos: 23
388
389
Pure data Fuente: https://es.wikipedia.org/wiki/Pure_data?oldid=87336476 Colaboradores: Aloriel, Dodo, Ejmeza, Jarl, Cinabrium,
Mescalier, Edub, Taichi, Orgullobot~eswiki, Jose.zapata, Yucon, Dibujon, Deprieto, Yrbot, Acracia, FlaBot, YurikBot, GermanX, Marb,
l, Gizmo II, CEM-bot, DierentSmoke~eswiki, Mpeinadopa, Sergeeo, VolkovBot, Jarm.yo, Shooke, Muro Bot, Dinopmi, Loveless,
Drinibot, Botelln, LordT, LucienBOT, Angel GN, Luckas-bot, MystBot, Angelalg, DanielrocaES, ArthurBot, KLBot, KLBot2, El erno,
DerProspekt, Elvisor y Annimos: 27
QuadTIN Fuente: https://es.wikipedia.org/wiki/QuadTIN?oldid=22507224 Colaboradores: Lobillo, Alex15090, Tito HX, PaintBot y DiegoFb
Query string Fuente: https://es.wikipedia.org/wiki/Query_string?oldid=81380457 Colaboradores: Taichi, Rembiapo pohyiete (bot), Varano, GermanX, Lobillo, The Photographer, CEM-bot, Resped, PaintBot, BOTarate, Ortellado, MystBot, DiegoFb, Xqbot, D'ohBot,
KLBot2, Vichock, Ytotrip, Elvisor y Annimos: 5
Quest3D Fuente: https://es.wikipedia.org/wiki/Quest3D?oldid=83296729 Colaboradores: Vanbasten 23, Benjavalero, BOTijo, GermanX,
Thijs!bot, Calapito, Biasoli, Loveless, Tirithel, Alexaltea, Kroji, MastiBot, Sbarrera, MystBot, KLBot2 y Annimos: 3
Quine (programa) Fuente: https://es.wikipedia.org/wiki/Quine_(programa)?oldid=78055735 Colaboradores: Pieter, Robbot, Zwobot,
Renabot, OMenda, RobotQuistnix, Chobot, Yrbot, BOTijo, YurikBot, YoungSpinoza, C-3POrao, Eskimbot, Spc, BOTpolicia, CEM-bot,
JoaquinFerrero, Ajavier, Rulo86, Dusan, Matdrodes, Elabra sanchez, Valenluis, Armando.Mejia, El bot de la dieta, Amoceann~eswiki,
MastiBot, Luckas-bot, Kizar, Abece, KamikazeBot, GrouchoBot, Addbot y Annimos: 11
Rebanamiento esttico Fuente: https://es.wikipedia.org/wiki/Rebanamiento_est%C3%A1tico?oldid=77066202 Colaboradores: Kiekvogel, Airunp, Orgullobot~eswiki, Yrbot, Baito, Lobillo, SieBot, BOTarate, Obersachsebot, BenzolBot, Angelito7, Ll0l00l, KLBot2 y Annimos: 2
Recolector de basura Fuente: https://es.wikipedia.org/wiki/Recolector_de_basura?oldid=87391272 Colaboradores: Comae, Dodo, Opinador, Niqueco, LeonardoRob0t, Gelo71, Yrithinnd, Emijrp, Rembiapo pohyiete (bot), Orgullobot~eswiki, Unf, Afpineda, Yrbot, FlaBot,
YurikBot, GermanX, Beto29, KnightRider, Baneld, BOTpolicia, Qwertyytrewqqwerty, Chguer, CEM-bot, Thijs!bot, uo Martnez,
JAnDbot, ColdWind, Rei-bot, Biasoli, AlnoktaBOT, Technopat, AlleborgoBot, SieBot, Loveless, Mutari, XalD, Rizziac, Louperibot, MastiBot, Diegusjaimes, Victormoz, Luckas-bot, Nallimbot, Xqbot, Hprmedina, RedBot, PatruBOT, TjBot, GrouchoBot, EmausBot, Savh,
WikitanvirBot, MerlIwBot, Elvisor, Addbot y Annimos: 33
Recursin Fuente: https://es.wikipedia.org/wiki/Recursi%C3%B3n?oldid=82777675 Colaboradores: Sabbut, Pablo.cl, JorgeGG, Cdlfd,
Zwobot, Triku, Sms, Pabloa, Rembiapo pohyiete (bot), Magister Mathematicae, Orgullobot~eswiki, RobotQuistnix, Yrbot, Baito, Dagavi,
BOTijo, Equi, CarCar, Jesuja, Baneld, Jos., Jarke, Paintman, Calsbert, CEM-bot, -jem-, Davius, Ingenioso Hidalgo, Escarbot, JAnDbot,
Soulbot, Kakico, TXiKiBoT, HiTe, Humberto, Netito777, Amanuense, Miguelmrm, Matdrodes, Amitie 10g, Peregring-lk, Ensada, Daniel
Ajoy, Farisori, Eduardosalg, Alejandrocaro35, Poco a poco, BodhisattvaBot, Raulshc, AVBOT, Diegusjaimes, MelancholieBot, CarsracBot, Arjuno3, Luckas-bot, Fabiocalde, ArthurBot, Secdio, Xqbot, Bitarray, Ricardogpn, Carlospretelt, TiriBOT, KamikazeBot, EmausBot,
MerlIwBot, Jnjnjn, Acratta, Addbot, DarkBlueZV, BenjaBot, Joseph.skater y Annimos: 62
Refactorizacin Fuente: https://es.wikipedia.org/wiki/Refactorizaci%C3%B3n?oldid=76830519 Colaboradores: Sabbut, Pilaf, Rsg, Wikier~eswiki, LeonardoRob0t, Guille.hoardings, Taichi, RobotQuistnix, Platonides, Yrbot, YurikBot, Wiki-Bot, GermanX, Eskimbot, Calsbert, JAnDbot, TXiKiBoT, Rei-bot, Idioma-bot, Aibot, VolkovBot, Muro Bot, BotMultichill, El bot de la dieta, PipepBot, Amischol,
Alecs.bot, UA31, MastiBot, ArthurBot, SuperBraulio13, Xqbot, Kismalac, EmausBot, ZroBot, ChuispastonBot, KLBot2 y Annimos: 4
Reexin (informtica) Fuente: https://es.wikipedia.org/wiki/Reflexi%C3%B3n_(inform%C3%A1tica)?oldid=75475919 Colaboradores: Fibonacci, Pilaf, Yrithinnd, Chobot, GermanX, KnightRider, Moiwiki, CEM-bot, Santhy, Thijs!bot, JoaquinFerrero, Gusgus, Biasoli, Dusan, VolkovBot, Elabra sanchez, Gerakibot, SieBot, Asclepios~eswiki, Arjuno3, Felipe Raimann, Francisco.cifuentes, JackieBot,
KLBot2, Makecat-bot y Annimos: 11
Relacin de compresin (informtica) Fuente: https://es.wikipedia.org/wiki/Relaci%C3%B3n_de_compresi%C3%B3n_(inform%C3%
A1tica)?oldid=34972408 Colaboradores: Neurotronix
Resolucin de problemas de programacin Fuente: https://es.wikipedia.org/wiki/Resoluci%C3%B3n_de_problemas_de_programaci%
C3%B3n?oldid=84827790 Colaboradores: Vivero, Jesuja, CEM-bot, LMLM, Queninosta, Edmenb, Alejandrocaro35, Botito777, Camilo,
AVBOT, Angel GN, Botarel, AstaBOTh15, BOTirithel, Hprmedina, Iwr, MercurioMT, Helmy oved, Jarould y Annimos: 23
Usuario:Santhy/En edicin/Instancia (programacin) Fuente: https://es.wikipedia.org/wiki/Usuario%3ASanthy/En_edici%C3%B3n/
Instancia_(programaci%C3%B3n)?oldid=67398481 Colaboradores: Santhy
Anexo:Scan code Fuente: https://es.wikipedia.org/wiki/Anexo%3AScan_code?oldid=64546479 Colaboradores: Murphy era un optimista,
Rembiapo pohyiete (bot), GermanX, Ciencia Al Poder, CEM-bot, R2D2!, Snakeyes, Muro Bot, Xqbot, EmausBot, WikitanvirBot, Addbot
y Annimos: 2
Scanf Fuente: https://es.wikipedia.org/wiki/Scanf?oldid=87399727 Colaboradores: Dodo, Ascnder, Jesuja, Faelomx, Nelson.cruz, CEMbot, Jorgelrm, RoyFocker, Hameryko, VolkovBot, Shooke, Muro Bot, Loveless, MacaBot, AntonCampos, Botito777, AVBOT, Luckas-bot,
Kurt86, Ee, Dreitmen, WikitanvirBot, KLBot2, Pccoronado, JacobRodrigues, Monty programador y Annimos: 22
SCons Fuente: https://es.wikipedia.org/wiki/SCons?oldid=77306026 Colaboradores: Hari Seldon, Lin linao, Paintman, Anonimato1990,
Dalacost, Thijs!bot, Muro Bot, LordT, UA31, Amirobot, Nallimbot, Xqbot, D'ohBot, KLBot, FranKapranos, KLBot2, Invadibot, Osorambolo y Annimos: 1
Screen scraping Fuente: https://es.wikipedia.org/wiki/Screen_scraping?oldid=77149450 Colaboradores: RobotQuistnix, Cacique500,
Teufelskerl, VolkovBot, Rapto, Leonpolanco, Alecs.bot, UA31, DiegoFb, Ortisa, Grillitus, Mentibot, KLBot2, Bibliolotranstornado, ProfesorFavalli y Annimos: 1
Seccin crtica Fuente: https://es.wikipedia.org/wiki/Secci%C3%B3n_cr%C3%ADtica?oldid=78884564 Colaboradores: ManuelGR, Comae, Dodo, Robotito, Rembiapo pohyiete (bot), Orgullobot~eswiki, RobotQuistnix, Francosrodriguez, Toxickore, Martincarr, GermanX,
Lobillo, CEM-bot, Dogor, Hameryko, JAnDbot, Antipatico, Aibot, VolkovBot, Muro Bot, BotMultichill, SieBot, PaintBot, Loveless, Cousteau, Alexbot, MastiBot, MelancholieBot, Luckas-bot, Xqbot, WikitanvirBot, Elvisor, Addbot y Annimos: 8
Serializacin Fuente: https://es.wikipedia.org/wiki/Serializaci%C3%B3n?oldid=87539851 Colaboradores: Angus, Boticario, Rembiapo
pohyiete (bot), Viko~eswiki, RobotQuistnix, Yrbot, YurikBot, GermanX, The Photographer, Baneld, Cad, Qwertyytrewqqwerty, Chguer, CEM-bot, Byzs, BotMultichill, SieBot, Inuyasha1111, R.factorial, HUB, AVBOT, Luckas-bot, Jackie, Almabot, Jkbw, MauritsBot,
BOTirithel, JackieBot, KLBot2, Victorvic1 y Annimos: 20
390
205.3.2
391
Imgenes
https://upload.wikimedia.org/wikipedia/commons/e/e8/
https://upload.wikimedia.org/wikipedia/commons/5/58/
392
Archivo:Commons-emblem-question_book_yellow.svg
Fuente:
https://upload.wikimedia.org/wikipedia/commons/d/dd/
Commons-emblem-question_book_yellow.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.org/wiki/File:
Commons-emblem-query.svg' class='image'><img alt='Commons-emblem-query.svg' src='https://upload.wikimedia.org/wikipedia/
commons/thumb/c/c5/Commons-emblem-query.svg/25px-Commons-emblem-query.svg.png' width='25' height='25' srcset='https:
//upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Commons-emblem-query.svg/38px-Commons-emblem-query.svg.png 1.5x,
https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Commons-emblem-query.svg/50px-Commons-emblem-query.svg.png
2x' data-le-width='48' data-le-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg'
class='image'><img alt='Question book.svg' src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.
svg/25px-Question_book.svg.png' width='25' height='20' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/
Question_book.svg/38px-Question_book.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.
svg/50px-Question_book.svg.png 2x' data-le-width='252' data-le-height='199' /></a> Artista original: GNOME icon artists, Linfocito
B
Archivo:Commons-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4a/Commons-logo.svg Licencia: Public domain Colaboradores: This version created by Pumbaa, using a proper partial circle and SVG geometry features. (Former versions used
to be slightly warped.) Artista original: SVG version was created by User:Grunt and cleaned up by 3247, based on the earlier PNG version,
created by Reidab.
Archivo:Computer-aj_aj_ashton_01.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d7/Desktop_computer_clipart_
-_Yellow_theme.svg Licencia: CC0 Colaboradores: https://openclipart.org/detail/105871/computeraj-aj-ashton-01 Artista original: AJ
from openclipart.org
Archivo:Condicional.png Fuente: https://upload.wikimedia.org/wikipedia/commons/0/0e/Condicional.png Licencia: CC-BY-SA-3.0
Colaboradores: Trabajo propio (Hecho con OpenOce.org Draw) Artista original: kn
Archivo:Condicional1.png Fuente: https://upload.wikimedia.org/wikipedia/commons/f/f8/Condicional1.png Licencia: CC-BY-SA-3.0
Colaboradores: Trabajo propio Artista original: Jesuja
Archivo:Crystal_Clear_action_edit_add.png Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e2/Crystal_Clear_action_
edit_add.png Licencia: LGPL Colaboradores: All Crystal Clear icons were posted by the author as LGPL on kde-look; Artista original:
Everaldo Coelho and YellowIcon;
Archivo:Crystal_Clear_app_kcoloredit.png Fuente: https://upload.wikimedia.org/wikipedia/commons/7/70/Crystal_Clear_app_
kcoloredit.png Licencia: LGPL Colaboradores: All Crystal Clear icons were posted by the author as LGPL on kde-look; Artista original:
Everaldo Coelho and YellowIcon;
Archivo:Cscr-featured.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e7/Cscr-featured.svg Licencia: LGPL Colaboradores: Wikipedia until June, 2006 Artista original: Wikimedia users ClockworkSoul, CyberSkull, Optimager, White Cat, Erina, AzaToth,
Pbroks13.
Archivo:Cuadro_de_ventajas_y_desventajas_del_uso_del_Paradigma_tradicional.JPG Fuente: https://upload.wikimedia.org/
wikipedia/commons/2/21/Cuadro_de_ventajas_y_desventajas_del_uso_del_Paradigma_tradicional.JPG Licencia: CC BY-SA 3.0
Colaboradores: Trabajo propio Artista original: Arisneth Chanapi
Archivo:DeadlockGraph.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/99/DeadlockGraph.svg Licencia: CC0 Colaboradores: Trabajo propio Artista original: Niqueco
Archivo:Dg-nova3.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/99/Dg-nova3.jpg Licencia: Copyrighted free use Colaboradores: Photograph taken by Qu1j0t3. Artista original: User Qu1j0t3 on en.wikipedia
Archivo:DiagramaFlujoLampara.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/7/76/DiagramaFlujoLampara.svg
Licencia: CC-BY-SA-3.0 Colaboradores: versin en espaol de w:Image:LampFlowchart.svg Artista original: svg en espaol por Jipumarino
Archivo:Distrains.png Fuente: https://upload.wikimedia.org/wikipedia/commons/0/05/Distrains.png Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:Droste.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/62/Droste.jpg Licencia: Public domain Colaboradores:
[4] [5] Artista original: Jan (Johannes) Misset?
Archivo:Ejemplo_de_JFrame.png Fuente: https://upload.wikimedia.org/wikipedia/commons/5/5e/Ejemplo_de_JFrame.png Licencia:
CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: Ivordro UV
Archivo:El_modelo_de_desarrollo_en_cascada.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2e/El_modelo_de_
desarrollo_en_cascada.svg Licencia: CC BY 3.0 Colaboradores: http://en.wikipedia.org/wiki/File:Waterfall_model_%281%29.svg Artista
original: Paulsmith99
Archivo:Esoteric_Taijitu.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/21/Esoteric_Taijitu.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Kenny Shen
Archivo:Esperluette.png Fuente: https://upload.wikimedia.org/wikipedia/commons/8/8f/Esperluette.png Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:For-loop-diagram.png Fuente: https://upload.wikimedia.org/wikipedia/commons/0/06/For-loop-diagram.png Licencia: CC
BY-SA 2.5 Colaboradores: No machine-readable source provided. Own work assumed (based on copyright claims). Artista original: No
machine-readable author provided. Faxe assumed (based on copyright claims).
Archivo:Fuente.png Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e2/Fuente.png Licencia: Public domain Colaboradores:
? Artista original: ?
Archivo:Garbage_collection.gif Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3b/Garbage_collection.gif Licencia: Public domain Colaboradores: Trabajo propio Artista original: German
Archivo:Glider.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/45/Glider.svg Licencia: Public domain Colaboradores:
Hacker Emblem Artista original: Eric S. Raymond
393
Archivo:Gnome-globe.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/f3/Gnome-globe.svg Licencia: LGPL Colaboradores: http://ftp.gnome.org/pub/GNOME/sources/gnome-themes-extras/0.9/gnome-themes-extras-0.9.0.tar.gz Artista original: David
Vignoni
Archivo:Grid.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/47/Grid.jpg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:H96566k.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/8a/H96566k.jpg Licencia: Public domain Colaboradores: U.S. Naval Historical Center Online Library Photograph NH 96566-KN Artista original: Courtesy of the Naval Surface Warfare
Center, Dahlgren, VA., 1988.
Archivo:HappyHackingBicicleta.png Fuente: https://upload.wikimedia.org/wikipedia/commons/5/59/HappyHackingBicicleta.png Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Omerta-ve
Archivo:Heckert_GNU_white.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/22/Heckert_GNU_white.svg Licencia:
CC BY-SA 2.0 Colaboradores: gnu.org Artista original: Aurelio A. Heckert <aurium@gmail.com>
Archivo:Historical_ampersand_evolution.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1c/Historical_ampersand_
evolution.svg Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Alatius
Archivo:History.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d2/History.svg Licencia: CC BY-SA 3.0 Colaboradores: http://darkobra.deviantart.com/art/Tango-History-Icon-163719409 Artista original: ~DarKobra at Deviantart
Archivo:Hola_Mundo_AppleScript.png Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3b/Hola_Mundo_AppleScript.
png Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Jaimemf
Archivo:Html-source-code3.png Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3d/Html-source-code3.png Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Icon_tools.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/8e/Icon_tools.svg Licencia: CC BY 2.5 Colaboradores: File:Icon tools.png: http://www.icon-king.com/projects/nuvola/ Artista original: David Vignoni, STyx
Archivo:Indireccion.gif Fuente: https://upload.wikimedia.org/wikipedia/commons/7/7b/Indireccion.gif Licencia: Public domain Colaboradores: No machine-readable source provided. Own work assumed (based on copyright claims). Artista original: No machine-readable
author provided. Glioma assumed (based on copyright claims).
Archivo:Linux_API_and_Linux_ABI.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/b/bb/Linux_API_and_Linux_
ABI.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: ScotXW
Archivo:Linux_kernel_interfaces.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/68/Linux_kernel_interfaces.svg Licencia: CC BY-SA 3.0 Colaboradores: Esta imagen incluye elementos que han sido tomados o adaptados de esta: <a
href='//commons.wikimedia.org/wiki/File:Tux-shaded.svg' class='image'><img alt='Tux-shaded.svg' src='https://upload.wikimedia.org/
wikipedia/commons/thumb/0/0a/Tux-shaded.svg/17px-Tux-shaded.svg.png' width='17' height='20' srcset='https://upload.wikimedia.
org/wikipedia/commons/thumb/0/0a/Tux-shaded.svg/25px-Tux-shaded.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/
thumb/0/0a/Tux-shaded.svg/33px-Tux-shaded.svg.png 2x' data-le-width='249' data-le-height='297' /></a> Tux-shaded.svg. Artista original: ScotXW
Archivo:Logical_connectives_Hasse_diagram.svg
Fuente:
https://upload.wikimedia.org/wikipedia/commons/3/3e/Logical_
connectives_Hasse_diagram.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Watchduck (a.k.a. Tilman
Piesk)
https://upload.wikimedia.org/
Licencia: CC BY-SA 3.0
Archivo:Objetos.png Fuente: https://upload.wikimedia.org/wikipedia/commons/8/8f/Objetos.png Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:Osc.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/36/Osc.jpg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
394
Archivo:Oscilador.png Fuente: https://upload.wikimedia.org/wikipedia/commons/5/51/Oscilador.png Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:Overview_of_the_Common_Language_Infrastructure.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/85/
Overview_of_the_Common_Language_Infrastructure.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Jarkko
Piiroinen
Archivo:Phonebloks_open.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/6a/Phonebloks_open.jpg Licencia: CC BYSA 3.0 Colaboradores: Provided by email Artista original: Dave Hakkens
Archivo:Pipe_and_broken_bar.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/6f/Pipe_and_broken_bar.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: GJo
Archivo:PlusMinusTimesDivide.png Fuente: https://upload.wikimedia.org/wikipedia/commons/5/59/PlusMinusTimesDivide.png Licencia: Public domain Colaboradores: Trabajo propio Artista original: Theodoric Stier
Archivo:ProcesamientoDatos.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e6/ProcesamientoDatos.svg Licencia:
Public domain Colaboradores:
ProcesamientoDatos.png Artista original: ProcesamientoDatos.png: Moriel
Archivo:Puertas_lgicas_de_circuitos.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/5a/Puertas_l%C3%B3gicas_
de_circuitos.jpg Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: MONIMINO
Archivo:Pure_data_screen_capture.png Fuente: https://upload.wikimedia.org/wikipedia/commons/e/ed/Pure_data_screen_capture.
png Licencia: CC-BY-SA-3.0 Colaboradores: ? Artista original: ?
Archivo:Rubber_duck_assisting_with_debugging.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d5/Rubber_duck_
assisting_with_debugging.jpg Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Tom Morris
Archivo:SNL_Logo.png Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4b/SNL_Logo.png Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Lacabra25
Archivo:SO_Home_Page.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e7/SO_Home_Page.jpg Licencia: Public domain Colaboradores: Trabajo propio Artista original: George Edison
Archivo:Sciences_humaines.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3f/Sciences_humaines.svg Licencia:
LGPL Colaboradores: eriollsdesigns - Lanthys Icon Set (for KDE) Artista original: Adrien Faclina
Archivo:Select-object_Pure_Data.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/cf/Select-object_Pure_Data.svg Licencia: BSD Colaboradores: SVG converted from the PostScript output of the software Artista original: Miller-Puckette
Archivo:SierpinskiTriangle.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/80/SierpinskiTriangle.svg Licencia: Public
domain Colaboradores: Trabajo propio Artista original: PiAndWhippedCream
Archivo:Spanish_Language_Wiki.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2a/Spanish_Language_Wiki.svg
Licencia: CC BY-SA 3.0 Colaboradores: Derived from Wiki puzzle.svg by user:Kimbar Artista original: James.mcd.nz
Archivo:Spanish_Wikiquote.SVG Fuente: https://upload.wikimedia.org/wikipedia/commons/1/13/Spanish_Wikiquote.SVG Licencia:
CC BY-SA 3.0 Colaboradores: derived from Wikiquote-logo.svg Artista original: James.mcd.nz
Archivo:Sports_icon.png Fuente: https://upload.wikimedia.org/wikipedia/commons/9/95/Sports_icon.png Licencia: Public domain Colaboradores: made by myself Artista original: Pepetps
Archivo:Start_pd.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/a1/Start_pd.jpg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:Steven_Levy_(1).jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/ac/Steven_Levy_%281%29.jpg Licencia:
CC BY 2.0 Colaboradores: http://www.flickr.com/photos/joi/2939357516/sizes/o/in/photostream/ Artista original: Joi
Archivo:Subpatch.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/98/Subpatch.jpg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:TE_Conex_00.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3c/TE_Conex_00.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Conex_05.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/81/TE_Conex_05.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Conex_09.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/ae/TE_Conex_09.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Conex_10.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/51/TE_Conex_10.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Conex_12.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4b/TE_Conex_12.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Conex_14.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/92/TE_Conex_14.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_05.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/cd/TE_Interu_05.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_06.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/e/e3/TE_Interu_06.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_07.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/5d/TE_Interu_07.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_08.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/0/0a/TE_Interu_08.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
395
Archivo:TE_Interu_1A.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/6c/TE_Interu_1A.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_1B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/7/72/TE_Interu_1B.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_1C.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/aa/TE_Interu_1C.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_2A.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/f1/TE_Interu_2A.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_2B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/28/TE_Interu_2B.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_3A.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/0/02/TE_Interu_3A.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_3B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/f0/TE_Interu_3B.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:TE_Interu_4B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/ae/TE_Interu_4B.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:Tabla_de_verdad.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/60/Tabla_de_verdad.svg Licencia: CC BYSA 3.0 Colaboradores: Trabajo propio Artista original: Dnu72
Archivo:Tecno-rueda.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1f/Tecno-rueda.svg Licencia: CC BY-SA 2.5
Colaboradores: <a href='//commons.wikimedia.org/wiki/File:Start-here.svg' class='image'><img alt='Start-here.svg' src='https://upload.
wikimedia.org/wikipedia/commons/thumb/5/57/Start-here.svg/32px-Start-here.svg.png' width='32' height='32' srcset='https://upload.
wikimedia.org/wikipedia/commons/thumb/5/57/Start-here.svg/48px-Start-here.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/
commons/thumb/5/57/Start-here.svg/64px-Start-here.svg.png 2x' data-le-width='48' data-le-height='48' /></a> The Tango! Desktop
Project. Artista original: The people from the Tango! project.
Archivo:Test_pd.png Fuente: https://upload.wikimedia.org/wikipedia/commons/c/c2/Test_pd.png Licencia: Public domain Colaboradores: Trabajo propio Artista original: Angelalg
Archivo:Translation_arrow.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2a/Translation_arrow.svg Licencia: CCBY-SA-3.0 Colaboradores: grco vectorial con Inkscape.
Artista original: Jesse Burgheimer
Archivo:Two_red_dice_01.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/36/Two_red_dice_01.svg Licencia: CC0
Colaboradores: Open Clip Art Library Artista original: Stephen Silver
Archivo:USB_flash_drive.JPG Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2c/USB_flash_drive.JPG Licencia: CCBY-SA-3.0 Colaboradores: ? Artista original: ?
Archivo:Venn00.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/5c/Venn00.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Lipedia
Archivo:Venn0001.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/99/Venn0001.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn0011.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/7/76/Venn0011.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn01.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/0/06/Venn01.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Lipedia
Archivo:Venn0101.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/10/Venn0101.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn0110.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/46/Venn0110.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn0111.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/30/Venn0111.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn10.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/7/73/Venn10.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Watchduck (a.k.a. Tilman Piesk)
Archivo:Venn1000.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3c/Venn1000.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn1001.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/47/Venn1001.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn1011.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1e/Venn1011.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn11.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3f/Venn11.svg Licencia: Public domain Colaboradores:
Trabajo propio Artista original: Lipedia
Archivo:Venn1101.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/35/Venn1101.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:Venn1110.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/cb/Venn1110.svg Licencia: Public domain Colaboradores: ? Artista original: ?
396
Archivo:Waterfall_model.png Fuente: https://upload.wikimedia.org/wikipedia/commons/5/51/Waterfall_model.png Licencia: CC BYSA 2.5 Colaboradores: Transferido desde en.wikipedia a Commons. Artista original: The original uploader was PaulHoadley de Wikipedia
en ingls
Archivo:Wikibooks-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg Licencia: CC BY-SA
3.0 Colaboradores: Trabajo propio Artista original: User:Bastique, User:Ramac et al.
Archivo:Wikinews-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/24/Wikinews-logo.svg Licencia: CC BY-SA
3.0 Colaboradores: This is a cropped version of Image:Wikinews-logo-en.png. Artista original: Vectorized by Simon 01:05, 2 August
2006 (UTC) Updated by Time3000 17 April 2007 to use ocial Wikinews colours and appear correctly on dark backgrounds. Originally
uploaded by Simon.
Archivo:Wikiversity-logo-Snorky.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1b/Wikiversity-logo-en.svg Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Snorky
Archivo:Wiktionary-logo-es.png Fuente: https://upload.wikimedia.org/wikipedia/commons/0/06/Wiktionary-logo-es.png Licencia: CC
BY-SA 3.0 Colaboradores: originally uploaded there by author, self-made by author Artista original: es:Usuario:Pybalo
205.3.3