Cobol C Pascal Fortran 2. OBJETOS DE DATOS SmallTalk Java C++
Componentes de un objeto La memoria tiene una estructura simple: Secuencia de bits agrupados en bytes o words En ella, es posible representar objetos de cualquier naturaleza lógica: Arreglos Stacks Números Strings Etc.
Objetos de Datos Un Objeto de Datos (ODD) es un conjunto de bytes creados (reservados y ligados) en tiempo de ejecución Un ODD es un contenedor de valores Creados
el compilador y el sistema Objetos de Datos el programador Accesibles al programador El programador los crea, manipula y destruye durante la ejecución Variables Constantes Arreglos el compilador y el sistema No son accesibles directamente por el programador Su creación es automática Stacks del sistema Registros de activación Listas de espacios disponibles Creados por
Componentes de un ODD Nombre: Sintácticamente, es un identificador (exceptuando los literales) Atributos: Determinan las propiedades de un nombre, siendo el más importante el Tipo Referencia: La referencia es la dirección de memoria que contiene un valor asociado a un nombre Valor: Es uno perteneciente al conjunto conocido como tipo
Constantes ODD cuyo valor NO se modifica durante la ejecución del programa Constante literal Su nombre es la representación escrita de su valor Constante simbólica También declarada, su nombre es un identificador x = 3.1416; printf("El resultado es:"); const Pi = 3.1416; #define IVA 0.19
Variables ODD cuyo valor suele modificarse durante la ejecución Una variable se puede concebir como una cuádrupla X = (N,T,R,V) donde N = Nombre T = Tipo R = Referencia V = Valor Gráficamente: referencia nombre Tipo valor
Declaraciones C ForTran Es una sentencia de programa que provee al traductor del lenguaje información sobre los atributos de una variable Los lenguajes traducen la declaración de variadas formas: C ForTran
Declaraciones La traducción de la declaración en C: int n; provoca el siguiente efecto gráfico: n int C liga nombre + tipo a su referencia y valor durante ejecución
Declaraciones La traducción de la declaración ForTran: INTEGER N provoca el siguiente efecto gráfico: 1005 N INTEGER ForTran sitúa todos los objetos de dato en un área de memoria contigua al código; esta situación se mantiene invariante durante ejecución
Binding
Binding Binding (ligadura) es la acción de asociar Tipo Referencia Valor Nombre de variable a un Instante en el cual ocurre la asociación de: Tiempo de ligadura una propiedad al nombre
Binding Ligadura en Lenguajes débilmente tipados Lenguajes fuertemente tipados Las reglas de tipo son estrictamente impuestas, tanto en tiempo de compilación como en tiempo de ejecución Las reglas de tipo NO son impuestas, aunque existan declaraciones implícitas o explícitas de tipos de datos
Lenguajes fuertemente tipados Ligadura estática, anticipada ó en tiempo de compilación Asociación de un Tipo a una variable Se crean los descriptores ( N + T ) Ligadura intermedia ó en tiempo de creación Asociación de una Referencia a una variable ( N + T ) + R Ligadura dinámica ó en tiempo de ejecución Asociación de un Valor a una variable ( ( N + T ) + R ) + V
Lenguajes débilmente tipados Ligadura dinámica, tardía ó en tiempo de ejecución Asociación de un Valor a una variable Un Tipo está ligado a un valor Un valor está representado a partir de cierta Referencia Asociar a un Nombre de variable una Referencia en la cual existe un Valor de cierto Tipo ( ( T + V ) + R ) + N
Operaciones Función de transformación de argumentos (datos) de ciertos tipos) en resultados de otros tipos f(lista de argumentos) (lista de resultados) Operación: (tipo arg1, tipo arg2, ...) (tipo res1, tipo res2, ...) Por ejemplo, + : (float, int) (float) / : (int, int) (int) == : (float, float) (boolean) & : (char) (ref (char))
Expresiones Una expresión es un conjunto de operadores y operandos cuyo objetivo es la generación de un valor Una expresión se puede representar como un árbol binario en el cual: Los nodos interiores son los operadores Los nodos hojas son los operandos Las alternativas de descripción sintáctica de una expresión resultan de los recorridos aplicados sobre el respectivo árbol de expresión
Sintaxis en expresiones Notación prefija (polaca) Recorrido preorden (RID) Operador(Operando1)(Operando2) Notación infija (convencional) Recorrido enorden (IRD) (Operando1)Operador(Operando2) Es ambigua Notación postfija (polaca inversa) Recorrido postorden (IDR) (Operando1)(Operando2)Operador
Notación prefija Expresión (a + b) * (c – d) Árbol de expresión * + Ordinaria: * ( + ( a, b ), – ( c, d ) ) Cambridge: ( * ( + a b ) (– c d ) ) Polaca: * + a b – c d
Notación infija Expresión (a + b) * (c – d) Árbol de expresión * + a Ambigua: a + b * c – d
Notación postfija Expresión (a + b) * (c – d) Árbol de expresión * + Ordinaria: ( ( a, b ) +, ( c, d ) – ) * Polaca inversa: a b + c d – *
Ejemplo – * + c d a b * + – a b d c Prefija: * + a b – c d – * + a b c d Postfija: a b + c d – * a b + c * d – Infija: a + b * c – d a + b * c – d Uso de ( )
Control de secuencia Los lenguajes definen reglas implícitas de control del orden temporal de ejecución de las operaciones en una expresión Estas reglas están destinadas a eliminar el uso excesivo de paréntesis en expresiones NO ambiguas Las reglas implícitas de control de secuencia son: Prioridad de operadores Asociatividad para operadores de igual prioridad
Prioridad Se establece una jerarquía de operadores Para la expresión f(x, y) = x – 3 * y 3 en C f(12, 3) = 27 en Smalltalk
Asociatividad Se aplica a operadores de idéntica prioridad Puede ser izquierda (AI) o derecha (AD) Para la expresión f(x, y) = x – y – 3 0 en C (AI) f(7, 4) = 6 en APL (AD)
Evaluación incompleta Sustentado en el comportamiento de los operadores lógicos, el concepto de evaluación incompleta constituye una mejora a la eficiencia en tiempo de ejecución La expresión p(x) q(x) genera el valor false si p(x) es false, sin evaluar q(x) La expresión p(x) q(x) genera el valor true si p(x) es true, sin evaluar q(x)