View
219
Download
0
Category
Preview:
Citation preview
7/25/2019 M11-POO-CSNet 2012-05-18
1/26
18/05/2012
http://www.ista-ntic.net 1
M11 : POOM11 : POOCSharp.NetCSharp.Net
Formateur :Formateur : DriouchDriouch (cfmoti.driouch@gmail.com)(cfmoti.driouch@gmail.com)Etablissement : OFPPT/DRGC/CFMOTIEtablissement : OFPPT/DRGC/CFMOTI
Version duVersion du 18/05/201218/05/2012
http://www.istahttp://www.ista--ntic.net/ntic.net/
11www.istawww.ista--ntic.netntic.net
PlanPlan
Notion dObjetNotion dObjet ClasseClasse -- InstanciationInstanciationEncapsulation (Proprit et Mthodes daccs)Encapsulation (Proprit et Mthodes daccs)Constructeurs (Constructeur de copie)Constructeurs (Constructeur de copie) Destructeur(Garbage Collector)Destructeur(Garbage Collector)Hritage (Surcharge Mthode/OprateurHritage (Surcharge Mthode/Oprateur Redfinition)Redfinition)PolymorphismePolymorphismeLes ExceptionsLes ExceptionsLes Objets Courants(en .Net)Les Objets Courants(en .Net)Objet de collectionObjet de collectionLes InterfacesLes InterfacesLa persistance (Srialisation binaire, Objet et XML)La persistance (Srialisation binaire, Objet et XML)
22www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
2/26
18/05/2012
http://www.ista-ntic.net 2
Notion dobjetNotion dobjet
Un objet est une entit cohrenteUn objet est une entit cohrenterassemblant des donnes et du coderassemblant des donnes et du codetravaillant sur ces donnes.travaillant sur ces donnes.
33www.istawww.ista--ntic.netntic.net
ClasseClasse
Une classe est une description abstraiteUne classe est une description abstraitedun objet. Elle peut tre considre endun objet. Elle peut tre considre enquelque sorte comme un moulequelque sorte comme un moule
+Creer un vhicule()+Dtruire un vhicule()+Dmarrer()+Acclrer(entre Taux : int)
+Marque : string(idl)+Puissance fiscale : int+Vitesse maximale : int+Vitesse courante : int
Vhicule
Nom de la classeDescription des attributs
ou donnes membres
Description des mthodes= code associ
44www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
3/26
18/05/2012
http://www.ista-ntic.net 3
InstanciationInstanciation
Chaque objet correspond uneChaque objet correspond uneinstance de la classe laquelle il faitinstance de la classe laquelle il faitrfrence.rfrence.
+Creer un vhicule()
+Dtruire un vhicule()+Dmarrer()+Acclrer(entre Taux : int)
+Marque : string(idl)+Puissance fiscale : int
+Vitesse maximale : int+Vitesse courante : int
VhiculeMarque = PeugeotPuissance = 7Vitesse maximale = 197Vitesse courante = 98
Marque = RenaultPuissance = 5Vitesse maximale = 176Vitesse courante = 65
55www.istawww.ista--ntic.netntic.net
InstanciationInstanciation
La cration dun objet est constitue de deuxLa cration dun objet est constitue de deuxphases :phases : Une phase du ressort de la classe : allouer de laUne phase du ressort de la classe : allouer de la
mmoire et un contexte dexcution minimaliste.mmoire et un contexte dexcution minimaliste.Mthode de classeMthode de classe
Une phase du ressort de lobjet : initialiser sesUne phase du ressort de lobjet : initialiser sesattributs dinstance. Mthode dinstanceattributs dinstance. Mthode dinstance
Dans les langages tels que Java, C++, VB ouDans les langages tels que Java, C++, VB ouC#, ces deux phases ne sont pas diffrencies.C#, ces deux phases ne sont pas diffrencies.
Appel une mthode spciale : le constructeurAppel une mthode spciale : le constructeur
66www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
4/26
18/05/2012
http://www.ista-ntic.net 4
EncapsulationEncapsulation
Abstraction de donnes :Abstraction de donnes :La structure dun objet nest pas visible de lextrieur.La structure dun objet nest pas visible de lextrieur.Seule son interface est accessible par le biais deSeule son interface est accessible par le biais demessages invocables par le client.messages invocables par le client.
Abstraction procdurale :Abstraction procdurale :Linvocation dun message est une opration atomique.Linvocation dun message est une opration atomique.Aucun lment dinformation sur les traitements internesAucun lment dinformation sur les traitements internesmis en uvre nest ncessaire.mis en uvre nest ncessaire.
Donc pour chaque objet crer en peut limiterDonc pour chaque objet crer en peut limiterles accs ou les contrler selon nos besoinles accs ou les contrler selon nos besoinpour cet objet.pour cet objet. Intrieur de lobjet protgIntrieur de lobjet protg Complexit dissimulComplexit dissimul Maintenance simplifi (centralisation)Maintenance simplifi (centralisation) Echanges avec lexterne sont codifisEchanges avec lexterne sont codifis
77www.istawww.ista--ntic.netntic.net
PropritsProprits
Les proprits d'un objet sont dclares, comme des variables, Les proprits d'un objet sont dclares, comme des variables, l'intrieur du bloc contrl par le mot cll'intrieur du bloc contrl par le mot cl classclass..
Public Class NomDeLaClassePublic Class NomDeLaClasse{{ Public TypeDeLaPropriet NomDeLaPropriete;Public TypeDeLaPropriet NomDeLaPropriete;
//// Dclaration des mthodes de l'objetDclaration des mthodes de l'objet}}
Les proprits peuvent tre dclares tout moment l'intrieurLes proprits peuvent tre dclares tout moment l'intrieurdu corps de la classe.du corps de la classe. Chaque dclaration de proprit (Attributs) est construite sous leChaque dclaration de proprit (Attributs) est construite sous le
modle suivant :modle suivant :Public TypeDeLaPropriet NomDeLaPropriete;Public TypeDeLaPropriet NomDeLaPropriete;
Une proprit peut tre initialise lors de sa dclaration :Une proprit peut tre initialise lors de sa dclaration :Public TypeDeLaPropriet NomDeLaPropriete=valeurInitiale;Public TypeDeLaPropriet NomDeLaPropriete=valeurInitiale; Les identifiants de proprit par convention commencent par uneLes identifiants de proprit par convention commencent par une
majuscule.majuscule.
88www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
5/26
18/05/2012
http://www.ista-ntic.net 5
Mthodes daccsMthodes daccs
En Programmation Oriente Objet, on vite d'accder directementEn Programmation Oriente Objet, on vite d'accder directementaux proprits par l'oprateur aux proprits par l'oprateur .. . En effet, cette possibilit ne. En effet, cette possibilit necorrespond pas au concept d'encapsulation. Certains langagescorrespond pas au concept d'encapsulation. Certains langagesl'interdisent carrment.l'interdisent carrment.
Afin dimplanterAfin dimplanter correctementcorrectement le concept d'encapsulation, ille concept d'encapsulation, ilconvient deconvient de verrouillerverrouiller l'accs aux proprits et de les dclarerl'accs aux proprits et de les dclarerprivateprivate
L Accs aux attributs membres peut se faire par des mthodesL Accs aux attributs membres peut se faire par des mthodessimple(Getter et Setter) ou par les Property de classesimple(Getter et Setter) ou par les Property de classe
public type nomClient{public type nomClient{get{get{
return iNomClient;return iNomClient;}}set{set{
iNomClient = value;iNomClient = value;}}
}}
99www.istawww.ista--ntic.netntic.net
ConstructeurConstructeur
QuandQuand uneune instanceinstance d'uned'une classeclasse d'objetd'objet estest crecre auaumomentmoment dede l'instanciationl'instanciation d'uned'une variablevariable avecavec newnew,, uneunefonctionfonction particulireparticulire estest excuteexcute.. CetteCette fonctionfonction s'appelles'appelle leleconstructeurconstructeur.. ElleElle permet,permet, entreentre autres,autres, d'initialiserd'initialiser chaquechaqueinstanceinstance pourpour queque sesses propritsproprits aientaient unun contenucontenu cohrentcohrent..
Public Client(int numero, string nom){Public Client(int numero, string nom){
this.IDClient = numero;this.IDClient = numero;this.NomClient = nom;this.NomClient = nom;}}
Cela va permettre d'instancier la classeCela va permettre d'instancier la classe ClientClient de la faonde la faonsuivantesuivante ::
Client cli = New Client(12, "Sharraf");Client cli = New Client(12, "Sharraf");
1010www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
6/26
18/05/2012
http://www.ista-ntic.net 6
Constructeur de recopieConstructeur de recopie
LeLe constructeurconstructeur dede recopierecopie permetpermet dede recopierrecopier leslespropritsproprits d'und'un objetobjet existantexistant versvers uneune nouvellenouvelleinstanceinstance dede mmemme typetype..
Public Client(Client unClient){Public Client(Client unClient){this.IDClient = unClient.IDClient;this.IDClient = unClient.IDClient;this.NomClient = unClient.NomClient;this.NomClient = unClient.NomClient;this.CaClient = unClient.CaClient;this.CaClient = unClient.CaClient;
}}
Client oClient1 = new Client();Client oClient1 = new Client();Client oClient = New Client(oClient1);Client oClient = New Client(oClient1);
1111www.istawww.ista--ntic.netntic.net
ExempleExemplepublic class Vehicule{public class Vehicule{
private string Marque;private string Marque;private int Puissance;private int Puissance;private int VitesseMax;private int VitesseMax;private int VitesseCour;private int VitesseCour;// Constructeur par defaut// Constructeur par defautpublic Vehicule(){public Vehicule(){
Marque = "Marque inconu";Marque = "Marque inconu";Puissance = 0;Puissance = 0;VitesseMax = 0;VitesseMax = 0;VitesseCour = 0;VitesseCour = 0;
}}//Constructeur d'initialisation//Constructeur d'initialisation
public Vehicule(String M, int P, int VM){public Vehicule(String M, int P, int VM){Marque = M;Marque = M;Puissance = P;Puissance = P;VitesseMax = VM;VitesseMax = VM;VitesseCour = 0;VitesseCour = 0;
}}//Constructeur de Copie//Constructeur de Copiepublic Vehicule (Vehicule Vh){public Vehicule (Vehicule Vh){
Marque = Vh.PMarque;Marque = Vh.PMarque;Puissance = Vh.PPuissanceF;Puissance = Vh.PPuissanceF;VitesseMax = Vh.PVitesseM;VitesseMax = Vh.PVitesseM;VitesseCour = Vh.PVitesseC;VitesseCour = Vh.PVitesseC;
}}
public string PMarque {public string PMarque {get{get{
return Marque;return Marque;}}set{set{
Marque = value;Marque = value;}}
}}public int PPuissanceF{public int PPuissanceF{
get{get{return this.Puissance;return this.Puissance;
}}set{set{
this.Puissance = value;this.Puissance = value;}}
}}public int PVitesseM{public int PVitesseM{
get{get{return this.VitesseMax;return this.VitesseMax;
}}set{set{
this.VitesseMax = value;this.VitesseMax = value;}}
}}
1212www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
7/26
18/05/2012
http://www.ista-ntic.net 7
ExempleExemple//mthode daccs en lecture seul//mthode daccs en lecture seul
public int PVitesseC{public int PVitesseC{get{get{
return this.VitesseCour;return this.VitesseCour;}}
}}
public void Accelere(int v)public void Accelere(int v){{
this.VitesseCour += v;this.VitesseCour += v;if (this.PVitesseC > this.PVitesseM) this.VitesseCour = this.PVitesseM;if (this.PVitesseC > this.PVitesseM) this.VitesseCour = this.PVitesseM;
}}
public override string ToString()public override string ToString(){{
return "Vehicule : " + Convert.ToString(this.PMarque) + " " +return "Vehicule : " + Convert.ToString(this.PMarque) + " " +Convert.ToString(this.PPuissanceF) + "Convert.ToString(this.PPuissanceF) + " -- Vitesse : " +Vitesse : " +Convert.ToString(this.PVitesseC) + "/" + Convert.ToString(this.PVitesseM);Convert.ToString(this.PVitesseC) + "/" + Convert.ToString(this.PVitesseM);
}}
}}}}
1313www.istawww.ista--ntic.netntic.net
Programme principaleProgramme principale
using System;using System;class Programclass Program{{
static void Main(string[] args)static void Main(string[] args){{Vehicule rn=new Vehicule() ;Vehicule rn=new Vehicule() ;Console.WriteLine(rn.ToString());Console.WriteLine(rn.ToString());Vehicule pg = new Vehicule("Peugeut", 7, 187);Vehicule pg = new Vehicule("Peugeut", 7, 187);
Console.WriteLine(pg.ToString());Console.WriteLine(pg.ToString());pg.Accelere(60);pg.Accelere(60);Console.WriteLine(pg.ToString());Console.WriteLine(pg.ToString());
pg.Accelere(80);pg.Accelere(80);pg.Accelere(60);pg.Accelere(60);Console.WriteLine(pg.ToString());Console.WriteLine(pg.ToString());Console.ReadKey();Console.ReadKey();}}
}}
1414www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
8/26
18/05/2012
http://www.ista-ntic.net 8
DestructeurDestructeur
EnEn C#C# onon nene dclenchedclenche paspas explicitementexplicitement lala destructiondestruction d'und'un objetobjet.. LesLesinstancesinstances serontseront dtruitesdtruites parpar lele systmesystme lorsqu'elleslorsqu'elles nene sontsont plusplus rfrencesrfrencesetet quilquil serasera ncessairencessaire dede rcuprerrcuprer desdes ressourcesressources mmoiremmoire.. LeLe programmeprogrammequiqui sese chargecharge dede cettecette tchetche s'appelles'appelle lele GarbageGarbage CollectorCollectorou,ou, enen franais,franais,leleramasseramasse--miettesmiettes..
Les destructeurs ne peuvent pas tre dfinis dans des struct. Ils sontLes destructeurs ne peuvent pas tre dfinis dans des struct. Ils sontutiliss uniquement avec les classes.utiliss uniquement avec les classes. Une classe peut possder un seul destructeur.Une classe peut possder un seul destructeur. Les destructeurs ne peuvent pas tre hrits ou surchargs.Les destructeurs ne peuvent pas tre hrits ou surchargs. Les destructeurs ne peuvent pas tre appels. Ils sont appelsLes destructeurs ne peuvent pas tre appels. Ils sont appelsautomatiquement.automatiquement.
Un destructeur n'accepte pas de modificateurs ni de paramtres.Un destructeur n'accepte pas de modificateurs ni de paramtres.~NomClass() //~NomClass() // Cette mthode s'appelleCette mthode s'appelle destructeurdestructeur..{ //programme (Exp: libration des ressources){ //programme (Exp: libration des ressources)}}Dans le programme principale on peut forc le Garbage Collector par laDans le programme principale on peut forc le Garbage Collector par la
procdure: GC.Collect()procdure: GC.Collect()
1515www.istawww.ista--ntic.netntic.net
Proprits et Mthodes partagProprits et Mthodes partag
Public class test{Public class test{Public static Type Attribut;Public static Type Attribut;Public static Type NomMeth(){Public static Type NomMeth(){
}}}}Lutilisation de lattribut ou la mthode se fait via la classe directement.Lutilisation de lattribut ou la mthode se fait via la classe directement.Test.NomMeth Ou test.Attribut sans instanciation.Test.NomMeth Ou test.Attribut sans instanciation.Exp :Exp :
Private static int iCompteur;Private static int iCompteur;
Public test(){Public test(){iCompteur += 1;iCompteur += 1;}}
~test(){~test(){iCompteuriCompteur --= 1;= 1;
}}Si en affiche la valeur de iCompteur en retrouve la nombre dobjet instancier etSi en affiche la valeur de iCompteur en retrouve la nombre dobjet instancier et
rfrenci dans le programme en mmoire.rfrenci dans le programme en mmoire.
1616www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
9/26
18/05/2012
http://www.ista-ntic.net 9
Les oprateurs daccessibilitLes oprateurs daccessibilit
Mot ClMot Cl DfinitionDfinition
PublicPublic Accessible partoutAccessible partout
PrivatePrivate Accs dans la classAccs dans la classuniquementuniquement
ProtectedProtected Accs classe et classesAccs classe et classesdrivesdrives
InternalInternal Accs ClasseAccs Classe -- Espace deEspace denomnom -- AssemblageAssemblage
1717www.istawww.ista--ntic.netntic.net
HritageHritage
LeLe conceptconcept d'hritaged'hritage estest l'unl'un desdes troistrois principauxprincipaux fondementsfondements dedelala ProgrammationProgrammation OrienteOriente Objet,Objet, lele premierpremier tanttant l'encapsulationl'encapsulation vuvuprcdemmentprcdemment etet lele dernierdernier tanttant lele polymorphismepolymorphisme quiqui serasera abordabordplusplus loinloin dansdans cece documentdocument
L'hritageL'hritage consisteconsiste enen lala crationcration d'uned'une nouvellenouvelle classeclasse ditedite classeclassedrivedrive partirpartir d'uned'une classeclasse existanteexistante ditedite classeclasse dede basebase ououclasseclasse parenteparente..
L'hritageL'hritage permetpermet dede :: RcuprerRcuprer lele comportementcomportement standardstandard d'uned'une classeclasse d'objetd'objet (classe(classeparente)parente) partirpartir desdes propritsproprits etet desdes mthodesmthodes dfiniesdfinies dansdanscellescelles--cici.. AjouterAjouter desdes fonctionnalitsfonctionnalits supplmentairessupplmentaires enen crantcrant dedenouvellesnouvelles propritsproprits etet mthodesmthodes dansdans lala classeclasse drivedrive.. ModifierModifier lele comportementcomportement standardstandard d'uned'une classeclasse d'objetd'objet (classe(classeparente)parente) enen surchargeantsurchargeant certainescertaines mthodesmthodes dede lala classeclasse parenteparentedansdans lala classeclasse drivedrive..
1818www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
10/26
18/05/2012
http://www.ista-ntic.net 10
ReprsentationReprsentation
LeLe diagrammediagramme cici--dessusdessusconstitueconstitue lala reprsentationreprsentationgraphiquegraphique dede lala hirarchiehirarchie dedeclassesclasses construiteconstruite partirpartir dedeClasseAClasseA..
C l a s s e A
C la s s e B C la s s e C
C l a s s e D
C l a s s e E
ClasseA
ClasseB ClasseC
ClasseDClasseE
DansDans lele cadrecadre dede lalaconceptionconception orienteoriente objet,objet,
lala mthodemthode UMLUML (( UnitedUnitedModelingModeling LanguageLanguage ))proposepropose uneune autreautrereprsentationreprsentation graphiquegraphiqued'uned'une telletelle hirarchiehirarchie ::
1919www.istawww.ista--ntic.netntic.net
ExempleExemplepublicpublic class Clientclass Client{ protected string NomClient;{ protected string NomClient;protected double CAClient;protected double CAClient;public Client()public Client(){ }{ }public Client(string nom, double ca)public Client(string nom, double ca){ this.NomClient = nom;{ this.NomClient = nom;
this.CAClient = ca;this.CAClient = ca;}}public string Nompublic string Nom{{ getget
{return this.NomClient; }{return this.NomClient; }setset{this.NomClient = value; }{this.NomClient = value; }
}}public double CApublic double CA{ set{ set
{this.CAClient = value; }{this.CAClient = value; }}}public virtual double finance()public virtual double finance(){ return this.CAClient;{ return this.CAClient;}}public override string ToString()public override string ToString(){ return " Nom: " + this.Nom + " CA : " + Convert.ToString(this.finance());{ return " Nom: " + this.Nom + " CA : " + Convert.ToString(this.finance());}}
}}2020www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
11/26
18/05/2012
http://www.ista-ntic.net 11
ExempleExemplepublic class Grossiste:Clientpublic class Grossiste:Client
{ private double TxRemiseClient;{ private double TxRemiseClient;public Grossiste():base(){public Grossiste():base(){}}public Grossiste(string nom, double ca, double rm):base(nom,ca){public Grossiste(string nom, double ca, double rm):base(nom,ca){
this.TxRemise = rm;this.TxRemise = rm;}}public double TxRemise{public double TxRemise{
get{ return this.TxRemiseClient;get{ return this.TxRemiseClient;}}set{ this.TxRemiseClient = value;set{ this.TxRemiseClient = value;}}
}}
public double calrm(){public double calrm(){return this.CAClient * this.TxRemise;return this.CAClient * this.TxRemise;
}}public override double finance()public override double finance(){ return this.CAClient * (1{ return this.CAClient * (1 -- this.TxRemise);this.TxRemise);}}
}}
2121www.istawww.ista--ntic.netntic.net
Exemple (Excution)Exemple (Excution)
Programme Principal (main) :Programme Principal (main) :
ClientClient cl = new Client("Ali", 1000);cl = new Client("Ali", 1000);GrossisteGrossiste clgclg = new Grossiste("Ahmed= new Grossiste("Ahmed",1000,0.15);",1000,0.15);Console.WriteLineConsole.WriteLine((cl.ToStringcl.ToString());());Console.WriteLineConsole.WriteLine((clg.ToStringclg.ToString());());Console.ReadLineConsole.ReadLine();();
Excution :Excution :
www.istawww.ista--ntic.netntic.net 2222
7/25/2019 M11-POO-CSNet 2012-05-18
12/26
18/05/2012
http://www.ista-ntic.net 12
Surcharge (mthodes/Oprateur)Surcharge (mthodes/Oprateur)public int Add(int A, int B){return A+B;}
public string Add(string A, string B){return A+B;}
LaLa surchargesurcharge desdes mthodesmthodes avecavec lele mmemme nom,nom, sese faitfait parpar lele changementchangementdede leurleur signaturesignature (le(le nombrenombre dede paramtre,paramtre, lele typetype desdes paramtre)paramtre)
EnEn peutpeut aussiaussi avoiravoir uneune surchargesurcharge desdes oprateursoprateurs (+,(+,--,x,/,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);
}}
2323www.istawww.ista--ntic.netntic.net
Redfinition des mthodesRedfinition des mthodesMthode ~NomClass: le destructeur vu prcdemment.
Mthode ToString():Pour la classe fractionpublic 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;}}
2424www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
13/26
18/05/2012
http://www.ista-ntic.net 13
Complment hritage(Modificateur)Complment hritage(Modificateur) AbstractAbstract (Class)(Class):: CeCe motmot clcl indiqueindique qu'unequ'une classeclasse nene peutpeut tretre
instancier,instancier, etet qu'ellequ'elle nene peutpeut doncdonc tretre utiliseutilise queque commecomme classeclassedede base,base, uneune classeclasse abstretabstret..
AbstractAbstract (Mthode)(Mthode):: utilisutilis pourpour lesles mthodesmthodes quonquon veutveut forcforcleurleur redfinitionredfinition dansdans lesles classesclasses driv,driv, enen dfinidfini seulementseulement lalasignaturesignature sanssans corpscorps..
SealedSealed (Class)(Class):: AA l'inversel'inverse dede abstract,abstract, cece motmot--clcl indiqueindique quequecettecette classeclasse nene peutpeut paspas tretre hrite,hrite, etet peutpeut etresetres instancier,instancier,c'estc'est----diredire servirservir dede classeclasse dede basebase..
VirtualVirtual (Mthode)(Mthode):: cece motmot--clcl indiqueindique queque cettecette mthodemthode peutpeut
tretre redfinieredfinie dansdans uneune classeclasse drivdriv.. SealedSealed (Mthode)(Mthode):: AA l'inverse,l'inverse, cece motmot--clcl indiqueindique queque cettecette
mthodemthode nene peutpeut tretre redfinieredfinie dansdans uneune classeclasse drivdriv.. NewNew (Mthode(Mthode--Attribut)Attribut):: lele motmot clcl newnew masquemasque explicitementexplicitement
unun membremembre hrithrit d'uned'une classeclasse dede base(avecbase(avec signateursignateur diffrentediffrenteetet mmemme nom)nom).. LorsqueLorsque vousvous masquezmasquez unun membremembre hrit,hrit, lalaversionversion drivedrive dudu membremembre remplaceremplace lala versionversion dede classeclasse dede basebase..
2525www.istawww.ista--ntic.netntic.net
PolymorphismePolymorphisme
Le polymorphisme est un mcanisme via lequel un objetpeut prendre plus d'une forme. Par exemple, si vous avez uneclasse de base nomme Client, une rfrence de type Clientpeut tre utilis pour contenir un objet de n'importe laquellede ses classes drives. Quand vous appelez une mthode partir de votre objet, le systme dtermineraautomatiquement le type de l'objet afin d'appeler la mthodeapproprie.
Client x;Client cl = New Client("Ali", 1000);Grossiste clg = New Grossiste("Ahmed", 1000, 0.15);x = cl;Console.WriteLine(x.ToString());x = clg;Console.WriteLine(x.ToString());
2626www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
14/26
18/05/2012
http://www.ista-ntic.net 14
Implmentation des InterfacesImplmentation des InterfacesUne interface est une collection de prototypes reprsentant les membresUne interface est une collection de prototypes reprsentant les membres
(proprits, procdures et vnements) que l'interface encapsule. Les interfaces(proprits, procdures et vnements) que l'interface encapsule. Les interfacescontiennent uniquement lescontiennent uniquement les dclarationsdclarations des membres, les classes et les structuresdes membres, les classes et les structuresimplmentent ces membresimplmentent ces membres
Exp:Exp:interface TestInterfaceinterface TestInterface
{{double Properiete1{get;}double Properiete1{get;}double Methode1(int X);double Methode1(int X);
}}class ClassImplementation: TestInterfaceclass ClassImplementation: TestInterface
{{private double Attribut1;private double Attribut1;
public double Properiete1 {public double Properiete1 {get { return Attribut1; }get { return Attribut1; }set { Attribut1 = value; }set { Attribut1 = value; }
}}public double Methode1(int X) {public double Methode1(int X) {
Attribut1 = Math.Sqrt(X);Attribut1 = Math.Sqrt(X);return Attribut1;return Attribut1;
}}}}
2727www.istawww.ista--ntic.netntic.net
Les Exceptions(Gestion Erreur)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 daffectation2 {... et un seul }
- Les erreurs de logique : quand la conception du programme (logiciel) qui estincorrect, des donnes justes nous donnes des rsultats faut. Donc il faut revoir laconception.
- Les erreurs d'excution : Elle surviennent en mode Run ou lors de l'utilisation del'excutable, une instruction ne peut pas tre effectue. Le logiciel s'arrtebrutalement, c'est trs gnant!! Pour l'utilisateur c'est un 'BUG
division par zrostring 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 finallySyntaxe :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()); }finallyfinally { Console.WriteLine("Executing finally block."); }{ Console.WriteLine("Executing finally block."); }
2828www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
15/26
18/05/2012
http://www.ista-ntic.net 15
Les ExceptionsLes Exceptions
CetteCette classeclasse (Exception)(Exception) estest lala classeclasse dede basebasepourpour toutestoutes lesles exceptionsexceptions.. Lorsqu'uneLorsqu'une erreurerreur seseproduit,produit, lele systmesystme ouou l'applicationl'application enen courscoursd'excutiond'excution lala signalesignale enen levantlevant uneune exceptionexception quiquicontientcontient desdes informationsinformations sursur l'erreurl'erreur.. UneUne foisfoisleve,leve, uneune exceptionexception estest gregre parpar l'applicationl'applicationouou parpar lele gestionnairegestionnaire d'exceptionsd'exceptions parpar dfautdfaut..
Exp:Exp: ArithmeticExceptionArithmeticException DivideByZeroExceptionDivideByZeroException NotFiniteNumberExceptionNotFiniteNumberException OverflowExceptionOverflowException
2929www.istawww.ista--ntic.netntic.net
Les Exceptions PersonnalisLes Exceptions PersonnalisOn peut crer une nouvelle classe dexception qui hrite deOn peut crer une nouvelle classe dexception qui hrite de
la classe Exception avec dfinition des constructeurs, etla classe Exception avec dfinition des constructeurs, eten peut faire appel a cet Exception par le mot clen peut faire appel a cet Exception par le mot cl throwthrow..
class Personneclass Personne{{
private string _Nom;private string _Nom;private int _Age;private int _Age;public string Nom{public string Nom{
get{return _Nom;}get{return _Nom;}set{_Nom = value;}set{_Nom = value;}
}}public int Age {public int Age {
get{return _Age;}get{return _Age;}set{set{
if (value < 0)if (value < 0)throw new AgeException("Erreur : Age Ngatif");throw new AgeException("Erreur : Age Ngatif");elseelse
_Age = value;_Age = value;}}
}}public Personne(string No, int Ag){public Personne(string No, int Ag){
this.Nom = No;this.Nom = No;this.Age = Ag;this.Age = Ag;
}}public override string ToString(){public override string ToString(){
return this.Nom + " (Age :" + this.Age.ToString() +return this.Nom + " (Age :" + this.Age.ToString() +")";")";}}
}}
class AgeException:Exceptionclass AgeException:Exception{{
public AgeException() {public AgeException() {}}public AgeException(string message):base(message) {public AgeException(string message):base(message) {}}public AgeException(string message, Exception Inner)public AgeException(string message, Exception Inner)
: base(message, Inner): base(message, Inner){{}}
}}
Programme Principal :Programme Principal :
Personne p;Personne p;try{try{
p = new Personne("Ali", 0);p = new Personne("Ali", 0);p.Age =p.Age = --5;5;//p.Age = "A";//p.Age = "A";}}
catch (AgeException ex){catch (AgeException ex){Console.WriteLine(ex.ToString());}Console.WriteLine(ex.ToString());}
catch (Exception ex){catch (Exception ex){Console.WriteLine("Error : " + ex.ToString());}Console.WriteLine("Error : " + ex.ToString());}
Console.ReadKey();Console.ReadKey();
3030www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
16/26
18/05/2012
http://www.ista-ntic.net 16
Objets StringObjets StringDim 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 uneautre.Substring(n,l) : Extrait une partie dune chaneExp :Exp :
string str = Bonjour Console.Write(str.length); 7Console.Write(str.replace( jour , soir )); Bonsoir
3131www.istawww.ista--ntic.netntic.net
C lo ne Reto urne une r f rence ce tt e i nst ance deS tri ng.
Compare Surcharg. Compare deux objetsString spcifis et retourne un entier qui indique la relation entre ces deux objets dans l'ordre de tri.
Concat Surcharg. Concatne une ou plusieurs instances de Stringou les reprsentations String des valeurs d'une ou de plusieurs instances de Object.
Contains Retourne une valeur qui indique si l'objet String spcifi apparat dans cette chane.
Copy Cre une nouvelle instance deStr ingayant la mme valeur qu'unString spci fi.
CopyTo Copie un nombre spcifi de caractres partir d'une position dfinie dans cette instance vers une position spcifie dans un tableau de caractresUnicode.
EndsWith Surcharg. Dtermine si la fin d'une instance de String correspond une chane spcifie.
Equals Surcharg.Dtermine s i deux objetsStr ingont la mme valeur.
Finalize Autorise Object tenter de librer des ressources et d'excuter d'autres oprations de nettoyage avant que Objectsoit rcupr par l'opration garbagecollection. (Hrit de Object.)
Format Surcharg. Remplace chaque lment de mise en forme dans un Stringspcifi par l'quivalent textuel de la valeur d'un objet correspondant.
IndexOf Surcharg. Signale l'index de la premire occurrence d'unString, ou d'un ou de plusieurs caractres de cette chane.
Insert Insre une instance spcifie deStringau point d'index indiqu dans cette instance.
IsNullOrEmpty Indique si l'objetStringspcifi estnull ou une chane Empty.
Join Surcharg. Concatne un sparateur spcifi de Stringentre chaque lment d'un tableau String indiqu, donnant lieu une chane concatne unique.
LastIndexOf Surcharg. Signale le point d'index de la dernire occurrence d'un caractre Unicode spcifi ou String dans cette instance.
PadLeft 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.PadRight 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.
Remove Surcharg.Supprime de cette instance le nombre spcif i de caractres.
Replace Surcharg. Remplace toutes les occurrences d'un caractre Unicode spcifi ou Stringdans cette instance par un autre caractre Unicode spcifiou String.
Split 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 decaractres Unicode spcifi.
StartsWith Surcharg. Dtermine si le dbut d'une instance de Stringcorrespond une chane spcifie.
Substring Surcharg.Rcupre une sous-chane de cette instance.
ToCharArray Surcharg. Copie les caractres dans cette instance vers un tableau de caractres Unicode.
ToLower Surcharg.Retourne une copie de Str ingen minuscules.
ToString Surcharg.Convertit la valeur de cette instance en String.
ToUpper Surcharg.Retourne une copie de Str ingen majuscules.
Trim Surcharg. Supprime, de l'objet String actuel, toutes les occurrences situes au dbut et la fin d'un jeu de caractres spcifis.
TrimEnd Supprime, de l'objet Stringactuel, toutes les occurrences situes la fin d'un jeu de caractres spcifis dans un tableau.
TrimStart Supprime, de l'objet String actuel, toutes les occurrences situes au dbut d'un jeu de caractres spcifis dans un tableau.
3232
7/25/2019 M11-POO-CSNet 2012-05-18
17/26
18/05/2012
http://www.ista-ntic.net 17
ExercicesExercices
crire un programme qui lit unecrire un programme qui lit unechane STR au clavier et un caractrechane STR au clavier et un caractreC de cette chane, qui va cherch leC de cette chane, qui va cherch lenombre doccurrence et le supprimenombre doccurrence et le supprimedans la chane STR.dans la chane STR.
Inverser une chane de caractre.Inverser une chane de caractre. Remplacer le premier caractre deRemplacer le premier caractre de
chaque mot dans une phrase par lechaque mot dans une phrase par lemajuscule.majuscule.
3333www.istawww.ista--ntic.netntic.net
LObjet RegexLObjet RegexLaLa classeclasse RegexRegex ((SystemSystem..TextText..RegularExpressionsRegularExpressions)) permetpermet l'utilisationl'utilisation
d'expressiond'expression rguliresrgulires.. CellesCelles--cici permettentpermettent dede testertester lele formatformat d'uned'une chanechanedede caractrescaractres.. AinsiAinsi onon peutpeut vrifiervrifier qu'unequ'une chanechane reprsentantreprsentant uneune datedate estestbienbien auau formatformat jj/mm/aajj/mm/aa.. OnOn utiliseutilise pourpour celacela unun modlemodle etet onon comparecompare lalachanechane cece modlemodle.. AinsiAinsi dansdans cetcet exemple,exemple, jj mm etet aa doiventdoivent tretre desdeschiffreschiffres.. LeLe modlemodle d'und'un formatformat dede datedate validevalide estest alorsalors ""\\dd\\d/d/\\dd\\d/d/\\dd\\d"d" oo lelesymbolesymbole \\dd dsignedsigne unun chiffrechiffre..
// une expression rgulire modle// une expression rgulire modlestring modle1 = @"string modle1 = @"\\dd\\d/d/\\dd\\d/d/\\dd\\d";d";Regex regex1 = new Regex(modle1);Regex regex1 = new Regex(modle1);
// comparer un exemplaire au modle// comparer un exemplaire au modlestring exp1 = " 123 ";string exp1 = " 123 ";if (regex1.IsMatch(exp1))if (regex1.IsMatch(exp1))
Console.WriteLine(("[" + exp1 + "] correspond au modle [" + modle1 + "]"));Console.WriteLine(("[" + exp1 + "] correspond au modle [" + modle1 + "]"));elseelse
Console.WriteLine(("[" + exp1 + "] ne correspond pas au modle [" + modle1 + "]"));Console.WriteLine(("[" + exp1 + "] ne correspond pas au modle [" + modle1 + "]"));
string exp2 = "01/02/10"; //" 123 ";string exp2 = "01/02/10"; //" 123 ";if (regex1.IsMatch(exp2))if (regex1.IsMatch(exp2))
Console.WriteLine(("[" + exConsole.WriteLine(("[" + expp2 + "] correspond au modle [" + modle1 + "]"));2 + "] correspond au modle [" + modle1 + "]"));elseelse
Console.WriteLine(("[" + exp2 + "] ne correspond pas au modle [" + modle1 + "]"));Console.WriteLine(("[" + exp2 + "] ne correspond pas au modle [" + modle1 + "]"));Console.ReadKey();Console.ReadKey();
3434www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
18/26
18/05/2012
http://www.ista-ntic.net 18
Caractre Description
\ Marque le caractre suivant comme caractre spcial ou littral. Par exemple, "n" correspond au cara ctre "n". "\n" correspond un caractrede 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 un e fois. Par exemple, "a?ve?" correspond "ve" dans "lever".
. Correspond tout caractre unique, sauf le caractre de nouvelle ligne.
(modle) 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 "\)".
x|y Correspond soit x soit y. Par exemple, "z|foot" correspond "z" ou "foot". "(z|f)oo" correspond "zoo" ou "foo".
{n} n est un nom bre entier non ngatif. Correspond exactement n fois le caractre. Par exemple, "o{2}" ne correspond pas "o" dan s "Bob,"mais aux deux premiers "o" dans "fooooot".
{n,} n est un entier non ngatif. Correspond au moin s n fois le caractre. Par exemple, "o{2,}" ne correspond pas "o" dan s "Bob", mais tousles "o" dans "fooooot". "o{1,}" quivaut "o+" et "o{0,}" quivaut "o*".
{n,m} 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?".[xyz] Jeu de caractres. Correspond l'un des cara ctres indiqus. Par exemple, "[abc]" correspond "a" dans "plat".
[ xyz] Jeu de caractres ngatif. Correspond tout caractre n on indiqu. Par exemple, "[^abc]" correspond "p" dans "plat".
[a-z] Plage de caractres. Correspond tout caractre dans la srie spcifie. Par exemple, "[a-z]" correspond tout caractre alphabtiqueminuscule compris entre "a" et "z".
[^m-z] Plage de caractres ngative. Correspond tout caractre ne se tr ouvant pas dans la srie spcifie. Par exemple, "[^mz]" correspond toutcaractre ne se trouvant pas entre "m" et "z".
\b 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".
3535www.istawww.ista--ntic.netntic.net
\B Correspond une limite ne reprsentant pas un mot. "en*t\B" correspond "ent" dan s "bien entendu".
\d Correspond un caractre reprsentant un chiffre. quivaut [0-9].
\D Correspond un caractre ne reprsentan t pas un chiffre. quivaut [^0-9].
\f Correspond un caractre de saut de page.
\n Correspond un caractre de nouvelle ligne
\r Correspond un caractre de retour char iot.
\s Correspond tout espace blanc, y compris l'espace, la tabulation, le saut de page, etc. quivaut "[ \f\n\r\t\v]".
\S Correspond tout caractre d'espace non blanc. quivaut "[^ \f\n\r\t\v]".
\t Correspond un caractre de tabulation
\v Correspond un caractre de tabulation verticale.
\w Correspond tout caractre reprsentant un mot et incluan t un trait de soulignement. quivaut "[A-Za-z0-9_]".
\W Correspond tout caractre ne reprsentant pas un mot. quivaut "[^A-Za-z0-9_]".
\num Correspond num, o num est un entier positif. Fait rfrence aux correspondances mmorises. Par exemple, "(.)\1" correspond deuxcaractres identiques conscutifs.
\n Correspond n, o n est une valeur d'chappement octale. Les valeurs d'chappement octales doivent comprendre 1, 2 ou 3 chiffres. Parexemple, "\11" et "\011" correspondent tous les deux un caractre de tabulation. "\0011" quivaut "\001" & "1". Les valeursd'chappement octales ne doivent pas excder 256. Si c'tait le cas, seuls les deux premiers chiffres seraient pris en compte dansl'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 deuxchiffres obligatoirement. Par exemple, "\x41" correspond "A". "\x041" quivaut "\x04" & "1". Permet d'utiliser les codes ASCIIdans des expressions rgulires
3636www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
19/26
18/05/2012
http://www.ista-ntic.net 19
Regex (exemple)
3737www.istawww.ista--ntic.netntic.net
Les collectionsLes collectionsLe .NET Framework fournit des classes spcialises pour le stockage et la
rcupration des donnes. Ces classes fournissent la prise en charge des piles, filesd'attente, listes et tables de hachage. La plupart des classes de collection implmententles mmes interfaces.
lusage de Collection est Une alternative aux tableaux. Fait partie de lespace denom System.Collections ou Systeme.Collections.Generic
Une collection fonctionne plutt comme un groupe d'lments dans laquelle il estposs ible dajouter ou denlever un lment nimporte quel endroit sans avoir seproccuper de sa taille ni ou se trouve l'lment.
Le nombre d'lment n'est pas dfini au dpart comme dans un tableau. Dans unecollection i l 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 permettentd'tre traits comme des collections. Types collection ArrayList et List : Dcrit les fonctionnalits des listes gnriques etnon gnriques, qui constituent les types de collection les plus frquemment utiliss. Types collection Hashtable et Dictionary : Dcrit les fonctionnalits des types dedictionnaires gnriques et non gnriques bass sur le hachage. Types collection SortedList et SortedDictionary : Dcrit les types de dictionnaire triet les types hybrides qui associent les fonctionnalits d'un dictionnaire celles d'uneliste. Types collection Queue : Dcrit les fonctionnalits des files d'attente gnriques etnon gnriques. Types collection Stack : Dcrit les fonctionnalits des piles gnriques et nongnriques.
3838www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
20/26
18/05/2012
http://www.ista-ntic.net 20
ArrayArrayLa classe Array : Fournit des mthodes pour la cration, la manipulation, la rechercheainsi 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'objetint[] 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();}
3939www.istawww.ista--ntic.netntic.net
ArrayListArrayList
using System;using System;using System.Collections;using System.Collections;static void Main(string[] args)static void Main(string[] args)
{{// Creates and initializes a new ArrayList.// Creates and initializes a new ArrayList.ArrayList myAL = new ArrayList();ArrayList myAL = new ArrayList();myAL.Add("Hello");myAL.Add("Hello");myAL.Add("World");myAL.Add("World");myAL.Add("!");myAL.Add("!");
// Displays the properties and values of the ArrayList.// Displays the properties and values of the ArrayList.Console.WriteLine("myAL");Console.WriteLine("myAL");Console.WriteLine(" Count: {0}", myAL.Count);Console.WriteLine(" Count: {0}", myAL.Count);Console.WriteLine(" Capacity: {0}", myAL.Capacity);Console.WriteLine(" Capacity: {0}", myAL.Capacity);//Capacity : Obtient ou dfinit le nombre d'lments que ArrayList peut contenir//Capacity : Obtient ou dfinit le nombre d'lments que ArrayList peut contenirConsole.Write(" Values:");Console.Write(" Values:");PrintValues(myAL);PrintValues(myAL);Console.ReadKey();Console.ReadKey();
}}public static void PrintValues(IEnumerable myList)public static void PrintValues(IEnumerable myList){{
foreach (Object obj in myList)foreach (Object obj in myList)Console.Write(" {0}", obj);Console.Write(" {0}", obj);
Console.WriteLine();Console.WriteLine();}}
4040www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
21/26
18/05/2012
http://www.ista-ntic.net 21
HashtableReprsente une collection de paires cl/valeur qui sontReprsente une collection de paires cl/valeur qui sont
organises en fonction du code de hachage de la cl.organises en fonction du code de hachage de la cl.
Nom Description
Add Ajoute un lment avec la cl et la valeur spcifies dans Hashtable.
Clear Supprime tous les lments de Hashtable.
Contains Dtermine si Hashtable contient une cl spcifique.
ContainsKey Dtermine si Hashtable contient une cl spcifique.
ContainsValue Dtermine si Hashtable contient une valeur spcifique.
Equals Dtermine si l'objet Object spcifi est gal l'objet Object en cours. (Hrit deObject.)
GetType Obtient le Type de l'instance actuelle. (Hrit de Object.)
KeyEquals Compare un Object spcifique avec une cl spcifique dans Hashtable.
Remove Supprime de Hashtable l'lment ayant la cl spcifie.
ToString Retourne un String qui reprsente le Object en cours. (Hrit de Object.)
Count Obtient le nombre de paires cl/valeur contenues dans Hashtable.
Item Obtient ou dfinit la valeur associe la cl spcifie.
Keys Obtient ICollection contenant les cls de Hashtable.
Values Obtient ICollection contenant les valeurs de Hashtable.
4141www.istawww.ista--ntic.netntic.net
HashTableHashTable ((ExpExp))static void Main(string[] args)static void Main(string[] args){{ // Creation et initiation d'un nouveau Hashtable.// Creation et initiation d'un nouveau Hashtable.Hashtable myHT = new Hashtable();Hashtable myHT = new Hashtable();myHT.Add(0, "zero");myHT.Add(0, "zero"); myHT.Add(1, "one");myHT.Add(1, "one");myHT.Add(2, "two");myHT.Add(2, "two"); myHT.Add(3, "three");myHT.Add(3, "three");Console.WriteLine("le Hashtable contien les valeur suivant:");Console.WriteLine("le Hashtable contien les valeur suivant:");PrintIndexAndKeysAndValues(myHT);PrintIndexAndKeysAndValues(myHT); // Affichage des valeurs du Hashtable.// Affichage des valeurs du Hashtable.string rep1=string rep1= "est dans le Hashtable""est dans le Hashtable";;string rep2=string rep2= " n'est pas dans le Hashtable"" n'est pas dans le Hashtable";;// Recherche d'une Cl spcifique.// Recherche d'une Cl spcifique.int myKey = 2;int myKey = 2;Console.WriteLine("la ClConsole.WriteLine("la Cl \\"{0}"{0}\\" {1}.", myKey, myHT.ContainsKey(myKey) ?" {1}.", myKey, myHT.ContainsKey(myKey) ? rep1rep1::rep2rep2););
myKey = 6;myKey = 6;Console.WriteLine("la ClConsole.WriteLine("la Cl \\"{0}"{0}\\" {1}.", myKey, myHT.ContainsKey(myKey) ?" {1}.", myKey, myHT.ContainsKey(myKey) ? rep1rep1 :: rep2rep2););String myValue = "three";String myValue = "three"; // Recherche d'une valeur spcifique.// Recherche d'une valeur spcifique.Console.WriteLine("la valeurConsole.WriteLine("la valeur \\"{0}"{0}\\" {1}.", myValue, myHT.ContainsValue(myValue) ?" {1}.", myValue, myHT.ContainsValue(myValue) ? rep1rep1 :: rep2rep2););myValue = "nine";myValue = "nine";Console.WriteLine("la valeurConsole.WriteLine("la valeur \\"{0}"{0}\\" {1}.", myValue, myHT.ContainsValue(myValue) ?" {1}.", myValue, myHT.ContainsValue(myValue) ? rep1rep1 ::rep2rep2););Console.ReadKey();}Console.ReadKey();}
public static void PrintIndexAndKeysAndValues(Hashtable myHT)public static void PrintIndexAndKeysAndValues(Hashtable myHT){{ int i = 0;int i = 0;Console.WriteLine("Console.WriteLine("\\tt--INDEXINDEX--\\tt--KEYKEY--\\tt--VALUEVALUE--");");foreach (DictionaryEntry de in myHT)foreach (DictionaryEntry de in myHT)
Console.WriteLine("Console.WriteLine("\\t[{0}]:t[{0}]:\\t{1}t{1}\\t{2}", i++, de.Key, de.Value);t{2}", i++, de.Key, de.Value);Console.WriteLine();}Console.WriteLine();}
4242www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
22/26
18/05/2012
http://www.ista-ntic.net 22
La persistance des objetsLa persistance des objets
CetteCette illustrationillustration afficheaffiche leleprocessusprocessus globalglobal dede lalasrialisationsrialisation ::
L'objetL'objet estest srialissrialis unun fluxfluxquiqui contientcontient nonnon seulementseulement leslesdonnes,donnes, maismais galementgalement desdesinformationsinformations sursur lele typetyped'objet,d'objet, notammentnotamment sasa version,version,sasa cultureculture etet sonson nomnomd'assemblyd'assembly.. partirpartir dede cece flux,flux,ilil peutpeut tretre stockstock dansdans uneunebasebase dede donnes,donnes, dansdans ununfichierfichier ouou enen mmoiremmoire..
4343www.istawww.ista--ntic.netntic.net
Srialisation binaire et XMLSrialisation binaire et XML
SrialisationSrialisation binairebinaire :: LaLa srialisationsrialisation binairebinaire utiliseutilise lelecodagecodage binairebinaire afinafin dede produireproduire uneune srialisationsrialisation compactecompactedestinedestine notammentnotamment auau stockagestockage ouou auau fluxflux rseaurseau socketsocket.. IlIln'estn'est paspas convenableconvenable dede fairefaire passerpasser lesles donnesdonnes dansdans ununparepare--feufeu maismais lesles performancesperformances sontsont meilleuresmeilleures lorslors dudustockagestockage desdes donnesdonnes..(Voire(Voire lele CoursCours LPS)LPS)
SrialisationSrialisation XMLXML :: LaLa srialisationsrialisation XMLXML srialisesrialise lesleschampschamps etet lesles propritsproprits publicspublics d'und'un objet,objet, ouou leslesparamtresparamtres etet valeursvaleurs dede retourretour desdes mthodes,mthodes, enen unun fluxfluxXMLXML conformeconforme unun documentdocument dede langagelangage XSDXSD (XML(XML SchemaSchemaDefinition)Definition) spcifiquespcifique.. LaLa srialisationsrialisation XMLXML favorisefavorise desdesclassesclasses fortementfortement typestypes avecavec desdes propritsproprits etet desdes champschampspublicspublics convertisconvertis enen XMLXML.. SystemSystem..XmlXml..SerializationSerialization contientcontientlesles classesclasses ncessairesncessaires pourpour lala srialisationsrialisation etet laladsrialisationdsrialisation XMLXML
4444www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
23/26
18/05/2012
http://www.ista-ntic.net 23
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());}
}4545www.istawww.ista--ntic.netntic.net
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 textelogiquetry{
// cration du fichier textefluxInfos = 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 logiquestring ligne = "";string[] Tligne = null;try{
// cration du fichier textefluxInfos = 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{}}
}}
4646www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
24/26
18/05/2012
http://www.ista-ntic.net 24
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());}
}
4747www.istawww.ista--ntic.netntic.net
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 textefluxInfos = new FileStream("Client.dat",
FileMode.Open);BinaryFormatter formatter = new BinaryFormatter();
HtClient =(Hashtable)formatter.Deserialize(fluxInfos); }
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 textefluxInfos = 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 { }}
}}
4848www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
25/26
18/05/2012
http://www.ista-ntic.net 25
Srialisation XML (Exemple)
public class Employeepublic class Employee{{
public string EmpName;public string EmpName;public string EmpID;public string EmpID;public Employee(){}public Employee(){}public Employee(string newName, string newID){public Employee(string newName, string newID){
this.EmpName = newName;this.EmpName = newName;this.EmpID = newID;this.EmpID = newID;
}}
public override string ToString()public override string ToString(){{
return this.EmpID + " " + this.EmpName ;return this.EmpID + " " + this.EmpName ;}}
}}
4949www.istawww.ista--ntic.netntic.net
public class Employees:ICollectionpublic class Employees:ICollection{ public string CollectionName;{ public string CollectionName;
private ArrayList empArray = new ArrayList();private ArrayList empArray = new ArrayList();
public Employee this[int index]public Employee this[int index]{ get { return (Employee)empArray[index]; }{ get { return (Employee)empArray[index]; }}}public void CopyTo(Array a, int index)public void CopyTo(Array a, int index){ empArray.CopyTo(a, index);{ empArray.CopyTo(a, index);}}public int Countpublic int Count{ get { return empArray.Count; }{ get { return empArray.Count; }}}public object SyncRootpublic object SyncRoot
{ get { return this; }{ get { return this; }}}public bool IsSynchronizedpublic bool IsSynchronized{ get { return false; }{ get { return false; }}}public IEnumerator GetEnumerator()public IEnumerator GetEnumerator(){ return empArray.GetEnumerator();{ return empArray.GetEnumerator();}}public void Add(Employee newEmployee)public void Add(Employee newEmployee){ empArray.Add(newEmployee);{ empArray.Add(newEmployee);}}
}} 5050www.istawww.ista--ntic.netntic.net
7/25/2019 M11-POO-CSNet 2012-05-18
26/26
18/05/2012
Exemple (Suite) : Main()Exemple (Suite) : Main()Employees Emps = new Employees();Employees Emps = new Employees();Emps.CollectionName = "Employees";Emps.CollectionName = "Employees";Employee John100 = new Employee("John00", "100xxx");Employee John100 = new Employee("John00", "100xxx");Emps.Add(John100);Emps.Add(John100);Employee John101 = new Employee("John01", "101xxx");Employee John101 = new Employee("John01", "101xxx");Emps.Add(John101);Emps.Add(John101);
XmlSerializer x = new XmlSerializer(typeof(Employees));XmlSerializer x = new XmlSerializer(typeof(Employees));//Serialisation Emps//Serialisation EmpsTextWriter writer = new StreamWriter("Coll.xml");TextWriter writer = new StreamWriter("Coll.xml");x.Serialize(writer, Emps);x.Serialize(writer, Emps);writer.Close();writer.Close();
//Dserialisation Emps0//Dserialisation Emps0Employees Emps0 = new Employees();Employees Emps0 = new Employees();XmlReader XmlRid = XmlReader.Create("Coll.xml", newXmlReader XmlRid = XmlReader.Create("Coll.xml", newXmlReaderSettings());XmlReaderSettings());
Emps0 = (Employees)x.Deserialize(XmlRid);Emps0 = (Employees)x.Deserialize(XmlRid);XmlRid.Close();XmlRid.Close();
// Affichage// Affichageforeach (Employee E in Emps0)foreach (Employee E in Emps0)
Console.WriteLine(E.ToString());Console.WriteLine(E.ToString());Console.ReadKey()Console.ReadKey();;
John00John00100xxx100xxxJohn01John01101xxx101xxx
5151www.istawww.ista--ntic.netntic.net
Recommended