. Net & C# Chen Shan & Liu Ying Master 2 pro GI - SRR 2003-2004 Plan . NET Introduction Historique .NET Framework C# .NET Remoting . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 2 Qu’est ce que .Net? Une technologie prônée par Microsoft Une nouvelle plate-forme de développement logiciel Une version sur les architectures distribuées Un ensemble de spécifications Des nouveaux langages(C#, …) Le langage CIL(Commom Intermediate Langage) … . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 3 Historique Des 1998, Microsoft veut développer un nouveau produit pour résoudre les pbs de COM Le 13 février 2002 la première version exploitable de .NET est publiée En mars 2003, la version 1.1 du Framework .NET est disponible Fournisseurs de base de données(Oracle et ODBC) La sécurité XML/XSLT … . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 4 .NET Framework Introduction Assemblage Avantage Structure CLR Définition Rôle Bibliothèque de classes de base . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 5 Vue générale de .Net CLS ( Common Langage Specification) C #, VB.NET… Bibliothèque de classes de base ( ADO.NET, Forms, XML …) Implémentation du CLI Outils Infrastructure pour le développement d’application distribuées (COM+, .NET Remoting, ASP.NET) (Commom Langage Infrastructure) CLR (Common Langage Runtime) . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 6 Type d’applications Interface utilisateur Windows (Windows form) Application en mode console Windows Service Windows Service web Application web . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 7 Assemblages Avantages des assemblages Structure d’un assemblage . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 8 Avantages des assemblages L’enfer des DLLs résolu La base des registres n’est plus sollicitée Les assemblages sont infalsifiables Les assemblages sont prévus pour être portables Un assemblage peut être morcelé en plusieurs fichiers . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 9 Structure d’un assemblage Représentation physique d’un assemblage Assemblage Foo2.netmodule Métadonnées de type Foo1.exe Image.jpg Manifeste Ref ver Foo2 Ref ver Image.jpg Code CIL des méthodes des types méthodes des types Ressources (image, sons …) Code IL des méthodes des types . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 10 CLR Common Langage Runtime Le moteur d’exécution des applications .NET Actions: Compilation à l’exécution du code CIL Gestion des exceptions Gestion des domaines d’applications . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 11 Compilation à l’exécution du code CIL Assemblage Compilation JIT Langage source ------------------>code CIL -------------------------->langage machine JIT – Just In Time Compiler le méthode juste avant le premier appel Avantages Compiler qu’une fois le code source de haut niveau Distribuée sous forme d’assemblages Exécutable sur différents machines et différents OS . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 12 Compilation à l’exécution du code CIL 2 types de compilateurs Compilateur normal Effectuer nombre d’optimisations Mais gourmand en mémoire et en temps machine Compilateur économe Remplacer CIL par langage machine équivalent ngen.exe(Native Image Generator) . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 13 Gestion des exceptions Chercher le gestionnaire d’exception Si ne pas trouvé, terminer le programme Sérialiser et propager l’exception Parfois rattraper une exception . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 14 Gestion des domaines d’application un domaine d’application conteneur logique d’assemblage(s) Assemblages chargés par CLR Décharger un domaine d’application tout entier Garantir l’isolation des domaines d’applications . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 15 Bibliothèque de classes de base Environ 1400 classes Namespace : ensemble de classes La racine des namespaces : System les types basiques comme Byte, Boolean, Object… Les application graphiques (Windows Forms) System.Windows.Forms ADO.NET et XML . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 16 Les conceptions nouveaux La gestion du code durant l’exécution Indépendance du OS et du matériel sous-jacent Introduction d’une entité plus léger que processus Interaction entre un grand nombre de langages … . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 17 Le langage C# plan Introduction Types Structure d’un programme Membres Instructions Notations complémentaires . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 18 Introduction C# Nouveau langage créé pour .NET Hérite de C++ (Espace de nom:Namespace, pointeur: unsagecode, unsigned types) object Ressemble à Java Concepts clés : Stream Hashtable int Composants orientés MemoryStream FileStream Tout est objet Utilise les classes du framework .NET Exemple: Hello World double using System; class HelloWorld { static void Main( ) { Console.WriteLine("Hello world"); Console.ReadLine(); // Hit enter to finish } } csc HelloWorld.cs HelloWorld.exe . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 19 Introduction Modèle d’exécution MSIL compilation Code C# JIT Assemblage Code natif Runtime du système .NET CLR Code Natif Code Natif Code Natif . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying Code Natif 20 Types Un programme C# est une collection de type C# fournis un ensemble de types prédéfinis i.e. int, byte, char,string, object,… Les types sont Classes,interfaces,structures,délégués,énumérations Des données membres Des fonctions membres D’autres types Champs, constantes, tableaux, évènements Méthodes, opérateurs, constructeurs, propriétés, indexeurs Il y a 2 catégories de types:valeur et référence . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 21 Types Type Valeur Contient des données Ne peut être ‘null’ Primitives Enumérations Structures int i = 123; string s = "Hello world"; int i ; float x; enum State { Off, On } struct Point {int x, y; } Type référence Contient des références vers des objets Peut être ‘null’ Racine Chaîne Classes Interfaces Tableau Delegates i 123 s object string class Foo: Bar, IFoo {… } interface IFoo: IBar {… } string[] a = new string [10] delegate void Empty(); . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying "Hello world" 22 Types Bénéfice des types valeurs Pas d’allocation dans le tas, moins de travail pour le GC Meilleur utilisation de la mémoire Moins de référence indirecte . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 23 Types Types définis par l’utilisateur Enumerations enum Arrays int[], string[] Interface interface Type référence class Type valeur struct Pointeur de fonction . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying delegate 24 Types Enums Enums Grouper certaines constantes de même catégorie. Dérive de System.Enum •C# •Java public enum Color {red, green, black, blue}; public void setColor(int color) { public void setColor(Color color) { if (color != RED && color != GREEN && if (Enum.IsDefined(typeof(Color), color) { color != BLACK && color!=BLUE) { … } … } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 25 Types Interfaces Une interface définie un contrat Les interfaces permettent le polymorphisme Elle contient méthodes, propriétés, indexeurs, évènements Chaque classe or structure implémentant une interface doit supporter toute les parties du contrat Plusieurs classes et structures peuvent implémenter la même interface Une interface ne contient pas d’implémentation Elle doit être implémentée par une classe ou une structure . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 26 Types Classes Type référence défini par l’utilisateur Similaire aux classes C++ ou Java Héritage simple sur la classe Peuvent implémenter de multiples interfaces Contrôle d’accès public, private, internal, protected, protected internal Le mode par défaut est private Membres public class JvnServerImpl: MarshalByRefObject, IJvnLocalServer, IJvnRemoteServer { … }//class jvnServerImpl Constantes, champ (fields), méthodes, opérateurs (constructeurs et destructeurs) Propriétés, indexeurs, évènements Membres par classe (static) ou par instance Instantancié par l’opérateur new . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 27 Types Struct Similaire aux classes, mais Ideal pour des objets ‘légers’ int, float, double, etc., sont des structures Permet la définition de type primitifs par l’utilisateur Complex, point, rectangle, color, rational Héritage multiple des interfaces Même membres que les classes Contrôle d’accès Type valeur défini par l’utilisateur Hérite toujours d’objet public, internal, private Instancié par l’opérateur new . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 28 Types Delegates Un délégué (delegate) est un type référence qui défini la signature d’une méthode Quand il est instancié, un délégué peut faire référence à une ou plusieurs méthodes De manière intuitive : un pointeur sur une fonction dans le modèle objet Sert de base pour la gestion des évènements . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 29 Structure d’un programme Organisation des types Organisation physique Les types sont définis dans des fichiers Les fichiers sont compilés en modules Les modules sont regroupés en assemblage . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying Assembly Module(.dll/.exe) File Type 30 Structure d’un programme Assembly Désigner un ensemble de code/sources Comporte 3 parties: Un manifest Des classes Des meta-données . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 31 Structure d’un programme Espaces de noms Un nom de type doit être unique au sein d’un espace de nom (Namespace) Permet l’organisation logique des types Il n’y a pas de relation entre les espaces de noms et les fichiers (différence avec Java) . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 32 Structure d’un programme Espaces de noms Exemple C# namespace Irc { … namespace Jvn { … } //namespace Jvn }//namespace Irc Java pakage Jvn; public class JvnServerImpl{ … } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 33 Structure d’un programme L’import de bibliothèques C#(JvnServerImpl.cs) namespace Jvn { using System; using System.Runtime.Remoting; Java (JvnServerImpl.java) pakage Jvn; import java.rmi.*; public class JvnServerImpl { … } public class JvnServerImpl { … } } javac –classpath XX.class JvnServerImpl.java Variable d’environnement CLASSPATH csc \r:System.dll JvnServerImpl.cs . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 34 Structure d’un programme Méthode Main L’exécution d’un programme démarre à la méthode statique Main() Une seule méthode avec une de ces signatures par assemblage static static static static void Main() int Main() void Main(string[] args) int Main(string[] args) . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 35 Membres Plan Constantes Champ (fields) Opérateurs (constructeurs et destructeurs) Propriétés Indexeurs évènements . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 36 Membres Opérateur: Constructeur Implémenter les actions nécessaires à l’initialisation d’une instance de la classe Le même nom que la classe Ne retourne aucun paramètre C# public class JvnServerImpl { … private JvnServerImpl():base() { … } … } Java public class JvnServerImpl { … private JvnServerImpl { super(); … } … } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 37 Membres Opérateur: Destructeur Implémenter les actions nécessaire pour détruire une instance de la classe Le même nom que la classe, précédé du caractère ~ Ne peut pas être appelé directement public class JvnServerImpl { … private ~JvnServerImpl() { … } … } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 38 Membres Propriétés Une propriété est un champ virtuel • Ressemble à un champ, mais est implémenté par du code • Peut être read-only, write-only ou read/write • C# public class JvnCoordImpl { private int identification; public int Identification { get { return identification; } set { identification = value; } } } JvnCoordImpl coord = new JvnCoordImpl(); int id = coord.Identification; //get coord.Identification = id + 1; //set coord.Identifecation += 1; //get / set Java public class JvnCoordImpl { private int identification; public int getId() { return identification; } public void setId(int id) { this.id = id; } … } JvnCoordImpl coord = new JvnCoordImpl(); int id = coord.getId(); coord.setId(id + 1); . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 39 Membres Indexeurs Un indexeur permet à une instance d’être un tableau virtuel Peut être surchargé (i.e. indexé par int et par string) Peut être read-only, write-only ou read/write public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value;} } } ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]); . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 40 Membres Evènements C# supporte les évènements Basé sur la notion de délégué L’émetteur de l’événement, défini le délégué Les clients de l’évènement enregistrent le traitement à associer à l’évènement Appel de += et de -= sur les délégués Il ne peuvent pas créer les évènements Les délégués multicast permettent à plusieurs objets de s’enregistrer pour le même évènement . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 41 Membres Evènements • Exemple C# class Irc { … Button read_button = new Button(); read_button.Text = “read”); read_button .Click += new System.EventHandler(this.read_Click); … private void read_Click(object serder, EventArgs e) { … } … } Java public class Irc { … Button read_button = new Button(“read”) read_button.addActionListener (new readListener(this)); … } class readListener implements ActionListener { … public void actionPerformed (ActionEvent e) { … } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 42 Instructions Survol Expressions checked, unchecked lock using Conditionnels if Switch Boucles while do for foreach Sauts break continue goto return throw Exceptions try throw . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 43 Instructions Threads: synchronisation Lock Exclusion mutuelle Mis en oeuvre à l’aide de la classe System.Threading.Monitor(Wait(),PulseAll(), Pulse()) public class CheckingAccount { decimal balance; public void Deposit(decimal amount) { lock (this) { balance += amount; } } public void Withdraw(decimal amount) { lock (this) { balance -= amount; } } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 44 Instructions checked et unchecked Les instructions checked et unchecked permettent de contrôler le débordement dans les expressions arithmétique et les affectations checked force le contrôle unchecked supprime le contrôle Le mode par défaut est unchecked L’utilisation de la directive /checked du compilateur permet d’utiliser le mode checked par défaut . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 45 Instructions checked et unchecked using System; class CheckedTest { public static void Main() { int num = 5000; /* OVERFLOW I */ byte a = (byte) num; /* overflow detected only if /checked compiler option on */ /* OVERFLOW II */ checked { byte b = (byte) num; /* overflow ALWAYS detected */ } /* OVERFLOW III */ unchecked { byte c = (byte) num; /* overflow NEVER detected */ } }//Main } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 46 Instructions Exceptions C# public static JvnServerImpl JvnGetServer() { try { … } catch { … } finally { … } } Java public static JvnServerImpl JvnGetServer() throws RemoteException{ try { … } catch { … } finally { … } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 47 Notions complémentaires Classes et structures Boxing et unboxing Attributs Commentaires en XML . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 48 Classes et Structures Différences Class Type référence Structure Type valeur Hérite les types références Ne support pas l’héritage non-sealeds Peut définir le constructeur sans paramètre Pas de constructeur sans paramètre défini par l’utilisateur . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 49 Classes et Structures Similarités Chacune Est un type défini par l’utilisateur Peut implémenter plusieurs interfaces Peut contenir Données Fonctions Champs, constantes, événements, tableaux Méthodes, propriétés, indexeurs, opérateurs, constructeurs Définition de types Classes, structures, énumérations, interfaces, délégués . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 50 Classes et Structures Exemple struct SPoint { int x, y; ... } class CPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20); sp 10 20 cp CPoint 10 20 . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 51 Boxing et unboxing Boxing: type primitif(valeur) -> object(référence) UnBoxing:Opération inverse du boxing int i = 123; i object o = i; o int j = (int)o; 123 System.Int32 123 j 123 . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 52 Les attributs Un moyen d’insérer des annotations(i.e méta-données) Un moyen de fournir des informations au runtime dans le but d’exécuter des tâches additionnelles ou d’étendre les caractéristiques d’un type donné. Exemple: [MethodImpl(MethodImplOptions.Synchronized)]: Similaire au mot-clé synchronized de Java. [Serializable]: Similaire à l'implémentation de l'interface java.io.Serializable de Java. Peut créer ses propres attributs de Runtime en sous-classant System.Attribute . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 53 Commentaires en XML C# donne la possibilité de produire de la documentation en lien avec le code compilé C# permet d’écrire ces commentaires en XML Début du commentaire : /// Un document XML est généré lors de la compilation du code avec l’argument /doc . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 54 .NET Remoting plan Introduction Base du .NET Remoting Marshalling Client activated Server activated Configuration . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 55 .NET Remoting Introduction Infrastructure de l’architecture .NET Motivation: Invocation des méthodes sur des objets distants Ressemble à Java RMI . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 56 .NET Remoting Base du .NET Remoting Terminologie - Architecture Channels Deux Transports standard- http:// ou tcp:// Http:// - fonctionne avec les firewalls Tcp:// - “high speed”, format binaire Formatters Transformer les Messages en Stream Binaire Soap 1.1 “Compliant” Personnalisé Messages . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 57 .NET Remoting Marshalling Marshall by Reference Dérive de : System.MarshalByRefObject Accessible via des Proxy L’objet reste sur le serveur Marshall by Value Les objets sont sérialisés Attribute [Serializable] Implement ISerializable L’objet est recopié vers le client . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 58 .NET Remoting Client Activated Créé par le Client Le Client contrôle la durée de vie Lease : bail . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 59 .NET Remoting Server Activated Le serveur est responsable de la durée de vie de l’objet Configuration <wellknown mode=“SingleCall” ou “Singleton” type=“type,assembly” objectUri=“myobject” /> Programmation Créer un Type Wellknown Enregistrer sur le serveur . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 60 .NET Remoting Configuration par fichier Fichier de configuration <configuration> <System.Runtime.Remoting> <application> <service> <wellknown mode=“Singleton” type=“Namespace.Class,Assembly” objectUri=“URI”/> </service> Méthode : RemotingConfiguration.Configure(“config file”) La Méthode fonctionne coté serveur et coté client . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 61 .NET Remoting Configuration Dynamique Cache les informations de configuration aux utilisateurs Facile a déployer Nécessite une recompilation à chaque modification du paramétrage… . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 62 .NET Remoting objet distribué public class ServiceClass : MarshalByRefObject { private DateTime starttime; public ServiceClass() { Console.WriteLine("A ServiceClass has been created."); starttime = DateTime.Now; } ~ServiceClass() { Console.WriteLine("This object is being collected after " + (new TimeSpan(DateTime.Now.Ticks starttime.Ticks)).ToString() + " seconds."); } public DateTime GetServerTime() { Console.WriteLine("Time requested by a client."); return DateTime.Now; } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 63 .NET Remoting Coté serveur using System; using System.Diagnostics; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; public class ServerProcess { public static void Main(string[] Args) { RemotingConfiguration.Configure("server.exe.config"); Console.WriteLine("Press enter to stop this process."); Console.ReadLine(); } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 64 .NET Remoting Coté client using System; using System.Runtime.Remoting; public class Client { public static void Main(string[] Args) { RemotingConfiguration.Configure("Client.exe.config"); ServiceClass service = new ServiceClass(); Console.WriteLine(service.GetServerTime()); } } . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 65 .NET Remoting configuration de serveur <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="SingleCall" type="ServiceClass, ServiceClass" objectUri="RemoteObject" /> </service> <channels> <channel port="8080" ref="http" /> </channels> </application> </system.runtime.remoting> </configuration> . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 66 .NET Remoting configuration de client <configuration> <system.runtime.remoting> <application> <client> <wellknown type="ServiceClass, ServiceClass" url="http://localhost:8080/RemoteObject" /> </client> Declaration d‘un point de terminaison de type singleton <channels> <channel ref="http"> <clientProviders> <formatter ref="soap"/> <provider ref="propsetter" username="bob" writeToConsole="true"> domain="hello" /> </provider> </clientProviders> </channel> </channels> Canal associé avec application </application> <debug loadTypes="true" /> </system.runtime.remoting> </configuration> Encodeur de format associé avec un canal . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 67 .NET Remoting Demo Exemple Server Client . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 68 Quelques ressources http://msdn.microsoft.com http://windows.oreilly.com/news/hejlsberg_0800. html http://www.csharphelp.com/ http://www.csharp-station.com/ http://www.csharpindex.com/ http://msdn.microsoft.com/msdnmag/ issues/0900/csharp/csharp.asp http://www.hitmill.com/programming/dotNET/cshar p.html http://www.c-sharpcorner.com/ http://msdn.microsoft.com/library/ default.asp?URL=/library/dotnet/ csspec/vclrfcsharpspec_Start.htm . NET & C# - Master 2 pro (SRR) Chen Shan & Liu Ying 69