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,...)
passage de paramètres
CODE
CODE
procédure
DONNEES
DONNEES
début
CODE
DONNEES
Années 60-70 : langages procéduraux (C, Pacal,...)
Les variables:
Le chemin d'exécution s'apparente à un arbre
(appels - sous appels - ...)
Les fonctions définissent une interface:
Années 70-80 : langages objets (Modula puis C++, Java...)
Un objet :
Encapsulation
CODE
DONNEES
Structures
Méthodes
Classe
Années 70-80 : langages objets (Modula puis C++, Java...)
CODE
DONNEES
CODE
DONNEES
CODE
DONNEES
CODE
DONNEES
Utilisateur
messages
messages
messages
création
CODE
DONNEES
destruction
Classe/objets
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:
qui sont réalisées à l'aide d'un constructeur
Le constructeur est une méthode de classe
Opérations usuelles:
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,...)