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
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
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;
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
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
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));
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);
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.