sexta-feira, 10 de agosto de 2007

O dia que conheci o pai da Java





Um dos momentos mais emocionantes da minha vida. Neste dia conheci James Gosling.





Reggie Hutcherson,
Sridhar Reddy,
Simon Ritter,
Sang Shin,
Raghavan "Rags" Srinivas.




Todos muito gente fina. Em um momento lusitano foi chamado para ao palco por Reggie Hutcherson. "Very Strong"
"Cavei uma falta" para ganhar uma jaqueta, mas nao deu.
Lógico que gostaria de ser conhecido pelos meus códigos ou projetos, mas mesmo assim foi muito legal.
Espero um dia poder contribuir para comunidade, enquanto isso estou ai, carregando a Java no braço.

quarta-feira, 8 de agosto de 2007

Ping - Pong Java .Net

Agora com conhecimento de causa resolvi fazer uma comparação entre Java e .Net. Aproveitando as colocações de um colega. Vamos fazer um Ping-Pong Java .Net.

Característica: Compilado para código nativo
Java: Raramente. O Java é quase sempre interpretado.
C#: Sempre compilado para código nativo. A compilação pode ser feita na instalação ou na primeira execução do programa.

Característica: Todos os tipos derivados de ancestral comum
Java: Sim, todos os tipos são derivados de object.
C#: Sim, todos os tipos são derivados de object.

Característica: “Boxing” e “Unboxing” - conversão de tipos por valor para tipos por referência
Java: Não. Exige conversão manual.
C#: Sim.

Característica: Structs
Java: Sim e Não, pois este conceito é um tipo de patterns. Fica a disposição do desenvolvedor esta criação.
C#: Sim.

Característica: Enum
Java: Não.
C#: Sim.

Característica: Passagem de parâmetros por referência
Java: Sim, só não existe estas duas formas mencionadas, mas passa a quantidade de parâmetro que quiser. Obs, não existe a necessidade de ref. Ref. (limpo)
C#: Sim, de duas maneiras: ref para parâmetros de entrada e saída e out para parâmetro apenas de saída.

Característica: Propriedades
Java: Sim, existem os métodos Get/Set, se tiver utilizando o NetBeans a implementação fica mais rápida, é automática.
C#: Sim, diretamente. A criação de “componentes” é bastante facilitada.

Característica: Eventos e Delegates
Java: Não vejo como este delegate no Java mesmo, ainda mais tratando de função. Mas em Java existe a Inner Class que permite que os eventos sejam realizados com sucesso, alem existem a classe Action, que é exclusiva para este tipo de situação.
C#: Sim. Um “delegate” é um “ponteiro de função orientado a objetos”, permitindo a associação de um evento de uma classe ao código de outra de maneira conceitualmente simples e poderosa.

Característica: Atributos
Java: Existem sim, básico este tipo de características.
C#: Sim, permitindo “etiquetar” o código com características que são interrogadas em tempo de execução através de “reflection”.

Característica: Ponteiros
Java: Não suportado diretamente, apenas indiretamente através de “referências”, principalmente para o Garbade collection ser mais efetivo.
C#: A princípio suporta referências, mas os ponteiros podem ser usados em código “inseguro” por questões de performance ou compatibilidade com DLLs, com isso a efetividade do Garbade collection não seja evetiva, necessário sempre destruir o Objeto.

Característica: Sobrecarga de operadores
Java: Sim.
C#: Sim.

Característica: Operadores de conversão
Java: Sim.
C#: Sim.

Característica: Operadores de cast
Java: Um, sintaxe semelhante ao C/C++, com a versão 5 é implícito.
C#: Dois, um semelhante ao C/C++ e o outro “as”. Um retorna null e outro dispara exception em casso de erro de conversão.

Característica: Inteiros sem sinal
Java: Sim.
C#: Sim.

Característica: Tipo numérico pouco sujeito a erros de representação e arredondamento
Java: Sim.
C#: Sim, o tipo decimal pode ser usado em softwares que não toleram facilmente erros de arredondamento, como programas de contabilidade

Característica: For each: loop para varrer arrays e coleções
Java: Sim (Patterns Interator, FOR com elements).
C#: Sim.

Característica: Campo readonly
Java: Não.
C#: Sim.

Característica: Documentação integrada em XML
Java: Sim, JavaDoc, Comentários etc.
C#: Sim, permitindo que o programador escreva facilmente a documentação enquanto programa. Este documentação pode depois ser extraída do fonte ou usada no próprio ambiente de desenvolvimento.

Característica: Switch com strings
Java: Não.
C#: Sim, facilitando o desenvolvimento.

Característica: Controle sobre “estouro de faixa” numérica
Java: Não, sempre será gerado uma exception, depois que estourar.
C#: Sim. As palavras reservadas checked e unchecked permitem mudar o que o programa faz quando há um “estouro de faixa numérica”: o checked dispara uma exception; o unchecked não.

Característica: Funções com número variável de parâmetros
Java: Não existem funções em Java, mas mesmo assim os métodos suportam sim..
C#: Sim, de forma “tipada”, com a palavra reservada params.

Característica: Formas do método Main
Java: Uma, só o necessário mesmo.
C#: Quatro. O main pode aceitar um array de strings ou nada; pode retornar inteiro ou nada.

Característica: Goto
Java: Não tem, ufa, mas é sim uma palavra reservada da Java.
C#: Sim, com a restrição de que não pode entrar em um bloco.

Característica: Arquivo “executável” independente do namespace
Java: Um “package” Java obrigatoriamente está associado a um único arquivo “.class”.
C#: Não existe relação direta entre o “namespace” e a DLL que o implementa, dando mais flexibilidade ao desenvolvedor na hora de quebrar seus projetos em pedaços menores.

Característica: Especificadores de acesso
Java: Quatro.
C#: Cinco. O internal, adicional, especifica acesso apenas no mesmo “assembly” (mesma DLL, a grosso modo).

Característica: Diretivas de compilação condicional (#ifdef etc)
Java: Não.
C#: Sim.

Característica: Destrutores
Java: Não, mas o método Finalize pode ser usado, Garbage Collection é o grande mestre para este tipo de situação, o desenvolvedor não tem que se preocupar com este tipo de situação.
C#: Sim. E tem que sempre destruir, pois o Garbage Collection não é efetivo.

Característica: Padronização por algum organismo internacional
Java: Sim, JCP (http://jcp.org) Empresas que fazem parte do JCP, na intenção de padronização:

Mais empresas que estão envolvidas com a Java
J2SE e J2EE
Apache Software Foundation
BEA Systems
Borland
Fujitsu Limited
Google
Hewlett-Packard
IBM
Intel
Doug Lea
Nortel Networks
Oracle
Red Hat middleware LLC
SAP
SAS Institute Inc.
Hani Suleiman
Sun Microsystems


J2ME
BenQ
Jean-Marie Dautelle
Ericsson AB
IBM
Intel
Motorola
Nokia
NTT DoCoMo
Orange France
Philips
Research In Motion
Samsung
Siemens
Sony-Ericsson
Sun Microsystems
Vodafone

C#: Sim. Submetido e aceito pelo ECMA (http://www.ecma.ch).

Característica: Chama APIs do Windows e DLLs
Java: Não. Mesmo o suporte “nativo” de alguns compiladores é extremamente limitado pela falta de ponteiros na linguagem.
C#: Sim.

Característica: Chama objetos COM/COM+
Java: Realmente é meio limitado, mas falar que não tem é muito forte, pois existem algumas implementações no mercado que funciona (http://j-integra.intrinsyc.com/support/com/doc/servlet_com/ServletToComPlusExample.html). Mas dizer que não tem é muito forte.
C#: Sim.

Característica: Cria objetos COM/COM+
Java: Não.
C#: Sim.

Característica: Inspirado no C/C++
Implementação: Boa parte da sintaxe de ambas as linguagens foi inspirada no C/C++, especialmente declaração de variáveis, funções e estruturas de controle.

Característica: Orientação a objetos
Implementação: Ambas as linguagens suportam conceitos de programação orientada a objetos com a palavra reservada class.

Característica: Herança
Implementação: Herança simples de classes a partir de ancestral comum e herança múltipla de interfaces.

Característica: Gerenciamento de memória
Implementação: Automático, com “coletor de lixo”.

Característica: Tipagem forte
Implementação: Todas as atribuições tem os tipos validados. Os “casts” são sempre verificados em tempo de execução. Não é possível violar o sistema de tipos.

Característica: Compila para código intermediário
Implementação: Sim. No caso da Microsoft compila para “Intermediate Language” e no Java para “bytecode”.

Característica: Tratamento de erro
Implementação: Exceptions, Mas o Visual Studio não critica se não implementar, NetBenas critica na hora e gera o refactory na hora da critica acertando o código.

Característica: Reflections
Implementação: Ambas as linguagens suportam “reflections”.

Característica: Unicode
Implementação: Ambas as linguagens usam o padrão Unicode para representar caracteres e strings.

Característica: Classe que não pode ser herdada
Implementação: “final” em Java; “sealed” em C#.

Característica: Campo constante
Implementação: “static final” em Java; “const” em C#.

Característica: Operador que verifica compatibilidade de tipos
Implementação: “instanceof” em Java; “is” em C#.

Support technologies
Distribution protocol
.Net: DCOM, SOAP
Java: RMI/IIOP/SOAP/Corba

Firewall
.Net: ISA*
Java: JBOSS/GlassFish/Weblogic/Websphere

HTML page caching
.Net: ISA*, ASP.NET
Java: Servlet/JSP

Presentation tier technologies
Infrastructure
.Net: IIS
Java: JBOSS/GlassFish/Weblogic/Websphere

Programming model
.Net: ASP.NET
Java: Servlets, JSP

Middle tier technologies
Infrastructure:
.Net: COM+
Java: EJB, Corba,

Programming tool
.Net: Visual Studio.NET
Java: NetBeans (Sun Open Source)/Eclipse (IBM Open Source)/JBuilder Borland(IBM)/Visualstudio/BlueJ/TextPed/JDeveloper (Oracle)

Security API
.Net: COM+ Security Call Context
Java: JAAS/Java SE Security

Message Queue API
.Net: MSMQ
Java: JMS 1.0

Asynchronous components
.Net: Queued (COM+)
Java: Message driven beans (EJB 2.0 +)

Naming and Directory
.Net: ADSI
Java: JNDI

Data tier technologies
Distributed transaction
.Net: MS-DTC
Java: JTS

Relational DB API
.Net: ADO.NET
Java: JDBC 2.0

Hierarchical DB API
.Net: ADO.NET
Java: JDBC 2.0

Database storage
.Net: SQLServer**
Java: Oracle/SQLService/MySql/Access/Firebird,HS LDB,IBMB2,mSQL,PostgreSQL,SQL-Server,TinySQL,ZODB

Mainframe DB connectivity
.Net: HIS*
Java: Java Connectors

Scripts
.Net: Silverlight
Java: JavaFX

Mobile
.Net: Windows Mobile
Java: J2ME

Plataforma
.Net: Windows
Java: Solaris, Windows, Linux, Unix

segunda-feira, 6 de agosto de 2007

Web do Futuro...JavaFX, Silverlight e Flash


Na minha humilde opinião o futuro da internet será construído entre estas 03 tecnologias JavaFX, Silverlight e Flash. A flexibilidade, robustez e designer simples e bonito irão deixá-las em evidência e vai demorar um bom tempo para aparecer outra tecnologia para web com estas características.
Com este tipo de tecnologia vc passa a ter toda a flexibilidade que já existia no desktop sem a necessidade de Ájax e outras coisas mais, ou seja, vc dá "o poder" possível para sua aplicação. Eu acho que demorou muito para este tipo de evolução, mas ela está ai e vem forte..... Adeus html....
Engenheiros, arquitetos e programadores de software, fiquem atentos....

A Sun anunciou hoje a JavaFX, plataforma para desenvolvimento de aplicações multimídia.
A JavaFX possui dois componentes principais: a linguagem JavaFX Script e o sistema JavaFX Mobile para dispositivos móveis. As novidades foram divulgadas na JavaOne 2007, evento da Sun para desenvolvedores.
A JavaFX Script permitirá a criação de aplicações que rodarão em qualquer dispositivo equipado com JRE (Java Runtime Environment), a tradicional máquina virtual usada por aplicativos Java. Com nova linguagem, a idéia da Sun é simplificar o desenvolvimento de RIAs (Rich Internet Applications) na plataforma Java. Todos os componentes da JavaFX Script serão licenciados sob a GPL, em regime de código aberto.
O sistema JavaFX Mobile é voltado para celulares, handhelds e outros dispositivos móveis. Para acelerar o desenvolvimento do novo sistema, a Sun adquiriu tecnologias da empresa SavaJe, especializada soluções de mobilidade.
Com o anúncio, a Sun entra de vez no mercado de plataformas para desenvolvimento de RIAs. Atualmente, a Adobe é a empresa líder nesse mercado, com o Flash. Recentemente, a Microsoft entrou nessa área com a plataforma Silverlight. Existem ainda algumas alternativas mantidas por comunidades, como o projeto OpenLaszlo, a linguagem Ruby e ambientes para desenvolvimento em Ajax.
fonte


As outras tecnologias


Ferramentas


Exemplos de Aplicações
http://www.musicpinboard.com/musicpinboard.jnlp
http://sellmic.com/lab/dev/jfx/clock/webstart/JFXClock.jnlp


Script JavaFX
http://sellmic.com/lab/dev/jfx/clock/Clock.fx