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#