49
1 Programación declarativa avanza Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

Embed Size (px)

Citation preview

Page 1: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

1

Programación declarativa avanzada

Lenguaje de programación

Manuel David Romero GuerreroUxio Prego Montón

Francisco Tomás López de las Huertas Arance

Page 2: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

2

ÍNDICE

¿QUÉ ES SCALA? HISTORIA DEMOSTRACIÓN CARACTERÍSTICAS SINTAXIS CONCURRENCIA PRESENTE FUTURO BIBLIOGRAFÍA SOBRE SCALA

Programación declarativa avanzada

Page 3: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

3

¿QUÉ ES SCALA?

Es un lenguaje de programación de propósito general diseñado para expresar patrones comunes de programación de forma concisa y elegante.

Se integran las características de los lenguajes orientados

a objetos y funcional. Scala no es una extensión de Java, pero es totalmente

interoperable con él.

Scala se traduce a bytecodes Java y la eficiencia de los programas compilados por lo general es igual que Java.

Programación declarativa avanzada

Page 4: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

4

HISTORIA

Scala fue diseñado por Martin Odersky y su grupo de la Escuela Politécnica Federal de Lausana (Suiza).

Odersky tenía como objetivo combinar la programación funcional y la programación orientada a objetos.

Se inició en 2001 y la primera versión que se hizo pública fue en 2003. En 2006, se lanzó una segunda versión conocida como Scala v2.0.

Programación declarativa avanzada

Page 5: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

5

Programación declarativa avanzada

DEMOSTRACIÓN (I)

Máquina Virtual

Java

Plataforma .Net

Page 6: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

6

Programación declarativa avanzada

DEMOSTRACIÓN (II)

Directa

Plugins

Frameworks

• Eclipse

• Intellij

• Netbeans

Page 7: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

7

Programación declarativa avanzada

DEMOSTRACIÓN (III)

Page 8: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

8CARACTERÍSTICAS DEL LENGUAJE (I)

Declarativo Perezoso

No puro Aplicación parcial Plegado Filtrado Mapeado Patrones

A varios niveles

Programación declarativa avanzada

Page 9: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

9CARACTERÍSTICAS DEL LENGUAJE (II)

Orientado a Objetos puro Objeto null Objeto Unit

Tipificación Estático Fuerte

Programación declarativa avanzada

Page 10: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

10CARACTERÍSTICAS DEL LENGUAJE (III)

Lenguaje de alto nivel Expresividad

Patrones Sentencia for comprensiva

Yield Soporte nativo de expresiones regulares

Ligereza Concisión Inteligencia

Programación declarativa avanzada

Page 11: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

11CARACTERÍSTICAS DEL LENGUAJE (IV)

Eficiente Integrable con XML Interoperabilidad

Java .NET

Programación declarativa avanzada

Page 12: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

12

ALGO DE SINTAXIS (I)

Tipos por defecto Byte, de -2^7 a 2^7-1 Char, de 0 a 2^16-1 Short, de -2^15 a 2^15-1 Int, de -2^31 a 2^31-1 Long, de -2^63 a 2^63-1 Float y Double, según el estándar IEEE754

Programación declarativa avanzada

Page 13: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

13

ALGO DE SINTAXIS (II)

Tuplas Hasta de 22 elementos

Programación declarativa avanzada

Page 14: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

14

ALGO DE SINTAXIS (III)

Perezoso

Pero no puro!

Programación declarativa avanzada

Page 15: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

15

ALGO DE SINTAXIS (IV)

Aplicación parcial

modN se aplica parcialmente

Programación declarativa avanzada

Page 16: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

16

ALGO DE SINTAXIS (V)

Mapeado

Se presupone fib declarado previamente

Programación declarativa avanzada

Page 17: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

17

ALGO DE SINTAXIS (VI)

Patrones Tradicionales

Tipos existenciales

Programación declarativa avanzada

Page 18: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

18

ALGO DE SINTAXIS (VII)

Orientación a objetos pura

null

Programación declarativa avanzada

Page 19: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

19

ALGO DE SINTAXIS (VIII)

Orientación a objetos pura

null

Programación declarativa avanzada

Page 20: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

20

ALGO DE SINTAXIS (IX)

Orientación a objetos pura Unit

Programación declarativa avanzada

Page 21: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

21

Lenguaje de alto nivel Expresividad

Patrones Sentencia for comprensiva

Para empezar…

Compliquemoslo un poco más con un filtrado…

ALGO DE SINTAXIS (X)

Programación declarativa avanzada

Page 22: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

22

Sentencia for comprensiva Permanencia: yield

Ámbito expandido

for generativo

ALGO DE SINTAXIS (XI)

Programación declarativa avanzada

Page 23: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

23

Lenguaje de alto nivel Ligereza

Concisión

ALGO DE SINTAXIS (XII)

Programación declarativa avanzada

Page 24: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

24

Lenguaje de alto nivel Concisión

Parámetros con valores por defecto

ALGO DE SINTAXIS (XIII)

Programación declarativa avanzada

Page 25: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

25

Lenguaje de alto nivel Concisión

Lambda

ALGO DE SINTAXIS (XIV)

Programación declarativa avanzada

Page 26: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

26

Lenguaje de alto nivel Inteligencia

Integración con XML

ALGO DE SINTAXIS (XV)

Programación declarativa avanzada

Page 27: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

27

Interoperabilidad Java

.NET

ALGO DE SINTAXIS (XVI)

Programación declarativa avanzada

Page 28: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

28

Más cosas importantes Sentencia Selectiva

Genericidad Tipos parametrizados

ALGO DE SINTAXIS (XVII)

Programación declarativa avanzada

Page 29: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

29

Más cosas importantes Genericidad

Mejora en las restricciones A, que hereda de B… B, del que heredada A…

ALGO DE SINTAXIS (XVIII)

Programación declarativa avanzada

Page 30: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

30

Más cosas importantes Genericidad

Proyección de tipos

ALGO DE SINTAXIS (XIX)

Programación declarativa avanzada

Page 31: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

31

Más cosas importantes Traits

Conjunto de métodos parametrizados ¿Cómo las interfaces de Java?

Parecido, pero no ¿Cómo las clases abstractas de Java?

Sumamente parecido, pero tampoco ¿Y?

Herencia múltiple

ALGO DE SINTAXIS (XX)

Programación declarativa avanzada

Page 32: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

32

Más cosas importantes Traits

ALGO DE SINTAXIS (XXI)

Programación declarativa avanzada

Page 33: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

33

Más cosas importantes Paquetes “à la C#”

ALGO DE SINTAXIS (XXII)

Programación declarativa avanzada

Page 34: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

34

CONCURRENCIA (I)

El instrumento principal que proporciona Scala para la concurrencia son los Actores (o actors).

Son procesos concurrentes que se comunican a

través del intercambio de mensajes.

La librería de Actors de Scala proporciona envío

de mensajes tanto asíncronos como síncronos.

Programación declarativa avanzada

Page 35: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

35

CONCURRENCIA (II)

Las dos operaciones principales que se pueden hacer con un actor es enviar y recibir un mensaje:

Programación declarativa avanzada

Page 36: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

36

CONCURRENCIA (III)

Programación declarativa avanzada

Page 37: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

37

CONCURRENCIA (IV)

Programación declarativa avanzada

Page 38: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

38

CONCURRENCIA (V)

Programación declarativa avanzada

Page 39: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

39SCALA EN LAS EMPRESAS

Électricité de FranceTwitter

Xebia

Sony

SiemensReaktor

Programación declarativa avanzada

Page 40: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

40

PRESENTE (I)Posición Abril 2010 Lenguaje Programación Índice Abril 2010

1 C 18.058%2 Java 18.051%3 C++ 9.707%4 PHP 9.662%5 (Visual) Basic 6.392%6 C# 4.435%7 Python 4.205%8 Perl 3.553%9 Delphi 2.715%

10 JavaScript 2.469%

27 Scala 0.433%

40 Caml/F# 0.280%

43 Prolog 0.258%

Programación declarativa avanzada

Page 41: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

41

PRESENTE (II)

Programación declarativa avanzada

Page 42: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

42

FUTURO(I)

Programación declarativa avanzada

"Creo que hay un mercado mundial de quizas unos cinco ordenadores."

THOMAS WATSON, chairman de IBM, 1943.

"Pero... para que nos van a servir?"

Ingeniero de la Advanced Computing Systems Division de IBM, 1968, hablando de los microchips.

"¿Quien demonios va a querer oir hablar a los actores?"

H.M. WARNER, Warner Brothers, 1927.

Muchas veces la gente no sabe lo que quiere hasta que se lo enseñas.

Steve Jobs

Page 43: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

43

FUTURO (II)

The New Big Thing

Programación declarativa avanzada

Alto Nivel Multiparadigmático

Ligero

Elegante

Seguro

Orientado a Objetos

Funcional

Concurrente

JVM y .NetIntegrable con Java y XML

Xquery y XPath

Tipos estáticos Inferencia de tipos

Page 44: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

44

FUTURO (II)

The New Big Thing

Programación declarativa avanzada

Escasa Documentación No está preparado para la producción

Librerías estándar Sintaxis Compleja No tiene Patrocinador Corporativo

Page 45: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

45

FUTURO (III)

¿Imperativo o Funcional? El Creador Los Usuarios

El continuador de Java Productividad Incorpora vacíos de Java

Proyectos con varios lenguajes Concurrencia

Programación declarativa avanzada

Page 46: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

46

FUTURO (IV)

Enseñanza y Aprendizaje Puristas

Funcional Haskell / F# Imperativo C / C++ Orientado a Objetos Java / C#

Constructivistas Programación como un todo

Se recomienda por ser Interesante la combinación de paradigmas

Programación declarativa avanzada

Page 47: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

47

LIBROS SOBRE SCALA (I)

Programming in Scala

(Martin Odersky, Lex Spoon y Bill Venners – Noviembre 2008)

Beginning Scala

(David Pollak – Mayo 2009)

Programación declarativa avanzada

Page 48: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

48

LIBROS SOBRE SCALA (II)

Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine

(Venkat Subramaniam – Julio 2009)

Programming Scala

(Alex Payne y Dean Wampler – Septiembre 2009)

Programación declarativa avanzada

Page 49: Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance

49LIBROS SOBRE SCALA (III)

Steps in Scala

(Christos KK Loverdos y Apostolos Syropoulos – Septiembre 2010)

Programación declarativa avanzada