Groovy. Desenvolvimento ágil para plataforma Java. Lucas Mazzega Menegucci Rodolfo Gobbi de Angeli Ricardo Natale



Documentos relacionados
Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Desenvolvimento OO com Java Orientação a objetos básica

Programação de Computadores - I. Profª Beatriz Profº Israel

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Computação II Orientação a Objetos

2 Orientação a objetos na prática

INTRODUÇÃO À LINGUAGEM C++

Java. Marcio de Carvalho Victorino

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

3 Classes e instanciação de objectos (em Java)

Programação por Objectos. Java

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.

insfcanceof new public switch transient while byte continue extends for int null

Algoritmos e Programação

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Linguagem de Programação I. Orientação a Objetos em Java

2. O gerador de código estende DepthFirstAdapter implementando a interpretação que gerará código Jasmin a partir de Smallpascal.

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Fundamentos de Programação II. Introdução à linguagem de programação C++

Introdução a Java. Hélder Nunes

Módulo 06 Desenho de Classes

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio.

JSP - ORIENTADO A OBJETOS

Programando em C++ Histórico da Linguagem C

Começando com Ruby on

Programação Orientada a Objetos C++

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Algoritmos e Programação II. Sobrecarga

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

BC0505 Processamento da Informação

Noções sobre Objetos e Classes

Programação Orientada a Objetos! Java - Fundamentos. Prof. Sérgio Almagro! sergio.ricardo.almagro@gmail.com

A Linguagem Java. Alberto Costa Neto DComp - UFS

Java 2 Standard Edition Como criar classes e objetos

Implementando uma Classe e Criando Objetos a partir dela

9 Comandos condicionais

Sintaxe Básica de Java Parte 1

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos TUDO É UM OBJECTO TUDO É UM OBJECTO ÍNDICE.

Técnicas de Programação II

Análise de Programação

Programação por Objectos. Java

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Groovy & Grails. Arian Pasquali. quarta-feira, 12 de outubro de 11

JavaScript 2.0X X

Algoritmos e programação

Ruby. Simplicidade e produtividade

Java Como Programar, 8/E

Unidade IV: Ponteiros, Referências e Arrays

Análise e Projeto Orientados por Objetos

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Python Intermediário. terça-feira, 4 de agosto de 15

AULA DE JAVA 1 - CONCEITOS BÁSICOS

Faculdade Instituto Educare - FIED Curso: Sistemas de Informação Disciplina: Linguagem de Programação I Prof.: Rhyan Ximenes rxbrito@gmail.

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Relevância e Motivação. Programação Orientada a Objetos Utilizando Java. Qualidade do Software. Objetivos. Cancelamentos.

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

CURSO DE PROGRAMAÇÃO EM JAVA

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Rafael Santos. Instituto Nacional de Pesquisas Espaciais rafael.santos. Rafael Santos - rafael.

Curso Java Starter. 1

Linguagem de Programação I

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

BSI UFRPE Prof. Gustavo Callou

Curso Java Starter. 1

O comando switch. c Professores de ALPRO I 04/2012. Faculdade de Informática PUCRS. ALPRO I (FACIN) O comando switch 04/ / 31

Prof. Jhonatan Fernando

Programação Orientada a Objetos em Java

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Linguagens de. Aula 02. Profa Cristiane Koehler

Introdução a Computação

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso:

Testando e Comparando Valores

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

Programa de Computador que funciona em Rede

Estrutura Condicional em Java

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Algoritmos e Programação 2. Introdução à Programação Orientada a Objetos. Orientação a Objetos. O que é um paradigma de programação?

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Curso. Linguagem Java

César Henrique Bernabé João Mario Silva. Linguagens de Programação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Lição 9 Trabalhando com bibliotecas de classes

Desenvolvimento de aplicações Web. Java Server Pages

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Introdução à Linguagem

Programação Orientada a Objetos (DPADF 0063)

Transcrição:

Groovy Desenvolvimento ágil para plataforma Java Lucas Mazzega Menegucci Rodolfo Gobbi de Angeli Ricardo Natale

Introdução ao Groovy Tudo começou em 29 de Agosto de 2003, com uma publicação no blog de james Strachan, o primeiro artigo sobre o que viria a ser groovy.

O Projeto Groovy Segundo James: Minha idéia inicial é fazer uma linguagem Dinâmica, que seja compilada diretamente em classes Java e que tenha toda a produtividade e elegância encontrada em Ruby e Python

O Projeto Groovy James uniu-se com Bob McWhirter, e juntos, em 2003 fundaram oficialmente o projeto Groovy. Em 2004, fundação do Groovyone; Mais desenvolvedores se uniram ao projeto Entre eles Guillaume Laforge, hoje é o gerente oficial do projeto Groovy e líder do Expert Group que padroniza Groovy.

Groovy Hoje Linguagem com ascenção mais rápida no indice do Tiobe Index; Do limbo para o 38 lugar entre 200 linguagens em 2 anos e meio de vida; Hoje ocupa a 44 posição; http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html 1 lugar entre as linguagens da JVM.

Características do Groovy Linguagem ágil e dinâmica para java; Muitos recursos foram inspirados em linguagens como Ruby e Python; Sintaxe simples, enxuta e similar à linguagem Java; Interpretada pela JVM em tempo de execução; Linguagem de Scripts; Open Source;

Características do Groovy Possui tipagem dinâmica; Possui tipagem forte; Totalmente OO; Não há tipos primitivos; TUDO é objeto; Possui alta legibilidade, redigibilidade e confiabilidade. Meta-Programação; Read eval print loop (REPL).

Compilação e Interpretação l Groovy é semelhante ao java no quesito compilação e interpretação. Primeiramente é escrito um arquivo file.groovy, em seguida é gerado um bytecode que é interpretado pela máquina virtual, assim podemos estabelecer uma relação de igualdade com linguagem java onde o nível bytecode é equivalente entre as linguagens.

Tratamento com a JVM file.java file.groovy bytecode bytecode Máquina Virtual Java

Sintaxe Alguns Imports já implícitos: java.io.* java.lang.* java.math.bigdecimal java.math.biginteger java.net.* java.util.* groovy.lang.* groovy.util.*

Operadores l l Todo operador corresponde a um método:

Operadores Aritméticos: +, -, *, /, %, **,... etc Comparação: >, <, >=,==,!=,<=> etc Atribuição: =,+=, +=, <<, <<=,... etc. Lógicos: &&,,! etc Ternário: a == 2? Dois : Outro Elvis Operator:?: Safe Navigation Operator:?.

Operadores (<=>) Operador de comparação que retorna -1, 0 ou 1 se for menor, igual ou maior que seu argumento. (?:) - Elvis Operator String a; a?:"a variável a é nula" //em Groovy String a; //em Java a!= null? a : "A variável a é nula"; Se a variável não for nula, retorna ela mesma, senão, retorna a String.

(?.) - Safe Navigation Operator Acessa um método ou propriedade se o objeto não for nulo. obj?.facaalgo() //em Groovy //em Java if(obj!= null){ obj.facaalgo(); Operadores

Tipos Diferente do Java, para o groovy tudo é objeto. O groovy não possui tipos primitivos como os de Java. int numeroquepareceprimitivo = 1 Embora a declaração acima seja do tipo primitivo(int), o groovy considera a variável como sendo da classe integer.

Tipos Tipo primitivo byte short int long float double char boolean Tipo Groovy java.lang.byte java.lang.short java.lang.integer java.lang.long java.lang.float java.lang.double java.lang.character java.lang.boolean

Variáveis São objetos das classes das quais foram tipadas; Podem ser tipadas dinamicamente através da palavra def; String str = 'String tipada' def s = 'String dinâmica' Atribuição Múltipla: def (a,b,c) = [2, 4, 6] print a //===> 2

Números Em Groovy, os números são tipados através do seu tamanho: 1.class 1.class.superclass 1000000000.class (100**100).class //java.lang.integer //java.lang.number //java.lang.long //java.math.biginteger Groovy suporta números de tamanhos imensos. Os números da classe BigInteger se restringem apenas à memória e ao processador da máquina.

Números Alguns métodos da classe Number: times(closure closure) 5.times {print 'k' //kkkkk upto(number to, Closure closure) 1.upto 5, {print it //12345 step(number to, Number stepnumber, Closure c) 0.step( 10, 2 ) {print it //2,4,6,8,10

Strings String é um conjunto de caracteres. Strings Groovy são completamente MUTÁVEIS. Pode ser delimitado por aspas 'simples' ou "duplas" Pode ocupar uma ou várias linhas. Pode ser injetada a ela operações, variáveis... Métodos destrutivos e não destrutivos

Strings Strings interpoladas. Permitem adicionar pedaços de código dentro delas. "1 + 1 = ${1+1" // 1 + 1 = 2 Strings como Arrays s = 'Ola sou groovy' s.getat(1) /* l */ s[1] /* l */ s[0,13] /* Oy */ s[8..13] /* groovy */

Strings Brincando com os Operadores s = 'Ola eu sou' s + 'Groovy' /* Ola eu sou Groovy */ s - 'sou' + 'Groovy' /*Ola eu Groovy*/ s = 'k' s * 3 /* kkk */ Obs.: Os operadores são métodos nãodestrutivos.

Strings Outros métodos interessantes: s = 'hello, Groovy' s.capitalize() s.center(15) /*Hello, Groovy*/ /* hello, Groovy */ s.padleft(16, '-') s.padright(16, '-') s.reverse() /*---hello, Groovy*/ /*hello, Groovy---*/ /*yvoorg,olleh*/

Strings Interpolação de valores em Strings; Possível apenas em Strings com aspas duplas. def nome = 'João' print "Olá, ${nome, bem vindo ao curso!" //===>Olá, João, bem vindo ao curso!'

Coleções List - Coleção de objetos; def numeros = [1, 2, 3.5] def string = ["1", '2', "3"] def tudo = [10, "50", """Hello"""] def list = [numeros, string, tudo] list.each{println it //[1, 2, 3.5] //[1, 2, 3] //[10, 50, Hello]

Coleções List - Alguns métodos úteis: def list = [1,2,3,9,5] list.each {print it //123495 list.reverse() //[5,9,3,2,1] list.putat(3,4) //[1,2,3,4,5] list << 6 //[1,2,3,9,5,6] list.pop() //[1,2,3,9,5] list + 10 list - 9 //1,2,3,4,9,5,10 //1,2,3,4,5

Coleções Range Representa um intervalo de valores; def range = (1..4) range.each {print "$it " //1 2 3 4===> 1..4 ('a'..'c').each {print "$it " //a b c ===> a..c for (i in 1..10) {println i

Coleções Map O mesmo que array associativo, dicionários ou hashes; Cada entrada é composta por uma chave e um valor; def frameworks = [groovy: "Grails", ruby: "Rails"] def map = [a:(1..4), 10:"Dez"] print framework.groovy //===>Grails print map.a //===>1..4 print map[10] //===>Dez

Entrada de dados (Teclado) Para receber valores do usuário em Groovy, Pode utilizar-se do seguinte código: System.in.withReader { print "Digite algo: " valor = it.readline() println "Você me disse: ${valor.touppercase()"

Arquivos A leitura e escrita de arquivos no groovy é feita utilizando as bibliotecas do Java : JavaReader, JavaWriter, InputStream e OutputStream. Utiliza-se ainda a classe File, para manipular um arquivo. new File( file.txt ) //construtor que abre o arquivo

Estruturas de Controle O que é verdadeiro em Groovy? Objetos não-nulos; Números diferentes de 0; Strings, GStrings, coleções não-vazias; assert!''; assert!0; assert![]; assert!false; assert!null; assert 'Olá' assert 50 assert [2,'a'] assert true assert new Object() - Método assert é um método para testes unitários. Se retornar algo false, gera uma exceção.

Estruturas de Controle Estruturas de decisão: If else If(10 > 5){ print 'Groovy' else{ print 'Java' Operador condicional -?: def retorno = (1==1)? "Iguais" : "Diferentes"

Estruturas de Controle Switch switch(ling) { case 'Ruby' : println 'Rails' ;break case 'Groovy' : println 'Grails' ;break case 'PHP' : println 'Cake' ;break default : println 'Outra' ;break if(ling.iscase('ruby')) println 'Rails' else if (ling.iscase('groovy')) println 'Grails' else if (ling.iscase('php')) println'cake' else 'Outra'

Estruturas de Controle Switch Em Groovy, o switch suporta vários tipos, e não só chars. switch (10) { case 0 : assert false ;break case 0..9 : assert false ;break case [8,9,11] : assert false ;break case Float : assert false ;break case {it%3 == 0 : assert false ;break case ~/../ : assert true ;break default : assert false ;break

Estruturas de Controle while def list = [1,2,3] while (list) { list.remove(0) assert list == [] while (list.size() < 3) list << list.size()+1 assert list == [1,2,3]

Estruturas de Controle for def store = '' for (String i in 'a'..'c') store += i assert store == 'abc' def j = 0 for (i in 0..10) { j += i print j //55

Exceções O tratamento de exceções é igual ao do Java. A única diferença em termos de exceção é que no Groovy é opcional colocar o throws na assinatura do método, tanto para exceções checadas quanto em não-checadas; Com isso, podemos escolher como e quando tratar essas exceções.

Exceções def mymethod() { 'string'.tolong() def log = [] try { mymethod() catch (Exception e) { log << e.tostring() finally { log << 'finally' log.each{println it

Funções Funções em groovy são blocos de códigos identificados por um nome, e podem ou não receber parâmetros. Semelhante a c e Java, exige { para indicar o início e o fim da função. def func(){ /* Escopo do Código */ Se uma variável local for definida dentro do escopo da função, onde esta variável possui o mesmo nome de uma variável global, a variável local ofusca a global no escopo da função.

Métodos Em Groovy, todo método retorna alguma coisa. Quando nenhum valor é explicitamente mostrado, ele retorna null. O return opcional def hello(nome){ println 'Hello, meu nome é: ${nome' hello('bruno') ou hello 'Bruno' //Hello, meu nome é: Bruno //Hello, meu nome é: Bruno

Métodos Podemos declarar métodos com parâmetros com valores default def soma(a,b = 2){ println a + b soma 2 //4 soma 2,3 //5 Métodos com parâmetros opcionais int sum(a, Object[] optionals){ for(o in optionals) a+=o a sum(1) //1 sum(20, 1, 10, 4) //35

Closures Um bloco de código reutilizável delimitado por chaves. Semelhante a uma classe interna; Podem ser declarados não só dentro das classes Não é executado quando definido, apenas quando for chamado; Apenas agem como métodos, mas são objetos Normais (groovy.lang.closure).

Closures Pode conter parâmetros; Modifica variáveis declaradas fora da closure; Invocados pelo método call(); docall(); ou simplesmente pela seu nome; Se tiver apenas um parâmetro, não é necessário defini-lo, basta usar a palavra reservada it para referenciá-lo.

Closures Closure cloj1 = {println 'Hello, World!' // Sem parâmetro def cloj2 = { obj -> println "Hello, $obj!" // Parâmetro sem tipo definido def cloj3 = {println "Hello, $it!" // Parâmetro acessado pela palavra-chave 'it' cloj2.call('groovy') //===> Hello, Groovy cloj3.docall('groovy') //===> Hello, Groovy cloj3('groovy') //===> Hello, Groovy

Closures Outros exemplos: def soma = { a, b -> print "A soma é: ${a+b" map = ['a':1, 'b':2] map.each{ key, value -> map[key] = value * 2 print map //[a:2, b:4] letras = 'a'..'z' letrasupper=[] letras.collect (letrasupper){it * 2 println letras //[a, b, c, d,...] println letrasupper //[aa, bb, cc,...]

Orientação à Objetos Classes e Objetos Classes é uma estrutura que abstrai coisas do mundo real para o mundo computacional; Define o tipo dos objetos; - Se classes fossem formas de bolo, os objetos seriam os bolos; - Objetos são instancias das classes; Objetos possuem dados em comportamentos; - Os dados são os atributos; - Comportamentos são os métodos;

Orientação à Objetos Classes e Objetos Instanciando uma classe: p = new Pessoa() Para os tipos básicos basta fazer isso: s = "String" i = 50 array = [10,20,60] Ou do modo brutal... i = new Integer(25) s = new String('Sou uma String')

Orientação à Objetos Herança: Classes tem a capacidade de herdar comportamento de outras classes; As classes que provêm os comportamentos herdados são chamadas de super-classes; 1.class 1.class.superclass //java.lang.integer //java.lang.number Para herdar de outras classes usa-se o extends class Integer extends Number {

Orientação à Objetos Herança Múltipla: Uma classe herda de mais de uma classe; Em groovy não existe herança múltipla, assim como não existe em Java; Porém é possível simular herança múltipla utilizando interfaces. Da mesma for a como é utilizada em Java.

Passagem de Parâmetros Tanto Java quanto Groovy possuem passagem unidirecional por cópia para métodos.

Polimorfismo Sobrecarga: Similar a linguagem Java, com a exceção de que em groovy, operadores podem ser sobrecarregados pelo programador. Permite a sobrecarga de operadores apenas redefinindo o método do operador. Aumenta a legibilidade e a redigibilidade, porém aumenta a complexidade da LP.

Meta-Programação MOP - Meta-Object Protocol Mágica da programação; Adicionar comportamento às classes em tempo de execução; Adicionar métodos às classes; Adicionar propriedades; Todas as classes escritas em Groovy herdam de Object e implementam a interface GroovyObject;

Meta-Programação Meta Classes As classes definem o comportamento dos objetos; As meta classes definem o comportamento de certas classes ou de suas instancias; - De certa forma até as classes são objetos... public interface GroovyObject { Object invokemethod(string name, Object args); Object getproperty(string property); void setproperty(string property, Object newvalue); MetaClass getmetaclass(); void setmetaclass(metaclass metaclass);

Meta-Programação Adicionando um método à classe String String.metaClass.digaOla = { lang -> if(lang == 'English') println 'Hello' else if(lang == 'Swedish') println 'Hej' 'Chamando o diga Olá por uma String'.digaOla('Swedish') class Pessoa{ String nome, sobrenome Pessoa.metaClass.getNomeCompleto = { nome + ", " + sobrebome println new Pessoa(nome:'groovy', sobrenome : 'Grails').getNomeCompleto()

Java Bean public class HelloWorld { private String nome; public void setnome(string nome) { this.nome = nome; public String digahello(){ return "Hello " + nome + "."; public static void main(string[] args) { HelloWorld hw = new HelloWorld(); hw.setnome("bruno"); System.out.println(hw.digaHello());

Em groovy public class HelloWorld { private String nome; public void setnome(string nome) { this.nome = nome; public String digahello(){ return "Hello " + nome + "."; public static void main(string[] args) { HelloWorld hw = new HelloWorld(); hw.setnome("bruno"); System.out.println(hw.digaHello());

Groovy Bean Por defaulf as classes são public; Métodos modificadores dos atributos são gerados dinamicamente; Não é necessário criar um método construtor: p = new Pessoa(nome:'Bruno')

Groovy Bean class HelloWorld { String nome String digahello(){ "Hello, ${nome." static void main(args) { Getters e Setters gerados automaticamente Strings Groovy (GString) def hw = new HelloWorld(nome:"Groovy") print hw.digahello() Parâmetro do construtor

Groovy Bean class HelloWorld { def nome Duky Typing Tipagem dinâmica def digahello(){ "Hello, $nome" print new HelloWorld(nome:"Groovy").digaHello() Script Groovy solto/livre

Totalmente em Groovy Closure com parâmetro class HelloWorld { def digahello = {nome-> "Hello ${nome" print new HelloWorld().digaHello.call("Bruno") Chamada da Closure Em todos esses exemplos têm o mesmo resultado: >>Hello, Bruno

Java vs Groovy public class HelloWorld { private String nome; public void setnome(string nome) { this.nome = nome; public String digahello(){ return "Hello " + nome + "."; public static void main(string[] args) { HelloWorld hw = new HelloWorld(); hw.setnome("bruno"); System.out.println(hw.digaHello()); Em java: 18 linhas Em Groovy: 4 linhas class HelloWorld { def digahello = {nome-> "Hello ${nome" print new HelloWorld().digaHello.call("Bruno")

Avaliação da LP Legibilidade: Apesar de manter a prioridade na redigibilidade, groovy tenta manter uma alta legibilidade. Redigibilidade: Groovy prioriza a redigibilidade de forma que não comprometa a legibilidade; Tipagem dinâmica; Closures.

Avaliação da LP Confiabilidade: Tratamento de exceções; Tipagem dinâmica; Tipagem Forte. Reusabilidade. Portabilidade.

Referências Groovy in Action; Introduction to Groovy and Grails Mohamed Seifeddine Getting Started Guide http://groovy.codehaus.org/getting+started+guide Em Busca do Grails Fernando Anselmo Groovy Documentation Oficial docs Básico do Groovy para quem for aprender Grails http://www.itexto.net/devkico/?p=231

Referências Um pouco de Groovy Artigo Dev-Media - Java Magazine - Marcelo Castellani Slide curso_ruby do ENUCOMP 2008 Regis Pires Magalhães