Framework .NET

Un article de Wikipédia, l'encyclopédie libre.

Le framework .NET est un composant logiciel pouvant être ajouté au système d'exploitation Microsoft Windows. Il peut être téléchargé sur le site de Microsoft et est également partiellement fourni dans certaines déclinaisons commerciales.(voir aussi .NET.)

Plusieurs langages sont disponibles tels que le C# (mélange de C++ et de Java), le J# (proche du Java, mais non compatible Java) et le Visual Basic .NET. Grâce à la disponibilité des spécifications techniques, différents acteurs sont libres d'ajouter le support pour un autre langage, ou un langage classique (notamment Cobol, Pascal, Fortran, Eiffel, Ada) ainsi que ASP.NET. D'ailleurs le langage Python sera sous peu utilisable grâce au projet IronPython alors que le PHP l'est déja grâce au projet Phalanger.

Microsoft a aussi développé une version allégée du framework pour le développement d'applications pour son système d'exploitation pour assistants personnels : le .NET compact framework.

Il existe aussi des implémentations libres de dot net, notamment Mono et DotGNU.

Le framework .NET est un composant installable sur les systèmes d'exploitation Microsoft Windows.

Il a pour but de faciliter la tâche des développeurs en proposant une approche unifiée à la conception d'applications Windows ou Web, tout en introduisant des facilités pour le développement, le déploiement et la maintenance d'applications.

Le framework gère tous les aspects de l'exécution de l'application :

  • il alloue la mémoire pour le stockage des données et des instructions du programme ;
  • il autorise ou interdit les droits de l'application ;
  • il démarre et gère l'exécution ;
  • il gère la ré-allocation de la mémoire pour les ressources qui ne sont plus utilisées.

C'est pour cela que le framework .NET est qualifié d'environnement « managé ».

Il est composé de deux blocs principaux : le CLR et la bibliothèque de classes .NET.

Sommaire

[modifier] CLR - Common Language Runtime

Icône de détail Article détaillé : Common Language Runtime.
Schéma explicatif du Common Language Infrastructure (CLI)
Schéma explicatif du Common Language Infrastructure (CLI)

Le CLR est à .NET ce que la JVM est à Java, c’est-à-dire une machine virtuelle, sans laquelle l'exécution de code .NET ne serait pas possible. À l'inverse de son concurrent, le framework .NET a été conçu pour permettre l'interopérabilité entre différents langages.

Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé en MSIL (Microsoft Intermediate Language). Ce code intermédiaire ne comporte aucune instruction relative au matériel (i.e. hardware) ou au système d'exploitation. Il ne peut donc pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement une application en IL, langage qui ressemble à l'assembleur, sans passer par un langage de dernière génération comme le C#.

Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (Common Type System)[1] et le CLS (Common Language Specification). Il apporte de nombreuses fonctionnalités comme le Garbage Collector (la mémoire utilisée par l'application lors de l'exécution est optimisée), la BCL (Base Class Library)[2], et le système de sécurité. Une fois le code présent dans le CLR, il va enfin pouvoir être compilé par le JIT Compiler (Just in Time) en langage natif de la machine.

Il existe trois types de JIT :

  • Pre-JIT : le code entier est directement compilé ;
  • Econo-JIT : le code est compilé par parties, et la mémoire libérée si nécessaire ;
  • Normal-JIT : le code n'est compilé que quand c'est nécessaire, mais est ensuite placé en cache pour pouvoir être réutilisé.

Quel que soit le type de JIT, le but est d'accélérer l'exécution du code en réutilisant dès que possible le cache. Pour voir ceci visuellement, c'est très simple. Il suffit d'écrire une simple application ASP.NET (Hello World par exemple). À la première exécution, le code est compilé. Par la suite et aussi longtemps que l'application ne subit pas de modifications, le cache sera utilisé, d'où une vitesse d'exécution bien plus rapide que lors de la première exécution.

Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les spécifications étant disponibles, il s'est trouvé un groupe de personnes ayant décidé de porter .NET sur Linux, donnant naissance à la plate-forme de développement libre Mono.

[modifier] Bibliothèques de classes .NET

Il y a trois couches au dessus du CLR, chacune comportant des classes apportant des fonctionnalités de plus en plus évoluées.

[modifier] Base Class Library

Dans la première couche se trouve la BCL, rassemblant des classes permettant les manipulations de chaînes de texte, la gestion des entrées/sorties, des communications réseaux, des threads et le design des interfaces utilisateur. Ces classes sont similaires à celles présentes dans l'API Java développée par Sun. Par exemple, la manipulation des chaînes est disponible dans la classe String, dans les deux langages; la différence étant qu'en Java il n'existe pas de type de base pour manipuler les chaînes (on manipule des objets 'String'), alors qu'en .NET, le type string (avec un 's' minuscule) a spécifiquement été défini.

[modifier] Data and XML Classes

La deuxième couche est composée de deux bibliothèques de classes d'accès aux données. Tout d'abord, ADO.NET, s'élevant sur les bases de l'ancien ADO (ActiveX Data Objects) utilisé par les développeurs ASP, et permettant l'accès sous format XML aux interfaces de bases de données SQL Server, ODBC, OLE DB, Oracle et Sybase, et bien sûr aux fichiers XML. Les XML Classes permettent de manipuler les données XML. On y trouve par exemple les classes XSLT permettant la transformation d'un document XML vers n'importe quel type d'autre document. Un autre exemple, il est très facile de charger un document XML dans une table, et vice versa, grâce au XML sous-jacent.

[modifier] XML Web Services, Web Forms, Windows Forms

La dernière couche, la plus élevée, est utilisée pour la création de Web Services, de pages Web, et d'applications Windows. Les deux premiers forment ASP.NET, là aussi une référence à l'ancien langage de programmation Web. Lorsque vous visitez des sites Internet, vous pouvez remarquer les pages se terminant par .aspx qui sont des pages Web écrites en .NET, tandis que les pages écrites en ASP se terminent en .asp (pour s'amuser on peut très bien modifier les configurations du serveur IIS de Microsoft pour modifier l'extension des fichiers ASP.NET alors que ce n'est pas une généralité).

[modifier] Structure d'une application .NET

L'unité de base d'une application .NET est appelée un assemblage (assembly). Il s'agit d'un ensemble de code, de ressources et de métadonnées. Un assemblage est toujours accompagné par un manifeste (assembly manifest) qui décrit ce qu'il contient : nom, version, types de données exposées, autres assemblages utilisés, instructions de sécurité. Un assemblage est composé de un ou plusieurs modules qui contiennent le code.

[modifier] Compilation et exécution d'une application .NET

Tout comme avec java, quand une application .NET est compilée, elle n'est pas compilée en code binaire machine, mais dans un code binaire intermédiaire MSIL. Une application consiste donc en un ensemble d'assemblages contenus dans un ou plusieurs fichiers exécutables ou fichiers DLL en MSIL. Au moins un de ces assemblages doit contenir un point d'entrée afin de démarrer l'application.

Quand l'exécution d'un programme démarre, le premier assemblage est chargé en mémoire. Le CLR commence par examiner les permissions demandées par cet assemblage et les compare à la politique de sécurité (security policy) du système. Puis, si l'assemblage est autorisé à s'exécuter, un processus est créé pour exécuter l'application. Le premier morceau de code nécessaire à l'exécution est chargé en mémoire et est compilé en code binaire natif par le compilateur JIT (Just-In-Time, juste à temps). Une fois compilé, le code est exécuté et stocké en mémoire sous forme de code natif, garantissant ainsi que chaque portion de code n'est compilée qu'une seule fois lors de l'exécution de l'application..

[modifier] .NET 3.0

Pour .NET 3.0, voir WinFX

Cette version du framework inclut Windows Workflow Foundation (WF), Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF) et Windows CardSpace[3].

[modifier] .NET 3.5

La version 3.5 du framework inclut le framework LINQ (Language INtegrated Query)[4] permettant des requêtes objet aussi bien sur des Data, des Collections, du Xml ou des DataSets. Elle intègre également le framework Ajax.Net avec de nouveaux protocoles (AJAX, JSON, REST, RSS, ATOM) et d'autres standards WS-*.

[modifier] Conclusion

.Net est une plateforme uniformisée et à vocation universelle. Elle facilite "nettement" le développement d'applications pour ceux qui maîtrisent la POO, proposant une hiérarchie d'objets ainsi qu'une harmonisation générale des API. Mais les programmes générés exigent des ordinateurs dotés d'une surcouche logicielle et donc devant être de plus en plus puissants.

[modifier] Notes

  1. (en) Common Type System
  2. (en) Base Class Library
  3. (en) Windows CardSpace
  4. (en) Language Integrated Query