590 likes | 870 Views
Lenguajes de programación. Ana Lilia Laureano Cruces. Programación imperativa. núcleo. Procedimientos. Programación Orientada a Objetos. núcleo. herencia. Programación funcional. núcleo. int. érpretes. Programación Lógica. núcleo. avanz. ada. Programación concurrente. núcleo.
E N D
Lenguajes de programación Ana Lilia Laureano Cruces Lenguajes de Programación
Programación imperativa núcleo Procedimientos... Programación Orientada a Objetos núcleo herencia Programación funcional núcleo int érpretes Programación Lógica núcleo avanz ada Programación concurrente núcleo Lenguajes de Programación
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
La Función de la Estructura en la Programación Lenguajes de Programación
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
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
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
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
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
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
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
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
Unidad de Control Unidad Aritmética Unidad de Entrada/Salida Acumulador A Registro R Memoria para instrucciones y datos..M[i] Lenguajes de Programación
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
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
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
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
Movimiento • A := M [i]; • M [i] := A; • R := M [i]; • A := R; Lenguajes de Programación
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
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
Código de máquina es ininteligible: • 00000010101111001010 • 00000010111111001000 • 00000011001110101000 • LOAD I • ADD J • STORE K • k = i + j Lenguajes de Programación
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
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
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
El traductor de un lenguaje de máquina o ensamblador se conoce como compilador. programa fuente TIEMPO DE TRADUCCION compilador código destino TIEMPO DE EJECUCION salida entrada Lenguajes de Programación
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
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
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
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
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
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
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
Cada capa amplía las posibilidades de la capa inferior Programa a < b lenguaje de programación < máquina Lenguajes de Programación
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
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
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
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
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
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
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
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
<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
< > ; constructores • ::= ; es • | ; o Lenguajes de Programación
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
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
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
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 *odiv • el factor es una expresión entre paréntesis, una variable o una constante. Lenguajes de Programación
<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
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