Vous êtes sur la page 1sur 25

M14 : POO

CS.Net
Formateur : Driouch
(cfmoti.driouch@gmail.com) Etablissement : OFPPT/DRGC/CFMOTI 24/06/2011 http://www.istahttp://www.ista-ntic.net/ http://www.driouchb.0fees.net/ http://www.driouchb.0fees.net/

www.istawww.ista-ntic.net

Plan
Notion dObjet Classe - Instanciation Encapsulation (Proprit et Mthodes daccs) Constructeurs (Constructeur de copie) Destructeur(Garbage Collector) Hritage (Surcharge Mthode/Oprateur Redfinition) Polymorphisme Les Exceptions Les Objets Courants(en .Net) Objet de collection Les Interfaces La persistance (Srialisation binaire, Objet et XML)
www.istawww.ista-ntic.net 2

Notion dobjet
Un objet est une entit cohrente rassemblant des donnes et du code travaillant sur ces donnes.

www.istawww.ista-ntic.net

Classe
Une classe est une description abstraite dun objet. Elle peut tre considre en quelque sorte comme un moule
Vhicule +Marque : string(idl) +Puissance fiscale : int +Vitesse maximale : int +Vitesse courante : int +Creer un vhicule() +Dtruire un vhicule() +Dmarrer() +Acclrer(entre Taux : int)
www.istawww.ista-ntic.net

Nom de la classe
Description des attributs ou donnes membres Description des mthodes = code associ
4

Instanciation
Chaque objet correspond une instance de la classe laquelle il fait rfrence.
Vhicule +Marque : string(idl) +Puissance fiscale : int +Vitesse maximale : int +Vitesse courante : int +Creer un vhicule() +Dtruire un vhicule() +Dmarrer() +Acclrer(entre Taux : int)
Marque = Peugeot Puissance = 7 Vitesse maximale = 197 Vitesse courante = 98 Marque = Renault Puissance = 5 Vitesse maximale = 176 Vitesse courante = 65

www.istawww.ista-ntic.net

Instanciation
La cration dun objet est constitue de deux phases :
Une phase du ressort de la classe : allouer de la mmoire et un contexte dexcution minimaliste. Mthode de classe Une phase du ressort de lobjet : initialiser ses attributs dinstance. Mthode dinstance

Dans les langages tels que Java, C++, VB ou C#, ces deux phases ne sont pas diffrencies. Appel une mthode spciale : le constructeur
www.istawww.ista-ntic.net 6

Encapsulation
Abstraction de donnes :
La structure dun objet nest pas visible de lextrieur. Seule son interface est accessible par le biais de messages invocables par le client.

Abstraction procdurale :

Linvocation dun message est une opration atomique. Aucun lment dinformation sur les traitements internes mis en uvre nest ncessaire.

Donc pour chaque objet crer en peut limiter les accs ou les contrler selon nos besoin pour cet objet.
Intrieur de lobjet protg Complexit dissimul Maintenance simplifi (centralisation) Echanges avec lexterne sont codifis
www.istawww.ista-ntic.net 7

Proprits
Les proprits d'un objet sont dclares, comme des variables, l'intrieur du bloc contrl par le mot cl class. class. Public Class NomDeLaClasse { Public TypeDeLaPropriet NomDeLaPropriete; // Dclaration des mthodes de l'objet } Les proprits peuvent tre dclares tout moment l'intrieur du corps de la classe. Chaque dclaration de proprit (Attributs) est construite sous le modle suivant : Public TypeDeLaPropriet NomDeLaPropriete; Une proprit peut tre initialise lors de sa dclaration : Public TypeDeLaPropriet NomDeLaPropriete=valeurInitiale; Les identifiants de proprit par convention commencent par une majuscule.
www.istawww.ista-ntic.net 8

Mthodes daccs
En Programmation Oriente Objet, on vite d'accder directement aux proprits par l'oprateur . . En effet, cette possibilit ne correspond pas au concept d'encapsulation. Certains langages l'interdisent carrment. Afin dimplanter correctement le concept d'encapsulation, il convient de verrouiller l'accs aux proprits et de les dclarer private L Accs aux attributs membres peut se faire par des mthodes simple(Getter et Setter) ou par les Property de classe public type nomClient{ get{ return iNomClient; } set{ iNomClient = value; } }
www.istawww.ista-ntic.net 9

Constructeur
Quand une instance d'une classe d'objet est cre au moment de l'instanciation d'une variable avec new, une new, fonction particulire est excute. Cette fonction s'appelle le excute. constructeur. constructeur. Elle permet, entre autres, d'initialiser chaque instance pour que ses proprits aient un contenu cohrent. cohrent. Public Client(int numero, string nom){ this.IDClient = numero; this.NomClient = nom; } Cela va permettre d'instancier la classe Client de la faon suivante : Client cli = New Client(12, "Sharraf");
www.istawww.ista-ntic.net 10

Constructeur de recopie
Le constructeur de recopie permet de recopier les proprits d'un objet existant vers une nouvelle instance de mme type. type. Public Client(Client unClient){ this.IDClient = unClient.IDClient; this.NomClient = unClient.NomClient; this.CaClient = unClient.CaClient; } Client oClient1 = new Client(); Client oClient = New Client(oClient1);
www.istawww.ista-ntic.net 11

public class Vehicule{ private string Marque; private int Puissance; private int VitesseMax; private int VitesseCour; // Constructeur par defaut public Vehicule(){ Marque = "Marque inconu"; Puissance = 0; VitesseMax = 0; VitesseCour = 0; } //Constructeur d'initialisation public Vehicule(String M, int P, int VM){ Marque = M; Puissance = P; VitesseMax = VM; VitesseCour = 0; } //Constructeur de Copie public Vehicule (Vehicule Vh){ Marque = Vh.PMarque; Puissance = Vh.PPuissanceF; VitesseMax = Vh.PVitesseM; VitesseCour = Vh.PVitesseC; }

Exemple
public string PMarque { get{ return Marque; } set{ Marque = value; } } public int PPuissanceF{ get{ return this.Puissance; } set{ this.Puissance = value; } } public int PVitesseM{ get{ return this.VitesseMax; } set{ this.VitesseMax = value; } }
12

www.istawww.ista-ntic.net

Exemple
//mthode daccs en lecture seul public int PVitesseC{ get{ return this.VitesseCour; } } public void Accelere(int v) { this.VitesseCour += v; if (this.PVitesseC > this.PVitesseM) this.VitesseCour = }

this.PVitesseM;

public override string ToString() { return "Vehicule : " + Convert.ToString(this.PMarque) + " " + Convert.ToString(this.PPuissanceF) + " - Vitesse : " + Convert.ToString(this.PVitesseC) + "/" + Convert.ToString(this.PVitesseM); } } }

www.istawww.ista-ntic.net

13

Programme principale
using System; class Program { static void Main(string[] args) { Vehicule rn=new Vehicule() ; Console.WriteLine(rn.ToString()); Vehicule pg = new Vehicule("Peugeut", 7, 187); Console.WriteLine(pg.ToString()); pg.Accelere(60); Console.WriteLine(pg.ToString()); pg.Accelere(80); pg.Accelere(60); Console.WriteLine(pg.ToString()); Console.ReadKey(); } }
www.istawww.ista-ntic.net 14

Destructeur
En C# on ne dclenche pas explicitement la destruction d'un objet. Les objet. instances seront dtruites par le systme lorsqu'elles ne sont plus rfrences et quil sera ncessaire de rcuprer des ressources mmoire. Le programme mmoire. qui se charge de cette tche s'appelle le Garbage Collector ou, en franais, le ramasse-miettes. ramasse-miettes. Les destructeurs ne peuvent pas tre dfinis dans des struct. Ils sont utiliss uniquement avec les classes. Une classe peut possder un seul destructeur. Les destructeurs ne peuvent pas tre hrits ou surchargs. Les destructeurs ne peuvent pas tre appels. Ils sont appels automatiquement. Un destructeur n'accepte pas de modificateurs ni de paramtres. ~NomClass() // Cette mthode s'appelle destructeur. destructeur. { //programme (Exp: libration des ressources) } Dans le programme principale on peut forc le Garbage Collector par la procdure: GC.Collect()
www.istawww.ista-ntic.net 15

Proprits et Mthodes partag


Public class test{ Public static Type Attribut; Public static Type NomMeth(){ } } Lutilisation de lattribut ou la mthode se fait via la classe directement. Test.NomMeth Ou test.Attribut sans instanciation. Exp : Private static int iCompteur; Public test(){ iCompteur += 1; } ~test(){ iCompteur -= 1; } Si en affiche la valeur de iCompteur en retrouve la nombre dobjet instancier et rfrenci dans le programme en mmoire.

www.istawww.ista-ntic.net

16

Les oprateurs daccessibilit


Mot Cl Public Private Protected Internal Dfinition Accessible partout Accs dans la class uniquement Accs classe et classes drives Accs Classe - Espace de nom - Assemblage
www.istawww.ista-ntic.net 17

Hritage
Le concept d'hritage est l'un des trois principaux fondements de la Programmation Oriente Objet, le premier tant l'encapsulation vu prcdemment et le dernier tant le polymorphisme qui sera abord plus loin dans ce document L'hritage consiste en la cration d'une nouvelle classe dite classe drive partir d'une classe existante dite classe de base ou classe parente. parente. L'hritage permet de : Rcuprer le comportement standard d'une classe d'objet (classe parente) partir des proprits et des mthodes dfinies dans celles-ci. celles-ci. Ajouter des fonctionnalits supplmentaires en crant de nouvelles proprits et mthodes dans la classe drive. drive. Modifier le comportement standard d'une classe d'objet (classe parente) en surchargeant certaines mthodes de la classe parente dans la classe drive. drive.

www.istawww.ista-ntic.net

18

Reprsentation
C la s s e A C la s s e B C la s s e D C la s s e E C la s s e C

Le diagramme ci-dessus ciconstitue la reprsentation graphique de la hirarchie de classes construite partir de ClasseA. ClasseA.
ClasseA

Dans le cadre de la conception oriente objet, la mthode UML ( United Modeling Language ) propose une autre reprsentation graphique d'une telle hirarchie :
www.istawww.ista-ntic.net

ClasseB

ClasseC

ClasseE

ClasseD
19

public class Client { protected string NomClient; protected double CAClient; public Client() { } public Client(string nom, double ca) { this.NomClient = nom; this.CAClient = ca; } public string Nom { get {return this.NomClient; } set {this.NomClient = value; } } public double CA { set {this.CAClient = value; } } public virtual double finance() { return this.CAClient; } public override string ToString() { return " Nom: " + this.Nom + " CA : " + Convert.ToString(this.finance()); } }
www.istawww.ista-ntic.net 20

Exemple

10

Exemple
public class Grossiste:Client { private double TxRemiseClient; public Grossiste():base(){ } public Grossiste(string nom, double ca, double rm):base(nom,ca){ this.TxRemise = rm; } public double TxRemise{ get{ return this.TxRemiseClient; } set{ this.TxRemiseClient = value; } } public double calrm(){ return this.CAClient * this.TxRemise; } public override double finance() { return this.CAClient * (1 - this.TxRemise); } }
www.istawww.ista-ntic.net 21

Surcharge (mthodes/Oprateur)
public int Add(int A, int B){ return A+B;} public string Add(string A, string B){ return A+B;}

La surcharge des mthodes avec le mme nom, se fait par le changement de leur signature (le nombre de paramtre, le type des paramtre) En peut aussi avoir une surcharge des oprateurs (+,-,x,/ ): (+,public class Complex { public int real; public int imaginary; public Complex(int real, int imaginary) //constructor { this.real = real; this.imaginary = imaginary; } public static Complex operator +(Complex c1, Complex c2) { //test si c1 et c2 ne sont pas vide (null). return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); } }
www.istawww.ista-ntic.net 22

11

Redfinition des mthodes


Mthode ~NomClass: le destructeur vu prcdemment. Mthode ToString(): Pour la classe fraction
public override string ToString(){

return numerateur + "/" + denominateur; } Surcharge Mthode Equals:


public override bool Equals(object obj){ return base.Equals(obj); } public bool Equals(Fraction fr){

double c1, c2; //test si fr est null (fr==null) c1 = Me.numerateur * (fr.denominateur); c2 = Me.denominateur * (fr.numerateur); If (c1 = c2){ return true;} Else{ return False;} }
www.istawww.ista-ntic.net 23

Complment hritage(Modificateur)
Abstract (Class): Ce mot cl indique qu'une classe ne peut tre (Class): instancier, et qu'elle ne peut donc tre utilise que comme classe de base, une classe abstret. abstret. Abstract (Mthode): utilis pour les mthodes quon veut forc (Mthode): leur redfinition dans les classes driv, en dfini seulement la signature sans corps. corps. Sealed (Class): A l'inverse de abstract, ce mot-cl indique que (Class): motcette classe ne peut pas tre hrite, et peut etres instancier, c'estc'est--dire servir de classe de base. base. Virtual (Mthode): ce mot-cl indique que cette mthode peut (Mthode): mottre redfinie dans une classe driv. driv. Sealed (Mthode): A l'inverse, ce mot-cl indique que cette (Mthode): motmthode ne peut tre redfinie dans une classe driv. driv. New (Mthode-Attribut): le mot cl new masque explicitement (Mthode-Attribut): un membre hrit d'une classe de base(avec signateur diffrente et mme nom). Lorsque vous masquez un membre hrit, la nom). version drive du membre remplace la version de classe de base. base.
www.istawww.ista-ntic.net 24

12

Polymorphisme
Le polymorphisme est un mcanisme via lequel un objet peut prendre plus d'une forme. Par exemple, si vous avez une classe de base nomme Client, une rfrence de type Client peut tre utilis pour contenir un objet de n'importe laquelle de ses classes drives. Quand vous appelez une mthode partir de votre objet, le systme dterminera automatiquement le type de l'objet afin d'appeler la mthode approprie. Client x; Client cl = New Client("Ali", 1000); Grossiste clg = New Grossiste("Ahmed", 7000, 0.2); x = cl; Console.WriteLine(x.ToString()); x = clg; Console.WriteLine(x.ToString());
www.istawww.ista-ntic.net 25

Implmentation des Interfaces


Une interface est une collection de prototypes reprsentant les membres (proprits, procdures et vnements) que l'interface encapsule. Les interfaces contiennent uniquement les dclarations des membres, les classes et les structures implmentent ces membres Exp: interface TestInterface { double Properiete1{get;} double Methode1(int X); } class ClassImplementation: TestInterface { private double Attribut1; public double Properiete1 { get { return Attribut1; } set { Attribut1 = value; } } public double Methode1(int X) { Attribut1 = Math.Sqrt(X); return Attribut1; } 26 www.istawww.ista-ntic.net }

13

Les Exceptions(Gestion Erreur)


Il y a plusieurs types d'erreurs : Les erreurs de syntaxe : Elle surviennent en mode conception quand on tape le code. Exp: A+1=B //Erreur daffectation 2 {... et un seul } Les erreurs de logique : quand la conception du programme (logiciel) qui est incorrect, des donnes justes nous donnes des rsultats faut. Donc il faut revoir la conception. Les erreurs d'excution : Elle surviennent en mode Run ou lors de l'utilisation de l'excutable, une instruction ne peut pas tre effectue. Le logiciel s'arrte brutalement, c'est trs gnant!! Pour l'utilisateur c'est un 'BUG division par zro string a(3) ; a[5]= A Soit une erreur de l'utilisateur, Il faut toujours vrifier ce que fait l'utilisateur et prvoir toutes les possibilits. Exp: On lui demande de taper un chiffre, il tape une lettre ou rien puis valide Pour viter ces derniers il faut capt lerreur avec Try Catch finally Syntaxe : int x = 0; try { int y = 100/x; } catch (ArithmeticException e) { Console.WriteLine("ArithmeticException Handler: {0}", e.ToString()); } catch (Exception e) { Console.WriteLine("Generic Exception Handler: {0}", e.ToString()); } finally { Console.WriteLine("Executing finally block."); }
-

www.istawww.ista-ntic.net

27

Les Exceptions
Cette classe (Exception) est la classe de base pour toutes les exceptions. Lorsqu'une erreur se exceptions. produit, le systme ou l'application en cours d'excution la signale en levant une exception qui contient des informations sur l'erreur. Une fois l'erreur. leve, une exception est gre par l'application ou par le gestionnaire d'exceptions par dfaut. dfaut. Exp:
ArithmeticException DivideByZeroException NotFiniteNumberException OverflowException
www.istawww.ista-ntic.net 28

14

Les Exceptions Personnalis


On peut crer une nouvelle classe dexception qui hrite de la classe Exception avec dfinition des constructeurs, et en peut faire appel a cet Exception par le mot cl throw. throw. class Personne { private string _Nom; private int _Age; public string Nom{ get{return _Nom;} set{_Nom = value;} } public int Age { get{return _Age;} set{ if (value < 0) throw new AgeException("Erreur : Age Ngatif"); else _Age = value; } } public Personne(string No, int Ag){ this.Nom = No; this.Age = Ag; } public override string ToString(){ return this.Nom + " (Age :" + this.Age.ToString() + ")"; } } class AgeException:Exception { public AgeException() { } public AgeException(string message):base(message) { } public AgeException(string message, Exception Inner) : base(message, Inner) { } } Programme Principal : Personne p; try{ p = new Personne("Ali", 0); p.Age = -5; //p.Age = "A"; } catch (AgeException ex){ Console.WriteLine(ex.ToString());} catch (Exception ex){ Console.WriteLine("Error : " + ex.ToString());} Console.ReadKey();
29

www.istawww.ista-ntic.net

Objets String
Dim str as string Avec a on a un objet str de type string et chaque objet a des mthodes et des attributs Length() : Taille dune chane en nombre de caractre. ToCharArray() : retourne un tableau de caractre. ToUpper() : Mettre en majuscules une chane de caractre. ToLower() : transforme par contre la chane en minuscule. Trim() : Permet de supprimer des caractres en dbut et fin de chane. Insert (N,str1) : Insre la position N une sous chane str1. Remove(N,L) : Supprime la sous-chaine partir de la position N et de longueur L. Replace (str1,str2) : Remplace partout dans une chane de dpart, une chane par une autre.

IndexOf & LastIndexOf : Indique le numro du caractre, la position (la premire occurrence) ou une chane chercher est trouve dans une autre.
Substring(n,l) : Extrait une partie dune chane Exp : string str = Bonjour Console.Write(str.length); 7 Console.Write(str.replace( jour , soir )); Bonsoir
www.istawww.ista-ntic.net 30

15

Clone Compare Concat Contains Copy CopyTo EndsWith Equals Finalize Format IndexOf Insert IsNullOrEmpty Join LastIndexOf PadLeft PadRight Remove Replace Split StartsWith Substring ToCharArray ToLower ToString ToUpper Trim TrimEnd TrimStart

Retourne une rfrence cette instance de String. Surcharg. Compare deux objets String spcifis et retourne un entier qui indique la relation entre ces deux objets dans l'ordre de tri. Surcharg. Concatne une ou plusieurs instances de String ou les reprsentations String des valeurs d'une ou de plusieurs instances de Object. Retourne une valeur qui indique si l'objet String spcifi apparat dans cette chane. Cre une nouvelle instance de String ayant la mme valeur qu'un String spcifi. Copie un nombre spcifi de caractres partir d'une position dfinie dans cette instance vers une position spcifie dans un tableau de caractres Unicode. Surcharg. Dtermine si la fin d'une instance de String correspond une chane spcifie. Surcharg. Dtermine si deux objets String ont la mme valeur. Autorise Object tenter de librer des ressources et d'excuter d'autres oprations de nettoyage avant que Object soit rcupr par l'opration garbage collection. (Hrit de Object.) Surcharg. Remplace chaque lment de mise en forme dans un Stringspcifi par l'quivalent textuel de la valeur d'un objet correspondant. Surcharg. Signale l'index de la premire occurrence d'un String, ou d'un ou de plusieurs caractres de cette chane. Insre une instance spcifie de String au point d'index indiqu dans cette instance. Indique si l'objet String spcifi est null ou une chane Empty. Surcharg. Concatne un sparateur spcifi de String entre chaque lment d'un tableau String indiqu, donnant lieu une chane concatne unique. Surcharg. Signale le point d'index de la dernire occurrence d'un caractre Unicode spcifi ou String dans cette instance. Surcharg. Aligne les caractres de cette instance droite et, gauche, remplit en ajoutant des espaces ou un caractre Unicode spcifi pour une longueur totale spcifie. Surcharg. Aligne les caractres de cette instance gauche et, droite, remplit en ajoutant des espaces ou un caractre Unicode spcifi pour une longueur totale spcifie. Surcharg. Supprime de cette instance le nombre spcifi de caractres. Surcharg. Remplace toutes les occurrences d'un caractre Unicode spcifi ou String dans cette instance par un autre caractre Unicode spcifi ou String. Surcharg. Retourne un tableau de chanes qui contient les sous-chanes de cette instance, dlimites par les lments d'une chane ou d'un tableau de caractres Unicode spcifi. Surcharg. Dtermine si le dbut d'une instance de String correspond une chane spcifie. Surcharg. Rcupre une sous-chane de cette instance. Surcharg. Copie les caractres dans cette instance vers un tableau de caractres Unicode. Surcharg. Retourne une copie de String en minuscules. Surcharg. Convertit la valeur de cette instance en String. Surcharg. Retourne une copie de String en majuscules. Surcharg. Supprime, de l'objet String actuel, toutes les occurrences-situes au dbut et la fin d'un jeu de caractres spcifis. www.istawww.ista ntic.net Supprime, de l'objet String actuel, toutes les occurrences situes la fin d'un jeu de caractres spcifis dans un tableau. Supprime, de l'objet String actuel, toutes les occurrences situes au dbut d'un jeu de caractres spcifis dans un tableau.

31

Exercices
crire un programme qui lit une chane STR au clavier et un caractre C de cette chane, qui va cherch le nombre doccurrence et le supprime dans la chane STR. Inverser une chane de caractre. Remplacer le premier caractre de chaque mot dans une phrase par le majuscule.
www.istawww.ista-ntic.net 32

16

LObjet Regex
La classe Regex (System.Text.RegularExpressions) permet l'utilisation System.Text.RegularExpressions) d'expression rgulires. Celles-ci permettent de tester le format d'une chane rgulires. Cellesde caractres. Ainsi on peut vrifier qu'une chane reprsentant une date est caractres. bien au format jj/mm/aa. On utilise pour cela un modle et on compare la jj/mm/aa. chane ce modle. Ainsi dans cet exemple, j m et a doivent tre des modle. chiffres. chiffres. Le modle d'un format de date valide est alors "\d\d/\d\d/\d\d" o le d/\ d/\ symbole \d dsigne un chiffre. chiffre.
// une expression rgulire modle string modle1 = @"\d\d/\d\d/\d\d"; @"\ d/\ d/\ Regex regex1 = new Regex(modle1); // comparer un exemplaire au modle string exp1 = " 123 "; if (regex1.IsMatch(exp1)) Console.WriteLine(("[" + exp1 + "] correspond au modle [" + modle1 + "]")); else Console.WriteLine(("[" + exp1 + "] ne correspond pas au modle [" + modle1 + "]")); string exp2 = "01/02/10"; //" 123 "; if (regex1.IsMatch(exp2)) Console.WriteLine(("[" + exp2 + "] correspond au modle [" + modle1 + "]")); exp else Console.WriteLine(("[" + exp2 + "] ne correspond pas au modle [" + modle1 + "]")); Console.ReadKey();
www.istawww.ista-ntic.net 33

Caractre

Description Marque le caractre suivant comme caractre spcial ou littral. Par exemple, "n" correspond au caractre "n". "\n" correspond un caractre de nouvelle ligne. La squence "\\" correspond "\", tandis que "\(" correspond "(". Correspond au dbut de la saisie. Correspond la fin de la saisie Correspond au caractre prcdent zro fois ou plusieurs fois. Ainsi, "zo*" correspond "z" ou "zoo". Correspond au caractre prcdent une ou plusieurs fois. Ainsi, "zo+" correspond "zoo", mais pas "z". Correspond au caractre prcdent zro ou une fois. Par exemple, "a?ve?" correspond "ve" dans "lever". Correspond tout caractre unique, sauf le caractre de nouvelle ligne. Recherche le modle et mmorise la correspondance. La sous chane correspondante peut tre extraite de la collection Matches obtenue, l'aide d'Item [0]...[n]. Pour trouver des correspondances avec des caractres entre parenthses ( ), utilisez "\(" ou "\)". Correspond soit x soit y. Par exemple, "z|foot" correspond "z" ou "foot". "(z|f)oo" correspond "zoo" ou "foo". n est un nom bre entier non ngatif. Correspond exactement n fois le caractre. Par exemple, "o{2}" ne correspond pas "o" dans "Bob," mais aux deux premiers "o" dans "fooooot". n est un entier non ngatif. Correspond au moins n fois le caractre. Par exemple, "o{2,}" ne correspond pas "o" dans "Bob", mais tous les "o" dans "fooooot". "o{1,}" quivaut "o+" et "o{0,}" quivaut "o*". m et n sont des entiers non ngatifs. Correspond au moins n et au plus m fois le caractre. Par exemple, "o{1,3}" correspond aux trois premiers "o" dans "foooooot" et "o{0,1}" quivaut "o?". Jeu de caractres. Correspond l'un des caractres indiqus. Par exemple, "[abc]" correspond "a" dans "plat". Jeu de caractres ngatif. Correspond tout caractre non indiqu. Par exemple, "[^abc]" correspond "p" dans "plat". Plage de caractres. Correspond tout caractre dans la srie spcifie. Par exemple, "[a-z]" correspond tout caractre alphabtique minuscule compris entre "a" et "z". Plage de caractres ngative. Correspond tout caractre ne se trouvant pas dans la srie spcifie. Par exemple, "[^mz]" correspond tout caractre ne se trouvant pas entre "m" et "z". Correspond une limite reprsentant un mot, autrement dit, la position entre un mot et un espace. Par exemple, "er\b" correspond "er" dans "lever", mais pas "er" dans "verbe". www.istawww.ista-ntic.net 34

\ ^ $ * + ? . (modle) x|y {n} {n,} {n,m} [xyz] [^xyz] [a-z] [^m-z] \b

17

\B \d \D \f \n \r \s \S \t \v \w \W \num \n

Correspond une limite ne reprsentant pas un mot. "en*t\B" correspond "ent" dans "bien entendu". Correspond un caractre reprsentant un chiffre. quivaut [0-9]. Correspond un caractre ne reprsentant pas un chiffre. quivaut [^0-9]. Correspond un caractre de saut de page. Correspond un caractre de nouvelle ligne Correspond un caractre de retour chariot. Correspond tout espace blanc, y compris l'espace, la tabulation, le saut de page, etc. quivaut "[ \f\n\r\t\v]". Correspond tout caractre d'espace non blanc. quivaut "[^ \f\n\r\t\v]". Correspond un caractre de tabulation Correspond un caractre de tabulation verticale. Correspond tout caractre reprsentant un mot et incluant un trait de soulignement. quivaut "[A-Za-z0-9_]". Correspond tout caractre ne reprsentant pas un mot. quivaut "[^A-Za-z0-9_]". Correspond num, o num est un entier positif. Fait rfrence aux correspondances mmorises. Par exemple, "(.)\1" correspond deux caractres identiques conscutifs. Correspond n, o n est une valeur d'chappement octale. Les valeurs d'chappement octales doivent comprendre 1, 2 ou 3 chiffres. Par exemple, "\11" et "\011" correspondent tous les deux un caractre de tabulation. "\0011" quivaut "\001" & "1". Les valeurs d'chappement octales ne doivent pas excder 256. Si c'tait le cas, seuls les deux premiers chiffres seraient pris en compte dans l'expression. Permet d'utiliser les codes ASCII dans des expressions rgulires

\xn

Correspond n, o n est une valeur d'chappement hexadcimale. Les valeurs d'chappement hexadcimales doivent comprendre deux chiffres obligatoirement. Par exemple, "\x41" correspond "A". "\x041" quivaut "\x04" & "1". Permet d'utiliser les codes ASCII dans des expressions rgulires

www.istawww.ista-ntic.net

35

Regex (exemple)

www.istawww.ista-ntic.net

36

18

Les collections
Le .NET Framework fournit des classes spcialises pour le stockage et la rcupration des donnes. Ces classes fournissent la prise en charge des piles, files d'attente, listes et tables de hachage. La plupart des classes de collection implmentent les mmes interfaces. lusage de Collection est Une alternative aux tableaux. Fait partie de lespace de nom System.Collections ou Systeme.Collections.Generic Une collection fonctionne plutt comme un groupe d'lments dans laquelle il est possible dajouter ou denlever un lment nimporte quel endroit sans avoir se proccuper de sa taille ni ou se trouve l'lment. Le nombre d'lment n'est pas dfini au dpart comme dans un tableau. Dans une collection il n'y a que les lments que l'on a ajout. Les lments sont reprs grce un index ou avec une Cl unique Type collection Array : Dcrit les fonctionnalits des tableaux qui leur permettent d'tre traits comme des collections. Types collection ArrayList et List : Dcrit les fonctionnalits des listes gnriques et non gnriques, qui constituent les types de collection les plus frquemment utiliss. Types collection Hashtable et Dictionary : Dcrit les fonctionnalits des types de dictionnaires gnriques et non gnriques bass sur le hachage. Types collection SortedList et SortedDictionary : Dcrit les types de dictionnaire tri et les types hybrides qui associent les fonctionnalits d'un dictionnaire celles d'une liste. Types collection Queue : Dcrit les fonctionnalits des files d'attente gnriques et non gnriques. Types collection Stack : Dcrit les fonctionnalits des piles gnriques et non gnriques.
www.istawww.ista-ntic.net 37

La classe Array : Fournit des mthodes pour la cration, la manipulation, la recherche ainsi que le tri des tableaux et sert de classe de base pour tous les tableaux.
static void Main(string[] args) { // Cration et initialisation d'un tableau d'entier et un tableau d'objet int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 }; Object[] myObjArray = new Object[5] { 26, 27, 28, 29, 30 }; // Affichage des valeur initial pour les deux tavleaux. Console.WriteLine("Initialement,"); Console.Write("Tableau d'entier:");PrintValues(myIntArray); Console.Write("Tableau d'Objet:");PrintValues(myObjArray); // Copies les deux premiers lments du premier tableau dans le deuxime. Array.Copy(myIntArray, myObjArray, 2); // Prints the values of the modified arrays. Console.WriteLine("\nAprs la fin du copie,"); Console.Write("Tableau d'entier:"); PrintValues(myIntArray); Console.Write("Tableau d'Objet:"); PrintValues(myObjArray); // Copies les deux derner lments du premier tableau dans le deuxime. Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2); //GetUpperBound : retourne la position du dernier lment du dimention spcifi // Prints the values of the modified arrays. Console.WriteLine("\nAfter copying the last two elements of the Object array to the integer array,"); Console.Write("Tableau d'entier:"); PrintValues(myIntArray); Console.Write("Tableau d'Objet:"); PrintValues(myObjArray); } public static void PrintValues(Object[] myArr) { foreach (Object i in myArr) {Console.Write("\t{0}", i);} Console.WriteLine();} public static void PrintValues(int[] myArr) { foreach (int i in myArr) {Console.Write("\t{0}", i);} Console.WriteLine();} www.istawww.ista-ntic.net

Array

38

19

ArrayList
using System; using System.Collections; static void Main(string[] args) { // Creates and initializes a new ArrayList. ArrayList myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add("World"); myAL.Add("!"); // Displays the properties and values of the ArrayList. Console.WriteLine("myAL"); Console.WriteLine(" Count: {0}", myAL.Count); Console.WriteLine(" Capacity: {0}", myAL.Capacity); //Capacity : Obtient ou dfinit le nombre d'lments que ArrayList peut contenir Console.Write(" Values:"); PrintValues(myAL); Console.ReadKey(); } public static void PrintValues(IEnumerable myList) { foreach (Object obj in myList) Console.Write(" {0}", obj); Console.WriteLine(); www.istawww.ista-ntic.net }

39

Hashtable
Reprsente une collection de paires cl/valeur qui sont organises en fonction du code de hachage de la cl. Nom
Add Clear Contains ContainsKey ContainsValue Equals GetType KeyEquals Remove ToString Count Item Keys Values

Description
Ajoute un lment avec la cl et la valeur spcifies dans Hashtable. Supprime tous les lments de Hashtable. Dtermine si Hashtable contient une cl spcifique. Dtermine si Hashtable contient une cl spcifique. Dtermine si Hashtable contient une valeur spcifique. Dtermine si l'objet Object spcifi est gal l'objet Object en cours. (Hrit de Object.) Obtient le Type de l'instance actuelle. (Hrit de Object.) Compare un Object spcifique avec une cl spcifique dans Hashtable. Supprime de Hashtable l'lment ayant la cl spcifie. Retourne un String qui reprsente le Object en cours. (Hrit de Object.) Obtient le nombre de paires cl/valeur contenues dans Hashtable. Obtient ou dfinit la valeur associe la cl spcifie. Obtient ICollection contenant les cls de Hashtable. Obtient ICollection contenant les valeurs de Hashtable.
www.istawww.ista-ntic.net 40

20

static void Main(string[] args) { // Creation et initiation d'un nouveau Hashtable. Hashtable myHT = new Hashtable(); myHT.Add(0, "zero"); myHT.Add(1, "one"); myHT.Add(2, "two"); myHT.Add(3, "three"); Console.WriteLine("le Hashtable contien les valeur suivant:"); PrintIndexAndKeysAndValues(myHT); // Affichage des valeurs du Hashtable. string rep1= "est dans le Hashtable"; Hashtable"; string rep2= " n'est pas dans le Hashtable"; Hashtable"; // Recherche d'une Cl spcifique. int myKey = 2; Console.WriteLine("la Cl \"{0}\" {1}.", myKey, myHT.ContainsKey(myKey) ? rep1:rep2); "{0}\ rep1:rep2); myKey = 6; Console.WriteLine("la Cl \"{0}\" {1}.", myKey, myHT.ContainsKey(myKey) ? rep1 : rep2); "{0}\ rep2); String myValue = "three"; // Recherche d'une valeur spcifique. Console.WriteLine("la valeur \"{0}\" {1}.", myValue, myHT.ContainsValue(myValue) ? rep1 : rep2); "{0}\ rep2); myValue = "nine"; Console.WriteLine("la valeur \"{0}\" {1}.", myValue, myHT.ContainsValue(myValue) ? rep1 :rep2); "{0}\ rep2); Console.ReadKey();} public static void PrintIndexAndKeysAndValues(Hashtable myHT) { int i = 0; Console.WriteLine("\ INDEX- KEY- VALUEConsole.WriteLine("\t-INDEX-\t-KEY-\t-VALUE-"); foreach (DictionaryEntry de in myHT) Console.WriteLine("\t[{0}]:\t{1}\ Console.WriteLine("\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value); Console.WriteLine();}
www.istawww.ista-ntic.net 41

HashTable (Exp) Exp)

La persistance des objets


Cette illustration affiche le processus global de la srialisation : L'objet est srialis un flux qui contient non seulement les donnes, mais galement des informations sur le type d'objet, notamment sa version, sa culture et son nom d'assembly. d'assembly. partir de ce flux, il peut tre stock dans une base de donnes, dans un fichier ou en mmoire. mmoire.
www.istawww.ista-ntic.net 42

21

Srialisation binaire et XML


Srialisation binaire : La srialisation binaire utilise le codage binaire afin de produire une srialisation compacte destine notamment au stockage ou au flux rseau socket. Il socket. n'est pas convenable de faire passer les donnes dans un parepare-feu mais les performances sont meilleures lors du stockage des donnes.(Voire le Cours LPS) donnes. Srialisation XML : La srialisation XML srialise les champs et les proprits publics d'un objet, ou les paramtres et valeurs de retour des mthodes, en un flux XML conforme un document de langage XSD (XML Schema Definition) spcifique. La srialisation XML favorise des spcifique. classes fortement types avec des proprits et des champs publics convertis en XML. System.Xml.Serialization contient XML. System.Xml. les classes ncessaires pour la srialisation et la dsrialisation XML

www.istawww.ista-ntic.net

43

Srialisation binaire (Exemple)


Pour lire ou crire dans un fichier, on utilise les deux objets StreamReader et StreamWriter dans lespace de nom System.IO. Soit la classe Client Suivante: public class Client { protected int id; protected string NomClient; protected double CAClient; public Client() { } public Client(int id, string nom, double ca) { this.ID = id; this.NomClient = nom; this.CAClient = ca;} public int ID { get { return id; } set { id = value; } } public string Nom{ get{return this.NomClient;} set{this.NomClient = value;} } public double CA{ set{this.CAClient = value;} } public virtual double finance() { return this.CAClient; } public override string ToString() { return this.ID.ToString() + "-> Nom: " + this.Nom + " CA : " + Convert.ToString(this.finance()); } public string ToFile(){ return this.ID.ToString() + ";" + this.Nom + ";" + Convert.ToString(this.finance()); } www.istawww.ista-ntic.net }

44

22

Srialisation binaire (Exemple)


class Program { private static Hashtable HtClient=new Hashtable(); private static Client Clt; static void Main(string[] args) { try { Load(); foreach (Client Clt in HtClient.Values ) Console.WriteLine(Clt.ToString()); Save(); Console.ReadLine();} catch (Exception e) { Console.WriteLine(" Erreur : " + e.Message);} } private static void Save(){ StreamWriter fluxInfos = null; // le fichier texte logique try{ // cration du fichier texte fluxInfos = new StreamWriter("Client.dat", false); fluxInfos.AutoFlush = true; foreach (Client Clt in HtClient.Values) fluxInfos.WriteLine(Clt.ToFile()); } catch(Exception e){ Console.WriteLine("Erreur: " + e.Message);} finally{ try{ fluxInfos.Close();} catch{} } } private static void Load(){ StreamReader fluxInfos = null; // le fichier texte logique string ligne = ""; string[] Tligne = null; try{ // cration du fichier texte fluxInfos = new StreamReader("Client.dat"); do{ ligne = fluxInfos.ReadLine(); if (ligne != null) { Tligne = ligne.Split(';'); if (Tligne.Length == 3) { Clt = new Client(Convert.ToInt32(Tligne[0]), Tligne[1], Convert.ToDouble(Tligne[2])); HtClient.Add(Clt.ID, Clt); } } } while (ligne != null); } catch (Exception e){ Console.WriteLine("Erreur : " + e.Message);} finally{ try{ fluxInfos.Close();} catch{} } } }
45

www.istawww.ista-ntic.net

Srialisation Objet (Exemple)


[Serializable()] public class Client { protected int id; protected string NomClient; protected double CAClient; public Client() { } public Client(int id, string nom, double ca) { this.ID = id; this.NomClient = nom; this.CAClient = ca; } public int ID { get { return id; } set { id = value; } } public string Nom{ get{return this.NomClient;} set{this.NomClient = value;} } public double CA{ set{this.CAClient = value;} } public virtual double finance() { return this.CAClient; } public override string ToString() { return this.ID.ToString() + "-> Nom: " + this.Nom + " CA : " + Convert.ToString(this.finance()); } public string ToFile(){ return this.ID.ToString() + ";" + this.Nom + ";" + Convert.ToString(this.finance()); www.istawww.ista-ntic.net } }

46

23

Srialisation Objet (Exemple)


class Program { private static Hashtable HtClient=new Hashtable(); static void Main(string[] args) { try { if(File.Exists("Client.dat")){ Deserialize(); } else { HtClient.Add(0, new Client(0, "Ali", 200)); HtClient.Add(1, new Client(1, "Ahmed", 140)); HtClient.Add(2, new Client(2, "Imane", 530)); } foreach (Client Clt in HtClient.Values ) Console.WriteLine(Clt.ToString()); Serialize(); Console.ReadLine(); } catch (Exception e) { Console.WriteLine("Erreur : " + e.Message); } } private static void Deserialize() { FileStream fluxInfos = null; // le fichier texte logique try{ // cration du fichier texte fluxInfos = new FileStream("Client.dat", FileMode.Open); BinaryFormatter formatter = new BinaryFormatter(); HtClient = (Hashtable)formatter.Deserialize(fluxInfos); } } www.istawww.ista-ntic.net 47 catch(Exception e){ Console.WriteLine("Erreur : " + e.Message);} finally{ try{fluxInfos.Close();} catch{} } } private static void Serialize() { FileStream fluxInfos = null; // le fichier texte logique try{ // cration du fichier texte fluxInfos = new FileStream("Client.dat", FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fluxInfos, HtClient);} catch (SerializationException e){ Console.WriteLine("Erreur : " + e.Message); } finally{ try{fluxInfos.Close();} catch { } } }

Srialisation XML (Exemple)


public class Employee { public string EmpName; public string EmpID; public Employee(){} public Employee(string newName, string newID){ this.EmpName = newName; this.EmpID = newID; } public override string ToString() { return this.EmpID + " " + this.EmpName ; } }
www.istawww.ista-ntic.net 48

24

public class Employees:ICollection { public string CollectionName; private ArrayList empArray = new ArrayList(); public Employee this[int index] { get { return (Employee)empArray[index]; } } public void CopyTo(Array a, int index) { empArray.CopyTo(a, index); } public int Count { get { return empArray.Count; } } public object SyncRoot { get { return this; } } public bool IsSynchronized { get { return false; } } public IEnumerator GetEnumerator() { return empArray.GetEnumerator(); } public void Add(Employee newEmployee) { empArray.Add(newEmployee); } }
www.istawww.ista-ntic.net 49

Exemple (Suite) : Main()


Employees Emps = new Employees(); Emps.CollectionName = "Employees"; Employee John100 = new Employee("John00", "100xxx"); Emps.Add(John100); Employee John101 = new Employee("John01", "101xxx"); Emps.Add(John101); XmlSerializer x = new XmlSerializer(typeof(Employees)); //Serialisation Emps TextWriter writer = new StreamWriter("Coll.xml"); x.Serialize(writer, Emps); <?xml version="1.0" encoding="utf-8"?> encoding="utfwriter.Close(); <ArrayOfEmployee xmlns:xsi="http://www.w3.org/2001/XMLSchemaxmlns:xsi="http://www.w3.org/2001/XMLSchema//Dserialisation Emps0 instance" Employees Emps0 = new Employees(); xmlns:xsd="http://www.w3.org/2001/XMLSchema"> XmlReader XmlRid = XmlReader.Create("Coll.xml", new <Employee> XmlReaderSettings()); <EmpName>John00</EmpName> Emps0 = (Employees)x.Deserialize(XmlRid); XmlRid.Close(); <EmpID>100xxx</EmpID> </Employee> // Affichage <Employee> foreach (Employee E in Emps0) <EmpName>John01</EmpName> Console.WriteLine(E.ToString()); <EmpID>101xxx</EmpID> Console.ReadKey(); Console.ReadKey(); </Employee> </ArrayOfEmployee>
www.istawww.ista-ntic.net 50

25