Вы находитесь на странице: 1из 7

Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1

Plan

Chapitre 1 „ Architecture du .NET Framework

„ Le Common Typing System (CTS)


„ Les types valeur

Notions fondamentales „ Les types référence

du „ Les classes et les objets

.NET Framework „ La conversion de types

Mohamed Romdhani
INSAT, Octobre 2007 2
M. Romdhani, Septembre 2007

70-536 Chapitre 1 70-536 Chapitre 1

Vue d'ensemble du .NET Framework Composants du .NET Framework

„ Common Language Runtime


Visual
C++ C# Perl J# …
Basic „ Bibliothèque de classes du .NET Framework
Services Web XML Interface utilisateur „ ADO.NET : données et XML
ASP.NET „ Formulaires Web et les services Web XML
ADO.NET : donné
données et XML
„ Interface utilisateur pour Windows

Bibliothè
Bibliothèque de classes du .NET Framework

Common Language Runtime

COM+
Message
(transactions, partitions, IIS WMI
Queuing
regroupement des connexions)
connexions)

Win32

M. Romdhani, Septembre 2007 3 M. Romdhani, Septembre 2007 4

70-536 Chapitre 1 70-536 Chapitre 1


Bibliothèque de classes du .NET
Common Language Runtime Framework

Prise en charge de la bibliothè


bibliothèque de classes de base

Prise en charge multithread Marshaleur COM System.Runtime.


System System.Security
InteropServices
Vérificateur de type Gestionnaire d'exceptions System.Net System.Text System.Globalization

System.Reflection System.Threading System.Configuration


Moteur de sécurité
curité Moteur de débogage
System.IO System.Diagnostics System.Collections
Compilateur MSIL Gestionnaire Garbage
en code natif de code collector

Chargeur de classes

M. Romdhani, Septembre 2007 5 M. Romdhani, Septembre 2007 6

1
Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1 70-536 Chapitre 1


Système de types communs Comparaison des types valeur et
(CTS, Common Type System) référence

„ Le système de types communs prend en charge


les types valeur et référence „ Variables de type „ Variables de type
valeur : référence :
„ Contiennent directement „ Stockent des références
leurs données à leurs données (connues
comme objets)
„ Chacune dispose
de son propre jeu „ Deux variables référence
Type
Type de données peuvent référencer le
même objet
„ Les opérations sur l'une
n'affectent pas les „ Les opérations sur l'une
autres peuvent affecter les autres
Type
Type valeur
valeur Type
Type référence
référence

M. Romdhani, Septembre 2007 7 M. Romdhani, Septembre 2007 8

Comparaison des types valeur définis par


70-536 Chapitre 1 70-536 Chapitre 1

l'utilisateur et des types valeur intégrés Builtin value Types avec les alias C#
„ Types entiers
„ System.SByte (sbyte)
„ System.Byte(byte)
Types
Types valeur
valeur „ System.Int16 (short)
„ System.Int32 (int)
„ System.UInt32 (uint)
„ System.Int64 (long)

Définis
Définis par
par „ Types réels
Types
Types intégrés
intégrés „ System.Single (float)
l'utilisateur
l'utilisateur „ System.Double (double)
„ System.Decimal (decimal)
„ Exemples de types „ Exemples de types
valeur intégrés : valeur définis par „ Type caractère
l'utilisateur : „ System.Char (char)
„ int
„ float „ enum „ Type boolean
„ System.Boolean (Boolean/bool)
„ struct
„ Autres types
„ System.IntPtr (none) : Platform-dependentN/APointer to a memory
addressSystem.
„ DateTime (date)
M. Romdhani, Septembre 2007 9 M. Romdhani, Septembre 2007 10

70-536 Chapitre 1 70-536 Chapitre 1

Déclaration des structures Déclaration des énumérations


„ Syntaxe : „ Exemple : „ Syntaxe : „ Exemple :
using System; class Values{
struct nom_structure { enum identifier [: base-type ]
// structure personne
enum Temperatures {
// attributs struct personne{ {
WickedCold = 0,
// propriétés private string _nom; enumerator-list
private int _age; FreezingPoint = 32,
// constructeurs };
public string nom{ get {return _nom;} LightJacketWeather = 60,
// méthodes set {_nom=value;} SwimmingWeather = 72,
} }
BoilingPoint = 212,
public int age{ get {return _age;} „ Les énumérations améliorent la
„ Il y a de grandes similarités entre set {_age=value;} lisibilité du code en structurant }
la déclaration d’une structure et des listes de valeurs static void Main( ) {
}//nom
celle d’une classe. Cependant, il // Constructeur System.Console.WriteLine("Freezing point of
n’y a pas d’héritage dans le cas public personne(string NOM, int AGE){ water: {0}", (int) Temperatures.FreezingPoint );
des structures
_nom=NOM;_age=AGE; System.Console.WriteLine("Boiling point of
}//constructeur water: {0}", (int) Temperatures.BoilingPoint );
„ Les structures sont des types // TOString }
valeur alors que les classes sont
public override string ToString(){
des types référence }
return "personne("+nom+","+age+")";
}//ToString
}

M. Romdhani, Septembre 2007 11 M. Romdhani, Septembre 2007 12

2
Chapitre 1- Introduction aux technologies J2EE

Comparaison entre les types valeur et les


70-536 Chapitre 1
Déclaration et libération des variables
70-536 Chapitre 1

types référence référence

„ Types valeur „ Types référence „ Déclaration des variables référence


„ La variable
contient la valeur z La variable contient une
directement coordinate
référence aux données coordinatec1;
c1;
„ Exemples : c1
c1==new
newcoordinate();
coordinate();
char, int z Les données sont c1.x = 6.12;
•• 6.12
6.12 4.2
4.2
c1.x = 6.12;
stockées dans une zone c1.y
c1.y==4.2;
4.2;
séparée de la mémoire
string
string mol;
mol; „ Libération des variables référence
int
int mol;
mol; mol
mol == "Hello";
"Hello";
mol
mol == 42;
42; c1
c1 == null;
null;
•• Hello
Hello
42
42 •• 6.12 4.2
6.12 4.2

M. Romdhani, Septembre 2007 13 M. Romdhani, Septembre 2007 14

70-536 Chapitre 1 70-536 Chapitre 1


Comparaison de valeurs et comparaison
de références Références multiples au même objet

„ Comparaison de types valeur


„ == et != comparent des valeurs „ Deux références peuvent faire référence au même objet
„ Deux façons d'accéder au même objet en lecture/écriture
„ Comparaison de types référence
„ == et != comparent les références, pas les valeurs

c1 ••
2.3
2.3 7.6
7.6
c2 ••
•• 1.0
1.0 2.0
2.0
coordinate
coordinate c1=
c1= new
new coordinate(
coordinate( );
);
Différent coordinate
coordinate c2;
c2;
c1.x
c1.x == 2.3;
2.3; c1.y
c1.y == 7.6;
7.6;
•• 1.0 2.0 c2
c2 == c1;
1.0 2.0 c1;
Console.WriteLine(c1.x
Console.WriteLine(c1.x ++ "" ,, "" ++ c1.y);
c1.y);
Console.WriteLine(c2.x
Console.WriteLine(c2.x ++ "" ,, "" ++ c2.y);
c2.y);
M. Romdhani, Septembre 2007 15 M. Romdhani, Septembre 2007 16

70-536 Chapitre 1 70-536 Chapitre 1


Utilisation de références comme paramètres
de méthode Built-in Reference Types
„ Les références peuvent être utilisées comme paramètres
„ Lorsqu'elles sont passées par valeur, les données référencées „ Il y a de l’ordre de 2500 « built-in » types référence dans le.NET
peuvent être modifiées Framework

„ Parmi les types référence les plus communément utilisés


„ System.Object
22 33 33 44 „ System.String
„ System.Text.StringBuilder
•• „ System.Array
„ System.IO.Stream
static
static void
void PassCoordinateByValue(coordinate
PassCoordinateByValue(coordinate c)
c) „ System.Exception
{{
c.x++; c.y++;
c.x++; c.y++; „ Le type System.Object
}} „ The Object type is the most general type in the Framework. You
can convert any type to System.Object, and you can rely on any
type having ToString, GetType, and Equals members inherited
from this type.
loc.x
loc.x == 2;
2; loc.y
loc.y == 3;
3;
PassCoordinateByValue(loc);
••
PassCoordinateByValue(loc);
Console.WriteLine(loc.x
Console.WriteLine(loc.x + " , "" ++ loc.y);
+ " , loc.y);

M. Romdhani, Septembre 2007 17 M. Romdhani, Septembre 2007 18

3
Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1 70-536 Chapitre 1

String et StringBuilder Arrays et Stream


„ Strings of type System.String are immutable in .NET. „ How to create and sort arrays
„ That means any change to a string causes the runtime to create a new string // C#
and abandon the old one. That happens invisibly, and many programmers // Declare and initialize an array.
might be surprised to learn that the following code allocates four new strings int[] ar = { 3, 1, 2 };
in memory: // Call a shared/static array method.
string s; Array.Sort(ar);
s = "Les GL"; // "Les GL" // Display the result.
Console.WriteLine("{0}, {1}, {2}", ar[0], ar[1], ar[2]);
s += " sont"; // "Les GL sont"
s += " les"; // " Les GL sont les"
„ How to Use Streams
s +=" meilleurs de l’INSAT"; // "Les GL sont les meilleurs de l’INSAT "
Console.WriteLine(s); „ Tous les streams héritent de System.IO.Stream.
„ Les types de streams : FileStream, MemoryStream, StreamReader, et
„ The StringBuilder solution is the most flexible StreamWriter
„ The default constructor creates a buffer 16 bytes long, which grows as // C#
needed. You can specify an initial size and a maximum size if you like. // Create and write to a text file
System.Text.StringBuilder sb = new System.Text.StringBuilder(30); StreamWriter sw = new StreamWriter("text.txt");
sb.Append("Les GL"); // Build string. sw.WriteLine("Hello, World!");
sb.Append(" sont "); sw.Close();
sb.Append(" les "); // Read and display a text file
sb.Append(" meilleurs de l’INSAT"); StreamReader sr = new StreamReader("text.txt");
string s = sb.ToString(); // Copy result to string. Console.WriteLine(sr.ReadToEnd());
Console.WriteLine(s); sr.Close();
M. Romdhani, Septembre 2007 19 M. Romdhani, Septembre 2007 20

70-536 Chapitre 1 70-536 Chapitre 1

Exception handling Extension des classes de base

„ Exceptions are unexpected events that interrupt normal execution of „ Syntaxe de dérivation de classe à partir d'une classe de base
an assembly.
class Token
Token
class Token
Token
„ Exemple {{ Classe
Classeddérivée
érivé
rivée Classe
Classede
debase
base «« concret
concret »»
// C#
...
...
StreamReader sr = new StreamReader("text.txt");
try { }}
Console.WriteLine(sr.ReadToEnd()); class
class CommentToken:
CommentToken: Token Token CommentToken
CommentToken
} {{
catch (Exception ex) { «« concret
concret »»
...
... Deux-
Deux -points
Deux-points
// If there are any problems reading the file, display an error message
Console.WriteLine("Error reading file: " + ex.Message); }}
}
finally { „ Une classe dérivée hérite de la plupart des éléments de sa
// Close the StreamReader, whether or not an exception occurred classe de base
sr.Close();
} „ Une classe dérivée ne peut pas être plus accessible que sa
classe de base

M. Romdhani, Septembre 2007 21 M. Romdhani, Septembre 2007 22

70-536 Chapitre 1 70-536 Chapitre 1


Appel des constructeurs de classe de
Définition de méthodes virtuelles
base
„ Les déclarations de constructeurs doivent utiliser le mot clé
base „ Syntaxe : Déclarez-les comme étant virtuelles (virtual)

class
class Token
Token
{{ class
class Token
Token
protected {{
protected Token(string
Token(string name)
name) {{ ....
.... }} ...
...
... ...
}} public
public int
int LineNumber(
LineNumber( ))
class {{ ...
...
class CommentToken:
CommentToken: Token
Token }}
{{
public public
public virtual
virtual string
string Name(
Name( ))
public CommentToken(string name)
CommentToken(string name) :: base(name)
base(name) {{ }} {{ ...
...
... ...
}} }}
}}

„ Il n'est pas possible d'accéder à un constructeur de classe de


base privé par une classe dérivée „ Les méthodes virtuelles sont polymorphes

„ Utilisez le mot clé base pour qualifier la portée de


l'identificateur
M. Romdhani, Septembre 2007 23 M. Romdhani, Septembre 2007 24

4
Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1 70-536 Chapitre 1

Déclaration d'interfaces Implémentation d'interfaces multiples

„ Syntaxe : Utiliser le mot clé interface pour déclarer une interface „ Une classe peut implémenter zéro ou plusieurs interfaces

interface
interface IToken
IToken IToken
IToken IVisitable
IVisitable
{{
string «« interface
interface »» «« interface
interface »»
Le string Name(
Name( );
);
Lenom
nomdes
desinterfaces
interfacesdoit
doit }}
doit
doitcommencer
commencerpar
parlalamajuscule
majuscule««II»» interface IVisitable
interface IVisitable
{{
void
void Accept(IVisitor
Accept(IVisitor v);
v);
}}
interface
interface IToken
IToken class
IToken
IToken class Token:
Token: IToken,
IToken, IVisitable
IVisitable Token
Token
{{ {{ ...
...
«« interface
interface »» }} «« concret
concret »»
int
int LineNumber( );
LineNumber( );
string LineNumber(
LineNumber( ))
string Name(
Name( );
);
}} Name(
Name( ))
„ Une interface peut étendre zéro ou plusieurs interfaces
„ Une classe peut être plus accessible que ses interfaces de base
Absence
Absencededespé
sp écificateur
spécificateur Absence
Absencededecorps
corps
d'accè
d'accès de
„ Une interface ne peut pas être plus accessible que ses interfaces
d'accès demméthode
éthode
de base
„ Une classe doit implémenter toutes les méthodes d'interface
héritées
M. Romdhani, Septembre 2007 25 M. Romdhani, Septembre 2007 26

70-536 Chapitre 1 70-536 Chapitre 1


Implémentation explicite de méthodes
Implémentation de méthodes d'interface
d'interface
„ Utilisation du nom qualifié complet de la méthode d'interface
„ La méthode d'implémentation doit être la même que la méthode
d'interface
class
class Token:
Token: IToken,
IToken, IVisitable
IVisitable
„ La méthode d'implémentation peut être virtuelle ou non virtuelle {{
string
string IToken.Name( ))
IToken.Name(
{{ ...
...
}}
void
void IVisitable.Accept(IVisitor
IVisitable.Accept(IVisitor v)
v)
class
class Token:
Token: IToken,
IToken, IVisitable
IVisitable {{ ...
...
{{ Même
Mêmeaccè
acc ès
accès }}
public
public virtual string
virtual string Name(
Name( )) Même
Mêmetype
typede
deretour
retour }}
{{ ...
... Même
Mêmenom
nom
}} Mêmes
Mêmesparamè
param ètres
paramètres
public
public void
void Accept(IVisitor
Accept(IVisitor v)v)
{{ ...
... „ Restrictions relatives à l'implémentation explicite des méthodes
}} d'interface
}}
„ Il n'est possible d'accéder aux méthodes que par l'interface
„ Il est impossible de déclarer des méthodes comme étant virtuelles
„ Il est impossible de spécifier un modificateur d'accès
M. Romdhani, Septembre 2007 27 M. Romdhani, Septembre 2007 28

70-536 Chapitre 1 70-536 Chapitre 1

Commonly used interfaces Partial classes and Generics

„ Les interfaces les plus communément utilisées „ Nouveautés du .NET 2.0


„ IComparable : Implemented by types whose values can be ordered; for „ Les partial classes permettent de définir une même classes à travers
example, the numeric and string classes. des définitions partielles exprimées dans des fichiers séparés
„ IComparable is required for sorting. „ La généricité est le retour aux vieilles « Template de classes de C++ »
„ IDisposable Defines methods for manually disposing of an object. This afin d’améliorer la qualité des programmes (Typage connu à la
interface is important for large objects that consume resources, or compilation) et leur performance (liaison statique lors de la compilation)
objects that lock access to resources such as databases.
„ IConvertible Enables a class to be converted to a base type such as „ Exemple de déclaration et d’utilisation d’un type générique
Boolean, Byte, Double, or String. „ Déclaration : class Stack<T>{ ….}
„ ICloneable Supports copying an object.IEquatable Allows you to „ Utilisation : Stack<Employee> mapile = new Stack<Employee>();
compare to instances of a class for equality. For example, if you „ Generics support four types of constraints:
implement this interface, you could say "if (a = = b)".
1. Interface Allow only types that implement specific interfaces to use your
„ IFormattable Enables you to convert the value of an object into a generic.
specially formatted string. This provides greater flexibility than the base
2. Base class Allow only types that match or inherit from a specific base class
to use your generic.
3. Constructor Require types that use your generic to implement a
parameterless constructor.
4. Reference or value type Require types that use your generic to be either a
reference or value type.

M. Romdhani, Septembre 2007 29 M. Romdhani, Septembre 2007 30

5
Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1 70-536 Chapitre 1

Création de délégués Utilisation de délégués

„ Un délégué permet d'appeler une méthode indirectement „ Pour appeler un délégué, utilisez la syntaxe
„ Il contient une référence à une méthode
d'une méthode
„ Toutes les méthodes appelées par le même délégué doivent
avoir des paramètres et une valeur de retour identiques Aucun
Aucun corps
corps
de
de méthode
méthode

public
public delegate
delegate void
void StartPumpCallback(
StartPumpCallback( );
);
...
...
StartPumpCallback
StartPumpCallback callback;
callback;
Method1() ...
...
DoWork() { callback
callback == new
new
{ ¬StartPumpCallback(ed1.StartElectricPumpRunning);
¬StartPumpCallback(ed1.StartElectricPumpRunning);
Délégué
Délégué ...
?
...
...
... de } callback(
de callback( );
);
MethodX(); Aucun
Aucun appel
appel ici
ici
MethodX
MethodX
... Method2()
} { Appel
Appel ici
ici
...
}
M. Romdhani, Septembre 2007 31 M. Romdhani, Septembre 2007 32

70-536 Chapitre 1 70-536 Chapitre 1

Fonctionnement des événements Définition d'événements


„ Définition d'un événement
„ Éditeur
„ Déclenche un événement pour avertir tous les public
public delegate
delegate void
void StartPumpCallback(
StartPumpCallback( );
);
objets intéressés (les abonnés) private
private event
event StartPumpCallback
StartPumpCallback CoreOverheating;
CoreOverheating;

„ Abonné
„ Fournit une méthode à appeler lorsque l'événement „ Abonnement à un événement
est déclenché
PneumaticPumpDriver
PneumaticPumpDriver pd1
pd1 == new
new PneumaticPumpDriver(
PneumaticPumpDriver( );
);
...
...
CoreOverheating
CoreOverheating +=
+= new
new StartPumpCallback(pd1.SwitchOn);
StartPumpCallback(pd1.SwitchOn);

„ Notification d'un événement aux abonnés

public
public void
void SwitchOnAllPumps(
SwitchOnAllPumps( )) {{
if
if (CoreOverheating
(CoreOverheating !=
!= null)
null) {{
CoreOverheating(
CoreOverheating( );
);
}}
}}

M. Romdhani, Septembre 2007 33 M. Romdhani, Septembre 2007 34

70-536 Chapitre 1 70-536 Chapitre 1

Présentation des attributs Application d'attributs

„ Les attributs sont : „ Syntaxe : utilisez des crochets pour spécifier un attribut
„ des balises déclaratives qui transmettent
des informations au runtime ;
[attribut(paramètres_positionnels,paramètre_nommé=valeur,
[attribut(paramètres_positionnels,paramètre_nommé=valeur, ...)]
...)]
„ stockés avec les métadonnées de l'élément associé. élément
élément

„ Pour appliquer plusieurs attributs à un élément,


„ Le .NET Framework offre des attributs prédéfinis vous pouvez :
„ Le runtime contient du code permettant d'examiner „ spécifier plusieurs attributs en les séparant par
les valeurs des attributs et d'agir sur elles des crochets ;
„ utiliser une seule paire de crochets en séparant
chaque attribut par une virgule ;
„ pour certains éléments, tels que les assemblys, spécifier
explicitement le nom de l'élément associé à l'attribut.

M. Romdhani, Septembre 2007 35 M. Romdhani, Septembre 2007 36

6
Chapitre 1- Introduction aux technologies J2EE

70-536 Chapitre 1 70-536 Chapitre 1

Attributs prédéfinis courants Utilisation de l'attribut Conditional


„ Sert d'outil de débogage
„ .NET offre de nombreux attributs prédéfinis
„ Provoque la compilation conditionnelle des appels de méthode, selon
„ Attributs généraux la valeur d'un symbole défini par le programmeur
„ Attributs d'interopérabilité COM „ Ne provoque pas la compilation conditionnelle de la méthode
elle-même
„ Attributs de gestion des transactions using
using System.Diagnostics;
System.Diagnostics;
„ Attributs de génération de composants destinés ...
...
à un concepteur visuel class
class MyClass
MyClass
{{
[Conditional
[Conditional ("DEBUGGING")]
("DEBUGGING")]
public
public static
static void
void MyMethod(
MyMethod( ))
{{
...
...
}}
„ Restrictions des méthodes }}

„ Doivent avoir un type de


retour void
„ Ne doivent pas être déclarées comme override
„ Ne doivent pas provenir d'une interface héritée

M. Romdhani, Septembre 2007 37 M. Romdhani, Septembre 2007 38

70-536 Chapitre 1 70-536 Chapitre 1

Utilisation de l'attribut DllImport Conversion dans C#


„ Avec l'attribut DllImport, vous pouvez :
„ C# permet la conversion implicite dans le cas du widening conversion
„ appeler du code non managé dans des DLL à partir
d'un environnement C# ; // C# int i = 1;
double d = 1.0001;
„ baliser une méthode externe pour indiquer qu'elle
réside dans une DLL non managée. d = i; // Conversion allowed.

„ Manières de faire une conversion explicite en C#


using
using System.Runtime.InteropServices;
System.Runtime.InteropServices; „ L’opérateur de cast : (type)
...
... „ La classe System.Convert
public
public class
class MyClass(
MyClass( ))
{{ „ type.ToString, et type.Parse
[DllImport("MyDLL.dll",
[DllImport("MyDLL.dll", EntryPoint="MyFunction")]
EntryPoint="MyFunction")] „ type.TryParse, type.TryParseExact
public
public static
static extern
extern int
int MyFunction(string
MyFunction(string param1);
param1);
...
... „ Boxing et Out-Boxing
int result = MyFunction("Bonjour code non managé");
int result = MyFunction("Bonjour code non managé");
... „ int i = 123; object o = (object) i; //Boxing de i
...
}} „ int i = (int) o; //Out-Boxing de i

„ Conversion dans de types utilisateurs


„ ToString(), System.IConvertible, Operateur de conversion
M. Romdhani, Septembre 2007 39 M. Romdhani, Septembre 2007 40

Вам также может понравиться