O documento discute as tendências e desenvolvimentos futuros da linguagem Java. Ele analisa o passado da Java, seu estado atual e os principais recursos planejados para as próximas versões da JavaSE e JavaEE, incluindo melhorias na modularidade, suporte a novas linguagens de script, simplificação do uso de BigDecimal e melhorias na sintaxe.
5. Introdução
Objetivos
Visão
O estado da arte
da tecnologia
As tecnologias que
estão por vir
As tendências
do mercado
Concorrência
Avaliação
Paradigmas de
programação
O amadurecimento
da tecnologia
Comunidades
Avaliando o passado
O resumo das principais
tecnologias atuais
Uma previsão do que
está por vir
Avaliação de mercado das
principais linguagens de
programação
6. Sumário
• Introdução
• Revendo o passado
• Apresentando o presente
• Avaliando a tecnologia
• O que está por vir
• Conclusões
7. Revendo o Passado (1995 a 2008)
1995 20082000 20041998 2002 2006
JavaCard 1.0
Lançamento
da plataforma
J2ME
JavaCard
2.1
Divisão nas
Plataformas
J2SE
J2ME
J2EE
JavaTV
API
Lançamento
do primeiro
celular com
J2ME
Motorola
i3000
WTK 1.0
Mobile
Media
API
MIDP
2.0
JTWI
WTK 2.1
WMA 2.0
AMS
i18n
WTK 2.3
MSA
CDC
Toolkit
Plataforma
Sun SPOT OS
WTK 2.5
WTK 3.0
BluRay API
Java Servlets
DK 1.0
EJB 1.0
Java
Web Server
1.0
Servlets 2.0
Java
Server
Pages
1.0
Plataforma
J2EE
Java APIs
For XML
Servlets 2.3
EJB 2.0
JSP 1.2
Plataforma
J2EE 1.3
JSTL
JDBC 3.0
JTA Servlets 2.4
JCA
1.5
Plataforma
J2EE 1.4
JSP
2.0
EJB
2.1
JMS
Plataforma
JavaEE 5.0
Servlets 2.5
JSP 2.1
JSF 1.2
EJB 3.0
JDBC 4.0
Hibernate
Spring Struts
2009
JDK 1.0
JDK 1.2
J2SE
JFC
Swing
JCP
Formalizado
Java
Hotspot
Lançamento
do JDK 1.3
J2SE 1.3
J2SE para
Linux
Lançamento
do JDK 1.4
J2SE 1.4
Lançamento
do JDK 5.0
JSE 5.0
Java
Compiler
API
Plataforma
JavaSE 6.0
JavaFX
OpenJDK
8. Sumário
• Introdução
• Revendo o passado
• Apresentando o presente
• Avaliando a tecnologia
• O que está por vir
• Conclusões
9. Apresentando o Presente
• Quais seriam alguns dos principais
elementos no contexto global que
poderíamos utilizar como um
“termômetro” da tecnologia Java ?
• Possíveis respostas
• Conferências JavaOne
• Java Community Process e Java
Specification Requests
• Número de projetos realizados
• Oportunidades de emprego
• Artigos e periódicos em revistas
10. Resumo JavaOne 2008: JavaSE
• Estatísticas
• 7M de desenvolvedores, 750K downloads/mês do JDK, 48
M downloads do JRE
• Apresentações de demos utilizando JavaFX Script
em Applets tanto em navegadores quando no
desktop
• JVM com suporte a outras linguagens
• Glassfish (Ruby, Groovy, Rails e Grails)
• Lançamento do JavaSE 7.0 prevista para meiados
de 2009
• Suporte a diversas linguagens de scripts
• Programação multicore
11. Resumo JavaOne 2008: JavaEE
• Foco na simplicidade
• Mais anotações, menos descritores de
desdobramento
• Proposta de perfis (“rightsizing”)
• Pacotes de APIs com objetivos específicos
• Pontos de extensão, aumentando a flexibilidade
com outros arcabouços e bibliotecas
• Tecnologias de destaque
• Ruby, AJAX, JavaFX, Grails, GWT
• RIA, Adobe Flex e Java
14. Java Community Process e Java
Specification Request
API JSR Estado
SAF 296 EGF
Beans Binding 295 EGF
Beans Validation 303 EDR
Java Module System 277 EDR
NIO 203 EDR
Javadoc Update 260 EGF
Units 275 EDR
Date and Time API 310 EGF
Anotations 308 EDR
WS-JMX 262 PR
JMX 2.0 250 EDR
Modularity 294 EDR
JavaSE API JSR Estado
MIDP 3.0 271 PR
MBS API 272 FAB
Service Connection 279 PR
IMS Services 281 FR
SVG 2.0 287 PFD
Location API 2.0 293 FR
Mobile 3D 2.0 297 PR
Network Mobility 307 EDR
JavaME
API JSR Estado
JavaEE 6.0 316 EDR
JSF 2.0 314 EDR2
EJB 3.1 318 PR
JPA 2.0 317 PR
Servlets 3.0 315 EDR
JCA 1.6 322 EDR
JavaEE
EGF Expert Group Formation
EDR Early Draft Review
PR Public Review
PFD Proposed Final Draft
FAB Final Approval Ballot
FR Final Release
Legenda
Bom Ritmo
Lento, mas progredindo
Muito lento
15. Lançamentos Recentes: JavaSE
(2007-2008)
• JavaSE 6.0 SDK
• Pacote javax.script com suporte a extensão para outras
linguagens script (JSR 223)
• Jrunscript, baseado em JavaScript, (Mozilla Rhino engine)
• https://scripting.dev.java.net/
• Extensão para suporte de outras linguagens
• JavaFX Script
• Novas classes de Coleções
• JDBC 4.0
• Projeto OpenJDK
16. Lançamentos Recentes: Java EE
(2007-2008)
• JavaEE 5.0
• EJB 3.0, JSP 2.0, Servlets 2.5
• JavaServer Faces 1.2
• Apache MyFaces
• JBoss RichFaces
• Sun Mojarra
• etc.
• GlassFish App Server
• MySql
• NetBeans 6.5
• Java Application Platform SDK
17. Lançamentos Recentes: JavaME
(2007-2008)
• SavaJe OS
• JavaFX Mobile
• Mobile Services
Architecture
• Dispositivos
móveis com a
API MSA
• JavaME SDK
3.0 (CLDC +
CDC)
• Blu-ray Disc
API, baseado no
CDC, FP, PBP e
JavaTV
18. Sumário
• Introdução
• Revendo o passado
• Apresentando o presente
• Avaliando a tecnologia
• O que está por vir
• Conclusões
19. Parâmetros de Avaliação
• Concorrência
• Linguagens e plataformas de desenvolvimento
• Comunidade
• Padronização, número de desenvolvedores, apoio e adoção pela
indústria
• Tempo de amadurecimento
• Cobertura de paradigmas
• OO, AOP, SOA, SOS
• Completude
• O que ela propôe a fazer (problemas a resolver)
• Quais são os problemas atuais que necessitam ser solucionados
• Quais são os futuros desafios
20. Parâmetros de Avaliação:
Concorrência
Concorrentes JavaME JavaSE JavaEE
Não Java
Iphone
Symbian
.Net CF
BREW
Flash Lite
Pocket PC
Paml OS
Delphi
VB
C, C++
Adobe Flash
MS Silverlight
.NET
Python
PHP
Ruby on Rails
GAE
Java
Android
SuperWabba GWT
Plataformas
21. Parâmetros de Avaliação:
Comunidade
• Padronização
• Java Community Process (JCP)
• Java Specification Request (JSRs)
• Número de desenvolvedores
• Estimativa do JavaOne: 7M de desenvolvedores
• Diversos JUGs
• Brasil +- 20 ativos (JavaMan)
• Apoio e adoção pela indústria
• Sun, Oracle, IBM, Google, Nokia, Sony-Ericsson,
Red Hat, SAP, Intel
22. Parâmetros de Avaliação: Critérios
em Números
• Novas aplicações construídas
• Aplicações existentes
• Desenvolvedores
• Utilizam pelo menos uma vez
• Pesquisas na Web
• Vagas de emprego disponíveis
• Preferência dos desenvolvedores
http://www.devtopics.com/most-popular-programming-languages/
26. Parâmetros de Avaliação: Tempo de
AmadurecimentoAmadurecimento das Linguagens de
Programação
0
5
10
15
20
25
30
35
40
C
C
++
Perl
PythonVisualBasic
JavaJavaScript
PHP
R
uby
C
#
Anos
• Tempo de amadurecimento
• C (1972), 36 anos
• C++ (1983), 25 anos
• Perl (1987), 21 anos
• Python (1991), 17 anos
• Visual Basic (1991), 17 anos
• Java (1995), 13 anos
• JavaScript (1995), 13 anos
• PHP (1995), 13 anos
• Ruby (1995), 13 anos
• C# (2001), 7 anos
27. Parâmetros de Avaliação: Cobertura de
Paradigmas
• Paradigmas de interesse
• Object Oriented (OOP)
• Aspect Oriented (AOP)
• Service Oriented (SOA, SOS)
• Possíveis casos de sucesso
• Suporte a multi-paradigmas
• Java: imperativa, genérica e orientada a objetos
• C#: funcional, imperativa, genérica e orientada a
objetos
• Ruby, Python e Perl: funcional, imperativa e orientada a
objetos
• C++: genérica, imperativa e orientada a objetos
28. Parâmetros de Avaliação:
Completude
• O que ela propõe a fazer (problemas a resolver)
• Gerenciamento de memória automática
• Portabilidade: “write once, run anywhere”
• Quais são os problemas atuais que necessitam ser
solucionados
• Desempenho (Swing, JavaME)
• Simplicidade no desenvolvimento
• Segurança (aumento da conectividade)
• Quais são os futuros desafios, novos modelos
computacionais
• Computação pervasiva, convergência IP, 3G, 4G
• Computação grid, computação nas nuvens, virtualização, P2P
• Interoperabilidade entre tecnologias
• Rich Internet Applications
29. Sumário
• Introdução
• Revendo o passado
• Apresentando o presente
• Avaliando a tecnologia
• O que está por vir
• Conclusões e discussões
30. O Que Está por Vir: JavaSE 7.0
• JSR 277 Java Module
System
• JSR 294 Improved
Modularity Support
• JSR 295 Beans Binding
• JSR 303 Beans Validation
• JSR 296 Swing Application
Framework
• JSR 203 NIO2
• JSR 255 JMX 2.0
• JSR 262 Web Services
Connector for JMX
• JSR 260 Javadoc
Technology Update
• JSR 275 Units and
Quantities
• JSR 310 Date and Time
API
• JSR 308 Annotations on
Java Types
31. O Que Está por Vir: JavaSE 7.0
• Suporte a XML na linguagem
• Compreendido pelo compilador
• Sem necessidade de utilizar buffers (StringBuffer,
StringBuilder
org.w3c.dom.Document d =
<this><that><other>2</other></that></this>;
element.appendChild(
<user>
<name>Xulambs</name>
</user>
);
32. O Que Está por Vir: JavaSE 7.0
• Propriedades JavaBeans
public class MyClass{
private property String name;
public String getName() {
return name == null? "": name;
}
}
MyClass mc = new MyClass();
mc.name = “Joao” // calls the setter
String str = mc=>name // calls the getter
mc->name = “Maria” // calls the setter
String str = mc#name // calls the getter
Opcional
33. O Que Está por Vir: JavaSE 7.0
• Simplificação do uso do BigDecimal
// ATUALMENTE
BigDecimal dec = new BigDecimal(“10.00”);
dec = dec.add(new BigDecimal(12.00)).
multiply(new BigDecimal(2.00));
// PROPOSTA 1: SOBRECARGA DE OPERADORES
BigDecimal dec = new BigDecimal(“10.00”);
dec = dec + new BigDecimal(12.00)) *
new BigDecimal(2.00);
// PROPOSTA 2: AUTOBOXING E USO DE LITERAIS
BigDecimal dec = 10.00n;
dec = dec + 12.00n * 2.00n;
34. O Que Está por Vir: JavaSE 7.0
• Switch com Strings
. . .
switch(str){
case "ok":
case "true":
return true;
case "not ok":
case "false":
return false;
default:
throw new IllegalArgumentException(str);
}
. . .
35. O Que Está por Vir: JavaSE 7.0
• Simular métodos de interface inexistentes
// ATUAL
import java.util.Collections;
List<String> list = new ArrayList<String>();
Collections.sort(list);
// JAVASE 7.0
import static java.util.Collections.sort;
List<String> list = new ArrayList<String>();
list.sort();
36. O Que Está por Vir: JavaSE 7.0
• Try/Catch melhorado
try{
return new MyClass();
} catch(InstantiationException |
IllegalAccessException e)
{
throw new AssertionError(e);
}
try{
return new MyClass();
} catch(InstantiationException e){
throw new AssertionError(e);
} catch(IllegalAccessException e){
throw new AssertionError(e);
}
JavaSE 6.0
JavaSE 7.0
37. O Que Está por Vir: JavaSE 7.0
• Construtor simplificado para Generics
//JavaSE 6.0
Map<String, List<String>> anagrams =
new HashMap<String, List<String>>();
//Java SE 7.0
Map<String, List<String>> anagrams = new HashMap();
// Notação Tabular para listas e mapas
List<String> itens = new ArrayList();
itens.add[1] = "something";
38. O Que Está por Vir: JavaSE 7.0
• Closures
• Operações sobre um bloco arbitrário de código
Java (conjunto de operações, uma expressão ou
combinação de ambos)
• A avaliação de uma closure produz um objeto
closure, que pode ser invocado, com o resultado
retornado pela execução da expressão
• Pode conter parâmetros
• Risco: pouco provável de ser incorporado à
versão 7.0 devido a algumas divergências entre
especialistas
39. O Que Está por Vir: JavaSE 7.0
• Closures - Exemplos
double log = { double x => Math.log(x) }.invoke(10);
int half = {
int x =>
if (x % 2 != 0) System.out.printf("%d is odd%n", x); x / 2
}.invoke(31);
int answer = { => 42 }.invoke();
int sum = { int x, int y => x + y }.invoke(3, 4);
{ int n =>
int m = n + 1; System.out.println(m * m);
}.invoke(3);
40. O Que Está por Vir: JavaSE 7.0
• Superpackages: super pacotes (JSR 294)
• Grupos de pacotes e controle de visibilidade externa
• Super JARs, Java Module System (JSR 277)
• Novo formato, controle de versão, distribuição,
inclusão de outros JARs
• New IO API (JSR 203)
• Permissões, atributos de arquivos, canais de
soquetes
• Unidades e Quantidades (JSR 275)
• Nova Date and Time API (JSR 310)
• Novos recursos de programação paralela,
divisão e conquista, Fork/Join (JSR 166)
• Suporte a XQuery (JSR 225)
41. O Que Está por Vir: JavaSE 7.0
• Gerenciamento de consumo de recursos (JSR
284)
• Tamanho da heap, tempo de CPU, conexões JDBC, etc.
• Novas anotações (JSR 308)
• @NonNull, @Existing, @ReadOnly, @Critical,
@NonEmpty
• Javadoc update (JSR 260)
• Swing Application Framework (JSR 296)
• Beans Validation (JSR 303) e Beans Binding (JSR
295)
42. O Que Está por Vir: JavaSE com
Suporte a Outras Linguagens
• Objetivo: adaptar a JVM para a adição de suporte
a outras linguagens de programação
• Escrita de compiladores e interpretadores na
linguagem Java para outras linguagens
• Linguagens candidatas
• Ruby (JRuby), Python (JPython), Groovy, Scala
• JavaScript (JavaSE 6.0 já possui suporte)
• BeanShell (JSR 274), JavaFX Script
• +- 200 linguagens já foram trazidas para a JVM
• Projetos: Da Vinci Machine Project
• http://openjdk.java.net/projects/mlvm/
43. O Que Está por Vir
• JavaME
• MIDP 3.0
• Concorrência
• IPhone, Android,
Symbian, Windows
Mobile (.Net CF)
• Telefones móveis vs.
Smartphones
• Java TV
• MSA 2
• Low, Mid, High segments
• JavaEE
• JavaEE 6.0 (JSR 316)
• EJB 3.1, JPA 2.0, JSP,
JSF 2.0, Servlets 3.0
• Concorrência
• .NET, Python, PHP,
Ruby on Rails
• Novos Paradigmas
• Service Oriented
Architecture, Service
Oriented Software
• Desenvolvimento Web
para o futuro, RIA
44. E o Futuro da Sun?
• Estado atual
• As ações cairam mais de 70% este ano e 90% nos ultimos
3 anos
• Esperada demissão de + - 18% da força de trabalho
• Fatos importantes
• A tecnologia Java é open-source (projeto OpenJDK), de
domínio público
• A comunidade é muito grande
• Além da Sun, várias outras empresas estão por traz da
tecnologia Java (IBM, Red Hat, Nokia, Google), conforme
proposto no JCP
• A concorrência é um fator positivo
45. Sumário
• Introdução
• Revendo o passado
• Apresentando o presente
• Avaliando a tecnologia
• O que está por vir
• Conclusões
46. Conclusões
• Referências a serem observadas
• Java Community Process, JavaOne, WebLogs de
líderes de projeto e arquitetos da Sun
• Tendências em geral
• JavaEE: Novas tecnologias, RIA, SOA
• JavaME: Foco da Sun e do JCP em telefones
móveis e dispositivos menores ao invés de
smartphones
• JavaSE: Suporte a várias linguagens,
programação multicore
47. Conclusões
• Linguagens de programação
• Interesse por linguagens de múltiplos paradigmas
• Prevendo o futuro
• Analise dinâmica do passado e presente
• O Java conseguiu se adaptar em novas áreas
• Futuro do Java
• Dependerá não só da Sun, mas também de outras
corporações
• Dependerá também dos concorrentes
• Custos de desenvolvimento e manutenção de soluções
• Simplicidade e velocidade no desenvolvimento
• Movimentos open source estão se consolidando cada vez
mais na comunidade Java
• OpenJDK, GlassFish, phoneME