Vous êtes sur la page 1sur 22

Programmation

g Objet
j C#

Programmation
og a at o Objet
O jet
Concepts de base

1
06/03/2010

Qu’est-ce que la programmation


orientée objet ?
y Programmation impérative
y Simple traitement sur des données

y Programmation orientée objet (ou POO):


y Technique visant à faire interagir des objets entre eux,
y Facilite l’écriture des applications par une structuration en
terme d’objets.
y Favorise la réutilisation de code, en composant des programmes
à partir d’objets existants (par exemple, la bibliothèque
standard de C++, de Java, . . .).

Concepts clefs de la POO


y Deux notions essentielles sont caractéristiques de la POO :
y Classe : schématiquement, une classe représente le type d’un
objet, tout comme int représente un entier.

y 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 vo
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).

2
06/03/2010

Objet (1)
Objet = identité + état
at + comportement
y Une identité
y deux objets différents ont des identités différentes
y on peut désigner l’objet (y faire référence)
y Un état (attributs)
y ensemble de propriétés/caractéristiques définies par des valeurs
y permet de le personnaliser/distinguer des autres objets
y peut évoluer dans le temps
y Un comportement (méthodes)
y ensemble des traitements que peut accomplir un objet (ou que
l’on peut lui faire accomplir)

Objet (2)
y Quelques exemples:

Objet États Comportements


Chien Nom, race, âge, couleur Aboyer, chercher le baton,
mordre, faire le beau
Compte N°, type, solde, ligne de crédit Retrait, virement, dépôt,
consultation du solde
Téléphone N°, marque, sonnerie, répertoire, Appeler, Prendre un appel,
opérateur Envoyer SMS, Charger
Voiture Plaque, marque, couleur, vitesse Tourner, accélérer, s’arrêter,
ffaire
i lle plein,
l i klklaxonner

3
06/03/2010

Classes et instances (1)


y Classe = patron/moule (= type)
y une classe est la « description » d’une collection objets homogènes
(mêmes caractéristiques et mêmes comportements).
y décrit la structure de l’état (les attributs et leurs types)
y Instance = objet obéissant à un patron
y un objet est une « instance » de classe.
y 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.
y Classe : ab
abstrait
y la notion/le type “Chien”
y Instance : concret
y “ce chien noir que je vois dans la rue”, “le chien de mon voisin”

Classes et instances (2)


y Une classe doit nécessairement comporter les éléments
suivants :
y les champs : ce sont les « variables » permettant, en général,
de définir l’état de l’objet.
y un ou plusieurs constructeurs : ce sont des fonctions
indiquant de quelle façon l’objet doit être déclaré et initialisé.
y les méthodes : ce sont les fonctions permettant d’agir sur les
objets
j d’une classe. Selon leur définition,, elle ppeuvent
s’appliquer sur un objet particulier, ou sur l’ensemble des
instances d’une classe.

4
06/03/2010

Classes et instances (3)


y Quelques exemples
y La classe « chien » définit:
y Les attributs d’un chien (nom, race, couleur, âge…)
y Les comportements d’un chien (Aboyer, chercher le bâton, mordre…)
y 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
Voiture Ma voiture: ABC-123, VW Polo, grise, 0 km/h
La voiture que je viens de croiser: ZYX-987, Porsche, noire, 170 km/h

Programmation
Objet - C#

10

5
06/03/2010

Directive using et espace de nom


y Directive using et espace de nom
y Le mot clé usingg fait référence aux ressources dans la librairie
des classes de .NET Framework
y C# est fourni avec de nombreuses classes d’utilitaires qui
effectuent diverses opérations utiles
y Ces classes sont organisées en espace de nom
y Un espace de nom est un ensemble de classes associées, il peut
également
g contenir d’autres espaces
p de nom
y Une directive using spécifie un espace de nom qui sera utilisé

11

Espace de nom
y Un espace de nom regroupe plusieurs déclarations sous un
même nom ajouté à ceux des éléments déclarés (classes,
interfaces, espace de nom imbriqué).
y Exemple :
namespace MesClasses
{
public class ClasseUne
{ ... }

public class ClasseDeux


{ ... }
}

12

6
06/03/2010

Utiliser les membres d'un espace de


nom
y Les classes définies à l'intérieur de cet espace de noms
peuvent se faire référencer par leur nom simple : ClasseUne,
ClasseDeux.
y Une classe membre d'un autre espace de nom ou d'aucun
doit forcément utiliser le nom absolu des classes, c'est à dire :
MesClasses.ClasseUne, MesClasses.ClasseDeux ou bien
utiliser la directive using : using namespace;

using MesClasses; public class ClasseTest {


public class ClasseTest { MesClasses.ClasseUne objet1;
ClasseUne objet1; MesClasses.ClasseDeux objet2;
ClasseDeux objet2; }
}

13

Imbrication des espaces de noms


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

14

7
06/03/2010

Espace de noms en plusieurs parties


y 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 { ... }
... }

15

Les variables et les constantes


y Une variable réserve une place en mémoire pour stocker des
données.
y Déclaration:
y type nom [ = expression ] ;

y Une constante nommée est associée à une valeur pour toute


la durée de l'application. Sa valeur ne peut changer.
y Déclaration:
y const type nom = expression ;

16

8
06/03/2010

Votre premier programme

17

Les Entrées / Sorties


y La classe Console
y La classe Console fournit une application C# avec accès à
l’entrée
l’ é standard,
d d à lla sortie standard
d d et aux flflux d’
d’erreur
satandard
y Les méthodes Console.Write et Console.WriteLine
affichent des informations sur l’écran de la console
y Les méthode Console.Read et Console.ReadLine lisent
l’entrée de l’utilisateur sur le clavier
y 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.

18

9
06/03/2010

La méthode Main
y La méthode Main
y L’exécution d’une application
pp C# démarre au niveau de la
méthode Main
y Une application C# peut contenir plusieurs classes, mais un
seul point d’entrée
y On peut avoir plusieurs classes avec Main dans la même
application, mais une seule méthode Main est exécutée.
y La classes à utiliser doit être spécifiée
p lors de la compilation
p de
l’application

19

La méthode Main
y Déclarez la méthode Main d'une des manières suivantes :
y Elle peut retourner void :

y Elle peut également retourner int :

y 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.

20

10
06/03/2010

Classe
y Classe
y Dans C#, une application est une collection d’une ou plusieurs
classes,
l structure dde ddonnées
é et autres types.
y Les classes peuvent être réparties dans un ou plusieurs fichiers
y Plusieurs classes peuvent être placées dans un fichier
y Membres d'une classe
y Les fonctions, appelées méthodes, traitent les données,
appellent d'autres méthodes, retournent éventuellement une
valeur
l ;
y Les variables, appelées attributs, stockent les données ;
y Les propriétés sont des méthodes spéciales utilisées comme
des variables.

21

Membres statiques de classe


y L’utilisation d’attributs statiques permet de partager une même
valeur d’un attribut d’une classe avec tous les objets de cette classe
y On
O utilise
l ddes méthodes
é h d statiques, appeléeslé ddirectement sur lla
classe, pour modifier les attributs statiques
y Exemple :
public class UnExemple {
int numero; // Défini pour chaque objet
static int numero_suivant; // Défini pour la classe
}
….
Console WriteLine("N°
Console.WriteLine( N suivant = " + UnExemple.numero_suivant
UnExemple numero suivant );
// pour accéder à un membre static: NomDeLaClasse.MembreStatic
Console.WriteLine("N° = " + UnExemple.numero );
// Erreur de compilation, car la variable n'est pas définie pour la classe
UnExemple InstanceDUnExemple = new UnExemple();
Console.WriteLine("N° = " + InstanceDUnExemple.numero );

22

11
06/03/2010

Classe statique
y 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.
y Exemple :
public static class UneClasseStatique{
public static void Afficher(string message)
{
// ...
}
}
…..
UneClasseStatique.Afficher("Un exemple de message");

23

Encapsulation
y 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
y De manière générale, les données sont privées et les
méthodes sont publiques
y Certaines méthodes peuvent être privées et ne servir qu’au
fonctionnement interne de la classe
public
bli : A
Accès
è autorisé
t i é à ttous ;
private : Accès depuis la classe seulement ;
Protected : Accès depuis la classe et ses sous-classes seulement ;
internal : Accès depuis l'assembly seulement.

24

12
06/03/2010

Niveaux d'accessibilité
Accessibilité déclarée Signification
public L'accès n'est ppas limité.
L'accès est restreint à la classe conteneur ou aux types
protected
dérivés de la classe conteneur.
internal L'accès est restreint à l'assembly en cours.
L'accès est restreint à l'assembly en cours ou aux types
protected internal
dérivés de la classe conteneur.
private L'accès est restreint à la classe conteneur.

Si l’accès à un attribut de classe n’est pas défini, le compilateur C#


le considèrera par défaut comme privé

25

Classes imbriquées
y Il est possible de créer des classes à l’intérieur d’une autre
classe, on parle alors de classes imbriquées

y Une classe imbriquée se déclare au sein même de la classe et


peut être publique ou privée

26

13
06/03/2010

Constructeurs d’instances
y Constructeur par défaut
y Si vous n’implémentez pas de constructeur dans votre classe, le
constructeur fera appel à un constructeur par défaut

y Un constructeur par défaut doit porter le même nom que la classe,


être publique, ne prendre aucun argument et ne renvoyer aucune
valeur (même pas void)

y Vous
V pouvez réécrire
éé i votre propre constructeur par déf
défaut en
suivant les mêmes règles

27

Constructeurs d’instances
y Le constructeur peut être surchargé
afin de passer des arguments différents.
y Si vous surchargez le constructeur d
d’une
une
classe, l’appel au constructeur par
défaut implicite est impossible. Il vous
faudra alors écrire votre propre
constructeur par défaut

y Vous
V pouvez éécrire
i un constructeur
t t
appelant un autre constructeur dans la
même classe

28

14
06/03/2010

Propriétés
y Les propriétés sont des membres offrant un mécanisme
souple pour la lecture, l'écriture ou le calcul des valeurs de
champs privés.
y Elles peuvent être utilisées comme si elles étaient des
membres de données publiques, mais en fait, ce sont des
méthodes spéciales appelées accesseurs.
y Elles facilitent l'accès aux données tout en préservant la
sécurité
é ité ett lal souplesse
l ddes méthodes.
éth d

29

Propriétés

y Le mot clé value sert à définir la valeur assignée par l'indexeur set.
y Les propriétés qui n'implémentent pas de méthode set sont en lecture
seule.
30

15
06/03/2010

Héritage
y La syntaxe pour faire hérité d’une classe de base est la
suivante:

y Une classe dérivée ne peut pas être plus accessible que sa


classe de base, il n’est pas possible de dériver une classe
publique d’une classe privée
y Le mot clé protected permet de restreindre l’accès d’un
membre d’une classe de base uniquement à ses classes
dérivées
y Pour les autres classes, un membre protégé se comporte
comme un membre privé

31

Héritage
y Appel de constructeurs de classe de base

y Une référence à une instance de la sous-classe peut être


stockée par une référence du même type :
Voiture clio = new Voiture();
y Il est également possible d'utiliser une référence du type de la
classe de base :
Vehicule clio= new Voiture();

32

16
06/03/2010

Héritage - Implémentation de
méthodes
y Utilisation de virtual et override:
y Une méthode virtuelle de la classe de base p
peut être redéfinie
dans une classe dérivée
y Une classe virtuelle signifie que la méthode est une
implémentation possible mais que l’on autorise sa redéfinition
dans les classe dérivées
y Pour déclarer une méthode virtuelle dans la classe de base, on
utilise le mot clé virtual
y Dans la classe dérivée, on utilise le mot clé override pour
redéfinir une méthode virtuelle de la classe de base
y

33

Héritage - Exemple

La méthode AfficherDescription() est toujours appelée


sur une référence de type Employe. Pourtant on voit
bien que le programme exécute la méthode
AfficherDescription() de Technicien et Secretaire.
C’est la magie du polymorphisme

34

17
06/03/2010

Héritage - Implémentation de
méthodes
y Utilisation de new
y Plutôt q
que de redéfinir une méthode, on ppeut avoir besoin de
spécifier qu’une méthode d’une classe dérivée est une nouvelle
implémentation de la méthode
y new permet de spécifier une méthode dont la signature est
équivalente à une méthode de la classe de base mais que nous
souhaitons masquer

35

Exemple
y En premier lieu, trois classes sont déclarées : une
classe de base appelée Car, et deux classes qui en
dérivent, ConvertibleCar et Minivan.
y La classe de base contient une seule méthode,
DescribeCar, qui envoie une description de la
voiture à la console.
y Les méthodes des classes dérivées comprennent
également une méthode appelée DescribeCar, qui
affiche leurs propriétés uniques.
y Ces méthodes appellent également la méthode
DescribeCar de la classe de base pour démontrer
qu'elles ont hérité des propriétés de la classe Car.
y Pour souligner la différence, la classe
ConvertibleCar est définie avec le mot clé new,
tandis que la classe Minivan est définie avec
override.

36

18
06/03/2010

Exemple

y Notez en quoi la description ConvertibleCar


ne répond
p ppas à vos attentes. Comme le mot
clé new a été utilisé pour définir cette
méthode, la méthode de la classe dérivée n'est
appelée. C'est la méthode de la classe de base
qui est appelée à la place. L'objet Minivan
appelle correctement la méthode substituée,
en produisant les résultats attendus.
37

Classe abstraite
y Une classe abstraite possède au moins une méthode abstraite
ou une propriété abstraite, c'est à dire ne comportant aucune
i lé
implémentation
i ((pas dde code).
d )
y Ainsi, la définition de la méthode est suivie d'un point-virgule
au lieu d'un bloc de méthode normal.
y Une telle classe ne peut être instanciée. Il faut utiliser
une sous-classe implémentant les méthodes abstraites de la
classe de base.
y Le
L bbut d'
d'une classe
l abstraite
b i est dde fournir
f i une définition
défi i i
commune d'une classe de base pouvant être partagée par
plusieurs classes dérivées.

38

19
06/03/2010

Implémenter les méthodes abstraites


y La classe implémentant les méthodes abstraites de la classe de
base doit utiliser le mot clé override, car les méthodes
abstraites sont implicitement virtuelles également
y La classe peut ne pas implémenter toutes les méthodes
abstraites de la classe de base. Dans ce cas elle est également
abstraite, et laisse le soin à ses sous-classes d'implémenter les
méthodes abstraites restantes.
y Une
U méthode
éth d abstraite
b t it ne doitd it pas avoir
i une visibilité
i ibilité
privée. En effet, les classes dérivées seraient dans
l’impossibilité de l’implémenter.

39

Classe abstraite - Exemple

40

20
06/03/2010

Classe abstraite - Exemple

41

Usage simultané des mots clés


abstract et override
y Il est possible de marquer une méthode simultanément avec
ces deux mots clés.
y Imaginez une classe C qui dérive d’une classe B qui elle-même
dérive d’une classe A qui déclare une méthode abstraite Foo().
y B peut elle-même être être une classe abstraite et ne pas
implémenter la méthode Foo(). Dans ce cas la déclaration de la
méthode B.Foo() doit être précédée des mots clés abstract
override. Cela signifie que la classe B repousse l’implémentation
de cette méthode à ces classes dérivées.

42

21
06/03/2010

Une classe dont on ne peut dériver


(sealed)
y C# permet de spécifier qu’une classe ne peut en aucun cas
être une classe de base. C’est-à-dire aucune classe de peut
dé i de
dériver d celle-ci.
ll i Pour
P cette raison,
i elle
ll ne peut pas
également être une classe abstraite.
y Il suffit de mettre le mot clé sealed devant la déclaration de
la classe

y 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

43

22

Vous aimerez peut-être aussi