126
introduction types classes new ef´ erence analyse usage this Introduction : classes et objets Programmation Orient´ ee Objet Licence mention Informatique Universit´ e Lille – Sciences et Technologies Universit´ e Lille – Sciences et Technologies - Licence mention Informatique Programmation Orient´ ee Objet 1

Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 2: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 3: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 4: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 5: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 6: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 7: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 8: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 9: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 10: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 11: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 12: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 13: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

introduction types classes new reference analyse usage this

8

"timoleon"

Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 7

Page 14: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

introduction types classes new reference analyse usage this

8

"timoleon"

Universite Lille – Sciences et Technologies - Licence mention Informatique Programmation Orientee Objet 7

Page 15: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 16: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 17: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 18: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 19: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 20: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 21: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 22: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 23: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 24: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 25: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 26: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 27: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 28: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 29: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 30: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 31: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 32: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 33: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 34: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 35: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 36: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 37: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 38: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 39: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 40: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 41: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 42: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 43: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 44: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 45: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 46: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 47: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 48: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 49: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 50: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 51: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 52: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 53: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 54: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 55: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 56: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 57: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 58: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 59: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 60: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 61: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 62: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 63: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 64: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 65: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 66: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 67: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 68: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 69: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 70: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 71: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 72: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 73: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 74: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 75: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 76: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 77: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 78: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 79: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 80: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 81: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 82: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 83: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 84: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 85: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 86: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 87: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 88: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 89: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 90: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 91: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 92: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 93: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 94: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 95: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 96: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 97: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 98: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 99: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 100: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 101: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 102: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 103: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 104: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 105: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 106: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 107: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 108: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 109: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 110: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 111: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 112: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 113: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 114: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 115: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 116: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 117: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 118: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 119: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 120: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 121: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 122: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 123: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 124: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 125: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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

Page 126: Introduction : classes et objetsroutier/enseignement/... · 2018-01-11 · introduction langages classes synth`ese new r´ef ´erence analyse usage this langage `a objets (purs) Alan

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