Objets

Les premiers langages informatiques  obéissaient à une forme assez simple:

  • d’un coté le code (les instructions)

  • de l’autre : les données

Si on représente dans le temps la manière dont s’exécute un programme informatique :

début

temps

CODE

DONNEES

lecture/écriture

Le code a acces à une zone de données sur laquelle il peut effectuer des lectures et des ecriture.

Années 70 : langages procéduraux (C, Pacal,...)

  • modularité
  • procédures
  • passage de paramètres

passage de paramètres

CODE

CODE

procédure

DONNEES

DONNEES

début

CODE

DONNEES

Années 60-70 : langages procéduraux (C, Pacal,...)

  • modularité
  • procédures
  • passage de paramètres

Les variables:

  • décrites par un nom
  • associées à des données
  • visibles dans un espace de nommage

Le chemin d'exécution s'apparente à un arbre

(appels - sous appels - ...)

Les fonctions définissent une interface:

  • nom
  • paramètres d'entrée
  • paramètres de sortie

Années 70-80 : langages objets (Modula puis C++, Java...)

  • classe /objet
  • constructeur
  • événement/message
  • héritage

Un objet :

Encapsulation

  • public
  • privé
  • partagé

CODE

DONNEES

Structures

Méthodes

Classe

Années 70-80 : langages objets (Modula puis C++, Java...)

  • classe /objet
  • constructeur
  • événement/message
  • héritage

CODE

DONNEES

CODE

DONNEES

CODE

DONNEES

CODE

DONNEES

Utilisateur

messages

messages

messages

création

CODE

DONNEES

destruction

Classe/objets

  • Une chaise appartient à la catégorie des chaises. Elle obéit à certaines règles (qui sont les mêmes pour toutes les chaises):
    • 4 pieds
    • une assise
    • un dossier
  • opérations possibles :
    • utiliser (s'asseoir)
    • transporter
    • peindre
    • laver
    • ...
  • caractéristiques particulières:
    • bois/métal/plastique
    • pliable ou non
    • couleur
    • forme

instance de

Héritage

principe de classification :

arborescence de classe qui va du général au particulier

classe

espèce

sous

espèce

siège

chaise

intérieur

extérieur

tabouret

pouf

assise

pieds (n)

pieds (n)

dossier

occupé

poser

plier

asseoir(x)

vernir

La classe contient des définitions:

  • de données
  • de méthodes

qui sont réalisées à l'aide d'un constructeur

Le constructeur est une méthode de classe

  • qui initialise un nouvel objet (avec son espace de nommage)
  • crée une nouvelle instance de la classe

 

Opérations usuelles:

  • lecture (afficher le contenu d'un objet)
  • écriture (mise à jour/suppression)
  • opérations/ calcul / utilisation

 

classe

classe'

CODE

DONNEES

CODE

DONNEES

CODE

DONNEES

CODE

DONNEES

CODE

DONNEES

Exemple : la ménagerie

Patrick

Tic et Tac

Pocahontas

Totoro

patrick = {'RACE':'hamster', 
           'TYPE':'rongeur',
           'ETAT':'affamé',
           'LIEU':litière}
tic = {'RACE':'tamia', 
       'TYPE':'rongeur',
       'ETAT':'affamé',
       'LIEU':litière}
pocahontas = {'RACE':'opossum', 
          'TYPE':'marsupial',
          'ETAT':'endormi',
          'LIEU':nid}
tac = {'RACE':'tamia', 
       'TYPE':'rongeur',
       'ETAT':'affamé',
       'LIEU':litière}
totoro = {'RACE':'ili pika', 
          'TYPE':'rongeur',
          'ETAT':'repus',
          'LIEU':mangeoire}

Animaux

litière = {'id_equip':'litière','DISPONIBILITE':'libre'}
mangeoire = {'id_equip':'mangeoire', 'DISPONIBILITE':'occupé'}
roue = {'id_equip':'roue','DISPONIBILITE':'libre'}
nid = {'id_equip':'nid','DISPONIBILITE':'occupé'}

Equipement

Exemple : la ménagerie

Les animaux passent par différents états au cours de la journée:

  • Lorsqu’ils se réveillent, ils sont "affamés" et doivent donc être placés sur la mangeoire pour être nourris.

  • Une fois qu'ils ont mangé, ils sont "repus" et ont besoin d'exercice. Ils doivent donc être placés sur la roue.

  • Après avoir fait du sport, ils sont "fatigués" et ont besoin de dormir. Ils doivent donc être mis dans le nid pour se reposer.

  • Une fois dans le nid, ils sont "endormis".

On considère les animaux et les équipements comme des ensembles d'entités. Les animaux sont décrits par leur nom (unique), leur race, leur type et leur état. De même, les équipements sont décrits par leur nom et leur état.

1. Comment représente-t-on le fait qu'un animal n'occupe qu'un équipement à la fois?

2. Comment représente-t-on le fait que certains équipements sont parfois occupés, parfois inoccupés?

3. Quelle est la relation qui lie les animaux aux équipements?

Exemple : la ménagerie

Exemple : la ménagerie

Diagramme de classe (UML)

Les classes en Python

class Equipement:
  pass

Une classe minimale:

Des instances de classe (type + espace de nommage):

roue = Equipement() 
roue.disponibilité = 'occupé'
nid = Equipement() 
nid.disponibilité = 'occupé'
mangeoire = Equipement() 
mangeoire.disponibilité = 'libre'
litière = Equipement() 
litière.disponibilité = 'libre'

Les classes en Python

class Equipement:
  def __init__(self, disponibilité):
    self.disponibilité = disponibilité
  

Une classe avec constructeur:

Des instances de classe:

roue = Equipement('occupé') 
nid = Equipement('occupé') 
mangeoire = Equipement('libre') 
litière = Equipement('libre') 

Les classes en Python

class Equipement:
    def __init__(self, id_equip, capacité): # constructeur
        self.id_equip = id_equip
        self.disponibilité = 'libre'
        self.occupants = []
        self.capacité = capacité
  

Une classe avec constructeur:

Des instances de classe:

nid = Equipement('nid', 1) 
litière = Equipement('litière', 10) 
mangeoire = Equipement('mangeoire', 1) 
roue = Equipement('roue', 1)

Les classes en Python

class Animal:
    def __init__(self, race, type, etat, lieu):
        self.race = race
        self.type = type
        self.etat = etat
        self.lieu = lieu
  

La classe Animal:

Instances de classe:

tac = Animal('tamia','rongeur','affamé',litière)
tic = Animal('tamia','rongeur','affamé',litière)
patrick = Animal('hamster','rongeur','affamé',litière)
patrick = Animal('ili pika','rongeur','repus',mangeoire)
pocahontas = Animal('opossum','marsupial','endormi',nid)

Les classes en Python : écriture

class Animal:
    def __init__(self, race, type, etat, lieu):
        self.race = race
        self.type = type
        self.etat = etat
        self.lieu = lieu
        lieu.occuper(self)
  

Occuper un lieu

class Equipement:
    def __init__(self, id_equip, disponibilité, capacité): # constructeur
        self.id_equip = id_equip
        self.disponibilité = disponibilité
        self.occupants = []
        self.capacité = capacité
        
    def occuper(self, animal): # méthode d'objet
        if len(self.occupants) < self.capacité:
            self.occupants.append(animal)
            if len(self.occupants) == self.capacité:
                self.disponibilité = 'occupé'

Les classes en Python: lecture

Afficher

class Equipement:
    def __init__(self, id_equip, disponibilité, capacité): # constructeur
        self.id_equip = id_equip
        self.disponibilité = disponibilité
        self.occupants = []
        self.capacité = capacité
        
    def occuper(self, animal): # méthode d'objet
        if len(self.occupants) < self.capacité:
            self.occupants.append(animal)
            if len(self.occupants) == self.capacité:
                self.disponibilité = 'occupé'
                
    def __str__(self):
        return f"disponibilité : {self.disponibilité}, capacité: {self.capacité}" 

Test :

print(litière)
disponibilité : libre, capacité: 10

Les classes en Python: lecture

Afficher

class Animal:
    def __init__(self, race, type, etat, lieu):
        self.race = race
        self.type = type
        self.etat = etat
        self.lieu = lieu
        lieu.occuper(self)
    
    def __str__(self):
        return f"race : {self.race}, type: {self.type}, etat: {self.etat}, lieu: {self.lieu.id_equip}"

Test :

print(pocahontas)
race : opossum, type: marsupial, etat: endormi, lieu: nid

Les classes en Python : calcul

Test de compatibilité

class Equipement:
    def __init__(self, id_equip, capacité, compatibilité): # constructeur
        self.id_equip = id_equip
        self.disponibilité = 'libre'
        self.compatibilité = compatibilité
        self.occupants = []
        self.capacité = capacité
        
    def occuper(self, animal): # méthode d'objet
        if len(self.occupants) < self.capacité:
            self.occupants.append(animal)
            if len(self.occupants) == self.capacité:
                self.disponibilité = 'occupé'
                
    def est_compatible(self, animal): # méthode d'objet
        if animal.état == self.compatibilité:
            return True
        else:
            return False
                
    def __str__(self):
        return f"disponibilité : {self.disponibilité}, capacité: {self.capacité}" 
nid = Equipement('nid', 1, 'fatigué') 
litière = Equipement('litière', 10, 'endormi') 
mangeoire = Equipement('mangeoire', 1, 'affamé') 
roue = Equipement('roue', 1, 'repus')

Années 70 : langages procéduraux (C, Pacal,...)

  • modularité
  • procédures
  • passage de paramètres

Objets

By Emmanuel Dauce