Vous êtes sur la page 1sur 130
Programmation Orientée Objet (POO) A.ELmagri 1 21/03/2013
Programmation Orientée Objet (POO)
A.ELmagri
1
21/03/2013

PLAN

Introduction à la POO (Classes et Objets) Programmation Objet C#

Les Classes en C#

  • Encapsulation et Méthodes d‟accés Héritage Classes de collections

  • Polymorphisme

  • Les exceptions

2
2

A.ELmagri

21/03/2013

Définition

Programmation orientée objet (ou POO):

  • Technique visant à faire interagir des objets entre eux,

  • Facilite l‟écriture des applications par une structuration en terme d‟objets.

  • Favorise la réutilisation de code, en composant des programmes à partir d‟objets existants (par exemple, la bibliothèque standard de C++, de Java,

. .

.).

3
3

A.ELmagri

21/03/2013

Concepts clefs de la POO

Deux notions essentielles sont caractéristiques de la POO :

  • Classe : schématiquement, une classe représente le type d’un objet, tout comme int représente un entier.

  • Objet : constitué par l‟association d‟une quantité

d‟information organisée en champs (nom, prénom, age, notes pour un étudiant ; marque, modèle, cylindrée, vitesse pour une voiture) et d‟un ensemble de méthodes permettant d‟interagir

avec lui (calculer la moyenne d‟un étudiant ou accélérer pour une

voiture).

4
4

A.ELmagri

21/03/2013

Objet

Objet = identité + état + comportement

  • Une identité

    • deux objets différents ont des identités différentes

    • on peut désigner l‟objet (y faire référence)

  • Un état (attributs)

    • Ensemble de propriétés/caractéristiques définies par des valeurs

    • Permet de le personnaliser/distinguer des autres objets

    • Peut évoluer dans le temps

  • Un comportement (méthodes)

    • Ensemble des traitements que peut accomplir un objet (ou que l‟on peut lui

  • faire accomplir)

    5
    5

    A.ELmagri

    21/03/2013

    Objet - Exemples Objet Etat Comportement Chien Nom, race, âge, couleur .. Aboyer, chercher le bâton,
    Objet - Exemples
    Objet
    Etat
    Comportement
    Chien
    Nom, race, âge, couleur
    ..
    Aboyer, chercher le bâton,
    mordre ..
    Compte
    N°, type, solde
    ..
    Retrait, virement, dépôt,
    consultation de solde
    Téléphone
    N°, marque, sonnerie,
    répertoire, opérateur
    Appeler, Prendre un appel,
    Envoyer sms, charger
    A.ELmagri
    6
    21/03/2013

    Classes et instances (1)

    • Classe = patron/moule (= type)

      • une classe est la « description » d‟une collection objets homogènes (mêmes

    caractéristiques et mêmes comportements).

    • décrit la structure de l‟état (les attributs et leurs types)

    • Instance = objet obéissant à un patron

      • un objet est une « instance » de classe.

      • Par analogie, on peut aussi considérer une classe comme le type d‟une variable et l‟objet comme la valeur de cette même variable.

  • Classe : abstrait

    • la notion/le type “Chat”

  • Instance : concret

    • “ce Chat blanc que je vois dans la rue”, “le chat de mon voisin”

  • 7
    7

    A.ELmagri

    21/03/2013

    Classes et instances (2) Une classe doit nécessairement comporter les éléments suivants :  Les champs
    Classes et instances (2)
    Une classe doit nécessairement comporter les éléments suivants :
    Les champs : ce sont les « variables » permettant, en général,
    de définir l’état de l‟objet.
    Un ou plusieurs constructeurs : ce sont des fonctions
    indiquant de quelle façon l‟objet doit être déclaré et initialisé.
    Les méthodes : ce sont les fonctions permettant d’agir sur les
    objets d‟une classe. Selon leur définition, elle peuvent
    s‟appliquer sur un objet particulier, ou sur l‟ensemble des
    instances d‟une classe.
    A.ELmagri
    8
    21/03/2013
    Exemples  La classe « chien » définit:  Les attributs d‟un chien (nom, race, couleur,
    Exemples
    La classe « chien » définit:
    Les attributs d‟un chien (nom, race, couleur, âge…)
    Les comportements d‟un chien (Aboyer, chercher le bâton, mordre…)
    Il peut exister dans le monde plusieurs objets (ou instances) de chien!!
    Classe
    Instances (Objets)
    Chien
    - Mon chien: Bill, Teckel, Brun, 1 an
    - Le chien de mon voisin: Hector, Labrador, Noir, 3 ans
    Compte
    -Mon compte à vue: N° 210-1234567-89, Courant, 1.734 DZ,12.500DZ
    -Mon compte épargne: N° 083-9876543-21, Epargne, 27.000 DZ, 0DZ
    A.ELmagri
    9
    21/03/2013
    Programmation Objet C# A.ELmagri 10 21/03/2013
    Programmation Objet C#
    A.ELmagri
    10
    21/03/2013
    Espace de nom (namespace) Un espace de nom est un ensemble de classes associées, il peut
    Espace de nom (namespace)
    Un espace de nom est un ensemble de classes associées, il peut
    également contenir d‟autres espaces de nom.
    Exemple :
    namespace MesClasses
    {
    public class ClasseUne
    }
    {
    ...
    public class ClasseDeux
    {
    ...
    }
    }
    A.ELmagri
    11
    21/03/2013

    Imbrication des espaces de noms

    • L'imbrication des espaces de noms est possible : namespace MesClasses { namespace Calcul { // espace de nom MesClasses.Calcul }

    }

    • Ou directement :

    namespace MesClasses.Calcul { // espace de nom MesClasses.Calcul

    ...

    }

    12
    12

    A.ELmagri

    21/03/2013

    Espace de noms en plusieurs parties

    Plusieurs fichiers sources peuvent contribuer à ajouter des déclarations à un même

    espace de noms.

    • Fichier : images.cs using System; namespace Exemple.Images {

    public class Image {

    }

    public class ImageBitmap : Image {

     

    }

    }

    • Fichier : couleurs.cs

    using System;

    namespace Exemple.Images { public class Couleur {

    }

    public class ConversionCouleur {

    }

    }

    13
    13

    A.ELmagri

    21/03/2013

    Directive using

    • Le mot clé using fait référence aux ressources dans la librairie des classes de .NET Framework

    • C# est fourni avec de nombreuses classes d‟utilitaires qui effectuent diverses opérations utiles

    • Ces classes sont organisées en espace de nom (namespace)

    • Une directive using spécifie un espace de nom qui sera utilisé

    14
    14

    A.ELmagri

    21/03/2013

    Les variables et les constantes  Une variable réserve une place en mémoire pour stocker des
    Les variables et les constantes
    Une variable réserve une place en mémoire pour stocker
    des données.
    Déclaration:
    type nom [ = expression ] ;
    Une constante nommée est associée à une valeur pour
    toute la durée de l'application. Sa valeur ne peut changer.
    Déclaration:
    const type nom = expression ;
    A.ELmagri
    15
    21/03/2013
    Votre premier Programme en C# A.ELmagri 16 21/03/2013
    Votre premier Programme en C#
    A.ELmagri
    16
    21/03/2013

    Les Entrées / Sorties (In/Out)

    • La classe Console - La classe Console fournit un accès à l‟entrée standard, à la sortie standard et aux flux d‟erreur standard - Les méthodes Console.Write et Console.WriteLine affichent des informations sur l‟écran de la console. -Les méthode Console.Read et Console.ReadLine lisent l‟entrée de l‟utilisateur sur le clavier.

    • Appeler ReadKey à la fin de la méthode Main empêche que la fenêtre de console ne se ferme avant que vous ayez pu lire la sortie lorsque vous lancez le mode débogage en appuyant sur F5.

    17
    17

    A.ELmagri

    21/03/2013

    La méthode Main

    • L‟exécution d‟une application C# démarre au niveau de la méthode Main.

    • Une application C# peut contenir plusieurs classes, mais un seul point d‟entrée.

    • On peut avoir plusieurs classes avec Main dans la même application, mais une seule méthode Main est exécutée.

    • La classes à utiliser doit être spécifiée lors de la compilation de l‟application.

    18
    18

    A.ELmagri

    21/03/2013

    La méthode Main Déclarez la méthode Main d'une des manières suivantes :  Elle peut retourner
    La méthode Main
    Déclarez la méthode Main d'une des manières suivantes :
    Elle peut retourner void :
    Elle peut également retourner int :
    Avec les deux types de retour, elle peut accepter des arguments :
    Le paramètre de la méthode Main est un tableau string qui représente les arguments de
    la ligne de commande utilisés pour appeler le programme.
    A.ELmagri
    19
    21/03/2013

    Classe

    Classe :

    • Dans C#, une application est une collection d‟une ou plusieurs classes, structure de données et autres types.

    • Les classes peuvent être réparties dans un ou plusieurs fichiers

    • Plusieurs classes peuvent être placées dans un fichier

    Membres d'une classe:

    • Les fonctions, appelées méthodes, traitent les données, appellent d'autres méthodes, retournent éventuellement une valeur ;

    • Les variables, appelées attributs, stockent les données ;

    20
    20

    A.ELmagri

    21/03/2013

    Exemple de Classe:

    Public class Rectangle {

    //Les attributs (ou proprietes ou Etat) de la classe

    Int largeur ; Int longueur ;

    //Implémentation des methodes (comportement)

    Int Calcule_surface( ) {

    Return (largeur*longueur) ; }

    }

    21
    21

    A.ELmagri

    21/03/2013

    Instanciation d’un objet

    Pour qu‟un objet ait une existence, il faut qu‟il soit instancié.

    Une même classe peut être instanciée plusieurs fois, chaque

    instance (objet) ayant des propriétés ayant des valeurs spécifiques.

    Par exemple l‟instanciation d‟un objet de type Client se fait

    comme suit :

    Public static void Main(String[] args) { Rectangle rect ; //déclaration d’une variable de type Classe rect = new Rectangle( ) ; //instanciation d’un objet rectangle

    }

    22
    22

    A.ELmagri

    21/03/2013

    I. Encapsulation - Méthodes d’accès - Constructeurs A.ELmagri 23 21/03/2013
    I.
    Encapsulation - Méthodes
    d’accès - Constructeurs
    A.ELmagri
    23
    21/03/2013

    Encapsulation

    • Mécanisme permettant de rassembler les attributs et méthodes propres à un type donné afin d‟en restreindre l‟accès et/ou d‟en faciliter l‟utilisation et la maintenance

    • De manière générale, les données sont privées et les méthodes sont publiques

    • Certaines méthodes peuvent être privées et ne servir qu‟au

    fonctionnement interne de la classe public : Accès autorisé tous ; private : Accès depuis la classe seulement ;

    Protected : Accès depuis la classe et ses sous-classes seulement ;

    • Si l‟accès à un attribut de classe n‟est pas défini, le compilateur C# le considèrera par défaut comme privé

    24
    24

    A.ELmagri

    21/03/2013

    Les méthodes d’accès aux propriétés

    Si les propriétés sont verrouillées (déclarées private) on ne

    peut plus y accéder de l’extérieur de la classe. Il

    faut donc créer des méthodes pour avoir accès aux propriétés, ces méthodes doivent permettre un accès dans les deux sens :

    • Les Accesseurs/Setters : Pour modifier la valeur de propriété.

    • Les mutateurs/Getters: Pour connaitre la valeur de la propriété.

    25
    25

    A.ELmagri

    21/03/2013

    Les accesseurs (getters) :

    • Ces méthodes sont appelées des méthodes de type Get, cette méthode (fonction) ne prend pas de paramètre et retourne la valeur de l‟attribut associé.

    • Par exemple pour l‟attribut largeur de type int , la fonction Get serait déclaré comme suit :

    Public int GetLargeur() { return largeur;

    }

    Cette fonction pourra être utilisée dans la fonction Main comme suit : Rectangle rect = new Rectangle () ;

    Int large= rect.GetLargeur() ;

    26
    26

    A.ELmagri

    21/03/2013

    Les mutateurs/Setters

    • Ces méthodes sont appelées méthodes Set. Cette méthode n’a aucun retour (procédure). Par contre un paramètre de même type que la propriété doit lui être indiqué.

    • Le Setter associé à la propriété Largeur de la classe Rectangle sera implémenté comme suit

    public void SetLargeur (int large){ largeur = large; }

    Cette fonction pourra être utilisée dans la fonction Main , comme suit : Rectangle rect = new rectangle( ) ;

    rect.SetLargeur(20);

    27
    27

    A.ELmagri

    21/03/2013

    Exemple: Public Class Rectangle { /* L’etat de la classe – les attributs*/ private int largeur;
    Exemple:
    Public Class Rectangle {
    /* L’etat de la classe – les attributs*/
    private int largeur;
    Private int longueur;
    /* les getters et setters des attributs */
    public void SetLongueur (int long) {
    this.longueur = long;}
    public int GetLongueur () {
    return this.longueur; }
    public void SetLargeur (int large) {
    this.largeur = large; }
    public int GetLargeur () {
    return this.largeur; }
    /* Eventuellement autres méthodes*/
    ……….;
    }
    A.ELmagri
    28
    21/03/2013

    Les Constructeurs(1)

    Un constructeur d‟une classe intervient au moment de l‟instanciation d‟un objet de type cette même classe.

    Le constructeur initialise les attributs (propriétés) de cet objet

    pour qu‟il soit cohérent.

    Le constructeur est une méthode de la classe, mais très particulière :

    • Parce qu‟elle a le même nom que l’identificateur de la classe.

    • Parce qu‟elle n’a pas de type de retour, même le type void.

    29
    29

    A.ELmagri

    21/03/2013

    Les Constructeurs(2)

    • Pour une classe donnée, on peut définir plusieurs constructeurs.

    • Tous ces constructeurs partagent le même nom (le nom de la classe), mais se distinguent par le nombre et les types d‟arguments, cette distinction s‟appelle en orientée objet surcharge.

    • Constructeur d’initialisation :ce constructeur initialise les propriétés de l‟objet au moment de l‟instanciation, par les valeurs passées en paramètre.

    30
    30

    A.ELmagri

    21/03/2013

    Constructeur / Exemple

    Public class Client {

    //Déclaration des attributs

    Private int num ;

    Private string nom ; Private double chiffre_affaire ;

    //Implémentation d’un constructeur d’initialisation

    Public Client(int numero, string name, double ca){ This.num=numero ;

    This.nom=name; This.chiffre_affaire=ca; } }

    Cela va permettre d‟instancier la classe Client dans Main de la façon

    suivante :

    Client cli = new Client(100, “toto”, 10000);

    31
    31

    A.ELmagri

    21/03/2013

    Constructeur par défaut

    • Un constructeur par défaut existe déjà pour chaque classe si aucun autre constructeur n‟est déclaré.

    • A partir du moment où le constructeur d‟initialisation existe, il devient impossible d‟appeler le constructeur par

    défaut.

    /* faux , impossible d’appeler le constructeur par déaut*/ Client cli = new Client () ;

    • Pour remédier à ce problème, il suffit de rajouter le constructeur par défaut dans la classe Client: /* constructeur par défaut */ Public Client ( ) {

    }

    32
    32

    A.ELmagri

    21/03/2013

    Constructeur de recopie

    Le constructeur de recopie permet de copier les propriétés d‟un objet existant dans une nouvelle

    instance(objet).

    Exemple de constructeur de recopie :

    public Client (Client c) { This.num = c.num ; This.nom = c.nom;

    This.chiffre_affaire = c.chiffre_affaire; }

    Dans le programme principal:

    cl1t=new Client(234, « toto » , 9876) ;

    Client clt2=new Client(clt1) ; //Constructeur de recopie

    33
    33

    A.ELmagri

    21/03/2013

    Propriété de classe  En C#, chaque classe peut avoir un compteur d‟instance qui a comme
    Propriété de classe
    En C#, chaque classe peut avoir un compteur d‟instance qui
    a comme valeur le nombre d‟instances en cours, instanciées à
    partir de cette classe à un moment donnée.
    Ce compteur d‟instance est une propriété de classe, sa
    valeur est la même pour toutes les instances, pour déclarer
    cette propriété on utilise le mot static.
    La propriété de la classe doit être initialisée par 0 lors de sa
    déclaration, et incrémentée de 1 dans tous les constructeurs
    de la classe.
    A.ELmagri
    34
    21/03/2013

    Propriété de classe: Exemple

    Public class Client {

    //propriété de classe

    private static int compteur=0 ;

    //propriété d‟instance

    private int num ; Private string nom ;

    private double ca ; //constructeur par défaut public Client() { compteur+=1 ; } //Constructeur d’initialisation

    public Client(int num, string nom, double ca) {

    compteur+=1 ; This.num=num ; This.nom=nom ; This.ca=ca //Constructeur de recopie

    ; }

    Public Client(Client clt) { compteur+=1 ; This.num=clt.num ; This.nom=clt.nom ; This.ca=clt.ca; } }

    35
    35

    A.ELmagri

    21/03/2013

    Les méthodes de classe  Une méthode de classe est une méthode private déclarée avec le
    Les méthodes de classe
    Une méthode de classe est une méthode private déclarée avec le
    mot clé static .
    Exemple :
    Méthode Get associée à la propriété de classe « compteur:
    private static int GetCompteur(){
    Return compteur ; }
    L‟appel d‟une méthode de classe est sensiblement différent à l‟appel
    des autres méthodes.
    Public static void Main(string[]args){
    // utilisation de la classe elle-même, et pas une instance
    int cpt= Client.GetCompteur();
    }
    A.ELmagri
    36
    21/03/2013
    Exemple: Classe Personne public personne(personne P){ public class personne{ // Incrementer le nbre d’instance // Attributs
    Exemple: Classe Personne
    public personne(personne P){
    public class personne{
    // Incrementer le nbre d’instance
    // Attributs de la classe
    nbPersonnes++;
    private static long nbPersonnes=0;
    this._prenom=p._prenom;
    this._nom=p._nom;
    // Attributs d’objet
    this._age=p._age;
    private String _prenom;
    private String _nom;
    private int _age;
    // Constructeurs
    }
    // Méthode de la classe
    public static long GetNbPersonnes{
    return _nbPersonnes;
    }
    public personne(String p, String n, int age)
    {
    /* setters et getters */
    …………………. }
    // Incrementer le nbre d’instance
    Dans la méthode Main:
    nbPersonnes++;
    public static void Main(){
    personne p1=new personne("Jean","Dupont",30);
    this._prenom=p;
    this._nom=n;
    this._age=age;
    }
    }
    personne p2=new personne(p1);
    new personne(p1);
    Console.Out.WriteLine("Nombre de personnes
    créées : "+personne.nbPersonnes);
    }
    A.ELmagri
    37
    21/03/2013
    Classe statique Une classe statique ne contient que des membres statiques, et ne peut être instanciée.
    Classe statique
    Une classe statique ne contient que des membres statiques, et
    ne peut être instanciée. Le mot clé static précède la
    déclaration de cette classe.
    Exemple :
    public static class UneClasseStatique{
    public static void Afficher(string message)
    {
    // ...
    }
    }
    Utilisation :
    UneClasseStatique.Afficher("Un exemple de message");
    A.ELmagri
    38
    21/03/2013
    II. L’Héritage A.ELmagri 39 21/03/2013
    II. L’Héritage
    A.ELmagri
    39
    21/03/2013
    C’est quoi l’Héritage ?(1) Imaginons que nous avons les classes suivantes: Etudiant, Enseignant, Salarie. Nous remarquons
    C’est quoi l’Héritage ?(1)
    Imaginons que nous avons les classes suivantes: Etudiant, Enseignant,
    Salarie.
    Nous remarquons que les champs nom, prenom, age ainsi que
    leurs getters et setters sont répètes dans les 3 classes !!
    Salarie
    Etudiant
    Enseignant
    String nom
    String prenom
    String nom
    Int age
    String prenom
    String nom
    String prenom
    Int age
    Int matricule
    Int cne
    getNom()
    getPrenom()
    Int age
    Int matricule
    String etablissement
    getNom()
    getPrenom()
    getAge()
    getCne()
    getNom()
    getPrenom()
    getAge()
    getMatricule ……
    getAge()
    getMatricule
    A.ELmagri
    40
    21/03/2013
    C’est quoi l’Héritage ?(2) De même, la classe Enseignant et la classe Salarie partagent 4 champs
    C’est quoi l’Héritage ?(2)
    De même, la classe Enseignant et la classe Salarie partagent
    4 champs ( matricule de plus!).
    Afin d'éviter la répétition des éléments constituant
    chacune des classes, il est préférable de factoriser toutes
    ces caractéristiques communes pour en faire une
    nouvelle classe plus généraliste.
    Personne
    On peut penser à une classe Personne:
    String nom
    String prenom
    Int age
    Cette classe contiendra les champs et
    les méthodes communs de classes
    Enseignant, Salarie, et Etudiant.
    GetNom()
    GetPrenom()
    GetAge()
    … ..
    A.ELmagri
    41
    21/03/2013
    C’est quoi l’Héritage ?(3) Ainsi Etudiant, Salarie et Enseignant ne sont que des exemples particuliers de
    C’est quoi l’Héritage ?(3)
    Ainsi Etudiant, Salarie et Enseignant ne sont que des exemples
    particuliers de Personne! Et qui Héritent tous les
    caractéristiques de la Personne.
    Personne
    Nous remarquons que les
    attributs encapsulés dans
    la classe Personne, ne
    String nom
    String prenom
    Int age
    Classe Parente
    (Mère)
    GetNom()
    figurent plus dans les
    trois classes Dérivées
    /FILLES
    GetPrenom()
    GetAge()
    … ..
    On dit que la classe Salarie
    Hérite de la classe Personne
    ( elle hérites tous les
    attributs et les méthodes)
    Etudiant
    Enseignant
    Salarie
    Int matricule
    Int cne
    Int matricule
    String etablissement
    getMatricule()
    getCne()
    getMatricule ()
    getEtablissement()…
    A.ELmagri
    42
    21/03/2013
    Nous remarquons aussi, que Enseignant est en fait un Salarie, et que la caractéristique Matricule est
    Nous remarquons aussi, que Enseignant est en fait un Salarie, et que la
    caractéristique Matricule est en commun, donc on peut penser à faire
    une liaison d’héritage entre Salarie et Enseignant comme suit:
    Personne
    String nom
    String prenom
    Int age
    GetNom()
    Salarie
    GetPrenom()
    Int matricule
    GetAge()
    … ..
    getMatricule()
    Etudiant
    Int cne
    Enseignant
    getCne()
    String etablissement
    getEtablissement()……
    A.ELmagri
    43
    21/03/2013
    Pour récapituler ! L’héritage consiste en la création d‟une nouvelle classe dite classe drivée ou classe
    Pour récapituler !
    L’héritage consiste en la création d‟une nouvelle classe dite classe
    drivée ou classe fille à partir d‟une classe existante dite classe
    de base ou classe parente ou encore classe mère.
    L’héritage permet de :
    Récupérer le comportement standard d‟une classe objet (classe
    mère) à partir de propriétés et de méthodes définies dans celle-ci.
    Ajouter des fonctionnalités supplémentaires en créant de
    nouvelles propriétés et méthodes dans la classe dérivée.
    Modifier le comportement standard d‟une classe d‟objet (classe
    mère) , en surchargeant certaines méthodes de la classe mère dans
    la classe dérivée.
    A.ELmagri
    44
    21/03/2013
    Classe fille – Classe Parente Classe Fille Classe Mére class ClasseA { public int dataA; public
    Classe fille – Classe Parente
    Classe Fille
    Classe Mére
    class ClasseA {
    public int dataA;
    public int MethodeA1() {
    // coprs de la méthode
    }
    Class ClassB : ClassA{
    public int Dtab ;
    /* Redéfinition de la methodeA2 */
    public override int MethodeA2(){
    //code de la méthode
    }
    //Méthode surchargeable
    public virtual int
    MethodeA2() {
    /*coprs de la méthode */
    public int MethodeB1(){
    //coprs de la méthode
    }
    }
    }
    }
    A.ELmagri
    45
    21/03/2013

    Classe Fille /Classe Parente :

    Dans l‟exemple précédent :

    • ClasseA est la classe parente.

    • ClasseB est une classe dérivée de la classe ClasseA.

    • dataA est une propriété de la classe ClasseA. Par héritage, dataA est aussi une propriété de la classe ClasseB.

    • dtab est une propriété de la classe ClasseB (mais pas de ClasseA).

    • MethodeA1 est une méthode de la classe ClasseA. Par héritage, c'est aussi une méthode de la classe ClasseB.

    • MethodeB1 est une méthode de la classe ClasseB (mais pas de ClasseA).

    • MethodeA2 est une méthode des classes ClasseA et ClasseB.

    • Dans la classe A, MethodeA2() est déclarée virtual car elle est surchargeable dans la classe B

    • Dans la classe B, MethodeA2 est déclarée override car elle remplace la méthode de la classe A

    46
    46

    A.ELmagri

    21/03/2013

    Le mot clef Protected Même si les classes Enseignant et Salarie sont très proches de la
    Le mot clef Protected
    Même si les classes Enseignant et Salarie sont très proches de la classe Personne, le
    fait que les champs définis dans Personne le soit avec le mot clef private les oblige
    à utiliser les propriétés pour accéder.
    Il existe un autre mot clef permettant l‟accés des champs d‟une classe à ses classes
    filles : protected.
    Cela reviendrait à définir la classe Personne de la manière suivante :
    public class Personne
    {//Champs
    protected string nom;
    protected string prenom;
    protected int age;
    protected int telephone;
    … }
    Retenez surtout que protected permet l‟accès au champs uniquement aux
    classes-filles de Personne,
    A.ELmagri
    47
    21/03/2013
    Constructeurs  Contrairement aux méthodes, champs et propriétés, une classe fille n‟hérite pas des constructeur de
    Constructeurs
    Contrairement aux méthodes, champs et propriétés, une classe fille n‟hérite pas des
    constructeur de sa classe mère.
    Les constructeurs doivent donc être redéfinis. On peut cependant faire appel aux
    constructeurs de la classe mère:
    public Enseignant(string nom, string prenom, int age, int tel,
    int matricule, string etablissement) :base(nom, prenom, age, tel)
    {
    this. matricule= matricule;
    this.etablissement = etablissement ;
    }
    Le mot clef base appelle le constructeur correspondant de la classe Personne.
    Si l‟appel par le mot clef base est absent, alors le compilateur va se tourner vers un constructeur
    sans paramètre de Personne, (qui doit être préalablement définis) et renverra une erreur si ce
    constructeur n‟existe pas.
    Retenez bien qu‟un objet Enseignant est aussi une Personne et doit donc être instancié
    comme une Personne avant de pouvoir être déclaré comme un Enseignant.
    A.ELmagri
    48
    21/03/2013
    Méthodes Certaines méthodes d‟une classe mère peuvent ne plus être adaptée à sa/ses classe(s) fille(s). Il
    Méthodes
    Certaines méthodes d‟une classe mère peuvent ne plus être adaptée à sa/ses classe(s) fille(s). Il
    faut alors redéfinir la méthode en question.
    Par exemple, la méthode AfficherPersonne() de la classe Personne ne permet pas de rendre
    compte de l‟ensemble des informations présentes dans la classe Enseignant.
    Il faut donc la compléter de la manière suivante :
    public void AfficherPersonne() {
    string s = base.AfficherPersonne() + "," + this.matricule + "," +
    this.etablissement;
    Console.WriteLine(s);
    }
    On aurait tout aussi bien écrire cette méthode de la façon suivante :
    public void AfficherPersonne() {
    string s = this.prenom + "," + this.nom + ",« + this.age + "," + this.tel + "," +
    this.matricule+ "," + this.etablissement ;
    Console.WriteLine(s);
    }
    A.ELmagri
    49
    21/03/2013
    Classe abstraite(1)  Comment implémenter les méthodes périmètre() et surface() dans la classe Forme ? 
    Classe abstraite(1)
    Comment implémenter les méthodes périmètre() et surface()
    dans la classe Forme ?
    Les deux méthodes ne peuvent pas être implémentés dans la
    déclaration de la classe Forme. Car La formule de calcul change
    d‟une forme à l‟autre !!
    Donc faut juste déclarer
    les signatures de 2 méthodes dans
    la classe Forme de la façon suivantes:
    abstract public double Calcul_surface();
    abstract Public double Calcul_Perim();
    Les 2 méthodes seront par la suite
    implémentées dans chaque classe fille
    De façons différentes.
    A.ELmagri
    50
    21/03/2013
    Classe abstraite(2)  On dit que la classe Forme est une classe Abstraite, car elle contient
    Classe abstraite(2)
    On dit que la classe Forme est une classe Abstraite, car elle
    contient au moins une méthode abstraite.
    Une classe abstraite ne peut pas être instanciée !
    Les méthodes abstraites doivent obligatoirement être implémentés
    dans les sous classes de la classe abstraite.
    abstract public Class Form {
    private string nom;
    public Forme (string nom) {
    this.nom = nom; }
    abstract public double Calcul_perim();
    public void dessiner() {
    /*corps de la méthode */
    }
    }
    A.ELmagri
    51
    21/03/2013
    Classe abstraite (3) La classe fille Rectangle: La classe fille Cercle: Public Class Cercle : Form
    Classe abstraite (3)
    La classe fille Rectangle:
    La classe fille Cercle:
    Public Class Cercle : Form {
    Public Class Rectangle:
    Form {
    private double rayon;
    private double long;
    private double large;
    /*constructeur */
    /*constructeur */
    public Cercle (double rayon) : base(nom) {
    this.rayon = rayon; }
    /* implémentation de la méthode abstraite */
    public rectangle (double long, double
    large) : base(nom) {
    this.long = long;
    public double calcul_perim() {
    return 2*Double.PI*this.rayon;
    }
    this.large = large;
    }
    /* implémentation de la méthode abstraite
    */
    }
    public double calcul_perim() {
    return 2*(large + long) ;
    }
    }
    A.ELmagri
    52
    21/03/2013
    La méthode ToString()(1)  La méthode ToString est une méthode héritée de la super-classe Object ,
    La méthode ToString()(1)
    La méthode ToString est une méthode héritée de la super-classe
    Object , Le prototype de la méthode ToString est le suivant :
    public String ToString() ;
    la méthode ToString: permet de convertir un objet de type classe en
    String.
    Exemple :
    Class Rectangle {
    private int largeur ;
    private int longueur ;
    public Rectangle(){ }
    public Rectangle(int largeur , int longueur){
    this.largeur=largeur ;
    Public static void Main(string[]args){
    Rectangle r=new Rectangle(3,4) ;
    Console.WriteLine(“r= ”+ r);
    /* faux, impossible d’afficher l’objet r,
    parce qu’on a pas surchargé la fonction
    ToString dans la classe Rectangle */ }
    this.longueur=longueur ; }
    ..
    }
    A.ELmagri
    53
    21/03/2013
    La méthode ToString() (2) Pour remédier à ce problème, on doit surcharger ( redéfinir) la fonction
    La méthode ToString() (2)
    Pour remédier à ce problème, on doit surcharger ( redéfinir) la fonction
    ToString dans la classe Rectangle.
    La classe Rectangle après modification :
    Class Rectangle{
    Private int largeur ;
    Private int longueur ;
    Public static void Main(string[]args){
    Rectangle r = new Rectangle(3,4) ;
    Console.WriteLine(“r= ”+ r);
    // c’est OK, et ça va afficher (3,4) }
    /* les constructeurs … */
    /* La méthode ToString */
    Public override String ToString(){
    Return (“(”+ this.largeur
    + ”,” + this.longueur + ”)”); }
    }
    A.ELmagri
    54
    21/03/2013
    La méthode Equals()  Cette méthode doit répondre VRAI si deux instances sont rigoureusement égales. 
    La méthode Equals()
    Cette méthode doit répondre VRAI si deux instances sont
    rigoureusement égales.
    De même que la méthode ToString La méthode Equals est une méthode
    virtual héritée de la classe Object, pour qu‟on puisse l‟utiliser dans
    n‟importe quelle classe on doit la surcharger.
    Class Rectangle{
    Private int largeur ;
    Private int longueur ;
    //le constructeur de recopie
    Public Rectangle(Rectangle
    rec){ This.largeur=rec.largeur ;
    This.longueur=rec.longueur ;}
    }
    Public static void Main(string[]args){
    Rectangle r1=new Rectangle(3,4) ;
    Rectangle r2=new Rectangle(r1) ;
    Boolean a= (r1==r2); /*ça va générer
    erreur parce qu’on peut pas comparer
    Deux objets en utilisant l’opérateur «
    == » */ }
    A.ELmagri
    55
    21/03/2013
    A.ELmagri

    Classe Sealed

    • Une classe Sealed : c‟est une classe dont on ne peut dériver ( ne peut pas être une classe mère). C# permet de spécifier qu‟une classe ne peut en aucun cas être une classe de base. C‟est-à-dire aucune classe ne peut dériver de celle-ci. Pour cette raison, elle ne peut pas également être une classe abstraite.

    • Il suffit de mettre le mot clé sealed devant la déclaration de la classe

    • Ce type de classe ne peut avoir de méthodes abstraites

    (abstract) ou de membres protégés (protected) car aucune classe dérivée ne pourra être créée pour les implémenter / y accéder.

    56
    56

    A.ELmagri

    21/03/2013

    Interface  Lorsqu'une classe est déclarée en abstract et que toutes ses méthodes sont déclarées en
    Interface
    Lorsqu'une classe est déclarée en abstract et que toutes ses
    méthodes sont déclarées en abstract, on appelle en C# une telle
    classe une Interface.
    Une interface ne doit contenir aucun champ ou attribut.
    Une interface doit contenir des méthodes non implémentées.
    Une interface est héritable.
    Pour pouvoir construire un objet à partir d'une interface, il faut définir
    une classe non abstraite implémentant toutes les méthodes de
    l'interface.
    Syntaxe :
    interface < nom de l'interface > {
    < corps des déclarations : méthodes, …>
    }
    A.ELmagri
    57
    21/03/2013
    Interface : Exemple interface Ivehicule { /* Signatures de méthodes de l’interface*/ void Demarrer( ); void
    Interface : Exemple
    interface Ivehicule {
    /* Signatures de méthodes de l’interface*/
    void Demarrer( );
    void RpartirPassager( );
    void PeriodiciteMaintenance( );
    }
    A.ELmagri
    58
    21/03/2013
    Les interfaces et l'héritage multiple  Avec l'héritage multiple, une classe peut hériter en même temps
    Les interfaces et l'héritage multiple
    Avec l'héritage multiple, une classe peut hériter en même temps
    de plusieurs super classes. Ce mécanisme n'existe pas en c#.
    Les interfaces permettent de mettre en oeuvre un mécanisme
    de remplacement.
    Plusieurs interfaces peuvent être implémentées dans une même
    classe.
    class nomClasse : Interface1, Interface2,
    ...
    //Implementer ici les méthodes des interfaces
    {
    }
    21/03/2013
    A.ELmagri
    5
    9
    Les interfaces et l'héritage multiple Exemple: Public interface IA{ double CalculerSomme(); } Public interface IB{ double
    Les interfaces et l'héritage multiple
    Exemple:
    Public interface IA{
    double CalculerSomme(); }
    Public interface IB{
    double TrouverMax(); }
    public class
    C
    : IA, IB {
    double b;
    double a;
    public double somme() {
    return a+b;
    }
    public double TrouverMax() {
    double max ;
    if (a )
    max = a;
    else max = b;
    return max;
    }
    21/03/2013
    A.ELmagri
    6
    0
    IV. Polymorphisme A.ELmagri 61 21/03/2013
    IV. Polymorphisme
    A.ELmagri
    61
    21/03/2013
    Polymorphisme ? Le polymorphisme est un mécanisme Exemple 1 : via lequel un objet de la
    Polymorphisme ?
    Le polymorphisme est un mécanisme
    Exemple 1 :
    via lequel un objet de la classe mère
    peut prendre plus d'une forme (de ses
    classes filles).
    Personne x;
    Personne cl = new
    Personne("Ali",42 );
    Salarie sal = New Salarie("Ahmed",
    23, 3000);
    Par exemple, si vous avez une classe de base
    nommée Personne, une référence de type
    Personne peut être utilisé pour contenir un
    objet de n'importe laquelle de ses classes
    x
    = cl;
    Console.WriteLine(x.ToString());
    dérivées ( Salarie, Enseignant
    ..
    ).
    x
    = sal;
    Quand vous appelez une méthode à partir de
    votre objet, le système déterminera
    automatiquement le type de l'objet afin
    d'appeler la méthode appropriée.
    Console.WriteLine(x.ToString());
    A.ELmagri
    62
    21/03/2013
    Exemple2: /*definir un tableau de vehicules (classe mere) */ Vehicule ve = new Vehicule [3]; /*
    Exemple2:
    /*definir un tableau de vehicules (classe mere) */
    Vehicule ve = new Vehicule [3];
    /* ici chaque objet de tableau ve prend une forme (de classes
    filles )*/
    Ve[0] = new Voiture (….);
    Ve[1] = new Camion (…);
    Ve[2] = new Bus (…);
    A.ELmagri
    63
    21/03/2013
    La Classe String A.ELmagri 64 21/03/2013
    La Classe String
    A.ELmagri
    64
    21/03/2013
    • System.String est une classe fondamentale de .NET. Elle est exclusivement conçue pour stocker des chaînes de caractères et met à disposition du programmeur un grand nombre d'opérations de traitement des chaînes

    • string (avec s minuscule) représente un raccourci vers le type String (S majuscule)

    String s = new String(“chaine"); // Equivaut à string s = chaine";

    65
    65

    A.ELmagri

    21/03/2013

    La concaténation : Taille d‟une chaine string msg1 = "Hello"; string msg2 = " World"; msg2
    La concaténation :
    Taille d‟une chaine
    string msg1 = "Hello";
    string msg2 = " World";
    msg2 = String.Concat(msg1, msg2);
    string str = "MaChaine"
    Console.Write(str.length); 8
    Remplacer une chaine
    Console.Write(str.replace(« Ma », «
    Ta »));
    //équivaut à
    TaChaine
    msg2 += msg1;
    La comparaison :
    string s1 = "hello";
    string s2 = "hello";
    bool c1 = s1.Equals(s2);
    //équivaut à
    bool c1 = (s1 == s2);
    A.ELmagri
    66
    21/03/2013
    Méthodes de String A.ELmagri 67 21/03/2013
    Méthodes de String
    A.ELmagri
    67
    21/03/2013
    Méthodes de String (suite) A.ELmagri 68 21/03/2013
    Méthodes de String (suite)
    A.ELmagri
    68
    21/03/2013
    Exemple public class string1{ // une classe de démonstration public static void Main(){ string uneChaine="l'oiseau vole
    Exemple
    public class string1{
    // une classe de démonstration
    public static void Main(){
    string uneChaine="l'oiseau vole au-dessus des
    nuages";
    affiche("uneChaine="+uneChaine);
    affiche("uneChaine.Length="+uneChaine.Length)
    ;
    affiche("chaine[10]="+uneChaine[10]);
    affiche("uneChaine.ToLower()="+uneChaine.
    ToLower());
    affiche("uneChaine.Replace('a','A')="+uneCh
    aine.Replace('a','A'));
    string[] champs=uneChaine.Split(null);
    for (int i=0;i<champs.Length;i++){
    affiche("champs["+i+"]=["+champs[i]+"]");
    }
    affiche("Join(\":\",champs)="+System.String
    .Join(":",champs));
    affiche("uneChaine.IndexOf(\"vole\")="+uneCh
    aine.IndexOf("vole"));
    affiche("uneChaine.IndexOf(\"x\")="+uneChain
    e.IndexOf("x"));
    affiche("uneChaine.LastIndexOf('a')="+uneChain
    e.LastIndexOf('a'));
    affiche("uneChaine.LastIndexOf('x')="+uneChain
    e.LastIndexOf('x'));
    affiche("(\" abc \").Trim() =["+" abc
    ".Trim()+"]");
    }
    public static void affiche(String msg){
    affiche("uneChaine.Substring(4,7)="+uneChaine.
    // affiche msg
    Console.Out.WriteLine(msg);
    }
    }
    Substring(4,7));
    affiche("uneChaine.ToUpper()="+uneChaine.ToU
    pper());
    A.ELmagri
    69
    21/03/2013
    Après exécution de l’exemple précèdent: uneChaine=l'oiseau vole au-dessus des nuages uneChaine.Length=34 chaine[10]=o uneChaine.IndexOf("vole")=9 uneChaine.IndexOf("x")=-1 uneChaine.LastIndexOf('a')=30 uneChaine.LastIndexOf('x')=-1
    Après exécution de l’exemple précèdent:
    uneChaine=l'oiseau vole au-dessus des nuages
    uneChaine.Length=34
    chaine[10]=o
    uneChaine.IndexOf("vole")=9
    uneChaine.IndexOf("x")=-1
    uneChaine.LastIndexOf('a')=30
    uneChaine.LastIndexOf('x')=-1
    uneChaine.Substring(4,7)=seau vo
    uneChaine.ToUpper()=L'OISEAU VOLE AU-DESSUS DES NUAGES
    uneChaine.ToLower()=l'oiseau vole au-dessus des nuages
    uneChaine.Replace('a','A')=l'oiseAu vole Au-dessus des nuAges
    champs[0]=[l'oiseau]
    champs[1]=[vole]
    champs[2]=[au-dessus]
    champs[3]=[des]
    champs[4]=[nuages]
    Join(":",champs)=l'oiseau:vole:au-dessus:des:nuages
    (" abc ").Trim()=[abc]
    A.ELmagri
    70
    21/03/2013

    Exercice

    Ecrire un programme qui supprime toutes les occurrences d‟un caractère C dans une chaine Str.

    Inverser une chaine de caractères.

    Remplacer le premier caractère de chaque mot dans une phrase par le majuscule.

    71
    71

    A.ELmagri

    21/03/2013

    La classe Regex A.ELmagri 72 21/03/2013
    La classe Regex
    A.ELmagri
    72
    21/03/2013
    La classe Regex  La classe Regex permet de tester le format d'une chaîne de caractères.
    La classe Regex
    La classe Regex permet de tester le format d'une chaîne de
    caractères.
    Ainsi on peut vérifier qu'une chaîne représentant une date est
    bien au format jj/mm/aa.
    On utilise pour cela un modèle et on compare la chaîne à ce
    modèle. Ainsi dans cet exemple, j m et a doivent être des
    chiffres. Le modèle d'un format de date valide est alors
    "\d\d/\d\d/\d\d" où le symbole \d désigne un chiffre
    A.ELmagri
    73
    21/03/2013
    Le symbole \d Considérons quelques exemples autour du symbole \d qui représente 1 chiffre : Modele
    Le symbole \d
    Considérons quelques exemples autour du symbole \d qui représente
    1 chiffre :
    Modele
    Signification
    \d
    0 ou un chiffre
    \d*
    0 ou davantage de chiffres
    \d+
    1 ou davantage de chiffres
    \d{2}
    2
    chiffres
    \d{3,}
    au moins 3 chiffres
    \d{5,7}
    entre 5 et 7 chiffres
    A.ELmagri
    74
    21/03/2013
    Exemples de modèles: une date au format jj/mm/aa : \d{2}/\d{2}/\d{2} une heure au format hh:mm:ss: \d{2}:\d{2}:\d{2}
    Exemples de modèles:
    une date au format jj/mm/aa : \d{2}/\d{2}/\d{2}
    une heure au format hh:mm:ss: \d{2}:\d{2}:\d{2}
    A.ELmagri
    75
    21/03/2013
    IsMatch Un objet de type Regex se construit de la façon suivante : /*constructeur */ public
    IsMatch
    Un objet de type Regex se construit de la façon suivante :
    /*constructeur */
    public Regex(string pattern)
    construit un objet à partir d'un modèle passé en paramètre (pattern)
    Une fois le modèle construit, on peut la comparer à des chaînes de
    caractères avec la méthode IsMatch :
    Qui retourne public vrai bool si la IsMatch(string chaîne input input) correspond au modèle créé.
    A.ELmagri
    76
    21/03/2013
    Exemple: Format d’une date if (regex1.IsMatch(exmple)){ static void Main(string[] args) Console.WriteLine("["+exmple {// une expression régulière modèle
    Exemple: Format d’une date
    if (regex1.IsMatch(exmple)){
    static void Main(string[] args)
    Console.WriteLine("["+exmple
    {// une expression régulière modèle
    + "] correspond au modèle
    string modèle1 =
    ["+modèle1+"]");
    @"\d{2}/\d{2}/\d{2}";
    } else {
    Regex regex1=new
    Console.WriteLine("[" +
    exmple + "] ne correspond pas
    Regex(modèle1);
    au modèle [" + modèle1 + "]");
    // comparer un exemplaire au modèle
    }
    Console.ReadKey();
    string exmple=" 11/02/99 ";
    }
    Ne pas oublier : using System.text.RegularExpressions
    A.ELmagri
    77
    21/03/2013
    III. Les Classes de collections A.ELmagri 78 21/03/2013
    III. Les Classes de collections
    A.ELmagri
    78
    21/03/2013
    Les tableaux statiques (1)  Les tableaux contiennent des éléments, chacun d‟eux étant repéré par son
    Les tableaux statiques (1)
    Les tableaux contiennent des éléments, chacun d‟eux étant repéré par son
    indice.
    En C#, il existe une manière très simple de créer des tableaux «classiques
    », sans faire référence aux classes Collections.
    //Déclaration
    /* déclaration*/
    String[] aStr=new string[5] ;
    Salarie[] sal=new Salarie[5] ;
    aStr[0]=”Ahmed”;
    Salarie[0]=new Salarie(16,4,2, "toto ",8765) ;
    Salarie[1]=new Salarie(8,5,2, "Ali ",6543) ;
    Salarie[2]=new Salarie(32,4,2, " Farid ",2075) ;
    Salarie[3]=new Salarie(20,5,3, "Ahmed ",2165) ;
    Salarie[4]=new Salarie(9,65,2, "Mohamed ",765) ;
    aStr[1]=”Farid”;
    aStr[2]=”Ali”;
    aStr[3]=”Ibrahim”;
    aStr[4]= ”Mohamed”;
    A.ELmagri
    79
    21/03/2013
    Les tableaux statiques (2) Le problème de ce type de tableau réside en deux points :
    Les tableaux statiques (2)
    Le problème de ce type de tableau réside en deux points :
    Tous les éléments du tableau ont le même type.
    Le nombre des éléments du tableau est connu au moment de la
    déclaration.
    Pour afficher tous les éléments d‟un tableau statique tab :
    Ce programme foreach(intVal stocke à chaque in tab){ fois la valeur d‟un élément du tableau tab dans la
    variable intVal , puis Console.WriteLine(intVal) affiche cette dernière. ; }
    Le mot-clef foreach permet de parcourir des objets. Sa syntaxe est :
    foreach (typeDeLelement element in collectionDelements)
    {/* Code utilisant l„element.*/ }
    A.ELmagri
    80
    21/03/2013
    ArrayList (1)  La classe ArrayList: est un tableau dynamique auquel on peut rajouter ou insérer
    ArrayList (1)
    La classe ArrayList: est un tableau dynamique auquel on peut rajouter
    ou insérer des éléments et en supprimer.
    Il faut utiliser le namespace: System.Collections
    Using System.Collections ;
    //Afficher le tableau maListe :
    … ..
    /*declaration d‟un tableau dynamique*/
    foreach (int val in maListe ) {
    Console.WriteLine(val); }
    ArrayList maListe = new ArrayList() ;
    /* Ajouter un element au tableau*/
    maListe.add(1) ;
    // Accès à un élément
    Console.WriteLine(“deuxiéme
    element ”+ maListe [1]);
    maListe.add(80) ;
    /* Supprimer un element au tableau*/
    maListe.remove(1);
    A.ELmagri
    81
    21/03/2013
    ArrayList (2) Quelques méthodes de la classe ArrayList A.ELmagri 82 21/03/2013
    ArrayList (2)
    Quelques méthodes de la classe ArrayList
    A.ELmagri
    82
    21/03/2013
    La classe Hachtable  Un objet de type Hashtable: représente une collection de pairs (Key, value).
    La classe Hachtable
     Un objet de type Hashtable: représente une collection
    de pairs (Key, value).
    La clé est le hashcode : l’identifiant de l’ élément.
    Valeur : c’est la valeur stockée dans l’élément.
    Exemple:
    /* Instancier un objet de type Hashtable */
    Hashtable dict = new Hashtable() ;
    NB : Le dictionnaire
    /* Insérer un élément par add() */
    Hashtable ne trie pas les
    éléments, et pour avoir un
    dict.add(1, « toto ») ;
    dict.add(2, « titi »);
    dictionnaire trié dans l’ordre
    /* Nombre d‟élément du dictionnaire */
    croissant en fonction de la clé de
    ses éléments, on doit utiliser la
    classe SortedList ou lieu de la
    classe Hashtable
    A.ELmagri
    83
    int nbr=dict.Count() ;
    /* Supprimer un élément en fonction de sa clé (hashcode) */
    dict.Remove(clé) ;
    /* vider le dictionnaire par Clear() */
    dict.Clear() ;
    //Parcourir le dictionnaire
    for (int i = 0; i < dict.Count; i++) ou
    foreach(int i in dict.Keys);
    foreach(string s in dict.values);
    21/03/2013
    La classe SortedList (1)  SortedList est un dictionnaire qui garantit que les clés soient rangées
    La classe SortedList (1)
     SortedList est un dictionnaire qui garantit que les clés soient
    rangées de façon ascendante (dans l‟ordre croissant).
    Exemple :
    static void Main(){
    /* Instancier un objet de type SotedList */
    SortedList s =new SortedList() ;
    /* Ajouter des elements dans s */
    s.add(32,"Java");
    s.add(21, "C#");
    s.add(7, "VB.net");
    s.add(49, "C++");
    /* afficher le dictionnaire s */
    For(int i=0 ; i<s.count ; i++){
    Console.WriteLine("clé ="+
    s.GetKey(i) + " , valeur= "+
    s.GetByIndex(i)); }
    A.ELmagri
    84
    21/03/2013
    La classe SortedList (2) Voici quelques méthodes qui permettent de manipuler un dictionnaire de type SortedList.
    La classe SortedList (2)
    Voici quelques méthodes qui permettent de manipuler un
    dictionnaire de type SortedList.
    A.ELmagri
    85
    21/03/2013
    Exemple simple: foreach (string ville in liste) Console.WriteLine("la ville est : static void Main(string[] args) {
    Exemple simple:
    foreach (string ville in liste)
    Console.WriteLine("la ville est :
    static void Main(string[] args)
    {
    "+ville);
    Hashtable hash = new Hashtable();
    /* affichage de sortedList est trie */
    /* Alimenter le dictionnaire hash*/
    foreach (DictionaryEntry ville in sorted)
    hash.Add(3, "Casa");
    hash.Add(2, "Rabat");
    hash.Add(4, "Sale");
    Console.WriteLine("ville key : " +
    ville.Key + "ville value : "
    +ville.Value);
    /*l'affichage de hash n est pas trie */
    SortedList sorted = new SortedList();
    foreach (DictionaryEntry ville in hash)
    /* Alimenter le dictionnaire maListeSorted*/
    sorted.Add(1, "Casa");
    sorted.Add(2, "Rabat");
    sorted.Add(3, "Sale");
    Console.WriteLine("ville key (hash) :
    " + ville.Key + "Ville value (hash) :"
    + ville.Value);
    Console.ReadKey();
    ArrayList liste = new ArrayList();
    /* Alimenter la liste */
    liste.Add("Casa"); liste.Add("Rabat");
    }
    liste.Add("Sale");
    A.ELmagri
    86
    21/03/2013

    Les collections génériques:

    List<T> HashSet<T> LinkedList<T> Dictionary<TKey,TValue> SortedList <TKey,TValue>

    87
    87

    A.ELmagri

    21/03/2013

    List<T>

    • La classe System.Collections.Generic.List<T> permet d'implémenter des collections d'objets de type T dont la taille varie au cours de l'exécution du programme.

    • Un objet de type List<T> se manipule presque comme un tableau. Ainsi l'élément i d'une liste Liste est-il noté Liste[i].

    • Pour un objet List<T> ou T est une classe, la liste stocke là encore les références des objets de type T.

    • 8 A.ELmagri

    21/03/2013

    List<T> using System.Collections; … // parcourir la liste 1 ere méthode public static void Main(string[] args)
    List<T>
    using System.Collections;
    // parcourir la liste 1 ere méthode
    public static void Main(string[] args)
    {
    // creer 4 personnes
    personne
    p1
    =
    new
    personne("nom1",
    "prenom1",
    23,
    for (int i = 0; i < list.Count; i++)
    {
    Console.WriteLine(list[i].ToString());
    }
    "Ville1");
    personne
    p2
    =
    new
    personne("nom2",
    "prenom2",
    24,
    // parcourir la liste 2eme méthode
    "Ville2");
    personne
    p3
    =
    new
    personne("nom3",
    "prenom3",
    25,
    foreach (personne
    {
    p
    in
    list)
    "Ville3");
    personne
    p4
    =
    new
    personne("nom4",
    "prenom4",
    30,
    Console.WriteLine(p.ToString());
    "Ville4");
    }
    // creer la liste
    Console.ReadLine();
    List<personne>
    list
    =
    new
    List<personne>();
    }
    // remplir la liste
    list.Add(p1);
    list.Add(p2);
    list.Add(p3);
    list.Add(p4);
    21/03/2013
    A.ELmagri
    8
    9
    HashSet<T> using System.Collections; … // parcourir la liste 2eme méthode public static void Main(string[] args) {
    HashSet<T>
    using System.Collections;
    // parcourir la liste 2eme méthode
    public static void Main(string[] args)
    {
    p
    in
    list)
    // creer 4 personnes
    personne p1 = new personne("nom1", "prenom1", 23, "Ville1");
    personne p2 = new personne("nom2", "prenom2", 24, "Ville2");
    personne p3 = new personne("nom3", "prenom3", 25, "Ville3");
    personne p4 = new personne("nom4", "prenom4", 30, "Ville4");
    foreach (personne
    {
    Console.WriteLine(p.ToString());
    }
    Console.ReadLine();
    }
    // creer la liste
    HashSet <personne>
    list = new
    Hashset <personne>();
    // remplir la liste
    list.Add(p1);
    list.Add(p2);
    list.Add(p3);
    list.Add(p4);
    21/03/2013
    A.ELmagri
    9
    0
    LinkedList<T> using System.Collections; … public static void Main(string[] args) { // parcourir la liste p in
    LinkedList<T>
    using System.Collections;
    public static void Main(string[] args)
    {
    // parcourir la liste
    p
    in
    list)
    // creer 4 personnes
    personne p1 = new personne("nom1", "prenom1", 23, "Ville1");
    personne p2 = new personne("nom2", "prenom2", 24, "Ville2");
    personne p3 = new personne("nom3", "prenom3", 25, "Ville3");
    personne p4 = new personne("nom4", "prenom4", 30, "Ville4");
    foreach (personne
    {
    Console.WriteLine(p.ToString());
    }
    Console.ReadLine();
    }
    // creer la liste
    LinkedList <personne>
    list
    new
    =
    LinkedList <personne>();
    // remplir la liste
    list.AddLast(p1);
    list.AddLast(p2);
    list.AddLast(p3);
    list.AddLast(p4);
    21/03/2013
    A.ELmagri
    9
    1
    Dictionary<TKey,TValue> using System.Collections; … public static void Main(string[] args) { // pour afficher les clés et
    Dictionary<TKey,TValue>
    using System.Collections;
    public static void Main(string[] args)
    {
    // pour afficher les clés et les valeurs
    foreach (String
    {
    s
    in
    dic.Keys)
    Console.WriteLine("la clé est : "
    // creer 4 personnes
    personne p1 = new personne("nom1", "prenom1", 23, "Ville1");
    personne p2 = new personne("nom2", "prenom2", 24, "Ville2");
    personne p3 = new personne("nom3", "prenom3", 25, "Ville3");
    personne p4 = new personne("nom4", "prenom4", 30, "Ville4");
    +s
    +" la valeur est :"+
    dic[s].ToString()());
    }
    // creer le dictionnaire
    Dictionary<string, personne> dic = new
    // pour afficher les valeurs
    foreach (personne p in dic.Values)
    {
    Dictionary<String, personne>();
    Console.WriteLine(p.ToString()());
    }
    // remplir
    le dictionnaire
    dic.Add(p1.Nom,p1);
    dic.Add(p2.Nom, p2);
    dic.Add(p3.Nom, p3);
    dic.Add(p4.Nom, p4);
    21/03/2013
    A.ELmagri
    9
    2
    SortedList <TKey,TValue> using System.Collections; … // pour afficher les clés foreach (String s in dic.Keys) public
    SortedList <TKey,TValue>
    using System.Collections;
    // pour afficher les clés
    foreach (String
    s
    in
    dic.Keys)
    public static void Main(string[] args)
    {
    // creer 4 personnes
    personne p1 = new personne("nom1", "prenom1", 23, "Ville1");
    personne p2 = new personne("nom2", "prenom2", 24, "Ville2");
    personne p3 = new personne("nom3", "prenom3", 25, "Ville3");
    personne p4 = new personne("nom4", "prenom4", 30, "Ville4");
    {
    Console.WriteLine("la clé est : " +s) ;
    }
    // pour afficher les valeurs
    foreach (personne p in dic.Values)
    {
    // creer le Hashtable
    Console.WriteLine(p.ToString());
    }
    SortedList<string, personne> dic = new
    SortedList<string, personne> ();
    // remplir
    le dictionnaire
    dic.Add(p1.Nom,p1);
    dic.Add(p2.Nom, p2);
    dic.Add(p3.Nom, p3);
    dic.Add(p4.Nom, p4);
    21/03/2013
    A.ELmagri
    9
    3

    Exercice

    • Créer la classe personne qui contient la code, le nom , le prenom , et l‟age.

    • Créer les constructeurs et les propriétés

    • Ecrire la methode getInfo();

    • Créer une liste qui stocke les personnes

    • Créer la méthode ajouter(personne) qui ajoute une personne à la liste.

    • Créer la méthode modifier_nom (code, nom) qui modifie le nom d‟une personne.

    • Créer la méthode supprimer (nom) qui supprime une personne de la liste.

    • Créer la méthode chercher(code) qui cherche une personne connaissant son code.

    • Créer la méthode affichage() qui liste toutes les personnes.

    • Créer la méthode compter() qui return le nombre des personnes stockées.

    • créer une fonction categories() qui affiche la catégorie de chaque personne ( « p » si son age <18 , « j » si son age est entre 19

    est 35 , et « g » si son age > 35.

    • Ecrire un menu pour appeler ces fonctions.

    • 9 A.ELmagri

    21/03/2013

    Solution class personne { public int Age { int code; String nom; String prenom; int age;
    Solution
    class personne
    {
    public int Age
    {
    int code;
    String nom;
    String prenom;
    int age;
    get { return age; }
    set { age = value; }
    }
    // les propriétés
    public int Code
    {
    public String Nom
    {
    get { return nom; }
    set { nom = value; }
    get { return code; }
    set { code = value; }
    }
    }
    // Constructeurs
    public String Prenom
    {
    get { return prenom; }
    set { prenom = value; }
    public personne() { }
    public personne(String nom, String prenom, int
    age, int code)
    {
    }
    this.nom = nom;
    this.prenom = prenom;
    this.age = age;
    this.code = code;
    21/03/2013
    A.ELmagri
    9
    }
    5
    public String getinfo() { return " Je m’appelle " + nom + " -- " +
    public String getinfo()
    { return
    " Je m’appelle
    " + nom + " -- " + Prenom + " J’ai
    " + Age
    + " an
    j'ai le code " + code;
    }
    // déclaration de la liste des personne
    static List<personne> lis = new List<personne>();
    static public void ajouter(personne p)
    lis.Add(p);
    {
    }
    static public void modifier_nom(int c ,String n)
    {
    foreach (personne p in lis)
    {
    if (p.code==c)
    {
    p.nom = n;
    }
    }
    }
    21/03/2013
    A.ELmagri
    9
    6

    static public Personne chercher(int code) {Persone pr = null;

    foreach (personne p in lis) { if (p.code == code) {

    pr = p; break;

    } } return pr;

    } static public void supprimer( String n) {

    foreach (personne p in lis) { if (p.nom.Equals(n)) {

    }

    }

    lis.Remove(p);

    break;

    }

    • 9 A.ELmagri

    21/03/2013

    static public void affichage()

    {

     

    foreach (personne p in lis)

    {

    Console.WriteLine(p.getinfo());

    }

    }

    static public int compter()

    {

     

    return lis.Count;

    }

    static public void categories()

    {

     

    foreach (personne p in lis)

    {

     

    if(p.age<= 18)

    Console.WriteLine("la catégorie de "+p.nom+ " est :P" );

    if (p.age >= 19 && p.age<=35)

    Console.WriteLine("la catégorie de " + p.nom + " est :J");

    if (p.age >= 36)

    Console.WriteLine("la catégorie de " + p.nom + " est :G");

     

    }

    A.ELmagri

    }

     

    }

    public class test

    {

    public static void Main(string[] args)

    {

    int c;

    do

    {

    Console.WriteLine("1- pour ajouter");

    Console.WriteLine("2- pour afficher");

    Console.WriteLine("3- pour modifier");

    Console.WriteLine("4- pour supprimer");

    Console.WriteLine("5- pour rechercher");

    Console.WriteLine("6- pour afficher la gategorie");

    Console.WriteLine("7- pour compter");

    Console.WriteLine("8- pour quitter");

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

    • 9 A.ELmagri

    switch (c)

    {

    case 1:

     

    {

     

    Console.WriteLine("donner le nom , le prenom, l'age

    et le code");

     

    String n = Console.ReadLine();

    String pr = Console.ReadLine();

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

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

    personne p = new personne(n, pr, a, co);

    personne.ajouter(p);

    break;

     

    }

    case 2: personne.affichage(); break;

    case 3:

    {

     

    Console.WriteLine("entrer le code à modifier");

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

    Console.WriteLine("donner le nouveau nom");

    String n = Console.ReadLine();

    personne.modifier_nom(co, n); break;

    }

    • 1 A.ELmagri

    21/03/2013

    case 4:

    {

     

    Console.WriteLine("entrer le nom à supprimer");

    String n = Console.ReadLine();

    personne.supprimer(n); break;

    }

    case 5:

    {

     

    Console.WriteLine("entrer le code à chercher");

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

    personne.chercher(n); break;

    }

    case 6: personne.categories(); break;

    case 7: Console.WriteLine("le nombre des personnes est :" +

    personne.compter()); break;

    }

    } while (c != 8);

    Console.ReadLine();

    }

    }

    }

    A.ELmagri

    V. Gestion des Exceptions A.ELmagri 102 21/03/2013
    V. Gestion des Exceptions
    A.ELmagri
    102
    21/03/2013
    Problème Essayons dans ce premier exemple de voir l'effet des erreurs courantes sur le fonctionnement du
    Problème
    Essayons dans ce premier exemple de voir l'effet des erreurs courantes sur le
    fonctionnement du programme suivant:
    class Program
    {
    static void Main(string[] args)
    {
    int a=10, b=0, c;
    Console.WriteLine("Avant division");
    c = a/b;
    Console.WriteLine("Après division, c
    vaut " + c);
    }
    }
    21/03/2013
    A.ELmagri
    1
    0
    Problème Essayons dans ce premier exemple de voir l'effet des erreurs courantes sur le fonctionnement du
    Problème
    Essayons dans ce premier exemple de voir l'effet des erreurs courantes sur le
    fonctionnement du programme
    21/03/2013
    A.ELmagri
    1
    0
    Une première solution Pour ne pas avoir de problème il suffit de tester les valeurs entrées
    Une première solution
    Pour ne pas avoir de problème il suffit de tester les valeurs entrées :
    public class Program
    {
    public static void Main(string[] args)
    {
    int a = 10, b = 0, c;
    Console.WriteLine("Avant division");
    if (b == 0)
    Console.WriteLine("Division par zéro");
    else
    {
    c = a / b;
    Console.WriteLine("Après division, c vaut " + c);
    }
    Console.ReadLine();
    }
    }
    Le problème posé par cette solution est une augmentation des lignes de code et une
    complication du programme.
    De plus, si l'on oublie de tester une valeur, il y aura arrêt brutal du programme (bugs de
    programmes). A.ELmagri
    21/03/2013
    1
    0
    Une 2éme Solution : Try .. Catch static void Main(string[] args) { try { int a
    Une 2éme Solution : Try
    ..
    Catch
    static void Main(string[] args)
    {
    try
    {
    int a = 10, b = 0, c;
    Console.WriteLine("Avant division");
    c = a / b;
    Console.WriteLine("Après division, c vaut " + c);
    }
    catch (DivideByZeroException
    {
    ex)
    Console.WriteLine(ex.Message);
    }
    }
    21/03/2013
    A.ELmagri
    1
    0
    Alors, c’est quoi une exception? Lorsqu'un problème survient au cours de l'exécution d'un programme C#, une
    Alors, c’est quoi une exception?
    Lorsqu'un problème survient au cours de l'exécution d'un
    programme C#, une exception se produit.
    Les exceptions interrompent le flux du programme en cours et, si
    rien n'est fait, le programme cesse tout simplement de s'exécuter.
    Une exception constitue souvent un moyen pratique de quitter une
    section de code qui ne s'applique plus, ou de signaler qu'une
    méthode a échoué ou ne respecte pas certaines règles de gestion.
    Exemples: affecter une valeur int à un string, un nombre divisé
    par zéro, ou entrée inattendue (un utilisateur sélectionne un
    fichier inexistant).
    A.ELmagri
    107
    21/03/2013
    Capture d’une exception :  C# fournit plusieurs mots clés: try, catch et finally qui permettent
    Capture d’une exception :
    C# fournit plusieurs mots clés: try, catch et finally qui permettent
    aux programmes de détecter les exceptions, de les gérer et de
    poursuivre l'exécution.
    Try {//code qui peut générer des exception}
    Catch ( TypeException1 e){//code exécuté si une Exception1 est détectée}
    Catch ( TypeException2 e){//code exécuté si une Exception2 est détectée}
    Finally {//code exécuté à la fin tout le temps }
    Le bloc try: contient le code qui effectue les opérations normales du
    programme, mais qui risque de rencontrer des erreurs plus ou moins
    inatendues.
    Le bloc catch: contient le code de traitement des erreurs qui sont
    apparues lors de l'exécution du programme.
    Le bloc finally: contient le code que vous voulez impérativement exécuter
    après le bloc try ou catch. Ce bloc est exécuté qu'une exceptions soit levée
    ou pas !
    A.ELmagri
    108
    21/03/2013

    Comment cela fonctionne ?

    Le schéma de fonctionnement est le suivant :

    1- Le flux d'exécution entre dans le bloc try 2- S'il n'y a pas d'erreur, on passe directement à l'étape 4 3- En cas d'erreur, l'exécution se poursuit dans le bloc catch où les erreurs sont gérées 4- Le bloc finally est exécuté

    109
    109

    A.ELmagri

    21/03/2013

    Exemple : Try .. Catch Dans cet exemple, un calcul crée une exception de division par
    Exemple : Try
    ..
    Catch
    Dans cet exemple, un calcul crée une exception de division par zéro, qui est
    ensuite interceptée. Sans les blocs try et catch, ce programme échouerait.
    class ProgramTryCatch {
    static void Main() {
    int x=0, y=0;
    try { /* bloc qui genere l‟exception */
    x = 10 / y; }
    /*bloc qui gere l exception */
    catch (System.DivideByZeroException) {
    System.Console.WriteLine(« impossible de
    diviser par 0"); }
    } /* le bloc finally est facultatif */
    }
    A.ELmagri
    110
    21/03/2013

    Levée d’une exception

    Alors comment cela fonctionne-t-il ? Comment le runtime

    sait-il qu'il doit aller dans un bloc catch (ou pas) en cas

    d'erreur ?

    • Lorsqu'une erreur est détectée, le code lève une exception : avec throw new Exception(), Et c'est à ce moment là que l'exécution normale du

    bloc try s'arrête pour passer dans le bloc catch approprié : catch (Exception e) {… }

    111
    111

    A.ELmagri

    21/03/2013

    Exemple : de mot clé throw class ProgramThrow { /* methode faire */ static void Faire(int
    Exemple : de mot clé throw
    class ProgramThrow {
    /* methode faire */
    static void Faire(int x) {
    if (x > 5) {
    throw new ArgumentOutOfRangeException("X is too large");
    } }
    /* methode main*/
    static void Main() {
    try { Faire(10); }
    catch (ArgumentOutOfRangeException ex) {
    System.Console.WriteLine(ex.Message); }
    }
    }
    le bloc finally a été ommis : celui est en effet facultatif.
    A.ELmagri
    112
    21/03/2013
    Quelques classes d'exceptions Le Framework .Net offre beaucoup de classes gérant les exceptions dont : 
    Quelques classes d'exceptions
    Le Framework .Net offre beaucoup de classes gérant les exceptions
    dont :
    System.Exception
    System.SystemException
    System.ArgumentException
    System.ArgumentNullException
    System.OutOfRangeException
    System.IO.FileNotFoundException
    System.ApplicationException
    Les relations d’héritage entres les différentes
    Classes exceptions
    A.ELmagri
    113
    21/03/2013
    Exemple: using System; public class Program { nombre = Int32.Parse(chaine); quit = true; } public static
    Exemple:
    using System;
    public class Program {
    nombre = Int32.Parse(chaine); quit
    = true; }
    public static void Main() {
    int nombre = 0;
    bool quit = false;
    while (!quit) {
    /* ici pour chaque type d’ exception
    Console.Write("Entrez un nombre : ");
    string chaine = Console.ReadLine();
    try
    { /* Code à risque : il se peut
    on a fait un catch*/
    catch (ArgumentExceptio argEx) {
    Console.WriteLine(argEx.Message
    ); }
    catch (FormatException formEx) {
    Console.WriteLine(formEx.Messa
    que l'utilisateur n'entre pas un
    ge); }
    nombre , que ce nombre ne soit pas
    un entier compris entre - 2 147 438
    648 et + 2 147 438 647 */
    catch (OverflowException overEx) {
    Console.WriteLine(overEx.Messag
    e); } } } }
    A.ELmagri
    114
    21/03/2013
    Créer sa propre exception Et bien oui, c‟est possible!!  Prenons la classe Personne déjà créé.
    Créer sa propre exception
    Et bien oui, c‟est possible!!
    Prenons la classe Personne déjà créé.
    Imposons la condition: Si l‟utilisateur saisit une valeur d‟âge <= 18 ou >=
    60 , le système doit levé une exception
    La solution consiste à créer une classe AgeException.
    public class AgeException : Exception
    {
    public AgeException(string msg): base(msg)
    {
    }
    }
    21/03/2013
    A.ELmagri
    1
    1
    Utiliser l’exception crée //Dans le constructeur de la classe Personne public Personne (String nom, int age)
    Utiliser l’exception crée
    //Dans le constructeur de la classe Personne
    public Personne (String nom, int age)
    {
    //lever une exception si l‟age n est pas valide
    if (age < 18 || age > 60) throw new AgeException("l'age doit etre entre 18 et
    60");
    else
    {
    this.nom = nom;
    this.age =
    age;
    }
    }
    21/03/2013
    A.ELmagri
    1
    1
    Utiliser l’exception crée // Dans le setter public int SetAge(int value) { //lever l exception si
    Utiliser l’exception crée
    // Dans le setter
    public int SetAge(int value)
    {
    //lever l exception si lage n est pa valide
    if (value < 18 || value > 60) throw new AgeException("l'age doit etre
    entre 18 et 60");
    else
    {
    age = value;
    }
    }
    }
    21/03/2013
    A.ELmagri
    1
    1
    La Sérialisation d’objet A.ELmagri 118 21/03/2013
    La Sérialisation d’objet
    A.ELmagri
    118
    21/03/2013

    La sérialisation d’objet

    • La sérialisation (en anglais serialization) est un procédé qui consiste à sauver l'état d'un objet sur le disque ou le réseau plutôt que de le garder en mémoire.

    • On peut dire que l'objet est "aplatit" pour pouvoir le convertir en un flux de données, que l'on peut transmettre à un autre objet

    via la désérialisation

    • La sérialisation et la désérialisation se fait via des fichiers (binaire, XML,…).

    • 1 A.ELmagri

    21/03/2013

    Sérialiser un objet (XML) On crée la classe personne , pour pouvoir stocker l‟objet dans un
    Sérialiser un objet (XML)
    On crée
    la classe personne , pour pouvoir stocker l‟objet dans un fichier il faut que celui-ci soi
    sérializable.
    using System.IO;
    using System.Xml.Serialization;
    namespace test
    {
    [Serializable]
    public class personne
    {
    public string Prenom
    {
    get { return prenom; }
    set { prenom = value; }
    public personne() { }
    string nom;
    public string Nom
    {
    }
    string telephone;
    public string Telephone
    {
    get { return nom; }
    set { nom = value; }
    get { return telephone; }
    set { telephone = value; }
    }
    string prenom;
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser un objet // list des personne public static List<personne> carnet = new List<personne>(); // serialiser
    Sérialiser un objet
    // list des personne
    public static List<personne> carnet = new List<personne>();
    // serialiser l'objet carnet :
    public static void SauvegarderXML(string nomfichier)
    {
    FileStream f = File.Open(nomfichier, FileMode.OpenOrCreate);
    XmlSerializer s = new XmlSerializer(typeof(List<personne>));
    s.Serialize(f, carnet);
    f.Close();
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser un objet // déserialiser l'objet carnet : public static List<personne> ChargerXML(string nomfichier) { FileStream f
    Sérialiser un objet
    // déserialiser l'objet carnet :
    public static List<personne> ChargerXML(string nomfichier)
    {
    FileStream f = File.Open(nomfichier, FileMode.Open);
    XmlSerializer s = new XmlSerializer(typeof(List<personne>));
    List<personne> lis = (List<personne>)s.Deserialize(f);
    f.Close();
    return lis;
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser un objet  public static void Main(string[] args) { personne p = new personne(); p.Nom
    Sérialiser un objet
    public static void Main(string[] args)
    { personne p = new personne();
    p.Nom = "aa";
    p.Prenom = "fff";
    p.Telephone = "12356";
    // ajouter la personne à la liste
    personne.carnet.Add(p);
    // sauvgarder dans le fichier nommé test
    personne.SauvegarderXML("test");
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser un objet  Résultat 21/03/2013 A.ELmagri 1 2
    Sérialiser un objet
    Résultat
    21/03/2013
    A.ELmagri
    1
    2
    Désérialiser un objet public static void Main(string[] args) { // creer une liste et la remplir
    Désérialiser un objet
    public static void Main(string[] args)
    {
    // creer une liste et la remplir à partir du fichier
    List<personne> k = personne.ChargerXML("test");
    // parcourir la liste
    foreach (personne s in k)
    {
    System.Console.WriteLine(s.Nom + " " +
    s.Prenom + " " + s.Telephone);
    }
    21/03/2013
    A.ELmagri
    1
    2
    DéSérialiser un objet  Résultat 21/03/2013 A.ELmagri 1 2
    DéSérialiser un objet
    Résultat
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser un objet (BIN) On travaille avec la même classe Personne déjà créé: Using System.IO; Using
    Sérialiser un objet (BIN)
    On travaille avec la même classe Personne déjà créé:
    Using System.IO;
    Using System.Xml.Serialization;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters.Binary;
    namespace test
    {
    [Serializable]
    public class personne
    {
    public string Prenom
    {
    get { return prenom; }
    set { prenom = value; }
    public personne() { }
    string nom;
    public string Nom
    {
    }
    string telephone;
    public string Telephone
    {
    get { return nom; }
    set { nom = value; }
    get { return telephone; }
    set { telephone = value; }
    }
    string prenom;
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser et déserialiser un objet (BIN)  // serialiser l'objet carnet en binaire : public static
    Sérialiser et déserialiser un objet (BIN)
    // serialiser l'objet carnet en binaire :
    public static void SauvegarderBin(string nomfichier)
    {
    FileStream f = File.Open(nomfichier, FileMode.OpenOrCreate);
    IFormatter s = new BinaryFormatter();
    s.Serialize(f, carnet);
    f.Close();
    }
    // déserialiser l'objet carnet en binaire :
    public static List<personne> chargerBin(string nomfichier)
    {
    FileStream f = File.Open(nomfichier, FileMode.Open);
    IFormatter s = new BinaryFormatter();
    List<personne> lo = (List<personne>)s.Deserialize(f);
    f.Close();
    return lo;
    }
    21/03/2013
    A.ELmagri
    1
    2
    Sérialiser et déserialiser un objet (BIN) public static void Main(string[] args) {  personne p =
    Sérialiser et déserialiser un objet (BIN)
    public static void Main(string[] args)
    {
    personne p = new personne();
    p.Nom = "aa";
    p.Prenom = "fff";
    p.Telephone = "12356";
    // Ajouter la personne à la liste
    personne.carnet.Add(p);
    // Sauvgarder dans le fichier nommé test
    personne.SauvegarderBin("test");
    // Creer une liste et la remplir à partir du fichier
    List<personne> k = personne.chargerBin("test");
    // Parcourir la liste
    foreach (personne s in k)
    {
    System.Console.WriteLine(s.Nom + " " + s.Prenom + " " + s.Telephone);
    }
    21/03/2013
    A.ELmagri
    1
    2
    FI N A.ELmagri 130 21/03/2013
    FI N
    A.ELmagri
    130
    21/03/2013