introduction types classes new référence analyse usage this Introduction : classes et objets Programmation Orientée Objet Licence mention Informatique Université Lille – FST - Informatique Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 1 introduction types classes new référence analyse usage this préliminaire Objectifs : présenter les concepts de base de la programmation objet adopter une « approche objet », connaître et savoir mettre en œuvre les concepts fondamentaux préparer aux UE Projet du S4 et Conception Orientée Objet du S5 portail.fil.univ-lille1.fr/ls3/poo Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 2 introduction types classes new référence analyse usage this à l’issue de ce module vous devriez... ... connaître les éléments de base de la programmation objet Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 3 introduction types classes new référence analyse usage this à l’issue de ce module vous devriez... ... connaître les éléments de base de la programmation objet ... maitriser le vocabulaire de la programmation objet : ,→ classe, instance, méthode, interface, attribut, constructeur, encapsulation, polymorphisme, héritage ... savoir décomposer un problème simple en classes et objets ... savoir expliquer ce qui différencie la programmation objet des autres paradigmes ... savoir expliquer ce qu’est le polymorphisme, en présenter les avantages et savoir expliquer ce qu’est le « late-binding » ... connaître le principe ouvert-fermé, être en mesure de l’expliquer et de l’appliquer sur des exemples simples ... pouvoir identifier certaines situations de mauvaises conception objet et les corriger ... mettre en œuvre l’héritage dans des cas simples ... connaitre le mécanisme de lookup Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 3 introduction types classes new référence analyse usage this à l’issue de ce module vous devriez... ... savoir spécifier, coder et tester un problème objet simple dans le langage JAVA Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 4 introduction types classes new référence analyse usage this à l’issue de ce module vous devriez... ... savoir spécifier, coder et tester un problème objet simple dans le langage JAVA ... connaître les principaux éléments de la syntaxe du langage java ... être en mesure d’écrire un programme dans le langage java ... savoir écrire des tests unitaires simples ... pouvoir expliquer clairement le rôle et la sémantique des éléments de langage suivants et savoir les utiliser : ,→ new, class, interface, public, private, this, static, final, package, import, throws, throw, implements, extends, super ... comprendre le transtypage (upcast/downcast) ... savoir gérer les exceptions et connaître la différence entre capture et levée d’exception ... savoir utiliser les « outils » liés à la plateforme java : ,→ javac, java (et classpath), javadoc, jar Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 4 introduction types classes new référence analyse usage this Réussir UE centrale et essentielle dans votre cursus conditions de réussite présence en cours, en TD et en TP indispensable, en étant active/actif 4h30 enseignement ⇒ 4h30 travail personnel / semaine connaître le cours avant les TD et TP faire le travail préparatoire demandé faire soi-même les TP apprentissage de la programmation impossible sans la pratique travailler en groupe est bien sûr possible et c’est une bonne chose, copier un travail est une erreur Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 5 introduction types classes new référence analyse usage this programmer question C’est quoi programmer ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 6 introduction types classes new référence analyse usage this programmer 1 analyse, étude du problème à modéliser : spécifications, écriture de la documentation et des tests Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 6 introduction types classes new référence analyse usage this programmer 1 analyse, étude du problème à modéliser : spécifications, écriture de la documentation et des tests 2 conception : mise en place des solutions techniques Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 6 introduction types classes new référence analyse usage this programmer 1 analyse, étude du problème à modéliser : spécifications, écriture de la documentation et des tests 2 conception : mise en place des solutions techniques 3 codage = écriture du code informatique conforme aux spécifications, validation par les tests Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 6 introduction types classes new référence analyse usage this programmer 1 analyse, étude du problème à modéliser : spécifications, écriture de la documentation et des tests 2 conception : mise en place des solutions techniques 3 codage = écriture du code informatique conforme aux spécifications, validation par les tests Eléments à considérer : maintenance – évolution – réutilisation Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 6 introduction types classes new référence analyse usage this programmation objet paradigme objet Un programme est un ensemble d’objets qui interagissent. reprend et prolonge la démarche modulaire : décomposition d’un problème en parties simples, en java la programmation des traitements reste impérative, plus intuitive car s’inspire du monde réel pour une modélisation « plus naturelle » : « plus proche » du problème facilite la réutilisation et la conception de « grands » logiciels quelques langages : Java, C#, Smalltalk, Python, php5, ... Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 7 introduction types classes new référence analyse usage this 8 Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 8 introduction types classes new référence analyse usage this 8 "timoleon" Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 8 introduction types classes new référence analyse usage this def is_even(x ) : return x % 2 == 0 >>> is_even(8) >>> is_even("timoleon") Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 9 introduction types classes new référence analyse usage this type ? c’est quoi un type ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 10 introduction types classes new référence analyse usage this type type un type de données définit l’ensemble des valeurs possibles pour les données du type les opérations applicables sur ces données toute donnée a un type, toute variable a un type Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 10 introduction types classes new référence analyse usage this typage dynamique en Python ou Javascript le type d’une variable est implicitement défini par sa valeur lors de son affectation, et le type de la variable peut changer au cours d’une exécution >>> x = 8 >>> x 8 >>> type(x) <class ’int’> >>> x = "timoleon" >>> type(x) <class ’str’> l e t x = 8; x; /* 8 */ typeof (x ) ; /* number */ x = "timoleon" ; typeof (x ) ; /* string */ le typage est dynamique Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 11 introduction types classes new référence analyse usage this typage statique en Java, comme en C, le type d’une variable est explicitement défini à sa déclaration il détermine les valeurs que peut prendre la variable et ne peut pas changer le compilateur vérifie le typage int x = 8; x; /* 8 */ x = "timoleon"; // interdit ! ne compile pas le typage est statique Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 12 introduction types classes new référence analyse usage this compilation code source langage de programmation 7−→ Université Lille – FST - Informatique Licence mention Informatique code exécutable langage « machine » Programmation Orientée Objet 13 introduction types classes new référence analyse usage this compilation code source langage de programmation 7−→ code exécutable langage « machine » plusieurs phases 1 2 3 4 analyse lexicale analyse syntaxique : vérifie la syntaxe analyse sémantique : vérifie le typage optimisation de code Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 13 introduction types classes new référence analyse usage this compilation code source langage de programmation 7−→ code exécutable langage « machine » plusieurs phases 1 2 3 4 analyse lexicale analyse syntaxique : vérifie la syntaxe analyse sémantique : vérifie le typage optimisation de code en C la compilation est suivie de l’édition de liens : early-binding pas en Java : late-binding voir plus tard dans le cours Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 13 introduction types classes new référence analyse usage this machine virtuelle un compilateur C génère un code en langage machine binaire exécutable par une machine hôte donnée le compilateur java génère du bytecode java = langage machine virtuel le code java s’exécute dans une Java Virtual Machine (JVM) la JVM interprète le bytecode pour l’exécuter la JVM rend le code java indépendant de l’OS et de la machine hôte « compile once, run everywhere » Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 14 introduction types classes new référence analyse usage this int thermometre = 8; int age = 8; int price = 8; public boolean age_senior ( int a) { return a >= 70; } intro . age_senior (age ) ; intro . age_senior (thermometre ) ; intro . age_senior ( price ) ; public float en_fahrenheit ( int t ) { return 9/5∗t + 32; } intro . en_fahrenheit (thermometre ) ; intro . en_fahrenheit (age ) ; intro . en_fahrenheit ( price ) ; ne devrait pouvoir être appliqué qu’à des « âges » ne devrait pouvoir être appliqué qu’à des « températures » qui contrôle les opérations possibles ? age_senior() ne doit être possible que pour des âges les types de base ne suffisent pas besoin de distinguer âges et températures même si les deux données sont représentées par un entier Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 15 introduction types classes new référence analyse usage this types composites données sur des personnes caractérisées par leur nom et année de naissance int a = 2006; int b = 2001; String c = "Alice"; String d = "Bob"; des variables séparées ne conviennent pas il faut un type composite, par exemple en Python un dictionnaire >>> a l i c e = { ’annee’ : 2001, ’nom’ : "Alice" } >>> bob = { ’annee’ : 2006, ’nom’ : "Bob" } def est_majeur(personne ) : return 2022 − personne [ ’annee’ ] >= 18 >>> est_majeur( a l i c e ) >>> est_majeur(bob) possible car bob et alice partagent la même structure de clés Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 16 introduction types classes new référence analyse usage this on retrouve les mêmes problèmes qu’avec les types simples articles caractérisés par un prix et une référence >>> bidule = { ’prix’ : 17, ’reference’ : "JB007" } >>> est_majeur( bidule ) AttributeError : ’dict’ object has no attribute ’age’ livres caractérisés par leur année de parution et leur nom : >>> l o t r = { ’annee’ : 1954, ’nom’ : "Seigneur des Anneaux" } >>> est_majeur( l o t r ) True ’annee’ n’a pas le même sens pour une « personne » et pour un « livre » est_majeur() ne devrait pouvoir être appliqué qu’à des « personnes » partager les clefs ne suffit pas Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 17 introduction types classes new référence analyse usage this bilan les types de base (simples ou composites) ne suffisent pas il faut pouvoir distinguer un « int age » et un « int thermometre » des données composites de même nature doivent partager la même structure la possibilité d’appliquer une opération à une donnée doit être contrôlée selon la nature de la donnée il faut pouvoir définir ses propres types Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 18 introduction types classes new référence analyse usage this un type définit les valeurs possibles et les opérations autorisées un type Thermometre valeurs possibles : la valeur en degré centigrade de type int opérations autorisées : obtenir la valeur en Fahrenheit Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 19 introduction types classes new référence analyse usage this un type définit les valeurs possibles et les opérations autorisées un type Thermometre valeurs possibles : la valeur en degré centigrade de type int opérations autorisées : obtenir la valeur en Fahrenheit un type Age valeurs possibles : une donnée de type int opérations autorisées : savoir si l’âge correspond à un âge sénior Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 19 introduction types classes new référence analyse usage this un type définit les valeurs possibles et les opérations autorisées un type Thermometre valeurs possibles : la valeur en degré centigrade de type int opérations autorisées : obtenir la valeur en Fahrenheit un type Age valeurs possibles : une donnée de type int opérations autorisées : savoir si l’âge correspond à un âge sénior un type Personne valeurs possibles : un âge de type int et un nom de type String opérations autorisées : savoir si la personne est majeure, obtenir l’âge Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 19 introduction types classes new référence analyse usage this un type définit les valeurs possibles et les opérations autorisées un type Thermometre valeurs possibles : la valeur en degré centigrade de type int opérations autorisées : obtenir la valeur en Fahrenheit un type Age valeurs possibles : une donnée de type int opérations autorisées : savoir si l’âge correspond à un âge sénior un type Personne valeurs possibles : un âge de type int et un nom de type String opérations autorisées : savoir si la personne est majeure, obtenir l’âge un type Article valeurs possibles : un prix de type int et une référence de type String opérations autorisées : obtenir le prix TTC Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 19 introduction types classes new référence analyse usage this Programmation Objet en programmation objet, les données sont représentées par des objets la programmation objet consiste à définir les types des objets un objet est composé de données (= d’autres objets) un objet peut exécuter des opérations un objet a un type et le type d’un objet définit la structure des données qui composent cet objet les attributs les opérations (= traitements) que peut exécuter cet objet les méthodes Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 20 introduction types classes new référence classes analyse usage this langages de classes classe une classe est un type objet une classe définit les méthodes et les traitements associés ,→ le comportement des objets la structure des attributs nécessaires à la réalisation des traitements ,→ l’état des objets le comportement agit sur l’état et l’état influence le comportement Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 21 introduction types classes new référence analyse usage this méthodes et attributs méthode une méthode est une fonction qui appartient à une classe « function member » une méthode ne peut être utilisée que par les objets de la classe un objet ne peut exécuter que les méthodes de sa classe attribut un attribut est une variable qui appartient à un objet « data member » les attributs sont définis par la classe de l’objet, chaque attribut a un type Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 22 introduction types classes new référence analyse usage this instance une classe permet de créer des objets ces objets sont du type de cette classe instance on appelle instance un objet créé par une classe tout objet est instance d’une classe Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 23 introduction types classes new référence analyse usage this définir une classe c’est 1 définir les méthodes que pourront exécuter les objets de la classe tous les objets d’un même classe peuvent exécuter les mêmes méthodes tout traitement réalisé par le programme est défini dans une méthode 2 définir les attributs des objets de la classe tous les objets d’une même classe ont la même structure d’attributs mais les valeurs des attributs sont « personnelles » à chaque objet, elles peuvent être différentes d’un objet à l’autre les données du programme se trouvent dans les attributs des objets Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 24 introduction types classes new référence analyse usage this envoi de message on interagit avec un objet uniquement via ses méthodes les méthodes de sa classe on parle d’ « envoi de message » à l’objet l’objet a le contrôle sur le message qui lui est envoyé utilisation de la notation pointée unePersonne.estMajeur() Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 25 introduction types classes new référence analyse usage this exemples classe Thermometer structure attributs : value de type int méthodes : getValue(), toFahrenheit(), toString() t1 et t2 deux objets de la classe Thermometer → même structure d’attributs, mais valeurs différentes Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 26 introduction types classes new référence analyse usage this exemples classe Thermometer structure attributs : value de type int méthodes : getValue(), toFahrenheit(), toString() t1 et t2 deux objets de la classe Thermometer → même structure d’attributs, mais valeurs différentes classe Person structure attributs : birthYear de type int, name de type String méthodes : isAdult(), isOlderThan(Person), getBirthYear(), getName(), toString() alice un objet de la classe Person Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 26 introduction types classes new analyse usage this Person name : String birthYear : int getName() : String getBirthYear() : int isAdult() : boolean isOlderThan(p : Person) : boolean toString() : String Thermometer value : int getValue() : int toFahrenheit() : int toString() : String t1.toFahrenheit() 7→ 53.6 t2.toFahrenheit() 7→ 68 t1.toString() 7→ "temperature is 12o C" t1.isAdult() n’est pas possible référence alice.getBirthYear() 7→ 19 alice.isAdult() 7→ true alice.toString() 7→ "Alice is born in 2001" alice.toFahrenheit() n’est pas possible conformément à sa classe (son type) l’objet « contrôle » le message sa légalité pas d’ambiguïté pour deux messages (méthodes) de même nom dans des classes différentes (cf. toString() ) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 27 introduction types classes new référence analyse usage this synthèse classe = définition/modèle Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 28 introduction types classes new référence analyse usage this synthèse classe = définition/modèle instance = objet conforme au modèle de la classe qui l’a créée Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 28 introduction types classes new référence analyse usage this synthèse classe = définition/modèle décrit la structure de l’état des objets les attributs et leurs types définit les envois de messages possibles les méthodes =⇒ interface d’une classe abstrait instance = objet conforme au modèle de la classe qui l’a créée Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 28 introduction types classes new référence analyse usage this synthèse classe = définition/modèle décrit la structure de l’état des objets les attributs et leurs types définit les envois de messages possibles les méthodes =⇒ interface d’une classe abstrait instance = objet conforme au modèle de la classe qui l’a créée son état correspond à la structure définie par sa classe ,→ association de valeurs aux attributs n’accepte que les messages définis par la classe = n’exécute que les méthodes définies par sa classe concret Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 28 introduction types classes new référence analyse usage this constructeurs à l’exécution, il faut créer les objets conformément au modèle constructeur Pour créer un objet il faut utiliser un constructeur. Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au modèle défini par la classe du constructeur. Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 29 introduction types classes new référence analyse usage this constructeurs à l’exécution, il faut créer les objets conformément au modèle constructeur Pour créer un objet il faut utiliser un constructeur. Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au modèle défini par la classe du constructeur. un constructeur a deux rôles 1 2 créer les attributs de l’objet (la structure de l’état) =⇒ réserver l’espace mémoire donner les valeurs initiales des attributs (« initialiser l’objet ») Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 29 introduction types classes new référence analyse usage this constructeurs à l’exécution, il faut créer les objets conformément au modèle constructeur Pour créer un objet il faut utiliser un constructeur. Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au modèle défini par la classe du constructeur. un constructeur a deux rôles 1 2 créer les attributs de l’objet (la structure de l’état) =⇒ réserver l’espace mémoire donner les valeurs initiales des attributs (« initialiser l’objet ») chaque classe doit définir comment sont initialisés les attributs ,→ il peut y avoir plusieurs manières de réaliser cette initialisation Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 29 introduction types classes new référence analyse usage this en Java constructeur en Java new + nom de la classe (+ param) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 30 introduction types classes new référence analyse usage this en Java constructeur en Java new + nom de la classe (+ param) exemple : new Thermometer() new Thermometer(20) new Person("Alice", 2001) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 30 introduction types classes new référence analyse usage this en Java constructeur en Java new + nom de la classe (+ param) exemple : new Thermometer() new Thermometer(20) new Person("Alice", 2001) en Java, si une classe ne définit pas de constructeur, alors il y a un constructeur par défaut (constructeur sans paramètre) ,→ il existe seulement s’il n’y a pas d’autre constructeur déclaré Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 30 introduction types classes new référence analyse usage this exemple public class Thermometer { private float temperature ; attribut public Thermometer( float initialTemp ) { un constructeur this . temperature = initialTemp ; } public Thermometer() { this . temperature = 0; // ou : t h i s (0); un autre constructeur } public float temperatureInCelsius () { méthodes return this . temperature ; } public void changeTemperature( float newTemp) { this . temperature = newTemp; } public String toString () { return "current temperature is : "+this . temperature ; } public float temperatureInFahrenheit () { return (9.0 f /5.0 f )∗ this . temperature+32; } } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 31 introduction types classes new référence analyse usage this référence l’appel à un constructeur a pour résultat une référence vers l’objet créé. cette référence = un pointeur vers l’identité de l’objet. Elle peut être stockée dans une variable (de type objet). important La référence permet d’accéder à l’objet, mais n’est pas l’objet lui-même. Une variable objet contient l’information pour accéder à l’objet. cf. télécommande d’un téléviseur Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 32 introduction types classes new référence analyse usage this en Java déclaration variable Les variables sont typées. Le type d’une variable est fixé à la déclaration. Type variableId; variableId est une référence qui peut pointer des objets de type Type (si Type est un type objet). affectation L’opérateur d’affectation “=” permet d’attribuer une valeur à une variable. variableId = expression; La valeur de expression est affectée à variableId. Cette valeur doit être du type de variableId. Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 33 introduction types classes new référence analyse usage this une variable objet non initialisée vaut null on peut déclarer et initialiser en même temps un objet non référencé est perdu, on ne peut plus d’adresser à lui ,→ garbage collector Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 34 introduction types classes new référence analyse usage this une variable objet non initialisée vaut null on peut déclarer et initialiser en même temps un objet non référencé est perdu, on ne peut plus d’adresser à lui ,→ garbage collector Thermometer th1; // th1 vaut null th1 = new Thermometer(20); // th1 référence l’objet créé Thermometer th2 = new Thermometer(25); // déclaration et initialisation th1 = new Thermometer(18); // th1 référence un autre objet // l’objet précédent est perdu Thermometer th3 = th1; // th3 référence le même objet que th1 th1 = new Thermometer(); // th1 référence un nouvel objet // l’objet précédent est toujours référencé par th3 rappel : chaque appel à new crée un nouvel objet Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 34 introduction types classes new référence analyse usage this envoi de message un envoi de message permet d’invoquer une méthode sur un objet pour lui envoyer un message il faut une référence vers l’objet reference.message(...) le message doit être autorisé pour le type de la référence Thermometer th1 = new Thermometer(25); th1.temperatureInCelsius(); // 25 th1.changeTemperature(20); th1.temperatureInCelsius(); // 20 th1.temperatureInFahrenheit(); // 68 « ref.methode() » = « l’objet référencé par ref exécute methode » la validité du message pour le type de la référence est vérifié à la compilation Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 35 introduction types classes new référence analyse usage this invocation de méthode une méthode ne peut pas être utilisée autrement qu’en étant invoquée sur un objet via un envoi de message à cet objet l’objet invoquant = le receveur du message il fait partie du contexte d’exécution de la méthode Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 36 introduction types classes new référence analyse usage this exemple thermomètres Thermometer temperature : float Thermometer() Thermometer(t : float) inCelsius() : float() changeTemperature(newT:float) ... Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 37 introduction types classes new référence analyse usage this exemple thermomètres, chaudières Thermometer temperature : float Thermometer() Thermometer(t : float) inCelsius() : float() changeTemperature(newT:float) ... Boiler power : int on : boolean Boiler(power : int) isOn() : boolean isOff() : boolean turnOn() turnOff() getPower() : int Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 37 introduction types classes new référence analyse usage this exemple thermomètres, chaudières et thermostats Thermometer temperature : float Thermometer() Thermometer(t : float) inCelsius() : float() changeTemperature(newT:float) ... Boiler power : int on : boolean Boiler(power : int) isOn() : boolean isOff() : boolean turnOn() turnOff() getPower() : int Université Lille – FST - Informatique Licence mention Informatique Thermostat thermo : Thermometer boiler : Boiler targetTemp : float Thermostat(b:Boiler,target:float) currentTemperature(): float getTargetTemp() : float setTargetTemp( target : float) temperatureChange(newT:float) update() ... Programmation Orientée Objet 37 introduction types classes new référence analyse usage this exemple thermomètres, chaudières et thermostats Thermometer temperature : float Thermometer() Thermometer(t : float) inCelsius() : float() changeTemperature(newT:float) ... Boiler power : int on : boolean Boiler(power : int) isOn() : boolean isOff() : boolean turnOn() turnOff() getPower() : int Boiler b = new Boiler(1000); Thermostat t = new Thermostat(b,20); t.currentTemperature() t.temperatureChange(10); Université Lille – FST - Informatique Licence mention Informatique Thermostat thermo : Thermometer boiler : Boiler targetTemp : float Thermostat(b:Boiler,target:float) currentTemperature(): float getTargetTemp() : float setTargetTemp( target : float) temperatureChange(newT:float) update() ... + création aussi d’un objet Thermometer déclenche envoi message temperatureInCelsius() à objet Thermometer cascade envois de message Programmation Orientée Objet 37 introduction types classes new référence analyse usage this exemple thermomètres, chaudières et thermostats Thermometer temperature : float Thermometer() Thermometer(t : float) inCelsius() : float() changeTemperature(newT:float) ... Boiler power : int on : boolean Boiler(power : int) isOn() : boolean isOff() : boolean turnOn() turnOff() getPower() : int Boiler b = new Boiler(1000); Thermostat t = new Thermostat(b,20); t.currentTemperature() t.temperatureChange(10); Thermostat thermo : Thermometer boiler : Boiler targetTemp : float Thermostat(b:Boiler,target:float) currentTemperature(): float getTargetTemp() : float setTargetTemp( target : float) temperatureChange(newT:float) update() ... + création aussi d’un objet Thermometer déclenche envoi message temperatureInCelsius() à objet Thermometer cascade envois de message cascade messages =⇒ dynamique des programmes Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 37 introduction types classes new référence analyse usage this analyse (objet) d’un problème Quels sont les objets nécessaires à la résolution du problème ? =⇒ décomposition du problème en objets Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 38 introduction types classes new référence analyse usage this analyse (objet) d’un problème Quels sont les objets nécessaires à la résolution du problème ? =⇒ décomposition du problème en objets A quels modèles ces objets correspondent-ils ? et donc : Quelles sont les classes ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 38 introduction types classes new référence analyse usage this analyse (objet) d’un problème Quels sont les objets nécessaires à la résolution du problème ? =⇒ décomposition du problème en objets A quels modèles ces objets correspondent-ils ? et donc : Quelles sont les classes ? Quelles sont les fonctionnalités/opérations dont on veut/doit pouvoir disposer pour les objets de ces classes ? =⇒ quel comportement ? càd quels messages doit/veut on pouvoir envoyer aux objets ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 38 introduction types classes new référence analyse usage this analyse (objet) d’un problème Quels sont les objets nécessaires à la résolution du problème ? =⇒ décomposition du problème en objets A quels modèles ces objets correspondent-ils ? et donc : Quelles sont les classes ? Quelles sont les fonctionnalités/opérations dont on veut/doit pouvoir disposer pour les objets de ces classes ? =⇒ quel comportement ? càd quels messages doit/veut on pouvoir envoyer aux objets ? Quelle est la structure de l’état des objets ? structure nécessaire à la réalisation des comportements désirés. Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 38 introduction types classes new référence analyse usage this exemple un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 39 introduction types classes new référence analyse usage this exemple un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant quels objets ? quelles classes ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 39 introduction types classes new référence analyse usage this exemple un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant quels objets ? quelles classes ? noms communs Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 39 introduction types classes new référence analyse usage this exemple un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant quelles fonctionnalités ? quelles méthodes ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 39 introduction types classes new référence analyse usage this exemple un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant quelles fonctionnalités ? quelles méthodes ? verbes Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 39 introduction types classes new référence analyse usage this un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant Catalogue Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un catalogue regroupe des articles, il permet de trouver un article à partir de son identifiant Catalogue getItem(id : String):Item Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné Item Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné Item getPrice() : float getId() : String Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un article est caractérisé par un prix et un identifiant (une chaîne de caractères pour simplifier) que l’on peut obtenir, on veut pouvoir savoir si un article est plus cher qu’un autre article donné Item getPrice() : float getId() : String moreExpensiveThan(other : Item) : boolean Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) addItem(item : Item) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) addItem(item : Item) allItems() : List<Item> Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) addItem(item : Item) allItems() : List<Item> getTotalPrice() : float Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) addItem(item : Item) allItems() : List<Item> getTotalPrice() : float getShippingCost() : float Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, on souhaite pouvoir accéder à la liste des articles commandés ainsi qu’au prix total de ces articles et au coût des frais de port de la commande Order Order(Client, Catalogue) addItem(item : Item) allItems() : List<Item> getTotalPrice() : float getShippingCost() : float getCatalogue() : Catalogue getClient() : Client Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant Client Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant Client Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant Client createOrder(Catalogue) : Order Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this un client peut créer une commande pour un catalogue et commander dans cette commande des articles à partir de leur identifiant Client createOrder(Catalogue) : Order orderItem(o : Order, id : String) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 40 introduction types classes new référence analyse usage this Catalogue ... getItem(id : String):Item Order Item ... getPrice() : float getId() : String moreExpensiveThan(Item) : boolean Client ... createOrder(Catalogue) : Order orderItem(o :Order, id : String) Université Lille – FST - Informatique Licence mention Informatique ... Order(Client, Catalogue) addItem(item : Item) allItems() : List<Item> getCatalogue() : Catalogue getClient() : Client getTotalPrice() : float getShippingCost() : float Programmation Orientée Objet 41 introduction types classes new référence analyse usage this usage créer une commande pour un client, faire commander 2 articles par le client, obtenir le prix total des articles de la commande on suppose les références Client client = new Client(...) et Catalogue cata = new Catalogue(...) disponibles et initialisées Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 42 introduction types classes new référence analyse usage this usage créer une commande pour un client, faire commander 2 articles par le client, obtenir le prix total des articles de la commande on suppose les références Client client = new Client(...) et Catalogue cata = new Catalogue(...) disponibles et initialisées Order order = client.createOrder(cata); client.orderItem(order,"A0527"); client.orderItem(order,"B3879"); float price = order.getTotalPrice(); Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 42 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande // récupérer l’article dans le catalogue à partir de la réference } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande // récupérer l’article dans le catalogue à partir de la réference // ajouter l’article à la commande } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande Catalogue cata = order.getCatalogue(); // récupérer l’article dans le catalogue à partir de la réference // ajouter l’article à la commande } envois de messages Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande Catalogue cata = order.getCatalogue(); // récupérer l’article dans le catalogue à partir de la réference Item item = cata.getItem(id); // ajouter l’article à la commande } envois de messages Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this la méthode orderItem de Client permet d’ajouter un article à une commande à partir de son identifiant quel code pour cette méthode ? public void orderItem(Order order, String id) { // récupérer le catalogue de la commande Catalogue cata = order.getCatalogue(); // récupérer l’article dans le catalogue à partir de la réference Item item = cata.getItem(id); // ajouter l’article à la commande order.addItem(item); } envois de messages Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 43 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 44 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v1 : dans Client Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 44 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v1 : dans Client public float totalCost(Order order) { // récupérer le prix de tous les articles // ajouter les frais de port à celui des articles } usage : float cost = someClient.totalCost(order); Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 44 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v1 : dans Client public float totalCost(Order order) { // récupérer le prix de tous les articles float total = order.getTotalPrice(); // ajouter les frais de port à celui des articles return total + order.getShippingCost(); } usage : float cost = someClient.totalCost(order); Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 44 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? il ne semble pas naturel que ce soit au client de calculer le coût... principe de responsabilité Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 45 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 45 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost(???) { // récupérer le prix de tous les articles float total = ????.getTotalPrice(); // ajouter les frais de port return total + ????.getShippingCost(); } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 45 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost(???) { // récupérer le prix de tous les articles float total = ????.getTotalPrice(); // ajouter les frais de port return total + ????.getShippingCost(); } quel paramètre ? à quel objet envoyer les messages ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 45 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost() { // récupérer le prix de tous les articles float total = ????.getTotalPrice(); // ajouter les frais de port return total + ????.getShippingCost(); } quel paramètre ? usage : float cost = someOrder.totalCost(); à quel objet envoyer les messages ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 45 introduction types classes new référence analyse usage this auto-référence il faut une référence vers l’objet qui a invoqué la méthode totalCost() = le receveur du message « .totalCost() » auto-référence Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 46 introduction types classes new référence analyse usage this auto-référence il faut une référence vers l’objet qui a invoqué la méthode totalCost() = le receveur du message « .totalCost() » auto-référence en Java this this = référence vers l’objet qui invoque la méthode (= le receveur) this est toujours défini dans le contexte d’éxécution d’une méthode Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 46 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost() { // récupérer le prix de tous les articles float total = ????.getTotalPrice(); // ajouter les frais de port return total + ????.getShippingCost(); } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 47 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost() { // récupérer le prix de tous les articles de cette commande float total = this.getTotalPrice(); // ajouter les frais de port de cette commande return total + this.getShippingCost(); } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 47 introduction types classes new référence analyse usage this ajouter une méthode qui fournit le coût total d’une commande où placer la méthode ? dans quelle classe ? v2 : dans Order public float totalCost() { // récupérer le prix de tous les articles de cette commande float total = this.getTotalPrice(); // ajouter les frais de port de cette commande return total + this.getShippingCost(); } usage : float cost = someOrder.totalCost(); Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 47 introduction types classes new référence analyse usage this getTotalPrice dans Order public float getTotalPrice() { } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 48 introduction types classes new référence analyse usage this getTotalPrice dans Order public float getTotalPrice() { float total = 0; // cumuler les prix de tous les articles for(Item item : this.allItems()) { total = total + item.getPrice(); } return total; } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 48 introduction types classes new référence analyse usage this createOrder dans Client un client peut créer une commande pour un catalogue une commande est créée pour un client et un catalogue donnés Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 49 introduction types classes new référence analyse usage this createOrder dans Client un client peut créer une commande pour un catalogue une commande est créée pour un client et un catalogue donnés public Order createOrder(Catalogue cata) { Order theOrder = new Order( ); return theOrder; } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 49 introduction types classes new référence analyse usage this createOrder dans Client un client peut créer une commande pour un catalogue une commande est créée pour un client et un catalogue donnés public Order createOrder(Catalogue cata) { Order theOrder = new Order(this, cata); return theOrder; } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 49 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? public boolean moreExpensiveThan(Item otherItem) { } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? public boolean moreExpensiveThan(Item otherItem) { // le prix de cet article est plus grand que celui de otherItem } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? public boolean moreExpensiveThan(Item otherItem) { // le prix de cet article est plus grand que celui de otherItem return this.getPrice() > otherItem.getPrice(); } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? public boolean moreExpensiveThan(Item otherItem) { // le prix de cet article est plus grand que celui de otherItem return this.getPrice() > otherItem.getPrice(); } ou Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this code de méthode moreExpensiveThan de Item ? public boolean moreExpensiveThan(Item otherItem) { // le prix de cet article est plus grand que celui de otherItem return this.getPrice() > otherItem.getPrice(); } ou public boolean moreExpensiveThan(Item otherItem) { return this.price > otherItem.price; } une référence objet permet aussi d’accéder aux attributs Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 50 introduction types classes new référence analyse usage this la classe Item attributs ? constructeur ? Item getPrice() : float getId() : String moreExpensiveThan(item : Item) : boolean Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 51 introduction types classes new référence analyse usage this la classe Item attributs ? constructeur ? Item price : float id : String getPrice() : float getId() : String moreExpensiveThan(item : Item) : boolean Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 51 introduction types classes new référence analyse usage this la classe Item attributs ? constructeur ? Item price : float id : String getPrice() : float getId() : String moreExpensiveThan(item : Item) : boolean Item(price : int, id : String) Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 51 introduction types classes new référence analyse usage this la classe Item attributs ? constructeur ? public class Item { private float price; private String id; public float getPrice() { return this.price; } public String getId() { return this.id; } public boolean moreExpensiveThan(Item otherItem) { return this.price > otherItem.price; } public Item(float p, String id) { this.price = p; this.id = id; } } Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 51 introduction types classes new référence analyse usage this exemple (retour) public class Thermostat { private Boiler boiler; private Thermometer thermo; private float targetTemp; public Thermostat(Boiler boiler, float targetTemp) { this.boiler = boiler; this.thermo = new Thermometer(22); this.targetTemp = targetTemp; this.update(); } ... public void temperatureChange(float newTemperature) { this.thermo.changeTemperature(newTemperature); // checks if boiler must be turned on or off when ambient temperature change this.update(); } private void update() { if (this.targetTemp < this.thermo.inCelsius() && this.boiler.isOn()) { this.boiler.turnOff(); } else if (this.targetTemp >= this.thermo.inCelsius() && this.boiler.isOff()) { this.boiler.turnOn(); } } } influence de l’état sur le comportement dynamique des envois de message Université Lille – FST - Informatique Licence mention Informatique Programmation Orientée Objet 52