Windows NT/2000/XP Enjeux et contraintes techniques Septième partie Présentation de.NET C. Casteyde Document diffusé sous licence GNU FDL
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Pourquoi.NET ? ● L'API Windows est riche mais hétéroclite : – base Win32, GDI, – OLE/COM, – scripting, Visual Basic, – XML, Web. ● Un empilement de bibliothèques et de technologies
Pourquoi.NET ? ● De nombreuses difficultés pour les programmeurs (pointeurs, gestion de la mémoire) ● Types de données hétéroclites : – chaînes : LPCSTR, LPWSTR, BSTR, – temps : FILETIME, SYSTEMTIME, DOSTIME, time_t, struct tm, DATE, en UTC ou local. ● Des encapsulations qui multiplient la complexité : – chaînes : CString (Unicode ou ASCII), CComBSTR, bstr_t, – temps : CTime, COleDateTime. ● Des fonctions éparpillées et / ou redondantes
Visual Basic vieillissant ● VB6 a été très utilisé dans le monde (RAD) ● Il est à la base des scripts ASP ● Mais il est dépassé : – monothreadé, – typage faible, – syntaxe laxiste, – fonctionnellement limité (APIs inaccessibles).
Émergence des services Web ● Microsoft devait apporter une solution pour contrer Java ● Besoin d'intégration au niveau des technologies serveur ● Développement d'applications Web Intranet / sites commerciaux
Les objectifs ● Fournir une plate-forme de développement unifiée ● Être indépendant des langages ● Fournir une API complète et cohérente ● Faciliter la vie des développeurs de tous bords ● Fournir une technologie Web cohérente ● Intégrer les dernières avancées technologiques ● Être compatible avec l'existant
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Architecture générale ● Technologie de compilation de code intermédiaire ● Utilisation d'un langage intermédiaire (« IL ») ● Interprétation et compilation à la volée (« Common Language Runtime ») ● Basée sur une bibliothèque complète et commune aux différents langages («.NET Framework ») ● Passerelles d'interopérabilité avec les anciennes bibliothèques
Schéma architecture if (i<j) System... Intermediate Language Code natif i = 2 If i = j Then... JIT csc vbc.NET Framework Windows API Common Language Runtime Interop
Machine virtuelle ● La CLR charge et exécute l'IL ● Compile à la volée si nécessaire ● Fournit un garbage collector performant ● Fournit les fonctions de base d'interopérabilité ● Isole les applications ● Isole les domaines d'application (« Application Domains »)
Code managé ou non managé ●.NET distingue deux types d'objets : – les objets managés (objets.NET), – les objets non managés (natifs). ● Les objets managés bénéficient : – du garbage collector, – des extensions.NET aux langages. ● Visual C++ permet de faire du C++ managé ou du C++ « standard »
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Le garbage collector ● Le garbage collector de la CLR est : – performant, – complexe mais documenté, – contrôlable applicativement. ● Il sait traiter les références circulaires ● Le revers de la médaille : – il n'est disponible que pour le code managé, – difficultés pour contrôler la destruction des objets, – performances des programmes très variables.
Algorithme du garbage collector ● Le GC ne se déclenche que lorsque tous les threads sont dans un état stable ● Il maintient une liste d'objets directement accessibles par le programme ● Il parcours cette liste et construit récursivement l'arbre des objets accessibles ● Les autres objets sont déclarés « détritus »
Algorithme du garbage collector ● Les objets inaccessibles sont détruits ● Le tas est compacté : – les objets sont déplacés en mémoire, – toutes les références du programme sont mises à jour. ● À des fins d'optimisations, le garbage collector utilise la notion de génération : – les objets les plus récents sont parcourus en premier, – les objets qui résistent à une passe sont de plus vieille génération.
Schéma du Garbage Collector Garbage a b Accessibles A a; Long f() { A b=new A }
Gestion des destructeurs ● Les objets qui doivent libérer des ressources implémentent la méthode Finalize ● Ils sont replacés dans une liste d'objets « f-reachable » par le garbage collector ● Ils sont « finalisés » sur un thread séparé ● Ils redeviennent inaccessibles après finalisation ● On ne maîtrise toujours pas la libération des ressources externes (objets COM,...)
Destruction explicite ● Pour contrôler explicitement la durée de vie des objets, il faut : – implémenter la méthode Dispose de IDisposable, – appeler cette méthode applicativement. ● La boucle est bouclée : – un oubli revient à un ressource leak classique (mais temporaire), – il est souvent nécessaire d'utiliser un compte de références en cas d'objets partagés.
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
La bibliothèque.NET ● Le « Framework.NET » couvre presque toute l'API ● L'encapsulation fournie est hiérarchique ● Chaque groupe fonctionnel est dans un espace de nommage (« Namespace ») ● La racine est le namespace « System » ● La bibliothèque est extensible par import de code non managé
Les namespaces.NET System Text ServiceProcess Security Threading Trace Net IO Resources Diagnostics Configuration Collections Globalization Runtime Reflection Graphics
Fonctionnalités de base ● System contient l'objet Console permettant de faire les entrées / sorties en ligne de commande ● Diagnostics contient l'objet Trace qui permet d'envoyer des messages au débogueur ● IO contient les objets nécessaires aux entrées / sorties sur fichiers ● Graphics contient les objets nécessaires pour la réalisation d'application graphiques
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Architecture Web ● IIS sait traiter des scripts ASP.NET ● Les pages ASP.Net peuvent contenir des scripts inlinés ou seulement référencés ● Elles sont compilées une seule fois ● Le code est invoqué pour générer le code HTML ● Un cache de sortie peut être utilisé pour optimiser
Schéma Web IIS Script.NET Navigateur Client Web Cache de page Page ASP Objet.NET Objet.InnerHTML =... Runtime.Net
Pages ASP.NET ● Un en-tête permet de déclarer la page et les modules utilisés ● Le code de traitement des événements de la page est écrit dans un script ● Le script génère le contenu HTML des objets de la page ● Le code HTML référence ces objets
Exemple de page ASP.NET void Page_Load(Object sender, EventArgs, EvArgs) { MonObjet.InnerHtml = "Coucou !" }
Les domaines d'application ● Une même application peut définir des domaines d'application ● Les objets d'un domaine ne peuvent accéder aux autres domaines ● Isolation des services vis-à-vis des bogues ● Utilisé par ASP.NET pour séparer les clients
Schéma domaines d'application IIS Service Web Application Domain 1 Application Domain 2
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Le langage C# ● Étymologiquement, c'est C++ ++ ● C'est une copie de Java à la sauce Microsoft ● Complètement orienté objet ● Pas de préprocesseur ● Utilisation intensive d'attributs (méta code)
La syntaxe de C# ● Le C# utilise la même syntaxe que C++ et Java ● Il prend en compte la casse des caractères ● Comme en Java, le point d'entrée est la méthode statique « Main » de la classe de l'application ● La directive « using » permet de simplifier l'accès aux fonctionnalités des namespaces
Hello World // Introduit les fonctionnalités de System : using System; // Classe de l'application : class MonApp { // Fonction principale : public static void Main() { // Équivalent de System.Console.WriteLine : Console.WriteLine("Hello World!"); }
Plan ● Les objectifs de.NET ● Architecture ● Gestion des ressources ● La bibliothèque ● Fonctionnalités Web ● Présentation du langage C# ● Conclusion
Les objectifs atteints ● En résumé,.NET c'est : – le regroupement de toutes les technologies Windows, – une uniformisation de l'API Windows, – une hiérarchisation des fonctionnalités, – une refonte complète de VB (multithread, objet, API), – un nouveau langage (C#), – un environnement de développement (Visual Studio), – une intégration à IIS.
Les avantages de.NET ● C'est un RAD efficace et puissant ● Il fournit une API uniforme et cohérente ● Facile à programmer ● Relativement performant ● Sécurité mémoire assurée (garbage collector, isolation des applications, machine virtuelle) ● Forte orientation Web
Les inconvénients ● Remise à zéro des compteurs : – pratique du langage à acquérir, – bibliothèque à ré-apprendre. ● Perte de tous les programmes VB : – nécessité de recoder 50% en moyenne. ● Non portable et propriétaire – sécurité des données, – pérennité des programmes (ex VB). ● Inadapté à certains projets (performances)
Le choix.NET ● Choisir.NET impose donc : – formation des anciens développeurs, – engagement fort envers Microsoft (alternative : Mono). ● Environnement de prédilection pour : – sites Web, – applications graphiques simples, – maquettage. ● Pour les autres applications, il faut évaluer les inconvénients (temps réel, performance...)