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
Objets
- 816