• Nenhum resultado encontrado

Java SE 7 e o futuro da linguagem Java

N/A
N/A
Protected

Academic year: 2021

Share "Java SE 7 e o futuro da linguagem Java"

Copied!
59
0
0

Texto

(1)

Java SE 7 e o futuro da linguagem Java

Michael Nascimento Santos

(2)

Aviso

As informações nesta palestra correspondem a declarações de previsão baseadas em expectativas

atuais de eventos futuros que envolvem riscos e incertezas incluindo, sem limitação, riscos

associados a incertezas inerentes à adequação do momento e sucesso de pesquisas ...

(3)

Agenda

> Como o Java SE é definido

> Funcionalidades consideradas para inclusão

> Mudanças propostas na linguagem > O futuro da linguagem Java

(4)

Agenda

> Como o Java SE é definido

> Funcionalidades consideradas para inclusão

> Mudanças propostas na linguagem > O futuro da linguagem Java

(5)

Definição do Java SE

(Antigamente)

> Uma “umbrella” JSR é submetida ao JCP

> A JSR já menciona algumas funcionalidades propostas

> Escolhe-se o Expert Group

> O EG discute o que deve ou não ser incluído e

isso resulta na especificação

> JSRs para APIs/mudanças da linguagem

> Pequenos bugs/alterações listadas

> A Sun faz a implementação de referência, aka JDK

> A especificação passa por todo processo burocrático de votação e temos uma nova

(6)

Definição do Java SE hoje

> Java + YOU (por bem ou por mal)

> Apesar da burocracia, há grande influência da comunidade

> JSRs lideradas por indivíduos

> JSR-310 (Date & Time)

> Contribuições ao OpenJDK

> Closures prototype

> Kijaro, um projeto aberto > Blogs

> No entanto, ainda há dois grandes “guardiões”:

> Java SE: Danny Coward

(7)

Agenda

> Como o Java SE é definido

> Funcionalidades consideradas para inclusão

> Mudanças propostas na linguagem > O futuro da linguagem Java

(8)

Próximas releases: Java SE

> Java SE 6u10 (em breve)

> Java Kernel

> Applets e aplicações tratadas de forma unificada via JNLP com novo plugin

> Java Quick Starter

> Diversas melhorias para suportar o JavaFX

> Java SE 7 (2009?) - APIs

> Desktop (Swing Application Framework, Beans Binding, Validation)

> NIO 2 (JSR 203)

> JPA 2.0

> Date & Time

(9)

Swing Application

Framework (JSR-296)

> Suporte à aplicação como conceito e seu ciclo de

vida

> Application (launch, initialize, startup, ready, exit,

shutdown)

> Configuração externa de recursos (textos, cores,

ícones)

> Sendo reconsiderado no momento

> Ações (@Action)

> Tasks, com suporte à execução assíncrona,

indicação de progresso, interrupção e bloqueio da GUI

(10)

Swing Application

Framework (JSR-296)

public class M yApp extends SingleFram eApplication { @ O verride protected void startup() {

JLabel label = new JLabel("H ello W orld");

show (label);

}

public static void m ain(String[] args) {

Application.launch(M yApp.class, args);

} }

(11)

Swing Application

Framework (JSR-296)

ApplicationC ontext c = Application.getInstance().getC ontext(); ResourceM ap r = c.getR esourceM ap(M yForm .class);

r.getString("aForm at", "W orld") => " Hel l o Wor l d" r.getC olor("colorRBG A") => new Col or ( 5, 6, 7, 8)

r.getFont("aFont") => new Font ( " Ar i al " , Font . PLAI N, 12)

resources/M yForm .properties

aString = Just a string aForm at = H ello % s anInteger = 123 aBoolean = True anIcon = m yIcon.png aFont = Arial-PLAIN -12 colorRG BA = 5, 6, 7, 8

(12)

Swing Application

Framework (JSR-296)

public class M yApp extends SingleFram eApplication {

@ Action public void sayH ello() { JLabel label = new JLabel(); label.setN am e("label");

show (JO ptionPane.createD ialog(label)); }

@ O verride protected void startup() {

show (new JButton(getAction("sayH ello"))); }

public static void m ain(String[] args) {

Application.launch(M yApp.class, args); }

}

# resources/M yApp.properties

sayH ello.Action.text = Say& H ello

sayH ello.Action.shortD escription = say hello label.text = H ello W orld

(13)

Beans Binding (JSR 295)

> Cria o conceito de Property

> Infelizmente, não algo que faça parte da linguagem

> Interface com algumas implementações convenientes (BeanProperty, ELProperty etc)

> Permite expor “propriedades sintéticas”, como

JTextComponent.text

> Provê APIs para conversão e validação > Binding: liga duas propriedades

> Possui extensões para facilitar o suporte Swing:

> Lists/Maps “observáveis”

> JListBinding, JTableBinding

(14)

Beans Binding (JSR 295)

Property fnameP = BeanProperty.create(“firstName”); Property textP = BeanProperty.create(“text”);

Bindings.createAutoBinding(READ_WRITE,

person, fnameP,

textField, textP).bind(); Property oldP = ELProperty.create(“${age > 50}}”); Bindings.createAutoBinding(READ,

person, oldP,

(15)

Beans Binding (JSR 295)

Property fnP = BeanProperty.create(“firstName”); Property lnP = BeanProperty.create(“lastName”); JTableBinding tb = SwingBindings.createJTableBinding(READ, list, jtable); tb.addColumnBinding(fnP) .setColumnName(“First Name”) .setColumnClass(String.class); tb.addColumnBinding(lnP) .setColumnName(“Last Name”); .setColumnClass(String.class); tb.bind();

(16)

Bean Validation (JSR-303)

> Permite restringir o valor das propriedades no

domínio através de anotações especiais (constraints)

> Define constraints básicas (@NotNull, @Length,

@Email)

> Permite criar suas próprias anotações de constraints

(@ConstraintValidator) e como validá-las (ConstraintValidator<A extends Annotation>)

> Permite validações de todo o bean, propriedades individuais ou grupos

> Geração de mensagens customizadas

(17)

Bean Validation (JSR-303)

public class Address {

@NotNull

@Length(max=30, message="longer than {max} characters")

private String street1; ...

@NotNull @Valid

private Country country; }

public class Country {

@NotNull @Length(max=30)

private String name; ...

(18)

Bean Validation (JSR-303)

@ConstraintValidator(LengthConstraint.class)

public @interface Length {

String message() default "{beanckeck.length}"; String[] groups() default {};

int min() default 0;

int max() default Integer.MAX_VALUE;

}

public class LengthConstraint implements

Constraint<Length> {

public void initialize(Length annotation) { }

public boolean isValid(Object value) {

} }

(19)

NIO 2 (JSR-203)

> Nova API de suporte a filesystems

> FileSystem

> FileRef

> Path

> FileStore

> Suporte a symbolic links

> FileAttributeView > WatchService

> SeekableByteChannel > Nova API de Sockets > Asynchronous I/O

(20)

JPA 2.0 (JSR-317)

> Mapeamento mais flexível

> Collections de tipos básicos (wrappers, BigDecimal etc)

> Collections de tipos embeddables (Endereco, CPF etc)

> Listas ordenadas

> Melhor suporte a Maps

> Deleção de órfãos

> API para locks pessimistas

> Cache API

> Criteria API

(21)

Date & Time API (JSR-310)

Date date = new Date(2007, 12, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(22)

Date & Time API (JSR-310)

Date date = new Date(2007, 12, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(23)

Date & Time API (JSR-310)

int year = 2007 - 1900;

Date date = new Date(year, 12, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(24)

Date & Time API (JSR-310)

int year = 2007 - 1900;

Date date = new Date(year, 12, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(25)

Date & Time API (JSR-310)

int year = 2007 - 1900;

int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(26)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/HongKong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(27)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(28)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(date, zone);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(29)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(zone);

cal.setTime(date);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

(30)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(zone); cal.setTime(date);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

Date calDate = cal.getTime();

(31)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(zone); cal.setTime(date);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

Date calDate = cal.getTime();

(32)

Date & Time API (JSR-310)

int year = 2007 - 1900; int month = 12 - 1;

Date date = new Date(year, month, 13, 16, 40);

TimeZone zone = TimeZone.getInstance("Asia/Hong_Kong");

Calendar cal = new GregorianCalendar(zone); cal.setTime(date);

DateFormat fm = new SimpleDateFormat("HH:mm Z");

fm.setTimeZone(zone);

Date calDate = cal.getTime();

(33)

Date & Time API (JSR-310)

LocalDateTime dT = dateTime(2007, 12, 13, 16, 40); TimeZone zone = timeZone("Asia/Hong_Kong");

ZonedDateTime date = dateTime(dt, zone);

DateTimeFormatter fm = hourMinuteZoneFormatter(); String str = fm.print(date);

(34)

Date & Time API (JSR-310)

ZonedDateTime date = builder().year(2007).december(). dayOfMonth(13).hour(16).minute(40). timeZone("Asia/Hong_Kong").build();

DateTimeFormatter fm = hourMinuteZoneFormatter(); String str = fm.print(date);

(35)

Problemas da API atual

> Mutável

> Janeiro é 0, Dezembro é 11, mas os dias vão de 1 a 31...

> Date não é uma data

> Date usa anos a partir de 1900

> Calendar não pode ser formatado > DateFormat não é thread-safe

> DateFormat possui um TimeZone implícito

> java.sql.{Date, Time, Timestamp} estendem Date

(36)

Date & Time API (JSR-310)

> Modelo abrangente de data e hora > Type-safe

> Interoperável com Date e Calendar

> Vão poder ser convertidas para as novas interfaces

> Compatível com os padrões XML e SQL

> Princípios de design:

> Imutável

> Fluente

> Principle of Least Astonishment

(37)

Date & Time API (JSR-310)

> Científica (Instant, Duration, Interval) > Humana

> Tipos básicos

> LocalDate, LocalTime, LocalDateTime

> OffsetDate, OffsetTime, OffsetDateTime

> ZonedDateTime

> Campos

> Year, MonthOfYear, DayOfMonth, DayOfWeek etc.

> Regras extensíveis

> DateMatcher, TimeMatcher

> DateAdjuster, TimeAdjuster

(38)

Date & Time API (JSR-310)

> Solução para o problema do horário de verão! > Novo conceito de TimeZone

> Nome

> Offset base (ZoneOffset)

> Versão das regras de transição do offset

> (Se tudo der certo) permitirá atualização das

regras da JVM on-the-fly

> Sem quebrar objetos existentes

(39)

Date & Time API (JSR-310)

> Periods

> Years, Months etc.

> Composições dos valores

> Nova API de formatting & parsing

> Com builders

> Interoperável com API existente

> Suporte a outros sistemas de calendário

> Suporte aos existentes no JDK > Permitindo extensibilidade

> Nova classe para obter a hora atual: Clock

> Fácil de testar

(40)

Agenda

> Como o Java SE é definido

> Funcionalidades consideradas para inclusão

> Mudanças propostas na linguagem > O futuro da linguagem Java

(41)

A linguagem Java

> Como evoluir uma linguagem estabelecida? > Assume-se que adicionar features é algo bom

> Talvez seja para aplicações

> Linguagens precisam ser consistentes

> Se existe boxing/unboxing, por que não List<int>?

> Java tem como princípio ser backwards-compatible

> Ao mesmo tempo que permite que seu código

funcione, não permite que a evolução ocorra da forma mais elegante possível

(42)

Princípios de evolução

> Respeitar o passado

> Novas keywords quebram o código (assert, enum)

> Features removidas quebram o código

> “Consertar” pode quebrar código também

> Respeitar o futuro

> Features que complementam features podem ser postergadas

> Levar em conta outras potenciais adições ao definir a sintaxe

> Respeitar o modelo atual

> Manter o foco da linguagem

(43)

Princípios do modelo atual

> Linguagem de alto nível > Clareza

> Tipagem estática

(44)

Features e viabilidade

> Propriedades

> Reified generics

> Closures & extension methods

> Suporte XML > Módulos

> Melhorias nas anotações

(45)

Propriedades

> Diversos modelos propostos

> Alterando a linguagem

> Nova API

> Combinação de ambas

> Polêmica

> Poucas soluções concretas desenvolvidas

> Código teria que ser reescrito para tirar proveito

(46)

Reified generics

> Desejada por grande parte das pessoas > Poucas soluções propostas

> Nenhum protótipo concreto, nem especificação

> Requer muito esforço de implementação > Chances: baixíssimas

(47)

Closures

> Diversos modelos propostos

> BGGA

> FCM

> CICE

> NIPAD

> Muito polêmica na comunidade

> Para que código comum tirasse proveito, exigiria reescrita ou adoção de features como extension methods

(48)

Closures

> Diversos modelos propostos

> BGGA

> FCM

> CICE

> NIPAD (Não Implementem Pelo Amor de Deus!!!)

> Muito polêmica na comunidade

> Para que código comum tirasse proveito, exigiria reescrita ou adoção de features como extension methods

(49)

Suporte XML

> Extremamente polêmica! > Sem protótipo disponível

> Sem especificação

(50)

Módulos

> Duas JSRs inicialmente

> 277: API e modelo de execução

> 294: Mudanças na linguagem

> Unificada recentemente na JSR-277

> Introduz conceito de restricted keyword: module

> Declaração de classes e pacotes integrante do módulo > Declaração de dependências de outros módulos

> Novo formato de deployment (JAM)

> Potencial interoperabilidade com outros sistemas

de módulos (OSGi)

(51)

Módulos

// org/netbeans /core/Debugger.java module org.netbeans .core;

package org.netbeans .core; public clas s Debugger {

... new ErrorTracker() ... }

// org/netbeans /core/utils /ErrorTracker.java module org.netbeans .core;

package org.netbeans .core.utils ; module clas s ErrorTracker {

module int getErrorLine() { ... } }

// org/netbeans /core/module-info.java @ Vers ion("7.0")

@ ImportModule(name="java.s e.core", vers ion="1.7+") module org.netbeans .core;

(52)

Melhorias nas anotações

> Possui JSR

> Mais lugares para usar:

> List<@NonNull String>

> class UnmodifiableList<T> implements @ReadOnly

List<@ReadOnly T>

> @NonEmpty List<T> = // ...;

> Introduz a noção de tipo específico de processador de anotação: type checker

> Não tão polêmica (talvez por não estar tão difundida)

(53)

Pequenas features

> Multi-catches:

> } catch (AnException, AnotherException e) { tratar(e) }

> Safe-rethrow

> Permite fazer catch de super-tipo, mas lançar apenas

subtipos esperados

> Switch para Strings > Chances: muito altas

(54)

Agenda

> Como o Java SE é definido

> Funcionalidades consideradas para inclusão

> Mudanças propostas na linguagem > O futuro da linguagem Java

(55)

O futuro da linguagem

> Nunca vamos ter closures, reified generics ou... ? > A opinião está dividida:

> Alguns querem que a linguagem fique como está e a evolução ocorra em novas linguagens para a JVM

> Alguns temem o que as pessoas farão com features como generics

> Alguns querem que Java continue sendo uma linguagem viva e em constante evolução

(56)

Depende de nós

> A comunidade precisa decidir

> A decisão final a respeito da linguagem ainda não foi tomada

> E o melhor provavelmente deve ser um pouco da opinião de cada parcela da comunidade

> Colabore manifestando a sua opinião

> Blogs

> OpenJDK

> JUGs

(57)

Conclusão

> Diversas APIs estão cogitadas para inclusão > Nem tantas mudanças de linguagem assim

> Java vai manter suas características

> Há certas coisas que nós nunca vamos ver em

Java - operator overloading... :-)

> O quão longe a linguagem vai evoluir e até

quando vão haver novas versões depende da comunidade

(58)

Obrigado!

Michael Nascimento Santos

http://blog.michaelnascimento.com.br [email protected]

(59)

Referências

Documentos relacionados

Desse modo, ao observar a história dos deslocamentos dos povos indígenas na região, como por exemplo no caso palikur tal como observado por López (2011), temos que sua

Foi apresentada, pelo Ademar, a documentação encaminhada pelo APL ao INMETRO, o qual argumentar sobre a PORTARIA Nº 398, DE 31 DE JULHO DE 2012 E SEU REGULAMENTO TÉCNICO

Neste trabalho avaliamos as respostas de duas espécies de aranhas errantes do gênero Ctenus às pistas químicas de presas e predadores e ao tipo de solo (arenoso ou

demands of daily life, have a higher correlation with the risk of falls than maximum strength tests, this study aims to determine the prevalence of falls and resulting fractures

Considerando que, no Brasil, o teste de FC é realizado com antígenos importados c.c.pro - Alemanha e USDA - USA e que recentemente foi desenvolvido um antígeno nacional

By interpreting equations of Table 1, it is possible to see that the EM radiation process involves a periodic chain reaction where originally a time variant conduction

O desenvolvimento desta pesquisa está alicerçado ao método Dialético Crítico fundamentado no Materialismo Histórico, que segundo Triviños (1987)permite que se aproxime de

O Programa de Educação Tutorial “PET/Conexões de Saberes – ACESSO” da Universidade Federal do Rio de Janeiro aprovado pelo Edital PET/MEC nº 11 de 10 de janeiro de