lenguajes de programación - uam...

59
Lenguajes de Programación 1 Lenguajes de programación Ana Lilia Laureano Cruces

Upload: hoangnga

Post on 25-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Lenguajes de Programación 1

Lenguajes de programación

Ana Lilia Laureano Cruces

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 5

La Función de la Estructura en la

Programación

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 19

Movimiento

• A := M [i];

• M [i] := A;

• R := M [i];

• A := R;

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 44

• < > ; constructores

• ::= ; es

• | ; o

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.