Zusammenfassung der Ressource
Variables, ámbito y comprobación de
tipos
- Variable: (nombre, dirección, valor, tipo, tiempo de vida, ámbito)
- Nombre o identificador: cadena de caracteres
empleada para reconocer alguna entidad del
programa
- Palabras especiales: indican acciones a realizar o
se emplean para separar entidades sintácticas de
los programas. Pueden ser: palabras clave o
palabras reservadas
- Palabras clave:
sólo son palabras
especiales en
determinados
contextos
- Palabras
reservadas:
palabra especial de
un LP que no
puede emplearse
como identificador
- Nombres predefinidos:
nombres que tienen un
significado predefinido
pero que puede ser
cambiado (redefinido)
por el usuario Ej: Ada
(integer, float), Pascal
(readln, writeln, trunc,
round), C (printf, scanf)
- Direccion de una
variable: dirección de
memoria a la que está
asociada
- Un mismo nombre
puede tener asociados
diferentes direcciones
en lugares diferentes
del programa
- Alias: cuando se usa
más de un nombre
de variable para
referenciar la misma
dirección
- Tipo de una variable:
determina el rango de
valores que puede tomar la
variable y el conjunto de
operaciones definidas para
los valores del tipo
- Valor de una variable:
contenido de la celda o
celdas de memoria
asociadas a las variables
- Ligadura
(binding)
- Ligadura:
asociación entre un
atributo y una
entidad
- El momento en el que
se produce se
denomina tiempo de
ligadura.
- Ligadura estática: si
ocurre antes del
tiempo de ejecución y
permanece
inalterable durante la
ejecución del
programa.
- Ligadura dinámica: si
ocurre durante del
tiempo de ejecución
o puede cambiar en
el transcurso de la
ejecución del
programa
- Tiempo de
compilación,Tiempo
de linkado,Tiempo
de carga,Tiempo de
ejecución
- Ligadura de tipos
- Antes de que una
variable pueda ser
referenciada en un
programa debe
haber sido ligada a
un tipo de dato.
- Ligadura estática de
tipos
- Declaración explícita: se
utiliza una sentencia que
declara una lista de
identificadores como de un
tipo determinado
- Declaración implícita: forma de
asociar variables con tipos a través
de convenciones sintácticas. La
primera aparición del identificador
constituye su declaración implícita
- Algoritmo de inferencia de
tipos: determina los tipos de las
variables que intervienen en las
expresiones sin que sean
declaradas de forma explícita
por el programador o da un
mensaje de error si no puede
inferirse
- Ligadura dinámica de tipos
- El tipo no se especifica mediante
una sentencia de declaración, sino
cuando se le asigna un valor
mediante una sentencia de
asignación
- Ligadura de espacio y tiempo de vida
- Tiempo de vida de una variable de
programa: tiempo durante el cual la
variable está ligada a una localización
específica de memoria ⇒ tiempo entre
asignación y desasignación de espacio
- Variables
estáticas
- Se ligan a celdas de memoria antes de
que comience la ejecución del programa
y permanece ligada a las mismas celdas
hasta que acaba la ejecución del
programa
- Variables dinámicas de
pila
- La ligadura de espacio se produce
cuando se elabora la sentencia de
declaración, exceptuando las que se
ligan estáticamente
- Variables dinámicas de montón
(heap)
- Montón (heap): colección de celdas de
almacenamiento cuya estructura está muy
desorganizada debido a la naturaleza
imprevisible de su uso
- Explícitas
- Variables sin nombre cuyo almacenamiento
se asigna y desasigna en tiempo de ejecución
mediante la utilización por el programador de
instrucciones específicas
- Implícitas
- Se les liga espacio del montón
sólo cuando se le asignan valores
(de hecho, todos sus atributos se
ligan cada vez que se produce
una asignación
- Tipos
- Comprobación de tipos
- Comprobación de tipos:
actividad que nos asegura
que los operandos de un
operador son de tipos
compatibles
- Tipos compatibles: un tipo legal
para el operador o un tipo que
atendiendo a determinadas
reglas del lenguaje puede ser
convertido implícitamente
mediante código generado por
el compilador en un tipo legal.
Esta conversión automática se
denomina coacción (coercion)
- Error de tipos: aplicación
de un operador a un
operando de tipo
inapropiado
- Si todas las ligaduras de tipos a
variables son estáticas ⇒ las
comprobaciones de tipo pueden
realizarse de forma estática
- Si hay ligadura dinámica
de tipos a variables ⇒
debe realizarse una
comprobación dinámica
de tipos (más costosa
que en tiempo de
compilación)
- Disciplina de tipos (strong typing)
- Un lenguaje tiene disciplina de
tipos si los errores de tipos se
detectan siempre ⇒ es
necesario determinar los tipos
de todos los operandos, ya sea
en tiempo de compilación o de
ejecución
- Compatibilidad de tipos
- Compatibilidad de tipos
nominal: dos variables tienen
tipos compatibles si están
ligadas al mismo nombre de tipo
- Compatibilidad de tipos
estructural: dos variables
tienen tipos compatibles si sus
tipos tienen la misma
estructura
- Equivalencia de declaración:
dos variables tienen tipos
compatibles si uno de los
tipos está definido con el
nombre del otro
- Ámbito
- Ámbito de una variable de programa:
rango de sentencias en las que es
visible la variable
- Ámbito estático ♦ Ámbito
estático (introducido por ALGOL
60): método de ligadura de
nombres a variables no locales
que ocurre en tiempo de
compilación
- Ámbito dinámico (APL,
SNOBOL4): basado en la
secuencia de llamadas a
subprogramas y no en la
relación sintáctica entre
ellos ⇒ el ámbito sólo
puede determinarse en
tiempo de ejecución
- Entorno de referencia de una sentencia:
colección de todos los identificadores
visibles en dicha sentencia
- Constantes
- Constante: objeto al que se le liga un valor
sólo en el momento en el que se le liga el
espacio ⇒ su valor no puede cambiarse por
asignación o por sentencia de entrada
- Inicialización de variables
- Inicialización: ligadura de un valor a una
variable en el momento en el que
también se le liga el almacenamiento
- Variables no inicializadas
- Las declaraciones sin inicialización crean
variables no inicializadas: se les liga memoria
pero su contenido es arbitrario y no puede ser
interpretado como un valor del tipo del objeto
declarado. El uso de un valor no incializado
produce resultados impredecibles y debe
evitarse