Vous êtes sur la page 1sur 47

Programmation Oriente Objet en C# 1

Programmation Oriente Objet en C#



www.madness-madman.hooxs.com
Programmation Oriente Objet en C# 2
I. Introduction
II. Dfinition d'une classe
III. Constructeurs et destructeur
IV. Instanciation
V. Exemple
VI. Mthodes et variables de classe
VII.Hritage
VIII.Classe et mthodes abstraites
IX. Les classes sealed
X. Les mthodes virtual
XI. Classes .NET d'usage courant
XII.La gestion des erreurs
XIII.Srialisation et Desrialisation dobjets
XIV.Les interfaces
XV.Le polymorphisme
XVI.Les namespace

Programmation Oriente Objet en C# 3
I. Introduction
Les objets reprsentent la notion fondamentale pour
comprendre la technologie de lorient objet. Dans la
nature, tout est objet: arbres, montagnes, maisons, avions,
voitures.
Tous les objets du monde rel partagent deux
caractristiques fondamentales: ils ont tous un tat
(attributs ou proprits) et un comportement.
-L tat permet de dcrire un objet dans son aspect
statique ou dynamique.
-Le comportement renseigne les actions quun objet peut
faire ou subir et qui peuvent tre lorigine dun
changement dtat.
Notion dObjet
Programmation Oriente Objet en C# 4
La Programmation Oriente Objet (POO)
La programmation oriente objet consiste crire des
programmes informatique bass sur la dfinition et lutilisation
dobjets.
Les objets logiciels sont similaires aux objets du monde rel:
Dans un programme informatique, un objet possde un tat
dfini dans des variables et un comportement dfini dans
des mthodes ou fonctions.
Programmation Oriente Objet en C# 5
Notion de Classe
Une classe est une unit du code (programme) dans lequel
on dfini un objet. Chaque classe possde un nom, un
dbut, une fin et contient des variables (tat de lobjet) et
des mthodes (comportement de lobjet).
Une classe est donc un moule partir duquel sont construits
des objets.
Nom de la classe
Attributs ou proprits de la classe


Mthodes de la classe



Reprsentation schmatique
dune classe
Programmation Oriente Objet en C# 6
II. Dfinition d'une classe
Syntaxe gnrale de dclaration:
[Modificateurs_de_classe] class Nom_de_la_classe
{
Variables membres
.
Mthodes membres
..
}
Modificateurs de classe :

public : une classe public est accessible depuis n'importe o.

partial : Dfinit des classes partielles dans le mme assembly.

abstract : une classe abstract ne peut pas tre instancie directement. Elle
sert de classe de base dans une relation d'hritage.

sealed : une classe sealed ne peut tre drive.
Programmation Oriente Objet en C# 7
Variables membres:
Syntaxe gnrale de dclaration d'une variable :
[Modificateur _d_accs] Type nom_de_variable ;
On peut citer trois catgories de variables:
Variables dclares dans une classe: reprsentent les attributs ou proprits
de la classe
Variables dclares dans une mthode: variables locales.
Variables faisant partie de la dclaration dune mthode: appeles paramtres
de la mthode.
Toute variable doit avoir un type (exception pour var).
Le type peut tre un type valeur ou primitif (int, bool, double)
Comme il peut tre un type rfrence (class, interface, delegate)
Programmation Oriente Objet en C# 8
Mthodes membres:
Syntaxe gnrale de dclaration d'une mthode :
[Modif_accs] Type_retourn Nom_de_la_mthode(Liste_paramtres )
{
// instructions de la mthode
}
Une mthode est un sous programme identifi par un nom, pouvant recevoir
ou non des paramtres et ayant ou non un type de retour (si la mthode ne
retourne aucune valeur le type de retour est void).
Chaque mthode est caractrise par sa signature. La signature est
constitue du nom de la mthode et la liste de ses paramtres.
La surcharge de mthode consiste dfinir plusieurs mthode qui ont le
mme nom mais qui diffrent par le type et le nombre de paramtres
Programmation Oriente Objet en C# 9
Modificateurs daccs:
Dans C# les modificateurs d'accs permettent de spcifier les cinq niveaux
d'accessibilit suivants :
public : l'accs n'est pas restreint.
protected : l'accs est limit la classe conteneur ou aux types drivs de la
classe conteneur.
Internal : l'accs est limit l'assembly actuel.
protected internal : l'accs est limit l'assembly actuel ou aux types drivs de
la classe conteneur.
private : l'accs est limit au type conteneur.
Les modificateurs daccs dterminent si dautres classes peuvent utiliser un
attribut ou invoquer une fonction (principe dencapsulation).

Programmation Oriente Objet en C# 10
Les accesseurs ou (Proprits)
Les proprits sont des membres offrant un mcanisme souple pour la lecture,
l'criture ou le calcul des valeurs de champs privs. Elles peuvent tre utilises
comme si elles taient des membres de donnes publiques, mais en fait, ce sont
des mthodes spciales appeles accesseurs. Elles facilitent l'accs aux
donnes tout en prservant la scurit et la souplesse des mthodes.
Syntaxe gnrale de dclaration d'un accesseur :
public type_attribut nom_proprit
{
get {
return valeur;

}
set {
.
..
nom_attribut = value ;

}
}
Programmation Oriente Objet en C# 11
III. Constructeurs et destructeur
Un constructeur est la premire mthode appele lors de la cration
(instanciation) dun objet.
-Une classe peut avoir plusieurs constructeurs qui diffrent par leurs
paramtres
-Un constructeur par dfaut est cr automatiquement
Un destructeur est une mthode sans paramtres appele
automatiquement lors de la destruction de lobjet (rarement utilis)
Syntaxe gnrale de dclaration d'un constructeur :
public Nom_de_la_classe(Liste_paramtres )
{
// instructions de la mthode
}
Programmation Oriente Objet en C# 12
IV. Dclaration et Instanciation dun objet
Linstanciation est lopration qui consiste crer une
instance (exemplaire) dun objet partir de sa classe. Pour
crer un objet, on instancie une classe en appelant
l'oprateur new. Celui ci appelle le constructeur adquat.
Un objet est une variable ayant pour type celui de sa classe
Syntaxe gnrale de dclaration et instanciation dun objet :
[Modificateur _d_accs] nom_classe nom_variable= new nom_classe() ;
On peut egalement dclarer un objet et linstancier aprs :
[Modificateur _d_accs] nom_classe nom_variable;

nom_variable = new nom_classe() ;
Programmation Oriente Objet en C# 13
V. Exemple: Partie I
Soit un objet Avion caractris par les attributs: marque, modle,
vitesse maximale, altitude maximale, vitesse en cours et altitude en
cours.
Un avion peut dcoller, atterrir, voler
1. Ecrire le code de la classe Avion
2. La classe Avion possde deux constructeurs:
-Un constructeur par dfaut permettant dinitialiser tous les attributs
-Un constructeur recevant trois paramtres pour initialiser la
marque, la vitesse maximale et laltitude maximale
3. La mthode decoller() augmente la vitesse_en_cours de 10 sans
dpasser la vitesse maximale. Elle augmente laltitude en cours de
200 quand la vitesse en cours est >=300 sans dpasser laltitude
maximale.
4. La mthode atterrir fait linverse
Programmation Oriente Objet en C# 14
Avion
mq
modele
v_max
altitude_max
v_en_cours
altitude_en_cours
Avion()
Avion(mq,v_max,a_max)
decoller()
atterir()

Reprsentation de la classe Avion
Nom de la classe
Attributs ou proprits de la classe
Mthodes de la classe
Constructeurs
Programmation Oriente Objet en C# 15
V. Exemple (Suite): Partie II
5. Dans la mthode Main de votre classe principale crire le code permettant
de crer un avion en utilisant le constructeur par dfaut
6. Affecter en suite aux diffrents attributs les valeurs suivants:
mq: Boeing
modele: 737
v_max: 900 Km/H
Altitude_max: 10100 m
V_en_cours:0
Altitude_en_cours:0
7. Afficher ces diffrents valeurs
8. Faire la mme chose en utilisant le deuxime constructeur
9. Crer deux avions diffrents et afficher leurs proprits
10. Faire dcoller le premier avion jusqu laltitude 6000 m
Programmation Oriente Objet en C# 16
V. Exemple (Suite): Partie III
11. Rendre private laccessibilit des attributs mq, v_max et v_en_cours
12. Afin de permettre laccs mq ajouter un accesseur en lecture criture
nomm marque
13. Ajouter galement un accesseur en lecture criture nomm vitesse_maximale
pour lattribut v_max.
14. Ajouter un accesseur en lecture pour lattribut v_en_cours
Programmation Oriente Objet en C# 17
VI. Mthodes et variables de classe
Les variables de classe
Quand on instancie plusieurs objets partir dune mme classe chacun de ces
objets possde ses propres valeurs de variables dinstance. Dans certains cas
on a besoin davoir des variables ayant des valeurs communes pour tous les
objets instancis partir de la mme classe, ce genre de variables sont dites des
variables de classe et sont dclares avec static
Les mthodes de classe
Les mthodes de classe sont des mthodes dclares avec le mot static.
Une mthode dclare static peut tre appele sans instancier un objet de sa
classe. Il suffit pour cela de prcder la mthode avec le nom de sa classe suivi
dun point.
Programmation Oriente Objet en C# 18
VII. Hritage
Certains objets ont des attributs ou des mthodes en commun. Ces
proprits et ces mthodes sont dfinis dans une classe mre partir de
laquelle on drive les autres classes. Le fait de driver une classe
partir dune classe de base permet la classe drive dhriter les
attributs et les mthodes dclares public ou protected

La programmation oriente objet permet des classes dhriter ltat et
le comportement dautres classes.
Programmation Oriente Objet en C# 19
Syntaxe gnrale de dclaration dune classe drive :
[Modificateurs_de_classe] class Nom_de_la_classe_drive: classe_mre
{
Variables membres
.
Mthodes membres
.
}
Le mot cl base sert accder aux membres de la classe de base partir
d'une classe drive

L'accs une classe de base n'est autoris que dans un constructeur, une
mthode d'instance ou un accesseur de proprit d'instance.

Le fait d'utiliser le mot cl base partir d'une mthode statique constitue une
erreur.
Programmation Oriente Objet en C# 20
Avion
Mq

Avion()
Avion(mq,v_max,a_max)
decoller()
atterir()
Avion_de_ligne
nombre_de_places
nombre_de_voyageur
embarquer_voyageur()
embarquer_voyageur(int n)
debarquer_voyageur(int n)
debarquer_tout()
Avion_de_chasse
type_armes
quantite
charger_armes(int q)
bombarder()
Avion_cargo
charge_max
charge_actuelle

charger_tout()
decharger_tout()
Exemple
Programmation Oriente Objet en C# 21
VIII.Classe et mthodes abstraites
Une classe abstraite est une classe qui ne peut pas tre instancie. Elle
sert de classe de base dans une relation dhritage.
Syntaxe gnrale de dclaration dune classe abstraite :
public abstract class Nom_de_la_classe
{
Variables membres
.
Mthodes membres
.
}
Classe abstraite: abstract
Programmation Oriente Objet en C# 22
Les classes abstraites peuvent galement dfinir des mthodes
abstraites.
Une mthode abstraite est une mthode qui doit tre rcrite et
redfinie dans les classes drives.
Les mthodes abstraites n'ont pas d'implmentation. Ainsi, la dfinition de
la mthode est suivie d'un point-virgule au lieu d'un bloc de mthode
normal.
Les classes drives de la classe abstraite doivent implmenter toutes
les mthodes abstraites en utilisant le mot override.
Les dclarations de mthodes abstraites sont autorises uniquement dans
les classes abstraites.
Mthode abstraite: abstract
Syntaxe gnrale de dclaration dune mthode abstraite :
public abstract nom_de_la_methode(..parametres..);
Programmation Oriente Objet en C# 23
Exemple Figure
nom
couleur_trait
couleur_remplissage
abstract surface()
abstract perimetre()
abstract tracer_figure()
Cercle
rayon

surface()
perimetre()
tracer_figure()
Quadrilateral
largeur
longueur
surface()
perimetre()
tracer_figure()
Classe abstraite
Mthodes abstraites
Ces mthodes doivent tre redfinies
Programmation Oriente Objet en C# 24
IX. Les classes sealed
Lorsqu'il est appliqu une classe, le modificateur sealed empche les
autres classes d'en hriter .
Une classe dclare avec sealed ne peut pas tre utilise dans une relation
dhritage.
On peut galement utiliser le modificateur sealed sur une mthode ou une
proprit qui substitue une mthode ou une proprit virtuelle dans une
classe de base. Cela permet d'autoriser les classes driver de votre
classe et de les empcher de substituer des mthodes ou des proprits
virtuelles spcifiques.
Syntaxe gnrale de dclaration dune classe sealed :
public sealed class Nom_de_la_classe
{
Variables membres
.
Mthodes membres
.
}
Programmation Oriente Objet en C# 25
X. Les mthodes: virtual
Le mot cl virtual sert modifier une mthode, une proprit, un indexeur
ou une dclaration de l'vnement et leur permet d'tre substitus (redfinis)
dans une classe drive.
Les mthodes dclares virtual peuvent tre redfinies et reimplmentes
dans les classes drives. Le mot cl override permet de redfinir une
classe virtual.
Programmation Oriente Objet en C# 26
XI. Classes .NET d'usage courant
La bibliothque de classe .NET Framework offre une multitude de classes,
interfaces et types valeur destines faciliter la programmation et permettant
d'accder aux fonctionnalits du systme.
Voici quelques classes de cette plate-forme
1.Les chanes de caractres: La classe System.String
La classe prsente un ensemble de mthodes et de proprits permettant la
manipulation des chanes de caractres.
Noter que dans cette classe on trouvera deux types de mthodes: les mthodes
de classe (static) et les mthodes dinstance
-Pour accder aux mthodes static utiliser le nom de la
classe (c a d String)
-Pour accder aux mthodes dinstance utiliser le nom de la
variable de type string
Programmation Oriente Objet en C# 27
On notera un point important : lorsqu'une mthode rend une chane de
caractres, celle-ci est une chane diffrente de la chane sur laquelle a
t applique la mthode. Ainsi S1.Trim() rend une autre chane
diffrente de S1.
Une chane C peut tre considre comme un tableau de
caractres. Ainsi
C[i] est le caractre i de C
C.Length est le nombre de caractres de C
2.Les tableaux: La classe Array
Les tableaux drivent de la classe Array :
3.Les collections
Outre le tableau, il existe diverses classes pour stocker des collections d'lments.
Il existe des versions gnriques dans l'espace de noms
System.Collections.Generic et des versions non gnriques dans
System.Collections.
a. Les collections gnriques
Programmation Oriente Objet en C# 28
La classe gnrique List<T>
La classe System.Collections.Generic.List<T> permet d'implmenter
des collections d'objets de type T dont la taille varie au cours de
l'excution du programme. Un objet de type List<T> se manipule presque
comme un tableau. Ainsi l'lment i d'une liste l est not l[i].
Syntaxe gnrale de dclaration dune List :
List<nom_type_ou_classe> nom_liste=new List<nom_type_ou_classe> ();
Exemple: dclaration dune liste gnrique nomme lav contenant des Avions
List<Avion> lav=new List<Avion> ();
Programmation Oriente Objet en C# 29
Dans la classe Dictionary<TKey,TValue> les cls sont de type
Tkey, les valeurs de type TValue. Les cls sont uniques, c.a.d. qu'il ne
peut y avoir deux cls identiques. Lors de son dclaration Tkey et
TValue peuvent tre de type quelconque
La classe Dictionary<TKey,TValue>
La classe System.Collections.Generic.Dictionary<TKey,TValue> permet
d'implmenter un dictionnaire. On peut voir un dictionnaire comme un
tableau deux colonnes :
cl valeur
cl1 valeur1
cl2 valeur2
.. ...
Syntaxe gnrale de dclaration dun Dictionary :
Dictionary<nom_type_cl, nom_type_valeur> nom_liste=new
Dictionary<nom_type_cl, nom_type_valeur> ();
Programmation Oriente Objet en C# 30
Exemple: dclaration dun Dictionary nomme lp contenant des objets
Pays ayant comme cl le nom du pays
Dictionary<string, Pays> lp=new Dictionary<string, Pays> ();
Un Dictionary peut tre manipul comme un tableau. Ainsi
on peut accder un lment par la valeur de sa cl et non
par son indice.
Exemple:
Lp["Finland" ] renvoi le pays ayant dans la valeur de la cl
Finland

Programmation Oriente Objet en C# 31
b. Les collections non gnriques
L'espace de noms System.Collections contient des interfaces et classes
qui dfinissent diffrentes collections d'objets, par exemple, les listes, les
files d'attente, les tableaux de valeurs de bit, les tables de hachage et les
dictionnaires.
Une collection nom gnrique peut contenir des objets de type diffrents.
Pour extraire un objet de la collection il faut prciser son type par un cast.
Parmi les collection non gnriques on trouve ArrayList et HachTable
La classe ArrayList
Syntaxe gnrale de dclaration dun objet ArrayList :
ArrayList lav=new ArrayList ();
Programmation Oriente Objet en C# 32
Exemple dun programme qui cre 100 objets de
type Pays et les stock dans une collection
ArrayList:
..
Pays p;
ArrayList lp=new ArrayList();
int i;
for(i=1;i<=100;i++)
{
p=new Pays(); // instanciation dun pays
p.nom= pays + i;
lp.Add(p); //Ajout la collection
}
Programmation Oriente Objet en C# 33
Extraction et affichage des pays stocks dans la collection
ArrayList:
..
int i;
Pays p;
for(i=0;i<lp.count;i++)
{
p=(Pays)lp[i]; // extraction dun pays de la collection
//noter lutilisation dun cast (Pays)
Console.Write(p.nom);
}
La classe HashTable
Permet de crer des collection sous forme de cl et dune valeur .
Programmation Oriente Objet en C# 34
Toutes les collections offrent des mthodes
permettant de manipuler leurs lments
savoir: ajouter, inserer, supprimer
4.Les classes Math et Random
Toute une srie de fonctions mathmatiques sont regroupes dans la
classe Math de lespace de noms System. Cette classe Math contient
notamment :
la dnition de deux constantes, toutes deux de type double : Math.E
pour la valeur du nombre nprien ( 2.718...) et Math.PI pour la valeur du
nombre Pi (3.1415...) ;
des fonctions de calcul mathmatique : calcul de puissance, fonctions
trigonomtriques, etc.
Les constantes et fonctions de cette classe sont qualies de static, ce
qui permet de les utiliser sans devoir crer un objet Math.
a. La classe Math
Programmation Oriente Objet en C# 35
a. La classe Random
La classe Random contient les fonctions ncessaires la gnration de
nombres alatoires.
Cette classe possde une mthode nomme Next ayant trois surcharges,
permettant de gnrer un nombre alatoire.
. Next(): retourne un nombre alatoire entre zro inclus et la limite
suprieur dun int.
. Next(int n): retourne un nombre alatoire entre zro inclus et
infrieur au nombre pass en paramtre.
. Next(int n1, int n2): retourne un nombre alatoire >= n1 et < n2.
Programmation Oriente Objet en C# 36
5.Classes de manipulation de dates et dheures
a. La structure DateTime
La structure DateTime permet deffectuer diverses oprations sur les dates :
dterminer le jour de la semaine, calculer une date x jours, dterminer si
une date est antrieure ou postrieure une autre, etc. Un objet DateTime
peut contenir une date comprise entre le premier janvier de lan un midi et
le 31 dcembre 9999. Il comprend la fois une date et une heure avec accs
la milliseconde. On parle de classe DateTime bien quil sagisse plus
prcisment dune structure.
a. La structure TimeSpan
La structure TimeSpan intervient dans les calculs sur dates (plus
prcisment dans les intervalles entre dates). Ici aussi, nous parlons de
classe alors quil sagit plus prcisment dune structure.
Programmation Oriente Objet en C# 37
6.Classes de manipulation de fichiers, dossiers
Toutes les classes permettant de manipuler les fichiers et les
dossiers Existent dans le namespace System.IO
Parmi ces classes on peut citer:
Classes de manipulation de
fichiers
Classes de manipulation de
dossiers
FileInfo
File
FileStream
StreamReader
StreamWriter
BinaryReader
BinaryWriter
Directory
DirectoryInfo
DriveInfo
Path
Programmation Oriente Objet en C# 38
Programmation Oriente Objet en C# 39
XII. La gestion des erreurs
Dans un programme, certaines actions peuvent provoquer des erreurs
lexcution et le programme est interrompu cest ce quon appelle des
exceptions. En effet une simple tentative de division par zro, lcriture sur
un fichier en lecture seule ou inexistant peut faire tout planter. Pour viter
cette situation C# permet de mettre les instructions susceptibles de
provoquer des exceptions dans un bloc try .. Catch pour traiter les
erreurs dexcution sans que le programme ne soit interrompu.
La gestion d'une exception se fait selon le schma
suivant :
try{
code susceptible de gnrer une exception
} catch (Exception e){
traiter l'exception e
}
instruction suivante
Programmation Oriente Objet en C# 40
static void Main(string[] args) {
int age = 0;
Console.WriteLine("Quel ge avez-vous?");
//code risque
try
{
age = int.Parse(Console.ReadLine());
Console.WriteLine("Vous avez donc " + age + " ans");
}
//Le code plac ici s'execute si une exception est leve
catch
{
Console.WriteLine("Dsol vous devez crire un nombre!");
}
finally
{
Console.WriteLine("\n*** Merci de votre visite ***");
}
Console.ReadLine();
}
Exemple:
Programmation Oriente Objet en C# 41
XIII. Srialisation et Desrialisation dobjets
1. Notion de Srialisation
La srialisation consiste stocker les valeurs des
attributs d'une instance d'un objet dans un fichier qui peut
tre au format binaire, xml ou Soap.
La srialisation binaire concerne les champs publics et privs de l'objet
et le nom de la classe, y compris l'assembly contenant la classe.
Pour pouvoir srialiser des objets crs partir dune classe, la
classe doit tre marque comme tant srialisable avec Le mot
[Serialiasable()]

Si on ne veut pas srialiser certaines attributs de la classe on
utilise le mot [NonSerialized()]
Programmation Oriente Objet en C# 42
2. Exemple de Srialisation binaire
Considrons une classe nomme Compte dont la
dclaration est la suivante:
[Serialisable()]
Public class Compte
{
public int num_cpte;
public string nom_proprietaire;
public double solde;
[NonSerialized()] public string agence;
}
Le mot [Serialiasable()] indique que les objets
crs partir de cette classe peuvent tre srialiss
Lattribut agence est marqu comme tant non srialis
a. Dclaration de la classe
Programmation Oriente Objet en C# 43
b. Srialisation
Dans le corps du programme, il faut mettre:
using System.IO;
using System.Runtime.Serialization.Formatters.binary

La srialisation se fera dans un fichier qui doit tre cr. Pour
cela on utilise la classe Stream et la classe File toutes les
deux appartiennent System.IO

Pour enregistrer lobjet dans un format binaire on utilise la
classe BinaryFormatter qui appartient
System.Runtime.Serialization.Formatters.binary

Programmation Oriente Objet en C# 44
Cration dun objet Compte et srialisation dans un fichier
..
Compte cp; //dclaration dun objet compte
cp=new Compte(); // instantiation de cp
// remplissage des donnes
cp. num_cpte= 2000;
cp. nom_proprietaire="Ali";
cp.solde=200000;
cp.agence="Fes medina";
// ******************************************
Stream fcompte = File.Create("c:\\compte.bin"); // cration du fichier

BinaryFormatter bf = new BinaryFormatter(); // cration dun objet formateur
//binaire nom bf

bf.Serialize(fcompte, cp);// srialisation de lobjet cp

fcompte.Close();// fermeture du fichier
..
}
Programmation Oriente Objet en C# 45
c. Desrialisation de lobjet
La dserialisation consiste rcupr un objet pralablement srialis.
Pour dserialiser notre objet Compte on peut utiliser le programme suivant:
..
Compte cp; //dclaration dun objet compte
if (File.Exists("c:\\compte.bin"))// on teste si le fichier existe
{
Stream fc = File.OpenRead("c:\\compte.bin");// ouverture du fichier
BinaryFormatter bf = new BinaryFormatter(); // cration dun objet
// formateur binaire nom bf

cp = (Compte)(bf.Deserialize(fc));// dserialisation
MessageBox.Show(cp.nom_proprietaire + cp.solde.Tostring()
fc.Close();
..
}
Programmation Oriente Objet en C# 46
Programmation Oriente Objet en C# 47