Muito bem explicado cada "vantagem" do C# apontada neste artigo.
Facilitar a vida do usuario e programador e o lema da Microsoft.
Facilidades que cobrem a necessidade do conhecimento do
que esta sendo realizado. Que torna o mouse o unico dispositivo
necessario para o programador, e que torna a pergunta para a resolucao
de todos os seus problemas ser. Onde eu clico?

Abracos,
Fernando



----- Original Message -----
From: "Carlos H. P. da Silva" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, April 04, 2003 5:50 AM
Subject: [java-list] Re: Por que o C# é melhor que o Java, Parte I


>
>
> On 3 Apr 2003, at 9:36, Alexandre Monteiro Janoni wrote:
>
> > http://www.portaldaprogramacao.com/artigos2.asp?n=104
>
>
> Eu achei muito engracada a lista de "vantagens" do C#
> sobre o Java. Torcidas organizadas aa parte, vamos e-
> xaminar algumas delas:
>
>
>
>
> 1 - "Compilado para código nativo
> Java: Raramente. O Java é quase sempre interpretado."
>
> (Nosso amigo autor do artigo certamente nunca ouviu
> falar em JIT.)
>
>
> "C#: Sempre compilado para código nativo. A compilação
> pode ser feita na instalação ou na primeira execução
> do programa."
>
>
> Ou seja: perde-se a portabilidade do binario ao e-
> xecutar a 1a. vez. Isso eh "vantagem" ? Ok.
>
>
>
> 2 - "Todos os tipos derivados de ancestral comum"
> "Java: Não."
>
> Excelente! Se eu quiser um boolean apenas, ocupo um
> byte da memoria, e nao o espaco de  um objeto intei-
> ro, apenas para guardar um estado logico! Sem contar
> que eh um  objeto a menos  para o garbage collector
> tratar...
>
> "C#: Sim, todos os tipos são derivados de object."
>
> Duh... Novamente nao entendi a "vantagem". Mas vamos
> adiante...
>
> 3 - "'Boxing' e 'Unboxing' - conversão de tipos por
> valor para tipos por referência"
> "Java: Não. Exige conversão manual."
> "C#: Sim."
>
> Ei, estamos falando de uma linguagem fortemente tipa-
> da. Nao de Visual Basic. Conversao automatica signi-
> fica execucao mais lenta, porque a toda hora o runtime
> tem que ficar checando tipos de dados. Tipagem forte
> significa checagem sendo feita apenas em tempo de com-
> pilacao, nao de execucao - logo, o codigo roda mais
> rapido! Cade a "vantagem", que eu ainda nao vi ? Ok,
> vamos ser pacientes, devem estar todas no final...
>
>
> 4 - "Structs"
> "Java: Não."
> "C#: Sim."
>
> Essa eu confesso que nao entendi: ele estah se refe-
> rindo a estruturas do C ? Mas vem cah, se Java eh uma
> linguagem TOTALMENTE ORIENTADA A OBJETO, que sentido
> faz suportar estruturas de dados C-like ?
>
> 5 - "Enum"
> "Java: Não."
> "C#: Sim."
>
> Ok, aqui dou o braco a torcer: eu ateh que gostaria
> de ter tipos enumerados em Java. Com eles, dah para
> escrever um codigo mais claro e legivel do que ficar
> fazendo coisas do tipo:
>
> public final static int MINHA_CONSTANTE_1 = 1;
> public final static int MINHA_CONSTANTE_2 = 2;
>
> Mas nada que me tire o sono ou me faca correr deses-
> perado para o C#. Vamos adiante.
>
>
> 6 - "Passagem de parâmetros por referência"
>
> "Java: Não."
> "C#: Sim, de duas maneiras: ref para parâmetros de
> entrada e saída e out para parâmetro apenas de saída."
>
> Sinceramente ? Prefiro assim. Porque ? Bom, para
> qual plataforma voces acham que eh mais facil surgir
> uma falha de seguranca explorando justamente acessos
> ilegais aa areas de memoria ?
>
> 7 - "Propriedades"
>
> "Java: Não. Podem ser simuladas com métodos Get/Set,
> com alguma dificuldade."
>
> "C#: Sim, diretamente. A criação de "componentes"
> é bastante facilitada."
>
>
> Componentes visuais. Mas o conceito de componente
> vai alem de uma GUI com iconezinhos para arrastar
> num formulario. Um EJB eh um componente; uma servlet,
> um portlet, e por aih vai. Todos com propriedades e
> metodos, passiveis de customizacao. A unica diferen-
> ca eh que no Java nao se usa uma GUI (ateh existe su-
> porte a programar desta maneira em algumas ferramen-
> tas, como o Visual Age for Java, mas nunca usei - e
> sinceramente, nao me fez falta).
>
> Eu gostaria de saber se ele saberia escrever uma
> aplicacao em C# sem a GUI...   :)
>
>
> 8 - "Eventos e Delegates"
>
> "Java: Não, categoricamente (veja link abaixo)."
>
> "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."
>
>
> Novamente: isso eh plenamente possivel de ser feito
> em Java. Apenas, nao eh visual (selecionar um even-
> to num object inspector, e selecionar um metodo pronto
> ou escrever um novo).
>
>
> 9 - "Atributos"
>
> "Java: Não."
>
> "C#: Sim, permitindo "etiquetar" o código com
> características que são interrogadas em tempo
> de execução através de "reflection"."
>
>
> Vide acima.
>
>
> 10 - "Ponteiros"
>
> "Java: Não suportado diretamente, apenas indiretamente
> através de "referências"."
>
> "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."
>
>
>
> Alguem mais estah sentindo cheiro de falhas de se-
> guranca e codigo amarrado aa plataforma Windows ?
>
>
>
> 11 - "Sobrecarga de operadores"
>
> "Java: Não."
> "C#: Sim."
>
> Se com "sobrecarga de operadores" ele estah falando
> de sobrecarga de metodos, nosso amigo estah por fo-
> ra, mesmo...
>
>
> 12 - "Operadores de conversão"
>
> "Java: Não."
> "C#: Sim."
>
> Dispensaveis gracas aa forte tipagem da linguagem.
>
>
> 13 - "Operadores de cast"
>
> "Java: Um, sintaxe semelhante ao C/C++."
>
> "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."
>
> Ou seja, seu codigo pode compilar e ainda sim estar
> errado. Eh por isso que a tipagem forte do Java eh
> melhor. Ele realmente acha isso "vantagem" ?
>
>
> 14 - "Inteiros sem sinal"
>
> "Java: Não."
>
> "C#: Sim."
>
>
> Realmente, nao existem inteiros sem  sinal no  Java.
> Tambem nao  existem no  Pascal,  Visual Basic  e um
> monte de outras linguagens. Na verdade, soh existem
> inteiros  unsigned no  C e C++,  pelo que Lembro. E
> ainda assim o mundo nao acabou.
>
>
> 15 - "Tipo numérico pouco sujeito a erros de representação
> e arredondamento"
>
> "Java: Não."
>
> "C#: Sim, o tipo decimal pode ser usado em softwares
> que não toleram facilmente erros de arredondamento,
> como programas de contabilidade"
>
>
> java.text.NumberFormat
> java.util.Currency
>
> Simples e preciso.
>
>
> 16 - "Forech: loop para varrer arrays e coleções"
>
> "Java: Não."
> "C#: Sim."
>
> 17 - "Campo readonly"
>
> "Java: Não."
> "C#: Sim."
>
>
> Simples: nao implemente o metodo set do
> atributo. Duh...
>
>
> 17 - "Documentação integrada em XML"
>
> "Java: Não."
>
> "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."
>
>
> Ele jah ouviu falar de JavaDoc ?
>
>
> 18 - "Switch com strings"
>
> "Java: Não."
> "C#: Sim, facilitando o desenvolvimento."
>
>
> E diminuindo a performance. Internamente, o switch
> comparando strings eh construido de  forma diferen-
> te (e mais lenta) do que  usando um  literal  (int,
> char ou coisa que  o valha). Resta  saber o que eh
> melhor: ter uma  vez o conforto de usar  um string
> para controlar  um processo, ou escrever um codigo
> que gera um opcode  menor e execute mais rapido to-
> das as vezes.
>
>
>
> 19 - "Controle sobre "estouro de faixa" numérica"
>
> "Java: Não."
>
> "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."
>
> Ou seja, eh  um bypass do  mecanismo de  tratamento
> de excecao. Para quem jah estah  acostumado a lidar
> com try - catch, eh um superfluo. E quem nao estah,
> eventualmente vai ter que  se acostumar, porque to-
> dos os  outros tipos de erro geram excecoes, e  nao
> tem como desliga-las todas.
>
>
>
> 20 - "Funções com número variável de parâmetros"
>
> "Java: Não."
>
> "C#: Sim, de forma "tipada", com a palavra reservada
> params."
>
> Oh... Tem razao: eu nao consigo escrever codigo dubio
> e pouco legivel facilmente com Java. Que droga.
>
>
> 21 - "Formas do método Main"
>
> "Java: Uma."
>
> "C#: Quatro. O main pode aceitar um array de strings
> ou nada; pode retornar inteiro ou nada."
>
> Este eh o segundo ponto em que eu realmente acho que
> o Java peca: o metodo Main() nao faz qualquer retor-
> no ao sistema operacional sobre o status final da e-
> xecucao. Isso pode ser util no  caso de  execucao a
> partir de shell scripts no Unix.
>
>
> 22 - "Goto"
>
> "Java: Não."
>
> "C#: Sim, com a restrição de que não pode entrar em
> um bloco."
>
>
>
> Java nao tem GOTO! Java nao eh BASIC! Vamos todos
> dizer: AMEM!
>
> Qualquer curso de programacao serio jah aboliu o
> GOTO faz alguns anos. Seja em qual linguagem for.
> Eh altamente prejudicial para a legibilidade do
> codigo e modularizacao. Ateh em Cobol se proibe o
> uso de GOTO hoje em dia, e vem nosso amigo anunciar
> isso como "vantagem"... Soh se for para o Java.
>
>
>
> 23 - "Arquivo "executável" independente do namespace"
>
> "Um "package" Java obrigatoriamente está associado a
> um único arquivo ".class"."
>
> "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."
>
>
> E ajudando a manter o caos na hora de organizar o
> codigo...
>
> E francamente, de onde saiu esse "um package estah
> obrigatoriamente associado a um unico arquivo .class ?"
>
>
> 24 - "Especificadores de acesso"
>
> "Quatro."
>
> "Cinco. O internal, adicional, especifica acesso
> apenas no mesmo "assembly" (mesma DLL, a grosso modo)."
>
>
> Java eh independente de plataforma. Eh a sua principal
> caracteristica. Eu acho otimo que seja assim.
>
>
> 25 - "Diretivas de compilação condicional (#ifdef etc)"
>
> "Java: Não."
> "C#: Sim."
>
> Diretiva de compilacao para codigo binario que executa
> sem modificacao em qualquer plataforma ?
>
> 26 - "Destrutores"
>
> "Java: Não, mas o método Finalize pode ser usado."
>
> "C#: Sim."
>
> Quando nao se tem um bom garbage colletor...
>
> 27 - "Padronização por algum organismo internacional"
>
> "Java: Não. Duas submissões da Sun foram posteriormente
> retiradas."
>
> "C#: Sim. Submetido e aceito pelo ECMA (http://www.ecma.ch)."
>
>
> Java eh usado largamente pela industria de software,
> de  telefonia movel, meios academicos e cientificos.
> A sonda Sojourney rodava Java. Eh uma linguagem que
> se consagrou como um padrao de fato. Alguem aih sabe
> o que eh ECMA, por acaso ?
>
>
>
> 28 - "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."
>
>
> Vamos todos dizer, irmaos: AMEM por isso!
>
>
> 29 - "Chama objetos COM/COM+"
>
> "Java: Não."
>
> "C#: Sim."
>
> 30 - "Cria objetos COM/COM+"
>
> "Java: Não."
>
> "C#: Sim."
>
> Quem precisa de COM (M$) quando tem CORBA (open source) ?
>
>
>  "Existem alguns pontos importantes por trás dos tópicos acima:
>
>     * O C# implementa características interessantes do C++ que foram
> removidas no Java, como passagem de parâmetros por referência, enum,
> struct, sobrecarga de operadores, operadores de conversão e
> compilação condicional;"
>
>
> Tudo foi retirado com um proposito: tornar a linguagem
> universal e totalmente portavel. Nao foi por outro mo-
> tivo.
>
>
>     "* O C# tem vários recursos que melhoram a performance, como uso
> de "tipos por valor" (structs e enums) em situações simples onde o
> uso de uma classe seria muito "caro" e suporte direto a ponteiros;"
>
>
> E tem varias "vantagens" que podem jogar a performance no
> chao, como  a tipagem fraca (pior de todos, heranca maldi-
> ta do BASIC que  a Microsoft ateh hoje  insiste em manter
> nas suas linguagens, criando maus habitos de programacao)
> e os switches usando strings.
>
>
>
>     "* Suporte direto a componentes, através de a propriedades e
> eventos;"
>
>
> Java eh *todo componentes* - apenas nao sao visuais.
>
>
>
>     "* A unificação do sistema de tipos (tudo é derivado de object) e
> a conversão de valores para referências através de "boxing" são
> recursos que, ao mesmo tempo simplificam a programação, como também
> permitem melhores abstrações;"
>
>
> E jogam contra a performance.
>
>
>     "* Boa integração com código anterior escrito para Windows:"
>
>
>
> Mantendo voce atrelado aa plataforma Windows, nao por acaso.
>
>
>
>   "suporte a ponteiros, chamar DLLs, chamar objetos COM e criar
> objetos COM. Não é necessário abandonar o C# para usar alguma
> facilidade não contemplada pela biblioteca de classes;"
>
>
> Eh o trade-off que se faz por ficar atado ao Windows. Talvez
> para alguns isso seja aceitavel, mas nao para todos.
>
> No resumo deste testamento, fica a seguinte impressao: C#
> promete "facilitar a vida" do programador - mas soh do pro-
> gramador "desenhista de formularios"; aquele que realmente
> sabe programar, que conhece os pros e contras de cada tec-
> nologia, sabem que no geral, Java estah ganhando e facil,
> pelo menos no aspecto tecnico. Infelizmente, este canto de
> sereia da Microsoft seduz muita gente boa - e principalmente,
> muita gente que toma decisoes dentro de empresas. Cabe aa
> nos, que conhecemos a ferramenta que usamos e seu potencial,
> nos esforcarmos para que a verdade sempre se sobreponha ao
> marketing. Vamos trabalhar nesse sentido, sem radicalismos
> exagerados, sempre procurando embasar nossas opinioes em
> fatos e nao em emocao (o que eh muito dificil, eu sei bem).
> Isso nao eh torcida por time de futebol, eh nosso ganha-
> pao. Tambem nao eh religiao (pelo menos para mim), portanto
> respeitar diferencas de opiniao faz parte. Apenas, nao
> permitir que este tipo de material se torne "verdade"
> por conta de nosso silencio e omissao.
>
>
> Abracos, Carlos
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> historico: http://www.mail-archive.com/java-list%40soujava.org.br
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
>



------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a