Вы находитесь на странице: 1из 44

INTRODUCTION LA

PROGRAMMATION ORIENTE OBJET


Vendredi 4 dcembre

Option Informatique
Ecole Alsacienne
PLAN
1. La programmation oriente objet

2. Manipuler des objets

3. Crer des objets

4. Quelques mthodes particulires

5. Hritage

6. Mini-TD
L A PROGRAMMATION ORIENTE OBJET
L A PROGRAMMATION ORIENTE OBJET
Qu'est-ce que la programmation oriente objet ?

Une question qui a fait couler beaucoup d'encre


Une "faon de coder"
Une "philosophie"
Un "paradigme de programmation"

Le premier langage orient objet a t imagin dans les


annes 60 par Ole-Johan Dahl et Kristen Nygaard
Prix Turing en 2001

POO (en anglais OOP, pour Object-oriented programmating)

La programmation oriente objet


QU'EST CE QU'UN OBJET ?
Le principe clef de la programmation oriente objet est de dfinir des
objets !

Un objet est une brique d'un programme qui reprsente une entit, un
concept, ou une ide.

Exemples :
Une voiture
Une personne
Une couleur
Une thmatique
etc.

Chaque objet possde une structure interne et sait effectuer un certain


nombre de choses
Les informations stockes dans l'objet sont appeles les attributs de cet objet
Les interactions possibles avec un objet sont appeles les mthodes de cet objet

La programmation oriente objet


STRUCTURER L'INFORMATION
L'utilisation d'objets permet notamment de structurer
l'information et la rendre plus facile manipuler

Exemple :
Sans objet
john = ["John", "Doe", 17]
age_john = john[2]
print(type(john))
list

Avec un objet
john = Personne("John", "Doe", 17)
age_john = john.age
print(type(john))
Personne

La programmation oriente objet


OBJETS ET CLASSES
En programmation oriente objet, on parle souvent d' "objets" et de
"classes"

Une classe correspond un certain type, un certain modle.


C'est dans la classe que sont dfinis les attributs et les mthodes que
possderont les objets crs sur ce modle.

Un objet est un exemple concret d'une classe


Un objet dispose des attributs et des mthodes dfinis dans la classe
correspondante.

Exemple :
Classe : Personne
Objets : Barack Obama, Bill Gates, etc.

On dit parfois qu'un objet est une "instance" d'une classe.

La programmation oriente objet


DIFFRENCES ENTRE LANGAGES
La notion de programmation oriente objet n'est pas la mme
dans tous les langages :
Il y a des langages o elle n'existe tout simplement pas (ex : C)
Il y a des langages o elle est impose au point que tout code doit tre
crit l'intrieur d'une classe (ex : Java)
Il y a des langages qui sont bass sur des objets, mais qui peuvent tre
utiliss sans se soucier de ces objets

Python fait partie de cette dernire catgorie


En Python, tout est objet
Cependant, on peut utiliser Python sans se proccuper des objets ni
crer de nouvelles classes

La programmation oriente objet


MANIPULER DES OBJETS
EN PYTHON, TOUT EST OBJET !
La vrit est que
Vous manipulez dj des objets sans trop y prendre garde !

Exemples
Les listes/tableaux sont des objets de type list
Les chanes de caractres sont des objets de type str

Les fichiers sources mis vos dispositions lors des TD


contiennent souvent des objets crs pour l'occasion.

Manipuler des objets


LES LISTES
Nous avons vu que le type list permet de reprsenter des
tableaux en Python

Les fonctions que nous avons vues sur ces tableaux sont en fait
les mthodes mises disposition pour la classe list :
append
pop
extend
reverse
etc.

Manipuler des objets


LES CHANES DE CARACTRES
Les chanes de caractres sont aussi des objets, crs selon le modle dfini
dans la classe str.

L encore, ces objets possdent des mthodes qui vous permettent d'interagir
avec ces chanes de caracttres
upper : Renvoie une copie de la chane, entirement en majuscules
lower : Renvoie une copie de la chane, entirement en minuscules
capitalize : Renvoie une copie de la chane, avec la premire lettre en majuscule
center : Renvoie une nouvelle chane de caractre de longueur dtermine, avec la
chane initiale en son centre

Remarques :
Ces mthodes renvoient des chanes de caractres
Cest--dire de nouveaux objets bass sur la classe str !
Les mthodes de la classe str sont donc disponibles pour ces rsultats
On peut donc "enchaner" les mthodes :
texte = "hello"
super_texte = texte.capitalize().center(15)
print(super_texte)
Hello

Manipuler des objets


L A MTHODE FORMAT
Mini-exercice :
On dispose de deux variables prenom et age
On souhaite afficher l'cran le texte
Je m'appelle [prenom] et j'ai [age] ans.
Comment faire ?

Rponse nave :
print("Je m'appelle ", end = "")
print(prenom, end = "")
print(" et j'ai ", end = "")
print(age, end = "")
print(" ans.")

La mthode format de la classe str permet d'injecter des donnes


dans une chane de caractres
Syntaxe avec des numros :
print("Je m'appelle {0} et j'ai {1} ans".format(prenom, age))
Syntaxe avec des noms :
print("Je m'appelle {p} et j'ai {a} ans".format(p = prenom, a
= age))

Manipuler des objets


CRER UN NOUVEL OBJET
Sans forcment le savoir, vous avez dj cr de nouveaux objets en
Python

Crer une liste vide :


[]
list()

Crer une chane de caractres vide :


""
str()

L'instruction nomDeLaClasse() revient appeler le


"constructeur" de la classe nomDeLaClasse sans argument
supplmentaire.

Manipuler des objets


LES OBJETS EN PYTHON
Crer un objet
Syntaxe : nomObjet = nomDeLaClasse()
Variante : nomObjet = nomDeLaClasse(arg1, arg2, , argN)

Accder un attribut
Syntaxe : nomObjet.nomAttribut
Stockage dans une variable : x = nomObjet.nomAttribut

Utiliser une mthode


Syntaxe : nomObjet.nomMethode()
Variante : nomObjet.nomMethode(arg1, arg2, , argN)
Stockage dans une variable : x = nomObjet.nomMethode(arg1, arg2, ,
argN)

Convention d'criture "CamelCase" (en franais "casse de chameau")


Premier mot en minuscule
Majuscule au dbut des mots lis
Pas d'espace entre les mots

Manipuler des objets


CRER DES OBJETS
POURQUOI CRER DES OBJETS ?

Que peut-on reprsenter dans un programme Python ?

Rponse : tout !

Il suffit de crer les classes qui correspondent aux objets que


l'on veut utiliser.

Exemple :
Eleve
Graphe
Plateau de jeu
etc.

Crer des objets


DCLARER UNE NOUVELLE CLASSE
Pour dclarer une nouvelle classe, la syntaxe de base est la suivante :
class NomDeLaClasse:

def __init__(self):
[instructions excuter quand on cre un objet]

La premire ligne contient le mot-clef class, suivi du nom de la


classe crer, et des deux points ne pas oublier.

On trouve ensuite une fonction __init__ :


Cette fonction sera excute chaque fois qu'on crera un objet de type
NomDeLaClasse.
Cette fonction est appele le "constructeur" de cette classe
Le premier argument de cette fonction est nomm self.
Cette fonction s'appelle __init__ (avec quatre underscores, deux avant et
deux aprs)

Crer des objets


PREMIER EXEMPLE

Cration d'une classe Personne :


class Personne:

def __init__(self):
self.prenom = "John"

x = Personne()
print(type(x))

Rsultat :
<class '__main__.Personne'>

Crer des objets


DCLARER DES ATTRIBUTS
C'est dans le constructeur que l'on va dfinir la liste des attributs
disponibles pour cette classe

Exemple
class Personne:

def __init__(self):
self.prenom = "John"
self.nom = "Doe"

x = Personne()
print(x.prenom)

Rsultat
John

Crer des objets


MODIFIER UN ATTRIBUT
A partir du moment o un attribut est dclar pour une classe, il est possible
d'y accder et mme de le modifier :

Exemple
class Personne:

def __init__(self):
self.prenom = "John"
self.nom = "Doe"

x = Personne()
print(x.prenom)
x.prenom = "Jane"
print(x.prenom)

Rsultat
John
Jane

Crer des objets


AMLIORER LE CONSTRUCTEUR
Il est possible d'ajouter des arguments au constructeur d'une
classe, qui seront requis pour crer un objet de ce type.

Exemple
class Personne:

def __init__(self, p, n):


self.prenom = p
self.nom = n

x = Personne("Jack", "Smith")
print(x.prenom)

Rsultat
Jack

Crer des objets


A JOUTER DES MTHODES

On peut ensuite dfinir des mthodes pour interagir avec les


objets de ce type.

Il s'agit en quelque sorte de fonctions propres cette classe.

Toutes ces mthodes doivent prendre au moins un argument,


qui est nomm self :
Cet argument correspond l'objet lui-mme
Ce doit toujours tre le premier argument
Grce cet argument, on peut accder aux attributs de l'objets, grce
la syntaxe self.nomAttribut

Crer des objets


EXEMPLE
Dfinition d'une classe avec un constructeur et une mthode :
class Personne :

def __init__(self, p, n):


self.prenom = p
self.nom = n

def sePresenter(self):
s = "Bonjour, je m'appelle " + self.prenom + " " + self.nom + "!"
print(s)

x = Personne("Jack", "Smith")
x.sePresenter()

Rsultat :
Bonjour, je m'appelle Jack Smith!

Remarque importante : Lorsqu'on fait appel une mthode d'un objet, il est inutile de
renseigner le paramtre self.

Crer des objets


EXEMPLE
Ajout d'une mthode avec un argument supplmentaire :
class Personne :

def __init__(self, p, n):


self.prenom = p
self.nom = n

def sePresenter(self):
s = "Bonjour, je m'appelle " + self.prenom + " " + self.nom + "!"
print(s)

def changerDeNom(self, nouveauNom):


self.nom = nouveauNom

x = Personne("Jack", "Smith")
x.sePresenter()
x.changerDeNom("Doe")
x.sePresenter()

Rsultat :
Bonjour, je m'appelle Jack Smith!
Bonjour, je m'appelle Jack Doe!

Crer des objets


QUELQUES MTHODES PARTICULIRES
ET LA FONCTION PRINT ?
Exemple :
class Personne :

def __init__(self, p, n):


self.prenom = p
self.nom = n

x = Personne("Jack", "Smith")
print(x)

Rsultat :
<__main__.Personne object at 0x029E0990>

Par dfaut, la fonction print ne sait pas quoi faire lorsqu'on


l'utilise sur un objet de type inconnu.

Quelques mthodes particulires


L A MTHODE __REPR__
Pour "expliquer" Python comment utiliser la fonction print sur
votre classe, il vous suffit de dfinir une mthode __repr__ pour
votre classe

Cette fonction doit renvoyer une chane de caractres


C'est cette chane qui sera affiche quand on utilisera la fonction print

Cette fonction prend un seul argument : self

Il n'est pas possible de changer le nom de cette mthode.

Remarque : Il existe en fait une autre mthode spciale pour


l'affichage, __str__, mais si elle n'est pas dfinie, Python utilise la
mthode __repr__ la place

Quelques mthodes particulires


L A MTHODE __REPR__ : EXEMPLE
Exemple
class Personne :

def __init__(self, p, n):


self.prenom = p
self.nom = n

def __repr__(self):
s = "Personne : " + self.prenom + " " + self.nom
return s

x = Personne("Jack", "Smith")
print(x)

Rsultat
Personne : Jack Smith

Quelques mthodes particulires


METHODES "SPCIALES"
Il existe ainsi plusieurs mthodes "spciales" que l'on peut
dfinir pour une classe

Toutes ces mthodes ont un nom de la forme


__nomDeLaMethode__ (quatre underscores, deux avant et
deux aprs)

Ces mthodes "spciales" permettent de dfinir certaines


oprations classiques pour cette classe
Test de comparaison : galit (__eq__), plus grand que (__gt__),
Arithmtique : addition (__add__), soustraction (__sub__),
multiplication (__mul__),
Indexation : accs au ime lment (__getitem__) (symbole []),

Quelques mthodes particulires


L A MTHODE __EQ__
Question : Que renvoie le code suivant ?

class MaClasse:

def __init__(self, a, b):


self.a = a
self.b = b

x = MaClasse(1, 2)
y = MaClasse(1, 2)
print(x == y)

False

Quelques mthodes particulires


L A MTHODE __EQ__

La mthode __eq__ permet d'indiquer comment comparer


deux objets d'une mme classe

Si cette mthode n'est pas dclare, deux objets ne sont


gaux que s'ils font rfrence la mme entit

Cette mthode doit avoir les caractristiques suivantes


Se nommer __eq__ (toujours avec quatre underscores : deux avant,
et deux aprs)
Prendre deux paramtres : self, et le deuxime objet comparer
Renvoyer un boolen (True si les deux objets sont identiques, et
False sinon)

Quelques mthodes particulires


L A MTHODE __EQ__
Question : Que renvoie le code suivant ?

class MaClasse:

def __init__(self, a, b):


self.a = a
self.b = b

def __eq__(self, deuxiemeObjet):


return (self.a == deuxiemeObjet.a) and (self.b ==
deuxiemeObjet.b)

x = MaClasse(1, 2)
y = MaClasse(1, 2)
print(x == y)

True

Quelques mthodes particulires


HRITAGE
UNE NOTION CLEF
L'hritage est une notion trs importante en programmation
oriente objet.

Il existe plusieurs termes pour parler d'hritage


Une classe B "hrite" d'une classe A
Une classe B "descend" d'une classe A
Une classe B est un "cas particulier" d'une classe A
Etc.

Avantages :
Une classe "fille" bnficie de tout ce qui a t dclar pour la classe
"mre" (attributs et mthodes)
Mais elle peut aussi possder des attributs et des mthodes qui lui
sont propres

Hritage
EXEMPLE : LE MONDE ANIMAL

Classes
Les classes Vertebre et Invertebre hritent de la classe Animal
Les classes Mammifere, Oiseau, Poisson, etc. hritent de la classe Vertebre

Attributs
L'attribut estVivant pourra tre dfini au niveau de la classe Animal
L'attribut nombreVertebres pourra tre dfini au niveau de la classe Vertebre
L'attribut branchies pourra tre dfini au niveau de la classe Poisson

Mthodes
La mthode mourir pourra tre dfini au niveau de la classe Animal
La mthode allaiter pourra tre dfini au niveau de la classe Mammifere

Hritage
L'HRITAGE EN PYTHON

Pour dclarer qu'une classe B hrite d'une classe A, il faut


l'indiquer dans la dclaration de la classe B :
Le nom de la classe "mre" est indique entre parenthse aprs le
nom de la classe "fille"

Syntaxe :
class ClasseA:
# Details de la classe ClasseA

class ClasseB(ClasseA):
# Details de la classe ClasseB

Hritage
UTILISER L'EXISTANT
Qu'affiche le code ci-dessous ?
class Animal:

def __init__(self):
self.estVivant = True

class Vertebre(Animal):

def __init__(self, nb):


self.nombreVertebres = nb

a0 = Animal()
print(a0.estVivant)
v0 = Vertebre(5)
print(v0.estVivant)

True
AttributeError: 'Vertebre' object has no attribute 'estVivant'

Hritage
UTILISER L'EXISTANT

Pour profiter de tout ce qui a t dfini pour la classe "mre",


il faut appeler son constructeur dans le constructeur de la
classe "fille"

Syntaxe :
class ClasseB(ClasseA):

def __init__(self, arg):


ClasseA.__init__(self)
# Elements specifiques a ClasseB

Hritage
UTILISER L'EXISTANT
Qu'affiche le code ci-dessous ?
class Animal:

def __init__(self):
self.estVivant = True

class Vertebre(Animal):

def __init__(self, nb):


Animal.__init__(self)
self.nombreVertebres = nb

a0 = Animal()
print(a0.estVivant)
v0 = Vertebre(5)
print(v0.estVivant)

True
True

Hritage
A JOUTER DES ATTRIBUTS

Pour ajouter des attributs spcifiques la classe "fille", il suffit


de le faire dans le constructeur de cette dernire

Exemple :
class Vertebre(Animal):

def __init__(self, nb):


Animal.__init__(self)
self.nombreVertebres = nb

Hritage
A JOUTER DES MTHODES
Pour ajouter des mthodes spcifiques la classe "fille", il suffit de les dclarer
dans l'intrieur de cette classe :

Exemple :
class Vertebre(Animal):

def __init__(self, nb):


Animal.__init__(self)
self.nombreVertebres = nb

def afficherNombreVertebres(self):
print("Nombre de vertebres : ", self.nombreVertebres)

v0 = Vertebre(5)
print(v0.estVivant)
v0.afficherNombreVertebres()

True
Nombre de vertebres : 5

Hritage
MINI-TD
PROCHAINE SANCE

Vendredi 11 dcembre
[TD] TROLLS ET CHTEAUX

Вам также может понравиться