cristina pomares domingo gallardo - dccia.ua.es · • diferenciar entre tiempo de ejecución y...

55
LPP 2013-2014 Cristina Pomares Domingo Gallardo Sesión 1: - Descripción de la asignatura - Tema 1: Historia y conceptos de los lenguajes de programación 1 Lenguajes y Paradigmas de Programación

Upload: phamlien

Post on 13-Oct-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

LPP 2013-2014 Cristina Pomares Domingo Gallardo

Sesión 1: - Descripción de la asignatura- Tema 1: Historia y conceptos de los lenguajes de programación

�1

!

!

Lenguajes y Paradigmas de Programación

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

• Datos académicos

• Recursos de la asignatura

• Objetivos y competencias

• Temario

• Prácticas

• Horarios

• Evaluación

• Bibliografía

�2

Índice de presentación de la asignatura

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

• Departamento de Ciencia de la Computación e Inteligencia Artificial6 créditos ECTS: 1 clase de teoría de 2h y 1 clase de prácticas de 2h a la semana

• Domingo Gallardo (grupos 2 y 4 de teoría y 2, 3, 5 y 6 de prácticas). email: [email protected]

• Cristina Pomares (grupos 1 y 3 de teoría y 1, 4, 7 y 8 de prácticas). Coordinadora de la asignatura - email: [email protected]

�3

Datos académicos

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Recursos de la asignatura

• Toda la información está disponible en la ficha del campus virtual

• Moodle de LPP. Información sobre la asignatura, transparencias, prácticas y otros materiales. Abierto y accesible a toda la comunidad educativa

• Foro de consultas en el sitio Moodle

• Foro de anuncios en el sitio Moodle

�4

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Objetivos de la asignatura

• Elementos comunes a los lenguajes de programación

• Características de los lenguajes de programación

• Qué elementos son esenciales y cuáles son accesorios

• Familias/paradigmas de lenguajes de programación

• Cómo diseñar un buen lenguaje de programación

�5

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Competencias

• Conocer y diferenciar las características de los distintos paradigmas de programación (programación funcional, procedural y orientada a objetos) e identificarlas en lenguajes de programación concretos.

• Conocer los elementos que componen los lenguajes de programación (estructuras de control, procedimientos, tipos de datos) y distintas implementaciones de estos elementos en distintos lenguajes.

• Diferenciar entre tiempo de ejecución y tiempo de compilación en distintos ámbitos: detección de errores o definición, creación o ámbito de vida de variables.

• Conocer modelos de computación específicos que expliquen la semántica de los lenguajes de programación. En concreto: modelo de sustitución para la programación funcional y modelo de entornos para explicar el ámbito y los valores de los variables en la programación procedural.

�6

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Competencias

• Utilizar la abstracción y la recursión para diseñar correctamente procedimientos y estructuras de datos (listas y árboles).

• Ser capaz de diseñar, implementar y corregir programas funcionales, en concreto utilizando el lenguaje de programación Scheme.

• Ser capaz de implementar programas sencillos en Scala, en los que se utilicen las características multi-paradigma del lenguaje.

• Comparar el paradigma orientado a objetos con el paradigma procedural clásico, reconociendo las ventajas que aporta en cuanto a abstracción, reutilización y modificación de código.

• Conocer los principios básicos del paradigma de programación lógica.

�7

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Temario: disponible en Moodle

• Tema 1. Lenguajes de programación: Historia de los lenguajes de progamación. Elementos de los lenguajes de programación. Abstracción. Paradigmas de programación. Compiladores e intérpretes.

• Tema 2. El lenguaje de programación Scheme: Primitivas. Tipos de datos básicos. Cadenas. Listas. Definición de funciones.

• Tema 3. Programación Funcional: Características e historia del paradigma de Programación Funcional. Características declarativas del paradigma funcional. Definición de funciones. Funciones como datos de primer orden. La forma especial lambda. Ámbito de variables y closures. Dualidad entre datos y programas: formas especiales apply y eval. Datos compuestos en Scheme: parejas. Construcción, recorrido y operaciones sobre listas. Listas con elementos compuestos. Listas de listas.

�8

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Temario

• Tema 4. Procedimientos y estructuras recursivas: Diseño de funciones recursivas. Recursión mutua. Procesos recursivos e iterativos. Memoization. Estructuras de datos recursivas: expresiones-s, árboles binarios y árboles genéricos.

• Tema 5. El lenguaje de programación Scala: Intérprete y scripts. Tipos de datos básicos. Operadores. Estructuras de control. Ámbito de variables. Tipos de datos compuestos: arrays y colecciones. Recorriendo colecciones. Definición de clases y herencia en Scala. Paquetes y sentencias imports en Scala.

• Tema 6. Programación funcional en Scala: Lenguajes multiparadigma. Programación funcional en Scala. Listas. Recursión pura y recursión por la cola. Funciones como datos de primer orden. Clousures y funciones anónimas. Funciones de orden superior: mappings y filtros de colecciones.

�9

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Temario

• Tema 7. Programación Imperativa: Historia del paradigma de programación imperativo. Características principales. Datos mutables. Datos mutables en Scheme. Estructuras de datos mutables en Scheme. Ámbito de variables dinámico y modelo de entornos en Scheme y Scala. Estado local.

• Tema 8. Programación Orientada a Objetos: Características e historia del paradigma de Programación Orientada a Objetos. Conceptos avanzados de POO en Scala: Traits en Scala. Traits como modificaciones apilables. Ventajas de los traits frente a la herencia múltiple. Miembros abstractos. Modelo de agentes para la programación concurrente.

�10

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Temario

• Tema 9. Construcción de nuevos lenguajes de programación: Diseño de lenguajes de programación. Macros. Lenguajes de dominio (DSL).

• Tema 10. Programación Lógica: El paradigma de programación lógica. Programación lógica en Scheme. Clausulas y objetivos. Backtracking. Unificación. Operadores lógicos. Variables.

�11

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Prácticas

• Realización individual de ejercicios de programación relacionados con los conceptos que se están estudiando en ese momento que servirán para reforzar y profundizar en las competencias de la asignatura.

• Lenguajes de programación y entornos de desarrollo:

• Racket (versión de Scheme, lenguaje de programación funcional)

• Scala (lenguaje multiparadigma basado en Java con características de programación funcional y programación orientada a objetos)

• 10 prácticas, se revisarán en las horas de prácticas. Buena oportunidad para resolver y consultar dudas de la asignatura

�12

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Temario

• Se realizarán 12 sesiones de ejercicios de prácticas de una semana de duración y 2 seminarios de lenguajes

• En cada sesión se propondrá una hoja de ejercicios con 5 o 6 problemas de programación relacionados con los temas vistos en las sesiones de teoría que se resolverán de forma individual.

• El profesor estará disponible en la sesión de prácticas para resolver dudas y dar pistas sobre cómo atacar los problemas

• Durante la primera media hora de la sesión práctica, se pondrán en común las soluciones de la hoja de ejercicios anterior. Los alumnos explicarán en la pizarra algunas propuestas, el profesor y el resto de compañeros las comentarán y se comentarán también soluciones alternativas. Durante la hora y media restante se resolverán los ejercicios de la semana actual.

• Al final de la semana, cuando en todos los grupos de prácticas se hayan puesto en común las soluciones, se publicarán en Moodle las soluciones propuestas por los profesores

�13

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Horarios

�14

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Evaluación

• Convocatoria normal:

★Examen parcial 1: Temas 1, 2 y 3. Semana del 3 de marzo. 30%

★Examen parcial 2: Temas 4, 5, 6 y 7. Semana del 7 de abril. 32%

★Examen parcial 3: Temas 8, 9 y 10. 10 de junio. 32%

★Asistencia y participación en prácticas: 6% (no recuperable)

★La nota final se calculará con la media ponderada de las 4 notas anteriores

• Convocatoria extraordinaria:

★Examen final: 94%

★Prácticas: Se mantiene la nota de junio

�15

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Índice de aprobados en cursos anteriores

�16

previos el índice de aprobados con respecto a matriculados ha sido (incluyendo la convocatoria!extraordinaria de julio) del 33% y del 45%. Pero, más importante, con respecto a los presentados ha!sido del 64% y del 74%.

Este es el tercer año que se imparte la asignatura en el grado de informática. !En los dos años previos el índice de aprobados con respecto a matriculados ha sido (incluyendo la convocatoria!extraordinaria de julio) del 33% y del 45%. !Pero, más importante, con respecto a los presentados ha sido del 64% y del 74%.

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Consejos para aprender los contenidos

• Trabajar todas las semanas e intentar seguir el ritmo de la asignatura

• No aprender de memoria. Trabajar los ejercicios, probarlos e inventarse nuevos ejercicios o soluciones. ¿Qué pasaría si….?

• Pelearse con las prácticas y hacerlas uno mismo sin ver ninguna solución

• Plantearse las soluciones en papel antes de probarlas en el intérprete para no llegar a una solución mediante “prueba y error”

�17

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Bibliografía

• Structure and Interpretation and Computer Programs (SICP)

• Autores: Harold Abelson y Gerald Jay Sussman

• Editorial: MITPress, 1996. Enlace a la edición on-line

• Signatura en la Biblioteca Politécnica: I.06/ABE/STR

• Programming Language Pragmatics (PLP)

• Autor: Michael L. Scott

• Editorial: Morgan Kaufmann Publishers, 2009 (Third Edition)

• Signatura en la Biblioteca Politécnica: POE 004.43/SCO/PRO

• Programming in Scala

• Martin Odersky, Programming in Scala, Artima, 2011

• Signatura en la Biblioteca Politécnica: POE 004.43/ODE/PRO

�18

LPP 2012-2013LPP 2013-2014 Cristina Pomares Domingo Gallardo

Tema 1: Historia y conceptos de los lenguajes de programación

�19

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Objetivos

• Conocer la historia de los lenguajes de programación

• Conocer a los diseñadores de los lenguajes de programación

• Conocer distintas definiciones de lenguajes de programación

• Entender el concepto de abstracción y su importancia en la programación

• Comprender que el objetivo principal de los lenguajes de programación es proporcionar descripciones de alto nivel

• Conocer los distintos tipos de ejecución de los lenguajes de programación

• Conocer el concepto de paradigma de programación y los paradigmas más importantes

�20

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Bibliografía

• Introducción capítulo 1 SICP (Building Abstractions with Procedures)

• Capítulo 1.2 PLP (The Programming Language Spectrum)

• Ampliación:

• Capítulo 1.3 PLP (Why Study Programming Languages)

• Capítulo 1.4 PLP (Compilation and Interpretation)

�21

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Calcular y computar

• Los avances tecnológicos en los siglos XVI y XVII provocan la necesidad de acelerar y mejorar la precisión de los cálculos

• Hasta los años 1940s un computador era una persona que se contrataba para realizar cálculos

• En los siglos XVII al XIX científicos, relojeros y aficionados construyeron un gran número de máquinas de calcular. Todas ellas mecánicas.

• Reconstrucción en el British Museum de Londres del motor de diferencias de Babagge para calcular e imprimir tablas numéricas de logaritmos

�22

Máquina de Schickard (1623)

Máquina de Pascal (1650)

Motor dediferencias deBabbage (1820)

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación De 1935 a 1941: primeros computadores• (1935, Cambridge) Máquina universal de Turing.

Consiste en un dispositivo lee y escribe 0s y 1s de una cinta infinita (memoria) y se mueve y los escribe en función de una tabla definida en la máquina (programa). Define el concepto de máquina universal que es capaz de leer de la cinta un programa cualquiera y simular su comportamiento en otra parte de la cinta (programa almacenado en memoria)

�23

Tecnología: electromecánica, relésProgramación: cinta con instrucciones codificadasMemoria: 64 palabras de 22 bits en almacenadas en relésVelocidad: 1 instrucción por segundo

◦ Contiene registros de memoria denotados por letras (no se puede acceder de forma indirecta)

◦ La instrucción LOAD carga el contenido del registro (un número en punto flotante) como un operando de una operación matemática

◦ La instrucción STORE guarda el resultado de la operación en un registro

• (1941, Alemania) Computador Z3 de Zuse. Constuida por Konrad Zuse, fue uno de los primeros computadores programables. Podría ejecutar operaciones ar i tméticas en punto flotante codificadas en una cinta perforada.

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación De 1941 a 1945: computadores electrónicos

• (1942, USA). ABC. En paralelo al desarrollo de Z3, John Vincent Atanasoff en la Universidad de Iowa y su estudiante de doctorado Cliff Berry diseñan y desarrollan el primer computador totalmente electrónico, utilizando unas 300 válvulas de vacío (ABC, Atanasoff-Berry Computer). Era máquina de cálculo de propósito específico orientada a la resolución de sistemas lineales de ecuaciones algebráicas. No llegó a funcionar correctamente.

�24

Tecnología: electrónica, válvulas de vacíoProgramación: no es de propósito general, la entrada de datos y ecuaciones se hace con tarjetas perforadasMemoria: 60 números en representados en binario en palabras de 50 bits almacenadas en condensadoresVelocidad: 30 sumas/restas por segundo

Tecnología: electrónica, válvulas de vacíoProgramación: no es de propósito general, la entrada/salida se realiza con una cinta de datos perforada e interruptoresMemoria: no tiene elementos de memoria

• (1944, UK). Colossus. es el primer computador electrónico digital capaz de funcionar de forma continua. Se desarrolló para automatizar la descodificación de los mensajes alemanes durante la Segunda Guerra Mundial, no fue un computador general. Construido por el matemático Max Newman y el ingeniero Tommy Flowers. Se mantuvo en secreto durante años.

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación De 1941 a 1945: computadores electrónicos

• (1944, USA). Mark-1. fue diseñada por el profesor Howard Aiken de Harvard y construida por IBM. Era una máquina enorme, del tamaño de una habitación, formada por miles de piezas conectadas a un árbol de levas de más de 15 metros. El objetivo del Mark–1 era el cálculo de tablas resultantes de funciones matemáticas.

• (1945, USA). ENIAC.Es el primer computador electrónico construido en los EEUU. Usado para el cálculo de tablas numéricas usadas para el cálculo de posición en los lanzamientos balísticos de misiles. ENIAC no tenía tampoco un programa almacenado y para modificar su funcionamiento era necesario reconfigurar la máquina usando enchufes e interruptores. John von Neumann se unió al grupo de desarrollo y aconsejó modificaciones que llevaron a un m e c a n i s m o p r i m i t i v o d e p r o g r a m a almacenado en memoria. �25

Tecnología: electromecánica, relésProgramación: programa codificado en una cinta, similar al Z3, sin operador de comparación, entrada de datos con 60 conjuntos de 24 interruptoresMemoria: 72 números en codificación decimal de 23 dígitosVelocidad: 3 sumas/restas por segundo, una división tardaba 15 segundos y un logaritmo o función tr igonométr ica alrededor de 1 minuto

Tecnología: electrónica, 17.000 válvulas de vacíoPrograma: podía realizar bucles, condicionales o subrutinas, pero el programa se introducía modificando sus interruptores y clavijas. La entrada y salida de datos se realizaba con tarjetas perforadasMemoria: 20 registros decimalesVelocidad: 5.000 sumas/restas por segundo

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación De 1941 a 1945: computadores electrónicos

• (1949, UK). EDSAC. Fue uno de los primeros computadores en funcionamiento que utilizó la arquitectura von Neumann con el programa almacenado en memoria. Fue desarrollado por un equipo dirigido por Maurice Wilkes. Biblioteca de programas cortos llamados subrutinas almacenados en tarjetas perforadas

• (1948, UK). Máquina de Manchester. El primer computador electrónico digital capaz de almacenar un programa en memoria. Se conoció con el nombre de Manchester ‘Baby’. Diseñado por Max Newmann usando la tecnología proporcionada por los ingenieros F.C. Williams y Tom Kilburn. Conjunto de instrucciones completo, capaz de realizar saltos, condicionales y direccionamiento indirecto

�26

Tecnología: válvula de vacíoPrograma: almacenado en memoria, leído con tarjetas perforadasMemoria: 1000 palabras de 16 bits almacenadas en memorias de línea de retardo de mercurioVelocidad: 714 operaciones por segundo

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Los primeros lenguajes

• En los años 40 sólo existía el código máquina. No existían los lenguajes de programación.

• Código máquina: secuencia de bits que controlan directamente un procesador. Muy tedioso. 55 89 e5 53 83 ec 04 f0 e8 31...

• Ensamblador: Abreviaturas mnemotécnicas para expresar operaciones. El traductor abreviatura-instrucción código máquina es el ensamblador. subl, pushl, movl, ...

• Necesidad de un lenguaje independiente de la máquina (años 50).

�27

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación UNIVAC primer computador comercial en 1951

Aparece por primera vez la figura del programador: manuales, cursos de formación, ofertas de empleo, etc.

Anuncio en Youtube

�28

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación IBM 704

• El IBM 704 fue el otro gran ordenador comercial de la década de los 50

• Difusión mucho mayor que el UNIVAC: centros gubernamentales, universidades

• Los primeros lenguajes de programación de alto nivel se desarrollan para este computador

�29

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Los primeros lenguajes de alto nivel

• Los primeros lenguajes de alto nivel se desarrollaron a finales de la década de los 50

• Dos enfoques muy distintos desde el principio

FORTRAN: 1956 LISP: 1958

Primer lenguaje comercial, equipo de IBM dirigido por John W. Backus

Lenguaje diseñado en un departamento de investigación, un equipo del MIT dirigido por John McCarthy

Lenguaje imperativo: estado, estructuras de control, contador de programa, celdas de memoria

Lenguaje funcional: funciones, recursión, listas, símbolos

Lenguaje compilado Lenguaje interpretado

�30

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación FORTRAN

• Desarrollado por IBM para programar el IBM 704

• FORmula TRANslating system

• Primer manual de FORTRAN octubre de 1956 para el IBM

• Primer compilador abril de 1956.

• Cita de John Backus (Wikipedia sobre FORTRAN):

Much of my work has come from being lazy. I didn't like writing programs, and so, when I was working on the IBM 701, writing programs for computing missile trajectories, I started work on a programming system to make it easier to write programs.

�31

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación FORTRAN

• Tomado del manual de FORTRAN del IBM 704

�32

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación LISP: finales de 50s en el MIT por John McCarthy

• Manual de LISP de 1960 para el IBM 704 escrito por Phyllis A. Fox. del grupo de investigación del MIT dirigido por McCarthy

• Ejemplo tomado de “The Programming Language LISP”, MIT Press, 1964

�33

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación La explosión: más de 2500 (The Language List)

�34

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Algunos lenguajes y su fecha de creación

• Consultar el documento PDF y la web de Éric Lévénez

�35

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Aspectos que provocan la evolución de los LP

• Recursos y tipos de ordenadores: evolución de los ordenadores

• Aplicaciones y necesidades de los usuarios: desde apps militares a apps personales

• Nuevos métodos de programación: el diseño de los LP tienen que soportar los buenos métodos de programación para implementar programas grandes y complejos

• Estudios teóricos: gracias a la investigación de más de 50 años se conocen los puntos fuertes y débiles, e influyen en el diseño de los nuevos LP

• Estandarización: cada vez es más necesario que los programas sean portables de unos sistemas a otros

�36

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Lista TIOBE

�37

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Categorías de los creadores de los LPs

• Si comprobamos la historia de los lenguajes de programación, podemos clasificar a sus creadores en tres grandes categorías:

★Investigadores trabajando en empresas (Backus-IBM-FORTRAN, Gosling-Sun-Java)

★Investigadores en universidades y departamentos de ciencia de los computadores (McCarthy-MIT-LISP, Wirth-ETH-Pascal, Odersky-EHT-Scala)

★Desarrolladores open source que distribuyen su trabajo a la comunidad (Wall-Perl, Matsumoto-Ruby)

�38

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Los LP en continua evolución: Ruby• Ruby, un lenguaje de programación ideado en 1993 por

un joven japonés llamado Yukihiro Matsumoto

• Lenguaje multi-paradigma interpretado y muy expresivo que actualmente se utiliza tanto para desarrollar aplicaciones web como videojuegos.

• Combina LISP, Smalltalk y Perl

• Proyecto vivo, cada año aparecen nuevas versiones

�39

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Los LP en continua evolución: Scala

• Scala, diseñado en 2003 por el profesor alemán Martin Odersky

• Trabajó en la especificación de Java y fue el creador del compilador javac

• Respuesta a los problemas de los lenguajes tradicionales imperativos para manejar la concurrencia

• Está implementado sobre Java

• Corre en la Máquina Virtual Java

I was convinced that unifying functional and object-oriented programming would have great practical value. I was frustrated both by the dismissive attitude of the

functional programming community toward OOP and by the belief of object-oriented programmers that functional programming was just an academic

exercise. So, I wanted to show that the two paradigms can be unified and that something new and powerful could result from that combination. I also wanted to create a language in which I would personally feel comfortable writing programs.

�40

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Historia de los lenguajes de programación Los LP en continua evolución: Go

• Go, el nuevo lenguaje de programación de Google lanzado en 2009

• Desarrollado, entre otros, por Ken Thompson, uno de los padres del UNIX

• Una mezcla de C y Python que intenta conseguir un lenguaje de programación de sistemas muy eficiente, expresivo y también multiparadigma.

package main! !import "fmt"! !func main()!{! fmt.Printf("Hola, mundo\n")!}

�41

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Elementos de los lenguajes de programación Definición de lenguaje de programación

• Definición de la Encyclopedia of Computer Science

!

!

• Definición de Abelson y Sussman

!A programming language is a set of characters, rules for combining them, and rules specifying their effects when executed by a computer, which have the following four characteristics: - It requires no knowledge of machine code on the part of the user - It has machine independence - Is translated into machine language - Employs a notation that is closer to that of the specific problem being solved than is machine code

!A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas.

Define un proceso que se ejecuta en el ordenador

Es de alto nivel, cercano a los problemas que se quieren resolver

(abstracción)

Permite construir nuevas abstracciones que se

adapten al dominio que se programa

�42

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Elementos de los lenguajes de programación

Para Abelson y Sussman, todos los lenguajes de progamación permiten combinar ideas simples en ideas más complejas mediante los siguientes tres mecanismos

• Expresiones primitivas que representan las entidades más simples del lenguaje

• Mecanismos de combinación con los que se construyen elementos compuestos a partir de elementos más simples

• Mecanismos de abstracción con los que dar nombre a los elementos compuestos y manipularlos como unidades

Los lenguajes son para las personas�43

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Elementos de los lenguajes de programación Importancia del aprendizaje de técnicas de LPs

• Mejora el uso del lenguaje de programación

• Incrementa el vocabulario de los elementos de programación

• Permite una mejor elección del lenguaje de programación

• Mejora la habilidad para desarrollar programas efectivos y eficientes

• Facilita el aprendizaje de un nuevo lenguaje de programación

• Facilita el diseño de nuevos lenguajes de programación

�44

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Abstracción Ejemplo: modelado de una biblioteca

E l m o d e l a d o d e l f u n c i o n a m i e n t o d e u n a b i b l i o t e c a c o n t i e n e abstracciones como “libros”, “reserva”, “pre-reserva” o “ l ib ros d ispon ib les” que representan conceptos del d o m i n i o q u e d e b e n s e r implementados en nuestra solución

Una misión fundamental de los lenguajes de programación es proporcionar herramientas que sirvan para construir estas

abstracciones.�45

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Paradigmas de programación

• Un paradigma define un conjunto de reglas, patrones y estilos de programación que son usados por un grupo de lenguajes de programación

• La separación entre los paradigmas y los lenguajes no es estricta

• Paradigmas más importantes:

• Paradigma funcional

• Paradigma lógico

• Paradigma imperativo o procedural

• Paradigma orientado a objetos

�46

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Paradigmas de programación Paradigma funcional

• La computación se realiza mediante la evaluación de expresiones

• Definición de funciones

• Funciones como datos primitivos

• Valores sin efectos laterales, no existen referencias a celdas de memoria en las que se guarda un estado modificable

• Programación declarativa (en la programación funcional pura)

• Lenguajes: LISP, Scheme, Haskell, Scala, Clojure.

(define (factorial x)! (if (= x 0)! 1! (* x (factorial (- x 1)))))!!(factorial 8)!40320!(factorial 30)!265252859812191058636308480000000

Ejemplo en Lisp

�47

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Paradigmas de programación Paradigma lógico

• Definición de reglas

• Unificación como elemento de computación

• Programación declarativa

• Lenguajes: Prolog, Mercury, Oz.

padrede('juan', 'maria'). % juan es padre de maria!padrede('pablo', 'juan'). % pablo es padre de juan!padrede('pablo', 'marcela').!padrede('carlos', 'debora').!!hijode(A,B) :- padrede(B,A).!abuelode(A,B) :- padrede(A,C), padrede(C,B).!hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B. !!familiarde(A,B) :- padrede(A,B).!familiarde(A,B) :- hijode(A,B). !familiarde(A,B) :- hermanode(A,B).!!?- hermanode('juan', 'marcela').!yes!?- hermanode('carlos', 'juan').!no!?- abuelode('pablo', 'maria').!yes!?- abuelode('maria', 'pablo').!no

Ejemplo en Prolog

�48

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Paradigmas de programación Paradigma imperativo

• Definición de procedimientos

• Definición de tipos de datos

• Chequeo de tipos en tiempo de compilación Ejemplo en Pascal

• Cambio de estado de variables

• Pasos de ejecución de un proceso

type ! tDimension = 1..100;! eMatriz(f,c: tDimension) = array [1..f,1..c] of real;!! tRango = record! f,c: tDimension value 1;! end;!! tpMatriz = ^eMatriz;!!!procedure EscribirMatriz(var m: tpMatriz);!var filas,col : integer;!begin! for filas := 1 to m^.f do begin! for col := 1 to m^.c do! write(m^[filas,col]:7:2);! writeln(resultado);! writeln(resultado)! end; !end;

Los lenguajes de programación que cumplen el paradigma imperativo se caracterizan por tener un estado implícito que es modificado mediante instrucciones o comandos del lenguaje. Como resultado, estos lenguajes tienen una noción de secuenciación de los comandos para permitir un

control preciso y determinista del estado.

�49

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Paradigmas de programación Paradigma OO

• Definición de clases y herencia

• Objetos como abstracción de datos y procedimientos

• Polimorfismo y chequeo de tipos en tiempo de ejecución

• Ejemplo en Java

public class Bicicleta {! public int marcha;! public int velocidad;!! public Bicicleta(int velocidadInicial, int marchaInicial) {! marcha = marchaInicial;! velocidad = velocidadInicial;! }!! public void setMarcha(int nuevoValor) {! marcha = nuevoValor;! }!! public void frenar(int decremento) {! velocidad -= decremento;! }!! public void acelerar(int incremento) {! velocidad += incremento;! }!}!!public class MountainBike extends Bicicleta {! public int alturaSillin;!! public MountainBike(int alturaInicial, ! int velocidadInicial, int marchaInicial) {! super(velocidadInicial, marchaInicial);! alturaSillin = alturaInicial;! } !! public void setAltura(int nuevoValor) {! alturaSillin = nuevoValor;! } !}!!public class Excursion {!! public static void main(String[] args) {! MountainBike miBicicleta = new MoutainBike(10,10,3);! miBicicleta.acelerar(10);! miBicicleta.setMarcha(4);! miBicicleta.frenar(10);! }!}

�50

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Compiladores e intérpretes

• Existen una gran variedad de estrategias para conseguir que un programa se ejecute en un ordenador

• Todas se basan en los "meta-programas" (compiladores, intérpretes, etc.) cuyos datos de entrada son el código fuente de otros programas.

• El resultado final debe ser siempre la ejecución del programa que se está procesando.

• Esto lo consiguen los meta-programas con distintos enfoques y técnicas: compilación, interpretación, ejecución mediante máquina virtual, enlazado de librerías, etc.

�51

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Compiladores e intérpretes Compilación

• Imágenes tomadas del libro Programming Language Pragmatics

• Ejemplos: C, C++

• Diferentes momentos en la vida de un programa: tiempo de compilación y tiempo de ejecución

• Mayor eficiencia

�52

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Compiladores e intérpretes Interpretación

• Ejemplos: BASIC, LISP, Scheme, Python, Ruby

• No hay diferencia entre el tiempo de compilación y el tiempo de ejecución

• Mayor flexibilidad: el código se puede construir y ejecutar "on the fly" (funciones lambda o clousures)

�53

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Compiladores e intérpretes Ejecución en máquina virtual

• Cuidado, no confundir con las máquinas virtuales del tipo VirtualBox o VmWare.

• En nuestro caso, la máquina virtual es un proceso que se ejecuta en el sistema operativo y que ejecuta el código binario intermedio al que se compila un lenguaje (Java, por ejemplo).

• Permite independizar la generación de código del procesador en el que se ejecuta el programa. El código binario intermedio es multiplataforma.

• Ejemplos: Java, Scala

�54

Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo

Compiladores e intérpretes Enlazado de rutinas y librerías y preprocesamiento

Enlazado de rutinas y librerías El preprocesador analiza el código y sustituye macros. Ejemplo: C, C++

�55