introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages...

Post on 17-Jul-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related