Anda di halaman 1dari 28

Lenguajes de Programacin

Ambientes de Vinculacin

Conceptos
Vinculacin (o binding) es una asociacin entre
entidades de programacin, tales como entre una
variable y su valor o entre un identificador y un
tipo
Enfoque en la vinculacin de identificadores a
entidades

Identificadores
Identificadores son cadenas de caracteres definidas por los
programadores para servir de referencia a entidades de
computacin
Tienen por objetivo aumentar la legibilidad, facilidad de
escritura y modificabilidad
LPs pueden ser case sensitive y limitar el nmero mximo de
caracteres
Algunos identificadores pueden tener significado especial
para el LP
Palabras reservadas Palabra Clave Palavras Pre-definidas
FORTRAN
INTEGER REAL
REAL INTEGER
3

Ambientes de vinculacin
La interpretacin de comandos y expresiones, tales
como a = 5 o g(a + 1), dependen de lo que denotan
los identificadores utilizados en esos comandos y
expresiones
Un ambiente (o environment) es un conjunto de
vinculaciones.
Cada vinculacin posee un determinado mbito, es
decir, la regin del programa donde la entidad es
visible.
4

Ambientes de Vinculacin
Vinculacin de Identificador a dos Entidades
distintas en el mismo Ambiente
int a = 13;
void f( ) {
int b = a;
int a = 2;
b = b + a;
}

Ambito
Esttico
definicin del subprograma
tiempo de compilacin
texto del programa

Dinmico
llamada del subprograma
tiempo de ejecucin
flujo de control del programa
6

Ambito Esttico
x

x
y

z
z
w
Bloque Monoltico

Bloque No Anidados

Bloques Anidados

Ambito Estatico
Estructura Monoltica. Todo programa es compuesto por um
nico bloque. Las vinculaciones tienen como mbito de
visibilidad el programa entero. Es la ms elemental posible y
no es apropiada para programas grandes
Estructura no anidada. El ambito de visibilidad de los
identificadores es el bloque donde fueron creados por los
otros. Ej. Versiones antiguas de BASIC y COBOL.
Identificadores que no pueden ser locales son forzados a ser
globales
Estructura Anidadas. Cualquier bloque puede ser anidado
dentro de outro bloque y localizado en cualquier lugar que sea
converniente.
8

Ambito Esttico
Ocultamiento de Entidad en Bloques Anidados
void main() {
int i = 0, x = 10;
while (i++ < 100) {
float x = 3.231;
printf(x = %f\n, x*i);
}
}

Ambito Esttico
Referencia Selectiva en ADA
procedure A is
x : INTEGER;
procedure B is
y : INTEGER;
procedure C is
x : INTEGER;
begin
x := A.x;
end C;

begin
null;
end B;
begin
null;
end A;

10

mbito Esttico
Problemas con Estructura Anidada. Puede requerir que uma
variable sea declarada globalmente a pesar que sea usada por
pocos bloques.
P
A

C
E

Figura a

E
Figura b
11

mbito Esttico
Estructura de Bloques de C.
int x = 10;
int y = 15;
void f( ) {
if (y x) {
int z = x + y;
}
}
void g( ) {
int w;
w = x;
}

void main() {
f();
x = x + 3;
g();
}

12

Ambito Dinmico
procedimiento sub() {
entero x = 1;
procedimiento sub1() {
escriba( x);
}
procedimento sub2() {
entero x = 3;
sub1();
}
sub2();
sub1();
}

13

Ambito Dinmico
Problemas

Eficiencia
Legibilidad
Acceso
Confiabilidad

No usado por la mayoria de LPs

14

Definiciones y Declaraciones
Definiciones
producen
vinculaciones
entre
identificadores y entidades creadas en la propia
definicin.
Declaraciones
producen
vinculaciones
entre
identificadores y entidades ya creadas o que todavia
lo sern.

15

Definiciones y Declaraciones
Localizacin de Definiciones de Variables en C++
void f() {
int a = 1;
a = a + 3;
int b = 0;
b = b + a;
}

16

Declaracin de Constantes
En C
const float pi = 3.14;
#define pi 3.14

En JAVA
final int const1 = 9;
static final int const2 = 39;
final int const3 = (int)(Math.random()*20);
static final const4 = (int)(Math.random()*20);
final int j;
Construtor () {
j = 1;

17

Definiciones y Declaraciones de Tipos


Definiciones Tipos en C
struct fecha {
int d, m, a;
};

union angulo {
int grados;
float rad;
};

enum dia_util {
lun, mar, mie,
jue, vie
};

Declaraciones Tipos en C
struct fecha;
typedef union angulo curvatura;
typedef struct fecha aniversario;

18

Definiciones y Declaraciones de
Variables
Definiciones de Variables en C
int k;
union angulo ang;
struct data d;
int *p, i, j, k, v[10];

Definiciones con Inicializacin


int i = 0;
char coma = ',';
float f, g = 3.59;
int j, k, l = 0, m=23;
19

Definiciones y Declaraciones de
Variables
Definiciones con Inicializacin Dinmica
void f(int x) {
int i;
int j = 3;
i = x + 2;
int k = i * j * x;
}

Definiciones con Inicializacin en Variables Compuestas


int v[3] = { 1, 2, 3 };
20

Definiciones y Declaraciones de
Variables
Declaracin de Variables en C
extern int a;

Declaracin de Variables y C++


int r = 10;
int &j = r;
j++;

21

Definiciones y Declaraciones de
Subprogramas
Definicin de Subprogramas en C
int suma (int a, int b) {
return a + b;
}

Declaracin de Subprogramas en C
int incr (int);
void f(void) {
int k = incr(10);
}
int incr (int x) {
x++;
return x;
}

22

Composicin de Definiciones
Definiciones pueden ser compuestas a partir
de otras definiciones o a partir de ellas
mismas. Pueden ser compuestas o recursivas

23

Definiciones Compuestas
Secuenciales
Utilizan definiciones establecidas anteriormente en el
programa. Ejemplo en C:

struct funcionario {
char nombre [30];
int matricula;
float salario;
};
struct empresa {
funcionario listafunc [1000];
int numfunc;
float facturamiento;
};
int m = 3;
int n = m;

24

Definiciones Compuestas
Secuenciales
Definiciones Secuenciales en ML
val par = fn (n: int) => (n mod 2 = 0)
val negacion = fn (t: bool) => if t then false else true
val impar = negacion o par
val juego = if x < y then par else impar

25

Definiciones Compuestas Recursivas


Definicin Recursiva
de Funcin en C
float potencia (float x, int n) {
if (n == 0) {
return 1.0;
} else if (n < 0) {
return 1.0/ potencia (x, -n);
} else {
return x * potencia (x, n 1);
}
}

Tipo Recursivo en C
struct lista {
int elemento;
struct lista * proxima;
};

26

Definiciones Compuestas Recursivas


Definiciones Mutuamente Recursivas en C
void segunda (int);
void primera (int n) {
if (n < 0) return;
segunda (n 1);
}
void segunda (int n) {
if (n < 0) return;
primera (n 1);
}
27

Definiciones Compuestas Recursivas


Error en Definicin de Funcin strcmp en C
int strcmp (char *p, char *q) {
return !strcmp (p, q);
}

Explicitacin de Recursividad en Funcin ML


val rec mdc = fn ( m:int, n: int) = >
if m > n then mdc (m n, n)
else if m < n then mdc (m, n m)
else m
28

Anda mungkin juga menyukai