Programmation orientée objet

Des fonctions aux classes

En tant qu'utilisateur nous avons déjà utilisé des objets en Python, par exemple, la fonction islower() appliquée à une chaine de caractères contenant au moins une lettre , par exemple si s = 'a', alors s.islower() retourne True

On dit que islower() est une méthode de la classe String et s est un objet de cette classe

Avec tkinter nous avons aussi utilisé la fonction create_rectangle() pour dessiner des carrés de la manière suivante, zoneGraphique.create_rectangle()

A chaque fois la syntaxe est objet.fonction(), mais qu'est ce qu'un objet ?

Un objet est une instanciation d'une classe, ce qui signifie qu'un objet est construit à partir d'un prototype appelé classe.La notion de fonction est une étape dans la modularisation d'un programme, mais il reste le problème des variables globales et aussi le travail en équipe

Comment faire un programme à plusieurs si on ne comprend pas bien les différentes parties du programme ?

On décide de faire autrement.Un programme est "vu" comme l'interaction de plusieurs modules "étanches", appelées classes; ces modules peuvent interagir par leur interface,les méthodes de la classe

Ainsi chaque programmeur sur un projet peut se consacrer à une classe, la seule contrainte est de bien documenter et commenter l'interface, pour que les autres membres de l'équipe puissent utiliser la classe

Par exemple si on veut faire un programme qui dessine des images de nombres complexes, par exemple pour dessiner un type de fractales, un programmeur A va travailler sur une classe Complexe qui va définir ainsi un nouveau type, le type Complexe

Un autre programmeur B va utiliser cette classe pour dessiner des images de un ou plusieurs nombres complexes

la classe Complexe

Une méthode appelée constructeur joue un rôle particulier puisqu'elle crée en mémoire l'objet Un mot réservé important self, désigne l'objet "en cours" de construction Une classe crée un nouveau type
 
 
class Complexe:
#Constructeur
    def __init__(self,x,y):
        self.pReel = x
        self.pImaginaire = y
#Méthodes
    def conjugue(self):
        return Complexe(self.pReel,-self.pImaginaire)
    
    def module(self):
        pass
    
    def toString(self):
        pass
#instanciation : on construit deux nombres complexes
z1 = Complexe(1,-2)
z2 = Complexe(0,2)
    

 

Exercice

  1. Ecrire la méthode module(self)
  2. Ecrire la méthode toString(self) qui retourne une chaîne de caractère contenant les champs de self
  3. Calculer et faire afficher le module de z1, puis le conjugué de z1

la classe ComplexeGraphique

La classe permettra de donner les images d'une liste de nombres complexes

Mettre au point la classe ci-dessous

 
 
class ComplexeGraphique(Tk):
#Constructeur
    def __init__(self,largeur,hauteur,liste):
        self.fenetre = Tk.__init__(self)
        self.largeur = largeur
        self.hauteur = hauteur
        self.zoneGraphique = Canvas(self.fenetre,width = largeur,height = hauteur)
        self.zoneGraphique.pack()
        self.traceRepere()
        self.dessinerImages(liste)
#Méthodes
    def traceRepere(self):
        pass
    
    def dessinerImages(liste):
        pass
    
    
#instanciation : on construit une liste de nombres complexes
liste = []
#dessiner les images de chaque nombre complexe de la liste
.....à compléter .........................................
    

 

Le jeu tout blanc tout noir en POO

Pour illustrer l'avantage de découper un projet en classe on revient sur un jeu que l'on a déjà programmé le jeu Blanc ou Noir. Le but est à la fois de "faire disparaître" les variables globales et d'améliorer le travail en équipe

Exercice

  • Analyser le jeu , combien de classes ? Au moins deux , l'une étant la classe Grille (quels sont les champs ? quels sont les méthodes ?) l'autre la classe Jeu(Tk) qui gère la partie graphique
  • Mettre au point les classes