Scala: Programação OO, Funcional e Concorrentena JVM<br />Andrei de Araújo Formiga<br />Universidade Federal da Paraíba<br...
Scala?<br />
Scala?<br />
Scala?<br />
Scala<br />
O QueVeremos<br />A LinguagemScala<br />OO e Funcional: Paralelos e Diferenças<br />ProgramaçãoConcorrente com Atores<br />
SobreVocê<br />Familiaridade com Orientação a Objetos<br />Sabe Java (de preferência)<br />Nãonecessariamentesabeprog. fun...
Scala<br />Scalable Abstractions<br />Martin Odersky, 2001<br />Versãoatual: 2.9 (maio)<br />ÉcolePolytechniqueFéderale de...
Histórico<br />Pizza, Generic Java (1998)<br />Java Generics (Java 5, 2004)<br />Scala (2001)<br />
OO + Funcional<br />Classes, herança, encapsulamento (Java)<br />Funções de 1aclasse, Closures<br />Pattern matching, obje...
Paradigmas<br />Paradigmasmudamcomoresposta a momentos de crise<br />OO: “Crise do Software” da década de 70<br />Atualmen...
A Crise do Software<br />Década de 1970<br />GrandesAvançosna Eng. de Hardware<br />Porquenãoem Software?<br />
OO comoSolução<br />Simula, Smalltalk, C++<br />Reuso!<br />Componentes de Software!<br />Problemaresolvido?<br />
Atualmente<br />
Crise da Concorrência<br />Processadores com maisnúcleos<br />Éprecisoaproveitar a capacidade<br />Concorrência + mem. com...
ProgramaçãoFuncional<br />Início: Lisp (1959)<br />Décadas de pesquisaemlinguagens<br />Estruturasimutáveis<br />Vantagens...
Paralelos<br />Função<br />Dados<br />Variáveis<br />Métodos<br />Objetos<br />Closures<br />
PorqueScala?<br />Java melhorque Java<br />Expressividade + Eficiência<br />JVM, bibliotecas Java<br />
PorqueScala?<br />// Java<br />booleannameHasUpperCase = false;<br />for (inti=0; i < name.length(); ++i) {<br />if (Chara...
PorqueScala?<br />
Hello, World!<br />objetosingleton<br />object Hello {<br />def main(args: Array[String]) {<br />println("Hello, world!")<...
Classes, Métodos<br />abstractclass Shape {<br />protectedvarx: Int= 0<br />protected var y: Int= 0<br />defdraw(): Unit <...
Construtores<br />abstractclassShape(x:Int, y:Int) {<br />def draw(): Unit <br />}<br />classCircle(x:Int, y:Int, r:Int)<b...
Inferência de Tipos<br />classTipos{<br />private vari = 0<br />private var c = 'X'<br />private var s = "Hello, world!"<b...
AtalhosSintáticos<br />Chamada com 1 parâmetropodeomitir ()<br />O ponto entre objeto e métodoéopcional<br />conta.deposit...
Operadores<br />Operadoressãométodos<br />Épossíveldefiniroperadoresarbitrários<br />2 + 3 = 2.+(3)<br />var v1 = new Vect...
VariáveisqueNãoVariam<br />Ênfaseemobjetosimutáveis<br />class Ponto {<br />private val x = 0<br />private val y = 0<br />...
AtualizaçõesNão-Destrutivas<br />class Ponto(x: Int, y: Int) {<br />def trans(dx: Int, dy: Int) = <br />new Ponto(x+dx, y+...
Funções e Closures<br />Funções de 1aClasse<br />Closures<br />(x: Int) => x + 1<br />defcriaSomador(s: Int) = <br /> (x) ...
Coleções<br />Tuplas<br />Listas, Arrays, mapas, conjuntos, etc<br />Mutáveis e imutáveis<br />(2, “Hello, world!”)<br />
Listas e Pattern Matching<br />object Tamanho{<br />def tam(l: List[Int]): Int = <br />    l match { <br />      case Nil ...
Case Classes<br />Classes “simples”<br />Úteisparaguardar dados<br />Podemserusadas com pattern matching<br />
Case Classes<br />abstract class Ponto<br />case class Ponto2d(x: Int, y: Int) <br />extendsPonto<br />case class Ponto3d(...
Modelo de Atores<br />Carl Hewitt et al. (MIT, 1973)<br />Atoresisoladosquetrocammensagens<br />Erlang<br />
AtoresemScala<br />scala.actor<br />Bibliotecapadrão<br />Distribuída com a linguagem<br />Razoavelmentemadura<br />Manute...
AtoresemScala<br />Akka<br />Bibliotecageralparaconcorrência<br />Madura e estável<br />Aplicaçõescomerciais<br />Bemmanti...
ExemploemAkka<br />
Para Saber Mais<br />www.scala-lang.org<br />www.typesafe.com<br />Programming in Scala, 2nd Edition<br />Martin Odersky, ...
Obrigado!<br />
Upcoming SlideShare
Loading in...5
×

Scala java7

613

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
613
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Scala java7

  1. 1. Scala: Programação OO, Funcional e Concorrentena JVM<br />Andrei de Araújo Formiga<br />Universidade Federal da Paraíba<br />@andreiformiga<br />
  2. 2. Scala?<br />
  3. 3. Scala?<br />
  4. 4. Scala?<br />
  5. 5. Scala<br />
  6. 6. O QueVeremos<br />A LinguagemScala<br />OO e Funcional: Paralelos e Diferenças<br />ProgramaçãoConcorrente com Atores<br />
  7. 7. SobreVocê<br />Familiaridade com Orientação a Objetos<br />Sabe Java (de preferência)<br />Nãonecessariamentesabeprog. funcional<br />
  8. 8. Scala<br />Scalable Abstractions<br />Martin Odersky, 2001<br />Versãoatual: 2.9 (maio)<br />ÉcolePolytechniqueFéderale de Lausanne<br />Typesafe, Inc.<br />
  9. 9. Histórico<br />Pizza, Generic Java (1998)<br />Java Generics (Java 5, 2004)<br />Scala (2001)<br />
  10. 10. OO + Funcional<br />Classes, herança, encapsulamento (Java)<br />Funções de 1aclasse, Closures<br />Pattern matching, objetosimutáveis<br />Tiposparamétricos (generics)<br />
  11. 11. Paradigmas<br />Paradigmasmudamcomoresposta a momentos de crise<br />OO: “Crise do Software” da década de 70<br />Atualmente: “crise da concorrência”<br />
  12. 12. A Crise do Software<br />Década de 1970<br />GrandesAvançosna Eng. de Hardware<br />Porquenãoem Software?<br />
  13. 13. OO comoSolução<br />Simula, Smalltalk, C++<br />Reuso!<br />Componentes de Software!<br />Problemaresolvido?<br />
  14. 14. Atualmente<br />
  15. 15. Crise da Concorrência<br />Processadores com maisnúcleos<br />Éprecisoaproveitar a capacidade<br />Concorrência + mem. compartilhada = locks<br />
  16. 16. ProgramaçãoFuncional<br />Início: Lisp (1959)<br />Décadas de pesquisaemlinguagens<br />Estruturasimutáveis<br />Vantagens: Concorrência, DSLs<br />
  17. 17. Paralelos<br />Função<br />Dados<br />Variáveis<br />Métodos<br />Objetos<br />Closures<br />
  18. 18. PorqueScala?<br />Java melhorque Java<br />Expressividade + Eficiência<br />JVM, bibliotecas Java<br />
  19. 19. PorqueScala?<br />// Java<br />booleannameHasUpperCase = false;<br />for (inti=0; i < name.length(); ++i) {<br />if (Character.isUpperCase(name.charAt(i)))<br /> {<br />nameHasUpperCase = true;<br />break;<br /> }<br />}<br />// Scala<br />valnameHasUpperCase = name.exists(_.isUpper)<br />
  20. 20. PorqueScala?<br />
  21. 21. Hello, World!<br />objetosingleton<br />object Hello {<br />def main(args: Array[String]) {<br />println("Hello, world!")<br /> }<br />}<br />retorno Unit (implícito)<br />
  22. 22. Classes, Métodos<br />abstractclass Shape {<br />protectedvarx: Int= 0<br />protected var y: Int= 0<br />defdraw(): Unit <br />}<br />class Circle extends Shape {<br />private var r: Int = 0<br />overridedef draw() {<br /> // desenhacirculo<br /> }<br />}<br />
  23. 23. Construtores<br />abstractclassShape(x:Int, y:Int) {<br />def draw(): Unit <br />}<br />classCircle(x:Int, y:Int, r:Int)<br />extends Shape(x,y) <br />{<br /> overridedef draw() {<br /> // desenhacirculo<br /> }<br />}<br />
  24. 24. Inferência de Tipos<br />classTipos{<br />private vari = 0<br />private var c = 'X'<br />private var s = "Hello, world!"<br />private var f = 3.1415926535<br />private var b = true<br />}<br />
  25. 25. AtalhosSintáticos<br />Chamada com 1 parâmetropodeomitir ()<br />O ponto entre objeto e métodoéopcional<br />conta.deposito 1000<br />contadeposito 1000<br />
  26. 26. Operadores<br />Operadoressãométodos<br />Épossíveldefiniroperadoresarbitrários<br />2 + 3 = 2.+(3)<br />var v1 = new Vector2d(1.2, 4.5)<br />var v2 = new Vector2d(1.3, 2.7)<br />var v3 = v1 + v2<br />
  27. 27. VariáveisqueNãoVariam<br />Ênfaseemobjetosimutáveis<br />class Ponto {<br />private val x = 0<br />private val y = 0<br />def trans(dx: Int, dy: Int) = …<br />}<br />
  28. 28. AtualizaçõesNão-Destrutivas<br />class Ponto(x: Int, y: Int) {<br />def trans(dx: Int, dy: Int) = <br />new Ponto(x+dx, y+dy)<br />}<br />class Ponto(x: Int, y: Int) {<br />def trans(dx: Int, dy: Int) = {<br />valnx = x+dx<br />valny = y+dy<br />new Ponto(nx, ny)<br />}<br />
  29. 29. Funções e Closures<br />Funções de 1aClasse<br />Closures<br />(x: Int) => x + 1<br />defcriaSomador(s: Int) = <br /> (x) => x + s<br />
  30. 30. Coleções<br />Tuplas<br />Listas, Arrays, mapas, conjuntos, etc<br />Mutáveis e imutáveis<br />(2, “Hello, world!”)<br />
  31. 31. Listas e Pattern Matching<br />object Tamanho{<br />def tam(l: List[Int]): Int = <br /> l match { <br /> case Nil => 0<br /> case x :: rl => 1 + tam(rl)<br /> }<br />def main(args: Array[String]) {<br />val l1 = List(1, 2, 3, 4)<br />println(tam(l1))<br /> }<br />}<br />
  32. 32. Case Classes<br />Classes “simples”<br />Úteisparaguardar dados<br />Podemserusadas com pattern matching<br />
  33. 33. Case Classes<br />abstract class Ponto<br />case class Ponto2d(x: Int, y: Int) <br />extendsPonto<br />case class Ponto3d(x: Int, y: Int, z: Int) <br />extends Ponto<br />defprocessa(p: Ponto) = <br /> p match { <br /> case Ponto2d(x, y) => // usa x e y<br /> case Ponto3d(x, y, z) => // usa x, y e z<br /> }<br />
  34. 34. Modelo de Atores<br />Carl Hewitt et al. (MIT, 1973)<br />Atoresisoladosquetrocammensagens<br />Erlang<br />
  35. 35. AtoresemScala<br />scala.actor<br />Bibliotecapadrão<br />Distribuída com a linguagem<br />Razoavelmentemadura<br />Manutençãolenta<br />
  36. 36. AtoresemScala<br />Akka<br />Bibliotecageralparaconcorrência<br />Madura e estável<br />Aplicaçõescomerciais<br />Bemmantida<br />Atoresremotos<br />
  37. 37. ExemploemAkka<br />
  38. 38. Para Saber Mais<br />www.scala-lang.org<br />www.typesafe.com<br />Programming in Scala, 2nd Edition<br />Martin Odersky, Lex Spoon & Bill Venners<br />
  39. 39. Obrigado!<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×