.NET comme alternative à Java
Le framework .NET (prononcer Dotnet) est un environnement d'exécution de logiciel créé par Microsoft. Il fonctionne sur Windows et a un logiciel compatible sur Linux.
La version 4.5 est installée d'origine sur Windows 8. Elle permet de faire fonctionner les applications pour le bureau classique, à coté des applications du Modern UI qui ont WinRT en backend. Voir le schéma dans l'article sur le Modern UI.
.NET offre une bibliothèque de fonctions pour les interfaces graphiques, l'accès aux données, les réseaux et les applications Web, des compilateurs et une machine virtuelle.
Mono est une version pour Linux compatible avec .NET 2.0 réalisée par Novell. Après le rachat de Novell par Attachmate, l'équipe de développement de Mono a décidé de former une compagnie indépendante, Xamarin. Elle poursuit le projet Mono et fournit des versions commerciales pour les principaux OS de smartphone dont Android et iOS.
Mono est portable: il peut fonctionner sur tous les UNIX, sur MacOS et sur Windows. Il existe donc une version de .NET pour tous systèmes ce qui ouvre la voie aux applications Web sur cette plateforme.
Un avantage de Mono est qu'il est possible de compiler C# en code natif sous Linux ou Windows, le même code source exactement, de réaliser même des jeux comme le montre Unity qui s'est spécialisée dans le jeux sous Mono. Ils fonctionnent aussi sur les mobiles et les consoles de jeux.
Les composantes de .NET
Les programmeurs sous .NET intègrent un univers de systèmes et de composants à utiliser.
- WPF Windows Presentation Foundation. Une interface qui inclut le graphisme en 3D, utilisé par Aero sous Windows.
- WCF. Windows Communication Fondation. Un système de message pour la communication entre ordinateurs.
- WWF. Windows Workflow Foundation. Pour la gestion de tâches.
- CLR Common Language Runtime. Machine virtuelle qui exécute le code et permet de faire abstraction du matériel sur lequel il fonctionne.
- Bibliothèque de classes divisée en espaces de noms.
- CIL, Common Intermediate Language. Langage intermédiaire standardisé résultant de la compilation des langages évolués, interprété par la machine virtuelle CLR.
- Assembly. Une assembly enregistrée en fichier au format PE (Portable Executable) contient le code en language intermédiaire.
- Winforms Windows Forms. Composantes d'interface graphiques.
- Le langage XAML est intégré au système et permet de définir sous forme déclarative les interfaces graphiques.
En fait le programmeur est surtout concerné par le choix d'un langage de programmation et des outils pour le compiler ainsi que des API disponibles pour réaliser l'application.
Les langages suivants fonctionnent sur .NET: Ada, APL, Basic, C#, C++, Cobol, Eiffel, Fortran, Haskell, Oberon, Objective Caml, Pascal, Perl, Python, Ruby, Scheme, SmallTalk. Une liste complète est données dans l'article sur le CLI (voir liens en bas de page).
Faut-il utiliser Java ou .NET?
Pour réaliser une application actuellement faut-il choisir l'environnement Java ou .NET? Compatibilité et richesse des fonctionnalités sont les clés pour un meilleur choix, mais d'autres facteurs sont à prendre à compte.
Depuis novembre 2008, Java est sous licence Open Source, GPL au moins partiellement (ce n'est pas le cas de la version mobile).
Plusieurs langages de programmation on été portés sur cette plateforme et sont compilés en bytecode interprété par la JVM. Notamment Python et Ruby.
A partir de là, la question se pose: a-t-on encore besoin de Mono sous Linux, et faut-il opter pour un outil inspiré d'une technologie propriétaire de Microsoft et qui n'égalera jamais l'original, plutôt que pour une plateforme libre et entièrement compatible?
XAML ou JavaFX
Mono et .NET avaient un atout, c'était Silverlight, une technologie du Web utilisant une version allégée de .NET multi-navigateurs, et pour laquelle Mono offrait un port sous Linux, Moonlight, maintenant abandonné.
Mais Silverlight est abandonné dans l'interface Metro de Windows 8 et remplacé par HTML 5 + JavaScript ou XAML + C#. Que se soit XAML ou HTML 5, même si les principes sont différent, il est facile de décrire une interface.
De son coté, Java dispose JavaFX, que supportent les principaux outils de développement (voir en bas de page).
On peut dire que les deux plateformes disposent d'un outil de création d'interface utilisateur graphique efficace et qui améliore la productivité.
Les mobiles
Même si on programme sur le bureau, les mobiles sont un facteur à prendre en compte, car c'est un plus si on peut réutiliser son expérience éventuellement sur ces appareils. C'est aussi un domaine où les développements à venir seront les plus importants
La machine virtuelle Java, payante sur mobiles, est supplantée par Dalvik, un interpréteur alternatif pour Android et qui se trouve porté aussi sur d'autres OS.
Il est possible de programmer en C# sur Android grâce au port de .NET par Xamarin. C'est le langage de prédilection sur Windows Phone.
Vu l'importance d'Android, Java est le langage qui l'emporte sur les smartphones. L'alternative est ici avec Objective C d'iOS.
Conclusion
Java se présente avec les avantages de l'ancienneté: stabilité, communauté, documentation, outils de développement nombreux, tandis que .NET offre plus d'ouverture: presque tous les langages, des idées nouvelles,
La question de la compatibilité semble avec le temps s'estomper, les deux plateformes tendant à être de plus en plus portables et universelles.
Sous Windows 8, .NET est conservé pour les applications sur le bureau classique, mais est remplacé par un sous-ensemble pour les applications immersives de Metro. Et Metro est l'interface privilégiée pour les nouvelles applications Windows. Mais il en est de même pour Java. Donc si l'on cherche un portabilité universelle, HTML 5 peut être en fait la solution.
Informations et outils
Téléchargez l'EDI Visual Studio Express pour réaliser des applications fonctionnant sur .NET sur la page d'outils.
- Télécharger .NET.
- JSC. Recompile les assembly .NET en JavaScript, PHP ou Java.
Voir aussi...
- Liste des langages portés sous .NET.
- CIL et son bytecode. Le langage portable intermédiaire de .NET.

