Tema 2. Variables, ámbitos y comprobación de tipos

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Tema 2. Variables, ámbitos y comprobación de tipos"

Transcripción

1 Tema 2. Variables, ámbitos y comprobación de tipos 1. Variables 1.1. Nombre 1.2. Dirección 1.3. Tipo 1.4. Valor 2. Ligadura(binding) 3. Tipos 2.1. Ligadura de tipos Ligadura estática de tipos Ligadura dinámica de tipos 2.2. Ligadura de espacio y tiempo de vida Variables estáticas Variables dinámicas de pila Variables dinámicas de montón (explícitas e implícitas) 3.1. Comprobación de tipos 3.2. Disciplina de tipos 3.3. Compatibilidad de tipos 4. Ámbito 4.1. Ámbito estático 4.2. Ámbito dinámico 4.3. Entorno de referencia 5. Constantes 6. Inicialización de variables 6.1. Variables no inicializadas Departamento de Informática 1 Área de Lenguajes y Sistemas Informáticos

2 Bibliografía Básica Bal, H.E., Grune, D., Programming Languages Essentials, Addison-Wesley, Págs Sebesta, R.W., Concepts of Programming Languages, 4 ed, Addison-Wesley, Págs Complementaria Dershem, H.L., Jipping, M.J., Programming Languages: Structures and Models, 2 ed, PWS Publishing Company, Págs , Fischer, A.E., Grodzinsky, F.S., The Anatomy of Programming Languages, Prentice-Hall, Págs Ejercicios 1º Razona sobre la veracidad de las siguientes frases que hacen referencia a los lenguajes imperativos. a) Todas las variables disponen de un nombre o identificador. b) Cada identificador en un programa tiene siempre asociada una sola dirección de memoria. c) Es posible tener varios identificadores que hacen referencia a la misma dirección de memoria. d) La vinculación dinámica de tipos consiste en asociar tipos a variables a través de convenciones sintácticas (por ejemplo, en algunos lenguajes estas convenciones hacen referencia a la letra por la que comienza o el símbolo en el que acaba el nombre de la variable). e) Las variables de tipo apuntador a otros objetos son siempre variables dinámicas de montón. f) En todos los lenguajes imperativos, todas las variables locales declaradas en subprogramas son variables dinámicas de pila. g) No hay ninguna diferencia entre subtipo y tipo derivado de un tipo existente. h) Pascal es un lenguaje con disciplina de tipos. i) En Pascal, las variables creadas mediante la utilización de new se caracterizan porque el espacio que se les vincula se toma de la pila de ejecución. j) Si un lenguaje de programación hace una evaluación dinámica del ámbito, entonces es imposible realizar una comprobación de tipos estática de las referencias no locales. 2º Qué entendemos por ligadura estática de tipos? Mediante qué distintas formas realizan los lenguajes de programación la ligadura estática de tipos? (Menciona al menos un lenguaje para cada una de las formas.) Qué ventajas aporta la ligadura estática de tipos sobre la dinámica? 3º La ligadura dinámica de tipos está muy relacionada con las variables dinámicas de montón del tipo implícitas. Explica esta relación. Departamento de Informática 2 Área de Lenguajes y Sistemas Informáticos

3 4º Distingue entre: a) Ligadura estática de tipos, disciplina de tipos y ligadura dinámica de tipos. b) Coacción, error de tipos y comprobación de tipos. c) Compatibilidad de tipos nominal y compatibilidad de tipos estructural. 5º En Haskell no es necesario declarar explícitamente el tipo de los objetos que se definen y, sin embargo, es un lenguaje con disciplina de tipos. Cómo explicas esto? Aunque, como decimos, no es necesario, existen algunas razones por las que puede ser adecuado escribir las declaraciones. Cuáles son esas razones? 6º En qué categorías se clasifican las variables atendiendo a la manera en que se produce la ligadura de espacio? Explica brevemente cómo se realiza dicha ligadura en cada uno de los tipos. 7º Cuando, en tiempo de ejecución, se entra en un bloque, las variables locales ya no contienen los valores que almacenaban la última vez que fue ejecutado dicho bloque. Por qué ocurre esto? 8º Dado el siguiente esqueleto de programa escrito en C, dibuja un rectángulo alrededor de cada uno de sus bloques, etiquétalos con las letras A, B, C, etc. y responde a las siguientes preguntas. int x, y, z; fun1() { int j, k, l; { int m, n, x; } } fun3() { int y, z, k; } main() { } a) Menciona un bloque que esté anidado dentro de otro bloque. b) En qué ámbitos son accesibles a la vez las variables globales x, y, z? c) Qué variables son accesibles desde la función main? d) Son k de fun1 y k de fun3 la misma variable? Razona la respuesta. e) Son las variables globales y y z accesibles desde fun3? Razona la respuesta. f) En qué bloques j hace referencia a una variable local? En qué bloques j es una variable no local? g) En que bloque o bloques pueden usarse a la vez m y k? Departamento de Informática 3 Área de Lenguajes y Sistemas Informáticos

4 9º Indica qué valor de x se imprime en el procedimiento sub1 suponiendo tanto ámbito estático como ámbito dinámico. program pregunta_9; var x: integer; procedure sub1; writeln( x =, x); end; procedure sub2; var x: integer; x := 10; sub1 end; {de pregunta_9} x := 5; sub2; end. {de pregunta_9} 10º Qué es el ámbito de una variable de programa? Define el término bloque. En el siguiente esqueleto de programa indica cuáles son los entornos de referencia en los puntos A y B, tanto para el caso de ámbito estático como para el de ámbito dinámico. program pregunta_10; var a,b,c: integer; procedure p1; var b: integer; {A} end; {de p1} procedure p2; var b,c: integer; procedure p3; var a: integer; p1 end; {de p3} {B} p3 end; {de p2} procedure p4; var b: integer; p2 end; {de p4} p4; end. {de pregunta_10} Departamento de Informática 4 Área de Lenguajes y Sistemas Informáticos

5 Tema 2. Variables, ámbito y comprobación de tipos 1. Variables Variable: (nombre, dirección, valor, tipo, tiempo de vida, ámbito) 1.1. Nombre Nombre o identificador: cadena de caracteres empleada para reconocer alguna entidad del programa Los nombres de variables son los identificadores más numerosos en los programas, aunque no todas las variables tienen nombre Subprogramas, parámetros formales y otras entidades de programa también poseen nombre o identificador Cuestiones relativas al diseño de nombres: 1. Cuál es la longitud máxima de un identificador? 2. Pueden emplearse caracteres conectores? 3. Se distinguen mayúsculas de minúsculas? 4. Las palabras especiales son palabras reservadas o palabras clave? Cuál es la longitud máxima de un identificador? Algunos lenguajes limitan el número de caracteres (31 en C), mientras que otros, como Ada, no lo hacen Pueden emplearse caracteres conectores? El conector más empleado es _ Departamento de Informática 5 Área de Lenguajes y Sistemas Informáticos

6 Se distinguen mayúsculas de minúsculas? Lenguajes como C, C++, Modula-2 o Java distinguen el uso de mayúsculas y minúsculas en los identificadores Ej. de tres nombres distintos en C: suma, Suma, SUMA problemas de legibilidad (nombres que parecen muy similares denotan entidades distintas). Solución: utilizar solamente minúsculas En Java (o Modula-2) muchos nombre predefinidos incluyen mayúsculas y minúsculas. Ej.: nombre del método para convertir una cadena de caracteres en un valor entero parseint (ParseInt o parseint son incorrectos) problema para escribir los programas (hay que recordar la forma en que se escriben estos nombre predefinidos) Las palabras especiales son palabras reservadas o palabras clave? 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 Ej: Fortran REAL ALTURA INTEGER REAL REAL = 8.25 REAL INTEGER Aunque tanto el compilador como los programadores distinguen un identificador de una palabra especial por su contexto, el uso de palabras clave puede conllevar problemas de legibilidad 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) Departamento de Informática 6 Área de Lenguajes y Sistemas Informáticos

7 1.2. Dirección 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 (funciones f1 y f2 empleando la variable i) o en momentos diferentes durante la ejecución del programa (activaciones recursivas de un subprograma) La dirección de una variable se denomina l-valor la aparición de una variable en la parte izquierda de una asignación denota su dirección Alias Alias: cuando se usa más de un nombre de variable para referenciar la misma dirección Son un obstáculo a la legibilidad y verificación de programas. Ej: si A y B son alias cualquier cambio en A también cambia B y viceversa Formas de crear alias: Registros variantes de Pascal y Ada o uniones de C y C++: Medio de ahorrar espacio: la misma dirección se usa para almacenar tipos diferentes en momentos diferentes Medio de evitar las reglas de tipos del lenguaje: permite manipular diferentes tipos de datos en la misma localización de memoria Departamento de Informática 7 Área de Lenguajes y Sistemas Informáticos

8 En lenguajes con apuntadores, dos variables apuntador son alias cuando apuntan a la misma localización de memoria. En C y C++, si un apuntador hace referencia al espacio designado por un nombre de variable, este nombre y el apuntador son alias Ej: C int a, *pa; pa = &a; /* pa y a son alias */ Empleando paso de parámetros por referencia a los subprogramas 1.3. Tipo 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 Ej. integer: [ ], {+, -, *, /} 1.4. Valor Valor de una variable: contenido de la celda o celdas de memoria asociadas a las variables El valor de una variable se denomina r-valor la aparición de una variable en la parte derecha de una asignación denota su valor (Para acceder a un r-valor primero debe determinarse su l-valor) 2. Ligadura (binding) Ligadura: asociación entre un atributo y una entidad El momento en el que se produce se denomina tiempo de ligadura. Ejemplos: Tiempo de compilación la ligadura de una variable de un programa en Pascal a su tipo de datos Departamento de Informática 8 Área de Lenguajes y Sistemas Informáticos

9 Tiempo de linkado la ligadura de una llamada a un subprograma de biblioteca al código del subprograma Tiempo de carga la ligadura de ciertas variables (ej: globales) a sus celdas de memoria (su dirección) Tiempo de ejecución la ligadura de las variables locales (no estáticas) a sus celdas de memoria 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 2.1. Ligadura de tipos Antes de que una variable pueda ser referenciada en un programa debe haber sido ligada a un tipo de dato. Aspectos importantes: cuándo se liga el tipo y cómo se especifica A. Ligadura estática de tipos Puede hacerse mediante: 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 Ejemplos de LP: Fortran, Basic, Perl Problema: variables no declaradas explícitamente de manera accidental por el programador toman un tipo por defecto Departamento de Informática 9 Área de Lenguajes y Sistemas Informáticos

10 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 Ej: Haskell f x y x == True = y * y otherwise = y / 2 B. 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 se liga al tipo del valor, variable o expresión de la parte derecha de la asignación (APL, SNOBOL4) Ventaja: proporciona muchísima flexibilidad de programación Ej: APL lista (tipo: lista de reales de long. 4) lista 15 (tipo: variable entera) Desventajas: No se detectan incorrecciones de tipo en las asignaciones. El tipo de la parte izquierda simplemente se cambia al de la derecha Ej: i, x almacenan valores de tipo entero y almacena un valor de tipo real si por error escribimos i y en lugar de i x no se detecta el error, sino que el tipo de i se cambia a real. En lenguajes con ligadura estática de tipos (Pascal, Ada) el compilador detectaría el error. Aunque en otros (C), en muchas ocasiones el tipo de la parte derecha se convierte automáticamente al de la izquierda Departamento de Informática 10 Área de Lenguajes y Sistemas Informáticos

11 El coste de implementación de la ligadura dinámica de atributos es mayor, sobre todo en tiempo de ejecución: Comprobación de tipos Mantenimiento del descriptor asociado a cada variable en el que se almacena el tipo actual Cambio en el tamaño de la memoria asociada a la variable 2.2. Ligadura de espacio y tiempo de vida Proceso de asignación: ligar celdas de memoria, tomadas de zonas de memoria disponible, a variables Proceso de desasignación: desligar las celdas de memoria de la variable y devolver las celdas a las zonas de memoria disponible 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 Clasificación de las variables en cuatro categorías atendiendo a sus tiempos de vida y a la zona de memoria desde donde se realiza la asignación A. 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 Las variables globales son variables estáticas Puede ser conveniente declarar variables en subprogramas que retengan el valor entre ejecuciones diferentes variables estáticas en subprogramas (ej. static en C) Departamento de Informática 11 Área de Lenguajes y Sistemas Informáticos

12 Ventaja principal: eficiencia Todas pueden tener direccionamiento directo (otros tipos de variable necesitan direccionamiento indirecto que es más lento) No hay sobrecarga en tiempo de ejecución por asignación o desasignación de espacio Desventaja: reducida flexibilidad Si un LP no dispone de otro tipo de variables no se soportan programas recursivos B. 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 Elaboración de una sentencia de declaración: proceso de asignación y ligadura de espacio indicada por la declaración que tiene lugar cuando la ejecución alcanza el código de dicha declaración la elaboración se produce en tiempo de ejecución Ej: los procedimientos en Pascal tienen: Sección de declaración: se elabora justo antes de la ejecución del código, cuando se llama al procedimiento Sección de código La asignación se produce en tiempo de elaboración y la desasignación al devolver el control al procedimiento que realiza la llamada El espacio se asigna en la pila de tiempo de ejecución Las variables locales (declaradas en subprogramas) son variables dinámicas de pila (a excepción de las declaradas como estáticas) Departamento de Informática 12 Área de Lenguajes y Sistemas Informáticos

13 Ventajas: Todas las variables comparten el mismo espacio de memoria (la pila) Permiten recursión permite almacenar una copia diferente de las variables locales para cada una de las llamadas recursivas Desventaja: Sobrecarga en tiempo de ejecución debido a la asignación y desasignación de espacio en la pila C. 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 Dos clases: explícitas e implícitas C.1. 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 Sólo pueden ser referenciadas mediante apuntadores La creación/destrucción de variables puede hacerse mediante un operador (C++, Ada) o una función de biblioteca (C, Pascal) Departamento de Informática 13 Área de Lenguajes y Sistemas Informáticos

14 Ejemplo: Pascal type pnodo = ^nodo; nodo = record end; var nuevo_nodo: pnodo; new(nuevo_nodo); dispose(nuevo_nodo); end; { La ligadura del tipo es estática y la de espacio dinámica} Uso: estructuras dinámicas (listas, árboles, grafos, ) Desventajas: Dificultad para usarlas correctamente Coste en tiempo de ejecución en las operaciones de referencia, asignación y desasignación C.2. 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) Ejemplo: variables de APL Ventaja: flexibilidad en la programación permite escribir código muy genérico Departamento de Informática 14 Área de Lenguajes y Sistemas Informáticos

15 Desventajas: Dejan de detectarse algunos errores de tipo Sobrecarga en tiempo de ejecución (asignación/desasignación de espacio y resto de atributos) 3. Tipos 3.1. Comprobación de tipos Generalización de los conceptos de operandos y operadores para incluir a subprogramas y sentencia de asignación: Subprogramas operadores cuyos operandos son sus parámetros Asignación operador binario cuyos operandos son la variable a la que se asigna el valor y la expresión a evaluar 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) Departamento de Informática 15 Área de Lenguajes y Sistemas Informáticos

16 LP (Pascal, Ada, C) que permiten el almacenamiento en la misma celda de memoria de valores de tipos diferentes en momentos distintos de la ejecución (registros variantes y uniones) la comprobación de tipos para estas clases de datos debe ser dinámica requiere mantener durante la ejecución el tipo actual asociado a la celda de memoria no todos los errores pueden detectarse con una comprobación estática de tipos 3.2. 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 Pascal Cercano a tener disciplina de tipos pero no realiza comprobación de tipos en los registros variantes (incluso puede omitirse la etiqueta discriminatoria en dichos registros) Ada Resuelve el problema de los registros variantes realizando comprobación dinámica de tipos (sólo en este caso) Tiene una función de biblioteca que permite extraer un valor de una variable de cualquier tipo (como una cadena de bits) y usarlo como un tipo diferente (no es una conversión de tipos) se trata de una suspensión temporal de la comprobación de tipos C No tiene disciplina de tipos por: No se realiza comprobación de tipos sobre las uniones Permite funciones con parámetros sobre los que no se realiza comprobación de tipos Departamento de Informática 16 Área de Lenguajes y Sistemas Informáticos

17 Java Tiene disciplina de tipos (no hay uniones) ML y Haskell Poseen disciplina de tipos Los tipos de los parámetros de las funciones (y de estas mismas) se conocen en tiempo de compilación (ya sea por declaración del usuario o por inferencia de tipos) 3.3. Compatibilidad de tipos Métodos: Compatibilidad de tipos nominal: dos variables tienen tipos compatibles si están ligadas al mismo nombre de tipo Ej: type T = array [1..10] of integer; var a, b: T; a := b; Compatibilidad de tipos estructural: dos variables tienen tipos compatibles si sus tipos tienen la misma estructura Ej: type T = array [1..10] of integer; S = array [1..10] of integer; var a: S; b: T; a := b; Departamento de Informática 17 Área de Lenguajes y Sistemas Informáticos

18 Equivalencia de declaración: dos variables tienen tipos compatibles si uno de los tipos está definido con el nombre del otro Ej: type var T = array [1..10] of integer; S = T; a: S; b: T; a := b; La mayoría de LP utilizan combinaciones de estos tres métodos de compatibilidad Tipo anónimo: tipo asociado directamente con una variable mediante una declaración sin proporcionarle un nombre Ej. en Ada: a, b: array (1..10) of INTEGER; c: array (1..10) of INTEGER; La interpretación es obvia usando compatibilidad de tipos estructural Compatibilidad nominal? Ej. Ada a, b y c son incompatibles Compatibilidad de tipos nominal: Fácil de implementar pero muy restrictiva Ej. usando un lenguaje con interpretación estricta de la compatibilidad de tipos nominal: Departamento de Informática 18 Área de Lenguajes y Sistemas Informáticos

19 type tipo_indice = ; var contador: integer; indice: tipo_indice; contador := indice; indice := contador; Compatibilidad de tipos estructural: Debe compararse la estructura de ambos tipos, pero: Son compatibles dos registros con la misma estructura pero con nombres de campos diferentes? Son compatibles arrays del mismo tipo y con el mismo número de elementos pero con rangos de índices diferentes (0..9 / 1..10)? Son compatibles tipos enumerados con el mismo número de componentes pero literales diferentes? No acepta diferencias entre tipos con la misma estructura Ej: type longitud = real; tiempo = real; var l: longitud; t: tiempo; l y t son compatibles (tienen la misma estructura), aunque quizás no deberían considerarse equivalentes: son abstracciones de diferentes categorías de valores del problema Departamento de Informática 19 Área de Lenguajes y Sistemas Informáticos

20 Subtipos y tipos derivados Subtipo: versión (posiblemente restringida en el rango) de un tipo existente con el que es compatible. Evita uno de los problemas de la compatibilidad de tipos nominal Ej. Ada: subtype Natural is Integer range 0.. Integer Last; subtype Temperatura is Integer range ; n: Natural; i: Integer; t: Temperatura; Las siguientes asignaciones son posibles: n := i; i := n; t := i; Se necesita una comprobación en tiempo de ejecución que asegure que el valor que se asigna está en el rango adecuado Para la función: function "**" (i: Integer; n: Natural) return Integer; y la llamada j ** k; el compilador comprueba que j y k sean del tipo Integer (o de uno de sus subtipos). Durante la ejecución se asegura que el valor actual de k esté en el rango de Natural. Un lenguaje con compatibilidad de tipos nominal sólo aceptaría que j fuese del tipo Integer y n del tipo Natural. Tipo derivado: nuevo tipo basado en algún otro previamente definido con el que es incompatible, aunque sean estructuralmente idénticos. Heredan todas las propiedades de su tipo padre. (También pueden incluir restricciones sobre el rango) Departamento de Informática 20 Área de Lenguajes y Sistemas Informáticos

21 Ej. Ada: type Longitud is new Float; type Tiempo is new Float; Las variables de estos tipos son incompatibles entre ellas y con otras de tipo float (esta regla no se aplica a los literales como 12.5) 4. Ámbito Ámbito de una variable de programa: rango de sentencias en las que es visible la variable Una variable es visible en una sentencia si puede referenciarse en dicha sentencia Las reglas de ámbito de un lenguaje determinan cómo se asocian las referencias a variables declaradas fuera del subprograma o bloque que se está ejecutando con sus declaraciones con sus atributos Una variable es local en una unidad de programa o bloque si está declarada en él. Las variables no locales de una unidad de programa o bloque son aquellas visibles en dicha unidad o bloque pero no declaradas en él 4.1. Á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 En la mayoría de lenguajes con ámbito estático (C es una de las excepciones) pueden anidarse los subprogramas cada subprograma crea su propio ámbito el resultado es una jerarquía de ámbitos Departamento de Informática 21 Área de Lenguajes y Sistemas Informáticos

22 Cómo se determinan los atributos de una variable en un lenguaje con ámbito estático? 1º. Se busca su declaración local, y si no se encuentra 2º. Se continúa la búsqueda en el bloque que lo declara, su padre estático. Si no se encuentra, 3º. Se continúa la búsqueda en la unidad que declara a esta última. Así hasta que se encuentra la declaración de la variable o se alcance la unidad de declaración mayor error: utilización de una variable no declarada El padre estático de un subprograma y los padres estáticos de éste hasta el programa principal se denominan antepasados estáticos Ejemplo: procedure mayor; var x: integer; procedure sub1; x end; {de sub1} procedure sub2; var x: real; end; {de sub2} end. {de mayor} La referencia a la variable x en sub1 se corresponde con la declaración de x en mayor En lenguajes con ámbito estático, una declaración de una variable oculta cualquier declaración de otra variable con el mismo nombre en un ámbito que englobe al que incluye dicha declaración La referencia a la variable x en sub2 se corresponde con la declaración en sub2 se oculta la declaración de x en mayor Departamento de Informática 22 Área de Lenguajes y Sistemas Informáticos

23 Hay lenguajes que permiten hacer referencia a variables ocultas declaradas en antepasados estáticos Ej: Ada. Sintaxis: nombre_unidad_de_programa.nombre_variable mayor.x Algunos lenguajes (herederos de ALGOL 60) permiten definir nuevos ámbitos estáticos en mitad de código ejecutable son variables locales a esa sección de código. Son variables dinámicas de pila se les asigna espacio al comenzar la sección y se desasigna cuando se sale de ella Las secciones de código en la que pueden definirse variables locales se denominan bloques Ej. de bloque en Ada: declare temp: Integer; temp := x; x := y; y := temp; end; Los bloques son el origen de la expresión lenguajes estructurados en bloques Aunque a Pascal se le considera un lenguaje estructurado en bloques no dispone de bloques no procedurales En C, cualquier grupo de sentencia compuesta (secuencia de sentencias englobadas entre llaves) puede definir un nuevo ámbito. Ejemplo: if (lista[i] < lista[j]) { int temp; } temp := lista[i]; lista[i] := lista[j]; lista[j] := temp; Departamento de Informática 23 Área de Lenguajes y Sistemas Informáticos

24 Java permite que la definición de una variable aparezca en cualquier lugar de una función el ámbito de la variable comienza en la sentencia de definición y acaba en el final del bloque que la incluye Los ámbitos definidos por bloques se tratan igual que los creados por subprogramas Evaluación del ámbito estático Proporciona un método de acceso a variables no locales adecuado en la mayoría de los casos Problemas: Acceso a demasiados datos. Por ejemplo, todas las variables declaradas en el programa principal son visibles en todos los procedimientos, se desee o no Los cambios pueden ser complicados: principal A C D B E 1. Es necesario acceder a variables de D desde E. Soluciones: Mover E dentro de D E deja de tener acceso al ámbito de B Mover las variables de D que necesita E a principal puede accederse a ellas desde otros procedimientos. Además, supongamos que D y E necesitan la variable x. Si en A hay una variable con nombre x oculta la variable x que necesita D y hemos movido a principal Departamento de Informática 24 Área de Lenguajes y Sistemas Informáticos

25 2. E necesita llamar al procedimiento D. Soluciones: Mover D dentro de principal deja de tener acceso a las variables de A Esta falta de flexibilidad provoca una tendencia en los programadores a usar más variables globales de las que necesitan 4.2. Ámbito dinámico Á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 Cómo se determinan los atributos de una variable en un lenguaje con ámbito dinámico? En tiempo de ejecución: 1º. Se busca su declaración local, y si no se encuentra 2º. Se continúa la búsqueda en su padre dinámico, el subprograma que realizó la llamada. Si no se encuentra, 3º. Se continúa la búsqueda en los antepasados dinámicos. Así hasta que se encuentra la declaración de la variable. Si no se encuentra la declaración en ningún antecesor dinámico error en tiempo de ejecución Departamento de Informática 25 Área de Lenguajes y Sistemas Informáticos

26 Ejemplo: procedure mayor; var x: integer; procedure sub1; x end; {de sub1} procedure sub2; var x: real; end; {de sub2} end. {de mayor} Secuencia de llamadas: mayor sub2 sub1 la referencia a x en sub1 corresponde con la declaración de x en sub2 Secuencia de llamadas: mayor sub1 la referencia a x en sub1 corresponde con la declaración de x en mayor Evaluación del ámbito dinámico Una sentencia en un subprograma que contiene una referencia a una variable no local puede relacionarse con una variable diferente cada vez que se ejecuta muchos tipos de problemas: Durante el tiempo que transcurre entre el comienzo y la finalización de la ejecución de un subprograma todas las variables locales del subprograma son visibles en los subprogramas a los que se llame. No hay forma de protegerlas de esta accesibilidad programas menos fiables que con ámbito estático Imposibilidad de realizar una comprobación de tipos estática de las referencias no locales (es imposible determinar estáticamente su declaración) Los programas son más difíciles de leer y seguir por un lector humano Departamento de Informática 26 Área de Lenguajes y Sistemas Informáticos

27 Ventaja: el subprograma hereda el contexto de sus llamadores método de comunicación entre unidades de programa (menos seguro que otros métodos, como el paso de parámetros) 4.3. Entorno de referencia Entorno de referencia de una sentencia: colección de todos los identificadores visibles en dicha sentencia Lenguajes con ámbito estático: el entorno de referencia de una sentencia está compuesto por las variables declaradas en su ámbito local más todas las variables visibles de sus antepasados estáticos Lenguajes con ámbito dinámico: el entorno de referencia de una sentencia está compuesto por las variables declaradas localmente más todas las variables visibles del resto de subprogramas activos Ej.: principal sub2 sub1 procedure sub1; var a,b: integer; {A} end; {de sub1} procedure sub2; var b,c: integer; {B} sub1; end; {de sub2} procedure principal; var c,d: integer; {C} sub2; end. {de principal} Punto A B C Entorno de referencia a y b de sub1, c de sub2, d de principal b y c de sub2, d de principal c y d de principal Departamento de Informática 27 Área de Lenguajes y Sistemas Informáticos

28 5. 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 Ventajas: Aumenta la fiabilidad y legibilidad de los programas El valor aparece en una sola línea de programa más fácil su modificación Constantes manifiestas: constantes con ligadura estática de valores Pascal: la declaración de una constante requiere un valor simple Modula-2: permite expresiones constantes (constantes ya declaradas, literales y operadores) Otros lenguajes (Ada, Java) permiten ligadura dinámica de valores a constantes pueden aparecer variables Ada: num_elementos: constant Integer := 2 * i + j; 6. 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 estáticas: inicialización sucede una sola vez antes del momento de la ejecución Variables con ligadura dinámica de espacio: la inicialización también es dinámica Departamento de Informática 28 Área de Lenguajes y Sistemas Informáticos

29 Inicialización en algunos lenguajes: Pascal: No tiene sentencias de inicialización C: en la sentencia de declaración puede indicarse un valor inicial Ej.: int i = 10; Ada: la inicialización puede incluir nombres de otras constantes o variables visibles en el momento de la elaboración de la inicialización Ej.: contador: integer := num_elem + 1; num_elem puede ser el nombre de una variable o constante 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 Posibles aproximaciones que pueden utilizar los LP: Se ignora el problema y se considera responsabilidad del programador no emplear valores no inicializados. Poco elegante Todas las declaraciones inicializan el espacio asignado a un valor apropiado, definido para cada tipo básico. Por ej., punteros a null y valores numéricos a cero. Puede llevar a errores No existen declaraciones sin inicialización el programador debe proporcionar un valor de inicialización adecuado para cada elemento declarado Existe un valor especial para cada tipo denominado omega, que representa la propiedad de ausencia de inicialización. Este valor se propaga en las expresiones (omega + 3 omega). Permite al programador comprobar dinámicamente si una variable está o no inicializada Departamento de Informática 29 Área de Lenguajes y Sistemas Informáticos

30 Ejemplos de algunos LP: Pascal: ignora el problema Ada: inicializa apuntadores a null e ignora el problema para el resto de tipos C: inicializa las variables estáticas a una forma apropiada de cero. Ignora el problema para el resto de las variables Departamento de Informática 30 Área de Lenguajes y Sistemas Informáticos

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

Nombres, Ligaduras, Chequeo de Tipos y Alcance. Luis Garreta (Basados en el libro de Robert Sebesta)

Nombres, Ligaduras, Chequeo de Tipos y Alcance. Luis Garreta (Basados en el libro de Robert Sebesta) Nombres, Ligaduras, Chequeo de Tipos y Alcance Luis Garreta lgarreta@unicauca.edu.co (Basados en el libro de Robert Sebesta) 1 Nombres, Ligaduras, Chequeo de Tipos y Alcance Nombres Variables El concepto

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de Programación Entidades, atributos y ligaduras Ma. Laura Cobo Departamento de Ciencias e Ingeniería de la Computación 2018 Prof. Ma. Laura Cobo Página 1 Entidades Nombres o identificadores:

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de Programación Entidades, atributos y ligaduras Ma. Laura Cobo Departamento de Ciencias e Ingeniería de la Computación 2017 Prof. Ma. Laura Cobo Página 1 Entidades Nombres o identificadores:

Más detalles

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015 Aspectos de los LP Diseño de compiladores Lenguajes de Programación Antes de comenzar con la construcción de un compilador, debemos comprender los conceptos basicos del lenguaje de programación con el

Más detalles

Tema 3 Constantes, Variables y Tipos

Tema 3 Constantes, Variables y Tipos Tema 3 Constantes, Variables y Tipos Contenidos 1. Definiciones. 1.1 Variables y Constantes. 1.2 Identificadores. 2. Declaración de Variables en un Programa en C. 3. Tipos de Datos. 3.1 Clasificación.

Más detalles

UNIDAD I. ALGORITMOS

UNIDAD I. ALGORITMOS UNIDAD I. ALGORITMOS 1.1 Definición Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico. 1.2 Tipos Cualitativos: Son aquellos

Más detalles

Modulo 11. Clases y Objetos en Java

Modulo 11. Clases y Objetos en Java El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, Introduction to Programming 1, no pretende en ningún momento reemplazar los contenidos generados por este grupo.

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 3 Estructuras de datos Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.

Más detalles

3. Tipos primitivos de dato

3. Tipos primitivos de dato Programación orientada a objetos con Java 31 3. Tipos primitivos de dato Objetivos: a) Describir los tipos de datos primitivos (numéricos, booleano y de tipo carácter) en el lenguaje de programación Java

Más detalles

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Problemas, Algoritmos y Programas PROBLEMA Solución ALGORITMO PROGRAMA Problemas,

Más detalles

Expresión, Operador, Operando, Asignación, Prioridad

Expresión, Operador, Operando, Asignación, Prioridad 4. EXPRESIONES Y OPERADORES Conceptos: Resumen: Expresión, Operador, Operando, Asignación, Prioridad En este tema se presentan los siguientes elementos de la programación: las expresiones y los operadores.

Más detalles

Tema: Clases y Objetos en C++. Parte II.

Tema: Clases y Objetos en C++. Parte II. Programación II. Guía 4 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C++. Parte II. Objetivos Específico Implementar clases, objetos, propiedades, métodos

Más detalles

14/03/2018. Problemas, Algoritmos y Programas. Problemas, Algoritmos y Programas. Programas y Lenguajes. Programas y Lenguajes. Programas y Lenguajes

14/03/2018. Problemas, Algoritmos y Programas. Problemas, Algoritmos y Programas. Programas y Lenguajes. Programas y Lenguajes. Programas y Lenguajes Problemas, Algoritmos y Programas PROBLEMA Solución Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar ALGORITMO Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR PROGRAMA Problemas,

Más detalles

TEMA 1 FUNDAMENTOS DE PROGRAMACIÓN

TEMA 1 FUNDAMENTOS DE PROGRAMACIÓN TEMA 1 FUNDAMENTOS DE PROGRAMACIÓN 1.1 Introducción 1.2 Evolución de los lenguajes de programación 1.3 Paradigmas de programación 1.4 Métodos de implementación 1.5 Lecturas recomendadas 1.6 Ejercicios

Más detalles

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Problemas, Algoritmos y Programas PROBLEMA Solución ALGORITMO PROGRAMA Problemas,

Más detalles

Declaración de variables (integer, single, double, boolean, etc.) en Visual Basic. Dim. Ejemplos. (CU00309A)

Declaración de variables (integer, single, double, boolean, etc.) en Visual Basic. Dim. Ejemplos. (CU00309A) aprenderaprogramar.com Declaración de variables (integer, single, double, boolean, etc.) en Visual Basic. Dim. Ejemplos. (CU00309A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión:

Más detalles

Categorías de métodos. Métodos constructores y destructores

Categorías de métodos. Métodos constructores y destructores 1. Categorías de los métodos 2. Inicialización de miembros 3. Métodos constructores 4. Inicialización de objetos con y sin constructores 5. Sobrecarga de funciones constructoras 6. Argumentos implícitos

Más detalles

Declaración de variables. Sentencias de entrada/salida

Declaración de variables. Sentencias de entrada/salida Declaración de variables. Sentencias de entrada/salida Introducción En los capítulos anteriores se introdujo la notación algorítmica y unas nociones básicas del lenguaje de programación FORTRAN; se describió

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

La sintaxis básica para definir una clase es la que a continuación se muestra:

La sintaxis básica para definir una clase es la que a continuación se muestra: DEFINICIÓN DE CLASES Y OBJETOS EN C# Sintaxis de definición de clases La sintaxis básica para definir una clase es la que a continuación se muestra: class nombreclase miembros De este modo se definiría

Más detalles

Clase adicional 2. Estructuras básicas de control. Temas

Clase adicional 2. Estructuras básicas de control. Temas Clase adicional 2 Temas Estructuras de control Sentencia condicional Iteración Clases Definir una clase Crear una instancia de una clase Campos estáticos Problemas de la clase adicional Problema de diseño

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

Más detalles

Apuntes de Programación y estructuras de datos. Tipos de datos

Apuntes de Programación y estructuras de datos. Tipos de datos Apuntes de Programación y estructuras de datos. Tipos de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan nicos@lsi.upc.edu Dept. Llenguatges i Sistemes Informátics Universitat Politécnica

Más detalles

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Una función es un miniprograma dentro de un programa. Las funciones contienen varias TEMA 6. FUNCIONES. Una función es un miniprograma dentro de un programa. Las funciones contienen varias sentencias bajo un solo nombre, que un programa puede utilizar una o más veces para ejecutar dichas

Más detalles

Tema 7: Polimorfismo. Índice

Tema 7: Polimorfismo. Índice Tema 7: Polimorfismo Antonio J. Sierra Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos. Recursividad. Control de acceso. Static. Final. Argumento

Más detalles

2. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS

2. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS 2. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS 2.1 Tipos De Datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como b, un valor entero tal como

Más detalles

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2.

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2. Índice del capítulo Capítulo 4. Expresiones Lenguajes de Programación Capítulo 4. Expresiones 1. Carlos Ureña Almagro 2. Dpt. Lenguajes y Sistemas Informáticos ETSI Informática y de Telecomunicación Universidad

Más detalles

e-mail: mtoledo@dgrfsa.gov.ar

e-mail: mtoledo@dgrfsa.gov.ar Arreglos Introducción a las Estructuras de Datos. Arreglos Unidimensionales: Vectores Vectores Estáticos en VB Vectores Dinámicos en VB Ordenando un Vector Introducción a las Estructuras de Datos. Una

Más detalles

ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN

ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN ESTRUCTURA DE LOS LENGUAES DE PROGRAMACIÓN DEFINICION DE LOS LENGUAES SINTAIS (BNF + EBNF + DIAGRAMAS DE SINTAIS) + SEMÁNTICA OPERACIONAL (APROIMACIÓN UTULIZADA AQUÍ) FORMAL (A TRAVÉS DE MECANÍSMOS RIGUROSOS

Más detalles

TEMA 8. ESTRUCTURAS Y UNIONES.

TEMA 8. ESTRUCTURAS Y UNIONES. TEMA 8. ESTRUCTURAS Y UNIONES. Este capítulo examina estructuras, uniones, enumeraciones y s definidos por el usuario que permite a un programador crear nuevos s de datos. La capacidad para crear nuevos

Más detalles

Compiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

Compiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón Compiladores: Ambientes para Ejecución Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón Procedimientos Definición de un Procedimiento: es una declaración

Más detalles

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados Lenguajes de Programación Nombres, Ambitos y Ligados Juan Zamora O. Semestre II - 2013 Nombres, Ambitos y Ligados Aspectos semánticos fundamentales de las variables. Conceptos a revisar: Abstracción Nombres

Más detalles

CURSO DE LENGUAJE C. 4.1 Conceptos básicos de funciones 4.2 Funciones que regresan valores no enteros 4.3 Variables externas 4.4 Reglas de alcance

CURSO DE LENGUAJE C. 4.1 Conceptos básicos de funciones 4.2 Funciones que regresan valores no enteros 4.3 Variables externas 4.4 Reglas de alcance Capítulo 1. Introducción general 1.1 Comencemos 1.2 Variables y expresiones aritméticas 1.3 La proposición FOR 1.4 Constantes simbólicas 1.5 Entrada y salida de caracteres 1.6 Arreglos 1.7 Funciones 1.8

Más detalles

Programación Digital I

Programación Digital I Programación Digital I Programación Digital I Gilberto Diaz gilberto@ula.ve Universidad de Los Andes Facultad de Ingeniería Escuela de Sistemas Depto de Computación Mérida - Venezuela Repaso Componentes

Más detalles

Lenguajes de Programación. Capítulo 4. Expresiones.

Lenguajes de Programación. Capítulo 4. Expresiones. Lenguajes de Programación. Capítulo 4. Expresiones. Carlos Ureña Almagro Curso 2011-12 Contents 1 Introducción 2 2 Literales 5 2.1 Literales tipos primitivos......................................... 5

Más detalles

Introducción a las sentencias de control

Introducción a las sentencias de control INSTRUCCIONES DE CONTROL CONTENIDOS 1. Introducción a las sentencias de control. 2. Instrucciones o sentencias condicionales: IF, IF-ELSE, SWITCH. 3. Instrucciones o sentencias repetitivas o iterativas:

Más detalles

Sintaxis y Semántica del Lenguaje. Gramáticas

Sintaxis y Semántica del Lenguaje. Gramáticas Gramáticas La tarea de proveer una descripción bien concisa y entendible de un lenguaje de programación es difícil pero esencial para el éxito de un lenguaje. Uno de los problemas en describir un lenguaje

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

Lenguajes de Programación I

Lenguajes de Programación I Lenguajes de Programación I Subrutinas - Pasaje de Ernesto Hernández-Novich Copyright c 2006-2010 Subrutinas Mecanismo principal para abstracción de control. Asocian un nombre a una secuencia

Más detalles

ANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS

ANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo

Más detalles

Tipo de Datos Abstractos y Programación Orientada a Objetos

Tipo de Datos Abstractos y Programación Orientada a Objetos Tipo de Datos Abstractos y Programación Orientada a Objetos DISEÑO Y PARADIGMAS DE LENGUAJES ING. EN INFORMÁTICA/ING. EN COMPUTACIÓN DEPARTAMENTO DE INFORMÁTICA UNIVERSIDAD NACIONAL DE SAN LUIS ARGENTINA

Más detalles

Tema 3. Programación orientada a objetos en Java (Parte 1)

Tema 3. Programación orientada a objetos en Java (Parte 1) Programación en Java Tema 3. Programación orientada a objetos en Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Clases y objetos (I) Clase Cojunto de datos (atributos) y funciones (métodos)

Más detalles

Capítulo 5 IDENTIFICADORES, VARIABLES Y CONSTANTES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Capítulo 5 IDENTIFICADORES, VARIABLES Y CONSTANTES. Presentación resumen del libro: EMPEZAR DE CERO A PROGRAMAR EN lenguaje C Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C" Autor: Carlos Javier Pes Rivas (correo@carlospes.com) Capítulo 5 IDENTIFICADORES, VARIABLES Y CONSTANTES 1 OBJETIVOS Saber qué

Más detalles

Capítulo 3. Subprogramas. 3.1 Subprogramas FUNCTION

Capítulo 3. Subprogramas. 3.1 Subprogramas FUNCTION Capítulo 3 Subprogramas Con lo explicado hasta aquí se pueden escribir programas sencillos y no demasiado largos. Pero varias razones justifican la necesidad de disponer de otro tipo de recursos. Por una

Más detalles

NORMA INFORMACIÓN Y DOCUMENTACIÓN. FORMATOS PARA EL INTERCAMBIO DE LA INFORMACIÓN. International Standard ISO 2709. 1 Campo de aplicación

NORMA INFORMACIÓN Y DOCUMENTACIÓN. FORMATOS PARA EL INTERCAMBIO DE LA INFORMACIÓN. International Standard ISO 2709. 1 Campo de aplicación NORMA En esta Sección se incluyen los proyectos de normas españolas relativas a Información y Documentación, durante el período en que están sometidas a la preceptiva información pública. En este número

Más detalles

Proposiciones Condicionales

Proposiciones Condicionales SENTENCIAS CONDICIONALES SIMPLES: if- Anteriormente se discutió que una de las estructuras utilizadas en la programación estructurada es la Estructura Selectiva o Condicional. Se explican aquí las sentencias

Más detalles

LENGUAJES DE PROGRAMACION I. Propósito del curso :

LENGUAJES DE PROGRAMACION I. Propósito del curso : UNIVERSIDAD AUTÓNOMA DE CHIHUAHUA Clave: 08MSU0017H Clave: 08USU4053W FACULTAD DE INGENIERÍA PROGRAMA DEL CURSO: LENGUAJES DE PROGRAMACION I DES: Ingeniería Ingeniería en Sistemas Programa(s) Educativo(s):

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

CAPITULO 6: FUNCIONES

CAPITULO 6: FUNCIONES CAPITULO 6: FUNCIONES 1. INTRODUCCIÓN Un problema de programación en C se resuelve descomponiéndolo en varias partes. Cada una de estas partes se puede asociar a una función que resuelva su fracción correspondiente

Más detalles

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS Programación en Fortran Valentín Moreno ÍNDICE 1. Subprogramas 2. Funciones 3. Subrutinas 2 3 1. SUBPROGRAMAS 1. SUBPROGRAMAS Si necesitamos usar con frecuencia

Más detalles

LINQ TO AMAZON. Estándar de Implementación. Versión 1.2

LINQ TO AMAZON. Estándar de Implementación. Versión 1.2 LINQ TO AMAZON Estándar de Implementación Versión 1.2 Historia de revisiones Fecha Versión Descripción Autor 22/08/2008 1.0 Creación del documento Guillermo Pérez 23/08/2008 1.1 Actualización del documento

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

Apuntes de Programación y estructuras de datos. Control de datos

Apuntes de Programación y estructuras de datos. Control de datos Apuntes de Programación y estructuras de datos. Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan nicos@lsi.upc.edu Dept. Llenguatges i Sistemes Informátics Universitat Politécnica

Más detalles

Oracle Database 11g: Programación con PL/SQL Nuevo

Oracle Database 11g: Programación con PL/SQL Nuevo Oracle University Contacte con nosotros: 902 302 302 Oracle Database 11g: Programación con PL/SQL Nuevo Duración: 5 Días Lo que aprenderá Este curso ofrece una introducción sobre PL/SQL a los estudiantes

Más detalles

Lenguajes de Programación I

Lenguajes de Programación I Lenguajes de Programación I Tipos de Datos Compuestos Ernesto Hernández-Novich Copyright c 2006-2010 Registros Registros agrupan datos de tipos heterogéneos para almacenarlos y manipularlos

Más detalles

Apuntadores en C y C++

Apuntadores en C y C++ Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta

Más detalles

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript - Programación

Más detalles

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1)

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1) Tema 8: Tipos de datos Sesión 24: Tipos de datos (1) Referencias Programming Languages Pragmatics: Capítulo 7, apartados 7.1 (Type Systems) y 7.2 (Type Checking) Programming in Scala: Capítulo 5 (Basic

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar. Clases La programación orientada a objetos utiliza clases para encapsular (envolver, esconder) datos (atributos) y métodos (comportamientos). Por ejemplo, el estéreo de un auto encapsula todos los atributos

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo Oracle University Contacte con nosotros: 902 302 302 Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo Duración: 5 Días Lo que aprenderá En este curso, los estudiantes aprenderán los conceptos

Más detalles

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España.

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España. Estructura de Datos y de la Información Tema 1: Gestión dinámica de la memoria Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

descripción del argumento identificador tipo longitud condición restricción

descripción del argumento identificador tipo longitud condición restricción Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía PROGRAMACIÓN 0 Prof. Dolores Cuiñas H. recomendada APUNTES Nº. METODOLOGÍA PARA LA CONSTRUCCIÓN DE PROGRAMAS. Presentaremos

Más detalles

PUNTEROS (APUNTADORES)

PUNTEROS (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)

Más detalles

Programación Tema 4: Métodos. Programación DIT-UPM

Programación Tema 4: Métodos. Programación DIT-UPM Programación Tema 4: Métodos 1 Contenidos! 1. El concepto de método! 2. Definición: cabecera! 3. Definición: cuerpo! 4. Uso de métodos! 5. Métodos útiles 2 Métodos! Un método es un bloque de código con

Más detalles

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad

Más detalles

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

TEMA 7. ARRAYS (LISTAS Y TABLAS).

TEMA 7. ARRAYS (LISTAS Y TABLAS). TEMA 7. ARRAYS (LISTAS Y TABLAS). En capítulos anteriores se han descrito las características de los tipos de datos básicos o simples (carácter, entero y coma flotante). Asimismo, se ha aprendido a definir

Más detalles

Lenguaje C, tercer bloque: Funciones

Lenguaje C, tercer bloque: Funciones Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007 Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección

Más detalles

ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS Tipos de datos Expresiones Operadores y operandos Identificadores como localidades de memoria

ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS Tipos de datos Expresiones Operadores y operandos Identificadores como localidades de memoria ENIDADES PRIMIIVAS PARA EL DESARROLLO DE ALGORIMOS ipos de datos Expresiones Operadores y operandos Identificadores como localidades de memoria ipos De Datos odos los datos tienen un tipo asociado con

Más detalles

UNIDAD 2 Descripción de un programa

UNIDAD 2 Descripción de un programa Descripción de un programa Estructura general de un programa. Elementos básicos. Tipos de datos simples: enteros, reales y carácter. Representación de datos en memoria. Operaciones sobre tipos de datos

Más detalles

Diseño de algoritmos paralelos

Diseño de algoritmos paralelos PROGRAMACIÓN CONCURRENTE TEMA 7 Diseño de algoritmos paralelos ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN DISEÑO DE ALGORITMOS PARALELOS - TEMA 7.2 Algoritmos

Más detalles

Oracle Database: Conceptos Básicos de SQL y PL/SQL

Oracle Database: Conceptos Básicos de SQL y PL/SQL Oracle University Contact Us: +34916267792 Oracle Database: Conceptos Básicos de SQL y PL/SQL Duration: 5 Days What you will learn Este curso está diseñado para enseñar los conceptos fundamentales de SQL

Más detalles

BASES DE DATOS TEMA 3 MODELO ENTIDAD - RELACIÓN

BASES DE DATOS TEMA 3 MODELO ENTIDAD - RELACIÓN BASES DE DATOS TEMA 3 MODELO ENTIDAD - RELACIÓN 3.1 Conceptos Básicos El modelo entidad-relación es el modelo más utilizado para el diseño conceptual de bases de datos. Fue introducido por Peter Chan en

Más detalles

El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

El lenguaje C. if (a>3) { printf(hola); // bloque printf(%d,a); // de getch(); //código } Partes de un programa en C. El lenguaje C El lenguaje C es uno de los lenguajes de programación estructurada más utilizados en nuestros días. El principal componente estructural de C es la función. En C, las funciones son bloques

Más detalles

CAPITULO II. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS

CAPITULO II. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS CAPIULO II. ENIDADES PRIMIIVAS PARA EL DESARROLLO DE ALGORIMOS 2.1 ipos de datos 2.2 Expresiones 2.3 Operadores y operandos 2.4 Identificadores como localidades de memoria OBJEIVO EDUCACIONAL: El alumno:

Más detalles

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

Más detalles

Programación I Teoría II.

Programación I Teoría II. Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar MODULARIDAD FUNCIONES EN C Modularidad Principio para resolución de problemas: Dividir para reinar Modularidad Módulo Función Procedimiento

Más detalles

Autoestudio 2: Variables y Operadores

Autoestudio 2: Variables y Operadores Autoestudio 2: Variables y es Componentes de un programa Cuando escribimos en un lenguaje de programación tenemos que entender la sintaxis del lenguaje. A continuación empezaremos con la sintaxis básica

Más detalles

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

Para crear un arreglo de cualquier tipo de elementos la sintaxis es: Arreglos (arrays) Un arreglo es una estructura de datos homogénea o conjunto de elementos del mismo tipo. En Java se pueden manejar arreglos de elementos de tipo primitivo (8 tipos primitivos hay en Java)

Más detalles

El lenguaje C. 1. Estructuras. Principios de Programación. 1.1. Definicion de estructuras

El lenguaje C. 1. Estructuras. Principios de Programación. 1.1. Definicion de estructuras Principios de Programación El lenguaje C 1. Estructuras Las estructuras son colecciones de variables relacionadas bajo un nombre. Las estructuras pueden contener variables de muchos tipos diferentes de

Más detalles

Universidad del Papaloapan

Universidad del Papaloapan Universidad del Papaloapan Materia: Programación Estructurada Tema: Punteros Expositor: M. C. Bertha López Azamar Tuxtepec, Oaxaca. Enero/2005-2006 1 PUNTEROS M. C. Bertha López Azamar Un tema muy ligado

Más detalles

Resolución de Problemas y Algoritmos

Resolución de Problemas y Algoritmos RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS CLASE 3 Definición y compatibilidad de tipos de datos. Sentencia condicional CASE. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la

Más detalles

Tipos de Datos Simples Contenido del Tema

Tipos de Datos Simples Contenido del Tema T E M A 3 Tipos de Datos Simples Contenido del Tema 3.1. Concepto de Tipo 3.1.1. Elementos básicos: atributos y operaciones 3.1.2. Tipos. Concepto y necesidad 3.1.3. Operadores básicos 3.2. Tipos de Datos

Más detalles

Arreglos Unidimensionales En este tipo de arreglo se hace uso de un índice solamente para hacer referencia a una posición particular del arreglo.

Arreglos Unidimensionales En este tipo de arreglo se hace uso de un índice solamente para hacer referencia a una posición particular del arreglo. Arreglos (Arrays) en Java Definición: Un arreglo es un objeto contenedor que consiste de una cantidad fija de posiciones o celdas para almacenar valores del mismo tipo en ellas. Cada posición o celda del

Más detalles

PROGRAMACION ORIENTADA A OBJETOS EN C++

PROGRAMACION ORIENTADA A OBJETOS EN C++ PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje

Más detalles

Definimos un Sistema Gestor de Bases de Datos o SGBD, también llamado DBMS (Data Base Management System) como una colección de datos relacionados entr

Definimos un Sistema Gestor de Bases de Datos o SGBD, también llamado DBMS (Data Base Management System) como una colección de datos relacionados entr Introducción Arquitectura de los DBMS Lenguajes de los DBMS Diccionario de datos Seguridad e integridad de los datos Administrador del DBMS Arquitectura Cliente-Servidor Definimos un Sistema Gestor de

Más detalles

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL. 8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL. PROCEDIMIENTOS. CONCEPTO Un procedimiento es un programa que realiza una tarea específica. Puede recibir cero o más valores del

Más detalles

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Lógica: Algoritmo: Archivo: Base de datos: Bit: Lógica: Algoritmo: Archivo: Base de datos: Bit: 1 LÓGICA: Es una secuencia de operaciones realizadas por el hardware o por el software. Lógica del hardware, Son los circuitos y Chips que realizan las operaciones

Más detalles

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso. Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos

Más detalles