Transcript .NET et C#
.NET & C#
Sandra CHAVES
Sylvain CUAZ
DESS GI SRR 2002-2003
IMA - Université Grenoble 1
Plan
I.
II.
III.
IV.
V.
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-laplatforme 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
Code source
IL
Exécution par
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 :
non « géré »
1.
•
•
•
peut utiliser la bibliothéque de .NET
peut compiler en IL
ne peut bénéficier du GC
natif
2.
•
•
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
créé sur le « tas » (grâce à new)
libéré par le ramasse miettes
Type
référence
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étadonné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#