Programmation Orientée Objet


Thème 1 - Partie B

C'est quoi un objet ?

La programmation orientée objet (POO), ou programmation par objet, est un paradigme de programmation informatique.
En POO, on décrit les propiétés d'un objet.

Classe & instance

Les classes sont les modèles générique qui permettent de définir les propriétés de chaque objet issue d’une même classe.
Un objet est une instance d’une classe.

attributs & méthodes

Un objet est composé d’attributs et de méthodes :

  • Les attributs sont les propriétés statiques de l’objet, à la manière des variables. Ce sont de données liées à l’objet
  • Les méthodes définissent les interactions de l’objet. Ce sont des fonctions liées à l’objet


class Sorcier:
    pass

        

class Sorcier:
    pass

sorcier1 = Sorcier()
        

class Sorcier:
    pass

sorcier1 = Sorcier()
sorcier2 = Sorcier()
    

class Sorcier:
    pass

 
    

La méthode
__init__

Initialiser une classe


class Sorcier:
    
    def __init__(self):

 
    

class Sorcier:

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

            

 
    

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"


 
    

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"
        self.maison = "Griffondor"


 
    

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"
        self.maison = "Griffondor"
        self.age = 11

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"
        self.maison = "Griffondor"
        self.age = 11
        self.sorts = []
    

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"
        self.maison = "Griffondor"
        self.age = 11
        self.sorts = []
            
sorcier1 = Sorcier()
sorcier2 = Sorcier()
        
 
    

class Sorcier:

    def __init__(self):
        self.prenom = "Harry"
        self.nom = "Potter"
        self.maison = "Griffondor"
        self.age = 11
        self.sorts = []
            
sorcier1 = Sorcier()
sorcier2 = Sorcier()
        
print(sorcier1.prenom)
print(sorcier2.prenom)

    

class Sorcier:

    def __init__(self,prenom, nom, maison, age):
        self.prenom = prenom
        self.nom = nom
        self.maison = maison
        self.age = age
        self.sorts = []
    

class Sorcier:

    def __init__(self,prenom, nom, maison, age):
        self.prenom = prenom
        self.nom = nom
        self.maison = maison
        self.age = age
        self.sorts = []

            
harry = Sorcier("Harry","Potter","Griffondor",11)
    

Créer des méthodes


class Sorcier:
    def __init__(self,prenom, nom, maison, age):
        self.prenom = prenom
        self.nom = nom
        self.maison = maison
        self.age = age
        self.sorts = []
    

class Sorcier:
    def __init__(self,prenom, nom, maison, age):
        self.prenom = prenom
        self.nom = nom
        self.maison = maison
        self.age = age
        self.sorts = []

    def presentation(self):
    

class Sorcier:
    def __init__(self,prenom, nom, maison, age):
        self.prenom = prenom
        self.nom = nom
        self.maison = maison
        self.age = age
        self.sorts = []

    def presentation(self):
        print(f"Bonjour je m'appelle {self.prenom} {self.nom}, je suis de la maison {self.maison}")

    

Encapsulation

Exercice


Définir une classe Eleve qui possède :
  • Des attributs :
    • prenom : initialisé par le constructeur
    • notes : une liste vide
  • Une méthodes :
    • get_moyenne : méthode qui renvoie la moyenne d'un élève
Créer l'élève Aymane de type Eleve.
Lui attribuer les notes 8 et 30.
Afficher sa moyenne

Encapsulation

L’encapsulation est le regroupement de données et de méthodes dans une classe afin que vous puissiez masquer les informations et restreindre l’accès de l’extérieur.

Attributs privés

On peut vouloir que certains attributs ne soient pas directement accessible.
On peut aussi vouloir vérifier que les valeurs données à certains attributs respect des régles

En Python


Pour protéger un attribut ou une méthode, on le préfixe par _ (1 espace souligné) ou __ (2 espaces soulignés)

Accesseur et mutateur

  • Les accesseurs méthodes permettant d'accéder aux données d'un objet, parfois getter (appellation d'origine anglophone)
  • Les mutateur méthodes permettant d'accéder aux données d'un objet, parfois setter

En python

Assertion

1. a) Quelles sont les assertions à prévoir pour vérifier que l’arôme et la durée correspondent bien à des valeurs acceptables. Il faudra aussi expliciter les commentaires qui seront renvoyés.

Pour rappel :
• L’arôme doit prendre comme valeur 'fraise', 'abricot', 'vanille' ou 'aucun'.
• Sa date de durabilité minimale (DDM) est une valeur positive.
1. b) Pour créer un yaourt, on exécutera la commande suivante :
Mon_Yaourt = Yaourt('fraise',24)

Quelle valeur sera affectée à l’attribut genre associé à Mon_Yaourt ?
1. c) Écrire en python une fonction GetArome(self), renvoyant l’arôme du yaourt créé.
2. On appelle mutateur une méthode permettant de modifier un ou plusieurs attributs d’un objet.

Sur votre copie, écrire en Python le mutateur SetArome(self,arome) permettant de modifier l’arôme du yaourt.

On veillera à garder une cohérence entre l’arôme et le genre.