Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
introduction types classes new reference analyse usage this
Introduction : classes et objets
Programmation Orientee Objet
Licence mention InformatiqueUniversite Lille – Sciences et Technologies
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 1
introduction types classes new reference analyse usage this
preliminaire
Objectifs :presenter les concepts de base de la programmation objet
adopter une « approche objet » de la modelisation,connaıtre et savoir mettre en œuvre les concepts fondamentaux
preparer aux UE Projet du S4 et Conception Orientee Objet du S5
portail.fil.univ-lille1.fr/ls3/poo
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 2
introduction types classes new reference analyse usage this
a l’issue de ce module vous devriez...
... connaıtre les elements de base de la programmation objet
... maitriser le vocabulaire de la programmation objet :↪→ classe, instance, methode, interface, attribut, constructeur,encapsulation, polymorphisme, heritage... savoir decomposer un probleme simple en classes et objets... savoir expliquer ce qui differencie la programmation objet des autresparadigmes... savoir expliquer ce qu’est le polymorphisme, en presenter lesavantages et savoir expliquer ce qu’est le “late-binding”... connaıtre le principe ouvert-ferme, etre en mesure de l’expliquer et del’appliquer sur des exemples simples... pouvoir identifier certaines situations de mauvaises conception objetet les corriger... mettre en œuvre l’heritage dans des cas simples... connaitre le mecanisme de lookup
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 3
introduction types classes new reference analyse usage this
a l’issue de ce module vous devriez...
... connaıtre les elements de base de la programmation objet... maitriser le vocabulaire de la programmation objet :↪→ classe, instance, methode, interface, attribut, constructeur,encapsulation, polymorphisme, heritage... savoir decomposer un probleme simple en classes et objets... savoir expliquer ce qui differencie la programmation objet des autresparadigmes... savoir expliquer ce qu’est le polymorphisme, en presenter lesavantages et savoir expliquer ce qu’est le “late-binding”... connaıtre le principe ouvert-ferme, etre en mesure de l’expliquer et del’appliquer sur des exemples simples... pouvoir identifier certaines situations de mauvaises conception objetet les corriger... mettre en œuvre l’heritage dans des cas simples... connaitre le mecanisme de lookup
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 3
introduction types classes new reference analyse usage this
a l’issue de ce module vous devriez...
... savoir specifier, coder et tester un probleme objet simpledans le langage JAVA
... connaıtre les principaux elements de la syntaxe du langage java
... etre en mesure d’ecrire un programme dans le langage java
... savoir ecrire des tests unitaires simples
... pouvoir expliquer clairement le role et la semantique des elements delangage 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)... etre en mesure de choisir une structure de donnees appropriee etsavoir utiliser les types java List, Set, Map et Iterator... savoir gerer les exceptions et connaıtre la difference entre capture etlevee d’exception... savoir utiliser les “outils” lies a la plateforme java :↪→ javac, java (et classpath), javadoc, jar
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 4
introduction types classes new reference analyse usage this
a l’issue de ce module vous devriez...
... savoir specifier, coder et tester un probleme objet simpledans le langage JAVA
... connaıtre les principaux elements de la syntaxe du langage java
... etre en mesure d’ecrire un programme dans le langage java
... savoir ecrire des tests unitaires simples
... pouvoir expliquer clairement le role et la semantique des elements delangage 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)... etre en mesure de choisir une structure de donnees appropriee etsavoir utiliser les types java List, Set, Map et Iterator... savoir gerer les exceptions et connaıtre la difference entre capture etlevee d’exception... savoir utiliser les “outils” lies a la plateforme java :↪→ javac, java (et classpath), javadoc, jar
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 4
introduction types classes new reference analyse usage this
programmer
questionC’est quoi programmer ?
1 analyse, etude du probleme a modeliser :specifications, ecriture de la documentation et des tests
2 conception : mise en place des solutions techniques3 codage = ecriture du code informatique conforme aux specifications,
validation par les testsElements a considerer :
maintenance – evolution – reutilisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 5
introduction types classes new reference analyse usage this
programmer
1 analyse, etude du probleme a modeliser :specifications, ecriture de la documentation et des tests
2 conception : mise en place des solutions techniques3 codage = ecriture du code informatique conforme aux specifications,
validation par les tests
Elements a considerer :
maintenance – evolution – reutilisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 5
introduction types classes new reference analyse usage this
programmer
1 analyse, etude du probleme a modeliser :specifications, ecriture de la documentation et des tests
2 conception : mise en place des solutions techniques
3 codage = ecriture du code informatique conforme aux specifications,validation par les tests
Elements a considerer :
maintenance – evolution – reutilisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 5
introduction types classes new reference analyse usage this
programmer
1 analyse, etude du probleme a modeliser :specifications, ecriture de la documentation et des tests
2 conception : mise en place des solutions techniques3 codage = ecriture du code informatique conforme aux specifications,
validation par les tests
Elements a considerer :
maintenance – evolution – reutilisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 5
introduction types classes new reference analyse usage this
programmer
1 analyse, etude du probleme a modeliser :specifications, ecriture de la documentation et des tests
2 conception : mise en place des solutions techniques3 codage = ecriture du code informatique conforme aux specifications,
validation par les tests
Elements a considerer :
maintenance – evolution – reutilisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 5
introduction types classes new reference analyse usage this
programmation objet
paradigme objetUn programme est un ensemble d’objets qui interagissent.
reprend et prolonge la demarche modulaire : decomposition d’unprobleme en parties simples,(en java) la programmation des traitements reste imperative,plus intuitive car s’inspire du monde reel pour une modelisation « plusnaturelle » : « plus proche » du problemefacilite la reutilisation et la conception de « grands » logiciels
quelques langages : Java, C#, Smalltalk, Python, php5, ...
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 6
introduction types classes new reference analyse usage this
8
"timoleon"
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 7
introduction types classes new reference analyse usage this
8
"timoleon"
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 7
introduction types classes new reference analyse usage this
def is even (x ) :return x % 2 == 0
>>> is even (8)
>>> is even ("timoleon")
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 8
introduction types classes new reference analyse usage this
type
? c’est quoi un type ?
typeun type de donnees definit
l’ensemble des valeurs possibles pour les donnees du typeles operations applicables sur ces donnees
toute donnee a un type, toute variable a un type
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 9
introduction types classes new reference analyse usage this
type
typeun type de donnees definit
l’ensemble des valeurs possibles pour les donnees du typeles operations applicables sur ces donnees
toute donnee a un type, toute variable a un type
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 9
introduction types classes new reference analyse usage this
typage dynamique
en Python ou Javascript le type d’une variable est implicitement defini parsa valeur lors de son affectation, et le type de la variable peut changer aucours d’une execution
>>> x = 8>>> x8>>> type(x)<class ’int’>>>> x = "timoleon">>> type(x)<class ’str’>
let x = 8;x ;/* 8 */typeof(x ) ;/* number */x = "timoleon" ;typeof(x ) ;/* string */
le typage est dynamique
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 10
introduction types classes new reference analyse usage this
typage statique
en Java, comme en C, le type d’une variable est explicitement defini a sadeclarationil determine les valeurs que peut prendre la variable et ne peut pas changerle compilateur verifie le typage
le typage est statique
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 11
introduction types classes new reference analyse usage this
compilation
code sourcelangage de programmation 7−→
code executablelangage « machine »
plusieurs phases1 analyse lexicale2 analyse syntaxique : verifie la syntaxe3 analyse semantique : verifie le typage4 optimisation de code
en C la compilation est suivie de l’edition de liens : early-bindingpas en Java : late-binding voir plus tard dans le cours
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 12
introduction types classes new reference analyse usage this
compilation
code sourcelangage de programmation 7−→
code executablelangage « machine »
plusieurs phases1 analyse lexicale2 analyse syntaxique : verifie la syntaxe3 analyse semantique : verifie le typage4 optimisation de code
en C la compilation est suivie de l’edition de liens : early-bindingpas en Java : late-binding voir plus tard dans le cours
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 12
introduction types classes new reference analyse usage this
compilation
code sourcelangage de programmation 7−→
code executablelangage « machine »
plusieurs phases1 analyse lexicale2 analyse syntaxique : verifie la syntaxe3 analyse semantique : verifie le typage4 optimisation de code
en C la compilation est suivie de l’edition de liens : early-bindingpas en Java : late-binding voir plus tard dans le cours
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 12
introduction types classes new reference analyse usage this
machine virtuelleun compilateur C genere un code enlangage machine binaire executable parune machine hote donnee
le compilateur java genere dubytecode java= langage machine virtuel
le code java s’execute dans uneJava Virtual Machine (JVM)
la JVM interprete le bytecode pour l’executerla JVM rend le code java independant de l’OS et de la machine hote
« compile once, run everywhere »
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 13
introduction types classes new reference analyse usage this
int thermometre = 8;int age = 8;int price = 8;
public boolean age senior ( int x) {return x >= 70;
}intro . age senior (age ) ;intro . age senior (thermometre ) ;intro . age senior ( price ) ;
ne devrait pouvoir etre appliquequ’a des « ages »
public int en fahrenheit ( int x) {return 9/5∗x + 32;
}intro . en fahrenheit (thermometre ) ;intro . en fahrenheit (age ) ;intro . en fahrenheit ( price ) ;
ne devrait pouvoir etre appliquequ’a des « temperatures »
qui controle les operations possibles ?est majeur() ne doit etre possible que pour des ages
les types de base ne suffisent pasbesoin de distinguer ages et temperatures meme si les deux donnees sont
representees par un entierUniversite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 14
introduction types classes new reference analyse usage this
types composites
donnees sur des personnes caracterisees par leur nom et annee de naissance
des variables separees ne conviennent pas
int a = 2003;int b = 2001;String c = "Alice" ;String d = "Bob" ;
il faut un type composite, par exemple en Python un dictionnaire
>>> a l ice = { ’annee’ : 2001, ’nom’ : "Alice" }>>> bob = { ’annee’ : 2003, ’nom’ : "Bob" }
def est majeur(personne ) :return 2020 − personne [’annee’ ] >= 18
>>> est majeur( a l ice )>>> est majeur(bob)
possible car bob et alice partagent la meme structure de clesUniversite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 15
introduction types classes new reference analyse usage this
on retrouve les memes problemes qu’avec les types simples
articles caracterises par un prix et une reference>>> bidule = { ’prix’ : 17, ’reference’ : "JB007" }>>> est majeur(bidule )AttributeError : ’dict’ object has no attribute ’age’
livres caracterises par leur annee de parution et leur nom :>>> l o t r = { ’annee’ : 1954, ’nom’ : "Seigneur des Anneaux" }>>> est majeur( lot r )True
est majeur() ne devrait pouvoir etre applique qu’a des « personnes »
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 16
introduction types classes new reference analyse usage this
bilan
les types de base (simples ou composites) ne suffisent pasil faut pouvoir distinguer un « int age » et un « int thermometre »
des donnees composites de meme nature doivent partager la memestructurela possibilite d’appliquer une operation a une donnee doit etrecontrolee selon la nature de la donnee
il faut pouvoir definir ses propres types
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 17
introduction types classes new reference analyse usage this
un type definit les valeurs possibles et les operations autorisees
un type Thermometrevaleurs possibles : la valeur en degre centigrade de type intoperations autorisees : obtenir la valeur en Fahrenheit
un type Agevaleurs possibles : une donnee de type intoperations autorisees : savoir si l’age correspond a un age senior
un type Personnevaleurs possibles : un age de type int et un nom de type Stringoperations autorisees : savoir si la personne est majeure, obtenir l’age
un type Articlevaleurs possibles : un prix de type int et une reference de type Stringoperations autorisees : obtenir le prix TTC
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 18
introduction types classes new reference analyse usage this
Programmation Objet
en programmation objet, les donnees sont representees par des objetsla programmation objet consiste a definir les types des objets
un objet est compose de donnees (d’autres objets)un objet peut executer des operations
un objet a un type et le type d’un objet definitla structure des donnees qui composent cet objet
les attributsles operations (= traitements) que peut executer cet objet
les methodes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 19
introduction types classes new reference analyse usage this
classes langages de classes
classe
une classe est un type objet
une classe definitles methodes et les traitements associes↪→ le comportement des objetsla structure des attributs necessaires a la realisation des traitements↪→ l’etat des objets
le comportement agit sur l’etat et l’etat influence le comportement
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 20
introduction types classes new reference analyse usage this
methodes et attributs
methodeune methode est une fonction qui appartient a une classe
« function member »
une methode ne peut etre utilisee que par les objets de la classeun objet ne peut executer que les methodes de sa classe
attributun attribut est une variable qui appartient a un objet
« data member »
les attributs sont definis par la classe de l’objet, chaque attribut a un type
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 21
introduction types classes new reference analyse usage this
instance
une classe permet de creer des objetsces objets sont du type de cette classe
instanceon appelle instance un objet cree par une classetout objet est instance d’une classe
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 22
introduction types classes new reference analyse usage this
definir une classe c’est1 definir les methodes que pourront executer les objets de la classe
tous les objets d’un meme classe peuvent executer les memes methodes
chaque traitement realise par le programme est defini dans unemethode
2 definir les attributs des objets de la classe
tous les objets d’une meme classe ont la meme structure d’attributsmais les valeurs des attributs sont « personnelles » a chaque objet,elles peuvent etre differentes d’un objet a l’autre
les donnees du programme sont memorisees dans les attributs desobjets
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 23
introduction types classes new reference analyse usage this
envoi de message
on interagit avec un objet uniquement via ses methodesles methodes de sa classe
on parle d’ « envoi de message » a l’objet
l’objet a le controle sur le message qui lui est envoye
utilisation de la notation pointeeunePersonne.estMajeur()
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 24
introduction types classes new reference analyse usage this
exemplesclasse Thermometer
structure attributs : value de type intmethodes : getValue(), toFahrenheit(), toString()
t1 et t2 deux objets de la classeThermometer→ meme structure d’attributs, mais valeursdifferentes
classe Personstructure attributs : birthYear de type int, name de type Stringmethodes : isAdult(), isOlderThan(Person), getAge(),getName(), toString()
alice un objet de la classe Person
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 25
introduction types classes new reference analyse usage this
Thermometervalue : intgetValue() : inttoFahrenheit() : inttoString() : String
Personname : StringbirthYear : intgetName() : StringgetBirthYear() : intisAdult() : booleanisOlderThan(p : Person) : booleantoString() : String
t1.toFahrenheit() 7→ 53.6t2.toFahrenheit() 7→ 68t1.toString() 7→ "current temperature is12oC"t1.isAdult() n’est pas possible
alice.getAge() 7→ 19alice.isAdult() 7→ truealice.toString() 7→ "Alice is born in 2001"alice.toFahrenheit() n’est pas possible
l’objet « controle » le messagesa legalitepas d’ambiguıte pour deux messages (methodes) de meme nom dansdes classes differentes (cf.toString() )
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 26
introduction types classes new reference analyse usage this
synthese
classe = definition/modele
decrit la structure de l’etat des objetsles attributs et leurs typesdefinit les envois de messages possiblesles methodes=⇒ interface d’une classe
abstrait
instance = objet conforme au modele de la classe qui l’a creee
son etat obeit a la structure definie↪→ association de valeurs aux attributsn’accepte que les messages definis par la classe= n’execute que les methodes definies par la classe
concret
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 27
introduction types classes new reference analyse usage this
synthese
classe = definition/modele
decrit la structure de l’etat des objetsles attributs et leurs typesdefinit les envois de messages possiblesles methodes=⇒ interface d’une classe
abstrait
instance = objet conforme au modele de la classe qui l’a creee
son etat obeit a la structure definie↪→ association de valeurs aux attributsn’accepte que les messages definis par la classe= n’execute que les methodes definies par la classe
concret
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 27
introduction types classes new reference analyse usage this
synthese
classe = definition/modeledecrit la structure de l’etat des objetsles attributs et leurs typesdefinit les envois de messages possiblesles methodes=⇒ interface d’une classe
abstrait
instance = objet conforme au modele de la classe qui l’a creee
son etat obeit a la structure definie↪→ association de valeurs aux attributsn’accepte que les messages definis par la classe= n’execute que les methodes definies par la classe
concret
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 27
introduction types classes new reference analyse usage this
synthese
classe = definition/modeledecrit la structure de l’etat des objetsles attributs et leurs typesdefinit les envois de messages possiblesles methodes=⇒ interface d’une classe
abstrait
instance = objet conforme au modele de la classe qui l’a creeeson etat obeit a la structure definie↪→ association de valeurs aux attributsn’accepte que les messages definis par la classe= n’execute que les methodes definies par la classe
concretUniversite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 27
introduction types classes new reference analyse usage this
constructeurs
a l’execution, il faut creer les objets conformement au modele
constructeurPour creer un objet il faut utiliser un constructeur.Chaque appel a un constructeur cree un nouvel objet (instance) qui obeitau modele defini par la classe du constructeur.
un constructeur a deux roles1 creer les attributs de l’objet (la structure de l’etat)
=⇒ reserver l’espace memoire2 donner les valeurs initiales des attributs (« initialiser l’objet »)
chaque classe doit definir comment sont initialises les attributs↪→ il peut y avoir plusieurs manieres de realiser cette initialisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 28
introduction types classes new reference analyse usage this
constructeurs
a l’execution, il faut creer les objets conformement au modele
constructeurPour creer un objet il faut utiliser un constructeur.Chaque appel a un constructeur cree un nouvel objet (instance) qui obeitau modele defini par la classe du constructeur.
un constructeur a deux roles1 creer les attributs de l’objet (la structure de l’etat)
=⇒ reserver l’espace memoire2 donner les valeurs initiales des attributs (« initialiser l’objet »)
chaque classe doit definir comment sont initialises les attributs↪→ il peut y avoir plusieurs manieres de realiser cette initialisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 28
introduction types classes new reference analyse usage this
constructeurs
a l’execution, il faut creer les objets conformement au modele
constructeurPour creer un objet il faut utiliser un constructeur.Chaque appel a un constructeur cree un nouvel objet (instance) qui obeitau modele defini par la classe du constructeur.
un constructeur a deux roles1 creer les attributs de l’objet (la structure de l’etat)
=⇒ reserver l’espace memoire2 donner les valeurs initiales des attributs (« initialiser l’objet »)
chaque classe doit definir comment sont initialises les attributs↪→ il peut y avoir plusieurs manieres de realiser cette initialisation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 28
introduction types classes new reference 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 definit pas de constructeur, alors il y a unconstructeur par defaut (constructeur sans parametre)↪→ il existe seulement s’il n’y a pas d’autre constructeur declare
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 29
introduction types classes new reference 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 definit pas de constructeur, alors il y a unconstructeur par defaut (constructeur sans parametre)↪→ il existe seulement s’il n’y a pas d’autre constructeur declare
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 29
introduction types classes new reference 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 definit pas de constructeur, alors il y a unconstructeur par defaut (constructeur sans parametre)↪→ il existe seulement s’il n’y a pas d’autre constructeur declare
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 29
introduction types classes new reference analyse usage this
exemple
public class Thermometer {private float temperature ; attributpublic Thermometer( f loat initialTemp) { constructeurs
this . temperature = initialTemp ;}public Thermometer() {
this . temperature = 0; // ou : this (0);}public f loat temperatureInCelsius () { methodes
return this . temperature ;}public void changeTemperature( f loat newTemp) {
this . temperature = newTemp;}public String toString () {
return "current temperature is : "+this . temperature ;}public f loat temperatureInFahrenheit () {
return (9.0 f /5.0 f )∗ this . temperature+32;}
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 30
introduction types classes new reference analyse usage this
reference
l’appel a un constructeur a pour resultat une reference vers l’objet cree.cette reference = un pointeur vers l’identite de l’objet.Elle peut etre stockee dans une variable (de type objet).
importantLa reference permet d’acceder a l’objet, mais n’est pas l’objet lui-meme.Une variable objet contient l’information pour acceder a l’objet.
cf. telecommande d’un televiseur
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 31
introduction types classes new reference analyse usage this
en Java
declaration variableLes variables sont typees. Le type d’une variable est fixe a la declaration.
Type variableId;
variableId est une reference qui peut pointer des objets de type Type (siType est un type objet).
affectationL’operateur d’affectation “=” permet d’attribuer une valeur a une variable.
variableId = expression;
La valeur de expression est affectee a variableId.Cette valeur doit etre du type de variableId.
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 32
introduction types classes new reference analyse usage this
une variable objet non initialisee vaut null
on peut declarer et initialiser en meme tempsun objet non reference est perdu, on ne peut plus d’adresser a lui↪→ garbage collector
Thermometer th1; // th1 vaut nullth1 = new Thermometer(20); // th1 reference l’objet creeThermometer th2 = new Thermometer(25); // declaration et initialisation
th1 = new Thermometer(18); // th1 reference un autre objet// l’objet precedent est perdu
Thermometer th3 = th1; // th3 reference le meme objet que th1th1 = new Thermometer(); // th1 reference un nouvel objet
// l’objet precedent est toujours reference par th3
rappel : chaque appel a new cree un nouvel objet
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 33
introduction types classes new reference analyse usage this
une variable objet non initialisee vaut null
on peut declarer et initialiser en meme tempsun objet non reference est perdu, on ne peut plus d’adresser a lui↪→ garbage collector
Thermometer th1; // th1 vaut nullth1 = new Thermometer(20); // th1 reference l’objet creeThermometer th2 = new Thermometer(25); // declaration et initialisation
th1 = new Thermometer(18); // th1 reference un autre objet// l’objet precedent est perdu
Thermometer th3 = th1; // th3 reference le meme objet que th1th1 = new Thermometer(); // th1 reference un nouvel objet
// l’objet precedent est toujours reference par th3
rappel : chaque appel a new cree un nouvel objet
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 33
introduction types classes new reference analyse usage this
envoi de messageun envoi de message permet d’invoquer une methode sur un objetpour lui envoyer un message il faut une reference vers l’objet
reference.message(...)
le message doit etre autorise pour le type de la reference
Thermometer th1 = new Thermometer(25);th1.temperatureInCelsius(); // -> 25th1.changeTemperature(20);th1.temperatureInCelsius(); // -> 20th1.temperatureInFahrenheit(); // -> 68
la validite du message pour le type de la reference est verifie a lacompilation
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 34
introduction types classes new reference analyse usage this
invocation de methode
une methode ne peut pas etre utilisee autrementqu’en etant invoquee sur un objet via un envoi de message a cet objet
l’objet invoquant = le receveur du messageil fait partie du contexte d’execution de la methode
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 35
introduction types classes new reference analyse usage this
exemple
thermometres
, chaudieres et thermostats
Thermometertemperature : floatThermometer()Thermometer(t : float)inCelsius() : float()changeTemperature(newT:float)...
Boilerpower : inton : booleanBoiler()isOn() : booleanisOff() : booleanturnOn()turnOff()getPower() : int
Thermostatthermo : Thermometerboiler : BoilertargetTemp : floatThermostat(b:Boiler,target:float)currentTemperature(): floatgetTargetTemp() : floatsetTargetTemp( target : float)temperatureChange(newT:float)update()...
Boiler b = new Boiler(1000, 20);Thermostat t = new Thermostat(b); creation d’un objet Thermometert.currentTemperature() envoi message a objet Thermometert.temperatureChange(10); cascade envois de message
cascade messages =⇒ dynamique des programmes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 36
introduction types classes new reference analyse usage this
exemple
thermometres, chaudieres
et thermostats
Thermometertemperature : floatThermometer()Thermometer(t : float)inCelsius() : float()changeTemperature(newT:float)...
Boilerpower : inton : booleanBoiler()isOn() : booleanisOff() : booleanturnOn()turnOff()getPower() : int
Thermostatthermo : Thermometerboiler : BoilertargetTemp : floatThermostat(b:Boiler,target:float)currentTemperature(): floatgetTargetTemp() : floatsetTargetTemp( target : float)temperatureChange(newT:float)update()...
Boiler b = new Boiler(1000, 20);Thermostat t = new Thermostat(b); creation d’un objet Thermometert.currentTemperature() envoi message a objet Thermometert.temperatureChange(10); cascade envois de message
cascade messages =⇒ dynamique des programmes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 36
introduction types classes new reference analyse usage this
exemple
thermometres, chaudieres et thermostats
Thermometertemperature : floatThermometer()Thermometer(t : float)inCelsius() : float()changeTemperature(newT:float)...
Boilerpower : inton : booleanBoiler()isOn() : booleanisOff() : booleanturnOn()turnOff()getPower() : int
Thermostatthermo : Thermometerboiler : BoilertargetTemp : floatThermostat(b:Boiler,target:float)currentTemperature(): floatgetTargetTemp() : floatsetTargetTemp( target : float)temperatureChange(newT:float)update()...
Boiler b = new Boiler(1000, 20);Thermostat t = new Thermostat(b); creation d’un objet Thermometert.currentTemperature() envoi message a objet Thermometert.temperatureChange(10); cascade envois de message
cascade messages =⇒ dynamique des programmes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 36
introduction types classes new reference analyse usage this
exemple
thermometres, chaudieres et thermostats
Thermometertemperature : floatThermometer()Thermometer(t : float)inCelsius() : float()changeTemperature(newT:float)...
Boilerpower : inton : booleanBoiler()isOn() : booleanisOff() : booleanturnOn()turnOff()getPower() : int
Thermostatthermo : Thermometerboiler : BoilertargetTemp : floatThermostat(b:Boiler,target:float)currentTemperature(): floatgetTargetTemp() : floatsetTargetTemp( target : float)temperatureChange(newT:float)update()...
Boiler b = new Boiler(1000, 20);Thermostat t = new Thermostat(b); creation d’un objet Thermometert.currentTemperature() envoi message a objet Thermometert.temperatureChange(10); cascade envois de message
cascade messages =⇒ dynamique des programmes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 36
introduction types classes new reference analyse usage this
exemple
thermometres, chaudieres et thermostats
Thermometertemperature : floatThermometer()Thermometer(t : float)inCelsius() : float()changeTemperature(newT:float)...
Boilerpower : inton : booleanBoiler()isOn() : booleanisOff() : booleanturnOn()turnOff()getPower() : int
Thermostatthermo : Thermometerboiler : BoilertargetTemp : floatThermostat(b:Boiler,target:float)currentTemperature(): floatgetTargetTemp() : floatsetTargetTemp( target : float)temperatureChange(newT:float)update()...
Boiler b = new Boiler(1000, 20);Thermostat t = new Thermostat(b); creation d’un objet Thermometert.currentTemperature() envoi message a objet Thermometert.temperatureChange(10); cascade envois de message
cascade messages =⇒ dynamique des programmesUniversite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 36
introduction types classes new reference analyse usage this
analyse (objet) d’un probleme
Quels sont les objets necessaires a la resolution du probleme ?=⇒ decomposition du probleme en objets
A quels modeles ces objets correspondent-ils ?et donc : Quelles sont les classes ?Quelles sont les fonctionnalites/operations dont on veut/doit pouvoirdisposer pour les objets de ces classes ?=⇒ quel comportement ? cad quels messages doit/veut on pouvoirenvoyer aux objets ?Quelle est la structure de l’etat des objets ?structure necessaire a la realisation des comportements desires.
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 37
introduction types classes new reference analyse usage this
analyse (objet) d’un probleme
Quels sont les objets necessaires a la resolution du probleme ?=⇒ decomposition du probleme en objetsA quels modeles ces objets correspondent-ils ?et donc : Quelles sont les classes ?
Quelles sont les fonctionnalites/operations dont on veut/doit pouvoirdisposer pour les objets de ces classes ?=⇒ quel comportement ? cad quels messages doit/veut on pouvoirenvoyer aux objets ?Quelle est la structure de l’etat des objets ?structure necessaire a la realisation des comportements desires.
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 37
introduction types classes new reference analyse usage this
analyse (objet) d’un probleme
Quels sont les objets necessaires a la resolution du probleme ?=⇒ decomposition du probleme en objetsA quels modeles ces objets correspondent-ils ?et donc : Quelles sont les classes ?Quelles sont les fonctionnalites/operations dont on veut/doit pouvoirdisposer pour les objets de ces classes ?=⇒ quel comportement ? cad quels messages doit/veut on pouvoirenvoyer aux objets ?
Quelle est la structure de l’etat des objets ?structure necessaire a la realisation des comportements desires.
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 37
introduction types classes new reference analyse usage this
analyse (objet) d’un probleme
Quels sont les objets necessaires a la resolution du probleme ?=⇒ decomposition du probleme en objetsA quels modeles ces objets correspondent-ils ?et donc : Quelles sont les classes ?Quelles sont les fonctionnalites/operations dont on veut/doit pouvoirdisposer pour les objets de ces classes ?=⇒ quel comportement ? cad quels messages doit/veut on pouvoirenvoyer aux objets ?Quelle est la structure de l’etat des objets ?structure necessaire a la realisation des comportements desires.
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 37
introduction types classes new reference analyse usage this
exemple
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiantun article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donneune commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoir accedera la liste des articles commandes ainsi qu’au prix total de ces articles etau cout des frais de port de la commandeun client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 38
introduction types classes new reference analyse usage this
exemple
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiantun article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donneune commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoir accedera la liste des articles commandes ainsi qu’au prix total de ces articles etau cout des frais de port de la commandeun client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
quels objets ? quelles classes ?
noms communs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 38
introduction types classes new reference analyse usage this
exemple
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiantun article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donneune commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoiracceder a la liste des articles commandes ainsi qu’au prix total de cesarticles et au cout des frais de port de la commandeun client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
quels objets ? quelles classes ?noms communs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 38
introduction types classes new reference analyse usage this
exemple
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiantun article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donneune commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoir accedera la liste des articles commandes ainsi qu’au prix total de ces articles etau cout des frais de port de la commandeun client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
quelles fonctionnalites ? quelles methodes ?
verbes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 38
introduction types classes new reference analyse usage this
exemple
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiantun article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoirsavoir si un article est plus cher qu’un autre article donneune commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoiracceder a la liste des articles commandes ainsi qu’au prix total de cesarticles et au cout des frais de port de la commandeun client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
quelles fonctionnalites ? quelles methodes ?verbes
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 38
introduction types classes new reference analyse usage this
un catalogue regroupe des articles, il permet de trouver un article a partirde son identifiant
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiant
Catalogue
getItem(id : String):Item
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un catalogue regroupe des articles, il permet de trouver un article apartir de son identifiant
Catalogue
getItem(id : String):Item
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donne
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donne
Item
getPrice() : floatgetId() : StringmoreExpensiveThan(other : Item) : boolean
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donne
Item
getPrice() : floatgetId() : String
moreExpensiveThan(other : Item) : boolean
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un article est caracterise par un prix et un identifiant (une chaıne decaracteres pour simplifier) que l’on peut obtenir, on veut pouvoir savoirsi un article est plus cher qu’un autre article donne
Item
getPrice() : floatgetId() : StringmoreExpensiveThan(other : Item) : boolean
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, onpeut ajouter des articles a une commande, on souhaite pouvoir accedera la liste des articles commandes ainsi qu’au prix total de ces articles etau cout des frais de port de la commande
Order
Order(Client, Catalogue)
addItem(item : Item)allItems() : List<Item>getTotalPrice() : floatgetShippingCost() : floatgetCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Order
Order(Client, Catalogue)addItem(item : Item)
allItems() : List<Item>getTotalPrice() : floatgetShippingCost() : floatgetCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Order
Order(Client, Catalogue)addItem(item : Item)allItems() : List<Item>
getTotalPrice() : floatgetShippingCost() : floatgetCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Order
Order(Client, Catalogue)addItem(item : Item)allItems() : List<Item>getTotalPrice() : float
getShippingCost() : floatgetCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Order
Order(Client, Catalogue)addItem(item : Item)allItems() : List<Item>getTotalPrice() : floatgetShippingCost() : float
getCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
une commande est creee pour un client et un catalogue donnes, on peutajouter des articles a une commande, on souhaite pouvoir acceder a laliste des articles commandes ainsi qu’au prix total de ces articles et aucout des frais de port de la commande
Order
Order(Client, Catalogue)addItem(item : Item)allItems() : List<Item>getTotalPrice() : floatgetShippingCost() : floatgetCatalogue() : CataloguegetClient() : Client
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
Client
createOrder(Catalogue) : OrderorderItem(o : Order, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
Client
createOrder(Catalogue) : OrderorderItem(o : Order, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
Client
createOrder(Catalogue) : Order
orderItem(o : Order, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
un client peut creer une commande pour un catalogue et commanderdans cette commande des articles a partir de leur identifiant
Client
createOrder(Catalogue) : OrderorderItem(o : Order, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 39
introduction types classes new reference analyse usage this
Catalogue...getItem(id : String):Item
Item...getPrice() : floatgetId() : StringmoreExpensiveThan(Item) : boolean
Client...createOrder(Catalogue) : OrderorderItem(o :Order, id : String)
Order...Order(Client, Catalogue)addItem(item : Item)allItems() : List<Item>getCatalogue() : CataloguegetClient() : ClientgetTotalPrice() : floatgetShippingCost() : float
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 40
introduction types classes new reference analyse usage this
usage
creer une commande pour un client, faire commander 2 articles parle client, obtenir le prix des articles
on suppose les referencesClient client = new Client(...)
etCatalogue cata = new Catalogue(...)
disponibles et initialisees
Order order = client.createOrder(cata);client.orderItem(order,"A0527");client.orderItem(order,"B3879");float price = order.getTotalPrice();
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 41
introduction types classes new reference analyse usage this
usage
creer une commande pour un client, faire commander 2 articles parle client, obtenir le prix des articles
on suppose les referencesClient client = new Client(...)
etCatalogue cata = new Catalogue(...)
disponibles et initialisees
Order order = client.createOrder(cata);client.orderItem(order,"A0527");client.orderItem(order,"B3879");float price = order.getTotalPrice();
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 41
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);// ajouter l’article a la commande
order.addItem(item);}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {
// recuperer le catalogue de la commandeCatalogue cata = order.getCatalogue();
// recuperer l’article dans le catalogue a partir de la referenceItem item = cata.getItem(id);
// ajouter l’article a la commandeorder.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);// ajouter l’article a la commande
order.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();
// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);// ajouter l’article a la commande
order.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();
// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);
// ajouter l’article a la commande
order.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);
// ajouter l’article a la commande
order.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);// ajouter l’article a la commande
order.addItem(item);
}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
la methode orderItem de Client permet d’ajouter un article aune commande a partir de son identifiant
quel code pour cette methode ?
public void orderItem(Order order, String id) {// recuperer le catalogue de la commande
Catalogue cata = order.getCatalogue();// recuperer l’article dans le catalogue a partir de la reference
Item item = cata.getItem(id);// ajouter l’article a la commande
order.addItem(item);}
envois de messages
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 42
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v1 : dans Client
public float totalCost(Order order) {// recuperer le prix de tous les articles
float total = order.getTotalPrice();// ajouter les frais de port a celui des articles
return total + order.getShippingCost();}
usage :float cost = someClient.totalCost(order);
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 43
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v1 : dans Client
public float totalCost(Order order) {// recuperer le prix de tous les articles
float total = order.getTotalPrice();// ajouter les frais de port a celui des articles
return total + order.getShippingCost();}
usage :float cost = someClient.totalCost(order);
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 43
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v1 : dans Client
public float totalCost(Order order) {// recuperer le prix de tous les articles
float total = order.getTotalPrice();
// ajouter les frais de port a celui des articles
return total + order.getShippingCost();
}
usage :float cost = someClient.totalCost(order);
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 43
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v1 : dans Client
public float totalCost(Order order) {// recuperer le prix de tous les articles
float total = order.getTotalPrice();// ajouter les frais de port a celui des articles
return total + order.getShippingCost();}
usage :float cost = someClient.totalCost(order);
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 43
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
il ne semble pas naturel que ce soit au client de calculer le cout...
principe de responsabilite
quel parametre ?
usage : float cost = someOrder.totalCost();
a quel objet envoyer les messages ?
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 44
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
quel parametre ?
usage : float cost = someOrder.totalCost();
a quel objet envoyer les messages ?
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 44
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost(???) {// recuperer le prix de tous les articles
float total = ????.getTotalPrice();// ajouter les frais de port
return total + ????.getShippingCost();}
quel parametre ?
usage : float cost = someOrder.totalCost();
a quel objet envoyer les messages ?
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 44
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost(???) {// recuperer le prix de tous les articles
float total = ????.getTotalPrice();// ajouter les frais de port
return total + ????.getShippingCost();}
quel parametre ?
usage : float cost = someOrder.totalCost();
a quel objet envoyer les messages ?
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 44
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost() {// recuperer le prix de tous les articles
float total = ????.getTotalPrice();// ajouter les frais de port
return total + ????.getShippingCost();}
quel parametre ? usage : float cost = someOrder.totalCost();
a quel objet envoyer les messages ?
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 44
introduction types classes new reference analyse usage this
auto-reference
il faut une reference vers l’objet qui a invoque la methode totalCost()=
le receveur du message “totalCost()”
auto-reference
en Javathisthis = reference vers l’objet qui invoque la methode (= le receveur)
this est toujours defini dans le contexte d’execution d’une methode
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 45
introduction types classes new reference analyse usage this
auto-reference
il faut une reference vers l’objet qui a invoque la methode totalCost()=
le receveur du message “totalCost()”
auto-reference
en Javathisthis = reference vers l’objet qui invoque la methode (= le receveur)
this est toujours defini dans le contexte d’execution d’une methode
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 45
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost() {// recuperer le prix de tous les articles
float total = ????.getTotalPrice();// ajouter les frais de port
return total + ????.getShippingCost();}
usage :float cost = someOrder.totalCost();
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 46
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost() {// recuperer 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();
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 46
introduction types classes new reference analyse usage this
ajouter une methode qui fournit le cout total d’une commande
ou placer la methode ? dans quelle classe ?
v2 : dans Order
public float totalCost() {// recuperer 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();
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 46
introduction types classes new reference analyse usage this
getTotalPrice dans Order
public float getTotalPrice() {
float total = 0;// cumuler les prix de tous les articlesfor(Item item : this.allItems()) {
total = total + item.getPrice();}return total;
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 47
introduction types classes new reference analyse usage this
getTotalPrice dans Order
public float getTotalPrice() {float total = 0;// cumuler les prix de tous les articlesfor(Item item : this.allItems()) {
total = total + item.getPrice();}return total;
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 47
introduction types classes new reference analyse usage this
createOrder dans Client
un client peut creer une commande pour un catalogueune commande est creee pour un client et un catalogue donnes
public Order createOrder(Catalogue cata) {Order theOrder = new Order(
this, cata
);return theOrder;
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 48
introduction types classes new reference analyse usage this
createOrder dans Client
un client peut creer une commande pour un catalogueune commande est creee pour un client et un catalogue donnes
public Order createOrder(Catalogue cata) {Order theOrder = new Order(
this, cata
);return theOrder;
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 48
introduction types classes new reference analyse usage this
createOrder dans Client
un client peut creer une commande pour un catalogueune commande est creee pour un client et un catalogue donnes
public Order createOrder(Catalogue cata) {Order theOrder = new Order(this, cata);return theOrder;
}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 48
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
code de methode 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 reference objet permet aussi d’acceder aux attributs
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 49
introduction types classes new reference analyse usage this
la classe Item
attributs ? constructeur ?
Item
price : floatid : String
getPrice() : floatgetId() : StringmoreExpensiveThan(item : Item) : boolean
Item(price : int, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 50
introduction types classes new reference analyse usage this
la classe Item
attributs ? constructeur ?
Itemprice : floatid : StringgetPrice() : floatgetId() : StringmoreExpensiveThan(item : Item) : boolean
Item(price : int, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 50
introduction types classes new reference analyse usage this
la classe Item
attributs ? constructeur ?
Itemprice : floatid : StringgetPrice() : floatgetId() : StringmoreExpensiveThan(item : Item) : booleanItem(price : int, id : String)
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 50
introduction types classes new reference analyse usage this
la classe Item
attributs ? constructeur ?
public class Item {private float price;private String id;public float getPrice() {
return this.price;}public float 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;
}}
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 50
introduction types classes new reference 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 changethis.update();
}private void update() {
if (this.targetTemp < this.thermo.temperatureInCelsius() && this.boiler.isOn()) {this.boiler.switchOff();
}else if (this.targetTemp >= this.thermo.temperatureInCelsius() && this.boiler.isOff()) {
this.boiler.switchOn();}
} }
influence de l’etat sur le comportementdynamique des envois de message
Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 51