SlideShare uma empresa Scribd logo
A evolução da linguagem
VIII Simpósio de Informática do IFNMG Januária
Prof. Ms. Petrônio Cândido
Agenda
● Por quê Java?
● História e evolução da linguagem Java
● Novas funcionalidades do Java 8
● O mercado atual
● Perspectivas futuras: Java 9
Por quê Java?
Por que sim não é resposta!
Por que Java???
● Compilada em Código Intermediário (bytecode)
○ Alta portabilidade: write once, run everywhere!
● Alto Nível
● Propósito Geral
● Orientada à Objetos
● Tipagem Forte e Estática
Outros fatores
● Grande comunidade de desenvolvedores
● Ecossistema de frameworks, API’s, etc.
● Adoção da Indústria:
Outros fatores
Criticas
● Rígida
● Burocrática
● Conservadora
Criticas
● Produtividade
○ Mais funcionalidade, menos código
○ Economia de tempo
● Expressividade
○ Quantas linhas são necessárias para desenvolver
uma funcionalidade simples?
○ Verborragia
Java 8 - A Evolução da Linguagem
Ninguém tem mais mercado!
Ninguém tem mais mercado!
WEB
MOBILE
DESKTOP
ENTERPRISE
DADOS
SERVIDORES
JSP JSF JavaFX
JME Android JavaFX
JavaFXSwing
EJB
Hibernate JPA JDBC
Tomcat JBoss Glassfish
TV DIGITAL Ginga
Spring
VRaptor
História do Java
E como chegamos a este ponto...
Evolução da Linguagem Java
● 1992 - 1994 - Primórdios do Java
○ Proprietária: Sun Microsystems
○ Oak
Evolução da Linguagem Java
● 1995 - Java 1.0
○ Orientada a Objetos
○ AWT - Abstract Window Toolkit - Desktop
○ Applets - Web
○ Python 1.0
Processo de Compilação/Execução
javac.exe
Arquivo.java
Arquivo.class java.exe
Compilador Java
Java Virtual Machine
Interpretador de bytecode
bytecode
Arquivo fonte
Como era o Java original ?
● Orientação à Objetos PURA!
○ TUDO tem que estar dentro de uma classe;
○ TODA classe tem que estar dentro de um arquivo
com o seu nome;
Como era o Java original ?
● Orientação à Objetos PURA!
○ Herança Simples
○ Polimorfismo
○ Encapsulamento
○ Interfaces
○ Classes Abstratas
○ Atributos e Métodos Estáticos
○ Pacotes
○ Modificadores de Visibilidade
Classes
Pessoa.java
public class Pessoa {
private String nome;
public String getNome() { return nome; }
public void setNome(String n) { this.nome = n; }
}
Professor.java
public class Professor extends Pessoa {
private String siape;
public String getSiape() { return siape; }
public void setSiape(String n) { this.siape = n; }
}
Como era o Java original ?
● Threads - Processos Leves
● Tratamento de Exceções
Interface
● Especifica um conjunto de métodos mas não
os implementa;
● É um “contrato” a ser seguido por outras
classes;
Interface
Imprimivel.java
public interface Imprimivel {
void Imprime();
}
Pessoa.java
public class Pessoa implements Imprimivel {
public void Imprime() {
System.out.println(“Teste”);
}
}
Evolução da Linguagem Java
● 1997 - Java 1.1
○ Inner Classes
○ JDBC - Java Database Conectivity - BD
○ RMI - Remote Method Invocation - Sist. Distribuídos
○ Reflexão
○ Servlet 1.0 - Web
○ NetBeans 1.0 - IDE
Evolução da Linguagem Java
● A reflexão computacional permite a
invocação dinâmica de classes
○ Estático (em tempo de compilação) x Dinâmico (em
tempo de execução)
○ Carregar na memória
○ Inspecionar atributos e métodos
○ Invocar métodos
Inner Class - Classe Interna
● Uma classe declarada dentro de outra
classe;
● Uma classe auxiliar que só será utilizada
dentro de outra classe;
public class Externa {
class Interna { … }
}
Local Class - Classe Local
● Uma classe declarada dentro de um
método, como uma variável local;
● A classe só será utilizada dentro desse
método;
Classe Anônima
● É uma classe interna e sem nome, definida e
instanciada em uma única expressão;
● Utilizado quando:
○ Criar uma implementação de uma interface ou uma
classe filha que vai ser utilizada uma única vez;
○ Corpo da classe é muito curto;
Classe Anônima
Button btn = new Button();
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
Evolução da Linguagem Java
● 1998 - Java 2 ( versão 1.2 )
○ Criado o JCP - Java Community Process
○ Collections - List, Array, Hash, ...
○ SWING - Desktop
○ J2SE - Java 2 Standard Edition
○ J2EE - Java 2 Enterprise Edition
■ EJB - Enterprise JavaBean
○ J2ME - Java 2 Micro Edition - Mobile
JCP - Java Community Process
● https://www.jcp.org/
● JSR - Java Specification Request
(Darcy, 2014)
Evolução da Linguagem Java
● 1999 - Java 2 ( versão 1.3 )
○ Código fonte do Java 2 é aberto
○ JSP - Java Server Pages - Web
○ NetBeans 3
○ Apache Tomcat 3.0 - Servidor Aplicações Java
○ JBoss - Servidor Aplicações Java e Java EE
Evolução da Linguagem Java
● 2000 - Java 2 ( versão 1.3 )
○ JNDI - Java Naming and Directory Interface
○ Suporte ao CORBA no RMI
○ J2ME dá um salto
○ Python 2.0
● 2001
○ Hibernate 1.0
○ AspectJ
Evolução da Linguagem Java
● 2002 - Java 2 ( versão 1.4 )
○ Java Web Start
○ Microsoft copia o Java: .Net Framework 1.0
■ E inova: C#
Evolução da Linguagem Java
● 2003 - Java 2 ( versão 1.4 )
○ Hibernate 2.0
○ .Net Framework 1.1
● 2004 - Java 2 ( versão 1.4 )
○ NetBeans 4
○ JSF - Java Server Faces 1.0 - Web
○ Criação da Eclipse Foundation
Evolução da Linguagem Java
● 2005 - Java 2 ( versão 1.5)
○ Glassfish 1.0 - Servidor de Apli. Web e Java EE
○ Hibernate 3.0
○ .Net Framework 2.0
Evolução da Linguagem Java
● 2005 - Java 2 ( versão 1.5)
○ Correndo atrás do C#:
■ Generics
■ Annotations
■ Enums
Evolução da Linguagem Java
● Generics - Tipos Genéricos
○ Tipos genéricos nos permitem criar classes com
atributos cujo tipo só será conhecido no nomento da
instanciação ou da herança;
○ Uma única declaração cria toda uma família de
classes parametrizáveis
Evolução da Linguagem Java
public class Ponto {
private int x, y;
public Ponto(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() { return x; }
public int getY() { return y; }
}
Evolução da Linguagem Java
public class Ponto<T> {
private T x, y;
public Ponto(T x, T y) {
this.x = x;
this.y = y;
}
public T getX() { return x; }
public T getY() { return y; }
}
Evolução da Linguagem Java
Ponto<Integer> pontoi = new Ponto<Integer>(1, 2);
Ponto<Float> pontof = new Ponto<Float>(1.1, 2.75);
Ponto<Double> pontod = new Ponto<Double>(1.1, 2.75);
Ponto<Long> pontol = new Ponto<Long>(1, 2);
Evolução da Linguagem Java
● Metadados - Annotations
○ Permite colocar metadados (i.e. anotações) em
classes, objetos, tipos e métodos que
posteriormente podem ser recuperados via
Reflexão.
○ Ajuda a “injetar” comportamentos, sem ter que
invocá-los explicitamente!
○ @Annotation
@NotNull
String nome;
@Null
String descricao;
@Max(100)
int idade;
@Size(min=2, max=240)
String endereco;
@Past
Date aniversario;
Evolução da Linguagem Java
Evolução da Linguagem Java
● Enums - Enumerações
○ Enumerações nos ajudam a criar objetos de valor
○ São classes modificadas cujos objetos só podem
assumir um conjunto finitido de constantes;
public enum Sexo {
Masculino,
Feminino
}
Evolução da Linguagem Java
● 2006 - Java 6 ( versão 1.6)
○ NetBeans 5.0
○ A maior parte da linguagem e posta como Software
Livre
○ JSF 1.2
○ JPA - Java Persistence API 1.0
■ Padronização a partir do Hibernate
Evolução da Linguagem Java
● 2007 - Java 6 ( versão 1.6)
○ NetBeans 6.0
○ .Net Framework 3.5
■ Extensão Funcionais
■ LINQ - Language Integrated Query
■ Suporte a linguagens dinâmicas
Evolução da Linguagem Java
● 2008 - Java 6 ( versão 1.6)
○ JavaFX 1.0 - Desenvolvimento multi-interface
○ Android 1.0
○ Python 3.0
Evolução da Linguagem Java
● 2009
○ A Oracle compra a Sun
○ JSF 2.0
○ Android 2.0
○ JPA 2.0
● 2010
○ Android 2.2
○ Hibernate 3.0 se torna um JPA 2.0 Provider
○ .Net Framework 4.0
Evolução da Linguagem Java
● 2011 - Java 7 ( versão 1.7 )
○ NetBeans 7.0
○ Suporte a linguagens dinâmicas
○ JVM multi-linguagem
○ JSF 2.1
○ Android 2.3 / 4.0
○ Hibernate 4.0
Evolução da Linguagem Java
● 2011 - Java 7 ( versão 1.7 )
○ Constantes string no switch
○ Catch multi classe
Java 8
E como chegamos a este ponto...
Evolução da Linguagem Java
● A versão 8 introduz na linguagem Java o
Paradigma Funcional;
● O Paradigma Funcional permite que funções
possam ser tratadas como variáveis,
parâmetros de outras funções ou mesmo
valor de retorno!
Evolução da Linguagem Java
● Por que Java demorou tanto?
○ Manter compatibilidade com as versões anteriores;
■ Códigos legados...
○ Processo democrático de aprovação das JSRs
Default Methods
Métodos dentro de uma interface que já vêm
com uma implementação padrão
public interface Teste {
void metodo1();
void metodo2();
default void metodo3() { implementação; }
}
Interfaces Funcionais
● É qualquer interface que tenha apenas um
método.
● Sempre que eu precisar de usar essa
interface o compilador sabe exatamente
qual método deve chamar!
● O pacote java.util.function já tem um monte
de interfaces funcionais úteis!
Interfaces Funcionais
● java.util.function
Interface Descrição
Consumer<T> Aceita um parâmetro do tipo T e não produz nenhum retorno
Function<T,R> Aceita um parâmetro do tipo T e produz um retorno do tipo R
Predicate<T> Representa um predicado, ou seja, uma função que aceita um parâmetro do tipo T
e retorna um booleano
Supplier<T> Representa uma função que não tem parâmetros e produz um retorno do tipo T
UnaryOperator<T> Representa um operador unário, que aceita um parâmetro do tipo T e retorna um
valor do tipo T
Interfaces Funcionais
● java.util.function
Interface Descrição
Consumer<T> void consumer(T par);
Function<T,R> R function(T par);
Predicate<T> boolean predicate(T par)
Supplier<T> T supplier()
UnaryOperator<T> T unaryoperator(T par)
Interfaces Funcionais
● Outras
Interface Descrição
Comparer<T> Aceita duas entradas do tipo T retorna um inteiro (-1, 0, 1)
Runnable Executa um método sem entrada e nem valor de retorno
Expresões Lambda
● Cria um método anônimo:
(parâmetros) -> função
() -> System.out.println(“Teste”)
(a,b) -> a + b;
(a,b) -> a > b;
Expresões Lambda
● Nos permitem criar variáveis que
armazenam funções!
Interface var = (parametros) -> função
var(parametros);
Predicate<Pessoa> maior = p -> p.getIdade() >= 18;
Method References
Retornam um ponteiro para um método:
Referência para um método estático Classe::metodoEstatica
Referência para um método de instância objeto::metodoInstancia
Contrutor Classe::new
Collections
● A nova API de coleções e fortemente
influenciada pela LINQ do .Net
● Com ela podemos fazer operações
complexas em coleções de objetos na
memoria de forma simples e intuitiva;
● Ela faz uso das expressões lambda e
method references;
Collections
● Objetivo
○ Simplificar os algoritmos que trabalham com muitos
dados em memória;
○ Permitir a execução paralela de processamento de
dados com facilidade;
Collections
● Coleção de objetos
● Computada na construção
○ Estrutura de dados na memória
● Tamanho finito
Collections
List<Integer> inteiros = new ArrayList<>();
for(int i = 0; i < 10; i++)
inteiros.add(i);
for(Integer i : inteiros){
if(i % 2 == 0) {
System.out.println(i);
}
}
Streams
● É uma coleção de objetos
● Computada a cada iteração
● Tamanho infinito
Streams
Stream<Integer> inteiros = Stream.iterate(0, i <- i + 1).limit(10);
inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
Streams
● Parallel Streams
○ Divide o processamento em várias threads
○ collection.parallelStream();
Streams
Stream<Integer> inteiros = Stream.iterate(0, i <- i + 1). parallel() .limit(10);
inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
Collections - Funções Intermediárias
Método Descrição
filter(Predicate) Seleciona itens da stream cujo predicato retorna verdadeiro
map(Function) Aplica a Function em todos os elementos da Stream. O retorno da
função forma os novos elementos da Stream
sorted(Comparator) Ordena os elementos da Stream de acordo com o Comparator
sorted() Ordena os elementos da Stream de acordo (se forem numéricos
peek(Consumer) Executa uma função para cada elemento da Stream
distinct() Retira todos os elementos duplicados da Stream
limit(n) Seleciona os primeiros n elementos Stream
skip(n) Elimina os primeiros n elementos da Stream
Collections - Funções Finais
Método Descrição
toArray() Cria uma vetor com os elementos da Stream
toList() Cria uma lista com os elementos da Stream
forEach(Consumer) Aplica a função Consumer em cada elemento da Stream
collect(Collector) elemento da Stream
reduce(BinaryOperator) elemento da Stream
min(Comparator) Retorna o menor elemento (de acordo com o Comparator) da Stream
max(Comparator) Retorna o maior elemento (de acordo com o Comparator) da Stream
count() Retorna o número de elementos da Stream
Collections - Funções Finais
Método Descrição
anyMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para
algum elemento da Stream
allMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para
todos os elementos da Stream
noneMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for falsa para todos os
elementos da Stream
ifPresent(Consumer)
findAny()
findFirst()
Exemplos
List<Pessoa> pessoas = new List<>();
....
pessoas
.filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18)
.peek(System.out::println)
.sorted(Comparator.comparing(Pessoa::getNome))
.map(Pessoa::getNome())
.collect(toList());
Exemplos
int media = pessoas
.filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18)
.mapToInt(Pessoa::getIdade())
.average();
int total = pessoas
.mapToInt(Pessoa::getIdade())
.reduce(0, (a,b) -> a + b);
Mercado e
Perspectivas
Futuras
Evolução da Linguagem Java
● 2016 (expectativa) - Java 9
○ Código fonte modular
○ JSON API leve
○ Cliente HTTP2
○ Otimizações no compilador
Principais Concorrentes
● C# / .Net
● Python
● Ruby
Dúvidas???
Obrigado!!!
Referências
DARCY, Joseph D. Joseph D. Darcy's Oracle Weblog: A Pictorial View of a JSR Progressing through the
JCP. Disponível em <https://blogs.oracle.com/darcy/entry/pictorial_jcp>. Acesso em 20/10/2014.
NETBEANS.ORG. A brief history of netbeans. Disponível em <https://netbeans.org/about/history.html>.
Acesso em 10/10/2014.
ORACLE. Collections Framework Enhancements in Java SE 8. Disponível em <http://docs.oracle.
com/javase/8/docs/technotes/guides/collections/changes8.html > . Disponível em
ORACLE. Java Timeline. Disponível em <http://oracle.com.edgesuite.net/timeline/java/>. Acesso em
06/10/2014.
ORACLE. Lambda Expressions. Disponível em <http://docs.oracle.
com/javase/tutorial/java/javaOO/lambdaexpressions.html>. Acesso em 22/10/2014.
ORACLE. Default Methods. Disponível em <http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.
html >. acesso em 19/10/2014.
ORACLE. Method References. Disponível em <http://docs.oracle.
com/javase/tutorial/java/javaOO/methodreferences.html >. Disponível em 19/10/2014.
Referências
TIOBE. TIOBE index for October 2014. Disponível em <http://www.tiobe.com/index.
php/content/paperinfo/tpci/index.html >. Acesso em 22/10/2014.

Mais conteúdo relacionado

Mais procurados

Introdução à sistemas distribuídos
Introdução à sistemas distribuídosIntrodução à sistemas distribuídos
Introdução à sistemas distribuídos
Faculdade Mater Christi
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
Frederico Madeira
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
Daniel Brandão
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores Paralelos
Elaine Cecília Gatto
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
Moises Omena
 
Internet 7º Ano
Internet 7º AnoInternet 7º Ano
Internet 7º Ano
henriquecorreiosapo
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
Daniel Fernandes Costa
 
Componentes do Sistema operacional
Componentes do Sistema operacional Componentes do Sistema operacional
Componentes do Sistema operacional
Rodrigo Rodrigues
 
Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidor
Sandu Postolachi
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
fabiocerqueira
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
César Augusto Pessôa
 
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Leinylson Fontinele
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
Elaine Cecília Gatto
 
12 SQL - Junções / Join
12 SQL - Junções / Join12 SQL - Junções / Join
12 SQL - Junções / Join
Centro Paula Souza
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
Alex Camargo
 
Endereçamento de memória
Endereçamento de memóriaEndereçamento de memória
Endereçamento de memória
Elaine Cecília Gatto
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
Gercélia Ramos
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
Giancarlo Silva
 
Aula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - ProcessosAula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - Processos
Messias Batista
 

Mais procurados (20)

Introdução à sistemas distribuídos
Introdução à sistemas distribuídosIntrodução à sistemas distribuídos
Introdução à sistemas distribuídos
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores Paralelos
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Internet 7º Ano
Internet 7º AnoInternet 7º Ano
Internet 7º Ano
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Componentes do Sistema operacional
Componentes do Sistema operacional Componentes do Sistema operacional
Componentes do Sistema operacional
 
Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidor
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
12 SQL - Junções / Join
12 SQL - Junções / Join12 SQL - Junções / Join
12 SQL - Junções / Join
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
 
Endereçamento de memória
Endereçamento de memóriaEndereçamento de memória
Endereçamento de memória
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Aula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - ProcessosAula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - Processos
 

Semelhante a Java 8 - A Evolução da Linguagem

Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
jesuinoPower
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Rodrigo Cândido da Silva
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
Otávio Santana
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
Rafael Benevides
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
Elenilson Vieira
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
Raphael Marques
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
Paloma Costa
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
Rafael Chaves
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
Rafael Pinheiro
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
Álvaro Farias Pinheiro
 
Java 8 e futuro
Java 8 e futuroJava 8 e futuro
Java 8 e futuro
Thiago Gonzaga
 
Java pode ser_hipster
Java pode ser_hipsterJava pode ser_hipster
Java pode ser_hipster
Antonio Lazaro Carvalho Borges
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
jesuinoPower
 
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMIJava OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
Yitzhak Stone
 
Java em 2021
Java em 2021Java em 2021
Java em 2021
Sandro Giacomozzi
 
Java1
Java1Java1
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
Escola Básica e Secundária da Povoação
 
Mc1 JAVA
Mc1 JAVAMc1 JAVA
Java Seminar
Java SeminarJava Seminar
Java Seminar
armeniocardoso
 

Semelhante a Java 8 - A Evolução da Linguagem (20)

Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Java 8 e futuro
Java 8 e futuroJava 8 e futuro
Java 8 e futuro
 
Java pode ser_hipster
Java pode ser_hipsterJava pode ser_hipster
Java pode ser_hipster
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMIJava OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
 
Java em 2021
Java em 2021Java em 2021
Java em 2021
 
Java1
Java1Java1
Java1
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
Mc1 JAVA
Mc1 JAVAMc1 JAVA
Mc1 JAVA
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 

Mais de Petronio Candido

Licenças de software livre
Licenças de software livreLicenças de software livre
Licenças de software livre
Petronio Candido
 
Big Data e Data Science: admirável mundo novo - IV SIC IFNMG
Big Data e Data Science: admirável mundo novo - IV SIC IFNMGBig Data e Data Science: admirável mundo novo - IV SIC IFNMG
Big Data e Data Science: admirável mundo novo - IV SIC IFNMG
Petronio Candido
 
Minicurso de estatística experimental com o R - III SIC IFNMG
Minicurso de estatística experimental com o R  - III SIC IFNMGMinicurso de estatística experimental com o R  - III SIC IFNMG
Minicurso de estatística experimental com o R - III SIC IFNMG
Petronio Candido
 
ARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MGARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MG
Petronio Candido
 
Business Analytics
Business AnalyticsBusiness Analytics
Business Analytics
Petronio Candido
 
Novas Tendências Em TI
Novas Tendências Em TINovas Tendências Em TI
Novas Tendências Em TI
Petronio Candido
 

Mais de Petronio Candido (6)

Licenças de software livre
Licenças de software livreLicenças de software livre
Licenças de software livre
 
Big Data e Data Science: admirável mundo novo - IV SIC IFNMG
Big Data e Data Science: admirável mundo novo - IV SIC IFNMGBig Data e Data Science: admirável mundo novo - IV SIC IFNMG
Big Data e Data Science: admirável mundo novo - IV SIC IFNMG
 
Minicurso de estatística experimental com o R - III SIC IFNMG
Minicurso de estatística experimental com o R  - III SIC IFNMGMinicurso de estatística experimental com o R  - III SIC IFNMG
Minicurso de estatística experimental com o R - III SIC IFNMG
 
ARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MGARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MG
 
Business Analytics
Business AnalyticsBusiness Analytics
Business Analytics
 
Novas Tendências Em TI
Novas Tendências Em TINovas Tendências Em TI
Novas Tendências Em TI
 

Java 8 - A Evolução da Linguagem

  • 1. A evolução da linguagem VIII Simpósio de Informática do IFNMG Januária Prof. Ms. Petrônio Cândido
  • 2. Agenda ● Por quê Java? ● História e evolução da linguagem Java ● Novas funcionalidades do Java 8 ● O mercado atual ● Perspectivas futuras: Java 9
  • 3. Por quê Java? Por que sim não é resposta!
  • 4. Por que Java??? ● Compilada em Código Intermediário (bytecode) ○ Alta portabilidade: write once, run everywhere! ● Alto Nível ● Propósito Geral ● Orientada à Objetos ● Tipagem Forte e Estática
  • 5. Outros fatores ● Grande comunidade de desenvolvedores ● Ecossistema de frameworks, API’s, etc. ● Adoção da Indústria:
  • 8. Criticas ● Produtividade ○ Mais funcionalidade, menos código ○ Economia de tempo ● Expressividade ○ Quantas linhas são necessárias para desenvolver uma funcionalidade simples? ○ Verborragia
  • 10. Ninguém tem mais mercado!
  • 11. Ninguém tem mais mercado! WEB MOBILE DESKTOP ENTERPRISE DADOS SERVIDORES JSP JSF JavaFX JME Android JavaFX JavaFXSwing EJB Hibernate JPA JDBC Tomcat JBoss Glassfish TV DIGITAL Ginga Spring VRaptor
  • 12. História do Java E como chegamos a este ponto...
  • 13. Evolução da Linguagem Java ● 1992 - 1994 - Primórdios do Java ○ Proprietária: Sun Microsystems ○ Oak
  • 14. Evolução da Linguagem Java ● 1995 - Java 1.0 ○ Orientada a Objetos ○ AWT - Abstract Window Toolkit - Desktop ○ Applets - Web ○ Python 1.0
  • 15. Processo de Compilação/Execução javac.exe Arquivo.java Arquivo.class java.exe Compilador Java Java Virtual Machine Interpretador de bytecode bytecode Arquivo fonte
  • 16. Como era o Java original ? ● Orientação à Objetos PURA! ○ TUDO tem que estar dentro de uma classe; ○ TODA classe tem que estar dentro de um arquivo com o seu nome;
  • 17. Como era o Java original ? ● Orientação à Objetos PURA! ○ Herança Simples ○ Polimorfismo ○ Encapsulamento ○ Interfaces ○ Classes Abstratas ○ Atributos e Métodos Estáticos ○ Pacotes ○ Modificadores de Visibilidade
  • 18. Classes Pessoa.java public class Pessoa { private String nome; public String getNome() { return nome; } public void setNome(String n) { this.nome = n; } } Professor.java public class Professor extends Pessoa { private String siape; public String getSiape() { return siape; } public void setSiape(String n) { this.siape = n; } }
  • 19. Como era o Java original ? ● Threads - Processos Leves ● Tratamento de Exceções
  • 20. Interface ● Especifica um conjunto de métodos mas não os implementa; ● É um “contrato” a ser seguido por outras classes;
  • 21. Interface Imprimivel.java public interface Imprimivel { void Imprime(); } Pessoa.java public class Pessoa implements Imprimivel { public void Imprime() { System.out.println(“Teste”); } }
  • 22. Evolução da Linguagem Java ● 1997 - Java 1.1 ○ Inner Classes ○ JDBC - Java Database Conectivity - BD ○ RMI - Remote Method Invocation - Sist. Distribuídos ○ Reflexão ○ Servlet 1.0 - Web ○ NetBeans 1.0 - IDE
  • 23. Evolução da Linguagem Java ● A reflexão computacional permite a invocação dinâmica de classes ○ Estático (em tempo de compilação) x Dinâmico (em tempo de execução) ○ Carregar na memória ○ Inspecionar atributos e métodos ○ Invocar métodos
  • 24. Inner Class - Classe Interna ● Uma classe declarada dentro de outra classe; ● Uma classe auxiliar que só será utilizada dentro de outra classe; public class Externa { class Interna { … } }
  • 25. Local Class - Classe Local ● Uma classe declarada dentro de um método, como uma variável local; ● A classe só será utilizada dentro desse método;
  • 26. Classe Anônima ● É uma classe interna e sem nome, definida e instanciada em uma única expressão; ● Utilizado quando: ○ Criar uma implementação de uma interface ou uma classe filha que vai ser utilizada uma única vez; ○ Corpo da classe é muito curto;
  • 27. Classe Anônima Button btn = new Button(); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } });
  • 28. Evolução da Linguagem Java ● 1998 - Java 2 ( versão 1.2 ) ○ Criado o JCP - Java Community Process ○ Collections - List, Array, Hash, ... ○ SWING - Desktop ○ J2SE - Java 2 Standard Edition ○ J2EE - Java 2 Enterprise Edition ■ EJB - Enterprise JavaBean ○ J2ME - Java 2 Micro Edition - Mobile
  • 29. JCP - Java Community Process ● https://www.jcp.org/ ● JSR - Java Specification Request (Darcy, 2014)
  • 30. Evolução da Linguagem Java ● 1999 - Java 2 ( versão 1.3 ) ○ Código fonte do Java 2 é aberto ○ JSP - Java Server Pages - Web ○ NetBeans 3 ○ Apache Tomcat 3.0 - Servidor Aplicações Java ○ JBoss - Servidor Aplicações Java e Java EE
  • 31. Evolução da Linguagem Java ● 2000 - Java 2 ( versão 1.3 ) ○ JNDI - Java Naming and Directory Interface ○ Suporte ao CORBA no RMI ○ J2ME dá um salto ○ Python 2.0 ● 2001 ○ Hibernate 1.0 ○ AspectJ
  • 32. Evolução da Linguagem Java ● 2002 - Java 2 ( versão 1.4 ) ○ Java Web Start ○ Microsoft copia o Java: .Net Framework 1.0 ■ E inova: C#
  • 33. Evolução da Linguagem Java ● 2003 - Java 2 ( versão 1.4 ) ○ Hibernate 2.0 ○ .Net Framework 1.1 ● 2004 - Java 2 ( versão 1.4 ) ○ NetBeans 4 ○ JSF - Java Server Faces 1.0 - Web ○ Criação da Eclipse Foundation
  • 34. Evolução da Linguagem Java ● 2005 - Java 2 ( versão 1.5) ○ Glassfish 1.0 - Servidor de Apli. Web e Java EE ○ Hibernate 3.0 ○ .Net Framework 2.0
  • 35. Evolução da Linguagem Java ● 2005 - Java 2 ( versão 1.5) ○ Correndo atrás do C#: ■ Generics ■ Annotations ■ Enums
  • 36. Evolução da Linguagem Java ● Generics - Tipos Genéricos ○ Tipos genéricos nos permitem criar classes com atributos cujo tipo só será conhecido no nomento da instanciação ou da herança; ○ Uma única declaração cria toda uma família de classes parametrizáveis
  • 37. Evolução da Linguagem Java public class Ponto { private int x, y; public Ponto(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } }
  • 38. Evolução da Linguagem Java public class Ponto<T> { private T x, y; public Ponto(T x, T y) { this.x = x; this.y = y; } public T getX() { return x; } public T getY() { return y; } }
  • 39. Evolução da Linguagem Java Ponto<Integer> pontoi = new Ponto<Integer>(1, 2); Ponto<Float> pontof = new Ponto<Float>(1.1, 2.75); Ponto<Double> pontod = new Ponto<Double>(1.1, 2.75); Ponto<Long> pontol = new Ponto<Long>(1, 2);
  • 40. Evolução da Linguagem Java ● Metadados - Annotations ○ Permite colocar metadados (i.e. anotações) em classes, objetos, tipos e métodos que posteriormente podem ser recuperados via Reflexão. ○ Ajuda a “injetar” comportamentos, sem ter que invocá-los explicitamente! ○ @Annotation
  • 41. @NotNull String nome; @Null String descricao; @Max(100) int idade; @Size(min=2, max=240) String endereco; @Past Date aniversario; Evolução da Linguagem Java
  • 42. Evolução da Linguagem Java ● Enums - Enumerações ○ Enumerações nos ajudam a criar objetos de valor ○ São classes modificadas cujos objetos só podem assumir um conjunto finitido de constantes; public enum Sexo { Masculino, Feminino }
  • 43. Evolução da Linguagem Java ● 2006 - Java 6 ( versão 1.6) ○ NetBeans 5.0 ○ A maior parte da linguagem e posta como Software Livre ○ JSF 1.2 ○ JPA - Java Persistence API 1.0 ■ Padronização a partir do Hibernate
  • 44. Evolução da Linguagem Java ● 2007 - Java 6 ( versão 1.6) ○ NetBeans 6.0 ○ .Net Framework 3.5 ■ Extensão Funcionais ■ LINQ - Language Integrated Query ■ Suporte a linguagens dinâmicas
  • 45. Evolução da Linguagem Java ● 2008 - Java 6 ( versão 1.6) ○ JavaFX 1.0 - Desenvolvimento multi-interface ○ Android 1.0 ○ Python 3.0
  • 46. Evolução da Linguagem Java ● 2009 ○ A Oracle compra a Sun ○ JSF 2.0 ○ Android 2.0 ○ JPA 2.0 ● 2010 ○ Android 2.2 ○ Hibernate 3.0 se torna um JPA 2.0 Provider ○ .Net Framework 4.0
  • 47. Evolução da Linguagem Java ● 2011 - Java 7 ( versão 1.7 ) ○ NetBeans 7.0 ○ Suporte a linguagens dinâmicas ○ JVM multi-linguagem ○ JSF 2.1 ○ Android 2.3 / 4.0 ○ Hibernate 4.0
  • 48. Evolução da Linguagem Java ● 2011 - Java 7 ( versão 1.7 ) ○ Constantes string no switch ○ Catch multi classe
  • 49. Java 8 E como chegamos a este ponto...
  • 50. Evolução da Linguagem Java ● A versão 8 introduz na linguagem Java o Paradigma Funcional; ● O Paradigma Funcional permite que funções possam ser tratadas como variáveis, parâmetros de outras funções ou mesmo valor de retorno!
  • 51. Evolução da Linguagem Java ● Por que Java demorou tanto? ○ Manter compatibilidade com as versões anteriores; ■ Códigos legados... ○ Processo democrático de aprovação das JSRs
  • 52. Default Methods Métodos dentro de uma interface que já vêm com uma implementação padrão public interface Teste { void metodo1(); void metodo2(); default void metodo3() { implementação; } }
  • 53. Interfaces Funcionais ● É qualquer interface que tenha apenas um método. ● Sempre que eu precisar de usar essa interface o compilador sabe exatamente qual método deve chamar! ● O pacote java.util.function já tem um monte de interfaces funcionais úteis!
  • 54. Interfaces Funcionais ● java.util.function Interface Descrição Consumer<T> Aceita um parâmetro do tipo T e não produz nenhum retorno Function<T,R> Aceita um parâmetro do tipo T e produz um retorno do tipo R Predicate<T> Representa um predicado, ou seja, uma função que aceita um parâmetro do tipo T e retorna um booleano Supplier<T> Representa uma função que não tem parâmetros e produz um retorno do tipo T UnaryOperator<T> Representa um operador unário, que aceita um parâmetro do tipo T e retorna um valor do tipo T
  • 55. Interfaces Funcionais ● java.util.function Interface Descrição Consumer<T> void consumer(T par); Function<T,R> R function(T par); Predicate<T> boolean predicate(T par) Supplier<T> T supplier() UnaryOperator<T> T unaryoperator(T par)
  • 56. Interfaces Funcionais ● Outras Interface Descrição Comparer<T> Aceita duas entradas do tipo T retorna um inteiro (-1, 0, 1) Runnable Executa um método sem entrada e nem valor de retorno
  • 57. Expresões Lambda ● Cria um método anônimo: (parâmetros) -> função () -> System.out.println(“Teste”) (a,b) -> a + b; (a,b) -> a > b;
  • 58. Expresões Lambda ● Nos permitem criar variáveis que armazenam funções! Interface var = (parametros) -> função var(parametros); Predicate<Pessoa> maior = p -> p.getIdade() >= 18;
  • 59. Method References Retornam um ponteiro para um método: Referência para um método estático Classe::metodoEstatica Referência para um método de instância objeto::metodoInstancia Contrutor Classe::new
  • 60. Collections ● A nova API de coleções e fortemente influenciada pela LINQ do .Net ● Com ela podemos fazer operações complexas em coleções de objetos na memoria de forma simples e intuitiva; ● Ela faz uso das expressões lambda e method references;
  • 61. Collections ● Objetivo ○ Simplificar os algoritmos que trabalham com muitos dados em memória; ○ Permitir a execução paralela de processamento de dados com facilidade;
  • 62. Collections ● Coleção de objetos ● Computada na construção ○ Estrutura de dados na memória ● Tamanho finito
  • 63. Collections List<Integer> inteiros = new ArrayList<>(); for(int i = 0; i < 10; i++) inteiros.add(i); for(Integer i : inteiros){ if(i % 2 == 0) { System.out.println(i); } }
  • 64. Streams ● É uma coleção de objetos ● Computada a cada iteração ● Tamanho infinito
  • 65. Streams Stream<Integer> inteiros = Stream.iterate(0, i <- i + 1).limit(10); inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
  • 66. Streams ● Parallel Streams ○ Divide o processamento em várias threads ○ collection.parallelStream();
  • 67. Streams Stream<Integer> inteiros = Stream.iterate(0, i <- i + 1). parallel() .limit(10); inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
  • 68. Collections - Funções Intermediárias Método Descrição filter(Predicate) Seleciona itens da stream cujo predicato retorna verdadeiro map(Function) Aplica a Function em todos os elementos da Stream. O retorno da função forma os novos elementos da Stream sorted(Comparator) Ordena os elementos da Stream de acordo com o Comparator sorted() Ordena os elementos da Stream de acordo (se forem numéricos peek(Consumer) Executa uma função para cada elemento da Stream distinct() Retira todos os elementos duplicados da Stream limit(n) Seleciona os primeiros n elementos Stream skip(n) Elimina os primeiros n elementos da Stream
  • 69. Collections - Funções Finais Método Descrição toArray() Cria uma vetor com os elementos da Stream toList() Cria uma lista com os elementos da Stream forEach(Consumer) Aplica a função Consumer em cada elemento da Stream collect(Collector) elemento da Stream reduce(BinaryOperator) elemento da Stream min(Comparator) Retorna o menor elemento (de acordo com o Comparator) da Stream max(Comparator) Retorna o maior elemento (de acordo com o Comparator) da Stream count() Retorna o número de elementos da Stream
  • 70. Collections - Funções Finais Método Descrição anyMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para algum elemento da Stream allMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para todos os elementos da Stream noneMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for falsa para todos os elementos da Stream ifPresent(Consumer) findAny() findFirst()
  • 71. Exemplos List<Pessoa> pessoas = new List<>(); .... pessoas .filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18) .peek(System.out::println) .sorted(Comparator.comparing(Pessoa::getNome)) .map(Pessoa::getNome()) .collect(toList());
  • 72. Exemplos int media = pessoas .filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18) .mapToInt(Pessoa::getIdade()) .average(); int total = pessoas .mapToInt(Pessoa::getIdade()) .reduce(0, (a,b) -> a + b);
  • 74. Evolução da Linguagem Java ● 2016 (expectativa) - Java 9 ○ Código fonte modular ○ JSON API leve ○ Cliente HTTP2 ○ Otimizações no compilador
  • 75. Principais Concorrentes ● C# / .Net ● Python ● Ruby
  • 78. Referências DARCY, Joseph D. Joseph D. Darcy's Oracle Weblog: A Pictorial View of a JSR Progressing through the JCP. Disponível em <https://blogs.oracle.com/darcy/entry/pictorial_jcp>. Acesso em 20/10/2014. NETBEANS.ORG. A brief history of netbeans. Disponível em <https://netbeans.org/about/history.html>. Acesso em 10/10/2014. ORACLE. Collections Framework Enhancements in Java SE 8. Disponível em <http://docs.oracle. com/javase/8/docs/technotes/guides/collections/changes8.html > . Disponível em ORACLE. Java Timeline. Disponível em <http://oracle.com.edgesuite.net/timeline/java/>. Acesso em 06/10/2014. ORACLE. Lambda Expressions. Disponível em <http://docs.oracle. com/javase/tutorial/java/javaOO/lambdaexpressions.html>. Acesso em 22/10/2014. ORACLE. Default Methods. Disponível em <http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods. html >. acesso em 19/10/2014. ORACLE. Method References. Disponível em <http://docs.oracle. com/javase/tutorial/java/javaOO/methodreferences.html >. Disponível em 19/10/2014.
  • 79. Referências TIOBE. TIOBE index for October 2014. Disponível em <http://www.tiobe.com/index. php/content/paperinfo/tpci/index.html >. Acesso em 22/10/2014.