Scala: Programação OO, Funcional e Concorrente na JVM
Upcoming SlideShare
Loading in...5
×
 

Scala: Programação OO, Funcional e Concorrente na JVM

on

  • 2,372 views

 

Statistics

Views

Total Views
2,372
Views on SlideShare
2,351
Embed Views
21

Actions

Likes
1
Downloads
38
Comments
0

4 Embeds 21

http://us-w1.rockmelt.com 11
http://paper.li 6
http://twitter.com 3
https://twitter.com 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Scala: Programação OO, Funcional e Concorrente na JVM Scala: Programação OO, Funcional e Concorrente na JVM Presentation Transcript

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