Vous êtes sur la page 1sur 126

introduction types classes new référence analyse usage this

Introduction : classes et objets

Programmation Orientée Objet

Licence mention Informatique


Université Lille – Sciences et Technologies

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 1
introduction types classes new référence analyse usage this

préliminaire

Objectifs :
présenter les concepts de base de la programmation objet
adopter une « approche objet » de la modélisation,
connaı̂tre et savoir mettre en œuvre les concepts fondamentaux
préparer aux UE Projet du S4 et Conception Orientée Objet du S5

portail.fil.univ-lille1.fr/ls3/poo

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 2
introduction types classes new référence analyse usage this

à l’issue de ce module vous devriez...

... connaı̂tre les éléments de base de la programmation objet

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 3
introduction types classes new référence analyse usage this

à l’issue de ce module vous devriez...

... connaı̂tre les éléments de base de la programmation objet


... maitriser le vocabulaire de la programmation objet :
,→ classe, instance, méthode, interface, attribut, constructeur,
encapsulation, polymorphisme, héritage
... savoir décomposer un problème simple en classes et objets
... savoir expliquer ce qui différencie la programmation objet des autres
paradigmes
... savoir expliquer ce qu’est le polymorphisme, en présenter les
avantages et savoir expliquer ce qu’est le “late-binding”
... connaı̂tre le principe ouvert-fermé, être en mesure de l’expliquer et de
l’appliquer sur des exemples simples
... pouvoir identifier certaines situations de mauvaises conception objet
et les corriger
... mettre en œuvre l’héritage dans des cas simples
... connaitre le mécanisme de lookup

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 3
introduction types classes new référence analyse usage this

à l’issue de ce module vous devriez...

... savoir spécifier, coder et tester un problème objet simple


dans le langage JAVA

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 4
introduction types classes new référence analyse usage this

à l’issue de ce module vous devriez...

... savoir spécifier, coder et tester un problème objet simple


dans le langage JAVA
... connaı̂tre les principaux éléments de la syntaxe du langage java
... être en mesure d’écrire un programme dans le langage java
... savoir écrire des tests unitaires simples
... pouvoir expliquer clairement le rôle et la sémantique des éléments de
langage suivants et savoir les utiliser :
,→ new, class, interface, public, private, this, static, final,
package, import, throws, throw, implements, extends, super
... comprendre le transtypage (upcast/downcast)
... être en mesure de choisir une structure de données appropriée et
savoir utiliser les types java List, Set, Map et Iterator
... savoir gérer les exceptions et connaı̂tre la différence entre capture et
levée d’exception
... savoir utiliser les “outils” liés à la plateforme java :
,→ javac, java (et classpath), javadoc, jar

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 4
introduction types classes new référence analyse usage this

programmer

question
C’est quoi programmer ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5
introduction types classes new référence analyse usage this

programmer

1 analyse, étude du problème à modéliser :


spécifications, écriture de la documentation et des tests

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5
introduction types classes new référence analyse usage this

programmer

1 analyse, étude du problème à modéliser :


spécifications, écriture de la documentation et des tests
2 conception : mise en place des solutions techniques

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5
introduction types classes new référence analyse usage this

programmer

1 analyse, étude du problème à modéliser :


spécifications, écriture de la documentation et des tests
2 conception : mise en place des solutions techniques
3 codage = écriture du code informatique conforme aux spécifications,
validation par les tests

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5
introduction types classes new référence analyse usage this

programmer

1 analyse, étude du problème à modéliser :


spécifications, écriture de la documentation et des tests
2 conception : mise en place des solutions techniques
3 codage = écriture du code informatique conforme aux spécifications,
validation par les tests

Eléments à considérer :

maintenance – évolution – réutilisation

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5
introduction types classes new référence analyse usage this

programmation objet

paradigme objet
Un programme est un ensemble d’objets qui interagissent.

reprend et prolonge la démarche modulaire : décomposition d’un


problème en parties simples,
(en java) la programmation des traitements reste impérative,
plus intuitive car s’inspire du monde réel pour une modélisation « plus
naturelle » : « plus proche » du problème
facilite la réutilisation et la conception de « grands » logiciels

quelques langages : Java, C#, Smalltalk, Python, php5, ...

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 6
introduction types classes new référence analyse usage this

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 7
introduction types classes new référence analyse usage this

8
"timoleon"
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 7
introduction types classes new référence analyse usage this

def is even (x ) :
return x % 2 == 0

>>> is even (8)

>>> is even ("timoleon")

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 8
introduction types classes new référence analyse usage this

type

? c’est quoi un type ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 9
introduction types classes new référence analyse usage this

type

type
un type de données définit
l’ensemble des valeurs possibles pour les données du type
les opérations applicables sur ces données

toute donnée a un type, toute variable a un type

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 9
introduction types classes new référence analyse usage this

typage dynamique
en Python ou Javascript le type d’une variable est implicitement défini par
sa valeur lors de son affectation, et le type de la variable peut changer au
cours d’une exécution

>>> x = 8 let x = 8;
>>> x x;
8 /* 8 */
>>> type(x) typeof(x ) ;
<class ’int’> /* number */
>>> x = "timoleon" x = "timoleon" ;
>>> type(x) typeof(x ) ;
<class ’str’> /* string */

le typage est dynamique

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 10
introduction types classes new référence analyse usage this

typage statique
en Java, comme en C, le type d’une variable est explicitement défini à sa
déclaration
il détermine les valeurs que peut prendre la variable et ne peut pas changer
le compilateur vérifie le typage

int x = 8;
x; /* 8 */

x = ”timoleon”; // interdit ! ne compile pas

le typage est statique

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11
introduction types classes new référence analyse usage this

compilation

code source code exécutable


langage de programmation 7−→ langage « machine »

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 12
introduction types classes new référence analyse usage this

compilation

code source code exécutable


langage de programmation 7−→ langage « machine »

plusieurs phases
1 analyse lexicale
2 analyse syntaxique : vérifie la syntaxe
3 analyse sémantique : vérifie le typage
4 optimisation de code

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 12
introduction types classes new référence analyse usage this

compilation

code source code exécutable


langage de programmation 7−→ langage « machine »

plusieurs phases
1 analyse lexicale
2 analyse syntaxique : vérifie la syntaxe
3 analyse sémantique : vérifie le typage
4 optimisation de code

en C la compilation est suivie de l’édition de liens : early-binding


pas en Java : late-binding voir plus tard dans le cours

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 12
introduction types classes new référence analyse usage this

machine virtuelle
un compilateur C génère un code en
langage machine binaire exécutable par
une machine hôte donnée

le compilateur java génère du


bytecode java
= langage machine virtuel
le code java s’exécute dans une
Java Virtual Machine (JVM)

la JVM interprète le bytecode pour l’exécuter


la JVM rend le code java indépendant de l’OS et de la machine hôte

« compile once, run everywhere »

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 13
introduction types classes new référence analyse usage this

int thermometre = 8;
int age = 8;
int price = 8;

public boolean age senior ( int x) { public float en fahrenheit ( int x) {


return x >= 70; return 9/5∗x + 32;
} }
intro . age senior (age ) ; intro . en fahrenheit (thermometre ) ;
intro . age senior (thermometre ) ; intro . en fahrenheit (age ) ;
intro . age senior ( price ) ; intro . en fahrenheit ( price ) ;

ne devrait pouvoir être appliqué ne devrait pouvoir être appliqué


qu’à des « âges » qu’à des « températures »
qui contrôle les opérations possibles ?
est majeur() ne doit être possible que pour des âges

les types de base ne suffisent pas


besoin de distinguer âges et températures même si les deux données sont
représentées par un entier
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 14
introduction types classes new référence analyse usage this

types composites
données sur des personnes caractérisées par leur nom et année de naissance

int a = 2003;
int b = 2001;
des variables séparées ne conviennent pas String c = "Alice" ;
String d = "Bob" ;

il faut un type composite, par exemple en Python un dictionnaire


>>> a l i c e = { ’annee’ : 2001, ’nom’ : "Alice" }
>>> bob = { ’annee’ : 2003, ’nom’ : "Bob" }

def est majeur (personne ) :


return 2020 − personne [ ’annee’ ] >= 18

>>> est majeur ( a l i c e )


>>> est majeur (bob)

possible car bob et alice partagent la même structure de clés


Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 15
introduction types classes new référence analyse usage this

on retrouve les mêmes problèmes qu’avec les types simples

articles caractérisés par un prix et une référence


>>> bidule = { ’prix’ : 17, ’reference’ : "JB007" }
>>> est majeur ( bidule )
AttributeError : ’dict’ object has no attribute ’age’

livres caractérisés par leur année de parution et leur nom :


>>> l o t r = { ’annee’ : 1954, ’nom’ : "Seigneur des Anneaux" }
>>> est majeur ( l o t r )
True

est majeur() ne devrait pouvoir être appliqué qu’à des « personnes »

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 16
introduction types classes new référence analyse usage this

bilan

les types de base (simples ou composites) ne suffisent pas


il faut pouvoir distinguer un « int age » et un « int thermometre »
des données composites de même nature doivent partager la même
structure
la possibilité d’appliquer une opération à une donnée doit être
contrôlée selon la nature de la donnée

il faut pouvoir définir ses propres types

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 17
introduction types classes new référence analyse usage this

un type définit les valeurs possibles et les opérations autorisées

un type Thermometre
valeurs possibles : la valeur en degré centigrade de type int
opérations autorisées : obtenir la valeur en Fahrenheit
un type Age
valeurs possibles : une donnée de type int
opérations autorisées : savoir si l’âge correspond à un âge sénior
un type Personne
valeurs possibles : un âge de type int et un nom de type String
opérations autorisées : savoir si la personne est majeure, obtenir l’âge
un type Article
valeurs possibles : un prix de type int et une référence de type String
opérations autorisées : obtenir le prix TTC

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 18
introduction types classes new référence analyse usage this

Programmation Objet

en programmation objet, les données sont représentées par des objets


la programmation objet consiste à définir les types des objets

un objet est composé de données (= d’autres objets)


un objet peut exécuter des opérations

un objet a un type et le type d’un objet définit


la structure des données qui composent cet objet
les attributs
les opérations (= traitements) que peut exécuter cet objet
les méthodes

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 19
introduction types classes new référence analyse usage this

classes langages de classes


classe

une classe est un type objet

une classe définit


les méthodes et les traitements associés
,→ le comportement des objets
la structure des attributs nécessaires à la réalisation des traitements
,→ l’état des objets

le comportement agit sur l’état et l’état influence le comportement

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 20
introduction types classes new référence analyse usage this

méthodes et attributs

méthode
une méthode est une fonction qui appartient à une classe
« function member »
une méthode ne peut être utilisée que par les objets de la classe
un objet ne peut exécuter que les méthodes de sa classe

attribut
un attribut est une variable qui appartient à un objet
« data member »
les attributs sont définis par la classe de l’objet, chaque attribut a un type

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 21
introduction types classes new référence analyse usage this

instance

une classe permet de créer des objets


ces objets sont du type de cette classe

instance
on appelle instance un objet créé par une classe
tout objet est instance d’une classe

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 22
introduction types classes new référence analyse usage this

définir une classe c’est


1 définir les méthodes que pourront exécuter les objets de la classe
tous les objets d’un même classe peuvent exécuter les mêmes méthodes

chaque traitement réalisé par le programme est défini dans une


méthode

2 définir les attributs des objets de la classe


tous les objets d’une même classe ont la même structure d’attributs
mais les valeurs des attributs sont « personnelles » à chaque objet,
elles peuvent être différentes d’un objet à l’autre

les données du programme sont mémorisées dans les attributs des


objets

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 23
introduction types classes new référence analyse usage this

envoi de message

on interagit avec un objet uniquement via ses méthodes


les méthodes de sa classe

on parle d’ « envoi de message » à l’objet

l’objet a le contrôle sur le message qui lui est envoyé

utilisation de la notation pointée


unePersonne.estMajeur()

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 24
introduction types classes new référence analyse usage this

exemples
classe Thermometer
structure attributs : value de type int
méthodes : getValue(), toFahrenheit(), toString()

t1 et t2 deux objets de la classe


Thermometer
→ même structure d’attributs, mais valeurs
différentes

classe Person
structure attributs : birthYear de type int, name de type String
méthodes : isAdult(), isOlderThan(Person), getBirthYear(),
getName(), toString()

alice un objet de la classe Person

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 25
introduction types classes new référence analyse usage this

Person
name : String
Thermometer
birthYear : int
value : int
getName() : String
getValue() : int
getBirthYear() : int
toFahrenheit() : int
isAdult() : boolean
toString() : String
isOlderThan(p : Person) : boolean
toString() : String

t1.toFahrenheit() 7→ 53.6 alice.getBirthYear() 7→ 19


t2.toFahrenheit() 7→ 68 alice.isAdult() 7→ true
t1.toString() 7→ "temperature is 12o C" alice.toString() 7→ "Alice is born in 2001"
t1.isAdult() n’est pas possible alice.toFahrenheit() n’est pas possible

l’objet « contrôle » le message


sa légalité
pas d’ambiguı̈té pour deux messages (méthodes) de même nom dans
des classes différentes (cf. toString() )

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 26
introduction types classes new référence analyse usage this

synthèse
classe = définition/modèle

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 27
introduction types classes new référence analyse usage this

synthèse
classe = définition/modèle

instance = objet conforme au modèle de la classe qui l’a créée

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 27
introduction types classes new référence analyse usage this

synthèse
classe = définition/modèle
décrit la structure de l’état des objets
les attributs et leurs types
définit les envois de messages possibles
les méthodes
=⇒ interface d’une classe
abstrait

instance = objet conforme au modèle de la classe qui l’a créée

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 27
introduction types classes new référence analyse usage this

synthèse
classe = définition/modèle
décrit la structure de l’état des objets
les attributs et leurs types
définit les envois de messages possibles
les méthodes
=⇒ interface d’une classe
abstrait

instance = objet conforme au modèle de la classe qui l’a créée


son état obéit à la structure définie
,→ association de valeurs aux attributs
n’accepte que les messages définis par la classe
= n’exécute que les méthodes définies par la classe
concret
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 27
introduction types classes new référence analyse usage this

constructeurs

à l’exécution, il faut créer les objets conformément au modèle


constructeur
Pour créer un objet il faut utiliser un constructeur.
Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit
au modèle défini par la classe du constructeur.

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 28
introduction types classes new référence analyse usage this

constructeurs

à l’exécution, il faut créer les objets conformément au modèle


constructeur
Pour créer un objet il faut utiliser un constructeur.
Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit
au modèle défini par la classe du constructeur.

un constructeur a deux rôles


1 créer les attributs de l’objet (la structure de l’état)
=⇒ réserver l’espace mémoire
2 donner les valeurs initiales des attributs (« initialiser l’objet »)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 28
introduction types classes new référence analyse usage this

constructeurs

à l’exécution, il faut créer les objets conformément au modèle


constructeur
Pour créer un objet il faut utiliser un constructeur.
Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit
au modèle défini par la classe du constructeur.

un constructeur a deux rôles


1 créer les attributs de l’objet (la structure de l’état)
=⇒ réserver l’espace mémoire
2 donner les valeurs initiales des attributs (« initialiser l’objet »)

chaque classe doit définir comment sont initialisés les attributs


,→ il peut y avoir plusieurs manières de réaliser cette initialisation

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 28
introduction types classes new référence analyse usage this

en Java

constructeur en Java

new + nom de la classe (+ param)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 29
introduction types classes new référence analyse usage this

en Java

constructeur en Java

new + nom de la classe (+ param)

exemple :
new Thermometer()
new Thermometer(20)
new Person("Alice", 2001)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 29
introduction types classes new référence analyse usage this

en Java

constructeur en Java

new + nom de la classe (+ param)

exemple :
new Thermometer()
new Thermometer(20)
new Person("Alice", 2001)

en Java, si une classe ne définit pas de constructeur, alors il y a un


constructeur par défaut (constructeur sans paramètre)
,→ il existe seulement s’il n’y a pas d’autre constructeur déclaré

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 29
introduction types classes new référence analyse usage this

exemple
public class Thermometer {
private float temperature ; attribut
public Thermometer( float initialTemp ) { constructeurs
this . temperature = initialTemp ;
}
public Thermometer() {
this . temperature = 0; // ou : t h i s (0);
}
public float temperatureInCelsius () { méthodes
return this . temperature ;
}
public void changeTemperature( float newTemp) {
this . temperature = newTemp;
}
public String toString () {
return "current temperature is : "+this . temperature ;
}
public float temperatureInFahrenheit () {
return (9.0 f /5.0 f )∗ this . temperature+32;
}
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 30
introduction types classes new référence analyse usage this

référence

l’appel à un constructeur a pour résultat une référence vers l’objet créé.


cette référence = un pointeur vers l’identité de l’objet.
Elle peut être stockée dans une variable (de type objet).

important
La référence permet d’accéder à l’objet, mais n’est pas l’objet lui-même.
Une variable objet contient l’information pour accéder à l’objet.

cf. télécommande d’un téléviseur

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 31
introduction types classes new référence analyse usage this

en Java

déclaration variable
Les variables sont typées. Le type d’une variable est fixé à la déclaration.

Type variableId;

variableId est une référence qui peut pointer des objets de type Type (si
Type est un type objet).

affectation
L’opérateur d’affectation “=” permet d’attribuer une valeur à une variable.

variableId = expression;

La valeur de expression est affectée à variableId.


Cette valeur doit être du type de variableId.
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 32
introduction types classes new référence analyse usage this

une variable objet non initialisée vaut null


on peut déclarer et initialiser en même temps
un objet non référencé est perdu, on ne peut plus d’adresser à lui
,→ garbage collector

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 33
introduction types classes new référence analyse usage this

une variable objet non initialisée vaut null


on peut déclarer et initialiser en même temps
un objet non référencé est perdu, on ne peut plus d’adresser à lui
,→ garbage collector

Thermometer th1; // th1 vaut null


th1 = new Thermometer(20); // th1 référence l’objet créé
Thermometer th2 = new Thermometer(25); // déclaration et initialisation

th1 = new Thermometer(18); // th1 référence un autre objet


// l’objet précédent est perdu

Thermometer th3 = th1; // th3 référence le même objet que th1


th1 = new Thermometer(); // th1 référence un nouvel objet
// l’objet précédent est toujours référencé par th3

rappel : chaque appel à new crée un nouvel objet


Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 33
introduction types classes new référence analyse usage this

envoi de message
un envoi de message permet d’invoquer une méthode sur un objet
pour lui envoyer un message il faut une référence vers l’objet

reference.message(...)

le message doit être autorisé pour le type de la référence

Thermometer th1 = new Thermometer(25);


th1.temperatureInCelsius(); // -> 25
th1.changeTemperature(20);
th1.temperatureInCelsius(); // -> 20
th1.temperatureInFahrenheit(); // -> 68

la validité du message pour le type de la référence est vérifié à la


compilation
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 34
introduction types classes new référence analyse usage this

invocation de méthode

une méthode ne peut pas être utilisée autrement


qu’en étant invoquée sur un objet via un envoi de message à cet objet

l’objet invoquant = le receveur du message


il fait partie du contexte d’exécution de la méthode

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 35
introduction types classes new référence analyse usage this

exemple

thermomètres

Thermometer
temperature : float
Thermometer()
Thermometer(t : float)
inCelsius() : float()
changeTemperature(newT:float)
...

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 36
introduction types classes new référence analyse usage this

exemple

thermomètres, chaudières

Boiler
Thermometer power : int
temperature : float on : boolean
Thermometer() Boiler()
Thermometer(t : float) isOn() : boolean
inCelsius() : float() isOff() : boolean
changeTemperature(newT:float) turnOn()
... turnOff()
getPower() : int

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 36
introduction types classes new référence analyse usage this

exemple

thermomètres, chaudières et thermostats


Thermostat
Boiler thermo : Thermometer
Thermometer power : int boiler : Boiler
temperature : float on : boolean targetTemp : float
Thermometer() Boiler() Thermostat(b:Boiler,target:float)
Thermometer(t : float) isOn() : boolean currentTemperature(): float
inCelsius() : float() isOff() : boolean getTargetTemp() : float
changeTemperature(newT:float) turnOn() setTargetTemp( target : float)
... turnOff() temperatureChange(newT:float)
getPower() : int update()
...

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 36
introduction types classes new référence analyse usage this

exemple

thermomètres, chaudières et thermostats


Thermostat
Boiler thermo : Thermometer
Thermometer power : int boiler : Boiler
temperature : float on : boolean targetTemp : float
Thermometer() Boiler() Thermostat(b:Boiler,target:float)
Thermometer(t : float) isOn() : boolean currentTemperature(): float
inCelsius() : float() isOff() : boolean getTargetTemp() : float
changeTemperature(newT:float) turnOn() setTargetTemp( target : float)
... turnOff() temperatureChange(newT:float)
getPower() : int update()
...

Boiler b = new Boiler(1000, 20);


Thermostat t = new Thermostat(b); création d’un objet Thermometer
t.currentTemperature() envoi message à objet Thermometer
t.temperatureChange(10); cascade envois de message

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 36
introduction types classes new référence analyse usage this

exemple

thermomètres, chaudières et thermostats


Thermostat
Boiler thermo : Thermometer
Thermometer power : int boiler : Boiler
temperature : float on : boolean targetTemp : float
Thermometer() Boiler() Thermostat(b:Boiler,target:float)
Thermometer(t : float) isOn() : boolean currentTemperature(): float
inCelsius() : float() isOff() : boolean getTargetTemp() : float
changeTemperature(newT:float) turnOn() setTargetTemp( target : float)
... turnOff() temperatureChange(newT:float)
getPower() : int update()
...

Boiler b = new Boiler(1000, 20);


Thermostat t = new Thermostat(b); création d’un objet Thermometer
t.currentTemperature() envoi message à objet Thermometer
t.temperatureChange(10); cascade envois de message

cascade messages =⇒ dynamique des programmes


Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 36
introduction types classes new référence analyse usage this

analyse (objet) d’un problème

Quels sont les objets nécessaires à la résolution du problème ?


=⇒ décomposition du problème en objets

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 37
introduction types classes new référence analyse usage this

analyse (objet) d’un problème

Quels sont les objets nécessaires à la résolution du problème ?


=⇒ décomposition du problème en objets
A quels modèles ces objets correspondent-ils ?
et donc : Quelles sont les classes ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 37
introduction types classes new référence analyse usage this

analyse (objet) d’un problème

Quels sont les objets nécessaires à la résolution du problème ?


=⇒ décomposition du problème en objets
A quels modèles ces objets correspondent-ils ?
et donc : Quelles sont les classes ?
Quelles sont les fonctionnalités/opérations dont on veut/doit pouvoir
disposer pour les objets de ces classes ?
=⇒ quel comportement ? càd quels messages doit/veut on pouvoir
envoyer aux objets ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 37
introduction types classes new référence analyse usage this

analyse (objet) d’un problème

Quels sont les objets nécessaires à la résolution du problème ?


=⇒ décomposition du problème en objets
A quels modèles ces objets correspondent-ils ?
et donc : Quelles sont les classes ?
Quelles sont les fonctionnalités/opérations dont on veut/doit pouvoir
disposer pour les objets de ces classes ?
=⇒ quel comportement ? càd quels messages doit/veut on pouvoir
envoyer aux objets ?
Quelle est la structure de l’état des objets ?
structure nécessaire à la réalisation des comportements désirés.

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 37
introduction types classes new référence analyse usage this

exemple

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant
un article est caractérisé par un prix et un identifiant (une chaı̂ne de
caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné
une commande est créée pour un client et un catalogue donnés, on
peut ajouter des articles à une commande, on souhaite pouvoir accéder
à la liste des articles commandés ainsi qu’au prix total de ces articles et
au coût des frais de port de la commande
un client peut créer une commande pour un catalogue et commander
dans cette commande des articles à partir de leur identifiant

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 38
introduction types classes new référence analyse usage this

exemple

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant
un article est caractérisé par un prix et un identifiant (une chaı̂ne de
caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné
une commande est créée pour un client et un catalogue donnés, on
peut ajouter des articles à une commande, on souhaite pouvoir accéder
à la liste des articles commandés ainsi qu’au prix total de ces articles et
au coût des frais de port de la commande
un client peut créer une commande pour un catalogue et commander
dans cette commande des articles à partir de leur identifiant
quels objets ? quelles classes ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 38
introduction types classes new référence analyse usage this

exemple

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant
un article est caractérisé par un prix et un identifiant (une chaı̂ne de
caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné
une commande est créée pour un client et un catalogue donnés, on
peut ajouter des articles à une commande, on souhaite pouvoir
accéder à la liste des articles commandés ainsi qu’au prix total de ces
articles et au coût des frais de port de la commande
un client peut créer une commande pour un catalogue et commander
dans cette commande des articles à partir de leur identifiant
quels objets ? quelles classes ?
noms communs

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 38
introduction types classes new référence analyse usage this

exemple

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant
un article est caractérisé par un prix et un identifiant (une chaı̂ne de
caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné
une commande est créée pour un client et un catalogue donnés, on
peut ajouter des articles à une commande, on souhaite pouvoir accéder
à la liste des articles commandés ainsi qu’au prix total de ces articles et
au coût des frais de port de la commande
un client peut créer une commande pour un catalogue et commander
dans cette commande des articles à partir de leur identifiant
quelles fonctionnalités ? quelles méthodes ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 38
introduction types classes new référence analyse usage this

exemple

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant
un article est caractérisé par un prix et un identifiant (une chaı̂ne de
caractères pour simplifier) que l’on peut obtenir, on veut pouvoir
savoir si un article est plus cher qu’un autre article donné
une commande est créée pour un client et un catalogue donnés, on
peut ajouter des articles à une commande, on souhaite pouvoir
accéder à la liste des articles commandés ainsi qu’au prix total de ces
articles et au coût des frais de port de la commande
un client peut créer une commande pour un catalogue et commander
dans cette commande des articles à partir de leur identifiant
quelles fonctionnalités ? quelles méthodes ?
verbes

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 38
introduction types classes new référence analyse usage this

un catalogue regroupe des articles, il permet de trouver un article à partir


de son identifiant

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant

Catalogue

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un catalogue regroupe des articles, il permet de trouver un article à


partir de son identifiant

Catalogue

getItem(id : String):Item

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un article est caractérisé par un prix et un identifiant (une chaı̂ne de


caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un article est caractérisé par un prix et un identifiant (une chaı̂ne de


caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné

Item

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un article est caractérisé par un prix et un identifiant (une chaı̂ne de


caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné

Item

getPrice() : float
getId() : String

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un article est caractérisé par un prix et un identifiant (une chaı̂ne de


caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir
si un article est plus cher qu’un autre article donné

Item

getPrice() : float
getId() : String
moreExpensiveThan(other : Item) : boolean

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on


peut ajouter des articles à une commande, on souhaite pouvoir accéder
à la liste des articles commandés ainsi qu’au prix total de ces articles et
au coût des frais de port de la commande

Order

Order(Client, Catalogue)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Order

Order(Client, Catalogue)
addItem(item : Item)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Order

Order(Client, Catalogue)
addItem(item : Item)
allItems() : List<Item>

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Order

Order(Client, Catalogue)
addItem(item : Item)
allItems() : List<Item>
getTotalPrice() : float

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Order

Order(Client, Catalogue)
addItem(item : Item)
allItems() : List<Item>
getTotalPrice() : float
getShippingCost() : float

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

une commande est créée pour un client et un catalogue donnés, on peut


ajouter des articles à une commande, on souhaite pouvoir accéder à la
liste des articles commandés ainsi qu’au prix total de ces articles et au
coût des frais de port de la commande

Order

Order(Client, Catalogue)
addItem(item : Item)
allItems() : List<Item>
getTotalPrice() : float
getShippingCost() : float
getCatalogue() : Catalogue
getClient() : Client

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un client peut créer une commande pour un catalogue et commander


dans cette commande des articles à partir de leur identifiant

Client

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un client peut créer une commande pour un catalogue et commander


dans cette commande des articles à partir de leur identifiant

Client

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un client peut créer une commande pour un catalogue et commander


dans cette commande des articles à partir de leur identifiant

Client

createOrder(Catalogue) : Order

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

un client peut créer une commande pour un catalogue et commander


dans cette commande des articles à partir de leur identifiant

Client

createOrder(Catalogue) : Order
orderItem(o : Order, id : String)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 39
introduction types classes new référence analyse usage this

Catalogue
...
getItem(id : String):Item
Order
...
Item
Order(Client, Catalogue)
...
addItem(item : Item)
getPrice() : float
allItems() : List<Item>
getId() : String
getCatalogue() : Catalogue
moreExpensiveThan(Item) : boolean
getClient() : Client
getTotalPrice() : float
Client getShippingCost() : float
...
createOrder(Catalogue) : Order
orderItem(o :Order, id : String)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 40
introduction types classes new référence analyse usage this

usage

créer une commande pour un client, faire commander 2 articles par


le client, obtenir le prix total des articles de la commande

on suppose les références


Client client = new Client(...)
et
Catalogue cata = new Catalogue(...)
disponibles et initialisées

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 41
introduction types classes new référence analyse usage this

usage

créer une commande pour un client, faire commander 2 articles par


le client, obtenir le prix total des articles de la commande

on suppose les références


Client client = new Client(...)
et
Catalogue cata = new Catalogue(...)
disponibles et initialisées

Order order = client.createOrder(cata);


client.orderItem(order,"A0527");
client.orderItem(order,"B3879");
float price = order.getTotalPrice();

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 41
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande

// récupérer l’article dans le catalogue à partir de la réference

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande

// récupérer l’article dans le catalogue à partir de la réference

// ajouter l’article à la commande

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande
Catalogue cata = order.getCatalogue();
// récupérer l’article dans le catalogue à partir de la réference

// ajouter l’article à la commande

envois de messages

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande
Catalogue cata = order.getCatalogue();
// récupérer l’article dans le catalogue à partir de la réference
Item item = cata.getItem(id);
// ajouter l’article à la commande

envois de messages

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

la méthode orderItem de Client permet d’ajouter un article à


une commande à partir de son identifiant

quel code pour cette méthode ?

public void orderItem(Order order, String id) {


// récupérer le catalogue de la commande
Catalogue cata = order.getCatalogue();
// récupérer l’article dans le catalogue à partir de la réference
Item item = cata.getItem(id);
// ajouter l’article à la commande
order.addItem(item);
}

envois de messages

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 42
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 43
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v1 : dans Client

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 43
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v1 : dans Client
public float totalCost(Order order) {
// récupérer le prix de tous les articles

// ajouter les frais de port à celui des articles

usage :
float cost = someClient.totalCost(order);

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 43
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v1 : dans Client
public float totalCost(Order order) {
// récupérer le prix de tous les articles
float total = order.getTotalPrice();
// ajouter les frais de port à celui des articles
return total + order.getShippingCost();
}

usage :
float cost = someClient.totalCost(order);

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 43
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

il ne semble pas naturel que ce soit au client de calculer le coût...

principe de responsabilité

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 44
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 44
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost(???) {


// récupérer le prix de tous les articles
float total = ????.getTotalPrice();
// ajouter les frais de port
return total + ????.getShippingCost();
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 44
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost(???) {


// récupérer le prix de tous les articles
float total = ????.getTotalPrice();
// ajouter les frais de port
return total + ????.getShippingCost();
}

quel paramètre ?
à quel objet envoyer les messages ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 44
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost() {


// récupérer le prix de tous les articles
float total = ????.getTotalPrice();
// ajouter les frais de port
return total + ????.getShippingCost();
}

quel paramètre ? usage : float cost = someOrder.totalCost();


à quel objet envoyer les messages ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 44
introduction types classes new référence analyse usage this

auto-référence

il faut une référence vers l’objet qui a invoqué la méthode totalCost()


=
le receveur du message « .totalCost() »

auto-référence

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 45
introduction types classes new référence analyse usage this

auto-référence

il faut une référence vers l’objet qui a invoqué la méthode totalCost()


=
le receveur du message « .totalCost() »

auto-référence

en Java
this
this = référence vers l’objet qui invoque la méthode (= le receveur)

this est toujours défini dans le contexte d’éxécution d’une méthode

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 45
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost() {


// récupérer le prix de tous les articles
float total = ????.getTotalPrice();
// ajouter les frais de port
return total + ????.getShippingCost();
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 46
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost() {


// récupérer le prix de tous les articles de cette commande
float total = this.getTotalPrice();
// ajouter les frais de port de cette commande
return total + this.getShippingCost();
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 46
introduction types classes new référence analyse usage this

ajouter une méthode qui fournit le coût total d’une commande

où placer la méthode ? dans quelle classe ?

v2 : dans Order

public float totalCost() {


// récupérer le prix de tous les articles de cette commande
float total = this.getTotalPrice();
// ajouter les frais de port de cette commande
return total + this.getShippingCost();
}
usage :
float cost = someOrder.totalCost();

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 46
introduction types classes new référence analyse usage this

getTotalPrice dans Order

public float getTotalPrice() {

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 47
introduction types classes new référence analyse usage this

getTotalPrice dans Order

public float getTotalPrice() {


float total = 0;
// cumuler les prix de tous les articles
for(Item item : this.allItems()) {
total = total + item.getPrice();
}
return total;
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 47
introduction types classes new référence analyse usage this

createOrder dans Client

un client peut créer une commande pour un catalogue


une commande est créée pour un client et un catalogue donnés

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 48
introduction types classes new référence analyse usage this

createOrder dans Client

un client peut créer une commande pour un catalogue


une commande est créée pour un client et un catalogue donnés

public Order createOrder(Catalogue cata) {


Order theOrder = new Order( );
return theOrder;
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 48
introduction types classes new référence analyse usage this

createOrder dans Client

un client peut créer une commande pour un catalogue


une commande est créée pour un client et un catalogue donnés

public Order createOrder(Catalogue cata) {


Order theOrder = new Order(this, cata);
return theOrder;
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 48
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

public boolean moreExpensiveThan(Item otherItem) {

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

public boolean moreExpensiveThan(Item otherItem) {


// le prix de cet article est plus grand que celui de otherItem

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

public boolean moreExpensiveThan(Item otherItem) {


// le prix de cet article est plus grand que celui de otherItem
return this.getPrice() > otherItem.getPrice();
}

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

public boolean moreExpensiveThan(Item otherItem) {


// le prix de cet article est plus grand que celui de otherItem
return this.getPrice() > otherItem.getPrice();
}
ou

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

code de méthode moreExpensiveThan de Item ?

public boolean moreExpensiveThan(Item otherItem) {


// le prix de cet article est plus grand que celui de otherItem
return this.getPrice() > otherItem.getPrice();
}
ou

public boolean moreExpensiveThan(Item otherItem) {


return this.price > otherItem.price;
}

une référence objet permet aussi d’accéder aux attributs

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 49
introduction types classes new référence analyse usage this

la classe Item
attributs ? constructeur ?

Item

getPrice() : float
getId() : String
moreExpensiveThan(item : Item) : boolean

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 50
introduction types classes new référence analyse usage this

la classe Item
attributs ? constructeur ?

Item
price : float
id : String
getPrice() : float
getId() : String
moreExpensiveThan(item : Item) : boolean

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 50
introduction types classes new référence analyse usage this

la classe Item
attributs ? constructeur ?

Item
price : float
id : String
getPrice() : float
getId() : String
moreExpensiveThan(item : Item) : boolean
Item(price : int, id : String)

Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 50
introduction types classes new référence analyse usage this

la classe Item
attributs ? constructeur ?

public class Item {


private float price;
private String id;
public float getPrice() {
return this.price;
}
public String getId() {
return this.id;
}
public boolean moreExpensiveThan(Item otherItem) {
return this.price > otherItem.price;
}
public Item(float p, String id) {
this.price = p;
this.id = id;
}
}
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 50
introduction types classes new référence analyse usage this

exemple (retour)

public class Thermostat {


private Boiler boiler;
private Thermometer thermo;
private float targetTemp;
public Thermostat(Boiler boiler, float targetTemp) {
this.boiler = boiler;
this.thermo = new Thermometer(22);
this.targetTemp = targetTemp;
this.update();
}
...
public void temperatureChange(float newTemperature) {
this.thermo.changeTemperature(newTemperature);
// checks if boiler must be turned on or off when ambient temperature change
this.update();
}
private void update() {
if (this.targetTemp < this.thermo.inCelsius() && this.boiler.isOn()) {
this.boiler.turnOff();
}
else if (this.targetTemp >= this.thermo.inCelsius() && this.boiler.isOff()) {
this.boiler.turnOn();
}
} }

influence de l’état sur le comportement


dynamique des envois de message
Université Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 51

Vous aimerez peut-être aussi