480 likes | 585 Views
.NET & C#. Sandra CHAVES Sylvain CUAZ DESS GI SRR 2002-2003 IMA - Université Grenoble 1. Plan. Origine de .NET .NET Le langage C# Les alternatives Conclusion. Origine de .NET. 1995 : Microsoft se tourne vers le net
E N D
.NET & C# Sandra CHAVESSylvain CUAZ DESS GI SRR 2002-2003 IMA - Université Grenoble 1
Plan • Origine de .NET • .NET • Le langage C# • Les alternatives • Conclusion .NET & C#
Origine de .NET • 1995 : Microsoft se tourne vers le net • gros compromis pour vite produire des outils et technologies basés sur l’Internet • tentative de ramener un peu d’ordre avec le concept DNA .NET & C#
DNA • 3 niveaux • Active Server Pages pour la présentation, • Objets métiers en COM au milieu, • Une base de donnée pour le bas. • Concept sain, mais difficile à mettre en oeuvre • D’autres plateformes offrait de bien meilleures solutions (Unix, J2EE) • essentiel pour Microsoft de résoudre les limitations de DNA .NET & C#
Le remplaçant • 1998 : début de Next Generation Windows Services (NGWS). • Développement confidentiel • NGWS rebaptisé .NET le 22 Juin 2000 .NET & C#
.NET : une plateforme logicielle • Description • Le framework .NET & C#
Description • Plateforme logicielle : programmes ne cible pas une combinaison matériel/OS mais .NET • => marcheront partout où est implémenté .NET • environnement indépendant d'un langage • But : écrire des programmes qui interopère facilement et de façon sécurisé. .NET & C#
Description • .NET nom collectif pour des logiciels variés qui sont construit sur la plateforme .NET • produits : Visual Studio.NET, Windows.NET Server, … • services : Passport, HailStorm, … • Les composants qui constituent .NET-la-platforme sont appelés le Framework .NET. .NET & C#
.NET Framework • 2 parties principales: • 1. La CLR (Common Language Runtime) • 2. Un ensemble hièrarchique de bibliothéques de classes .NET & C#
La CLR • Le “moteur d’exécution” de .NET • Les caractéristiques : • Conversion IL -> code natif • Gestion Mémoire (garbage collection) • Vérifie et applique la sécurité • Charge et exécute les programmes .NET & C#
Intermediate Language • Indépendant du CPU • Indépendant du langage • => chaque langage choisi un sous-ensemble • Code accessible depuis d’autres langages • => respect de la Common Language Specification (CLS) compilation Exécution par la CLR Code source IL .NET & C#
Managed Code • code qui cible .NET • contient des informations supplémentaires (metadonnées) pour se décrire • => CLR peut garantir la sécurité, l’interopérabilité… .NET & C#
Common Type System • sert à décrire les types indépendamment du langage => • type-fidelity : permet à des types d'un langage d'interagir avec des types d'un autre langage • type-safety : garanti que le code n'accède pas à des zone mémoires interdites .NET & C#
Unmanaged Code • .NET peut utiliser du code sans métadonnées : • non « géré » • peut utiliser la bibliothéque de .NET • peut compiler en IL • ne peut bénéficier du GC • natif • pour de meilleures performances • par exemple WinForms .NET & C#
Assemblies • Briques des programmes .NET • unité fonctionnelle atomique • Collection de code et de métadonnées • Contient un Manifest, qui décrit • son nom • sa version • la liste des fichiers • les dépendances • les fonctions fournies… .NET & C#
Module • Code compilé sans Manifest • Sert à modularisé le développement .NET & C#
JIT • La CLR utilise la compilation Just-In-Time • Chaque méthode appelée est compilée en code natif • appels suivants n’ont pas à être recompilés • Qq problèmes : exige des resources • mémoire • processeur .NET & C#
JIT • 2 compileurs JIT: • un normal : optimise pas mal, mais intensif au niveau de la mémoire et du processeur • un "EconoJIT” : optimise pas aussi bien, mais requiert moins de ressources • Promesse d’un 3eme : un compileur pre-JIT • = un compileur normal ! • Le seul plus : compile à l’installation => pas besoin de distribuer du code spécifique pour chaque plateforme .NET & C#
Attributes • Façon flexible et extensible de modifier l’environnement à la compilation ou à l’exécution • Marquer une fonction comme étant obsolète => warning à la compilation • Attacher un auteur à chaque bout de code => on interroge ces attributs à l’exécution .NET & C#
La bibliothéque de Classes • Namespace : ensemble de classes • La racine des namespaces est System • Contient les types basiques comme Byte, Double, Boolean, and String, Object… • Tous les objets dérivent de System.Object • value types ≠ objets • Moyens efficace de convertir des value types en objets .NET & C#
Côté client • L’ensemble des classes est assez complet : • Collections • File • Screen • network I/O • Threading • XML • Connection aux bases de données… • Windows Forms alternative au développement traditionnel pour Windows .NET & C#
Côté serveur • Web Services : composant sur un serveur web utilisé par : • Une application • Un autre Web Service .NET & C#
Web Services • SOAP (Simple Object Access Protocol) • RPC qui utilise XML sur HTTP • WSDL (Web Service Description Language) • décrit la structure des messages • UDDI (Universal Description, Discovery and Integration) • annuaire global des services web .NET & C#
Annuaire UDDI Recherche service d’info sur WallStreet WSDL Je fournis des services d’info sur WallStreet WSDL AppA SOAP Web Services WSDL WebServiceA WSDL .NET & C#
Plan • Présentation générale de C# • Syntaxe du langage • Les plus de C# .NET & C#
I. Présentation générale • Nouveau langage de Microsoft • Langage orienté objet • Ressemble à C++ • Utilise les classes définies dans .NET • Pas une partie de .NET, langage comme un autre • Permet d’utiliser les concepts de .NET proprement .NET & C#
II. Syntaxe du langage • Définition d’une classe • Définition d’une méthode • Principales instructions • Types valeur et référence .NET & C#
Définition d’une classe namespace namespaceName { using Namespace(s); [access] [sealed | abstract] class NomClasse [: Classe, Interface(s)] { [définition de la classe] } } • Accessibilité à la classe public private protected internal protected internal .NET & C#
Définition d’une méthode • Une méthode [access] [new] [static] [abstract] [sealed] [extern] [virtual | override] [TypeRetour | void] NomMethode ([TypeParam param]) [: base ([param])] { [corps de la méthode] } • La méthode Main public static [int | void] Main([String[] args]){ [corps de la méthode] } .NET & C#
public class Parent{ public void DoStuff(string str) { Console.WriteLine("In Parent.DoStuff: "); } } public class Child: Parent { public void DoStuff(string str) { Console.WriteLine("In Child.DoStuff: "); } } public class VirtualTest { public static void Main(string[] args) { Child ch = new Child(); ch.DoStuff("Test"); ((Parent) ch).DoStuff("Second Test"); } } .NET & C#
Méthode m(), liste arguments A, une instance I dont type à la compilation est C et le type àl’exécution est R (R = C ou sous classe de C) • lors de l’appel de méthode m() sur I • Recherche méthode dans C (peut être héritée) • Si la méthode de C non virtuelle, on l’appelle • Si la méthode de C virtuelle, on recherche méthode de même signature la plus dérivée que R peut appeler .NET & C#
Principales instructions • if • while • do • for • switch • Foreach foreach (typeObj identifiant in collectionObj) action; .NET & C#
Types valeur et référence • Type référence • créé sur le « tas » (grâce à new) • libéré par le ramasse miettes • Type valeur • créé sur la pile • supprimé au retour d’un appel de méthode • pas sous la responsabilité du ramasse miettes • Déclaration : mot-clé struct (au lieu de classe) .NET & C#
III. Les plus de C# • Structures • Le boxing/unboxing • Les properties • Les attributs • Les indexeurs • Les délégués • Pointeur et code non protégé: unsafe code • Le versionning .NET & C#
Structs • Mot-clé struct • Objets de type valeur • Déclaration des mêmes types de membres qu’une classe possible • Pas d’héritage possible • Peut implémenter des interfaces • La visibilité par défaut = protected .NET & C#
Le boxing / unboxing • Conversion type valeur <-> type référence • Boxing (type valeur -> type référence) : une instance de type objet allouée et la valeur copiée dans cet objet • Unboxing (type référence -> type valeur) : . Vérifie que le type de la valeur de l’instance et le type du type valeur voulu correspondent . sort la valeur de l’instance • ex : object box = 123; int i = (int)box; .NET & C#
Les properties • extension des champs (objet.prop) • Ne définit pas d’emplacement mémoire • Définit des accesseurs décrivant instructions à exécuter • propriétés en lecture, écriture ou lecture/écriture • public class User { private string name; public string Name{ set { name = value; } // ecriture } } .NET & C#
Les attributs • un moyen d'insérer des annotations (i.e méta-données) • Ex: [Serializable]: Similaire à l'implémentation de l'interface java.io.Serializable de Java. • Peut créer ses propres attributs en sous-classant System.Attribute .NET & C#
[AttributeUsage(AttributeTargets.All)] public class HelpAttribute: Attribute { private string url; public HelpAttribute(string url) { this.url = url; } } [Help("http://www.mycompany.com/.../Class1.htm")] public class Class1 { public void F() {} } class Test { static void Main() { Type type = typeof(Class1); object[] arr = type.GetCustomAttributes(typeof(HelpAttribute), false); HelpAttribute ha = (HelpAttribute) arr[0]; Console.WriteLine("Url = {0}", ha.Url); } } .NET & C#
Les indexers • Permet à un objet d’être indexé • Exemple : peut accèder aux éléments d’une pile sans dépiler les éléments • déclaration similaire à la déclaration d’une property • différences : . nom de la propriété est « this » . Paramêtre représentant l’indexe • ex : public object this[int index] { get { … } set { … } } .NET & C#
Les délégués • proche des pointeurs de fonction en C ou C++ • Encapsule 1 methode ou plus : «callable entity» • Pour methode d’instance, callable entity = 1 instance et la méthode à appliquer sur l’instance • Pour methode statique, callable entity = la methode • L’appel à la méthode = appel au délégué auquel on fournit les bons paramêtres • Déclaration, instanciation, appel: • delegate [type | void] delegateName ([type param]*); • delegateName d = new delegateName (nomFonction); • D(param); .NET & C#
Unsafe code • déclare des pointeurs (noté type*) • void* = pointeur vers un type inconnu • Du code « unsafe » doit être marqué avec le mot-clé « unsafe » • Pointeurs ne sont pas gérés par le GC • un pointeur peut être null • opérateurs • & adresse d’une variable • * déréférencement • [] indexe un pointeur • ==, !=, <, >, <= et => pour comparer des pointeurs .NET & C#
Le versionning • possibilité d'exécuter plusieurs versions différentes d'une même classe • les programmes C# référencent statiquement des bibliothèques de classes à l'aide de leur nom mais aussi de leur version • Une nouvelle version est • source compatible : si du code qui en dépend doit être recompilé pour marcher • binary compatible : si du code qui en dépend marche sans rien avoir à faire .NET & C#
Les alternatives • J2EE (JOnAS, JBoss) • Mono (Ximian) • Compilateur C# • CLR • Bibliothéques • Très actif • DotGnu (FSF) • Remplaçant complet de .NET • Fonctionalités de HailStorm • Pas très actif .NET & C#
Microsoft .NET vs. J2EE • Offrent les mêmes fonctionnalités • Seule ≠ de .NET : indépendant du langage • + : paradis pour dévelopeur • - : enfer pour chef de projet • La barrière Java est vite franchie .NET & C#
Conclusion • Microsoft se vante de la portabilité et de l’ouverture mais : • Si app accède à des services natifs « pour la performance » alors réduit à une app Windows • Exemple : WinForms • Peut faires des extensions propriètaires • cf J++, HTML, WMP plug-in, … .NET & C#
Références • http://arstechnica.com/paedia/n/net/net-1.html • http://www.osnews.com/topic.php?icon=36 • http://www-adele.imag.fr/~donsez/cours/ • http://microsoft.com/net • http://www.linuxdevices.com/files/misc/prasad-28oct01.html .NET & C#
Références • http://www.dotnetguru.org/article.php?sid=18 • http://tutorials.beginners.co.uk/index/category/87 • http://www.jaggersoft.com/csharp_standard/ • http://www.go-mono.com/ • http://dotgnu.org/ .NET & C#