renato menezes machado groovy lucas augusto santos ... ?· • a partir do groovy 2.0, se tornou...

Download Renato Menezes Machado Groovy Lucas Augusto Santos ... ?· • A partir do Groovy 2.0, se tornou possível…

Post on 01-Dec-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • GroovyCleisson Santos Guterres

    Lucas Augusto SantosRenato Menezes Machado

  • IntroduoGroovy uma linguagem de programao orientada a objeto para a plataforma Java.

    dinamicamente compilada na JVM, utiliza dos cdigos e bibliotecas de Java e a maioria do cdigo sintaticamente vlido em Java puro.

    Sua primeira verso foi lanada em 2 de janeiro de 2007. A verso 2.0 foi lanada em Julho de 2012 e se espera(va) uma verso nova em 2014.

  • IntroduoCaractersticas

    Grande proximidade sinttica com Java facilita a sua redigibilidade, legibilidade e aprendizado.

    Funcionalidades no presentes em Java inspiradas em Python, Ruby e Smalltalk.

    Tambm interpretada pela JVM em tempo de execuo.

    Compila diretamente para bytecode Java (bytecodes gerados pelas duas linguagens so literalmente

    idnticos).

  • IntroduoCaractersticas

    A grande maioria de arquivos escritos em Java tambm so vlidos em Groovy.

    uma linguagem de tipagem dinmica.

    Possvel utilizao de meta-programao.

    Vrios pacotes e classes j importadas como java.lang, java.io e java.util.

  • Palavras Reservadas

  • Identificadores O nome das variveis pode conter letras, nmeros, dolar

    sign($) e underscore(_). Porm no podem comear com um nmero.

    A linguagem case sensitive.Exemplos:

  • Identificadores Podemos usar identificadores com aspas, eles so teis pois

    podem conter caracteres ilegais em nomes de vriaveis como por exemplo exclamao(!), hfen(-), espao.

    Estes identificadores so usados sempre depois de pontos.Exemplo:

  • Escopo Escopo esttico com blocos aninhados.

    Sobrecarga de identificadores Em uma mesma classe pode existir uma varivel e um

    mtodo com mesmo nome.

    Sobrecarga de mtodos Subclasses podem sobrescrever mtodos de suas

    superclasses.

  • Expresses e ComandosOperaes aritmticas simples: Soma Subtrao Multiplicao Diviso Mdulo Potncia

  • Expresses e ComandosOperadores Unrios

  • Expresses e ComandosOperaes aritmticas com atribuio

  • Expresses e ComandosOperadores relacionais

  • Expresses e ComandosOperadores lgicos

    Precedncia nestes operadores

    Existe curto-circuito.

  • Expresses e ComandosOperadores bit-a-bit

  • Expresses e ComandosOperador Ternrio e Elvis Operator

  • Expresses e ComandosOperadores Spaceship() e Safe Navigation(?.)

  • Expresses e ComandosEstruturas condicionais de controle

  • Expresses e ComandosEstruturas iterativas de controle e Escapes

  • Ausncia de Tipos Primitivos

    Em Groovy, tudo objeto (diferente de Java). Tipos primitivos so na verdade pertencentes respectiva classe wrapper.

    int Pareco_Int_Mas_Sou_Integer = 1

    Semelhante ao autoboxing de Java 5

  • Tipo Boolean

  • Tipo Enumerado

  • Tipo DecimalGroovy possui a classe BigDecimal (java.math.BigDecimal)

    Tipo Ponto Flutuante

    Groovy possui os tipos float e double, igual Java

  • Funciona como em C

    Tipo Char

    Tipo String

    Parecido com Java; Pode ser definido por

    aspas simples ou duplas

  • Tipo Intervalo de Inteiros

    Na Biblioteca groovy.lang existe a classe IntRange que implementa a interface Range

  • Tipos Compostos

    Produto Cartesiano

    A biblioteca padro groovy.lang possui a classe Tupla

  • Mapeamentos Finitos

    Vetores Semelhante a Java, checagem dinmica dos ndices

    Conjunto PotnciaPossui a classe Set, de java.util, que se comporta de forma semelhante a um conjunto potncia

  • Funes

    Tipos RecursivosIgual a Java.

    Ponteiros e RefernciasO programador no pode manipular endereos de memria. As variveis so do tipo referncia

  • Tipo Mapa

  • Correspondncia entre parmetros

    Posicional

    Pode ser por valores default:

  • O nmero de parmetros pode variar:

  • Passagem de Parmetros

    Resultado do cdigo:

    Podemos concluir que nesse aspecto Groovy se comporta igual a Java.Alm disso, o momento da passagem normal / eager

  • Classes Internas Annimas Disponvel a partir de Groovy 1.7

    TADs como Classes em Groovy

  • Pacotes Classes agrupadas em um mesmo local

    Utilizando classes de um pacote

  • Verificao de Tipos A tipagem dinmica, ou seja, fica a critrio do programador declarar ou no o tipo da varivel. Erros de tipos s so checados em tempo de execuo Maior flexibilidade, menor confiabilidade

    A partir do Groovy 2.0, se tornou possvel ativar um recurso adicional para fazer tipagem esttica. Antes da classe adiciona-se a seguinte anotao: @groovy.transform.TypeChecked (Tambm necessria uma biblioteca)

  • Equivalncia de Tipos

    Como visto anteriormente, h muitos exemplos de converso implcita, como atribuies de char para int, de int para char, e atribuies de quase todos os tipos para String.

    Porm no so consideradas equivalentes classes diferentes implementadas pelo programador com os mesmos atributos. Ex: Uma instncia da classe pessoa tem o atributo nome e idade, e uma instncia da classe aluno tem o atributo nome e idade. No possvel passar um aluno como parmetro para um mtodo que pede uma pessoa como parmetro.

  • Polimorfismo - Coero

  • Polimorfismo - Sobrecarga De mtodos: igual Java De operadores: basta sobre-escrever mtodos equivalentes

  • Polimorfismo - Sobrecarga

  • Polimorfismo - ParamtricoTipos genricos a partir de Groovy 1.5

    Exemplo de uso na definio:

    Exemplo de uso na classe:

  • Polimorfismo - Incluso (Herana)

    Igual Java; Amarrao tardia Sem herana mltipla Permite Ampliaoe Estreitamento Possui ClassesAbstratas e Interfaces Aceita Metaclasses

  • Variveis e Constantes Para definir constantes usada a palavra

    chave final.

    Tudo objeto, por isso todas variveis so armazenadas dinamicamente no monte.

  • Variveis e Constantes

    Utiliza-se do coletor de lixo do Java para finalizar as variveis.

    Possui serializao, que pode ser executada igual em Java, implementando a classe Serializable.

  • Variveis e Constantes

    No permite acesso endereos de memria.

    Acesso memria secundria atravs de objetos de classes, como por exemplo InputStream/OutputStream e Reader/Writer.

  • Closures Um bloco de cdigo reutilizvel delimitado por chaves.

    Semelhante a uma classe interna. Pode ser definido fora de uma classe. Executado somente quando chamado. Agem como mtodos, mas so objetos da classe

    groovy.lang.Closure . Pode conter parmetros.

  • Closures Modifica variveis fora da prpria closure. Invocados pelos mtodos call() ou doCall(), alm de

    poder ser invocado pelo prprio nome.

    Quando possui apenas um parmetro, no necessrio defini-lo, basta usar a palavra reservada it para referenci-lo.

  • Closures

  • Closures

  • Groovy Beans Sintaxe mais simples

    Prioriza redigibilidade

  • ExceesExcees e erros so conhecidos por eventos Throwable.

    Erros geralmente causam a falha de um programa e o seu trmino, j excees podem e devem ser tratadas no programa.

    O throws presente na assinatura de um mtodo no checado pelo compilador, j que no existe diferena entre excees checadas e no-checadas em Groovy.

    So tratadas exatamente como em um programa Java:

    try{

    'moo'.toLong() // gerar uma exceo

    assert false //assegurando que no se deve chegar nesse ponto

    }catch(e){ assert e in NumberFormatException }

  • ConcorrnciaGroovy usa as mesmas facilidades de Java para lidar com a concorrncia e combina-as com threads e closures quando necessrio.

    import java.util.concurrent.atomic.AtomicInteger def counter = new AtomicInteger()synchronized out(message) { println(message)} def th = Thread.start { for( i in 1..8 ) { sleep 30 out "thread loop $i" counter.incrementAndGet() }}

  • Concorrncia

    for( j in 1..4 ) { sleep 50 out "main loop $j counter.incrementAndGet() }th.join()assert counter.get() == 12

    thread loop 1main loop 1thread loop 2thread loop 3main loop 2thread loop 4thread loop 5main loop 3thread loop 6main loop 4thread loop 7thread loop 8

  • Comparativo entre linguagens OO

  • Referncias

    http://groovy.codehaus.org/ Curso de Groovy e Grails ministrado no

    ENUCOMP 2010 http://en.wikipedia.org/wiki/Groovy_

    (programming_language)

    http://groovy.codehaus.org/http://groovy.codehaus.org/