Pages 1 | 2
"Java killer ?", "challenger", le
C# ne laisse pas indifférent. Forums de discussion, articles
de presse, simples utilisateurs ou programmeurs expérimentés,
pro-Java ou pas, les avis sont nombreux et ... divergents.
Si de l'avis général la plate-forme .Net est plutôt
prometteuse et bien conçue, la bataille fait rage au niveau
des langages, le terme "C# vs Java" est couramment repris
comme accroche de nombreux articles outre-atlantique.
Pour certains l'affaire est déjà entendue, ou presque.
C'est le cas de Robert X. Cringely, qui pourtant n'est pas un pro-microsoft.
Il précise d'ailleurs dans
son article que si le C# est sur la bonne voie, c'est surtout
dû au manque de compétitivité des concurrents
de Microsoft : Sun en prend pour son grade...
Pour d'autres le C# n'est pas aussi révolutionnaire qu'il
veut bien le faire croire, ses innovations sont peu nombreuses,
il n'est pas portable comme peut l'être Java et ne risque
donc pas d'effacer Java du jour au lendemain.
Plusieurs comparatifs C# / Java existent sur le web, mais c'est
de loin celui
rédigé par Dare Obasanjo (73 pages en version
imprimable tout de même) qui nous a paru le plus précis
et le plus complet. L'auteur a découpé son "article"
en cinq parties :
Les caractéristiques communes entre les deux langages, les
points communs avec de légères différences,
les concepts communs mais implémentés différemment,
il termine par les spécificités du langage C#, suivi
de celles du langage Java.
Au total 65 points de comparaison sont passés en revue,
code source à l'appui. Nous nous contenterons d'opérer
ici une sélection parmi les points les plus marquants.
Enfin, nous vous indiquerons pour terminer une sélection
de liens où vous pourrez trouver d'autres points de vue sur
ces deux langages.
Les similitudes
En java toutes les classes sont des sous-classes de java.lang.object.
En C# même chose, les classes sont des sous-classes de System.Object.
Comme nous allons le voir avec un traditionnel "HelloWorld",
les deux langages encapsulent leur fonction "main()".
Celle-ci est "static" :
HelloWorld en Java :
public class Bonjour
{
public static void main(String[] args)
{
System.out.println("Hello,
World !");
}
}
Le même en C# :
class Bonjour
{
static void Main(string[] args)
{
System.Console.WriteLine("Salut,
le monde!");
}
}
Les mots-clefs des deux langages sont eux aussi assez
proches.
En ce qui concerne la compilation, le C# et le Java fonctionnent
de la même manière. Le bytecode Java trouve son équivalent
avec le MSIL (Microsoft Intermediate Language), celui-ci est exécuté
par le CLR (Common Language Runtime), équivalent de la machine
virtuelle chez Microsoft. Le MSIL est alors traduit en language
natif via un compilateur JIT (Just in Time). Java peut lui aussi
compiler le bytecode en language natif via ce type de compilateur.
Enfin, l'héritage multiple n'est pas davantage permit en
C# qu'en Java.
Les ressemblances, à quelques détails
près
La syntaxe employée en C# pour l'héritage provient
du C++, elle diffère donc quelque peu avec celle utilisée
par Java, exemple avec une classe B héritant d'une classe
A :
En Java :
class B extends A implements
Comparable
{
int compareTo(){}
public static void main(String[] args)
{
System.out.println("Hello
World");
}
}
En C# :
using System;
class B:A, IComparable
{
int CompareTo(){}
public static void Main(String[] args)
{
Console.WriteLine("Hello
World");
}
}
On le voit les mots-clefs "extends" et "implements"
n'existent pas en C#.
Aux "package" Java, le C# répond par les "namespace"
(ensemble de classes). A la différence des "package",
les "namespaces" ne renseignent pas sur le stockage physique
des fichiers sources.
En Java comme en C# il est possible de poser des verrous exclusifs
sur une partie du code (un seul thread a le droit d'accéder
à un objet particulier à un moment donné).
Ici, seul le mot clef change :
En java :
public void withdrawAmount(int num)
{
synchronized(this)
{
if(num
< this.amount)
this.amount
-= num;
}
}
En C# :
public void WithdrawAmount(int num)
{
lock(this)
{
if(num
< this.amount)
this.amount
-= num;
}
}
Au chapitre des types de données, les différences
se situent au niveau du type "byte". Le type "byte"
en Java est signé et correspond au type "sbyte"
en C#. Le C# rajoute en plus des versions nons signées pour
les types int, long, short, elles se nomment "uint", "ulong",
et "ushort". Le type "byte" du C# n'est pas
signé.
Enfin, à condition de sacrifier rapidité d'exécution
et espace de stockage, le C# permet de stocker sans erreurs d'arrondis
les nombres décimaux, exemple :
decimal dec = 100.44m
double dbl = 1.44e2d
"m", "e", et "d"
signifient respectivement "nombre décimal", "notation
exponentielle" et "type double".
Pages 1 | 2
|