Lenguajes de programación - UAM...
Transcript of Lenguajes de programación - UAM...
Lenguajes de Programación 2
expresiones
flujo de control funciones
programación lógica
programación funcional
procedimientos
módulos
clases y objetos
concurrencia
Lenguajes de Programación 3
Programación imperativa
núcleo
Procedimientos...
Programación funcional
núcleo
intérpretes
Programación Lógica
núcleo
avanzada
Programación concurrente
núcleo
Programación Orientada a Objetos
núcleo
herencia
Lenguajes de Programación 4
Definiciones
• Un programa es la especificación de una tarea de computación.
• Un lenguaje de programación es una notación para escribir programas.
• El desarrollo de los lenguajes se ha basado en el conocimiento de que
la complejidad puede manejarse imponiendo alguna estructura a los
datos, a las operaciones, a los programas e incluso a las descripciones
de un lenguaje.
Lenguajes de Programación 6
• Dijkstra [1972] Es poco probable el
establecimiento de la corrección de un
programa mediante pruebas, a menos que se
tome en cuenta su estructura interna.
• La única esperanza es diseñar
cuidadosamente un programa de manera
que su corrección pueda entenderse en
términos de su estructura.
Lenguajes de Programación 7
• El arte de la programación es el arte de
organizar la complejidad y
• Debemos organizar los cálculos de manera
que nuestros limitados sentidos sean
suficientes para garantizar que el cómputo
arroje los resultados esperados.
Lenguajes de Programación 8
Qué es la programación
• En computación se desarrolla más trabajo de
programación que de desarrollo (creación inicial a
la verificación de un programa)
• El lenguaje debe ayudarnos a escribir buenos
programas; un programa es bueno si es fácil de
leer, fácil de entender y fácil de modificar.
Lenguajes de Programación 9
• Técnicas para el manejo de programas
pequeños no son crecientes (en general).
• Las dificultades comienzan cuando el efecto
del cambio puede extenderse a través de un
programa muy grande, introduciendo
errores en un lugar olvidado. Pueden
permanecer sin detección durante años.
Lenguajes de Programación 10
• La estructura y la organización son la clave para
manejar programas muy grandes.
• La legibilidad de un programa puede mejorarse
organizandolo de forma que cada parte pueda
entenderse en forma relativamente independiente
del resto.
• La estructura nos ayuda a mantener la situación
dentro del límite de la atención humana.
Lenguajes de Programación 11
• Miller [1967] observó que la gente es capaz de
recordar aproximadamente 7 cosas:
– 7 bits (dígitos binarios)
– palabras, colores,tonos, sabores
– 7 maravillas, 7 pecados capitales, 7 edades del hombre
– la memoria esta limitada por el número de símbolos o
unidades que pueda manejar y no por la información
que representen esos símbolos
Lenguajes de Programación 12
La máquina de Von Neumann
• Los orígenes de los lenguajes de
programación se encuentran en la máquinas
• se diseño a finales de los 40’s en el Instituto
de Estudios Avanzados de Princeton
• Las actuales tienen mucho en común =
arquitectura Von Neumann
• Lenguaje de máquina = código (texto en un
programa)
Lenguajes de Programación 13
Elementos de un lenguaje de
máquina
• Burks, Goldstine y Von Neumann [1947]
• unidad central de procesamiento: unidad de
control, aritmética, y entrada y salida; y la
memoria.
• Memoria miníuscula: instrucciones y datos.
• Memoria = 4096 palabras, c/u de 40 bits
• la máquina completa tenía 1024 palabras.
Lenguajes de Programación 14
Unidad
de
Control
Unidad
AritméticaUnidad de
Entrada/Salida
Acumulador A
Registro R
Memoria para instrucciones y datos..M[i]
Lenguajes de Programación 15
• Datos: los bits representaban un número en
notación binaria.
• Instrucciones: los 40 bits tenían dos
instrucciones de 20 bits.
• Todo programa en lenguaje de máquina
consistía en una secuencia de instrucciones.
Lenguajes de Programación 16
Las características de la máquina
• Datos: enteros eran la única forma.
• Operaciones aritméticas: sumar, restar,
multiplicar, dividir y tomar el valor absoluto de
un número. El resultado de suma o resta se
colocaba en un registro llamado acumuldor.
• Asignaciones a localidades de memoria: a una
localidad se le podía asignar el valor contenido en
el acumulador y reemplazaba el valor anterior.
Lenguajes de Programación 17
• Flujo de control: el flujo normal del control de
una instrucción a la sigueinte podía ser
interrumpido por una instrucción de salto
incondicional (go to).
• Justificación del go to: la utilidad de un
computador automático reside en la posibilidad de
usar en forma repetida una secuencia de
instrucciones, en donde el número de iteraciones
puede asignarse previamente o depender de los
resultados de un cálculo.
Lenguajes de Programación 18
Instrucciones de la máquina de
Von Neumann
• Aritmética
– A:= A + M[i]; A:= A - M[i];
– A:= A + | M[i] | ; A:= A - | M[i] | ;
– A:= - M[i] ; A:= A - | M[i] | ; A:= | M[i] |
– A:= A * 2; A := A div 2
– A, R := (M [i] * R) div 239, (M[i]*R) mod 239
– A, R := A mod M [i], A div M [i]
Lenguajes de Programación 20
Flujo de control
• Dos instrucciones de la palabra i:
– Salto incondicional M[i]. izq;
– Salto incondicional M[i]. der;
• Si A 0 salto incondicional M[i].izq;
• Si A 0 salto incondicional M[i].der;
Lenguajes de Programación 21
Otras
• Modifica la dirección de M[i].izq
proveniente de A.
• Modifica la dirección de M[i].der
proveniente de A.
Lenguajes de Programación 22
• Código de máquina es ininteligible:
– 00000010101111001010
– 00000010111111001000
– 00000011001110101000
– LOAD I
– ADD J
– STORE K
– k = i + j
Lenguajes de Programación 23
• El lenguaje ensamblador: es una variante
del lenguaje de máquina. Se manejan
identificadores en vez de códigos reales
(valores, localidades de almacenamiento y
operaciones)
• El lenguaje de máquina y los ensambladores
se les conoce como lenguajes de bajo nivel
Lenguajes de Programación 24
• El alto costo de creación de código
ensamblador o máquina el desarrollo de
FORTRAN = FORmula TRANslation.
• Backus [1975], tenía como meta:
– Permitir al programador especificar un
procedimiento numérico mediante el uso de un
lenguaje conciso como el de las matemáticas.
Lenguajes de Programación 25
• A partir de esta especificación:
– un programa en lenguaje de máquina
– depuración (localización y corrección de
errores) se reduce
– se esperaba reducir a un quinto el desarrollo de
programas.
– B*B - 4*A*C b 2 - 4ac
Lenguajes de Programación 26
• El traductor de un lenguaje de máquina o
ensamblador se conoce como compilador.
compiladorprograma
fuente
código
destinoentrada salida
TIEMPO DE
TRADUCCION
TIEMPO DE
EJECUCION
Lenguajes de Programación 27
Problemas
• Tiempo de traducción: se necesita tiempo de
máquina para compilar un programa fuente y
convertirlo en código destino.
• Tiempo de ejecución y necesidad de espacio
mayores: el código destino creado por el
compilador suele ejecutarse con mayor lentitud y
ocupa más espacio que un código escrito
directamente.
Lenguajes de Programación 28
Preocupación
• Backus pensó que la aceptación de FORTRAN se
hallaría en serios problemas al tardar el doble de
tiempo en la ejecución que su contraparte escrita
en código de máquina.
– Notación fácil de leer
– la escritura tenía una notación cercana a la que
describía originalmente el problema
– eran portátiles (intercambio y creación de acervos)
Lenguajes de Programación 29
• Con respecto al lenguaje C:
– Ritchie concluye: aunque un estudio profundo
de la mayor cantidad de espacio y tiempo
utilizados debido al uso de C, pudiera resultar
interesante, sería irrelevante ya que sin importar
sus resultados, no provocaría que volviéramos a
escribir en lenguaje ensamblador.
Lenguajes de Programación 30
Revisión de la eficiencia
• La eficiencia de un programa depende de
las decisiones tomadas en todos los niveles:
– concepción
– elección de estructuras de datos
– algoritmos
• La legibilidad y la capacidad de modificar
los programas contribuyen a la eficacia.
Lenguajes de Programación 31
• El desarrollo de un programa eficiente puede
considerarse como una secuencia de cambios
evolutivos guiados por la realización de un
análisis.
• El refinamiento de código se realiza con la mejora
de puntos críticos, que son las pequeñas partes
muy utilizadas en donde un programa emplea la
mayor parte de su tiempo de ejecución.
Lenguajes de Programación 32
• Detector de perfiles (variante de
compiladores): detecta los puntos críticos.
• La codificación cuidadosa de los puntos
críticos mejora significativamente el tiempo
de ejecución.
Lenguajes de Programación 33
• En general un lenguaje de programación es una
extensión de la máquina en que se apoya; y un
programa es una extensión del lenguaje de
programación.
• Un lenguaje reconstruye la máquina para
proporcionar más recursos, y un programa
reconstruye el lenguaje para proporcionar recursos
más cercanos al problema que debe resolverse.
Lenguajes de Programación 34
Programa
a < b
lenguaje de programación
<
máquina
Cada capa amplía las posibilidades de la capa inferior
Lenguajes de Programación 35
Recursos de un lenguaje
• Modelo de computación : capacidades de la
máquina que lo sustenta o bien proporcionar
una aproximación diferente (lenguajes
concurrentes)
Lenguajes de Programación 36
• Tipos de datos y operaciones : constructores
(registros, arreglos) del lenguaje que permiten
estructurar los valores básicos que posee la
máquina como son: caracteres, enteros y números
reales. Cada tipo estructurado tiene asociado un
conjunto de operaciones, que permite manipular
sus componentes.
Lenguajes de Programación 37
• Recursos de abstracción :
– funciones: son abstracciones de las operaciones
integradas (sumas, restas, multiplicaciones),
rcua.
– procedimientos: son abstracciones de las
acciones integradas (asignación), ordena.
– Definir TAD’s
Lenguajes de Programación 38
• Verificación y validación :
– la verificación en tiempo de ejecución; detecta
errores antes de que se ejecuten
– la verificación permite la validación del
encapsulamiento.
Lenguajes de Programación 39
La estructura de un programa
• Existe más de una forma para solucionar un
programa de aquí que exista más de una forma
para estructurar un programa.
• Una forma de estructurar es a través del
refinamiento de sucesivo: descomponer problemas
en subproblemas más simples que se puedan
resolver de una manera relativamente
independiente.
Lenguajes de Programación 40
• El diseño de una descomposición apropiada
es la parte más difícil de ésta técnica;
debido a que la descomposición no es obvia
en un principio.
• Entran en juego el paso de parámetros
Lenguajes de Programación 41
Estructura sintáctica
• La sintaxis de un lenguaje especifica cómo
están constituidos los programas en dicho
lenguaje.
• La estructura sintáctica es la estructura
impuesta por la sintaxis del lenguaje.
Constituye la herramienta primaria para
trabajar con el lenguaje.
Lenguajes de Programación 42
• La sintaxis de un lenguaje de programación
se especifica usando alguna variante de la
notación conocida como gramática
independiente del contexto.
• BNF (Backus-Naur Form) o BNFE
(extendida)
Lenguajes de Programación 43
• <número real> ::= <secuencia-dígitos>.
<secuencia-dígitos>
• <secuencia-dígitos> ::= <dígito> | <dígito>
<secuencia-dígitos>
• <dígito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Lenguajes de Programación 45
Definición de gramáticas
independientes del contexto
• Dado un conjunto de símbolos, una cadena sobre
el conjunto, es una secuencia finita de cero o más
símbolos del conjunto.
• El número de símbolos en la secuencia se conoce
como longitud de la cadena.
• Los símbolos atómicos de un lenguaje son los
componentes léxicos (tokens) o símbolos
terminales.
Lenguajes de Programación 46
• El símbolo no terminal que representa al
constructor principal del lenguaje se llama símbolo
no terminal inicial.
• Los componentes de un constructor se identifican
con reglas llamadas producciones.
• Una producción consta de un lado izquierdo
(símbolo no terminal) :: = lado derecho (secuencia
de cero o más símbolos terminales o no
terminales)
Lenguajes de Programación 47
Gramática libre de contexto
• Un conjunto de símbolos terminales.
• Un conjunto de símbolos no terminales.
• Un conjunto de producciones, donde cada
producción consta de un símbolo no terminal del
lado izquierdo, un ::=, y del lado derecho, una
cadena construida con los conjuntos de símbolos
terminales y no terminales.
• Un símbolo no terminal designado como símbolo
no terminal inicial.
Lenguajes de Programación 48
• En BNF, los símbolos no terminales se encuentran
entre los símbolos < >.
• Las gramáticas para expresiones aritméticas se
basan en reglas como las siguientes:
– la expresión es una secuencia de términos separados
por + o -
– el término es una secuencia de factores separados por *
o div
– el factor es una expresión entre paréntesis, una variable
o una constante.
Lenguajes de Programación 49
• <expresión> ::= <expresión> + <término> |
<expresión> - <término> | <término>
• <término> ::= <término> * <factor> | <término>
div <factor> | <factor>
• <factor> ::= (<expresión>) | <variable> |
<constante>
Lenguajes de Programación 50
BNF extendida
• Los símbolos no terminales comienzan con
letra mayúscula.
• los terminales que consisten en símbolos
como + y - se colocan entre comillas
sencillas, y los símbolos terminales en
negritas como div.
Lenguajes de Programación 51
• Una barra vertical | representa una opción
• los paréntesis ( y ), se usan para agrupar
• las llaves { y }, representan cero o más
repeticiones
• los corchetes [ y ], representan una
construcción opcional.
Lenguajes de Programación 52
La versión en BNFE
• Expresión ::= Término {(‘+’|‘-’) Término }
• Término ::= Factor { (‘*’ | div) Factor}
• Factor ::= ‘(‘Expresión’)’ | Variable |
Constante
Lenguajes de Programación 53
Esquemas de sintaxis
• Otra forma de representar la sintaxis de un lenguaje.
– existe un subesquema para cada símbolo no terminal
– cada producción para un símbolo no terminal se transforma en una
trayectoria a través del esquema.
– sobre la trayectoria de una producción se encuentran los símbolos
terminales y los no terminales en el lado derecho
– los símbolos terminales son óvalos y los no terminales en
rectángulos
– las llaves que indican cero o más repeticiones, sugieren esquemas
de sintaxis con ciclos.
Lenguajes de Programación 54
• Factor
( Expresión )
Variable
Constante
Factor ::= (< Expresión>) | Variable | Constante
Lenguajes de Programación 55
Organización de las
descripciones de lenguajes
• La semántica de los lenguajes especifica el
significado del programa
• sintaxis de fecha
– <fecha> ::= DD/DD/DD donde D = <dígito>
• 01/02/2004
• en este caso el día no esta identificado por la sintáxis
– en USA sería 2 de enero de 2004
– en México seria el 1o. De febrero de 2004
Lenguajes de Programación 56
• Es necesario contar con descripciones
completas y claras de sintaxis y de la
semántica de los lenguajes, con el fin de
asegurar que todos las implementaciones
acepten los mismos programas, para
garantizar la transportabilidad de los
programas.
Lenguajes de Programación 57
Programas tutelares
• Una introducción tutelar es un viaje guiado
a través de un lenguaje. Proporciona una
idea de los principales constructores del
lenguaje y la forma en que deben usarse.
• Ejemplos, se aprende por imitación y
adptación
Lenguajes de Programación 58
Manuales de referencia
• Describe la sintaxis y la semántica de un
lenguaje; organizado tradicionalmente en la
sintaxis del lenguaje.
• Se aprende por explicaciones y ejemplos
para las reglas sintácticas
Lenguajes de Programación 59
Definiciones formales
• Es una descripción precisa de la sintaxis y la
semántica de un lenguaje; se dirige a especialistas.
• Se aprende a través de notaciones específicas. El
esfuerzo y la capacitación para comprender estas
notaciones, se compensan con la posibilidad de
clarificar ciertos puntos finos.