Septembre 2021 Cours programmation PROG - ESIR 1
Transcript of Septembre 2021 Cours programmation PROG - ESIR 1
![Page 1: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/1.jpg)
2021-2022 Stéphanie ChallitaStéphanie Challita
PROG - ESIR 1Cours programmation
Septembre 2021
1
![Page 2: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/2.jpg)
2021-2022 Stéphanie Challita
Qui suis-je ?
▪ Maître de Conférences @ Université de Rennes 1▪ DiverSE team (University of Rennes, IRISA, Inria)
https://stephaniechallita.github.io/
https://www.diverse-team.fr/
2/168
![Page 3: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/3.jpg)
2021-2022 Stéphanie Challita
DiverSE team
3/168
▪Software engineering group in Rennes
▪Software languages, architecture, simulation, variability, testing, resilience eng.
▪Applied to smart, heterogeneous, and distributed systems
▪~ 30 members: 9 prof/assoc. prof/researchers, 20 PhD students, 3 postdocs, 1 RSE
▪Empirical software approach
▪Strong contractual activity with industry
![Page 4: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/4.jpg)
2021-2022 Stéphanie Challita
Introduction : objectifs du cours
4/168
▪Concepts de la programmation orientée objet
▪Mécanismes et fonctionnement des concepts objets : classes, abstraction, liaisons tardives, polymorphisme
▪Structures de données standards
▪Pratique et implémentation en Java
![Page 5: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/5.jpg)
2021-2022 Stéphanie Challita
Introduction : pourquoi est-ce important ?
5/168
▪La programmation orientée objet est très utilisée et puissante
▪Briques de base pour des prochains cours plus avancés : patrons de conceptions, méthodes de développement industrielles, architecture logicielle, etc.
![Page 6: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/6.jpg)
2021-2022 Stéphanie Challita
Introduction : organisation du module
6/168
▪5 Cours magistraux
▪4 TPs sur 13 séances
▪2 TDs sur 4 séances
![Page 7: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/7.jpg)
2021-2022 Stéphanie Challita
Introduction : modalités d’évaluation
7/168
▪2 Devoirs :■ 28/09/2021 (sur machine)■ 29/10/2021 (sur machine)
▪ 1 Contrôle (sur table) :■ 26/10/2021
![Page 8: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/8.jpg)
2021-2022 Stéphanie Challita
Table des matières
▪Rappel de programmation▪Classes et Objets▪Interfaces et Implémentations▪Généricité▪Structures de données▪Héritage
8/168
![Page 9: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/9.jpg)
2021-2022 Stéphanie Challita
Rappel de programmation
9/168
![Page 10: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/10.jpg)
2021-2022 Stéphanie Challita
Qu’est-ce qu’un programme ?
10/168
Programme
Données d’entrée Données de sortie
![Page 11: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/11.jpg)
2021-2022 Stéphanie Challita
Exemples de programmes
11/168
Calculatrice
Données d’entrée : “(3 + 4) * 5” “35” est la sortie du programme
Navigateur Firefox
Données d’entrée : Clics de souris et saisies au clavier
Navigation sur des pages internet,Communication avec des services numérique distants
VLC media player
Données d’entrée : fichiers sons (mp3) ou vidéos (mp4)
Jeu du son et des images vidéos en fonction du fichier donné en entrée
![Page 12: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/12.jpg)
2021-2022 Stéphanie Challita
Programmation
12/168
Fichiers sources Compilateur ou Interpréteur
Machine
![Page 13: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/13.jpg)
2021-2022 Stéphanie Challita
Compilation
13/168
Fichiers sources
Compilateur
Machine
Compile
Exécute
Fichiers binaires
![Page 14: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/14.jpg)
2021-2022 Stéphanie Challita
Interprétation
14/168
Fichiers sources Interpréteur Machine
Exécute
![Page 15: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/15.jpg)
2021-2022 Stéphanie Challita
Compilation en Java
15/168
Fichiers sources (.java)
Compilateur Java
Machine
Compile
Exécute
Fichiers binaires (.class)
Machine Virtuelle Java (JVM)
![Page 16: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/16.jpg)
2021-2022 Stéphanie Challita
Lignes de commande
16/168
![Page 17: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/17.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : variables
17/168
▪3 Variables :x = 10s = “Message”y = 20
▪Affiche “Message20”
![Page 18: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/18.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : tableaux
18/168
▪Déclaration d’un nouveau tableau
▪Taille du tableau entre [] -> 5
▪Accède au premier élément avec [0]
▪Les indices vont de 0 à taille - 1
▪ taille = tableau.length
![Page 19: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/19.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : structure de contrôle if/then/else
19/168
▪Si x est égale à 5, alors■ y = x*2 = 5*2 = 10
▪Sinon, si x est supérieur à 10, alors■ y = x
▪Sinon y = -1
▪Suivant x, on aura :■ “5;10” si x == 5■ “x;x” si x > 10■ “x;-1“ sinon
![Page 20: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/20.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : structure de contrôle boucle pour i
20/168
▪ Initialisation de la valeur de la bouclei = 0
▪Condition d’arrêtTant que i est < à la taille du tableau
▪Mise à jourOn augmente de 1 la
valeur de i à chaque fin de tour de boucle
![Page 21: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/21.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : structure de contrôle boucle tant que
21/168
▪Condition d’arrêt
▪Mise à jour externe à la syntaxe de la boucle
![Page 22: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/22.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : fonctions
22/168
▪Appel à la fonction twice()
▪Déclaration de la fonction twice()Appel
![Page 23: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/23.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : paramètres et valeur de retour
23/168
▪Affectation de la valeur de retour à une variable
▪Type de retour
▪Paramètre de la fonction
▪Valeur retournée
▪ Signature de fonction : type de retour, nom et paramètres
![Page 24: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/24.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : portée
24/168
▪parameter n’est pas accessible depuis la fonction function
![Page 25: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/25.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : point d’entrée
25/168
▪Point d’entrée du programme :
méthode “main”
![Page 26: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/26.jpg)
2021-2022 Stéphanie Challita
Rappel Langage Java : gestion des erreurs
26/168
▪Déclaration d’Exception potentielle
▪Lancement d’une nouvelle Exception
▪L’appel de la fonction est enveloppé par try / catch
▪Code de traitement de l’erreur
![Page 27: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/27.jpg)
2021-2022 Stéphanie Challita
Rappel : Principe des Tests Unitaires
27/168
ProgrammeTests Unitaires
Exécute
▪✓ Test réussit -> Fonctionnalité codéesans bug
▪❌ Test échoue ->Fonctionnalité contenant un bug
▪1 test unitaire pour 1 fonctionnalité
![Page 28: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/28.jpg)
2021-2022 Stéphanie Challita
Rappel : JUnit Tests pour Java
28/168
▪Déclaration d’une fonction de test
▪Nommage pour indiquer la fonctionnalité testée
▪Données d’entrée du test
▪Vérification de la valeur retournée
![Page 29: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/29.jpg)
2021-2022 Stéphanie Challita
Classes et Objets
29/168
![Page 30: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/30.jpg)
2021-2022 Stéphanie Challita
Motivation : simulation de robot sur carte
30/168
▪Coordonnées initiales du robot
▪Énergie max et courante
▪Consommation d’énergie pour avancer et pour tourner
▪Direction initiale du robot
![Page 31: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/31.jpg)
2021-2022 Stéphanie Challita
Enumération
31/168
▪Définition d’énumération
▪Valeurs possibles
▪Déclaration et affections
▪Switch sur une énumération
▪Pour chaque cas, un algo est défini
![Page 32: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/32.jpg)
2021-2022 Stéphanie Challita
Motivation : simulation de robot sur carte
32/168
▪Condition pour avancer : avoir suffisamment d’énergie
▪Test de la direction courante du robot
▪Mise à jour de la position du robot en fonction de sa direction
▪Mise à jour du niveau courant de batterie
![Page 33: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/33.jpg)
2021-2022 Stéphanie Challita
Motivation : critique du code
33/168
▪Pas de séparation entre traitement et données
▪Difficultés de découpage en fonctions
▪Évolutivité compliquée
▪Pas de lien entre les données : éparpillement des données, cohérence des données difficile
▪Lourd à gérer : Manipulation de N robots => remplacer chaque variable par un tableau de taille N
![Page 34: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/34.jpg)
2021-2022 Stéphanie Challita
Solution : l’Objet !
34/168
▪Encapsuler les données dans une même entité : un objet
▪Fournir des opérations abstraites permettant le traitement et le maintien de la cohérence des données
▪Les objets “Robot” regroupent, cachent et maintiennent la cohérence des données qui composent un robot
▪Les objets “Robot” fournissent des opérations abstraites pour manipuler les Robots : avancer(), tourner(), status(), etc.
![Page 35: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/35.jpg)
2021-2022 Stéphanie Challita
C’est quoi un type ?
35/168
▪Définit :
■ L’ensemble des valeurs pour le type■ L’ensemble des opérations pour le type
▪Exemples : ■ int : valeur comprise entre -2³² et +2³², [+, -, *, %, /, ...] sont les
opérations possibles■ int[] : taille comprise entre 0 et +2³², [.length] est une opération possible■ String : ([aA-zZ]|[0-9]*)*, [.size(), +, ...] comme opérations possibles
![Page 36: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/36.jpg)
2021-2022 Stéphanie Challita
Les Classes : les types des objets
36/168
▪Les classes définissent les types des objets
▪Définition des méthodes et des traitements■ Le comportement des objets
▪Définition des données nécessaires à la réalisation des traitements ■ L’état des objets
▪Le comportement agit sur l’état et l’état influence le comportement
![Page 37: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/37.jpg)
2021-2022 Stéphanie Challita
Class Robot : définition
37/168
▪Définition d’une nouvelle classe Robot
▪ Implémentation de la classe robot entre { } : données et comportement
▪Une classe Java par fichier Java : ici la classe Robot est dans le fichier Robot.java
![Page 38: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/38.jpg)
2021-2022 Stéphanie Challita
Class Robot : attributs
38/168
▪Définition des données composant l’état d’un robot : les attributs
▪private définit la “visibilité” de l’attribut
![Page 39: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/39.jpg)
2021-2022 Stéphanie Challita
Class Robot : visibilité
39/168
▪Visibilité : définition de la permission d’accès
▪sans visibilité : accessible par les objets du package
▪public : accessible par tous les objets
▪private : accessible par les objets du type
▪protected : accessible par les objets du package et “les classes filles”
▪Bonne pratique : attributs toujours en privé
![Page 40: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/40.jpg)
2021-2022 Stéphanie Challita
Class Robot : constructeurs
40/168
▪Porte le même nom que la classe
▪Visibilité
▪∅ de type de retour (même pas void)
▪Avec ou sans paramètre
![Page 41: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/41.jpg)
2021-2022 Stéphanie Challita
Class Robot : constructions
41/168
▪Variable de type Robot nommée r2d2
▪Variable de type Robot nommée c3pO
▪“Instanciation” d’un nouveau robot sans paramètre
▪“Instanciation” d’un nouveau robot avec paramètres
![Page 42: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/42.jpg)
2021-2022 Stéphanie Challita
Class Robot : méthode forward()
42/168
▪Nom de la méthode
▪Visibilité
▪Body (lignes 3 à 14 pour forward())
▪Type de retour
▪Avec ou sans paramètre
![Page 43: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/43.jpg)
2021-2022 Stéphanie Challita
Class Robot : méthode forward()
43/168
▪Usage des attributs de l’objet -> les valeurs des attributs influent sur le comportement de l’objet
![Page 44: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/44.jpg)
2021-2022 Stéphanie Challita
Class Robot : méthode forward()
44/168
▪Appel de méthode depuis une autre méthode
![Page 45: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/45.jpg)
2021-2022 Stéphanie Challita
Class Robot : utilisation
45/168
▪Appel de méthode sur un objet avec le ‘.’
![Page 46: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/46.jpg)
2021-2022 Stéphanie Challita
Class Robot : accès aux attributs privés
46/168
▪ Impossible ! Erreur de compilation
![Page 47: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/47.jpg)
2021-2022 Stéphanie Challita
Class Robot : accesseurs ou getters
47/168
▪Retourne l’attribut ▪Nom de la méthode :get + nom de l’attribut
![Page 48: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/48.jpg)
2021-2022 Stéphanie Challita
Class Robot : mutateurs ou setters
48/168
▪Nom de la méthode :
set + nom de l’attribut
▪Mise à jour de l’attribut ▪Paramètre : nouvelle valeur de l’attribut
![Page 49: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/49.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
49/168
![Page 50: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/50.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
50/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
![Page 51: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/51.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
51/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
![Page 52: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/52.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
52/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
r2d2 c3pO
![Page 53: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/53.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
53/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
r2d2 c3pO
![Page 54: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/54.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
54/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
r2d2, bb8 c3pO
![Page 55: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/55.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
55/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8 c3pO, r2d2
![Page 56: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/56.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
56/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8, c3pO r2d2
![Page 57: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/57.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
57/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8, c3pO, r2d2
![Page 58: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/58.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références
58/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8, c3pO, r2d2
![Page 59: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/59.jpg)
2021-2022 Stéphanie Challita
Questions !
59/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
![Page 60: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/60.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références null
60/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8, r2d2
![Page 61: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/61.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références null
61/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
bb8
![Page 62: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/62.jpg)
2021-2022 Stéphanie Challita
Concept Objet : références null
62/168
Mémoire
x 0
y 0
currentBattery 100
currentDirection NORTH
x 23
y 32
currentBattery 100
currentDirection SOUTH
![Page 63: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/63.jpg)
2021-2022 Stéphanie Challita
Concept Objet : appel de méthode sur référence null
63/168
▪Appel de méthode sur une variable null =>
Erreur:NullPointerException!
![Page 64: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/64.jpg)
2021-2022 Stéphanie Challita
Programmation objet : vocabulaire
64/168
▪Une classe est un type d’objet
▪Un objet ou une instance est une “occurrence” d’une classe
▪Les attributs sont les données d’un objet, définis par la classe
▪Les méthodes implémentent le comportement des objets
▪Les membres d’une classe sont ses attributs et ses méthodes
▪Une variable objet est une référence vers un objet
![Page 65: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/65.jpg)
2021-2022 Stéphanie Challita
Le mot-clé this
65/168
▪Préfixer le nom avec this pour lever l’ambiguïté et spécifier que l’on veut l’attribut
▪Attribut et Paramètre ont le même nom : “currentDirection”
![Page 66: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/66.jpg)
2021-2022 Stéphanie Challita
Méthodes standards des objets
66/168
▪Les méthodes standards :
■ boolean equals(Object o) : permet de tester si deux objets égaux■ String toString() : permet d’afficher sur la sortie standard l’objet
![Page 67: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/67.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals()
67/168
▪Renvoie true quand les objets sont égaux▪Par défaut, Java compare les adresses mémoire▪En implémentant la méthode equals(Object that), on spécifie comment comparer deux objets▪Classiquement, on compare tous les champs
![Page 68: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/68.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals()
68/168
▪Si le paramètre est null, ou n’est pas un Robot■ Alors les objets ne sont pas égaux
▪Sinon, tous les attributs doivent être égaux pour que les objets soient égaux
![Page 69: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/69.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
69/168
![Page 70: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/70.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
70/168
![Page 71: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/71.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
71/168
▪faux
![Page 72: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/72.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
72/168
▪faux
![Page 73: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/73.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
73/168
▪faux
▪vrai
![Page 74: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/74.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
74/168
▪faux
▪vrai
![Page 75: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/75.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
75/168
▪faux
▪vrai
▪vrai
![Page 76: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/76.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
76/168
▪faux
▪vrai
▪vrai
![Page 77: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/77.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
77/168
▪faux
▪vrai
▪vrai
▪faux
![Page 78: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/78.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
78/168
▪faux
▪vrai
▪vrai
▪faux
![Page 79: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/79.jpg)
2021-2022 Stéphanie Challita
Méthode standard : equals() usage
79/168
▪faux
▪vrai
▪vrai
▪faux
▪faux
![Page 80: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/80.jpg)
2021-2022 Stéphanie Challita
Méthode standard : toString()
80/168
▪Formate et transforme les attributs en chaîne de caractères
![Page 81: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/81.jpg)
2021-2022 Stéphanie Challita
Méthode standard : toString() usage
81/168
▪Affiche l’objet sous forme de chaîne
▪Appel à toString() implicite et géré par Java
▪Output: ■ L3 ?■ L4 ?
![Page 82: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/82.jpg)
2021-2022 Stéphanie Challita
Méthode standard : toString() usage
82/168
▪Affiche l’objet sous forme de chaîne
▪Appel à toString() implicite et géré par Java
▪Output:“(0;0): NORTH [100]”“(0;0): NORTH [100]”
![Page 83: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/83.jpg)
2021-2022 Stéphanie Challita
▪Déclaration de constante avec static
▪Déclaration de méthode de classe
▪Usage de la constante et de la méthode static dans une instance
▪Usage hors de l’instance
Le mot-clé static
83/168
![Page 84: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/84.jpg)
2021-2022 Stéphanie Challita
Interfaces et Implémentations
84/168
![Page 85: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/85.jpg)
2021-2022 Stéphanie Challita
Problématique
85/168
▪On a des objets de la vie de tous les jours : ■ Papier, Bouteille, Pile, etc.
▪Ces objets ont des comportements différents :■ déchirer le Papier■ écraser la Bouteille■ etc...
▪ Mais ! Tous ces objets sont recyclables :■ recycler le Papier■ recycler la Bouteille,■ etc...
![Page 86: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/86.jpg)
2021-2022 Stéphanie Challita
Problématique : en classe Java
86/168
![Page 87: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/87.jpg)
2021-2022 Stéphanie Challita
▪On souhaite par exemple, pouvoir programmer le recyclage de l’ensemble des objets contenus dans une “poubelle” ▪Cette poubelle est représentée par un tableau d’objet
■ Papier, Bouteille, Pile, etc.
▪En Java :
Problématique : ce que l’on souhaite faire
87/168
![Page 88: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/88.jpg)
2021-2022 Stéphanie Challita
▪En Java :
▪Comment coder cet ensemble d’objets de type T, qui permet d’écrire :
Problématique
88/168
![Page 89: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/89.jpg)
2021-2022 Stéphanie Challita
Comment faire ? Il faut définir T
89/168
▪Le Type T doit pouvoir :■ Recevoir des références d’objet de type Paper et de type Bottle
■ Doit permettre l’appel de la méthode recycling
![Page 90: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/90.jpg)
2021-2022 Stéphanie Challita
Solutions :
90/168
▪Une nouvelle classe Unique pour représenter les Paper et les Bottle ?
▪Problème : Comment distinguer les objets Paper des objets Bottle ?■ gestion des méthodes spécifiques (tear() / crush()) de chacun ?■ Impossible
![Page 91: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/91.jpg)
2021-2022 Stéphanie Challita
Solutions : l’Interface objet
91/168
▪ Interface : déclare la signature de méthodes publiques■ ∅d’attribut, ∅ de body, ∅ de méthodes privées■ Impossible d’instancier une Interface !
▪Une classe implémente une interface :■ Définition du corps des méthodes déclarées dans l’interface■ Polymorphisme
![Page 92: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/92.jpg)
2021-2022 Stéphanie Challita
Interface Recyclable
92/168
▪Déclaration de l’interface Recyclabe:
■ signature de la méthode recycling
▪ Implémentation dans la classe Paper:■ Implémentation de
recycling
▪ Implémentation dans la class Bottle:■ Implémentation de
recycling
![Page 93: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/93.jpg)
2021-2022 Stéphanie Challita
Interfaces : usage
93/168
▪ Interface en type de paramètre
▪ Instanciation d’un nouvel objet. La variable est du type de l’interface
▪ Appels de la méthode qui prend le Recyclable en paramètre
▪ La méthode peut accepter un objet Paper, car Paper est aussi Recyclable
![Page 94: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/94.jpg)
2021-2022 Stéphanie Challita
Interfaces : usage
94/168
▪ Interface en type de paramètre
▪ Instanciation d’un nouvel objet. La variable est du type de l’interface
▪ Appels de la méthode qui prend le Recyclable en paramètre
▪ La méthode peut accepter un objet Paper, car Paper est aussi Recyclable
Bonne pratique : toujours se baser sur les types abstraits :Paper p = new Paper();Recyclable p = new Paper();
![Page 95: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/95.jpg)
2021-2022 Stéphanie Challita
Multiple implémentation d’Interfaces
95/168
![Page 96: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/96.jpg)
2021-2022 Stéphanie Challita
La force du polymorphisme
96/168
![Page 97: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/97.jpg)
2021-2022 Stéphanie Challita
Limite du polymorphisme
97/168
▪Appel des méthodes recycling et tear depuis une variable de référence Paper
▪Appel des méthodes recycling depuis une variable de référence Recyclable, mais impossible d’appeler tear()
![Page 98: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/98.jpg)
2021-2022 Stéphanie Challita
Mais comment ça marche ?
98/168
▪Output:“recycling paper”“recycling bottle”
![Page 99: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/99.jpg)
2021-2022 Stéphanie Challita
Late-Binding
99/168
▪Vérification à la compilation que l’appel de la méthode est autorisé⤷Dépend uniquement du type de l’appelant
▪Résolution à l'exécution de l’implémentation de la méthode à exécuter⤷Dépend de l’instance sur laquelle on appelle la méthode
![Page 100: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/100.jpg)
2021-2022 Stéphanie Challita
Late-Binding : exemple
100/168
▪Paramètre : Recyclable▪Appel de recycling sur le paramètre
![Page 101: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/101.jpg)
2021-2022 Stéphanie Challita
Late-Binding : exemple
101/168
▪Test des paramètres d’entrée
▪ Instanciation d’objets de différents types
▪Appel de la méthode doRecycling sur le Recyclable : soit Paper soit Bottle
![Page 102: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/102.jpg)
2021-2022 Stéphanie Challita
Late-Binding : exemple
102/168
![Page 103: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/103.jpg)
2021-2022 Stéphanie Challita
Généricité
103/168
![Page 104: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/104.jpg)
2021-2022 Stéphanie Challita
Motivation : objets pair
104/168
▪On veut pouvoir manipuler des pairs : ⤷Des objets qui ont deux types différents
▪Exemple : des objets Pair d’un String et d’un entier
![Page 105: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/105.jpg)
2021-2022 Stéphanie Challita
Motivation : objets pair d’un string et d’un entier
105/168
▪Class PairStringInteger
▪Valeurs String/Integer
▪Constructeur
▪Getters
▪Setters
▪ toString()
![Page 106: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/106.jpg)
2021-2022 Stéphanie Challita
Motivation : pair de string et integer usage
106/168
▪Output : “La réponse;42”“Le nombre;23”“23 à l’envers;32”
![Page 107: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/107.jpg)
2021-2022 Stéphanie Challita
Motivation : objet pair string robot
107/168
▪On veut maintenant pouvoir manipuler des pairs de String et de Robot: ⤷Il faut implémenter de nouveau une classe : PairStringRobot
![Page 108: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/108.jpg)
2021-2022 Stéphanie Challita
Motivation : objet pair string robot
108/168
▪On veut maintenant pouvoir manipuler des pairs de String et de Robot: ⤷Il faut implémenter de nouveau une classe : PairStringRobot
![Page 109: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/109.jpg)
2021-2022 Stéphanie Challita
Motivation : pair de string et robot usage
109/168
▪Output : “r2d2;(0;0): NORTH [100]”“bb8;(0;0): NORTH [100]”
![Page 110: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/110.jpg)
2021-2022 Stéphanie Challita
Motivation : conclusion
110/168
▪Le comportement des objets Pair ne dépend pas des types contenus dans la paire
▪Solution :■ Paramétrer le type Pair avec le type des valeurs manipulées■ Programmation d’une seule classe générique Pair■ Définition des types par l’utilisateur de la classe Pair
▪La classe Pair n’est codée qu’une seule fois et fonctionne pour tous les types de paramètres possibles
![Page 111: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/111.jpg)
2021-2022 Stéphanie Challita
Le type Pair<T1, T2> générique
111/168
▪Class Pair
▪Paramétriser avec deux types T1 et T2
▪Références au types T1 et T2 :
■ Getters
■ Setters
■ toString()
![Page 112: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/112.jpg)
2021-2022 Stéphanie Challita
Le type Pair<T1, T2> générique : usage
112/168
▪Output : “La réponse;42”“bb8;(0;0): NORTH [100]”
▪ Instanciation d’un objet Pair<String, Integer>
▪ Instanciation d’un objet Pair<String, Robot>
▪“sucre syntaxique” :<>
raccourcis pour <String, Robot>
Il est incorrect d’utiliser des types “primitifs”. Pour les génériques, il faut absolument utiliser des types d’objetPair<char, int> p3 = new Pair<>(‘a’, 0);
![Page 113: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/113.jpg)
2021-2022 Stéphanie Challita
L’interface Comparable<T>
113/168
▪ Interface Comparable
▪Paramétré par un type T
▪compareTo permet de définir un ordre des objets
![Page 114: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/114.jpg)
2021-2022 Stéphanie Challita
Implémentation de Comparable<Robot>
114/168
▪ Interface Comparable ▪Paramétré avec le type Robot
▪On ordonne les robots en fonction de leur niveau courant d’énergie
![Page 115: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/115.jpg)
2021-2022 Stéphanie Challita
Structures de données
115/168
![Page 116: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/116.jpg)
2021-2022 Stéphanie Challita
Plan
▪Tableau▪Les Collections standards Java▪Itérable & Iterator▪Liste et Liste chaînée▪Set▪Map▪File▪Pile▪Arbre
116/168
![Page 117: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/117.jpg)
2021-2022 Stéphanie Challita
Introduction
▪Organisation des données▪Automatisation de manipulation▪Performance différente▪Impact sur le développement
117/168
![Page 118: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/118.jpg)
2021-2022 Stéphanie Challita
Tableau
▪Fourni par le langage
▪Efficace pour consulter / modifier des éléments
▪Peu de mémoire consommée
118/168
![Page 119: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/119.jpg)
2021-2022 Stéphanie Challita
Tableau : ajout/retrait en fin de tableau
119/168
![Page 120: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/120.jpg)
2021-2022 Stéphanie Challita
Tableau : ajout/retrait à un indice donné
120/168
![Page 121: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/121.jpg)
2021-2022 Stéphanie Challita
Tableau : ajout d'élément dans tableau plein
121/168
![Page 122: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/122.jpg)
2021-2022 Stéphanie Challita
Tableau : conclusion
122/168
▪Les plus : ■ Simple et rapide à utiliser■ Bonne performance pour l’accès et la modification
▪Les moins :■ Mauvaise performance pour l’ajout ou la suppression■ Taille fixe
▪→Besoin d’une structure de données plus souple
![Page 123: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/123.jpg)
2021-2022 Stéphanie Challita
Les Collections Java
123/168
![Page 124: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/124.jpg)
2021-2022 Stéphanie Challita
Les Collections Java
124/168
▪Ajoute l’élément à la collection▪Retourne vrai si l’élément a bien été ajouté, faux sinon▪Retourne vrai si la Collection contient l’élément, faux sinon▪Retourne vrai si la Collection ne contient aucun élément, faux sinon▪Retourne un itérateur sur les éléments de la collection▪Retire l’élément de la collection Retourne vrai si l’élément a bien été ajouté, faux sinon▪Retourne le nombre d’éléments dans la collection
▪compareTo permet de définir un ordre des objets.
![Page 125: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/125.jpg)
2021-2022 Stéphanie Challita
Iterable et Iterator
125/168
▪Retourne vrai s’il y encore un élément▪Retourne le prochain élément et avance le curseur
▪Construction d’un iterator
▪Tant qu’il y a un élément suivant▪Récupération du prochain élément
▪compareTo permet de définir un ordre des objets.
![Page 126: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/126.jpg)
2021-2022 Stéphanie Challita
For-Each Java
126/168
▪Parcours tous les éléments de la Collection de la même façon
▪Variable contenant l’élément courant de l’itération de la boucle
▪Collection dont on veut parcourir les éléments
![Page 127: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/127.jpg)
2021-2022 Stéphanie Challita
List : ArrayList
127/168
▪Basée sur un tableau
▪Capacité dynamique
▪Ajout/suppression en fin de List performant
▪Ajout/suppression à un indice donné PEU performant
▪Parcours possible
▪Récupération d’élément à partir d’un indice
![Page 128: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/128.jpg)
2021-2022 Stéphanie Challita
List chaînée : LinkedList
128/168
▪Basée sur des éléments liés les uns aux autres
▪Chaque élément référence le précédent et le suivant
▪Ajout/suppression sans décalage (mais nécessite un parcours)
▪Parcours possible
▪Récupération d’élément à partir d’un indice (moins performant)
![Page 129: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/129.jpg)
2021-2022 Stéphanie Challita
List chaînée : LinkedList
129/168
![Page 130: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/130.jpg)
2021-2022 Stéphanie Challita
List chaînée : ajout
130/168
![Page 131: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/131.jpg)
2021-2022 Stéphanie Challita
List chaînée : suppression
131/168
![Page 132: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/132.jpg)
2021-2022 Stéphanie Challita
Ensemble : Set
132/168
▪Ensemble au sens mathématique
▪Ajout/suppression similaire au List avec add() et remove()
▪Pas de notion d’indice : parcours uniquement avec un Itérateur
▪ Implémentation 1 : HashSet<E>
▪ Implémentation 2 : TreeSet<E>
![Page 133: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/133.jpg)
2021-2022 Stéphanie Challita
HashSet
133/168
▪Basé sur une représentation numérique des objets : le hashcode
▪Associe une instance à une valeur (le hashcode)
▪Performant dans le cas où la fonction de hachage est bien choisie
▪Pas d’ordre sur les éléments
![Page 134: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/134.jpg)
2021-2022 Stéphanie Challita
Hashcode et fonction de hachage
134/168
▪Hashcode : valeur numérique qui correspond à une instance particulière d’une classe
▪Fonction de hachage : ■ rapide■ une instance→un entier
![Page 135: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/135.jpg)
2021-2022 Stéphanie Challita
Bonne pratique : hashcode() et equals()
135/168
▪Si on implémente hashcode() alors on implémente equals() (et vice-versa)
▪hashcode() et equals() doivent reposer sur les même champs
▪Si deux objets sont égals (o1.equals(o2) == true) alors leurs hashcodes sont égaux : o1.hashcode() == o2.hashcode()
![Page 136: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/136.jpg)
2021-2022 Stéphanie Challita
TreeSet
136/168
▪Utilise un “arbre” binaire
▪La plupart des opérations ont le même coût
▪Ordre imposé et nécessaire : les objets doivent implémenter l’interface Comparable
![Page 137: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/137.jpg)
2021-2022 Stéphanie Challita
Map
137/168
▪Manipule des couples Clé - Valeur
▪Aussi appelée : dictionnaire, table associative, index, etc.
▪N’implémente pas Iterable
▪Exemple d’implémentation : HashMap<K, V>
![Page 138: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/138.jpg)
2021-2022 Stéphanie Challita
Map : HashMap<K,V>
138/168
▪Basée sur une représentation numérique des objets : le hashcode
▪Associe le hashcode de la clé à la valeur
![Page 139: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/139.jpg)
2021-2022 Stéphanie Challita
Map : usage
139/168
▪Ajoute un couple clé - valeurRenvoie null si la clé n’est pas dans la map, Renvoie l’ancienne valeur sinon▪Récupère la valeur à partir d’une clé▪Retire une association à partir d’une clé▪Vérifie si la map contient la clé ou la valeur donnée▪Retourne le nombre d’associations dans la map▪Vérifie si la map est vide ou non▪Vide la map▪Renvoie l’ensemble des clés▪Renvoie toutes les valeurs
![Page 140: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/140.jpg)
2021-2022 Stéphanie Challita
Map : usage
140/168
![Page 141: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/141.jpg)
2021-2022 Stéphanie Challita
▪File ou Queue
▪FIFO : First In First Out
▪Capacité maximale
▪Queue<E>
File
141/168
![Page 142: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/142.jpg)
2021-2022 Stéphanie Challita
File : exemple
142/168
![Page 143: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/143.jpg)
2021-2022 Stéphanie Challita
Pile
143/168
▪Pile ou Stack
▪LIFO : Last In First Out
▪Stack<E>
![Page 144: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/144.jpg)
2021-2022 Stéphanie Challita
Pile : exemple
144/168
![Page 145: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/145.jpg)
2021-2022 Stéphanie Challita
Arbre : cas d’usage
145/168
![Page 146: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/146.jpg)
2021-2022 Stéphanie Challita
▪Définition :
■ soit vide■ soit avec une valeur ET
2 fils qui sont des arbres binaires
Arbre binaire
146/168
![Page 147: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/147.jpg)
2021-2022 Stéphanie Challita
Arbre binaire : parcours en largeur
147/168
▪De la racine, descendre niveau par niveau
1, 2, 3, 4, 5, 6, 7 ...
![Page 148: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/148.jpg)
2021-2022 Stéphanie Challita
Arbre binaire : parcours en profondeur
148/168
▪De la racine, Parcourir le sous-arbre gauche puisParcourir le sous-arbre droit
1, 2, 4, 5, 3, 6, 7,
![Page 149: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/149.jpg)
2021-2022 Stéphanie Challita
▪Retourne true si l’arbre est vide, false sinon▪Récupère la valeur de l’arbre▪Retourne true si l’arbre est une feuille, il n’a pas de fils, false sinon▪Retourne true si l’arbre a un fils gauche, false▪Retourne true si l’arbre a un fils droit, false sinon▪Récupère le fil gauche▪Récupère le fil droit▪Met à jour la valeur de l’arbre▪Met à jour le sous-arbre gauche▪Met à jour le sous-arbre droit
Arbre binaire : opérations
149/168
![Page 150: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/150.jpg)
2021-2022 Stéphanie Challita
Arbre binaire : exemple
150/168
![Page 151: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/151.jpg)
2021-2022 Stéphanie Challita
Arbre binaire : récursivité
151/168
▪Condition d’arrêt : l’arbre actuel est vide, sa taille est 0
▪Sinon, la taille de l’arbre est 1 + la taille de ses fils
▪Appel récursif à la méthode size() sur les deux sous-arbres
![Page 152: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/152.jpg)
2021-2022 Stéphanie Challita
Arbre binaire de recherche
152/168
▪Définition : Arbre binaire dont■ valeurs à gauche < racine■ valeurs à droite > racine
3 < 8 < 101 < 8 < 14…4 < 8 < 13…1 < 3 < 6
![Page 153: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/153.jpg)
2021-2022 Stéphanie Challita
Héritage
153/168
![Page 154: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/154.jpg)
2021-2022 Stéphanie Challita
Réutilisation : Composition vs Héritage
154/168
▪Composition :Utiliser un type existant au service d’un autre
▪Héritage :
Utiliser un type existant en l’“étendant” →■ Bénéficier des fonctionnalités inchangées■ Modifier celles qui doivent l’être■ Ajouter de nouvelles fonctionnalités
![Page 155: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/155.jpg)
2021-2022 Stéphanie Challita
▪Délégation du stockage et de la manipulation de données à une (des) autres classe(s)
▪Exemple■ TP2 : Block<T>
délègue la gestion deséléments au type Array<T>
▪La notation A Bsignifie que “B compose avec A”
Composition
155/168
![Page 156: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/156.jpg)
2021-2022 Stéphanie Challita
▪Délégation à un(des) attribut(s) interne(s) à la classe
Composition : Implémentation
156/168
![Page 157: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/157.jpg)
2021-2022 Stéphanie Challita
Héritage
157/168
▪Réutiliser un type existant :■ Bénéficier des fonctionnalités inchangées■ Modifier celles qui doivent l’être■ Ajouter de nouvelle fonctionnalités
▪La notation A B signifieB hérite (ou étend) A
▪Relation hiérarchique : ■ “B est un A”, “Carré est un Rectangle”
▪ Notion de spécialisation :■ “Carré est un Rectangle, avec 4 côtés égaux”
![Page 158: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/158.jpg)
2021-2022 Stéphanie Challita
Héritage
158/168
▪B hérite de A :■ B est la classe dite “Fille”■ A est la classe dite “Mère”
▪La class Fille peut :■ Disposer des attributs■ Utiliser les méthodes publiques de la classe Mère■ Redéfinir les méthodes publiques de la classe Mère■ Ajouter de nouvelle méthodes
![Page 159: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/159.jpg)
2021-2022 Stéphanie Challita
Héritage : implémentation
159/168
▪Rectangle “extends” Quadrilatère▪Attributs de la class Rectangle▪Définition de la méthode setHeight▪Définition de la méthode surface
▪Carré “extends” Rectangle▪Rédéfintion de setHeight▪Utilisation des attributs de la classe mère Rectangle▪Utilisation de la méthode surface de la classe Mère
![Page 160: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/160.jpg)
2021-2022 Stéphanie Challita
Rappel Visibilité
160/168
▪Visibilité : définition de la permission d’accès
▪sans visibilité : accessible par les objets du package
▪public : accessible par tous les objets
▪private : accessible par les objets du type
▪protected : accessible par les objets du package et “les classes filles”▪Bonne pratique : attributs toujours en privé
![Page 161: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/161.jpg)
2021-2022 Stéphanie Challita
Héritage : visibilité des attributs
161/168
▪Visibilité protected plutôt que public :Bonne pratique →Mettre les attributs
privateMais pour que les classes filles
accède à ces attributs, on utilise protected
![Page 162: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/162.jpg)
2021-2022 Stéphanie Challita
▪Héritage• Héritage simple (en Java)• Transmission des
attributs, des signatures de méthodes et du code
▪ Interface• Implémentation multiple• Transmission des
signatures de méthodes
162/168
Héritage VS Implémentation d’interface
▪En commun• Polymorphisme• Late-binding
![Page 163: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/163.jpg)
2021-2022 Stéphanie Challita 163/168
▪Une classe abstraite est un type non instanciable mais qui :■ a des attributs■ a des méthodes implémentées■ a des signatures de méthodes déclarées ou méthodes abstraites
▪Les classes qui héritent de classe abstraite DOIVENT implémenter les méthodes abstraites déclarées
Héritage et Classe Abstraite
![Page 164: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/164.jpg)
2021-2022 Stéphanie Challita 164/168
▪Déclaration de classe abstraite▪Déclaration de la méthode abstraite surface
▪ Implémentation obligatoire de la méthode abstraite surface▪Héritage des autres membres de la classe Figure
Héritage et Classe Abstraite : exemple
![Page 165: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/165.jpg)
2021-2022 Stéphanie Challita 165/168
▪Nouveau mot-clé super■ Référence la “superclass” ou la classe mère■ Souvent implicite, comme le this
Le mot-clé super
![Page 166: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/166.jpg)
2021-2022 Stéphanie Challita 166/168
▪Mot-clé super fait référence à la superclass Rectangle
▪Résolution du code : la méthode surface ∅ dans Carré, lookup dans la classe mère
équivalent à super.surface() ou surface()
Le mot-clé super : exemple
![Page 167: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/167.jpg)
2021-2022 Stéphanie Challita 167/168
Le type racine Object
▪Racine de toutes hiérarchies de classes▪Définit les méthodes :
■ toString() : renvoie une représentation textuelle de l’objet■ hashcode() : renvoie valeur numérique qui correspond à une
instance particulière d’une classe■ equals() : teste l'égalité de deux instances
Le type racine Object
![Page 168: Septembre 2021 Cours programmation PROG - ESIR 1](https://reader035.fdocuments.us/reader035/viewer/2022081515/62aea2d43046b956f01686c0/html5/thumbnails/168.jpg)
2021-2022 Stéphanie Challita
Quiz de révision
168/168