Poly Copie Poo

Embed Size (px)

DESCRIPTION

POO C#

Citation preview

  • 5/22/2018 Poly Copie Poo

    1/39

    La Programmation Oriente Objet (Avec C#)

    1-Introduction

    Dans une approche fonctionnelle (Programmation Structurelle):les programmes

    sont composs d'une srie de fonctions, qui assurent ensemble certains services. Ils'agit d'une approche logique, cohrente et intuitive de la programmation.

    Avantage : la factorisation des comportements (c'est dire que pour crer unefonction d'une application, on peut utiliser un autre ensemble de fonctions (qui sont

    donc djcrites)).

    Dfauts: une maintenance complexe en cas d'volution de lapplication (une simplemise jour de l'application un point donnpeut impacter en cascade sur d'autres

    fonctions de lapplication).Ainsi; L'approche fonctionnelle n'est pas adapte au dveloppement d'applicationsqui voluent sans cesse et dont la complexit croit continuellement (plusieursdizaines de milliers de lignes de code).

    2- La P.O.O

    Dfinition: La P.O.O peut se dfinir comme l'art de dcomposer une application enun certain nombre d'objets qui ont des caractristiques communes et quicommuniquent entre eux afin de raliser une ou plusieurs tches.

    Le but de la POO est de rduire la difficultde la tche accomplir en la divisanten un grand nombre de petits problmes qui sont plus simples comprendre et rsoudre.

    3-Avantages de la P.O.O

    - Rendre plus facile le dveloppement des applications informatiques- Rendre plus facile la maintenance de ces applications

    - Modularit: introduire la notion de module (regrouper les lments homognesdans un seul module)

    - Minimiser le cout

    - Minimiser le temps de ralisation- la rutilisabilit- lextensibilit- L'approche objet a tinvente pour faciliter l'volution d'applications complexes.

    4- Langages OrientObjet

    Simula a tle premier langage de programmation implmenter le concept declasses en 1967 ! . En 1976, Smalltalk implmente les concepts dencapsulation,dagrgation, et dhritage (les principaux concepts de lapproche objet).Dautre part,de nombreux langages orients objets ont tmis au point (Object Pascal, C++,

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    2/39

    Java, VB.Net,C#,etc.).

    5- Concept de Classe et Objet

    5-1 Concept de classe

    Une classe, est un type de donnes abstrait, caractris par des proprits (sesattributs) et des mthodes) communes des objets.La classe :elle dfini un "moule", un "modle", un plan selon lequel seront conusles objets.

    Une Classe est un modle informatique reprsentant une famille dobjets ayant :- la mme structure de donnes (mme liste dattributs)

    - les mmes mthodes (mmes comportements).Exemples :

    Classe : Livre (titre,nbrepage,editeur,auteur)

    Classe Voiture(marque,puissance,annee,couleur)

    5-2 Concept d'Objet

    Un Objet est une instance dune classe, cest la concrtisation dune classeUn objet informatique, au sens de lorient objet, est une unit atomiquepossdant :- une identit;

    - un tat, dfini par un ensemble de donnes (attributs, ou donnes membres) ;- un comportement, dfini par un ensemble de fonctions (mthodes, ou fonctionsmembres).

    Ainsi: Objet = identit+ tat (attributs) + comportement (mthodes)

    Un Objet peut correspondre : objet concret du monde rel, ayant une ralitphysique, ou a un concept abstrait;

    6-Instanciation

    La Classe par elle-mme ne contient pas les valeurs des donnes : cest un type dedonnes abstrait.La cration dun objet en tant quexemplaire concret (contenant des donnes) duneclasse sappelle une INSTANCIATION. Chaque objet (instance dune classe) donne

    des valeurs aux attributs de la classe.

    Exemple :

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    3/39

    7- Proprits et mthodes :

    - Attributs : objet est dfini par des attributs (aussi appels variables d'instance).La valeur des attributs d'un objet correspond l'tat de cet objet.- Une mthode d'instance (non static) est une mthode qui s'applique sur unobjet.

    Remarque: un attribut dun objet peut etre un objet

    Exemple :

    Objet Comptebancaire(numero, solde,client) avec client(num, nom, prenom)

    ATTENTION : il faut viter d'utiliser les mthodes de classe. La programmationoriente objet consiste plutot crer des objets et leur appliquer des mthodes.

    Exemple :

    Classe: Maison

    - Prorits : CouleurPorte,couleurmur,nbreChambre,type,- Mthode: RepeindrePorte(couleur): permet de changer la couleur de la porte- Objets:

    Maison1 (avec 2 chambres, porte en rouge, mur en blancs )

    Maison2(3 chambres,porte en noirs, murs en blanc)

    8- Les fondements de la P.O.O

    La Programmation Oriente Objet est dirige par trois principes : encapsulation,

    hritageet polymorphisme.

    8-1 L'encapsulation :

    L'encapsulation est un mcanisme qui consiste rassembler les donnes et lesmthodes au sein d'une classe en cachant l'implmentation de l'objet.Le principe dencapsulation permet aux objets de se prsenter sous deux vuespossibles :

    - la vue externe : celle utilise par leprogrammeur utilisateur de la classe. Elledfinit les services accessibles aux utilisateurs de lobjet et ne fournit aucun accs

    aux mcanismes internes de lobjet (donnes et mthodes) ;- la vue interne : celle duprogrammeur concepteur de lobjet .Elle donne tous les

    dtails sur la constitution interne de lobjet, comment il est construit ;

    La vue externe dfinit linterface de lobjet (comment on lutilise), sans apporter dedtail sur la manire dont lobjet est rellement constitu.Lencapsulation (des attributs et des mthodes) permet de dissimuler lutilisateurdun objet des dtails dimplmentation susceptibles dvoluer avec le temps, ou neprsentant pas dintrt pour lutilisation externe de lobjet.Linterface propose par la vue externe est la seule partie de lobjet qui ne DOIT pastre modifi dans le temps, tout en proposant suffisamment dinteraction avec

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    4/39

    lobjet.

    Intrts de lencapsulation :

    1- facilite lvolution dune application

    on peut modifier des dtails internes dune classes (nombre, nature et noms desattributs, dtails des traitements) sans modifier son interface.

    2- favorise lintgrit des donnes : elle permet dinterdire laccs direct auxdtails internes.une classe peut compltement modifier la manire dont elle modlise et stocke sesdonnes, mais tant quelle continue offrir les mmes mthodes pour les manipuler,les autres objets nen sauront rien et ne sen proccuperont pas

    Les programmes doivent interagir avec les donnes d un objet uniquement par l

    intermdiaire des mthodes de l objet.

    8-2 L'Hritage

    Lhritage traduit la relation "est un". Exemple : Un roman est un livre,Une voitureest un Vhicule

    Lhritage est le mcanisme de transmission des proprits (attributs et mthodes)dune classe une autre ;La classe de base (classe mre, parente) transmet toutes ses propritstransmissibles aux classes drives (classe fille, enfant);

    La classe drive possde ses propres attributs et mthodes, que la classe de base neconnat pas ;La classe drive peut redfinir (amliorer, spcialiser, ....) les mthodes transmisespar la classe de base ;

    Tout ce que la classe de base sait faire, la classe drive sait le faire .ventuellement, la classe drive sait le faire "mieux" ou "diffremment" ;

    8-3 Le Polymorphisme

    Une sous-classe (fille, drive) peut implmenter les mthodes hrites de manirediffrente si ncessaire tout en gardant le mme nom que la mthode hriteLors de lexcution du programme, cest la mthode redfinie par la sous-classe qui

    est excute et non celle de la classe mre

    9- P.O.O en C#

    Une classe en c# peut etre dfinit comme suit :

    class NomClass {

    1- //Attributs

    2- //Mthodes

    }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    5/39

    Exemple :

    class Personne

    {

    string Nom;

    int Age;string Adresse;

    public void AfficherInfos()

    {

    System.Console.WriteLine(''Le nom est : ''+nom)

    System.Console.WriteLine(''votre prenom est : ''+prenom)

    System.Console.WriteLine(''Votre age est : ''+age)

    }

    }

    1- Attributs

    Syntaxe: visibilit type nomAttribut ;Exemple:

    public string Nom;

    public int Age;

    public string Adresse;

    2-Mthodes

    Visibilit TypeRetour nomMethode(arguments ) {

    Corps Return ValeurdeRetour ;

    }

    -Notion de Visibilit

    La visibilit dun attribut ou dune opration permet de dterminer qui pourra yaccder.C'est une notion fondamentale pour le concept objet dencapsulation. On a 3types de visibilit:

    1- + ou public : tout le monde peut y accder2- # ou protected : seules la classe possdant llment et les classes filles

    peuvent y accder (voir notion dhritage)3- - ou private : seule la classe possdant llment peut y accder

    Rgle :

    - Les attributs doivent tre privs- Les oprations dfinissant linterface dune classe doivent tre publique (servicesofferts)

    - Des oprations peuvent aussi tre prives si elles ne participent quaufonctionnement interne de la classe

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    6/39

    Exemple :

    class Personne

    {

    //Attributs

    Private int age ;

    Private string nom ;Private string prenom ;

    //MthodesPublic Void DonnerInfos(int a,string n,string p)

    {

    This.age=a ;

    This.nom=n ;

    This.prenom=p ;

    }

    -Cration d'un Objet :

    On passe au programme de test , et on cre les objets. Pour crer un objet duneclasse donne, il faut:

    1- dclarer une rfrence lobjet et2- linstancier

    Exemple :

    Personne p; // rfrencep = new Personne(); // instanciation

    Cela a pour effet de crer un objet de type Personne non encore initialis.

    -Accs aux champs :

    On peut accder aux caractristiques ( publiques) en utilisant l'oprateur '.'Exemple :

    p1.DonnerInfos("SALIM", 40,Place F N 6 casa) ;

    p2.age=20 ; //Faux

    P2.nom=''nom1 '' ;//Faux

    P2.prenom= ''prenom2'' ;//Faux

    -Constructeur :

    Dfinition : Cest une mthode sans type de retour qui porte le meme nom de laclasse, et qui peut prendre des paramtresSi une classe n'a aucun constructeur, elle en a un par dfaut qui est le constructeursans paramtres.Une classe peut comporter plusieurs constructeursExemple :

    //constructeur par dfaut

    Public Personne()

    { }

    //constructeur d'initialisation

    Public Personne(String pr,String nom, int age)

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    7/39

    {

    this.prenom = pr ;

    this.nom = nom ;

    this.age = age ;

    }

    - Le constructeur de recopiepermet de recopier les proprits d'un objet existantvers une nouvelle instance de mme type.Exemple:

    Public Personne(Personne p)

    {

    this.age = p.age ;

    This.nom=p.nom ;

    This.prenom=p.prenom ;

    }

    -Getters et Setters :Comme les attributs sont privs,on doit crer des mthodes qui permettent laccs

    ( pour connatre la valeur de lattribut , pour modifier cette valeur)

    - Les Getters (Accesseurs) : mtodes qui permettent de connatre les valeurs desattributs

    - Les Setters(Modifieurs) : sont des mthodes qui permettent de modifier lesattributs .

    Exemples : ' accesseurs

    Public string getPrenom() { Return this.prenom; }

    Public string getNom() { Return this.nom; }

    Public int getAge() { Return age ; }

    //Modifieurs

    Public void setPrenom(String P) { this.prenom = P; }

    Public void setNom(String N) { this.nom = N }

    Public void setAge(int age) { this.age = age ;}

    //Test

    Main(){

    Personne P= New Personne("Jean", "Michelin", 34) ;

    Console.WriteLine(("P=(" + P.getPrenom() + "," + P.getNom() + "," + P.getAge() +

    ")")) ;

    P.setAge(56) ;

    Console.WriteLine(("P=(" + P.getPrenom() + "," + P.getNom() + "," + P.getAge() +

    ")")) ;

    }

    -Les proprits

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    8/39

    Il est possible de dfinir les acces aux attributs dune classe par des proprits la place des mthodes Get et Set.

    class Example

    { int _number;

    public int Number

    {

    Get { return this._number; }

    Set { this._number = value; } } }

    class Program

    {

    static void Main()

    { Example example = new Example();

    example.Number = 5; // set { }

    Console.WriteLine(example.Number); // get { }

    } }

    -Attributs et Mthodes Static

    1- Attribut de classe:

    Jusqu'prsent, les attributs dclares taient des attributs d'instance. C'est direque les attributs de chaque objet, instancipartir de la mme classe, peuvent avoirdes valeurs diffrentes ( numero, nom, etc ).Problme :

    Supposons que dans la classe Stagiaire, il soit ncessaire de disposer d'uncompteur

    d'instance, dont la valeur serait le nombre d'instances cres

    Solution: En C# il est possible de crer des attributs de classe.

    Dfinition: un attribut de classe est un attribut dont la valeur est la mme pourtoutes les instances d'une mme classe. Pour dclarer un tel attribut, on utilise lemot-clStatic.

    Exemple: Public Static int compteur= 0La proprit de classe compteur, initialise 0 lors de sa dclaration, seraincrmente de 1 dans tous les constructeurs dvelopps pour la classe. Sa valeursera le nombre d'instances valides un instant donn.

    Dfinition : Une variable de classe est accessible comme une variabled'instance(selon sa visibilit), mais aussi sans avoir instancier un objet de la classe, uniquement en rfrenant la variable par le nom de la classe

    Exemple :

    Classe Personne

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    9/39

    {

    Public static int compteur=0 ;

    .}

    Programme de test

    Main()

    { Console.WriteLine(''Le nombre de personnes est : '' + Personne.compteur ) ;..

    }.

    2- Mthode de Classe:

    Dfinition: Une mthode de classe ne doit pas tre envoye une instance donnede cette classe, mais plutt la classe elle-mme.

    Syntaxe : Une mthode de classe est dclare par le mot-clStatic.

    Exemple: La mthode GetCompteur() qui permet d obtenir le nombre d'instances declasse Client

    Public Static int GetCompteur()

    { Return compteur ; }

    Dans le programme de test, on utilise le nom de la classe pour faire appel aux

    mthodes static.

    Rsum :

    Les mthodes de classe ne peuvent travailler qu'avec des variables de classe, alors

    que les mthodes d'instances peuvent utiliser les deux catgories de variables- Une variable de classe (prcde du mot clef static) est partage par tous les objetsde la mmeClasse.

    Une mthode de classe (prcde du mot clef static) ne peut appeler (invoquer) quedes

    mthodes de classe (prcdes du mot clef static)

    -Principe d'Hritage en C# :

    Supposons qu'on veut crer deux classes Personne et Stagiaire de la faon suivante :Une personne a un nom, prenom et une date de naissance. Un stagiaire est unepersonne. il a aussi un numro d'inscription et une moyenne. Donc la classestagiaire hrite de la classe Personne.La classe Personne est la classe mre. La classe stagiaire est une classe fille de laclasse personne

    Syntaxe :

    En C# , pour indiquer la drivation (hritage) partir d'une autre classe,on utilise lesymbole deux points ':'

    Dclaration : class ClasseFille : ClasseMere { }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    10/39

    signifie que la classe ClasseFille dispose de tous les attributs et de toutes les

    mthodes de la classe ClasseMere.Exemple : Pour exprimer que la classe stagiaire hrite des proprits de la classe

    personne, on crira :Exemple :

    Public Class Stagiaire : PersonneLhritage vite la duplication et facilite la rutilisation. Une classe fille peutdfinir de nouveaux champs et de nouvelles mthodes qui lui sont propres.

    Remarque : En C# lhritage multiple est interdit

    1-Cration d'une classe mre

    Si on utilise Private pour les attributs , ils seront invisibles pour les classes filles.

    Donc,on utilise Protected (les attributs seront visibles pour la classe mre et sesclasses filles)

    2-Cration d'une classe fille

    - Dfinition des attributs :On dclare juste les attributs propres la classe filleExemple : Class Stagiaire:Personne {

    //Attributs

    Private int muninscrip ;

    Private float moyenne ;

    }

    -Dfinition des constructeurs* Constructeur par dfaut : On utilise la mme syntaxepublic Stagiaire ()

    { }

    * Constructeur d'initialisation :

    public Stagiaire (string n, string p, DateTime d, int N,float M):base(n,p,d)

    { This.NumInscrip = N;

    This.Moyenne=M ; }

    -Dfinition des getters et des Setters : On ajoute juste les getters et les setters desattributs propres de la classe fille

    Exemple :

    //Get du numInsrip

    Public int GetNuminscrip()

    { return this.NumInscrip ; }

    Public void SetNumInscrip(int n)

    { this.NumInscrip=n ; }

    -Dfinir des mthodes : Une classe fille peut dfinir des nouvelles mthodes,modifier

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    11/39

    les mthodes hrites ou utiliser juste les mthodes de la classe mre

    - Redfinition des mthodes dans la classe Fille : Une classe fille peut redfinir unemthode hrite.Exemple : La classe salariet la classe contractuel

    La classe mre a une mthode description() qui permet de retourner la descriptiond'un salari. La classe fille, Contractuel, redfinit cette mthode de la faconsuivante :

    public string description()

    { Return base. description() + "" + this.getdateContrat + " " + this.gettype ; }

    Le mot clef base est utilispour accder tous les membres visibles de la classemre partir d'une classe fille drive directement de cette classe mre .

    Exemple :

    static void Main(){ Stagiaire s = new Stagiaire("SALIMI", "Hayat", 20, "tdi");

    Console.WriteLine(s.afficheInfo());

    Personne p = new Personne("ALAMI", "SOUMAYA", 20);

    Console.WriteLine(p.afficheInfo());

    Personne q = new Stagiaire ("DALIL", "Jalal", 23, "TRI");

    Console.WriteLine(q.afficheInfo());

    Console.ReadKey(); }

    Lobjet q est dclare Personne mais cre Stagiaire chose qui est tout a fait correcte(voir polymorphisme). MAIS, pour le compilateur C#, q est une personne mme sielle est cre avec le constructeur de la classe Stagiaire.le compilateur se base sur la dfinition stricte de q et fait ds lors excuterafficheInfo de la classe Personne . Le compilateur na pas tenu compte du vritabletype de q qui est stagiaire .

    Pour tenir compte du vritable type de q au moment dexcuter q.afficheInfo() , ilfaut :

    qualifier la mthode afficheInfo de virtual dans la classe de base (Personne);

    qualifier la mthode a fficheInfo de override dans la classe fille (Stagiaire).

    Dans la Classe fille: OverrideIndique que cette mthode substitue une autre demme nom dans une classe de base. Le nombre et les types de donnes desarguments doivent correspondre exactement ceux de la mthode de la classe debase.

    Dans la Classe mre:Virtual Indique que cette mthode peut tre substitue parune autre de mme nom dans une classe drive. Overridable est le paramtre pardfaut.

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    12/39

    - Hritage Successif:Une classe peut hriter d'une classe qui en hrite d'une autre. Prenons l'exemplesuivant : C hrite de B qui hrite de A, les membres sont hrits sils sontOverridable.

    Class A{Public virtual void F() { Console.WriteLine("A.F");}

    Public virtual void G(){ Console.WriteLine("A.G"); }

    }

    Class B: A{

    Public override void F(){ Console.WriteLine("B.F"); }

    Public override void G(){ Console.WriteLine("B.G"); }

    }

    Class C :B{Public void G(){ Console.WriteLine("C.G"); }

    }

    - Classe Abstraite, Classe finale et Interface

    1- Classe finale

    Une classe est dite finale, si elle ne peut tre hrite. Pour empcher lhritage partir dune classe on ajoute le mot clsealed.

    Exemple :

    sealed class Stagiaire : Personne

    { . }

    class Developpeur : Stagiaire //Incorrect car la classe Stagiaire est finale

    {.. }

    2- Classe abstraite :

    Une classe est dite abstraite, si elle ne peut tre instancie. Une classe est abstraitesi elle a au moins une mthode abstraite .

    Une mthode abstraite est une mthode qui na pas de corps (traitement) ,on dfinitjuste la signature (le prototype de la mthode).

    Chaque classe fille doit redfinir la mthode abstraite.

    abstract class A

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    13/39

    { private int i;

    public A(int ai) {i = ai;}

    public abstract void F(); //pas de code }

    // Classe B qui hrite de A

    class B : A

    {public B(int i) : base(i) {}

    public override void F() {Console.WriteLine("F de B "); }

    }

    3-Interface

    Une interface contient juste les signatures des mthodes . les classes quiimplmentent cette interface doivent les implmenter.

    Les interfaces constituent souvent une alternative aux classes abstraites et lhritage multiple.

    On ne peut pas non plus trouver de qualificatif comme public , private ou protected

    car cest la classe implmentant linterface de dcider. Si une fonction de linterface

    (dont on ne donne pourtant que le prototype)

    Exemple :

    Interface Int1{

    void m1(int a);

    void m2();

    }

    Interface Int2{ string m3();}

    class C1 : Int1 // classe C1 implmentant linterface Int1

    { // propriets et mthodes propres la classe C1

    void m1(int a) { Console.WriteLine("m1 de C1 "); }

    void m2() { Console.WriteLine("m2 de C1 "); } }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    14/39

    class C2 : Int1, Int2

    { // propriets et mthodes propres la classe C1

    void m1(int a) { Console.WriteLine("m1 de C2 "); }

    void m2() { Console.WriteLine("m2 de C2 "); }

    string m3() { return "m2 de C2 "; }}

    -Le principe de polymorphisme en C# :

    Dfinition: Le polymorphisme est la facultdune classe prendre plusieurs formes

    Le polymorphisme est la possibilitde rfrencer un objet de la classe drive avecune variable dont le type est la classe de base. Exemple: Personne p = New

    Employe () ;

    Le polymorphisme a pour objectifs de:

    1. Prsenter plusieurs formes.2. Offrir la possibilitde considrer des instances de classes diffrentes d'un mmepoint de vue.

    3. Offrir la possibilitd'envoyer des rfrences de mme type un mme message et

    d'obtenir des comportements diffrents (c'est--dire ceux des objets rfrencs et nonceux des rfrences).4. Manipuler de faon homogne des objets htrognes.

    On a trois types de polymorphisme :

    - Le polymorphisme ad hoc: permet d'avoir des fonctions de mme nom, avec desfonctionnalits similaires, dans des classes sans aucun rapport entre elles.Exemple : la classe Int32, la classe Double et la classe Date peuvent avoir chacune

    une fonction Equals

    - Le polymorphisme de surcharge:Ce polymorphisme reprsente la possibilitde dfinir plusieurs mthodes de mme nom maispossdant des paramtres diffrents (en nombre et/ou en type)Exemple : Dans une classe , une mthode Cacul() , Calcul(int a)- Le polymorphisme d'hritage : Quand une classe hrite d'une autre classe, ellehrite des mthodes. On peut redfinir ou substituer une mthode de la classe mrepar une mthode de mme nom dans la classe fille. Il est alors possible d'appeler lamthode d'un objet sans se soucier de son type intrinsque: il s'agit dupolymorphisme d'hritage.

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    15/39

    Exemple : AfficherInfos() dans la classe Personne et la Classe Stagiaire

    -Les Collections

    Dfinition : Une collection est un groupe d'lments dans laquelle il est possible

    d'ajouter ou d'enlever un lment n'importe quel endroit sans avoir seproccuper de la taille de la collection, ni o se trouve l'lment. Le nombred'lment n'est pas dfini au dpart. Les lments dune collection sont reprsgrce un indice ou avec une clunique.

    1-ArrayList

    La ArrayList est une liste (les lments sont reprs par un indice) o on peutmettre des objets : chanes, nombres, etc. Rien n'empche que le premier lmentsoit un entier, le second une chane, etc.

    Comme toute collection , une ArrayList est initialement vide. Lindice du premier

    lment est 0.

    Il faut utiliser le namespace : Imports System.Collections:

    Syntaxede dclaration: ArrayList L = new ArrayList() ;

    Accder un lment dune ArrayList : L.Item(indice) ou L(indice)

    Exemple : L.Item(0) retourne la valeur du premier lment de la liste.

    Mthodes But

    Count correspond au nombre des lments de la liste.Add(objet) ajouter un objet la fin de la liste.Remove(objet) enlve lobjet de la liste.RemoveAt(indice) enlve lobjet qui existe lindice passen paramtre.Clear() vide la liste

    Contains(objet) retourne True si la liste contient lobjet passen paramtre.Insert(indice , objet) insert un objet lindice spcifi.

    -Parcourir une collection :

    - Avec lindice de litem

    For (i=0;i< L.Count;i++)

    { A=L.Item(i) ; }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    16/39

    - Avec foreach

    Foreach(Object o in L)

    A = o ;

    -Avec lobjet IEnumerator (numrateur)

    Un numrateur est un objet qui effectue une itration sur la collection qui lui estassocie. Il peut tre considr comme un pointeur mobile vers un lmentquelconque de la collection. On utilise deux mthodes pour un numrateur

    MoveNext : avance d'un lment dans la collection. S'il ne peut plus avancer (s'ilest djaprs le dernier) il retourne False.

    Current : dsigne llment courant.

    ArrayList L = new ArrayList() ;

    IEnumerator C= L.GetEnumerator() ;

    While (C.MoveNext())

    { A = C.Current;}

    2- La classe Hashtable

    La HashTable est un dictionnaire (les lments sont reprs par une cl) quicomporte des paires cl-valeur. Ces couples sont de type Objet-Objet.

    Comme toute collection, une hashTable est initialement vide.

    La cltoujours unique (c.--d. deux lments de la HashTable ne peuvent avoir lamme cl).

    Elle permet de retrouver la valeur et ne doit pas tre vide.

    La classe Hashtable permet d'implmenter un dictionnaire. On peut voir undictionnaire comme un tableau deux colonnes :

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    17/39

    - Syntaxe de cration dune HashTable : HashTable ht = new HashTable() ;

    - Pour avoir le nombre de paires cl/valeur contenues dans Hashtable. : ht.Count() ;

    - Pour avoir la liste des cls de ht : ht.keys;

    - Pour avoir la liste des valeurs de ht : ht.values;

    - Accder un lment dune HashTable : ht.Item(cl)

    Mthode But

    H.Add(Cl,aleur! A"ou#e un l$en#H.I#e$(Cl! Re#ourne l%l$en# &orrespondan# ' une &l.

    H.Con#ainse)(Cl! Re#ourne True si la Cl es# dans la #able.

    H.Con#ainsalues(aleur!Re#ourne True si la *aleur es# dans la #able.H.Clear E++a&e #ous les l$en#s

    H.Re$o*e(Cl! Suppri$e l%l$en# a)an# une &l sp&i+ie.

    Exemple :

    ' Creation d'une Hashtable.

    HashTable myHt = new HashTable() ;

    'Mettre des lments dans la HashTable

    myHT.Add("un", "premier")

    myHT.Add("deux", "second")

    myHT.Add("trois", "troisime")

    myHT.Add("quatre", "quatrime")

    'Recherche la valeur correspondant la cl"trois"

    myReponse=myHT.Item("trois") 'Retourne "troisime"

    -Parcourir une HashTable :

    - Avec foreach : on parcourt la collection des cls

    foreach (DictionaryEntry de in myHT )

    Console.WriteLine( "\t CLE : " + de.Key + "\t VALEUR: " +de.Value );

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    18/39

    - Lnumrateur :

    IDictionaryEnumerator e= myHT.GetEnumerator() ;

    While (e.MoveNext())

    { 'Afficher clet valeur

    Console.WriteLine( e.Key+ e.Value) ;

    }

    -Gestion des Exceptions

    Dfinition :Une Exception est une erreur qui se produit dans un programme et qui conduit le

    plus souvent l'arrt de celui-ci. Autrement dit, Une exception est une erreurd'excution.

    En C#, L'exception est une classe, qui si une erreur d'excution se produit, vagnrer un objet d'un type en rapport avec l'erreur.

    1- Capture des exceptions :

    Aprs avoir crit une routine, il est toujours souhaitable de penser aux exceptionsque la routine pourrait provoquer (erreurs anticipes), aux exceptions inattenduesque la routine pourrait gnrer (erreurs non anticipes) et toutes les rgles mtier

    que la routine pourrait violer (violations de rgles mtier ).

    Exemple : je veux que l'utilisateur saisie un age 18

    * Erreur anticip:saisie nom valide (sting, n'importe quoi..)* Erreur non anticip: ?* Violation des rgles mtier : saisie d'une valeur

  • 5/22/2018 Poly Copie Poo

    19/39

    Si une exception intervient dans le bloc Try, le bloc Catch capture l'exception et le

    code l'intrieur du bloc Catch s'excute

    Remarque : Types des exceptions prdfinies

    Nom du Type Nature de l'erreur

    NullRe+eren&eE&ep#ion Le*e lors-ue *ous essa)e de r+ren&er un ob"e# don# la *aleur es#

    nulle./i*ide0)ZeroE&ep#ion Le*e ' l%o&&asion d%une #en#a#i*e de di*ision d%une *aleur in#1rale par

    ro.

    Inde2u#2+Ran1eE&ep#ion Indi&e en3de4ors d%un #ableauAri#4$e#i&E&ep#ion Classe de base pour les e&ep#ions -ui se produisen# pendan# des

    opra#ions ari#4$#i-ues

    3- le bloc FinallyOn peut ajouter la structure try catch un bloc Finally, qui indique desinstructions excuter quel qu'il soit le cas pass, qu'une erreur soit survenue ounon :

    Try

    {

    instructions susceptibles de provoquer une erreur

    }

    Catch (TypedException variable){ instructions excuter en cas d'erreur}

    Finally

    { instructions finales excuter dans tous les cas}

    Le code dans le bloc Finally sera excutaprs l'excution complte du bloc Try,aprs l'excution du bloc Catch, ou aprs l'excution de toutes instructions Returndans les blocs Try ou Catch. Tout code qui a besoin d'tre excutavant de quitter laroutine doit tre ajoutau bloc Finally.

    4-Crer une Exception personnalise :Pour crer une exception; On va donc crer une classe qui hrite la classe Exception.

    Public Class NomNouvelleException : Exception

    { //On peut ajouter un constructeur

    public NomNouvelleException(string message):base(message) {}

    }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    20/39

    5-Lever une exception:Throw

    L'instruction throw permet de gnrer une exception. Pour l'utiliser, il faut luifournir une rfrence vers un objet de type Exception. Exemple:Try

    {

    Int a ;a=int.Parse(Console.ReadLine()) ;

    if(a==0)

    Throw new NonPositiveException(''Valeur nulle'') ;

    }

    catch(NonPositiveException ex)

    {

    Console.WriteLine(''Erreur :''+ex) ;

    }

    -Utiliser les fichiersLa manipulation de fichiers peut tre utile dans la ralisation d'applications .Net, ilest trs frquent d'avoir besoin de stocker des informations dans un fichier.

    le Framework. Net possde toutes les classes ncessaires la ralisationd'oprations de bases voir mme dautres oprations plus complexes. On prcise quel'espace de noms concernest System.IO, on doit donc l'importer pour utiliser sesdiffrentes classes. Pour cela, il faut ajouter cette ligne de code : using System.IO

    System.IO permet la lecture et l'criture de fichiers et de flux de donnes.On va utiliser deux classes de l'espace de noms System.IO : StreamReader et

    StreamWriter.

    1-Lecture d'un fichier

    * On doit utiliser un objet de la classe streamreader :

    StreamReader monSR= New StreamReader("a.txt" ) ;

    * Pour la lecture dune ligne dun fichier , on utilise la mthode read ou readline :

    console.writeline( monsr.readline)

    * Pour la lecture du fichier (toute les lignes), on peut utiliser une boucle

    * A la fin, on doit fermer le streamreader: monsr.close

    Exemple :

    Code permettant la lecture du contenu d'un fichier texte :

    StreamReader msr= New StreamReader("a.txt" ) ;

    String ligne ;

    do{

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    21/39

    ligne = monSR.ReadLine() ;

    Console.WriteLine(ligne) ;

    Console.Write("") ;

    }while( ligne!=null) ;

    monSR.Close() ;

    2- Ecriture sur un fichier

    On doit utiliser un objet de la classe streamWriter

    * Cration dun objet de la classe streamWriter : StreamWriter monSw = NewstreamWriter("a.txt" ) ;

    * criture dune ligne sur un fichier , on utilise la mthode write ou writeline:monsw.writeline( console.readline)

    * On peut crire plusieurs lignes dans le fichier

    * A la fin, on doit fermer lestreamWriter:monsw.close

    Exemple :

    StreamWriter monSW= New StreamWriter("a.txt")

    monSW.WriteLine("Ma toute premire ligne...") ;monSW.WriteLine("Ma seconde ligne...") ;

    monSW.WriteLine("Ma troisime ligne...") ;monSW.Close() ;

    3- Importer les informations d'un fichier

    on suppose que chaque ligne du fichier contient les infos d'un seul objet sparespar ;

    Code :

    StreamReader sr=new StreamReader(''a.txt'') ;

    String[] t ;

    t=sr.ReadLine().Split('' ;''.ToCharArray()) ;

    Formateur f1=new Formateur() ;

    F1.setMatricule(int.Parse(t[0])) ;

    F1.setnom(t[1]) ;

    F1.setprenom(t[2]) ;

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    22/39

    F1.setechelle(int.Parse(t[3])) ;

    Console.WriteLine(f1.ToString()) ;

    Remarque : pour lire plusieurs lignes, utiliser une boucle.

    Annexes : Exemples de classes

    Exemple : classe simple avec les proprits +attributet mthode static

    programme de test

    class Stagiaire

    {

    private int _m;

    private string _n, _p, _f;

    private double _n1, _n2, _n3;

    private static int i = 0;

    public Stagiaire()//EX2-1:

    {

    i++;

    this._m = i;

    }

    public Stagiaire(string a,string b,string c)

    {

    this._n = a; this._p = b;

    this._f = c;

    i++;

    }

    //les proprietes

    public int m

    {

    get

    {

    return this._m;

    }

    set

    {

    this._m = value;

    }

    }

    public string n

    {

    get

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    23/39

    {

    return this._n;

    }

    set

    {

    this._n = value; }

    }

    public string f

    {

    get

    {

    return this._f;

    }

    set

    { this._f= value;

    }

    }

    public string p

    {

    get

    {

    return this._p;

    }

    set

    {

    this._p = value;

    }

    }

    public double n1

    {

    get

    {

    return this._n1; }

    set

    {

    this._n1 = value;

    }

    }

    public double n2

    {

    get

    {

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    24/39

    return this._n2;

    }

    set

    {

    this._n2 = value;

    } }

    public double n3

    {

    get

    {

    return this._n3;

    }

    set

    {

    this._n3 = value; }

    }

    public int Geti()

    {

    return i;

    }

    public static void RAZ()

    {

    i = 0;

    }

    public bool EQUAL(Stagiaire x)//methode de comparaison

    {

    bool z;

    if (this.m == x.m)

    {

    z = true;

    }

    else

    { z = false;

    }

    return z;

    }

    public double CALCUL()//methode pour calculer la moyenne

    {

    return (this.n1 + this.n2 + this.n3) / 3;

    }

    public void afficher()// methode d'affichage

    {

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    25/39

    Console.WriteLine("les infos de stagiaire sont :");

    Console.WriteLine("Matricule:" + m);

    Console.WriteLine("Nom:" + n);

    Console.WriteLine("Prenom:" + p);

    Console.WriteLine("Filiere:" + f);

    Console.WriteLine("Note1:" + n1); Console.WriteLine("Note2:" + n2);

    Console.WriteLine("Note3:" + n3);

    }

    }

    //Programme de test

    static void Main(string[] args)

    {

    Stagiaire s1=new Stagiaire(), s2=new Stagiaire(),s3=new Stagiaire(),s4=new

    Stagiaire();

    //remplissage des infos de chaque stagiaires s1.m = 1;

    s1.n = "karami";

    s1.p = "Loubna";

    s1.f=s2.f="TDI";

    s2.m = 2;

    s2.n = "Jamal";

    s2.p = "Youssef";

    s3.m = 3;

    s3.n = "Ilham";

    s3.p = "Fayrouz";

    s3.f = "TRI";

    s3.n1 = 12;

    s3.n2 = 13;

    s3.n3 = 15;

    s1.afficher();

    Console.WriteLine("================================ :");

    s2.afficher();

    Console.WriteLine("================================ :");

    s3.afficher(); Console.WriteLine("la moyenne:" + s3.CALCUL());

    Console.WriteLine("================================ :");

    s4.m = 4;

    s4.afficher();

    Console.WriteLine("================================ :");

    Stagiaire.RAZ();

    Stagiaire s5=new Stagiaire();

    s5.n = "karami";

    s5.p = "Loubna";

    s5.f = "TDI";

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    26/39

    s5.n1 = 13;

    s5.n2 = 14;

    s5.n3 = 12;

    s5.afficher();

    Console.WriteLine("la moyenne:" + s5.CALCUL());

    Console.WriteLine("================================ :"); if (s1.EQUAL(s5) == true)

    {

    Console.WriteLine("les deux stagiaires:1 et 5 sont les mme"); }

    else

    {

    Console.WriteLine("les deux stagiaire:1 et 5 sont diffrant"); }

    Console.ReadLine();

    }

    Exemple : Classe Point et classe Vecteur et un main avec Menu

    class Point

    {

    private double x;

    private double y;

    public Point()

    { }

    public Point(double a, double b)

    {

    this.x = a;

    this.y = b;

    }

    public void SetX(double a)

    {

    this.x = a;

    }

    public void SetY(double b)

    {

    this.y = b;

    }

    public double GetX()

    {

    return this.x;

    }

    public bool Identique(Point a)

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    27/39

    {

    bool c;

    if (this.x == a.GetX() && this.y == a.GetY())

    {

    c = true;

    } else

    {

    c = false;

    }

    return c;

    }

    public bool symetric(Point a)

    {

    bool k;

    if (Math.Abs(this.x) == Math.Abs(a.GetX()) || Math.Abs(this.y) ==Math.Abs(a.GetY()))

    {

    k = true;

    }

    else

    {

    k = false;

    }

    return k;

    }

    public void trans(double dx,double dy)

    {

    this.x = this.x + dx;

    this.y = this.y + dy;

    }

    public double GetY()

    {

    return this.y;

    } public void Afficher()

    {

    System.Console.WriteLine("X= " + x);

    System.Console.WriteLine("Y= " + y);

    }

    }

    //

    class GeoVecteur

    {

    private Point ExtremiteA;

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    28/39

    private Point ExtremiteB;

    bool i;

    public GeoVecteur()

    {

    }

    public GeoVecteur(Point a,Point b) {

    this.ExtremiteA = a;

    this.ExtremiteB= b;

    }

    public void SetExtremiteA(Point a)

    {

    this.ExtremiteA = a;

    }

    public void SetExtremiteB(Point b)

    { this.ExtremiteB = b;

    }

    public Point GetExtremiteA()

    {

    return this.ExtremiteA;

    }

    public Point GetExtremiteB()

    {

    return this.ExtremiteB;

    }

    public string Afficher()

    {

    return "ExtremiteA:[ " + ExtremiteA.GetX() + "," + ExtremiteA.GetY() + "]"+

    " ExtremiteB:[ " + ExtremiteB.GetX() + "," + ExtremiteB.GetY() + "]";

    }

    public double longueur()

    {

    return Math.Pow(this.ExtremiteA.GetX() - this.ExtremiteB.GetX(),2) +Math.Pow(this. ExtremiteA.GetY()-this.ExtremiteB.GetY(),2);

    }

    }

    }

    //Programme de Test :

    static void Main(string[] args)

    {

    GeoVecteur g = new GeoVecteur();

    double Xa;

    double Ya;

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    29/39

    double Xb;

    double Yb;

    int op;

    double dx, dy;

    Point m1, m2;

    System.Console.WriteLine("donner les coordonnes de l'extremite A:[Xa,Ya]"); Xa = System.Convert.ToDouble(System.Console.ReadLine());

    Ya = System.Convert.ToDouble(System.Console.ReadLine());

    m1 = new Point(Xa, Ya);

    System.Console.WriteLine("donner les coordonnes de l'extremite B:[Xb,Yb]");

    Xb = System.Convert.ToDouble(System.Console.ReadLine());

    Yb = System.Convert.ToDouble(System.Console.ReadLine());

    m2 = new Point(Xb, Yb);

    g.SetExtremiteA(m1); g.SetExtremiteB(m2);

    do

    {

    Console.WriteLine("===========================================

    =============================");

    Console.WriteLine("1-tester si les point sont identique 2-tester si les point

    sont symetric ");

    Console.WriteLine("3-affichage 4-appliquer une translation 5-afficher la

    longueur 0-Quiter");

    Console.WriteLine("===========================================

    =============================");

    op=Convert.ToInt32(Console.ReadLine());

    switch (op)

    {

    case 1:

    if (m1.Identique(m2) == true)

    {

    Console.WriteLine(" ==> les points sont egaux"); }

    else

    {

    Console.WriteLine(" ==> les points non egaux");

    }

    break;

    case 2:

    if (m1.symetric(m2) == true)

    {

    Console.WriteLine(" ==> les points sont symetric");

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    30/39

    }

    else

    {

    Console.WriteLine(" ==> les points non symetric");

    }

    break; case 3:

    Console.WriteLine(g.Afficher());

    break;

    case 4:

    Console.WriteLine("donner le valeur de translation:[dx,dy]");

    dx = System.Convert.ToDouble(System.Console.ReadLine());

    dy = System.Convert.ToDouble(System.Console.ReadLine());

    m1.trans(dx, dy);

    m2.trans(dx, dy);

    Console.WriteLine("apres translation:" + g.Afficher()); break;

    case 5:

    System.Console.WriteLine("Le longeur est : " + g.longueur());

    break;

    case 0:

    break;

    default:

    System.Console.WriteLine("cette operation n'existe pas");

    break;

    }

    }while(op!=0);

    System.Console.ReadLine();

    }

    Exemple : Hritage et Polymorphisme

    class Client

    {

    protected int numC;

    protected string nom;

    protected string prenom;

    protected string adresse;

    public Client()

    {

    }

    public Client(int n, string no, string p, string a)

    {

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    31/39

    this.numC = n;

    this.nom = no;

    this.prenom = p;

    this.adresse = a;

    }

    public int getnum() {

    return this.numC;

    }

    public string getnom()

    {

    return this.nom;

    }

    public string getprenom()

    {

    return this.prenom; }

    public string getadresse()

    {

    return this.adresse;

    }

    public void setnum(int n)

    {

    this.numC = n;

    }

    public void setnom(string no)

    {

    this.nom = no;

    }

    public void setprenom(string p)

    {

    this.prenom = p;

    }

    public void setadresse(string a)

    { this.adresse = a;

    }

    public bool Equals(Client C)

    {

    if (this.getnum() == C.getnum() && this.getnom() == C.getnom() &&

    this.getprenom() == C.getprenom() && this.getadresse() == C.getadresse())

    {

    return true;

    }

    else

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    32/39

    {

    return false;

    }

    }

    public override string ToString()

    { return "le numero de client:" + this.getnum()+"\nle nom:"+this.getnom()

    +"\nle prenom:"+this.getprenom()+"\nadresse:"+this.getadresse();

    }

    }

    //Classe fille

    class ClientR:Client

    {

    private string RaisonSocial;

    public ClientR()

    { }

    public ClientR(int n, string no, string p, string a, string r)

    : base(n, no, p, a)

    {

    this.RaisonSocial = r;

    }

    public string getRaisonSocial()

    {

    return this.RaisonSocial;

    }

    public void setRaisonSocial(string r)

    {

    this.RaisonSocial = r;

    }

    public override string ToString()

    {

    return base.ToString()+ "Raison Social:" + this.getRaisonSocial();

    } public string verifiernom(ClientR C)

    {

    if(this.getnom()==C.getnom())

    {

    return "les deux clients ayant le meme nom";

    }

    else

    {

    return "les deux client sont differants";

    }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    33/39

    }

    public bool verifiernom(string n)

    {

    if (this.getnom()==n)

    {

    return true; }

    else

    {

    return false;

    }

    }

    }

    //Programme de Test

    static void Main(string[] args) {

    ClientR C = new ClientR();

    ClientR V = new ClientR();

    Console.WriteLine(" Donner les Infos de Client 1 [ Num

    ,nom,prenom,adrese,Raison Social ]");

    C.setnum(int.Parse(Console.ReadLine()));

    C.setnom(Console.ReadLine());

    C.setprenom(Console.ReadLine());

    C.setadresse(Console.ReadLine());

    C.setRaisonSocial(Console.ReadLine());

    Console.WriteLine(" Donner les Infos de Client 2 [ Num

    ,nom,prenom,adrese,Raison Social ]");

    V.setnum(int.Parse(Console.ReadLine()));

    V.setnom(Console.ReadLine());

    V.setprenom(Console.ReadLine());

    V.setadresse(Console.ReadLine());

    V.setRaisonSocial(Console.ReadLine());

    Console.WriteLine(" ============== Les Infos Client 1 ============");

    Console.WriteLine(C.ToString()); Console.WriteLine(" ============== Les Infos Client 2 ============");

    Console.WriteLine(V.ToString());

    Console.WriteLine(" ============== Comparaison ============");

    if (C.Equals(V) == true)

    {

    Console.WriteLine("les deux client sont identique");

    }

    else

    {

    Console.WriteLine("les deux client sont differants");

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    34/39

    }

    if (C.verifiernom(V.getnom()))

    {

    Console.WriteLine("les deux clients ayant le meme nom");

    }

    else {

    Console.WriteLine("les deux client ayant differant nom");

    }

    Console.ReadLine();

    }

    Exemple : Hashtable+Menu

    static void Main(string[] args)

    { Hashtable h = new Hashtable();

    int k;

    int drap = 0;

    do

    {

    Console.WriteLine("1:ajouter un element");

    Console.WriteLine("2:le nombre des element");

    Console.WriteLine("3:accede un element");

    Console.WriteLine("4:supprimer un element");

    Console.WriteLine("5:rechercher un element"); Console.WriteLine("6:vider un HashTable");

    Console.WriteLine("7:Quitter");

    Console.WriteLine("donner votre choix");

    k = int.Parse(Console.ReadLine());

    switch (k)

    {

    case 1:

    h.Add(1, "safi");

    h.Add(2, "agadir"); h.Add(3, "marrakech");

    h.Add(4, "tanger");

    h.Add(5, "rabat");

    drap = 1;

    foreach (DictionaryEntry de in h)

    Console.WriteLine("cle: " + de.Key + " , valeur :" + de.Value);

    break;

    case 2:

    Console.WriteLine("est :"+ h.Count);

    break;

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    35/39

    case 3:

    int c;

    c = int.Parse(Console.ReadLine());

    Console.WriteLine("la ville est " + h[c]);

    break; case 4:

    int s;

    s = int.Parse(Console.ReadLine());

    h.Remove(s);

    foreach (DictionaryEntry de in h)

    Console.WriteLine("cle: " + de.Key + " , valeur :" + de.Value);

    break;

    case 5: Console.WriteLine("donner votre le numero de cle rechercher");

    int a;

    a = int.Parse(Console.ReadLine()); if (h.ContainsKey(a))

    Console.WriteLine("le cle existe");

    else

    {

    Console.WriteLine("le cle n'existe pas");

    }

    Console.WriteLine("donner votre la valeur rechercher");

    string e;

    e = Console.ReadLine();

    if (h.ContainsValue(e))

    Console.WriteLine("la valeur existe");

    else

    Console.WriteLine("la valeur n'existe pas");

    break;

    case 6:

    if (drap == 1)

    h.Clear();

    else Console.WriteLine("l'HashTable est deja vide");

    break;

    case 7: Console.WriteLine("Quiter");

    break;

    default: Console.WriteLine("erreur");

    break;

    }

    }

    while (k != 7);

    Console.ReadLine();

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    36/39

    }

    Exemple : Hashtable comme attribut

    class etudiant

    {

    //attributs private int NumI;

    private string nom;

    private string prenom;

    private DateTime daten;

    //constructeur par dfaut public etudiant()

    {

    }

    //constructeur d'initialisation

    public etudiant(int N, string n, string p, DateTime d)

    {

    this.NumI = N;

    this.nom = n;

    this.prenom = p;

    this.daten = d;

    }

    //getters

    public int getNumI()

    { return this.NumI;

    }

    public string getnom()

    {

    return this.nom;

    }

    public string getprenom()

    {

    return this.prenom;

    } public DateTime getdaten()

    {

    return this.daten;

    }

    //setters

    public void setNumI(int N)

    {

    this.NumI = N;

    }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    37/39

    public void setnom(string n)

    {

    this.nom = n;

    }

    public void setprenom(string p)

    { this.prenom = p;

    }

    public void setdaten(DateTime d)

    {

    this.daten = d;

    }

    //mthode public override string ToString()

    {

    return "le num d'inscription " + this.getNumI() + " , le nom :" + this.getnom()+ " , le prenom :" + this.getprenom() + "la date :" + this.getdaten();

    }}

    //classe avec attribut Hashtable

    class classeEt

    {

    //attribut

    private Hashtable listeEtudiant = new Hashtable();

    //constructeur par defaut

    public classeEt()

    {

    }

    //constructeur d'initialisation

    public classeEt(Hashtable l)

    {

    this.listeEtudiant = l;

    }

    //getters

    public Hashtable getlisteEtudiant() {

    return this.listeEtudiant;

    }

    //methode

    public void ajouteE(etudiant e)

    {

    this.listeEtudient.Add(e.getNumI(),e);

    }

    public void supprimerE(int n)

    {

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

  • 5/22/2018 Poly Copie Poo

    38/39

    this.listeEtudiant.Remove(n);

    }

    public override string ToString()

    {

    string res = " ";

    foreach (DictionaryEntry i in this.listeEtudiant) {

    res += "infos de l'etudiant :" +((etudiant) i.Value).ToString();

    }

    return res;

    }

    Exemple : utiliser les exceptions

    class Etudiant

    {

    private int numero;

    private DateTime date;

    public Etudiant()

    { }

    public Etudiant(int n, DateTime d)

    { this.numero = n;

    this.date = d;

    } public void setnumero(int n)

    { this.numero = n; }

    public int getnumero()

    { return this.numero; }

    public void setdate(DateTime d)

    { this.date = d; }

    public DateTime getdate()

    { return this.date; }

    public void VerifierAge()

    {

    int age=(DateTime.Now.Year)-(this.getdate().Year);

    if(age

  • 5/22/2018 Poly Copie Poo

    39/39

    public NegatifException(string message)

    : base(message)

    { }

    }

    //Programme de test

    Console.WriteLine("donner les info [ numero , DateNaissance jj/mm/aaaa ]"); Etudiant e = new Etudiant(int.Parse(Console.ReadLine()),

    DateTime.Parse(Console.ReadLine()));

    try

    {

    e.VerifierAge();

    }

    catch (NegatifException ex)

    {

    Console.WriteLine("ereur "+ex);

    }

    Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI