Академический Документы
Профессиональный Документы
Культура Документы
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 2
Arquitecturas de traducción
Front-end:
del lenguaje de alto nivel al
lenguaje intermedio
Código intermedio
(ensamblador, p-code, byte-code, etc.)
Back-end:
del lenguaje intermedio al
código binario
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 3
Proceso de traducción
G3. AEF.
Código fuente Análisis lexicográfico
Tokenización
G2. AP.
Código “tokenizado” Análisis sintáctico
Árboles
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 4
Compilador nativo
programa
Análisis lexicográfico
ejecutable
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 5
Traductor de un paso
U1
Facilidad de uso Análisis caracteres
lexicográfico
Aplicaciones sencillas
Poca optimización
Tabla de
símbolos
Traducción rápida
Etapas de análisis y
generación unificadas
Análisis Análisis
Código objeto semántico sintáctico
ineficiente
código objeto
Generador ejecutable
Gestión de
errores
errores
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 6
Intérprete puro
Facilidad de uso Traductor a caracteres
representación
Permiten interactuar interna
con el estado del … Tabla de
programa Número de símbolos
instrucción
instrucción
…
Sin optimización etiqueta
Analizan y ejecutan
un enunciado por vez número
Requieren de un
entorno para ejecutar
Gestión de
errores resultado de la
errores ejecución
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 7
Traducen a un pseudo-
código de máquina
Código
(por ej. P-code, byte-
intermedio
code, …)
Multiplataforma
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 8
Compiladores e Intérpretes
Programa Árbol de
fuente análisis
Compilador
Traductor Intérprete Intérprete parcial
Código
ensamblador
Programa Entorno de Byte code
ejecución
Enlazador
Código de
máquina
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 9
Semántica de enunciados
• Características
– Enunciado vs. Operador
– Múltiple
– Inputs. Pasaje de argumentos. Retorno de valores
– inicialización vs. Asignación
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 10
Semántica de enunciados
• Características
– Doble
– Múltiple
– Selector de casos
– Opción de descarte
– Esquemas de anidamiento
– Transferencia incondicional
– Rótulos
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 11
Semántica de enunciados
• Características
– Esquemas de anidamiento
– Ciclos finitos e infinitos
– Modificación interna de parámetros
– Evaluación inicial y final
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 12
Semántica de datos
Implementación
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 13
Declaración de variables
Sea: int A;
A = 21;
• Modelo imperativo: genera tres objetos
nombre ubicación valor
A FFA0 9B76 21
Vinculados en el momento de
la invocación
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 14
Implementación de datos
Los objetos de datos siempre son de algún tipo, lo que implica que tienen asociados
• Valores
• Operaciones (f: tipo x tipo tipo)
• Representación de su almacenamiento
Equivalencia de tipo
• Estructural
• Por nombre (alias)
Verificación
• Calcular o inferir tipos y validar expresiones
• Estática o dinámica
Variables vs. Constantes
• Segmento de datos vs. segmento de código
Primitivos
• Atómicos sin estructura interna compleja
• Operaciones implementadas por hardware
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 15
Estándar Carácter
Lógico
Ordinal
Enumerado
Definido x usuario
Escalar
Sub-rango
Punto fijo
No-ordinal Real
Tipo Puntero
Punto flotante
Arreglo Cadena
Registro
Estructurado
Archivo
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 16
El tipo entero
• Formato de representación
– Tipo entero (máximo 2n-1 - 1 y mínimo -2n-1)
– Negativos por complemento 2
– Tamaños habituales con/sin signo 1, 2, 4, 8 bytes
– Operaciones más simples que los flotantes
• Rango con signo: -2147483648 a +2147483647
-2147483648 10000000 00000000 00000000 00000000
2147483648 10000000 00000000 00000000 00000000
• Rango sin signo: 0 a 4294967295
2147483648 10000000 00000000 00000000 00000000
-1 11111111 11111111 11111111 11111111
4294967296 00000000 00000000 00000000 00000000
4294967295 11111111 11111111 11111111 11111111
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 17
El tipo real
• Características
– Flotante estándar representado con 32 bits
– Punto flotante (IEEE 754)
– No exactos (simple y doble precisión)
– Tamaños habituales 4, 8 bytes
– Operaciones más lentas que los enteros
• Formato de representación
(-1)S * 2 (E – B) * (1 + (M/2N)) donde 0 <= M < 1
N cantidad de bits para M (23 or 52)
B es 127 (32-bits) o 1023 (64-bits)
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 18
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 19
• Precisión exacta
• Almacenamiento poco eficiente
Decimal o punto fijo Ej. 1234.567 => 1234567 con S=3
• Cantidad de decimales fija
En C/C++ los operadores &&,
||, ! están asociados a los
tipos numéricos
Lógico • 1 bit o 1 byte
En C/C++ se trata como un
tipo numérico
• ASCII (1 byte)
Carácter • UNICODE (2 bytes)
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 20
Puntero
Operaciones
1. Asignar una dirección de memoria
2. Obtener una dirección de memoria
3. Referenciar una dirección de memoria
4. Comparar direcciones de memoria
5. Aritmética de punteros
6. Uso de cast
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 21
Asignación de punteros
A y B variables puntero: A B
A: 7.2 A:
B: 0.4 B: 0.4
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 22
x *y z Nombres
Direcciones (250) (254) (258)
12
30 250 17 Valores
int x, *y, z;
x = 12; * Indica que la variable es un puntero que guardará
un valor de dirección de memoria
y = &x;
& obtener el valor de la dirección de
z = *y + 5; memoria de la variable
* a la derecha de la asignación
Recuperar el valor apuntado por la variable puntero
*y = 30;
* a la izquierda de la asignación
Guardar valor en el lugar indicado por el puntero
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 23
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 24
• Polimorfismo
– Un mismo operador aplicado a diferentes tipos
• Subtipos
– A es subtipo de B A⊂B
– Mismo conjunto de operaciones y formato de representación
– Dominio de valores diferente
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 25
Operadores y Expresiones
• Operadores Tabla de jerarquía/asociatividad en C
– Precedencia
I-D () [] -> .
– Asociatividad D-I ++ -- + - ! ~ (tipo) * & sizeof
– Sobrecarga I-D * / %
I-D + - Sean
• Caracter I-D << >> int a, *b, Z = 1, X = 4, Y = 2;
– tratamiento como enteros I-D < <= > >= a = 4;
I-D == != b = &a;
• Cadena I-D &
Árbol de expresión
I-D ^
– tipo predefinido I-D | ++*b vs. *++b
– arreglos I-D && ++Z * Z++
I-D || Z + (Y == 0 ? X : X / Y)
• Relacionales y lógicas D-I ?:
– evaluación x cortocicuito D-I = += -= *= /= %= &= ^= |= <<= >>=
I-D ,
• Aritméticas
– errores de redondeo vs. truncamiento (desbordamiento)
– bit de signo
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 26
Tipos estructurados
Homogéneos Heterogéneos
Enumerados
Arreglos Registros Listas
Archivos
Multidimensionales
Unidimensionales
Campos de bits
Uniones
Lineales
Árboles
Anillos
Grafos
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 27
Longitud fija
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 28
Arreglos unidimensionales
Conjunto homogéneo de datos gestionado como un bloque
• Características
Dimensión: Entero > 0
Sub => L1 ≤ Sub < L1 + Dim
• Cálculo de direcciones
int x[8];
L-value: x[5] = 15;
L-value y R-value: x[2] = x[5]; Suponemos enteros de 2 bytes
L-value(x[k]) => DB + k * tTipo
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 29
Arreglos bidimensionales
Características
Dimensiones: Entero > 0
Subíndices => L1 ≤ Sub1 < L1 + Dim1, L2 ≤ Sub2 < L2 + Dim2
Tamaño: Dim1 * Dim2 * tTipo
Cálculo de direcciones 0 1 2
0
int x[4][3]; 1
2 7
x[2][1] = 7; 3
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 30
Arreglos bidimensionales
Subíndices con rango
A[L1:U1, L2:U2] : TIPO Espacio = (U2 - L2 + 1) * (U1 - L1 + 1) * tTipo
D = (U2 - L2 + 1) * tTipo D = cte
L-value(A[i, j]) = DB + D * (i - L1) + tTipo * (j - L2)
DB + D * i – L1 * D + tTipo * j – L2 * tTipo
OV = DB - L1 * D - L2 * tTipo
L-value(A[i, j]) = OV + D * i + tTipo * j
[0,2]
… …
[-1,2] [-1,4] [1,4]
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 31
Implementación general
Almacenamiento
a) Estático (datos conocidos en la compilación: D, Tt y VO)
int N = 5;
float v[N];
for (int i = 0; i < N; i++)
v[i] = i + 1;
b) Dinámico
var v = [0];
for (i = 0; i < 5; i++)
v[i] = i + 1;
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 32
Arreglos tridimensionales
Subíndices con rango k
j
A[L1:U1, L2:U2, L3:U3] : TIPO
i
D1 = (U2 – L2 + 1) * (U3 – L3 + 1) * tTipo
D2 = (U3 – L3 + 1) * tTipo
D3 = tTipo
Espacio = (U3 – L3 + 1) * (U2 - L2 + 1) * (U1 - L1 + 1) * tTipo
L-value(A[i, j, k]) = DB + D1 * (i - L1) + D2 * (j - L2) + k * D3
L-value(A[i, j, k]) = DB + D1 * i – D1 * L1 + D2 * j – D2 * L2 + k * D3
OV = DB – L1 * D1 – L2 * D2 – L3 * D3
L-value(A[i, j, k]) = OV + i * D1 + j * D2 + k * D3
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 33
Arreglos n-dimensionales
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 34
Gestión de arreglos
• Slices
– Se agregan descriptores
Ejemplo Fortran 90:
A(3, :) = B(7:15)
• Asociativos
– Acceso a datos sin un orden fijo
– Nombres como subíndices
– Implementación con descriptor
Ejemplo JS
var items = {"tucuman": 12, "cordoba": 19, "salta": 21, "jujuy": 31, "merlo": 47,
"catamarca": 51, "mendoza": 61, "rosario": 73, "corrientes": 88};
listString = "";
for (var word in items) listString += items[word] + ", ";
alert(listString);
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 35
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 36
void main() { *s *q t
char *s, *q, t[5]; stack
s = (char *)malloc(9); d o s \0
strcpy(t, "dos");
strcpy(s, "uno"); int pop(int stac[], int *t) {
strcat(s, t); int poped;
q = s; if ((*t) == -1) {
return(0);
free(s);
} stack o heap
... else {
puts(q); poped = stac[*t--];
} return poped;
}
}
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 37
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 38
Llaves y cerraduras
Debe usar contador de referencias para garantizar el no dejar referencias colgadas
Deben coincidir los valores de lock y key
Al desalojar objeto, coloca un nulo en lock
Complejidad en tiempo:
- comparación de cerraduras y llaves en cada acceso
Uso de espacio:
- espacio extra para las cerraduras en cada apuntador
y objeto del heap
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 39
Enumeraciones
Se define un nombre para cada valor
No son cadenas
No soportan I/O
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 40
Registros
struct AUTO {
char marca[10]; miAuto
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 41
Implementación de registros
Conjunto heterogéneo de datos gestionados como un bloque
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 42
Uniones
struct LEASING { Espacio de almacenamiento compartido
unsigned short int cuotas;
por diferentes campos de datos
float valor;
}; Espacio asignado según el campo de
struct CONTADO { mayor tamaño
float monto; Peligro: almacenar por uno de los campos
char chq;
y luego recuperar por otro
};
union MODO { Normalmente vinculados a un valor
struct LEASING a; ‘discriminante’
struct CONTADO b;
};
… operacion[17] …
typedef char ID; venta tipo
a
struct VENTA { … cuotas valor …
MODO venta; b
ID tipo; monto chq
} operacion[100];
|----------------------- 6 -----------------------|---1---|
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 43
Campos de bits
Espacio de almacenamiento fraccionado en bits
Todos los campos del mismo tipo de entero sin signo
Tamaño múltiplo según el tipo de entero aplicado
Campos no accesibles mediante punteros
Soportan operaciones de I/O
struct FECHA {
unsigned short int dia : 5;
unsigned short int mes : 4;
unsigned short int anio : 7;
} ingreso;
ingreso.dia = 19; // 10011
ingreso.mes = 27; // 11011
ingreso.anio = 7; // 111
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 44
Archivos
Modo
Apertura
Secuencial
Modo
Acceso
Directo
Modo
Operaciones Lectura
Indexado
Escritura
Cierre
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 45
Archivos
disco S.O.
int main(){ H o l a \n
FILE *fp;
char txt[7];
cin >> txt;
fp = fopen(“c:\\texto.txt”, “w”);
if (fp) {
fprintf(fp, “%s”, txt);
fclose(fp);
}
else
cout << “error”;
}
920 H o l a \n
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 46
Tipos recursivos
Almacenamiento dinámico
Tamaño ajustable
Implementación de árboles, pilas, colas, etc.
struct CIUDAD {
char nombre[15];
unsigned int dist;
struct CIUDAD *prox;
} *primero;
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 47
r->prox = (NODO*)malloc(sizeof(NODO));
r->prox->prox = NULL;
r = r->prox; nombre prox NULL
}
return p;
}
...
NODO *primero = crear(3);
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 48
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 49
Subprogramas o subrutinas
• Implementan la abstracción de procesos
– Procedimientos (un punto de entrada y uno de salida)
• Definen nuevos enunciados (sentencias)
• No regresan valores
• Pueden modificar variables del contexto de la rutina llamadora
• Localidad de datos
• Acceso a datos globales
– Funciones (un punto de entrada y uno o más de salida)
•Definen nuevas operaciones Decisiones de diseño
•Deben regresar un solo valor • ¿Las variables locales se alojan en forma estática o
dinámica?
•Localidad de datos
• ¿Cuáles métodos de pasaje de parámetos se usan?
•Acceso a datos globales • ¿Los argumentos de llamada son verificados con
– Co-rutinas (múltiples puntos de los parámetros formales?
• Si se pasa como argumento un subprograma:
entrada y salida)
¿Sus parámetros de verifican?
• Paralelismo ¿Cómo se trata el ambiente de referencia?
• ¿Pueden sobrecargarse?
• ¿Son genéricos para operar con diferentes tipos?
• ¿Se proveen formas de compilación separada?
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 50
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 51
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 52
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 53
Alcance y existencia
Discriminante de
acceso: ámbito.id
Alcance
Tiempo de vida
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 54
Mecanismos de vinculación
Ámbitos
Estático Dinámico
(depende del texto del programa) (depende del flujo de ejecución)
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 55
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 56
procedure P is
procedure Q is El alcance a los símbolos es dentro de
procedure R is un ámbito de acceso
...
end R
...
end Q Estático Dinámico
procedure S is ¿S? R S
...
R S R S R
end S
... Q Q S Q Q
end P P P P P P
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 57
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 58
Referencia al contexto
Code: main
Código Almacenamiento foo
Estático : x
int x; estático (global)
Parámetros: void
int foo(int z) { dinámico en stack Retorno: exit
char ch[100]; dinámico en stack Link dinámico: void
if (z == 23) foo(7); Link estático
Variables locales: y, str
return 3;
Parámetros: z = 23
} Retorno
void main() { Link dinámico
int y; dinámico en stack Link estático
Variables locales: chr[]
char *str; dinámico en stack
Parámetros: z = 7
str = new char [100]; dinámico en heap Retorno
y = foo(23); Link dinámico
delete str; Link estático
Variables locales: chr[]
}
…
Heap: []
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 59
… LE Display
Q() LD LD
… P
Datos Datos
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 60
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 61
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 62
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 63
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 64
Pasaje de argumentos
Rutina-a Rutina-b
• Argumentos • Parámetros
Valor
Referencia
Resultado
Modos
Valor-resultado
Nombre
Pre-inicializados
Otros
Constantes
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 65
C++ n r aux
int fact(int n) { 700 704 …
int r; 0 1
if (n == 0) n r aux
r = 1; 650 654 …
else 1 1 1
r = n * fact(n – 1); n r aux
return r; 600 604 …
} 2 2 1
void main() { n r aux
int r, x = 3; 550 554 …
r = fact(x); 3 6 2
} r x aux
500 504 …
Base de pila 6 3 6
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 66
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 67
Stack 7
x y k
504 508 504
3 5 7
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 68
C#
namespace ConsoleApplication1 {
class Program {
static void divide(int n, int d, out int c, out int r) {
c = n / d;
r = n % d;
}
static void Main(string[] args) {
int x = 19, y = 4, rpta, resto;
divide(x, y, out rpta, out resto);
…
} Si usamos ‘ref’ en lugar de
} ‘out’ el traductor obliga a
} inicializar las variables
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 69
X referencia
Y=2 Main
X valor
call permuta(X, Y) permuta(X, Y) permuta(A, B)
… …
stop T=A
permuta(X, Y)
contains A=B permuta(A, B)
subroutine permuta(A, B) … B=T T=A
integer, intent(in out) :: A, B … return A=B
integer :: T X’, Y’
X, Y sin modificar B=T
T=A
… return
A=B
B=T Al retornar X’’, Y’’
actualiza X, Y …
return
Al retornar
end subroutine permuta stop actualiza X, Y
end program Main
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 70
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 71
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 72
Punteros a funciones
Pasaje de parámetros por nombre
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 73
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 74
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 75
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 76
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva 77
1955 Flow-Matic Hopper Cobol 1972 Smalltalk Kay y otros C++, JS, Java
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________