haiuhaiuahiau Me faltam as palavras para elogiar sua resposta um tanto qto ironica a respeito de tentativa de comparação do incoparavel ....
Viva o JAVA!!!! huhuhuhuhuhu ----- Original Message ----- From: "Carlos H. P. da Silva" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, April 04, 2003 12: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] -------------------------------------------------------------------------