Conceptos de Lenguajes de Programación

33
Conceptos de Lenguajes de Programación Diseño y Paradigmas de Lenguajes Guía de Estudio correspondiente a la Teoría 1 Departamento de Informática Facultad de Cs. Fco. Matemáticas y Naturales Universidad Nacional de San Luis Año 2021 San Luis - Argentina

Transcript of Conceptos de Lenguajes de Programación

Page 1: Conceptos de Lenguajes de Programación

Conceptos de Lenguajes

de Programación

Diseño y Paradigmas de Lenguajes

Guía de Estudio correspondiente a la Teoría 1

Departamento de Informática

Facultad de Cs. Fco. Matemáticas y Naturales

Universidad Nacional de San Luis

Año 2021

San Luis - Argentina

Page 2: Conceptos de Lenguajes de Programación

Bibliografía utilizada

“Concepts of Programming Languages” Robert W. Sebesta, Edición 12, Pearson, 2019

Págs 33 a la 79 y 89

“Programming Languages. Design and Implementation” Terrence W. Pratt & Marvin V. Zelkowitz, Edición 4, Prentice Hall, 2001.

Págs 45 a la 51 y

61 a la 65

Page 3: Conceptos de Lenguajes de Programación

Estudio de los Lenguajes de

Programación

Importancia:

Incrementa nuestra habilidad para expresar ideas.

Nos permite elegir los lenguajes para los proyectos de manera más inteligente.

Hace el aprendizaje de nuevos lenguajes, más fácil.

Mejor comprensión de la importancia de la implementación: porqué el lenguaje fue diseñado así?

Un mejor uso de los lenguajes que ya se conocen.

Visión global de los avances en computación.

Page 4: Conceptos de Lenguajes de Programación

Dominios de Programación

Los programas son usados en una amplia variedad de dominios de resolución de problemas.

El diseño y evaluación de un lenguaje particular es altamente dependiente del dominio en el cual es usado.

• Aplicaciones Científicas – Gran cantidad de computaciones con

números de punto flotante, uso de arreglos ---Fortran, ALGOL 60

• Aplicaciones de Negocios - Producir reportes, usar números

decimales, caracteres ---COBOL, RPG

• Inteligencia Artificial - Símbolos son manipulados más que números;

uso de listas vinculadas ---LISP, Prolog, Scheme

• Web Software – Lenguajes desde markup ( XHTML) a scripting para

propósito general ---Java, PHP, JavaScript

Page 5: Conceptos de Lenguajes de Programación

Criterios de Evaluación de

Lenguajes

Legibilidad (Readability): facilidad con la cual los programaspueden ser leídos y entendidos

Simplicidad (pocas formas de hacer lo mismo, sin sobrecarga), ortogonalidad (pocas construcciones y combinables), posibilidad de definición de datos, sintaxis adecuada

Facilidad de Escritura (Writability): facilidad con la cual un lenguaje puede ser usado para crear programas

Simplicidad, ortogonalidad (pocas construcciones y combinables), expresividad (lo que se lee es lo que realmentehace la instrucción)

Confiabilidad (Reliability) : conformidad con las especificaciones, es decir, hace lo que dice que hace

Chequeo de tipos, manejo de excepciones, alias restringidos, legibilidad y escritura

Page 6: Conceptos de Lenguajes de Programación

Criterios de Evaluación de

Lenguajes

Costo: costo total

Entrenamiento para aprender (relacionado a la simplicidad y

ortogonalidad)

Entrenamiento para uso (relacionado a escritura)

Ejecución (chequeo de tipos, tiempo de ejecución, recursos)

Otros: portabilidad, licencias, etc.

Page 7: Conceptos de Lenguajes de Programación

Criterios de Evaluación de

Lenguajes

Tabla 1.1 extraída de “Concepts of Programming Languages” Robert W.

Sebesta, Edición 12 Pearson, 2019

Page 8: Conceptos de Lenguajes de Programación

Criterios de Evaluación: Legibilidad

Características que contribuyen:

Simplicidad (general)

• Un conjunto manejable de características y construcciones

• Características de multiplicidad mínimas – Ejemplo: count++ en Java

• Sobrecarga de operadores mínima – Ejemplo: símbolo +

Ortogonalidad

• Conjunto relativamente pequeño de construcciones

primitivas; puede ser combinado en un número

relativamente pequeño de formas donde toda combinación

posible es legal. Es decir, hay pocas excepciones sobre lo

que se puede hacer

Page 9: Conceptos de Lenguajes de Programación

Criterios de Evaluación: Legibilidad

Tipos de Datos

• Adecuados tipos de datos predefinidos

Ejemplo: tipos numéricos vs. Boolean para variables

• Estructuras adecuadas

Ejemplo: arreglos

• Estructuras de datos definidas por el programador

Ejemplo: registros

Consideraciones de Sintaxis

• Formas de los identificadores: composición flexible

• Palabras especiales

• Forma y significado

Page 10: Conceptos de Lenguajes de Programación

Criterios de Evaluación: Escritura

Difiere de acuerdo al dominio para el cual se diseña el

lenguaje

Simplicidad y ortogonalidad

• Es mejor tener un número pequeño de construcciones

bien definidas, un número pequeño de primitivas, y un

conjunto consistente de reglas para combinarlas.

Page 11: Conceptos de Lenguajes de Programación

Criterios de Evaluación: Escritura

Soporte para abstracción

• Habilidad para definir y usar estructuras complejas u

operaciones de manera que permitan ignorar los

detalles.

Ejemplo: Codificación de árboles binarios en Fortran 77 el cual no

tiene punteros ni asignación dinámica de memoria

Expresividad

• Un conjunto de formas relativamente convenientes de especificar operaciones

--count++

--for loops

Page 12: Conceptos de Lenguajes de Programación

Criterios de Evaluación: Confiabilidad

Chequeo de tipos

Manejo de excepciones

Alias restringidos

Legibilidad y Facilidad de escritura

Page 13: Conceptos de Lenguajes de Programación

Componentes Fundamentales

de una Computadora

Una computadora es un conjunto integrado de algoritmos y estructuras de datos,

capaz de almacenar y ejecutar programas.

• Datos

• Operaciones Primitivas

• Control de Secuencia

• Acceso a Datos

• Gestión de Almacenamiento

• Entorno de Operación

Page 14: Conceptos de Lenguajes de Programación

Influencias sobre el Diseño de

Lenguajes

Arquitecturas de Computadoras

El modelo más usado en los lenguajes de los años 60

es el de von Neumann (lenguajes imperativos) en donde

datos y programas están almacenados en la misma

memoria y CPU ejecuta instrucciones.

Page 15: Conceptos de Lenguajes de Programación

La Arquitectura von Neumann

Fetch-execute-cycle (ejecución de código de máquina)

initialize the program counter

repeat forever

fetch the instruction pointed by the counter

increment the counter

decode the instruction

execute the instruction

store the result

end repeat

Page 16: Conceptos de Lenguajes de Programación

La Arquitectura von Neumann

La velocidad de

conexión entre la

memoria de una

computadora y su

procesador determina

la velocidad de la

misma.

Las instrucciones de

programa a menudo

pueden ser ejecutadas

mucho más rápido

que la velocidad de

conexión; esto da

lugar a cuello de

botella.

Se sabe que los

cuellos de botella en

esta arquitectura son

el factor principal que

afecta la velocidad.

Figura 1.1 extraída de “Concepts of Programming Languages” Robert W.

Sebesta, Edición 12, Pearson, 2019

Page 17: Conceptos de Lenguajes de Programación

Métodos de Implementación

Compilación

Los programas son traducidos a lenguaje de máquina (C,

COBOL, Pascal, C++)

Interpretación Pura

Los programas son ejecutados por otros programas que se

denominan intérpretes (‘60 a ‘80 APL, SNOBOL, Lisp.

Actualmente JavaScript y PHP)

Sistema de Implementación Híbridos

Una combinación entre compiladores e intérpretes (PERL, Java)

Page 18: Conceptos de Lenguajes de Programación

Etapas usuales de Traducción

Preprocesador

Compilador

Ensamblador (linking module)

Cargador (loading module)

Page 19: Conceptos de Lenguajes de Programación

Etapas usuales de Traducción

• Preprocesador: procesa un programa

inmediatamente antes que el programa sea

compilado, para eliminar comentarios, expandir

macros embebidas, etc.

Ejemplo: el preprocesador C, expande #include,

#define, y macros similares.

• Compilador: es un traductor, cuyo lenguaje fuente

es un lenguaje de alto nivel y el lenguaje

resultante se aproxima al (o es) lenguaje de

máquina de una computadora real.

Page 20: Conceptos de Lenguajes de Programación

• Ensamblador: se ocupa de conectar el programa

del usuario generado por el compilador con los

programas del sistema para que puedan ser

ejecutados (direcciones de memoria en las

invocaciones).

• Cargador: se encarga de construir el programa

ejecutable añadiendo al programa objeto, los

encabezados y las funciones de librería utilizadas

por el programa fuente.

Etapas usuales de Traducción

Page 21: Conceptos de Lenguajes de Programación

Programa Fuente Preprocesador

Compilador

Ensamblador

Cargador

Programa Fuente

estándar

Código Objeto

Código Máquina

Ejecutable

Gráficamente

Page 22: Conceptos de Lenguajes de Programación

Interpretación Pura

• Ventaja: facilidad en el

debugging

• Desventajas: 10 a 100

más bajo el tiempo de

ejecución. A menudo

requiere más espacio

• Reaparición significativa

con algunos lenguajes

Web scripting (JavaScript,

PHP)

Figura 1.4 extraída de “Concepts of Programming

Languages” Robert W. Sebesta, Edición 12, Pearson, 2019

Page 23: Conceptos de Lenguajes de Programación

Comparación

Intérprete Compilador

Velocidad de ejecución BAJA ALTA

Tamaño del programa

ejecutable

CHICO GRANDE

Información durante

ejecución

MUCHA POCA

Confiabilidad BAJA ALTA

Page 24: Conceptos de Lenguajes de Programación

Implementación Híbrida

Figura 1.5 extraída de “Concepts of Programming

Languages” Robert W. Sebesta, Edición 12, Pearson, 2019

Page 25: Conceptos de Lenguajes de Programación

Programa en C

Máquina virtual de C

ADD #1, AX

MOV BX, 300

010111011

Oculta las operaciones

y estructuras de bajo

nivel

Son las estructuras de datos y algoritmos de un lenguaje que se

emplean durante el tiempo de ejecución de un programa.

Page 26: Conceptos de Lenguajes de Programación

• Las estructuras de datos en tiempo de ejecución y los

algoritmos utilizados para la ejecución del programa

definen una computadora, dicha computadora se

denomina computadora virtual.

• El lenguaje de máquina de esta computadora virtual es

el programa ejecutable producido por el traductor del

lenguaje.

Page 27: Conceptos de Lenguajes de Programación

Ligadura y Tiempo de Ligadura

Una ligadura es una asociación entre un atributo (característica o propiedad) y una entidad (elemento de programa), tal como entre una variable y su tipo o valor, o entre una operación y un símbolo.

El momento en que una ligadura se lleva a cabo se denomina tiempo de ligadura.

Page 28: Conceptos de Lenguajes de Programación

Tiempos de Ligadura

Tiempo de ejecución: por ej, la ligadura de

variables a sus valores, de variables a ubicaciones

de memoria.

• A la entrada de un subprograma o bloque: por

ej. en C y Pascal la ligadura de parámetros

actuales a los parámetros formales se realiza al

entrar a los subprogramas.

• En un punto arbitrario: el ejemplo más

importante es, la ligadura de variables a

valores a través de la asignación.

Page 29: Conceptos de Lenguajes de Programación

Tiempos de Ligadura

Tiempo de traducción

• Elegidas por el programador, por ej. nombres y tipos

de las variables.

• Elegidas por el traductor, por ej. cómo se almacenan

los descriptores de arreglos.

• Elegidas por el cargador, por ej. elementos de

programas a direcciones específicas.

Page 30: Conceptos de Lenguajes de Programación

Tiempos de Ligadura

Tiempo de implementación del lenguaje: por ej. la

representación de los números y operaciones pueden

depender de la arquitectura.

Tiempo de definición del lenguaje: por ej. las posibles

formas de las sentencias, tipos de estructuras de datos.

Page 31: Conceptos de Lenguajes de Programación

Tiempos de ligadura

Ver páginas 61-62 de Programming Languages Design

and Implementation – Terrence Pratt

Page 32: Conceptos de Lenguajes de Programación

Paradigmas (Categorías) de Lenguajes

Imperativo

• Características principales: variables, sentencias de asignación e iteración.

• Incluyen scripting y lenguajes visuales.

Ejemplos: C, Pascal, Ada, Visual BASIC .NET

Orientado a Objetos

• Se definen objetos (abstracción) y las operaciones para manipularlos.

Ejemplos: Smalltalk, C++, Java

Funcional

• La forma de realizar cálculos es aplicando funciones a los parámetros dados.

Ejemplos: LISP, Scheme

Logic

• Basado en reglas (las reglas son especificadas en un orden particular).

Ejemplo: Prolog

Programación híbrida

• Lenguajes markup extendidos para soportar “algo” de programación.

Ejemplos: JSTL, XSLT, Combinación de programación lógica y orientada a

objetos, CLOS.

Page 33: Conceptos de Lenguajes de Programación

Evolución de los Lenguajes de

Programación

Figura 2.1 extraída de “Concepts of

Programming Languages” Robert W.

Sebesta, Edición 12, Pearson, 2019