Tema 19: Lenguajes de programación para aplicaciones informáticas. Flashcards
Def. lenguaje de programación.
- Notación para comunicarle a una computadora lo que deseamos que haga.
- Sistema notacional para describir computaciones en una forma legible tanto para la máquina como para el ser humano.
Evolución de los lenguajes de programación.
- 1ª generación: lenguaje máquina (compuesto exclusivamente por 0 y 1).
- 2ª gen: lenguajes ensambladores (facilitan la lectura y escritura del programa mediante una serie de reglas mnemotécnicas.
- 3ª gen: lenguajes de alto nivel, como C, FORTRAN, Java, etc. - > necesitan compiladores para traducir el código a lenguaje máquina.
- 4ª gen: Lenguajes de propósito específico (SQL, NATURAL, ABAP) -> solucionan problemas concretos.
- 5ª gen: utilizados principalmente en áreas de IA. Permiten especifica restricciones que se le indican al sistema (p. ej. Prolog).
sintaxis de un lenguaje de programación es un lenguaje independiente del contexto
G(T, N, S, P) -> gramática independiente del contexto.
- T es el alfabeto del lenguaje,
- N es el conjunto de símbolos no terminales,
- S es un símbolo no terminal especial denominado símbolo inicial
- P es el conjunto de producciones de la gramática
Sintaxis del lenguaje
Se denota con el lenguaje EBNF (Backus Naur Form Extendido).
Procesadores del lenguaje.
Es el conjunto genérico de aplicaciones informáticas en las cuales uno de los datos de entrada es un programa escrito en un lenguaje de programación
Traductor.
Tipo de procesador en el que tanto la entrada como la salida son programas escritos en lenguajes de programación.
- Generan código objeto a partir de un código fuente.
LF -> lenguaje fuente
LI -> lenguaje del traductor (de implementación)
LO -> lenguaje objeto
Ensambladores.
Son traductores donde el lenguaje fuente es lenguaje ensamblador y el lenguaje objeto es lenguaje máquina.
Compiladores.
Son los procesadores más habituales.
- Son aplicaciones capaces de transformar un fichero de texto con código fuente en un fichero en código máquina ejecutable.
Esquema de fases de un compilador.
- Análisis léxico: se encarga de verificar si todas las cadenas del programa pertenecen o no al lenguaje realizando un análisis símbolo por símbolo
- Análisis sintáctico: Se analiza la estructura de las expresiones en base a la gramática determinando si la secuencia de componentes léxicos sigue la sintaxis del lenguaje.
- Análisis semántico: Realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar el correcto significado del programa.
- Generación de código intermedio: Se genera una representación explicita del programa fuente para una máquina virtual.
- Generación de código: Toma como entrada el código optimizado y genera el código objeto.
Intérprete.
Son programas que analizan y ejecutan una a una las instrucciones que encuentran en un código fuente.
- Proceso de traducción se realiza en tiempo de ejecución.
Tipos de datos.
Un tipo de datos representa un conjunto de valores y un conjunto de operaciones definidas sobre dichos valores.
- Dos clases:
· Tipos de datos simples (no pueden descomponerse en tipos más elementales): entero, real, booleano, etc.
· Tipos de datos estructurados (se componen de tipos de datos más básicos).
Tipos de datos estructurados.
- Se construyen a partir de datos simples o estructurados.
- Arrays: estructuras de datos de tamaño fijo donde todos los elementos son del mismo tipo.
- Registros: son estructuras de datos compuestas de un número fijo de elementos que pueden ser de distinto tipo (cada uno de los elementos se denomina campo y tiene asociado un nombre para identificarlo).
- Listas: Es una colección ordenada de datos, se parecen a los arrays pero su mayor diferencia es que las listas son dinámicas.
Expresión.
Bloque de construcción básico que puede acceder a los datos del programa y que devuelve un resultado.
Puede ser una constante, variable, etc. -> Su evaluación devuelve un valor
Enunciado (sentencia).
Bloque de construcción en el que se basan los lenguajes imperativos.
Formado por expresiones.
Evaluación de expresiones.
- Evaluación en cortocircuito: evita evaluar un segundo operando de la expresión si no es estrictamente necesario (p. ej. dentro de un bucle).
- Evaluación diferida o perezosa: consiste en retardar el cálculo de las expresiones hasta que realmente son necesarias (lenguajes funcionales).
- Evaluación estricta: expresiones son totalmente evaluadas antes de necesitarse (lenguajes imperativos).
Tipos de enunciados.
- Enunciado condicional: en un grupo de enunciados permite controlar cuál se ejecuta en base a una determinada condición que es necesario evaluar (el más habitual es if, también existe case/switch)
- Enunciado de iteración: permiten repetir un enunciado un determinado número de veces (bucle for).
Manejo de excepciones.
Cualquier programa debe ser capaz de enfrentarse en un momento u otro de su ejecución a determinadas condiciones de error.
Procedimientos.
Son llamados funciones si devuelven un valor, son subprogramas que pueden ser llamados desde otras partes del código.
- Tienen: nombre, secuencia de parámetros, declaraciones locales de variables y un cuerpo de enunciados.
- Hay lenguajes que permiten la sobrecarga de parámetros (distintos procedimientos con el mismo nombre pero distinto número o tipo de parámetros formales.
Parámetros de llamada (de una función).
- se les llama parámetros reales o actuales.
Tipos de paso de parámetros.
- Paso por valor: El valor del parámetro real es copiado en el parámetro formal -> los cambios al parámetro formal no afectan al parámetro actual.
- Paso por referencia: Existen dos referencias a la misma posición de memoria: el parámetro formal y el real -> los cambios en el parámetro formal se verán reflejados en el parámetro real.
- Paso por copia y restauración (o valor y resultado): Los parámetros reales son evaluados y pasados al subprograma llamado en los parámetros formales. Cuando la ejecución del subprograma termina, los valores de los parámetros formales son copiados de vuelta en las direcciones de memoria de los parámetros reales.
- Llamada por nombre: el subprograma llamado se sustituye por la llamada y los parámetros formales por los reales.
Ámbito o alcance de variables.
La asociación de nombres de variables a datos o subprogramas.
- El cuerpo de un subprograma es un ejemplo de ámbito.
- El cuerpo de un enunciado iterativo como for también define un ámbito.
- Los ámbitos se pueden anidar.
Tipos abstractos de datos.
Tipos definidos por el usuario con una serie de operaciones asociadas.
- Un conjunto de datos.
- Conjunto de operaciones abstractas sobre datos de este tipo.
- Encapsulamiento de los datos para que solo puedan manipularse mediante las operaciones definidas.
Paradigmas y modelos de programación.
- Programación funcional
- Programación lógica
- Programación orientada a objetos.
- Programación concurrente.
- Programación de lenguajes dinámicos.
Paradigma.
Conjunto de conceptos y técnicas para usar dichos conceptos.