Vous êtes sur la page 1sur 25
M14M14 :: POOPOO CS.NetCS.Net FormateurFormateur :: DriouchDriouch (cfmoti.driouch@gmail.com)(cfmoti.driouch@gmail.com)
M14M14 :: POOPOO
CS.NetCS.Net
FormateurFormateur :: DriouchDriouch (cfmoti.driouch@gmail.com)(cfmoti.driouch@gmail.com)
EtablissementEtablissement :: OFPPT/DRGC/CFMOTIOFPPT/DRGC/CFMOTI
24/06/201124/06/2011
http://www.istahttp://www.ista--ntic.net/ntic.net/
http://www.driouchb.0fees.nethttp://www.driouchb.0fees.net//
www.istawww.ista--ntic.netntic.net
11

PlanPlan

NotionNotion d’Objetd’Objet –– ClasseClasse -- InstanciationInstanciation EncapsulationEncapsulation (Propriété(Propriété etet MéthodesMéthodes d’accès)d’accès) ConstructeursConstructeurs (Constructeur(Constructeur dede copie)copie) –– Destructeur(GarbageDestructeur(Garbage Collector)Collector) HéritageHéritage (Surcharge(Surcharge Méthode/OpérateurMéthode/Opérateur –– Redéfinition)Redéfinition) PolymorphismePolymorphisme LesLes ExceptionsExceptions LesLes ObjetsObjets Courants(enCourants(en .Net).Net) ObjetObjet dede collectioncollection LesLes InterfacesInterfaces LaLa persistancepersistance (Sérialisation(Sérialisation binaire,binaire, ObjetObjet etet XMLXML))

www.istawww.ista--ntic.netntic.net

22

NotionNotion d’objetd’objet UnUn objetobjet estest uneune entitéentité cohérentecohérente
NotionNotion d’objetd’objet
UnUn
objetobjet
estest
uneune
entitéentité
cohérentecohérente
rassemblantrassemblant desdes
donnéesdonnées
etet
dudu
codecode
travaillanttravaillant sursur cesces données.données.
www.istawww.ista--ntic.netntic.net
33
ClasseClasse UneUne classeclasse estest uneune descriptiondescription abstraiteabstraite d’und’un objet.objet.
ClasseClasse
UneUne classeclasse estest uneune descriptiondescription abstraiteabstraite
d’und’un objet.objet. ElleElle peutpeut êtreêtre considéréeconsidérée enen
quelquequelque sortesorte commecomme unun moule…moule…
Véhicule
+Marque : string(idl)
+Puissance fiscale : int
+Vitesse maximale : int
+Vitesse courante : int
Nom de la classe
Description des attributs
ou données membres
+Creer un véhicule()
+Détruire un véhicule()
+Démarrer()
+Accélérer(entrée Taux : int)
Description des méthodes
= code associé
www.istawww.ista--ntic.netntic.net
44
InstanciationInstanciation ChaqueChaque objetobjet correspondcorrespond àà uneune instanceinstance dede lala
InstanciationInstanciation
ChaqueChaque
objetobjet
correspondcorrespond
àà
uneune
instanceinstance dede lala classeclasse àà laquellelaquelle ilil faitfait
référence.référence.
Véhicule
+Marque : string(idl)
+Puissance fiscale : int
+Vitesse maximale : int
+Vitesse courante : int
Marque = Peugeot
Puissance = 7
Vitesse maximale = 197
Vitesse courante = 98
+Creer un véhicule()
+Détruire un véhicule()
+Démarrer()
+Accélérer(entrée Taux : int)
Marque = Renault
Puissance = 5
Vitesse maximale = 176
Vitesse courante = 65
www.istawww.ista--ntic.netntic.net
55

InstanciationInstanciation

LaLa créationcréation d’und’un objetobjet estest constituéeconstituée dede deuxdeux phasesphases ::

UneUne phasephase dudu ressortressort dede lala classeclasse :: allouerallouer dede lala mémoiremémoire etet unun contextecontexte d’exécutiond’exécution minimaliste.minimaliste. MéthodeMéthode dede classeclasse UneUne phasephase dudu ressortressort dede l’objetl’objet :: initialiserinitialiser sesses attributsattributs d’instance.d’instance. MéthodeMéthode d’instanced’instance

DansDans lesles langageslangages telstels queque Java,Java, C++,C++, VBVB ouou C#,C#, cesces deuxdeux phasesphases nene sontsont paspas différenciées.différenciées.

AppelAppel àà uneune méthodeméthode spécialespéciale :: lele constructeurconstructeur

www.istawww.ista--ntic.netntic.net

66

EncapsulationEncapsulation

AbstractionAbstraction dede donnéesdonnées ::

LaLa structurestructure d’und’un objetobjet n’estn’est paspas visiblevisible dede l’extél’extérieur.rieur. SeuleSeule sonson interfaceinterface estest accessibleaccessible parpar lele biaisbiais dede messagesmessages invocablesinvocables parpar lele client.client.

AbstractionAbstraction procéduraleprocédurale ::

L’invocationL’invocation d’und’un messagemessage estest uneune opérationopération atomiquatomique.e. AucunAucun élémentélément d’informationd’information sursur lesles traitementstraitements intinternesernes mismis enen œuvreœuvre n’estn’est nécessaire.nécessaire.

DoncDonc pourpour chaquechaque objetobjet créercréer enen peutpeut limiterlimiter lesles accèsaccès ouou lesles contrôlercontrôler selonselon nosnos besoinbesoin pourpour cetcet objet.objet.

IntérieurIntérieur dede l’objetl’objet protégéprotégé ComplexitéComplexité dissimulédissimulé MaintenanceMaintenance simplifiésimplifié (centralisation)(centralisation) EchangesEchanges avecavec l’externel’externe sontsont codifiéscodifiés

www.istawww.ista--ntic.netntic.net

77

PropriétésPropriétés

LesLes propriétéspropriétés d'und'un objetobjet sontsont déclarées,déclarées, commecomme desdes variables,variables, àà l'intérieurl'intérieur dudu blocbloc contrôlécontrôlé parpar lele motmot cléclé classclass PublicPublic ClassClass NomDeLaClasseNomDeLaClasse

{{

PublicPublic TypeDeLaProprietéTypeDeLaProprieté NomDeLaPropriete;NomDeLaPropriete; //// DéclarationDéclaration desdes méthodesméthodes dede l'objetl'objet

}}

LesLes propriétéspropriétés peuventpeuvent êtreêtre déclaréesdéclarées àà touttout momentmoment àà l'intérieurl'intérieur dudu corpscorps dede lala classe.classe. ChaqueChaque déclarationdéclaration dede propriétépropriété (Attributs)(Attributs) estest conconstruitestruite soussous lele modèlemodèle suivantsuivant ::

PublicPublic TypeDeLaProprietéTypeDeLaProprieté NomDeLaPropriete;NomDeLaPropriete;

 

UneUne propriétépropriété peutpeut êtreêtre initialiséeinitialisée lorslors dede sasa décldéclarationaration ::

PublicPublic TypeDeLaProprietéTypeDeLaProprieté NomDeLaPropriete=valeurIniNomDeLaPropriete=valeurInitiale;tiale; LesLes identifiantsidentifiants dede propriétépropriété parpar conventionconvention commencommencentcent parpar uneune majuscule.majuscule.

www.istawww.ista--ntic.netntic.net

88

MéthodesMéthodes d’accèsd’accès

EnEn ProgrammationProgrammation OrientéeOrientée Objet,Objet, onon éviteévite d'accéderd'accéder directementdirectement

».». EnEn effet,effet, cettecette possibilitépossibilité nene

correspondcorrespond paspas auau conceptconcept d'encapsulation.d'encapsulation. CertainsCertains langageslangages

l'interdisentl'interdisent carrément.carrément.

AfinAfin d’implanterd’implanter correctementcorrectement lele conceptconcept d'encapsulation,d'encapsulation, ilil convientconvient dede verrouillerverrouiller l'accèsl'accès auxaux propriétéspropriétés etet dede lesles déclarerdéclarer privateprivate

parpar ddeses méthodesméthodes

simple(Gettersimple(Getter etet Setter)Setter) ouou parpar lesles PropertyProperty dede claclassesse

auxaux propriétéspropriétés parpar l'opérateurl'opérateur ««

L’L’ AccèsAccès auxaux attributsattributs membresmembres peutpeut sese fairefaire

publicpublic typetype nomClient{nomClient{ get{get{ returnreturn iNomClient;iNomClient;

}} set{set{ iNomClientiNomClient == value;value;

}}

}}

www.istawww.ista--ntic.netntic.net

99

ConstructeurConstructeur

QuandQuand uneune instanceinstance d'uned'une classeclasse d'objetd'objet estest crééecréée auau momentmoment dede l'instanciationl'instanciation d'uned'une variablevariable avecavec newnew,, uneune

fonctionfonction particulièreparticulière estest exécutée.exécutée. CetteCette fonctionfonction s'appelles'appelle lele

ElleElle permet,permet, entreentre autres,autres, d'initialiserd'initialiser chaquechaque

instanceinstance pourpour queque sesses propriétéspropriétés aientaient unun contenucontenu cohérent.cohérent.

constructeurconstructeur

PublicPublic Client(intClient(int numero,numero, stringstring nom){nom){ this.IDClientthis.IDClient == numero;numero; this.NomClientthis.NomClient == nom;nom;

}}

CelaCela vava permettrepermettre d'instancierd'instancier lala classeclasse ClientClient dede lala façonfaçon suivantesuivante ::

ClientClient clicli == NewNew Client(12,Client(12, "Sharraf");"Sharraf");

www.istawww.ista--ntic.netntic.net

1010

 

ConstructeurConstructeur dede recopierecopie

 

LeLe constructeurconstructeur dede recopierecopie permetpermet dede recopierrecopier lesles propriétéspropriétés d'und'un objetobjet existantexistant versvers uneune nouvellenouvelle instanceinstance dede mêmemême type.type.

PublicPublic Client(ClientClient(Client unClient){unClient){ this.IDClientthis.IDClient == unClient.IDClient;unClient.IDClient; this.NomClientthis.NomClient == unClient.NomClient;unClient.NomClient; this.CaClientthis.CaClient == unClient.CaClient;unClient.CaClient;

 

}}

ClientClient oClient1oClient1 == newnew Client();Client(); ClientClient oClientoClient == NewNew Client(oClient1);Client(oClient1);

 
 

www.istawww.ista--ntic.netntic.net

1111

 

ExempleExemple

 

publicpublic classclass Vehicule{Vehicule{ privateprivate stringstring Marque;Marque; privateprivate intint Puissance;Puissance; privateprivate intint VitesseMax;VitesseMax; privateprivate intint VitesseCour;VitesseCour; //// ConstructeurConstructeur parpar defautdefaut publicpublic Vehicule(){Vehicule(){

 

publicpublic stringstring PMarquePMarque {{ get{get{ returnreturn Marque;Marque;

}} set{set{ MarqueMarque == value;value;

 

}}

 

MarqueMarque == "Marque"Marque inconu";inconu"; PuissancePuissance == 0;0; VitesseMaxVitesseMax == 0;0; VitesseCourVitesseCour == 0;0;

}} //Constructeur//Constructeur d'initialisationd'initialisation publicpublic Vehicule(StringVehicule(String M,M, intint PP,, intint VM){VM){ MarqueMarque == M;M; PuissancePuissance == P;P; VitesseMaxVitesseMax == VM;VM; VitesseCourVitesseCour == 0;0;

}} //Constructeur//Constructeur dede CopieCopie publicpublic VehiculeVehicule (Vehicule(Vehicule Vh){Vh){ MarqueMarque == Vh.PMarque;Vh.PMarque;

PuissancePuissance == Vh.PPuissanceF;Vh.PPuissanceF;

}} publicpublic intint PPuissanceF{PPuissanceF{ get{get{ returnreturn this.Puissance;this.Puissance;

}} set{set{ this.Puissancethis.Puissance == value;value;

}}

}} publicpublic intint PVitesseM{PVitesseM{ get{get{ returnreturn this.VitesseMax;this.VitesseMax;

}} set{set{ this.VitesseMaxthis.VitesseMax == value;value;

}}

VitesseMaxVitesseMax == Vh.PVitesseM;Vh.PVitesseM; VitesseCourVitesseCour == Vh.PVitesseC;Vh.PVitesseC;

}}

}}

 

www.istawww.ista--ntic.netntic.net

1212

ExempleExemple //méthode//méthode d’accèsd’accès enen lecturelecture seulseul publicpublic intint
ExempleExemple
//méthode//méthode d’accèsd’accès enen lecturelecture seulseul
publicpublic intint PVitesseC{PVitesseC{
get{get{
returnreturn this.VitesseCour;this.VitesseCour;
}}
}}
publicpublic voidvoid Accelere(intAccelere(int v)v)
{{
this.VitesseCourthis.VitesseCour +=+= v;v;
ifif (this.PVitesseC(this.PVitesseC >> this.PVitesseM)this.PVitesseM) this.VitesseCothis.VitesseCourur ==
this.PVitesseM;this.PVitesseM;
}}
publicpublic overrideoverride stringstring ToString()ToString()
{{
returnreturn "Vehicule"Vehicule :: "" ++ Convert.ToString(this.PMarquConvert.ToString(this.PMarque)e) ++ "" "" ++
Convert.ToString(this.PPuissanceF)Convert.ToString(this.PPuissanceF) ++ "" -- VitesseVitesse :: "" ++
Convert.ToString(this.PVitesseC)Convert.ToString(this.PVitesseC) ++ "/""/" ++ Convert.ToConvert.ToString(this.PVitesseM);String(this.PVitesseM);
}}
}}
}}
www.istawww.ista--ntic.netntic.net
1313
ProgrammeProgramme principaleprincipale
usingusing System;System;
classclass ProgramProgram
{{
staticstatic voidvoid Main(string[]Main(string[] args)args)
{{
VehiculeVehicule rn=newrn=new Vehicule()Vehicule() ;;
Console.WriteLine(rn.ToString());Console.WriteLine(rn.ToString());
VehiculeVehicule pgpg == newnew Vehicule("Peugeut",Vehicule("Peugeut", 7,7, 187);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();
}}
}}
www.istawww.ista--ntic.netntic.net
1414

DestructeurDestructeur

EnEn C#C# onon nene déclenchedéclenche paspas explicitementexplicitement lala destructiondestruction d'und'un objet.objet. LesLes instancesinstances serontseront détruitesdétruites parpar lele systèmesystème lorsqu'elleslorsqu'elles nene sontsont plusplus référencéesréférencées etet qu’ilqu’il serasera nécessairenécessaire dede récupérerrécupérer desdes ressourcesressources mémoire.mémoire. LeLe programmeprogramme quiqui sese chargecharge dede cettecette tâchetâche s'appelles'appelle lele GarbageGarbage CollectorCollector ou,ou, enen français,français, lele ramasseramasse--miettesmiettes

LesLes destructeursdestructeurs nene peuventpeuvent paspas êtreêtre définisdéfinis dansdans ddeses struct.struct. IlsIls sontsont utilisésutilisés uniquementuniquement avecavec lesles classes.classes. UneUne classeclasse peutpeut posséderposséder unun seulseul destructeur.destructeur. LesLes destructeursdestructeurs nene peuventpeuvent paspas êtreêtre héritéshérités ouou sursurchargés.chargés. LesLes destructeursdestructeurs nene peuventpeuvent paspas êtreêtre appelés.appelés. IlsIls ssontont appelésappelés automatiquement.automatiquement. UnUn destructeurdestructeur n'accepten'accepte paspas dede modificateursmodificateurs nini dede paramètres.paramètres.

~NomClass()~NomClass() //// CetteCette méthodeméthode s'appelles'appelle destructeurdestructeur {{ //programme//programme (Exp:(Exp: libérationlibération desdes ressources)ressources) }} DansDans lele programmeprogramme principaleprincipale onon peutpeut forcéforcé lele GarbaGarbagege CollectorCollector parpar lala procédure:procédure: GC.Collect()GC.Collect()

www.istawww.ista--ntic.netntic.net

1515

PropriétésPropriétés etet MéthodesMéthodes partagépartagé

PublicPublic classclass test{test{ PublicPublic staticstatic TypeType Attribut;Attribut; PublicPublic staticstatic TypeType NomMeth(){NomMeth(){ ……

}}

}} L’utilisationL’utilisation dede l’attributl’attribut ouou lala méthodeméthode sese faitfait viavia lala classeclasse directement.directement. Test.NomMethTest.NomMeth OuOu test.Attributtest.Attribut sanssans instanciation.instanciation. ExpExp ::

PrivatePrivate staticstatic intint iCompteur;iCompteur;

PublicPublic test(){test(){ iCompteuriCompteur +=+= 1;1; }}

~test(){~test(){ iCompteuriCompteur -=-= 1;1;

}} SiSi enen afficheaffiche lala valeurvaleur dede iCompteuriCompteur enen retrouveretrouve lala nombrenombre d’objetd’objet instancierinstancier etet référenciéréférencié dansdans lele programmeprogramme enen mémoire.mémoire.

www.istawww.ista--ntic.netntic.net

1616

LesLes opérateursopérateurs d’accessibilitéd’accessibilité MotMot CléClé DéfinitionDéfinition PublicPublic
LesLes opérateursopérateurs d’accessibilitéd’accessibilité
MotMot CléClé
DéfinitionDéfinition
PublicPublic
AccessibleAccessible partoutpartout
PrivatePrivate
AccèsAccès dansdans lala classclass
uniquementuniquement
ProtectedProtected
AccèsAccès classeclasse etet classesclasses
dérivéesdérivées
InternalInternal
AccèsAccès ClasseClasse -- EspaceEspace dede
nomnom -- AssemblageAssemblage
www.istawww.ista--ntic.netntic.net
1717

HéritageHéritage

LeLe conceptconcept d'héritaged'héritage estest l'unl'un desdes troistrois principauxprincipaux fondementsfondements dede lala ProgrammationProgrammation OrientéeOrientée Objet,Objet, lele premierpremier étantétant l'encapsulationl'encapsulation vuvu précédemmentprécédemment etet lele dernierdernier étantétant lele polymorphismepolymorphisme quiqui serasera abordéabordé plusplus loinloin dansdans cece documentdocument L'héritageL'héritage consisteconsiste enen lala créationcréation d'uned'une nouvellenouvelle classeclasse ditedite classeclasse dérivéedérivée àà partirpartir d'uned'une classeclasse existanteexistante ditedite classeclasse dede basebase ouou classeclasse parenteparente

L'héritageL'héritage permetpermet dede ::

RécupérerRécupérer lele comportementcomportement standardstandard d'uned'une classeclasse d'objetd'objet (classe(classe parente)parente) àà partirpartir desdes propriétéspropriétés etet desdes méthodesméthodes définiesdéfinies dansdans cellescelles--cici AjouterAjouter desdes fonctionnalitésfonctionnalités supplémentairessupplémentaires enen créantcréant dede nouvellesnouvelles propriétéspropriétés etet méthodesméthodes dansdans lala classeclasse dérivée.dérivée. ModifierModifier lele comportementcomportement standardstandard d'uned'une classeclasse d'objetd'objet (classe(classe parente)parente) enen surchargeantsurchargeant certainescertaines méthodesméthodes dede lala classeclasse parenteparente dansdans lala classeclasse dérivée.dérivée.

www.istawww.ista--ntic.netntic.net

1818

ReprésentationReprésentation ClasseA ClasseB ClasseC ClasseD LeLe diagrammediagramme ci-ci-dessusdessus
ReprésentationReprésentation
ClasseA
ClasseB
ClasseC
ClasseD
LeLe diagrammediagramme ci-ci-dessusdessus
constitueconstitue lala représentationreprésentation
graphiquegraphique dede lala hiérarchiehiérarchie dede
classesclasses construiteconstruite àà partirpartir dede
ClasseAClasseA
ClasseE
DansDans
lele
cadrecadre
dede
lala
ClasseA
conceptionconception orientéeorientée objet,objet,
lala méthodeméthode UMLUML (( UnitedUnited
ModelingModeling LanguageLanguage
))
ClasseB
ClasseC
proposepropose uneune
autreautre
représentationreprésentation graphiquegraphique
d'uned'une telletelle hiérarchiehiérarchie ::
ClasseE
ClasseD
www.istawww.ista--ntic.netntic.net
1919

publicpublic classclass ClientClient {{ protectedprotected stringstring NomClient;NomClient;

ExempleExemple

protectedprotected doubledouble CAClient;CAClient; publicpublic Client()Client() {{ }} publicpublic Client(stringClient(string nom,nom, doubledouble ca)ca)

{{

this.NomClientthis.NomClient == nom;nom; this.CAClientthis.CAClient == ca;ca;

}} publicpublic stringstring NomNom {{ getget {return{return this.NomClient;this.NomClient; }} setset {this.NomClient{this.NomClient == value;value; }}

}} publicpublic doubledouble CACA {{ setset {this.CAClient{this.CAClient == value;value; }}

}} publicpublic virtualvirtual doubledouble finance()finance() {{ returnreturn this.CAClient;this.CAClient; }} publicpublic overrideoverride stringstring ToString()ToString() {{ returnreturn "" Nom:Nom: "" ++ this.Nomthis.Nom ++ "" CACA :: "" ++ ConverConvert.ToString(this.finance());t.ToString(this.finance()); }}

}}

www.istawww.ista--ntic.netntic.net

2020

ExempleExemple

publicpublic classclass Grossiste:ClientGrossiste:Client {{ privateprivate doubledouble TxRemiseClient;TxRemiseClient; publicpublic Grossiste():base(){Grossiste():base(){ }} publicpublic Grossiste(stringGrossiste(string nom,nom, doubledouble ca,ca, doubledouble rm):rm):base(nom,ca){base(nom,ca){ this.TxRemisethis.TxRemise == rm;rm;

}} publicpublic doubledouble TxRemise{TxRemise{ get{get{ returnreturn this.TxRemiseClient;this.TxRemiseClient; }} set{set{ this.TxRemiseClientthis.TxRemiseClient == value;value; }}

}} publicpublic doubledouble calrm(){calrm(){ returnreturn this.CAClientthis.CAClient ** this.TxRemise;this.TxRemise;

}} publicpublic overrideoverride doubledouble finance()finance() {{ returnreturn this.CAClientthis.CAClient ** (1(1 -- this.TxRemise);this.TxRemise); }}

}}

www.istawww.ista--ntic.netntic.net

2121

SurchargeSurcharge (méthodes/Opérateur)(méthodes/Opérateur)

public int Add(int A, int B){ return A+B;} public string Add(string A, string B){ return A+B;}

LaLa surchargesurcharge desdes méthodesméthodes avecavec lele mêmemême nom,nom, sese faitfait parpar lele changementchangement dede leurleur signaturesignature (le(le nombrenombre dede paramètre,paramètre, lele typetype desdes paramètre)paramètre)

EnEn peutpeut aussiaussi avoiravoir uneune surchargesurcharge desdes opérateursopérateurs (+,-(+,-,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);

}

}

www.istawww.ista--ntic.netntic.net

2222

RedéfinitionRedéfinition desdes méthodesméthodes Méthode ~NomClass: le destructeur vu précédemment. Méthode
RedéfinitionRedéfinition desdes méthodesméthodes
Méthode ~NomClass: le destructeur vu précédemment.
Méthode ToString():
‘Pour la classe fraction
public override string ToString(){
return numerateur + "/" + denominateur;
}
Surcharge Méthode 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.netntic.net
2323

ComplémentComplément héritage(Modificateur)héritage(Modificateur)

AbstractAbstract (Class)(Class):: CeCe motmot cléclé indiqueindique qu'unequ'une classeclasse nene peutpeut êtreêtre instancier,instancier, etet qu'ellequ'elle nene peutpeut doncdonc êtreêtre utiliséeutilisée queque commecomme classeclasse dede base,base, uneune classeclasse abstret.abstret. AbstractAbstract (Méthode)(Méthode):: utiliséutilisé pourpour lesles méthodesméthodes qu’onqu’on veutveut forcéforcé leurleur redéfinitionredéfinition dansdans lesles classesclasses dérivé,dérivé, enen définidéfini seulementseulement lala signaturesignature sanssans corps.corps. SealedSealed (Class)(Class):: AA l'inversel'inverse dede abstract,abstract, cece mot-mot-cléclé indiqueindique queque cettecette classeclasse nene peutpeut paspas êtreêtre héritée,héritée, etet peutpeut etresetres instancier,instancier, c'estc'est--àà--diredire servirservir dede classeclasse dede base.base. VirtualVirtual (Méthode)(Méthode):: cece mot-mot-cléclé indiqueindique queque cettecette méthodeméthode peutpeut êtreêtre redéfinieredéfinie dansdans uneune classeclasse dérivé.dérivé. SealedSealed (Méthode)(Méthode):: AA l'inverse,l'inverse, cece mot-mot-cléclé indiqueindique queque cettecette méthodeméthode nene peutpeut êtreêtre redéfinieredéfinie dansdans uneune classeclasse dérivé.dérivé. NewNew (Méthode(Méthode--Attribut)Attribut):: lele motmot cléclé newnew masquemasque explicitementexplicitement unun membremembre héritéhérité d'uned'une classeclasse dede base(avecbase(avec signateursignateur différentedifférente etet mêmemême nom).nom). LorsqueLorsque vousvous masquezmasquez unun membremembre hérité,hérité, lala versionversion dérivéedérivée dudu membremembre remplaceremplace lala versionversion dede classeclasse dede base.base.

www.istawww.ista--ntic.netntic.net

2424

PolymorphismePolymorphisme

Le polymorphisme est un mécanisme via lequel un objet peut prendre plus d'une forme. Par exemple, si vous avez une classe de base nommée Client, une référence de type Client peut être utilisé pour contenir un objet de n'importe laquelle de ses classes dérivées. Quand vous appelez une méthode à partir de votre objet, le système déterminera automatiquement le type de l'objet afin d'appeler la méthode appropriée.

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.netntic.net

2525

ImplémentationImplémentation desdes InterfacesInterfaces UneUne interfaceinterface estest uneune collectioncollection
ImplémentationImplémentation desdes InterfacesInterfaces
UneUne interfaceinterface estest uneune collectioncollection dede prototypesprototypes reprreprésentantésentant lesles membresmembres
(propriétés,(propriétés, procéduresprocédures etet événements)événements) queque l'interfl'interfaceace encapsule.encapsule. LesLes interfacesinterfaces
contiennentcontiennent uniquementuniquement lesles déclarationsdéclarations desdes membres,membres, lesles classesclasses etet lesles structuresstructures
implémententimplémentent cesces membresmembres
Exp:Exp:
interfaceinterface TestInterfaceTestInterface
{{
doubledouble Properiete1{get;}Properiete1{get;}
doubledouble Methode1(intMethode1(int X);X);
}}
classclass ClassImplementation:ClassImplementation: TestInterfaceTestInterface
{{
privateprivate doubledouble Attribut1;Attribut1;
publicpublic doubledouble Properiete1Properiete1 {{
getget {{ returnreturn Attribut1;Attribut1; }}
setset {{ Attribut1Attribut1 == value;value; }}
}}
publicpublic doubledouble Methode1(intMethode1(int X)X) {{
Attribut1Attribut1 == Math.Sqrt(X);Math.Sqrt(X);
returnreturn Attribut1;Attribut1;
}}
www.istawww.ista--ntic.netntic.net
2626
}}
LesLes Exceptions(GestionExceptions(Gestion Erreur)Erreur) Il y a plusieurs types d'erreurs : - Les erreurs de
LesLes Exceptions(GestionExceptions(Gestion Erreur)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 d’affectation
2 {
et un seul }
- Les erreurs de logique : quand la conception du programme (logiciel) qui est
incorrect, des données justes nous donnes des résultats faut. Donc il faut revoir la
conception.
- Les erreurs d'exécution : Elle surviennent en mode Run ou lors de l'utilisation de
l'exécutable, une instruction ne peut pas être effectuée. Le logiciel s'arrête
brutalement, c'est très gênant!! Pour l'utilisateur c'est un 'BUG‘
division par zéro
string a(3) ; a[5]=« A »
Soit une erreur de l'utilisateur, Il faut toujours vérifier ce que fait l'utilisateur
et prévoir toutes les possibilités.
Exp: On lui demande de taper un chiffre, il tape une lettre ou rien puis valide
Pour éviter ces derniers il faut capté l’erreur 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()); }
finallyfinally {{ Console.WriteLine("ExecutingConsole.WriteLine("Executing finallyfinally block.");block."); }}
www.istawww.ista--ntic.netntic.net
2727

LesLes ExceptionsExceptions

CetteCette classeclasse (Exception)(Exception) estest lala classeclasse dede basebase pourpour toutestoutes lesles exceptions.exceptions. Lorsqu'uneLorsqu'une erreurerreur sese produit,produit, lele systèmesystème ouou l'applicationl'application enen courscours d'exécutiond'exécution lala signalesignale enen levantlevant uneune exceptionexception quiqui contientcontient desdes informationsinformations sursur l'erreur.l'erreur. UneUne foisfois levée,levée, uneune exceptionexception estest géréegérée parpar l'applicationl'application ouou parpar lele gestionnairegestionnaire d'exceptionsd'exceptions parpar défaut.défaut. Exp:Exp:

•• ArithmeticExceptionArithmeticException •• DivideByZeroExceptionDivideByZeroException •• NotFiniteNumberExceptionNotFiniteNumberException •• OverflowExceptionOverflowException

www.istawww.ista--ntic.netntic.net

2828

LesLes ExceptionsExceptions PersonnaliséPersonnalisé OnOn peutpeut créercréer uneune nouvellenouvelle classeclasse
LesLes ExceptionsExceptions PersonnaliséPersonnalisé
OnOn peutpeut créercréer uneune nouvellenouvelle classeclasse d’exceptiond’exception quiqui hhériteérite dede
lala classeclasse ExceptionException avecavec définitiondéfinition desdes constructeuconstructeurs,rs, etet
enen peutpeut fairefaire appelappel aa cetcet ExceptionException parpar lele motmot cléclé throwthrow
classclass PersonnePersonne
{{
classclass AgeException:ExceptionAgeException:Exception
{{
privateprivate stringstring _Nom;_Nom;
privateprivate intint _Age;_Age;
publicpublic stringstring Nom{Nom{
get{returnget{return _Nom;}_Nom;}
set{_Nomset{_Nom == value;}value;}
publicpublic AgeException()AgeException() {{
}}
publicpublic AgeException(stringAgeException(string message):base(message)message):base(message) {{
}}
publicpublic AgeException(stringAgeException(string message,message, ExceptionException InnerInner))
:: base(message,base(message, Inner)Inner)
}}
publicpublic intint AgeAge {{
get{returnget{return _Age;}_Age;}
set{set{
ifif (value(value << 0)0)
throwthrow newnew AgeException("ErreurAgeException("Erreur :: AgeAge Négatif");Négatif");
elseelse
_Age_Age == value;value;
}}
{{
}}
}}
ProgrammeProgramme PrincipalPrincipal ::
}}
publicpublic Personne(stringPersonne(string No,No, intint Ag){Ag){
this.Nomthis.Nom == No;No;
this.Agethis.Age == Ag;Ag;
PersonnePersonne p;p;
try{try{
pp == newnew Personne("Ali",Personne("Ali", 0);0);
p.Agep.Age == -5;-5;
//p.Age//p.Age == "A";"A";
}}
publicpublic overrideoverride stringstring ToString(){ToString(){
returnreturn this.Nomthis.Nom ++ "" (Age(Age :":" ++ this.Age.ToString()this.Age.ToString() ++
")";")";
}}
}}
}}
catchcatch (AgeException(AgeException ex){ex){
Console.WriteLine(ex.ToString());}Console.WriteLine(ex.ToString());}
catchcatch (Exception(Exception ex){ex){
Console.WriteLine("ErrorConsole.WriteLine("Error :: "" ++ ex.ToString());}ex.ToString());}
Console.ReadKey();Console.ReadKey();
www.istawww.ista--ntic.netntic.net
2929
ObjetsObjets StringString Dim str as string Avec ça on a un objet str de type
ObjetsObjets StringString
Dim str as string
Avec ça on a un objet str de type string et chaque objet a des méthodes et des attributs
Length() : Taille d’une chaîne en nombre de caractère.
ToCharArray() : retourne un tableau de caractère.
ToUpper() : Mettre en majuscules une chaîne de caractère.
ToLower() : transforme par contre la chaîne en minuscule.
Trim() : Permet de supprimer des caractères en début et fin de chaîne.
Insert (N,str1) : Insère à la position N une sous chaîne str1.
Remove(N,L) : Supprime la sous-chaine à partir de la position N et de longueur L.
Replace (str1,str2) : Remplace partout dans une chaîne de départ, une chaîne par une
autre.
IndexOf & LastIndexOf : Indique le numéro du caractère, la position (la
première occurrence) ou une chaîne à chercher est trouvée dans une
autre.
Substring(n,l) : Extrait une partie d’une chaîne
……
ExpExp ::
string str =« Bonjour »
Console.Write(str.length); 7
Console.Write(str.replace(« jour », « soir »)); Bonsoir
www.istawww.ista--ntic.netntic.net
3030
Clone Retourne une référence à cette instance de String. Compare Surchargé. Compare deux objets String
Clone
Retourne une référence à cette instance de String.
Compare
Surchargé. Compare deux objets String spécifiés et retourne un entier qui indique la relation entre ces deux objets dans l'ordre de tri.
Concat
Surchargé. Concatène une ou plusieurs instances de String ou les représentations String des valeurs d'une ou de plusieurs instances de Object.
Contains
Retourne une valeur qui indique si l'objet String spécifié apparaît dans cette chaîne.
Copy
Crée une nouvelle instance de String ayant la même valeur qu'un String spécifié.
CopyTo
Copie un nombre spécifié de caractères à partir d'une position définie dans cette instance vers une position spécifiée dans un tableau de caractères
Unicode.
EndsWith
Surchargé. Détermine si la fin d'une instance de String correspond à une chaîne spécifiée.
Equals
Surchargé. Détermine si deux objets String ont la même valeur.
Finalize
Autorise Object à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant que Object soit récupéré par l'opération garbage
collection. (Hérité de Object.)
Format
Surchargé. Remplace chaque élément de mise en forme dans un Stringspécifié par l'équivalent textuel de la valeur d'un objet correspondant.
IndexOf
Surchargé. Signale l'index de la première occurrence d'un String, ou d'un ou de plusieurs caractères de cette chaîne.
Insert
Insère une instance spécifiée de String au point d'index indiqué dans cette instance.
IsNullOrEmpty
Indique si l'objet String spécifié est null ou une chaîne Empty.
Join
Surchargé. Concatène un séparateur spécifié de String entre chaque élément d'un tableau String indiqué, donnant lieu à une chaîne concaténée unique.
LastIndexOf
Surchargé. Signale le point d'index de la dernière occurrence d'un caractère Unicode spécifié ou String dans cette instance.
PadLeft
Surchargé. Aligne les caractères de cette instance à droite et, à gauche, remplit en ajoutant des espaces ou un caractère Unicode spécifié pour une
longueur totale spécifiée.
PadRight
Surchargé. Aligne les caractères de cette instance à gauche et, à droite, remplit en ajoutant des espaces ou un caractère Unicode spécifié pour une
longueur totale spécifiée.
Remove
Surchargé. Supprime de cette instance le nombre spécifié de caractères.
Replace
Surchargé. Remplace toutes les occurrences d'un caractère Unicode spécifié ou String dans cette instance par un autre caractère Unicode spécifié
ou String.
Split
Surchargé. Retourne un tableau de chaînes qui contient les sous-chaînes de cette instance, délimitées par les éléments d'une chaîne ou d'un tableau de
caractères Unicode spécifié.
StartsWith
Surchargé. Détermine si le début d'une instance de String correspond à une chaîne spécifiée.
Substring
Surchargé. Récupère une sous-chaîne de cette instance.
ToCharArray
Surchargé. Copie les caractères dans cette instance vers un tableau de caractères Unicode.
ToLower
Surchargé. Retourne une copie de String en minuscules.
ToString
Surchargé. Convertit la valeur de cette instance en String.
ToUpper
Surchargé. Retourne une copie de String en majuscules.
Trim
Surchargé. Supprime, de l'objet String actuel, toutes les occurrences situées au début et à la fin d'un jeu de caractères spécifiés.
www.istawww.ista--ntic.netntic.net
3131
TrimEnd
Supprime, de l'objet String actuel, toutes les occurrences situées à la fin d'un jeu de caractères spécifiés dans un tableau.
TrimStart
Supprime, de l'objet String actuel, toutes les occurrences situées au début d'un jeu de caractères spécifiés dans un tableau.

ExercicesExercices

ÉcrireÉcrire unun programmeprogramme quiqui litlit uneune chaînechaîne STRSTR auau clavierclavier etet unun caractèrecaractère CC dede cettecette chaîne,chaîne, quiqui vava cherchécherché lele nombrenombre d’occurrenced’occurrence etet lele supprimesupprime dansdans lala chaînechaîne STR.STR. InverserInverser uneune chaînechaîne dede caractère.caractère. RemplacerRemplacer lele premierpremier caractèrecaractère dede chaquechaque motmot dansdans uneune phrasephrase parpar lele majuscule.majuscule.

www.istawww.ista--ntic.netntic.net

3232

L’ObjetL’Objet RegexRegex

permetpermet l'utilisationl'utilisation

d'expressiond'expression régulières.régulières. Celles-Celles-cici permettentpermettent dede testertester lele formatformat d'uned'une chaînechaîne dede caractères.caractères. AinsiAinsi onon peutpeut vérifiervérifier qu'unequ'une chaînechaîne représentantreprésentant uneune datedate estest bienbien auau formatformat jj/mm/aa.jj/mm/aa. OnOn utiliseutilise pourpour celacela unun modèlemodèle etet onon comparecompare lala chaînechaîne àà cece modèle.modèle. AinsiAinsi dansdans cetcet exemple,exemple, jj mm etet aa doiventdoivent êtreêtre desdes chiffreschiffres LeLe modèlemodèle d'und'un formatformat dede datedate validevalide estest alorsalors ""\\dd\\d/d/\\dd\\d/d/\\dd\\d"d" oùoù lele

symbolesymbole \d\d désignedésigne unun chiffre.chiffre.

LaLa classeclasse RegexRegex (System(System

TextText RegularExpressionsRegularExpressions))

//// uneune expressionexpression régulièrerégulière modèlemodèle stringstring modèle1modèle1 == @"@"\\dd\\d/d/\\dd\\d/d/\\dd\\d";d"; RegexRegex regex1regex1 == newnew Regex(modèle1);Regex(modèle1); //// comparercomparer unun exemplaireexemplaire auau modèlemodèle stringstring exp1exp1 == "" 123123 ";"; ifif (regex1.IsMatch(exp1))(regex1.IsMatch(exp1)) Console.WriteLine(("["Console.WriteLine(("[" ++ exp1exp1 ++ "]"] correspondcorrespond auau momodèledèle ["[" ++ modèle1modèle1 ++ "]"));"]")); elseelse Console.WriteLine(("["Console.WriteLine(("[" ++ exp1exp1 ++ "]"] nene correspondcorrespond papass auau modèlemodèle ["[" ++ modèle1modèle1 ++ "]"));"]"));

stringstring exp2exp2 == "01/02/10";"01/02/10"; //"//" 123123 ";"; ifif (regex1.IsMatch(exp2))(regex1.IsMatch(exp2)) Console.WriteLine(("["Console.WriteLine(("[" ++ exexpp22 ++ "]"] correspondcorrespond auau modèlemodèle ["[" ++ modèle1modèle1 ++ "]"));"]")); elseelse Console.WriteLine(("["Console.WriteLine(("[" ++ exp2exp2 ++ "]"] nene correspondcorrespond papass auau modèlemodèle ["[" ++ modèle1modèle1 ++ "]"));"]")); Console.ReadKey();Console.ReadKey();

www.istawww.ista--ntic.netntic.net

3333

Caractère Description \ Marque le caractère suivant comme caractère spécial ou littéral. Par exemple, "n"
Caractère
Description
\
Marque le caractère suivant comme caractère spécial ou littéral. Par exemple, "n" correspond au caractère "n". "\n" correspond à un caractère
de nouvelle ligne. La séquence "\\" correspond à "\", tandis que "\(" correspond à "(".
^
Correspond au début de la saisie.
$
Correspond à la fin de la saisie
*
Correspond au caractère précédent zéro fois ou plusieurs fois. Ainsi, "zo*" correspond à "z" ou à "zoo".
+
Correspond au caractère précédent une ou plusieurs fois. Ainsi, "zo+" correspond à "zoo", mais pas à "z".
?
Correspond au caractère précédent zéro ou une fois. Par exemple, "a?ve?" correspond à "ve" dans "lever".
.
Correspond à tout caractère unique, sauf le caractère de nouvelle ligne.
(modèle)
Recherche le modèle et mémorise la correspondance. La sous chaîne correspondante peut être extraite de la collection Matches obtenue, à
l'aide d'Item [0]
[n].
Pour trouver des correspondances avec des caractères entre parenthèses ( ), 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 négatif. Correspond exactement à n fois le caractère. Par exemple, "o{2}" ne correspond pas à "o" dans "Bob,"
mais aux deux premiers "o" dans "fooooot".
{n,}
n
est un entier non négatif. Correspond à au moins n fois le caractère. 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*".
{n,m}
et n sont des entiers non négatifs. Correspond à au moins n et à au plus m fois le caractère. Par exemple, "o{1,3}" correspond aux trois
premiers "o" dans "foooooot" et "o{0,1}" équivaut à "o?".
m
[xyz]
Jeu de caractères. Correspond à l'un des caractères indiqués. Par exemple, "[abc]" correspond à "a" dans "plat".
[^xyz]
Jeu de caractères négatif. Correspond à tout caractère non indiqué. Par exemple, "[^abc]" correspond à "p" dans "plat".
[a-z]
Plage de caractères. Correspond à tout caractère dans la série spécifiée. Par exemple, "[a-z]" correspond à tout caractère alphabétique
minuscule compris entre "a" et "z".
[^m-z]
Plage de caractères négative. Correspond à tout caractère ne se trouvant pas dans la série spécifiée. Par exemple, "[^mz]" correspond à tout
caractère ne se trouvant pas entre "m" et "z".
\b
Correspond à une limite représentant 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.netntic.net
3434
\B Correspond à une limite ne représentant pas un mot. "en*t\B" correspond à "ent" dans
\B
Correspond à une limite ne représentant pas un mot. "en*t\B" correspond à "ent" dans "bien entendu".
\d
Correspond à un caractère représentant un chiffre. Équivaut à [0-9].
\D
Correspond à un caractère ne représentant pas un chiffre. Équivaut à [^0-9].
\f
Correspond à un caractère de saut de page.
\n
Correspond à un caractère de nouvelle ligne
\r
Correspond à un caractère de retour chariot.
\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 caractère d'espace non blanc. Équivaut à "[^ \f\n\r\t\v]".
\t
Correspond à un caractère de tabulation
\v
Correspond à un caractère de tabulation verticale.
\w
Correspond à tout caractère représentant un mot et incluant un trait de soulignement. Équivaut à "[A-Za-z0-9_]".
\W
Correspond à tout caractère ne représentant pas un mot. Équivaut à "[^A-Za-z0-9_]".
\num
Correspond à num, où num est un entier positif. Fait référence aux correspondances mémorisées. Par exemple, "(.)\1" correspond à deux
caractères identiques consécutifs.
\n
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 caractère de tabulation. "\0011" équivaut à "\001" & "1". Les valeurs
d'échappement octales ne doivent pas excéder 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 régulières
\xn
Correspond à n, où n est une valeur d'échappement hexadécimale. Les valeurs d'échappement hexadécimales doivent comprendre deux
chiffres obligatoirement. Par exemple, "\x41" correspond à "A". "\x041" équivaut à "\x04" & "1". Permet d'utiliser les codes ASCII
dans des expressions régulières
www.istawww.ista--ntic.netntic.net
3535
Regex (exemple) www.istawww.ista--ntic.netntic.net 3636
Regex (exemple)
www.istawww.ista--ntic.netntic.net
3636

LesLes collectionscollections

Le .NET Framework fournit des classes spécialisées pour le stockage et la récupération des données. Ces classes fournissent la prise en charge des piles, files d'attente, listes et tables de hachage. La plupart des classes de collection implémentent les mêmes interfaces.

est Une alternative aux tableaux. Fait partie de l’espace de

nom System.Collections ou Systeme.Collections.Generic Une collection fonctionne plutôt comme un groupe d'éléments dans laquelle il est possible d’ajouter ou d’enlever un élément à n’importe quel endroit sans avoir à se préoccuper de sa taille ni ou se trouve l'élément. Le nombre d'élément n'est pas défini au départ comme dans un tableau. Dans une collection il n'y a que les éléments que l'on a ajouté. Les éléments sont repérés grâce à un index ou avec une Clé unique

l’usage de Collection

Type collection Array : Décrit les fonctionnalités des tableaux qui leur permettent d'être traités comme des collections. Types collection ArrayList et List : Décrit les fonctionnalités des listes génériques et non génériques, qui constituent les types de collection les plus fréquemment utilisés. Types collection Hashtable et Dictionary : Décrit les fonctionnalités des types de dictionnaires génériques et non génériques basés sur le hachage. Types collection SortedList et SortedDictionary : Décrit les types de dictionnaire trié et les types hybrides qui associent les fonctionnalités d'un dictionnaire à celles d'une liste. Types collection Queue : Décrit les fonctionnalités des files d'attente génériques et non génériques. Types collection Stack : Décrit les fonctionnalités des piles génériques et non génériques.

www.istawww.ista--ntic.netntic.net

3737

ArrayArray

La classe Array : Fournit des méthodes pour la création, 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) { // Création 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 éléments du premier tableau dans le deuxième. Array.Copy(myIntArray, myObjArray, 2); // Prints the values of the modified arrays. Console.WriteLine("\nAprès la fin du copie,"); Console.Write("Tableau d'entier:"); PrintValues(myIntArray); Console.Write("Tableau d'Objet:"); PrintValues(myObjArray);

// Copies les deux derner éléments du premier tableau dans le deuxième.

Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2); //GetUpperBound : retourne la position du dernier élément du dimention spécifié // 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.netntic.net

3838

ArrayListArrayList

usingusing System;System; usingusing System.Collections;System.Collections; staticstatic voidvoid Main(string[]Main(string[] args)args) {{

//// CreatesCreates andand initializesinitializes aa newnew ArrayList.ArrayList. ArrayListArrayList myALmyAL == newnew ArrayList();ArrayList(); myAL.Add("Hello");myAL.Add("Hello"); myAL.Add("World");myAL.Add("World"); myAL.Add("!");myAL.Add("!");

//// DisplaysDisplays thethe propertiesproperties andand valuesvalues ofof thethe ArrayLArrayList.ist.

Console.WriteLine("myAL");Console.WriteLine("myAL");

Console.WriteLine("Console.WriteLine("

Count:Count:

{0}",{0}", myAL.Count);myAL.Count);

Console.WriteLine("Console.WriteLine("

Capacity:Capacity: {0}",{0}", myAL.CapacitmyAL.Capacity);y);

//Capacity//Capacity :: ObtientObtient ouou définitdéfinit lele nombrenombre d'élémentd'élémentss queque ArrayListArrayList peutpeut contenircontenir

Console.Write("Console.Write("

PrintValues(myAL);PrintValues(myAL);

Console.ReadKey();Console.ReadKey();

Values:");Values:");

}} publicpublic staticstatic voidvoid PrintValues(IEnumerablePrintValues(IEnumerable myList)myList) {{

foreachforeach (Object(Object objobj inin myList)myList)

}}

Console.Write("Console.Write("

{0}",{0}", obj);obj);

Console.WriteLine();Console.WriteLine();

www.istawww.ista--ntic.netntic.net

3939

Hashtable ReprésenteReprésente uneune collectioncollection dede pairespaires clé/valeurclé/valeur quiqui sontsont
Hashtable
ReprésenteReprésente uneune collectioncollection dede pairespaires clé/valeurclé/valeur quiqui sontsont
organiséesorganisées enen fonctionfonction dudu codecode dede hachagehachage dede lala cléclé
Nom
Description
Add
Ajoute un élément avec la clé et la valeur spécifiées dans Hashtable.
Clear
Supprime tous les éléments de Hashtable.
Contains
Détermine si Hashtable contient une clé spécifique.
ContainsKey
Détermine si Hashtable contient une clé spécifique.
ContainsValue
Détermine si Hashtable contient une valeur spécifique.
Equals
Détermine si l'objet Object spécifié est égal à l'objet Object en cours. (Hérité de
Object.)
GetType
Obtient le Type de l'instance actuelle. (Hérité de Object.)
KeyEquals
Compare un Object spécifique avec une clé spécifique dans Hashtable.
Remove
Supprime de Hashtable l'élément ayant la clé spécifiée.
ToString
Retourne un String qui représente le Object en cours. (Hérité de Object.)
Count
Obtient le nombre de paires clé/valeur contenues dans Hashtable.
Item
Obtient ou définit la valeur associée à la clé spécifiée.
Keys
Obtient ICollection contenant les clés de Hashtable.
Values
Obtient ICollection contenant les valeurs de Hashtable.
www.istawww.ista--ntic.netntic.net
4040

HashTableHashTable ((ExpExp))

staticstatic voidvoid Main(string[]Main(string[] args)args) {{ //// CreationCreation etet initiationinitiation d'und'un nouveaunouveau Hashtable.Hashtable. HashtableHashtable myHTmyHT == newnew Hashtable();Hashtable(); myHT.Add(0,myHT.Add(0, "zero");"zero"); myHT.Add(1,myHT.Add(1, "one");"one"); myHT.Add(2,myHT.Add(2, "two");"two"); myHT.Add(3,myHT.Add(3, "three");"three");

Console.WriteLine("leConsole.WriteLine("le HashtableHashtable contiencontien lesles valeurvaleur suivant:");suivant:");

PrintIndexAndKeysAndValues(myHT);PrintIndexAndKeysAndValues(myHT);

stringstring rep1=rep1= "est"est dansdans lele Hashtable";Hashtable"; stringstring rep2=rep2= "" n'estn'est paspas dansdans lele Hashtable";Hashtable"; //// RechercheRecherche d'uned'une CléClé spécifique.spécifique. intint myKeymyKey == 2;2; Console.WriteLine("laConsole.WriteLine("la CléClé \"{0}\"{0}\\"" {1}.",{1}.", myKey,myKey, myHT.ContainsKey(myKey)myHT.ContainsKey(myKey) ?? rep1:rep1:rep2rep2);); myKeymyKey == 6;6;

Console.WriteLine("laConsole.WriteLine("la CléClé \"{0}\"{0}\\"" {1}.",{1}.", myKey,myKey, myHT.ContainsKey(myKey)myHT.ContainsKey(myKey) ?? rep1rep1 :: rep2);rep2);

StringString myValuemyValue == "three";"three";

Console.WriteLine("laConsole.WriteLine("la valeurvaleur \"{0}\"{0}\\"" {1}.",{1}.", myValue,myValue, myHT.ContainsValue(myValue)myHT.ContainsValue(myValue) ?? rep1rep1 :: rep2);rep2); myValuemyValue == "nine";"nine"; Console.WriteLine("laConsole.WriteLine("la valeurvaleur \"{0}\"{0}\\"" {1}.",{1}.", myValue,myValue, myHT.ContainsValue(myValue)myHT.ContainsValue(myValue) ?? rep1rep1 :rep2:rep2);); Console.ReadKey();}Console.ReadKey();}

//// AffichageAffichage desdes valeursvaleurs dudu Hashtable.Hashtable.

//// RechercheRecherche d'uned'une valeurvaleur spécifique.spécifique.

publicpublic staticstatic voidvoid PrintIndexAndKeysAndValues(HashtPrintIndexAndKeysAndValues(Hashtableable myHT)myHT) {{ intint ii == 0;0; Console.WriteLine("Console.WriteLine("\\tt--INDEXINDEX--\\tt--KEYKEY--\\tt--VALUEVALUE--");"); foreachforeach (DictionaryEntry(DictionaryEntry dede inin myHT)myHT) Console.WriteLine("Console.WriteLine("\\t[{0}]:t[{0}]:\\t{1}t{1}\\t{2}",t{2}", i++,i++, de.Key,de.Key, de.Value);de.Value); Console.WriteLine();}Console.WriteLine();}

www.istawww.ista--ntic.netntic.net

4141

LaLa persistancepersistance desdes objetsobjets CetteCette illustrationillustration afficheaffiche lele
LaLa persistancepersistance desdes objetsobjets
CetteCette
illustrationillustration
afficheaffiche
lele
processusprocessus
globalglobal
dede
lala
sérialisationsérialisation ::
L'objetL'objet estest sérialisésérialisé àà unun fluxflux
quiqui contientcontient nonnon seulementseulement lesles
données,données, maismais égalementégalement desdes
informationsinformations sursur lele typetype
d'objet,d'objet, notammentnotamment sasa version,version,
sasa cultureculture etet sonson nomnom
d'assemblyd'assembly ÀÀ partirpartir dede cece flux,flux,
ilil peutpeut êtreêtre stockéstocké dansdans uneune
basebase dede données,données, dansdans unun
fichierfichier ouou enen mémoire.mémoire.
www.istawww.ista--ntic.netntic.net
4242

SérialisationSérialisation binairebinaire etet XMLXML

SérialisationSérialisation binairebinaire :: LaLa sérialisationsérialisation binairebinaire utiliseutilise lele codagecodage binairebinaire afinafin dede produireproduire uneune sérialisationsérialisation compactecompacte destinéedestinée notammentnotamment auau stockagestockage ouou auau fluxflux réseauréseau socket.socket. IlIl n'estn'est paspas convenableconvenable dede fairefaire passerpasser lesles donnéesdonnées dansdans unun parepare--feufeu maismais lesles performancesperformances sontsont meilleuresmeilleures lorslors dudu stockagestockage desdes données.données.(Voire(Voire lele CoursCours LPS)LPS)

SérialisationSérialisation XMLXML :: LaLa sérialisationsérialisation XMLXML sérialisesérialise lesles champschamps etet lesles propriétéspropriétés publicspublics d'und'un objet,objet, ouou lesles paramètresparamètres etet valeursvaleurs dede retourretour desdes méthodes,méthodes, enen unun fluxflux

XMLXML conformeconforme àà unun documentdocument dede langagelangage XSDXSD (XML(XML SchemaSchema Definition)Definition) spécifique.spécifique. LaLa sérialisationsérialisation XMLXML favorisefavorise desdes classesclasses fortementfortement typéestypées avecavec desdes propriétéspropriétés etet desdes champschamps

publicspublics convertisconvertis enen XML.XML. System.System.XmlXml

SerializationSerialization

contientcontient

lesles classesclasses nécessairesnécessaires pourpour lala sérialisationsérialisation etet lala désérialisationdésérialisation XMLXML

www.istawww.ista--ntic.netntic.net

4343

XMLXML www.istawww.ista--ntic.netntic.net 4343 Sérialisation binaire (Exemple) Pour lire ou écrire dans

Sérialisation binaire (Exemple)

Pour lire ou écrire dans un fichier, on utilise les deux objets StreamReader et StreamWriter dans l’espace 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.netntic.net

4444

}

Sérialisation binaire (Exemple) class Program { private static Hashtable HtClient=new Hashtable(); private static
Sérialisation binaire (Exemple)
class Program
{
private static Hashtable HtClient=new Hashtable();
private static void Load(){
private static Client Clt;
StreamReader fluxInfos = null; //
le fichier texte logique
static void Main(string[] args)
{ try
string
ligne
= "";
string[] Tligne = null;
{
Load();
foreach (Client Clt in HtClient.Values )
Console.WriteLine(Clt.ToString());
Save();
Console.ReadLine();}
try{
// création du fichier texte
catch (Exception e) {
Console.WriteLine(" Erreur : " + e.Message);}
fluxInfos = new StreamReader("Client.dat");
do{
ligne = fluxInfos.ReadLine();
if (ligne != null)
{
}
private static void Save(){
StreamWriter fluxInfos = null; // le fichier texte
Tligne = ligne.Split(';');
if (Tligne.Length == 3)
{
logique
try{
// création du fichier texte
fluxInfos = new StreamWriter("Client.dat",
Clt = new Client(Convert.ToInt32(Tligne[0]),
Tligne[1], Convert.ToDouble(Tligne[2]));
HtClient.Add(Clt.ID, Clt);
}
false);
}
fluxInfos.AutoFlush = true;
} while (ligne != null);
foreach (Client Clt in HtClient.Values)
fluxInfos.WriteLine(Clt.ToFile());
}
catch (Exception e){
}
catch(Exception e){
Console.WriteLine("Erreur: " + e.Message);}
finally{
try{ fluxInfos.Close();}
catch{}
Console.WriteLine("Erreur : " + e.Message);}
finally{
try{
fluxInfos.Close();}
catch{}
}
}
}
}
}
www.istawww.ista--ntic.netntic.net
4545
Sérialisation 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.netntic.net
4646
}
}
 

Sérialisation Objet (Exemple)

class Program

{

private static Hashtable HtClient=new Hashtable();

 

static void Main(string[] args) { try { if(File.Exists("Client.dat")){ Deserialize();

}

 

catch(Exception e){ Console.WriteLine("Erreur : " + e.Message);} finally{

try{fluxInfos.Close();} catch{}

 

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));

 

}

 

private static void Serialize()

 
 

}

foreach (Client Clt in HtClient.Values ) Console.WriteLine(Clt.ToString()); Serialize(); Console.ReadLine();

{

FileStream fluxInfos = null; //

le fichier texte logique

try{ // création du fichier texte fluxInfos = new FileStream("Client.dat", FileMode.Create);

 

}

catch (Exception e) { Console.WriteLine("Erreur : " + e.Message);

 

BinaryFormatter formatter = new BinaryFormatter();

}

 

}

formatter.Serialize(fluxInfos, HtClient);} catch (SerializationException e){

private static void Deserialize()

 
 

FileStream fluxInfos = null; // le fichier texte logique try{ // création du fichier texte fluxInfos = new FileStream("Client.dat", FileMode.Open); BinaryFormatter formatter = new BinaryFormatter();

{

 

Console.WriteLine("Erreur : " + e.Message); } finally{ try{fluxInfos.Close();} catch { }

}

}

HtClient = (Hashtable)formatter.Deserialize(fluxInfos); }

}

 

www.istawww.ista--ntic.netntic.net

 

4747

 

Sérialisation XML (Exemple)

 

publicpublic classclass EmployeeEmployee {{

 
 

publicpublic stringstring EmpName;EmpName; publicpublic stringstring EmpID;EmpID; publicpublic Employee(){}Employee(){} publicpublic Employee(stringEmployee(string newName,newName, stringstring newID){newID){ this.EmpNamethis.EmpName == newName;newName; this.EmpIDthis.EmpID == newID;newID;

}} publicpublic overrideoverride stringstring ToString()ToString() {{

 

returnreturn this.EmpIDthis.EmpID ++ "" "" ++ this.EmpNamethis.EmpName ;;

}}

}}

 

www.istawww.ista--ntic.netntic.net

 

4848

publicpublic classclass Employees:ICollectionEmployees:ICollection {{ publicpublic stringstring CollectionName;CollectionName; privateprivate ArrayListArrayList empArrayempArray == newnew ArrayList();ArrayList();

publicpublic EmployeeEmployee this[intthis[int index]index] {{ getget {{ returnreturn (Employee)empArray[index];(Employee)empArray[index]; }} }} publicpublic voidvoid CopyTo(ArrayCopyTo(Array a,a, intint index)index) {{ empArray.CopyTo(a,empArray.CopyTo(a, index);index); }} publicpublic intint CountCount {{ getget {{ returnreturn empArray.Count;empArray.Count; }} }} publicpublic objectobject SyncRootSyncRoot {{ getget {{ returnreturn this;this; }} }} publicpublic boolbool IsSynchronizedIsSynchronized {{ getget {{ returnreturn false;false; }} }} publicpublic IEnumeratorIEnumerator GetEnumerator()GetEnumerator() {{ returnreturn empArray.GetEnumerator();empArray.GetEnumerator(); }} publicpublic voidvoid Add(EmployeeAdd(Employee newEmployee)newEmployee) {{ empArray.Add(newEmployee);empArray.Add(newEmployee); }}

}}

www.istawww.ista--ntic.netntic.net

4949

ExempleExemple (Suite)(Suite) :: Main()Main() EmployeesEmployees EmpsEmps == newnew Employees();Employees();
ExempleExemple (Suite)(Suite) :: Main()Main()
EmployeesEmployees EmpsEmps == newnew Employees();Employees();
Emps.CollectionNameEmps.CollectionName == "Employees";"Employees";
EmployeeEmployee John100John100 == newnew Employee("John00",Employee("John00", "100xxx")"100xxx");;
Emps.Add(John100);Emps.Add(John100);
EmployeeEmployee John101John101 == newnew Employee("John01",Employee("John01", "101xxx")"101xxx");;
Emps.Add(John101);Emps.Add(John101);
XmlSerializerXmlSerializer xx == newnew XmlSerializer(typeof(EmployeeXmlSerializer(typeof(Employees));s));
//Serialisation//Serialisation EmpsEmps
TextWriterTextWriter writerwriter == newnew StreamWriter("Coll.xml");StreamWriter("Coll.xml");
x.Serialize(writer,x.Serialize(writer, Emps);Emps);
writer.Close();writer.Close();
<?xml<?xml version="1.0"version="1.0" encoding="utfencoding="utf--8"?>8"?>
<ArrayOfEmployee<ArrayOfEmployee
xmlns:xsi="http://www.w3.org/2001/XMLSchemaxmlns:xsi="http://www.w3.org/2001/XMLSchema--
//Déserialisation//Déserialisation Emps0Emps0
EmployeesEmployees Emps0Emps0 == newnew Employees();Employees();
XmlReaderXmlReader XmlRidXmlRid == XmlReader.Create("Coll.xml",XmlReader.Create("Coll.xml", newnew
XmlReaderSettings());XmlReaderSettings());
Emps0Emps0 == (Employees)x.Deserialize(XmlRid);(Employees)x.Deserialize(XmlRid);
XmlRid.Close();XmlRid.Close();
instance"instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Employee><Employee>
<EmpName>John00</EmpName><EmpName>John00</EmpName>
<EmpID>100xxx</EmpID><EmpID>100xxx</EmpID>
//// AffichageAffichage
foreachforeach (Employee(Employee EE inin Emps0)Emps0)
Console.WriteLine(E.ToString());Console.WriteLine(E.ToString());
Console.ReadKey()Console.ReadKey();;
</Employee></Employee>
<Employee><Employee>
<EmpName>John01</EmpName><EmpName>John01</EmpName>
<EmpID>101xxx</EmpID><EmpID>101xxx</EmpID>
</Employee></Employee>
</ArrayOfEmployee></ArrayOfEmployee>
www.istawww.ista--ntic.netntic.net
5050