Telechargé par Yao Kevin

intro classes et objets

publicité
introduction
types
classes
new
référence
analyse
usage
this
Introduction : classes et objets
Programmation Orientée Objet
Licence mention Informatique
Université Lille – FST - Informatique
Université Lille – FST - Informatique 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 »,
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 – FST - Informatique 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 – FST - Informatique 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 – FST - Informatique 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 – FST - Informatique 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)
... 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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
4
introduction
types
classes
new
référence
analyse
usage
this
Réussir
UE centrale et essentielle dans votre cursus
conditions de réussite
présence en cours, en TD et en TP indispensable,
en étant active/actif
4h30 enseignement ⇒ 4h30 travail personnel / semaine
connaître le cours avant les TD et TP
faire le travail préparatoire demandé
faire soi-même les TP
apprentissage de la programmation impossible sans la pratique
travailler en groupe est bien sûr possible et c’est une bonne chose,
copier un travail est une erreur
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
5
introduction
types
classes
new
référence
analyse
usage
this
programmer
question
C’est quoi programmer ?
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
6
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
6
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
6
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
6
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
6
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
7
introduction
types
classes
new
référence
analyse
usage
this
8
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
8
introduction
types
classes
new
référence
analyse
usage
this
8
"timoleon"
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
8
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
9
introduction
types
classes
new
référence
analyse
usage
this
type
?
c’est quoi un type ?
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
10
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
10
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
>>> x
8
>>> type(x)
<class ’int’>
>>> x = "timoleon"
>>> type(x)
<class ’str’>
l e t x = 8;
x;
/* 8 */
typeof (x ) ;
/* number */
x = "timoleon" ;
typeof (x ) ;
/* string */
le typage est dynamique
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
11
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
12
introduction
types
classes
new
référence
analyse
usage
this
compilation
code source
langage de programmation
7−→
Université Lille – FST - Informatique Licence mention Informatique
code exécutable
langage « machine »
Programmation Orientée Objet
13
introduction
types
classes
new
référence
analyse
usage
this
compilation
code source
langage de programmation
7−→
code exécutable
langage « machine »
plusieurs phases
1
2
3
4
analyse lexicale
analyse syntaxique : vérifie la syntaxe
analyse sémantique : vérifie le typage
optimisation de code
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
13
introduction
types
classes
new
référence
analyse
usage
this
compilation
code source
langage de programmation
7−→
code exécutable
langage « machine »
plusieurs phases
1
2
3
4
analyse lexicale
analyse syntaxique : vérifie la syntaxe
analyse sémantique : vérifie le typage
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
13
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
14
introduction
types
classes
new
référence
analyse
usage
this
int thermometre = 8;
int age = 8;
int price = 8;
public boolean age_senior ( int a) {
return a >= 70;
}
intro . age_senior (age ) ;
intro . age_senior (thermometre ) ;
intro . age_senior ( price ) ;
public float en_fahrenheit ( int t ) {
return 9/5∗t + 32;
}
intro . en_fahrenheit (thermometre ) ;
intro . en_fahrenheit (age ) ;
intro . en_fahrenheit ( price ) ;
ne devrait pouvoir être appliqué
qu’à des « âges »
ne devrait pouvoir être appliqué
qu’à des « températures »
qui contrôle les opérations possibles ?
age_senior() 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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
15
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 = 2006;
int b = 2001;
String c = "Alice";
String d = "Bob";
des variables séparées ne conviennent pas
il faut un type composite, par exemple en Python un dictionnaire
>>> a l i c e = { ’annee’ : 2001, ’nom’ : "Alice" }
>>> bob = { ’annee’ : 2006, ’nom’ : "Bob" }
def est_majeur(personne ) :
return 2022 − 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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
16
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
’annee’ n’a pas le même sens pour une « personne » et pour un « livre »
est_majeur() ne devrait pouvoir être appliqué qu’à des « personnes »
partager les clefs ne suffit pas
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
17
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
18
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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
19
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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
19
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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
19
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
19
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
20
introduction
types
classes
new
référence
classes
analyse
usage
this
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
21
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
22
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
23
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
tout 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 se trouvent dans les attributs des objets
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
24
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
25
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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
26
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
26
introduction
types
classes
new
analyse
usage
this
Person
name : String
birthYear : int
getName() : String
getBirthYear() : int
isAdult() : boolean
isOlderThan(p : Person) : boolean
toString() : String
Thermometer
value : int
getValue() : int
toFahrenheit() : int
toString() : String
t1.toFahrenheit() 7→ 53.6
t2.toFahrenheit() 7→ 68
t1.toString() 7→ "temperature is 12o C"
t1.isAdult() n’est pas possible
référence
alice.getBirthYear() 7→ 19
alice.isAdult() 7→ true
alice.toString() 7→ "Alice is born in 2001"
alice.toFahrenheit() n’est pas possible
conformément à sa classe (son type)
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 – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
28
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
28
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
28
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 correspond à la structure définie par sa classe
,→ 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 sa classe
concret
Université Lille – FST - Informatique 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.
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
29
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
2
créer les attributs de l’objet (la structure de l’état)
=⇒ réserver l’espace mémoire
donner les valeurs initiales des attributs (« initialiser l’objet »)
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
29
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
2
créer les attributs de l’objet (la structure de l’état)
=⇒ réserver l’espace mémoire
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 – FST - Informatique 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)
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
30
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
30
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
30
introduction
types
classes
new
référence
analyse
usage
this
exemple
public class Thermometer {
private float temperature ;
attribut
public Thermometer( float initialTemp ) {
un constructeur
this . temperature = initialTemp ;
}
public Thermometer() {
this . temperature = 0;
// ou : t h i s (0);
un autre constructeur
}
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
31
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
32
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 – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
34
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
34
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
« ref.methode() » = « l’objet référencé par ref exécute methode »
la validité du message pour le type de la référence est vérifié à la
compilation
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
35
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
36
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
37
introduction
types
classes
new
référence
analyse
usage
this
exemple
thermomètres, chaudières
Thermometer
temperature : float
Thermometer()
Thermometer(t : float)
inCelsius() : float()
changeTemperature(newT:float)
...
Boiler
power : int
on : boolean
Boiler(power : int)
isOn() : boolean
isOff() : boolean
turnOn()
turnOff()
getPower() : int
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
37
introduction
types
classes
new
référence
analyse
usage
this
exemple
thermomètres, chaudières et thermostats
Thermometer
temperature : float
Thermometer()
Thermometer(t : float)
inCelsius() : float()
changeTemperature(newT:float)
...
Boiler
power : int
on : boolean
Boiler(power : int)
isOn() : boolean
isOff() : boolean
turnOn()
turnOff()
getPower() : int
Université Lille – FST - Informatique Licence mention Informatique
Thermostat
thermo : Thermometer
boiler : Boiler
targetTemp : float
Thermostat(b:Boiler,target:float)
currentTemperature(): float
getTargetTemp() : float
setTargetTemp( target : float)
temperatureChange(newT:float)
update()
...
Programmation Orientée Objet
37
introduction
types
classes
new
référence
analyse
usage
this
exemple
thermomètres, chaudières et thermostats
Thermometer
temperature : float
Thermometer()
Thermometer(t : float)
inCelsius() : float()
changeTemperature(newT:float)
...
Boiler
power : int
on : boolean
Boiler(power : int)
isOn() : boolean
isOff() : boolean
turnOn()
turnOff()
getPower() : int
Boiler b = new Boiler(1000);
Thermostat t = new Thermostat(b,20);
t.currentTemperature()
t.temperatureChange(10);
Université Lille – FST - Informatique Licence mention Informatique
Thermostat
thermo : Thermometer
boiler : Boiler
targetTemp : float
Thermostat(b:Boiler,target:float)
currentTemperature(): float
getTargetTemp() : float
setTargetTemp( target : float)
temperatureChange(newT:float)
update()
...
+ création aussi d’un objet Thermometer
déclenche envoi message
temperatureInCelsius() à objet Thermometer
cascade envois de message
Programmation Orientée Objet
37
introduction
types
classes
new
référence
analyse
usage
this
exemple
thermomètres, chaudières et thermostats
Thermometer
temperature : float
Thermometer()
Thermometer(t : float)
inCelsius() : float()
changeTemperature(newT:float)
...
Boiler
power : int
on : boolean
Boiler(power : int)
isOn() : boolean
isOff() : boolean
turnOn()
turnOff()
getPower() : int
Boiler b = new Boiler(1000);
Thermostat t = new Thermostat(b,20);
t.currentTemperature()
t.temperatureChange(10);
Thermostat
thermo : Thermometer
boiler : Boiler
targetTemp : float
Thermostat(b:Boiler,target:float)
currentTemperature(): float
getTargetTemp() : float
setTargetTemp( target : float)
temperatureChange(newT:float)
update()
...
+ création aussi d’un objet Thermometer
déclenche envoi message
temperatureInCelsius() à objet Thermometer
cascade envois de message
cascade messages =⇒ dynamique des programmes
Université Lille – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
38
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
38
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
38
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 – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
39
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
39
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
39
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
39
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 – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
40
introduction
types
classes
new
référence
analyse
usage
this
Catalogue
...
getItem(id : String):Item
Order
Item
...
getPrice() : float
getId() : String
moreExpensiveThan(Item) : boolean
Client
...
createOrder(Catalogue) : Order
orderItem(o :Order, id : String)
Université Lille – FST - Informatique Licence mention Informatique
...
Order(Client, Catalogue)
addItem(item : Item)
allItems() : List<Item>
getCatalogue() : Catalogue
getClient() : Client
getTotalPrice() : float
getShippingCost() : float
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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
42
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 – FST - Informatique 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 ?
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
43
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 – FST - Informatique 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 ?
Université Lille – FST - Informatique 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 ?
v1 : dans Client
Université Lille – FST - Informatique 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 ?
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 – FST - Informatique 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 ?
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 – FST - Informatique 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 ?
il ne semble pas naturel que ce soit au client de calculer le coût...
principe de responsabilité
Université Lille – FST - Informatique 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
Université Lille – FST - Informatique 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 – FST - Informatique 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();
}
quel paramètre ?
à quel objet envoyer les messages ?
Université Lille – FST - Informatique 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();
}
quel paramètre ? usage : float cost = someOrder.totalCost();
à quel objet envoyer les messages ?
Université Lille – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
46
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 – FST - Informatique 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
float total = ????.getTotalPrice();
// ajouter les frais de port
return total + ????.getShippingCost();
}
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
47
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
47
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
47
introduction
types
classes
new
référence
analyse
usage
this
getTotalPrice dans Order
public float getTotalPrice() {
}
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
48
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 – FST - Informatique 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
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
49
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
49
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 – FST - Informatique 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 ?
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
introduction
types
classes
new
référence
analyse
usage
this
code de méthode moreExpensiveThan de Item ?
public boolean moreExpensiveThan(Item otherItem) {
}
Université Lille – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
50
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
51
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
51
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
51
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
51
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 – FST - Informatique Licence mention Informatique
Programmation Orientée Objet
52
Téléchargement