SlideShare una empresa de Scribd logo
1 de 39
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!

Más contenido relacionado

La actualidad más candente

Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe VectorWesley R. Bezerra
 
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesProject coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesMarcelo de Castro
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basicoGabriel Costa
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 

La actualidad más candente (19)

POO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - DatasPOO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - Datas
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe Vector
 
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesProject coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basico
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
ExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java AtualizadoExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java Atualizado
 
Novidades java 7
Novidades java 7Novidades java 7
Novidades java 7
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Java6
Java6Java6
Java6
 
Java7
Java7Java7
Java7
 
Lab4 mux
Lab4 muxLab4 mux
Lab4 mux
 

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

Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosFelipe Hummel
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Certificado Back-end Python.pdf
Certificado Back-end Python.pdfCertificado Back-end Python.pdf
Certificado Back-end Python.pdfMarcelAmaral6
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?Denis Costa
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformMilfont Consulting
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeansokashi24
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemliverig
 

Similar a Scala: Programação OO, Funcional e Concorrente na JVM (20)

Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Aula 01
Aula 01Aula 01
Aula 01
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Certificado Back-end Python.pdf
Certificado Back-end Python.pdfCertificado Back-end Python.pdf
Certificado Back-end Python.pdf
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeans
 
Java 02
Java 02Java 02
Java 02
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Comecando tensorflow
Comecando tensorflowComecando tensorflow
Comecando tensorflow
 

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