LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
Dotnet csharp
1. .NET & C#
Sandra CHAVES
Sylvain CUAZ
DESS GI SRR 2002-2003
IMA - Université Grenoble 1
2. .NET & C#
Plan
I. Origine de .NET
II. .NET
III. Le langage C#
IV. Les alternatives
V. Conclusion
3. .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
4. .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
5. .NET & C#
Le remplaçant
1998 : début de Next Generation Windows
Services (NGWS).
Développement confidentiel
NGWS rebaptisé .NET le 22 Juin 2000
7. .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é.
8. .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.
9. .NET & C#
.NET Framework
2 parties principales:
1. La CLR (Common Language Runtime)
2. Un ensemble hièrarchique de
bibliothéques de classes
10. .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
11. .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)
Code source IL
compilation
Exécution par
la CLR
12. .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é…
13. .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
14. .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
15. .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…
16. .NET & C#
Module
Code compilé sans Manifest
Sert à modularisé le développement
17. .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
18. .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
19. .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
20. .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
21. .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
22. .NET & C#
Côté serveur
Web Services :
composant sur un
serveur web utilisé
par :
Une application
Un autre Web Service
23. .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
24. .NET & C#
Web Services
WebServiceA
SOAP
AppA
Recherche service d’info sur WallStreet
WSDL
WSDL
Je fournis des services d’info sur WallStreet
WSDL
Annuaire
UDDI
WSDL
25. .NET & C#
Plan
Présentation générale de C#
Syntaxe du langage
Les plus de C#
26. .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
27. .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
28. .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
29. .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]
}
30. .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");
} }
31. .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
32. .NET & C#
Principales instructions
if
while
do
for
switch
Foreach
foreach (typeObj identifiant in collectionObj)
action;
33. .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)
34. .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
35. .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
36. .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;
37. .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
}
}
38. .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
39. .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);
} }
40. .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 { … } }
41. .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);
42. .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
43. .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
44. .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
45. .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
46. .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, …