Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Lenguajes de Programación Introducción – Criterios de evaluación Ma. Laura Cobo Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2016 Prof. Ma. Laura Cobo Página 1 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computació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) Conceptos generales Sintaxis y semántica Implementación Principios de diseño Paradigmas de programación Prof. Ma. Laura Cobo Página 2 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Bibliografía • 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 Prof. Ma. Laura Cobo 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 Objetivos generales del curso Comparar y contraponer: • principios teóricos - detalles técnicos • semántica – sintaxis • Prof. Ma. Laura Cobo evolución - historia Página 4 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Razones para estudiar conceptos de lenguajes de programación o Incrementar la capacidad para expresar ideas. o Mejorar la calidad y cantidad de conocimiento previo para la 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. Prof. Ma. Laura Cobo Página 5 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Razones para lenguajes de programación o Comprender aspectos oscuros de los lenguajes. o Elegir modos alternativos de expresar cosas. 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 6 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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. Prof. Ma. Laura Cobo Página 7 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación 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 Prof. Ma. Laura Cobo Página 8 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Introducción a lenguajes de programación o Originalmente las computadoras eran grandes y costosas, eran 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. Prof. Ma. Laura Cobo Página 9 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Lenguajes Una de las clasificaciones para lenguajes de programación sigue este esquema: 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 Prof. Ma. Laura Cobo Página 10 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Lenguajes 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 Página 11 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Otra Clasificación 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 Prof. Ma. Laura Cobo Página 12 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Desarrollo de Lenguajes de Programación 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. Prof. Ma. Laura Cobo Página 13 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Características deseables en el software De cualquier software se espera, básicamente, que sea: • • • • • • • Prof. Ma. Laura Cobo confiable extensible reusable robusto eficiente flexibilidad etc. Página 14 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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: • facilidad de lectura y escritura (legibilidad) • seguridad • costo Prof. Ma. Laura Cobo Página 15 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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. • 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) Prof. Ma. Laura Cobo Página 16 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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 Página 17 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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 Prof. Ma. Laura Cobo Página 18 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 Extraído de Sebesta, Robert “Cocepts of Programming Languages” Prof. Ma. Laura Cobo Página 19 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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 Prof. Ma. Laura Cobo Página 20 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Evolución de los lenguajes de programación Factores críticos: • Dominios de aplicación • Conceptos: Abstracción • Paradigmas Prof. Ma. Laura Cobo Página 21 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Dominios de programación o o o o 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 o EFICIENCIA Aplicaciones científicas. COMPLEJIDAD Manipulación de símbolos en lugar de manipulación numérica Ejemplo: LISP Programación de Sistemas – Base de datos o o Búsqueda de eficiencia (por uso continuo) Lenguajes ensambladores o C o Software para la web o SEGURIDAD INTEROPERABILIDAD Colección ecléctica de lenguajes: o o o Prof. Ma. Laura Cobo Mark-up languages: XHTML Scipting: PHP Proposito general: JAVA Página 22 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Evolución en los conceptos: Abstracción o Nombres simbólicos o Expresiones o Subprogramas 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 Página 23 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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 Prof. Ma. Laura Cobo Página 24 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Evolución en los conceptos: Abstracción 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) Prof. Ma. Laura Cobo Página 25 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Estructuras de control A nivel instrucción: Programación Estructurada 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 Prof. Ma. Laura Cobo Página 26 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Estructuras de control A nivel unidad: Diseño Top-Down 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 Prof. Ma. Laura Cobo Página 27 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Encapsulamiento Encapsular 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 Prof. Ma. Laura Cobo Página 28 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 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 Prof. Ma. Laura Cobo 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 Página 29