m11-poo-csnet 2012-05-18

Post on 25-Feb-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 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 ([email protected])([email protected])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