Vous êtes sur la page 1sur 48

.

NET & C#
Sandra CHAVES
Sylvain CUAZ
DESS GI SRR 2002-2003
IMA - Université Grenoble 1
Plan

I. Origine de .NET
II. .NET
III. Le langage C#
IV. Les alternatives
V. 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
compilation
Exécution par
Code source IL la CLR

 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) .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 :

1. non « géré »
• peut utiliser la bibliothéque de .NET
• peut compiler en IL
• ne peut bénéficier du GC
2. 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#
Web Services
Annuaire
UDDI

WSDL

Recherche serviceJe d’info


fournissur
desWallStreet
services d’info sur WallStreet
WSDL
WSDL

AppA
WebServiceA
WSDL SOAP
.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
1. Recherche méthode dans C (peut être
héritée)
2. Si la méthode de C non virtuelle, on l’appelle
3. 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
.NET & C#
comparer des pointeurs
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#

Vous aimerez peut-être aussi