Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Lenguajes de Programación Introducción – Criterios de evaluación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Organización general del curso - desde los conceptos a la ejemplificación sobre lenguajes (enfoque vertical) - buscar los conceptos sobre lenguajes de programación específicos (enfoque horizontal) Ma. Laura Cobo Conceptos generales Sintaxis y semántica Implementación Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2016 Principios de diseño Paradigmas de programación Bibliografía Objetivos generales del curso • Scott, Michael L. “Programming Languages Pragmatics” 2da. Edidición. Morgan Kaufmann Publishers 2006 • Sebesta, Robert W. “Concepts of Programming Languages”. 10ma. Edición. Editorial Addison Wesley. 2012 • Ghezzi, Carlo - Jazayeri, Mehdi “Programming Languages Concepts”. 3ra. Edición. Editorial John Wiley and Sons. 1997 Vamos a ir utilizando separatas de diferentes libros para los diferentes temas Comparar y contraponer: • principios teóricos - detalles técnicos • semántica – sintaxis • evolución - historia Razones para estudiar conceptos de lenguajes de programación Razones para lenguajes de programación o Incrementar la capacidad para expresar ideas. o Comprender aspectos oscuros de los lenguajes. o Mejorar la calidad y cantidad de conocimiento previo para la o Elegir modos alternativos de expresar cosas. apropiada selección de lenguajes. o Aumentar la habilidad para aprender nuevos lenguajes. o Mejor comprensión de la importancia de la implementación. o Inclusión de los avances en las formas de cómputo. o Realizar buenos debuggers, ensambladores, linkeadores y herramientas relacionadas. o Simular facilidades útiles en un lenguaje que carece de la misma o Hacer mejor uso de la tecnología de los lenguajes de programación a medida que aparecen. Prof. Ma. Laura Cobo Página 1 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Lenguajes Un lenguaje en general, es el medio del que se vale cualquier individuo para comunicar ideas y experiencias a otros individuos. Estas ideas y experiencias están “almacenadas” de alguna manera el individuo emisor y “almacenadas” tal vez con otra representación en el receptor. El lenguaje de programación en general tiene la misma idea, solo que el receptor es una computadora, por ello es una de las principales herramientas en el proceso de desarrollo del software. Introducción a lenguajes de programación o Originalmente las computadoras eran grandes y costosas, eran Universidad Nacional del Sur Primer Cuatrimestre de 2016 El arte de diseñar lenguajes Hay una gran variedad de lenguajes y continúan apareciendo nuevos ¿por qué? • Evolución • Propósito especial • Preferencia personal ¿qué convierte a un lenguaje en exitoso? • Poder expresivo • Facilidad de uso para novatos (baja curva de aprendizaje) • Facilidad de implementación • Código abierto • Excelentes compiladores • Inercia, economía, quien lo promueve Lenguajes programadas en lenguajes maquina (expresado como números en hexadecimal) o A medida que se comenzaron a escribir programas más largos, se volvió claro que era necesario utilizar un lenguaje menos propenso a errores (notación con abreviaturas nemotécnicas – lenguaje ensamblador). La traducción quedó a cargo del ensamblador. o Con la evolución de las computadoras y el desarrollo de diseños se volvió frustrante reescribir los programas para cada nueva máquina. También se volvió humanamente complicado entender los programas en lenguaje ensamblador. o Se hizo necesario contar con lenguajes independientes de la máquina. Una de las clasificaciones para lenguajes de programación sigue este esquema: Lenguajes Otra Clasificación 4. Cuarta Generación (1970-1990) lenguajes con las sig. características: • Estructura y programación de bases de datos • Diccionario de datos centralizado con información sobre las componentes del sistema • Programación visual • Capacidad de definir interfases para el usuario • Entorno de programación multifuncional, integrado e interactivo Ejemplo SQL (Strctured Querry Language) 5. Quinta Generación (1990-actualidad) también llamados lenguajes de muy alto nivel, tales como los basados en lógica y matemática. Ej. ML, Miranda Prof. Ma. Laura Cobo 1. Primera Generación (1951-1957) son esencialmente lenguajes máquina 2. Segunda Generación (1958-1963) lenguajes de alto nivel, no estructurados como los lenguajes ensambladores 3. Tercera Generación (1964-1969) lenguajes que incorporan la moyoría de las habilidades procedurales actuales. Son ejemplo de esta generación: Pascal, C, Modula2 y Ada Declarativa: Funcional Lisp/Scheme, ML, Haskell Dataflow (flujo de información) Id, Val Lógica, basada en restricciones Prolog, aspectos programables de las hojas de cálculo (Excel, Lotus, etc.) Basada en templates XSLT Imperativa: Von Newmann C, Ada, Fortran, ….. Scripting Perl, Python, PHP, ….. Orientada a objetos Smalltalk, Eiffel, C++, Java Página 2 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Desarrollo de Lenguajes de Programación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Características deseables en el software De cualquier software se espera, básicamente, que sea: El lenguaje de programación surge de la vinculación entre las diferentes metodologías de diseño y las arquitecturas de la computadoras. Otro de los factores que terminan teniendo especial relevancia es el dominio de aplicación pretendido. Características deseables en el software Los lenguajes de programación también son software pero al tener otro tipo de propósito se espera que posea otras características: • • • • • • • confiable extensible reusable robusto eficiente flexibilidad etc. Readability (facilidad de lectura) La facilidad para leer e interpretar programas es fundamental. Características que contribuyen a la legibilidad: • Simplicidad Se obtiene en gran medida de combinar un número de pequeño de constructores primitivos y un uso limitado (ni mucho-ni poco) del concepto de ortogonalidad. • Ortogonalidad Básicamente significa que un conjunto pequeño de constructores primitivos, puede ser combinado en número relativamente pequeño a la hora de construir estructuras de control y datos. Cada combinación es legal y con sentido. • facilidad de lectura y escritura (legibilidad) • seguridad • costo • Estructuras de control y de datos Contar con estructuras legibles (sólo uso de goto – agregado del tipo boolean) • Consideraciones sobre la sintaxis Formas de los identificadores – palabras reservadas – forma y significado (por ejemplo el modificador static de JAVA) Writability (facilidad de escritura) La facilidad para crear programas de un dominio. Este criterio depende del dominio de aplicación del lenguaje. • Simplicidad y Ortogonalidad Mucha ortogonalidad genera una menor detección de errores. Si el lenguaje no es simple solo se aprende y utiliza una pequeña porción de él. • Soporte para la abstracción Capacidad de definir y usar estructuras u operaciones complicadas de manera que sea posible ignorar muchos de los detalles. • Expresividad El lenguaje posee formas relativamente convenientes de expresar ciertas operaciones, por ejemplo contador++ en lugar de contador = contador + 1 o el uso del for en lugar del while equivalente. Prof. Ma. Laura Cobo Reliability (fiabilidad) • Chequeo de tipos Cuanto antes se encuentren errores menos costoso resulta realizar los arreglos que se requieran. • Manejo de excepciones La habilidad para interceptar errores en tiempo de ejecución, tomar medidas correctivas y continuar. Costo • Aprender (a escribir programas cercanos a aplicaciones particulares) • Usar (entrenar programadores para el uso del lenguaje) • Compilar • Ejecutar • Sistema de implementación del lenguaje (disponibilidad de compiladores gratuitos) • Confiabilidad (escasa confiabilidad conlleva altos costos) • Programas de mantenimiento Página 3 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Criterios de evaluación para lenguajes de programación Lenguajes de Programación Evolución de los lenguajes de programación Ma. Laura Cobo Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2016 Extraído de Sebesta, Robert “Cocepts of Programming Languages” Evolución de los lenguajes de programación Dominios de programación o Factores críticos: o o o • Conceptos: Abstracción • Paradigmas o Programación de Sistemas – Base de datos o o o o o Tipos de datos o Estructuras de control o A nivel instrucción o A nivel unidad o Encapsulamiento o Abstracción de datos o Polimorfismo Prof. Ma. Laura Cobo INTEROPERABILIDAD Colección ecléctica de lenguajes: o o Subprogramas SEGURIDAD Búsqueda de eficiencia (por uso continuo) Lenguajes ensambladores o C o o Nombres simbólicos o Expresiones COMPLEJIDAD Manipulación de símbolos en lugar de manipulación numérica Ejemplo: LISP o Software para la web Evolución en los conceptos: Abstracción PORTABILIDAD Gran producción de reportes, manejos de números decimales y caracteres. El lenguaje más destacado: COBOL Inteligencia Artificial o o o Gran cantidad de cómputos sobre grandes números en punto flotante. El principal exponente en esta categoría es Fortran Aplicaciones de negocios o o • Dominios de aplicación EFICIENCIA Aplicaciones científicas. Mark-up languages: XHTML Scipting: PHP Proposito general: JAVA Evolución en los conceptos: Abstracción(2) Nombres simbólicos con restricciones (al principio se utilizaban 0 y 1 en tarjetas perforadas) Expresiones más cercanas a la realidad (la expresión se escribe en una línea, no como una secuencia de instrucciones) Introducción de los primeros chequeos: que exista la operación, que los operandos sean accesibles, etc. Subprogramas pensados solo como una forma de agrupar código Página 4 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Evolución en los conceptos: Abstracción Universidad Nacional del Sur Primer Cuatrimestre de 2016 Estructuras de control A nivel instrucción: Programación Estructurada Tipos de datos los símbolos indexan variables de memoria con semántica, ya no hay locaciones de memoria anónimas. Cada celda está asociada a un tipo Avanza el nivel de confiabilibilidad (chequeo y seguridad) Solo tipos de datos que proveía el lenguaje. En la siguiente generación de lenguajes se extendió a tipos adecuados a diversas áreas de aplicación (definidos por el usuario) La siguiente generación brinda pocos tipos primitivos; pero también más constructores generales combinables entre si (+ ortogonal) Estructuras de control Hasta ahora había secuencia y transferencia de control (condicional e incondicional) y venían ligadas a la arquitectura subyacente La programación estructurada propone utilizar: 1. Secuencia 2. Iteración 3. Condicional Evolucionan los lenguajes eliminando la transferencia de control (goto) En base a las estructuras de control surgen luego la ejecución simétrica (o concurrente) y manejo de excepciones Encapsulamiento A nivel unidad: Diseño Top-Down Encapsular Utilización de subprogramas para partir el problema en sub-problemas Para resolver sub-problemas Funcionalidad de la unidad Para usarla en macro-problema Esquemas de relación entre unidades Jerárquico Simétrico Paralelo Latente Inicialmente teniendo en cuenta las acciones Teniendo en cuenta datos • TDA • representación adecuada • conjunto de operaciones Para que el lenguaje sea bueno en abstracción debe tener encapsulamiento y mecanismo para crear instancias Encapsulamiento sin abstracción = agrupamiento sin ocultamiento Ad hoc Polimorfismo Coherción Convierte el tipo del argumento de una función al tipo esperado por ella (el polimorfismo es aparente) Sobrecarga (significó una evolución para algunos y una involución para otros) Inicialmente solo disponible para identificadores predefinidos. Es una forma de polimorfismo, mismo operador para variables de distintos tipos. universal Genericidad un TDA define comportamiento abstracto independientemente del tipo de sus componentes Herencia forma particular de clasificación balancea la trascendencia de datos y acciones Evitar sobre especificar, sub especificar y repetir código Prof. Ma. Laura Cobo Página 5