Sie sind auf Seite 1von 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. Il
s'agit d'une approche logique, cohrente et intuitive de la programmation.
Avantage : la factorisation des comportements (c'est dire que pour crer une
fonction d'une application, on peut utiliser un autre ensemble de fonctions (qui sont
donc dj crites)).
Dfauts: une maintenance complexe en cas d'volution de lapplication (une simple
mise jour de l'application un point donn peut impacter en cascade sur d'autres
fonctions de lapplication).
Ainsi; L'approche fonctionnelle n'est pas adapte au dveloppement d'applications
qui voluent sans cesse et dont la complexit croit continuellement (plusieurs
dizaines 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 en
un certain nombre d'objets qui ont des caractristiques communes et qui
communiquent entre eux afin de raliser une ou plusieurs tches.
Le but de la POO est de rduire la difficult de la tche accomplir en la divisant
en 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 homognes
dans un seul module)
- Minimiser le cout
- Minimiser le temps de ralisation
- la rutilisabilit
- lextensibilit
- L'approche objet a t invente pour faciliter l'volution d'applications complexes.
4- Langages Orient Objet
Simula a t le premier langage de programmation implmenter le concept de
classes 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 t mis au point (Object Pascal, C++,
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
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 (ses
attributs) et des mthodes) communes des objets.
La classe : elle dfini un "moule", un "modle", un plan selon lequel seront conus
les 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 classe
Un objet informatique, au sens de lorient objet, est une unit atomique
possdant :
- une identit ;
- un tat, dfini par un ensemble de donnes (attributs, ou donnes membres) ;
- un comportement, dfini par un ensemble de fonctions (mthodes, ou fonctions
membres).
Ainsi: Objet = identit + tat (attributs) + comportement (mthodes)
Un Objet peut correspondre : objet concret du monde rel, ayant une ralit
physique, ou a un concept abstrait;
6-Instanciation
La Classe par elle-mme ne contient pas les valeurs des donnes : cest un type de
donnes abstrait.
La cration dun objet en tant quexemplaire concret (contenant des donnes) dune
classe 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
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 un
objet.
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 programmation
oriente 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,
hritage et polymorphisme.
8-1 L'encapsulation :
L'encapsulation est un mcanisme qui consiste rassembler les donnes et les
mthodes au sein d'une classe en cachant l'implmentation de l'objet.
Le principe dencapsulation permet aux objets de se prsenter sous deux vues
possibles :
- la vue externe : celle utilise par le programmeur utilisateur de la classe. Elle
dfinit les services accessibles aux utilisateurs de lobjet et ne fournit aucun accs
aux mcanismes internes de lobjet (donnes et mthodes) ;
- la vue interne : celle du programmeur 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 de
dtail sur la manire dont lobjet est rellement constitu.
Lencapsulation (des attributs et des mthodes) permet de dissimuler lutilisateur
dun objet des dtails dimplmentation susceptibles dvoluer avec le temps, ou ne
prsentant pas dintrt pour lutilisation externe de lobjet.
Linterface propose par la vue externe est la seule partie de lobjet qui ne DOIT pas
tre modifi dans le temps, tout en proposant suffisamment dinteraction avec
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
lobjet.
Intrts de lencapsulation :
1- facilite lvolution dune application
on peut modifier des dtails internes dune classes (nombre, nature et noms des
attributs, dtails des traitements) sans modifier son interface.
2- favorise lintgrit des donnes : elle permet dinterdire laccs direct aux
dtails internes.
une classe peut compltement modifier la manire dont elle modlise et stocke ses
donnes, 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 voiture
est 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 proprits
transmissibles aux classes drives (classe fille, enfant);
La classe drive possde ses propres attributs et mthodes, que la classe de base ne
connat pas ;
La classe drive peut redfinir (amliorer, spcialiser, ....) les mthodes transmises
par 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 manire
diffrente si ncessaire tout en gardant le mme nom que la mthode hrite
Lors 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
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 y
accder.C'est une notion fondamentale pour le concept objet dencapsulation. On a 3
types de visibilit:
1- + ou public : tout le monde peut y accder
2- # 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 (services
offerts)
- Des oprations peuvent aussi tre prives si elles ne participent quau
fonctionnement interne de la classe
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
Exemple :
class Personne
{
//Attributs
Private int age ;
Private string nom ;
Private string prenom ;
//Mthodes
Public 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 dune
classe donne, il faut:
1- dclarer une rfrence lobjet et
2- linstancier
Exemple :
Personne p; // rfrence
p = 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 la
classe, et qui peut prendre des paramtres
Si une classe n'a aucun constructeur, elle en a un par dfaut qui est le constructeur
sans paramtres.Une classe peut comporter plusieurs constructeurs
Exemple :
//constructeur par dfaut
Public Personne()
{ }
//constructeur d'initialisation
Public Personne(String pr,String nom, int age)
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
{
this.prenom = pr ;
this.nom = nom ;
this.age = age ;
}
- Le constructeur de recopie permet de recopier les proprits d'un objet existant
vers 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 des
attributs
- Les Setters(Modifieurs) : sont des mthodes qui permettent de modifier les
attributs .
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
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 dire
que les attributs de chaque objet, instanci partir de la mme classe, peuvent avoir
des valeurs diffrentes ( numero, nom, etc ).
Problme :
Supposons que dans la classe Stagiaire, il soit ncessaire de disposer d'un
compteur
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 pour
toutes les instances d'une mme classe. Pour dclarer un tel attribut, on utilise le
mot-cl Static.
Exemple: Public Static int compteur= 0
La proprit de classe compteur, initialise 0 lors de sa dclaration, sera
incrmente de 1 dans tous les constructeurs dvelopps pour la classe. Sa valeur
sera le nombre d'instances valides un instant donn.
Dfinition : Une variable de classe est accessible comme une variable
d'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
{
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 donne
de cette classe, mais plutt la classe elle-mme.
Syntaxe : Une mthode de classe est dclare par le mot-cl Static.
Exemple: La mthode GetCompteur() qui permet d obtenir le nombre d'instances de
classe 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 objets
de la mme
Classe.
Une mthode de classe (prcde du mot clef static) ne peut appeler (invoquer) que
des
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 une
personne. il a aussi un numro d'inscription et une moyenne. Donc la classe
stagiaire hrite de la classe Personne.
La classe Personne est la classe mre. La classe stagiaire est une classe fille de la
classe personne
Syntaxe :
En C# , pour indiquer la drivation (hritage) partir d'une autre classe,on utilise le
symbole deux points ':'
Dclaration : class ClasseFille : ClasseMere { }
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
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 : Personne
Lhritage vite la duplication et facilite la rutilisation. Une classe fille peut
dfinir 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 ses
classes filles)
2-Cration d'une classe fille
- Dfinition des attributs :
On dclare juste les attributs propres la classe fille
Exemple : Class Stagiaire:Personne {
//Attributs
Private int muninscrip ;
Private float moyenne ;
}
-Dfinition des constructeurs
* Constructeur par dfaut : On utilise la mme syntaxe
public 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 des
attributs 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
les mthodes hrites ou utiliser juste les mthodes de la classe mre
- Redfinition des mthodes dans la classe Fille : Une classe fille peut redfinir une
mthode hrite.
Exemple : La classe salari et la classe contractuel
La classe mre a une mthode description() qui permet de retourner la description
d'un salari . La classe fille, Contractuel, redfinit cette mthode de la facon
suivante :
public string description()
{ Return base. description() + "" + this.getdateContrat + " " + this.gettype ; }
Le mot clef base est utilis pour accder tous les membres visibles de la classe
mre 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 si
elle est cre avec le constructeur de la classe Stagiaire.
le compilateur se base sur la dfinition stricte de q et fait ds lors excuter
afficheInfo de la classe Personne . Le compilateur na pas tenu compte du vritable
type de q qui est stagiaire .
Pour tenir compte du vritable type de q au moment dexcuter q.afficheInfo() , il
faut :
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: Override Indique que cette mthode substitue une autre de
mme nom dans une classe de base. Le nombre et les types de donnes des
arguments doivent correspondre exactement ceux de la mthode de la classe de
base.
Dans la Classe mre:Virtual Indique que cette mthode peut tre substitue par
une autre de mme nom dans une classe drive. Overridable est le paramtre par
dfaut.
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
- Hritage Successif:
Une classe peut hriter d'une classe qui en hrite d'une autre. Prenons l'exemple
suivant : C hrite de B qui hrite de A, les membres sont hrits sils sont
Overridable.
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 cl sealed.
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 abstraite
si elle a au moins une mthode abstraite .
Une mthode abstraite est une mthode qui na pas de corps (traitement) ,on dfinit
juste 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
{ 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 qui
implmentent 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
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 facult dune classe prendre plusieurs formes
Le polymorphisme est la possibilit de rfrencer un objet de la classe drive avec
une 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 possibilit de considrer des instances de classes diffrentes d'un mme
point de vue.
3. Offrir la possibilit d'envoyer des rfrences de mme type un mme message et
d'obtenir des comportements diffrents (c'est--dire ceux des objets rfrencs et non
ceux 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 des
fonctionnalits 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 possibilit
de dfinir plusieurs mthodes de mme nom mais
possdant 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, elle
hrite des mthodes. On peut redfinir ou substituer une mthode de la classe mre
par une mthode de mme nom dans la classe fille. Il est alors possible d'appeler la
mthode d'un objet sans se soucier de son type intrinsque: il s'agit du
polymorphisme d'hritage.
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
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 se
proccuper de la taille de la collection, ni o se trouve l'lment. Le nombre
d'lment n'est pas dfini au dpart. Les lments dune collection sont reprs
grce un indice ou avec une cl unique.
1-ArrayList
La ArrayList est une liste (les lments sont reprs par un indice) o on peut
mettre des objets : chanes, nombres, etc. Rien n'empche que le premier lment
soit 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 :
Syntaxe de 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 pass en paramtre.
Clear() vide la liste
Contains(objet) retourne True si la liste contient lobjet pass en 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
- 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 est
associe. Il peut tre considr comme un pointeur mobile vers un lment
quelconque 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'il
est dj aprs 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) qui
comporte des paires cl-valeur. Ces couples sont de type Objet-Objet.
Comme toute collection, une hashTable est initialement vide.
La cl toujours unique (c.--d. deux lments de la HashTable ne peuvent avoir la
mme cl).
Elle permet de retrouver la valeur et ne doit pas tre vide.
La classe Hashtable permet d'implmenter un dictionnaire. On peut voir un
dictionnaire comme un tableau deux colonnes :
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI

- 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#ains(e)(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
- Lnumrateur :
IDictionaryEnumerator e= myHT.GetEnumerator() ;
While (e.MoveNext())
{ 'Afficher cl et 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 erreur
d'excution.
En C#, L'exception est une classe, qui si une erreur d'excution se produit, va
gnrer 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 exceptions
que la routine pourrait provoquer (erreurs anticipes), aux exceptions inattendues
que 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 <18
2-Le bloc Try catch
L'ide de base, pour grer les exceptions, est d'intercepter(cacher) l'objet Exception
qui sera cr en cas d'erreur, et de dire au systme ce qu'il doit faire dans ce cas.
Cela s'effectue au travers d'un bloc Try ... Catch ..., dont la structure la plus simple
est la suivante :
Try
{
instructions qui peuvent de provoquer une erreur
}
Catch ( TypedException variable)
{
instructions excuter en cas d'erreur
}
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
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.
Inde,2u#2+Ran1eE,&ep#ion Indi&e en3de4ors d%un #ableau
Ari#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 Finally
On peut ajouter la structure try catch un bloc Finally, qui indique des
instructions excuter quel qu'il soit le cas pass, qu'une erreur soit survenue ou
non :
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 excut aprs l'excution complte du bloc Try,
aprs l'excution du bloc Catch, ou aprs l'excution de toutes instructions Return
dans les blocs Try ou Catch. Tout code qui a besoin d'tre excut avant de quitter la
routine doit tre ajout au 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-Lever une exception:Throw
L'instruction throw permet de gnrer une exception. Pour l'utiliser, il faut lui
fournir 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 fichiers
La manipulation de fichiers peut tre utile dans la ralisation d'applications .Net, il
est trs frquent d'avoir besoin de stocker des informations dans un fichier.
le Framework. Net possde toutes les classes ncessaires la ralisation
d'oprations de bases voir mme dautres oprations plus complexes. On prcise que
l'espace de noms concern est System.IO, on doit donc l'importer pour utiliser ses
diffrentes 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
ligne = monSR.ReadLine() ;
Console.WriteLine(ligne) ;
Console.Write("</BR>") ;
}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 = New
streamWriter("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 le streamWriter :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 spares
par ;
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
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
{
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
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
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
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
{
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
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
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
}
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
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
{
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
}
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
}
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
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
}
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
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
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<0)
{ throw new NegatifException("ereur n'accepte pas votre age"); }
}
}
//La classe exception
class NegatifException:Exception
{
Cours propos par : ELGARRAI Zineb ISTA NTIC SAFI
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

Das könnte Ihnen auch gefallen