1 00:00:00,040 --> 00:00:00,080 "Qu'est-ce qu'un objet ? Une entité avec un état qui réagit à des messages." 2 00:00:00,120 --> 00:00:00,160 Stéphane Ducasse, research direction, Inria. 3 00:00:01,080 --> 00:00:03,800 -Dans ce cours, je vais vous montrer ce qu'est un objet. 4 00:00:04,120 --> 00:00:06,160 C'est une entité qui a un état 5 00:00:06,480 --> 00:00:09,400 et qui va exécuter des méthodes en réaction à un message. 6 00:00:10,240 --> 00:00:11,840 Qu'est-ce qu'un objet ? 7 00:00:12,160 --> 00:00:14,960 C'est une petite entité qui va vivre dans le système informatique 8 00:00:15,280 --> 00:00:16,560 et qui a plusieurs propriétés. 9 00:00:16,880 --> 00:00:18,880 La première, c'est qu'elle a un état. La deuxième, un comportement. 10 00:00:19,200 --> 00:00:20,840 La troisième, une identité. 11 00:00:21,160 --> 00:00:23,600 Et en plus, cette entité va collaborer avec d'autres 12 00:00:23,920 --> 00:00:25,600 pour faire des tâches plus complexes. 13 00:00:25,920 --> 00:00:27,680 Donc, prenons un exemple. 14 00:00:28,000 --> 00:00:31,880 Si j'ai un dé, l'état du dé, ce sera qu'il a plusieurs faces. 15 00:00:33,200 --> 00:00:34,080 Son comportement, 16 00:00:34,400 --> 00:00:37,520 ce sera de tirer aléatoirement une face parmi les faces qu'il a. 17 00:00:37,840 --> 00:00:39,600 Et sa collaboration avec le reste, 18 00:00:39,920 --> 00:00:42,160 c'est qu'on va le mettre dans une poignée de dés 19 00:00:42,480 --> 00:00:44,560 quand on joue à des jeux. 20 00:00:45,120 --> 00:00:47,280 De la même manière, si je prends un rectangle... 21 00:00:47,600 --> 00:00:51,320 Un rectangle, c'est une entité qui aura une largeur, une longueur, 22 00:00:51,640 --> 00:00:55,440 qui pourra offrir certains comportements comme calculer une aire. 23 00:00:55,760 --> 00:00:57,680 "Est-ce que je croise d'autres rectangles ?" 24 00:00:58,000 --> 00:01:01,280 Et typiquement, le système sur votre ordinateur 25 00:01:01,600 --> 00:01:06,200 qui fait le réaffichage des fenêtres interagit avec des rectangles 26 00:01:06,520 --> 00:01:08,800 pour calculer comment minimiser le réaffichage. 27 00:01:09,120 --> 00:01:12,360 De la même manière, un contact. Imaginons que vous avez une liste de contacts. 28 00:01:12,680 --> 00:01:15,160 Un contact va avoir un état qui sera l'adresse, 29 00:01:15,480 --> 00:01:18,200 le numéro de téléphone de la personne que vous voulez contacter. 30 00:01:18,520 --> 00:01:21,600 Un contact va savoir comment s'afficher à l'écran 31 00:01:21,920 --> 00:01:24,160 et va interagir, par exemple, avec un contact manager 32 00:01:24,480 --> 00:01:26,440 qui, lui, pourra trier les contacts. 33 00:01:27,320 --> 00:01:29,000 Finalement, si on regarde ça aussi... 34 00:01:29,320 --> 00:01:30,840 Si vous collectionnez des jeux, 35 00:01:31,160 --> 00:01:33,120 vous aurez une fiche de description d'un jeu 36 00:01:33,440 --> 00:01:35,400 qui va être un objet, qui sera le nom du jeu, 37 00:01:35,720 --> 00:01:39,840 sur quelle plateforme il tourne, quel est son âge, sa cote. 38 00:01:40,160 --> 00:01:43,640 Et en fait, ce jeu va interagir 39 00:01:43,960 --> 00:01:47,560 avec un gestionnaire de fiches pour votre collection, par exemple. 40 00:01:49,000 --> 00:01:51,280 En gros, ce qu'on voit, c'est qu'un objet, 41 00:01:51,600 --> 00:01:54,360 c'est un état, un comportement et une identité. 42 00:01:54,680 --> 00:01:56,040 L'état caractérisera l'objet. 43 00:01:56,360 --> 00:01:58,960 Le comportement, c'est ce qu'il fera en réponse à des messages. 44 00:01:59,280 --> 00:02:01,360 L'identité, c'est ce qui le distingue des autres. 45 00:02:01,680 --> 00:02:04,120 J'ai souvent parlé d'identité et d'égalité. 46 00:02:04,840 --> 00:02:08,320 Et ce sont des concepts, souvent, que vous pouvez confondre. 47 00:02:08,640 --> 00:02:10,600 Je vais vous donner une astuce pour ne pas le faire. 48 00:02:10,920 --> 00:02:12,760 Si vous entrez dans une pizzeria pour commander une pizza 49 00:02:13,080 --> 00:02:15,160 et que vous voulez la même qu'un des clients, 50 00:02:15,480 --> 00:02:17,440 l'identité serait d'aller manger sa pizza. 51 00:02:17,760 --> 00:02:20,640 L'égalité, c'est de commander la même. C'est bien deux choses différentes. 52 00:02:22,320 --> 00:02:25,040 Un objet est une entité qui a des responsabilités. 53 00:02:25,360 --> 00:02:29,360 Ça signifie qu'elle va offrir des services à d'autres objets 54 00:02:29,680 --> 00:02:30,880 et garantir qu'elle les fait. 55 00:02:31,200 --> 00:02:33,920 Par exemple, une tortue va vous offrir comme service : 56 00:02:34,240 --> 00:02:37,000 "Je sais écrire une ligne, changer de direction." 57 00:02:38,040 --> 00:02:41,880 En fait, ces responsabilités sont représentées 58 00:02:42,200 --> 00:02:44,840 sous la forme de l'exécution d'un comportement. 59 00:02:46,800 --> 00:02:50,320 Un objet va aussi encapsuler des données. 60 00:02:50,640 --> 00:02:53,680 Je montre sur le transparent qu'on peut conceptuellement imaginer 61 00:02:54,000 --> 00:02:57,840 que les données sont à l'intérieur et que vous, en tant que client de l'objet, 62 00:02:58,160 --> 00:03:02,000 vous ne pouvez pas accéder aux données, qu'elles sont protégées par une barrière 63 00:03:02,320 --> 00:03:05,120 et que seules les méthodes de l'objet vont accéder à ces données. 64 00:03:05,440 --> 00:03:08,400 Vous, en tant que client, vous pourrez simplement envoyer des messages. 65 00:03:08,720 --> 00:03:10,440 Ces messages exécuteront des méthodes 66 00:03:10,760 --> 00:03:14,320 et les méthodes vont pouvoir accéder et modifier les données. 67 00:03:15,160 --> 00:03:19,680 Ça, c'est un point important qui est l'encapsulation des données 68 00:03:20,000 --> 00:03:21,760 qu'offre la programmation objet. 69 00:03:23,160 --> 00:03:25,240 Je disais qu'un objet réagit à un message. 70 00:03:25,560 --> 00:03:28,520 Là, je vous montre que j'envoie le message "go" à une tortue. 71 00:03:28,840 --> 00:03:30,240 Que va-t-elle faire en réaction ? 72 00:03:30,560 --> 00:03:32,960 Elle va se déplacer à l'écran et laisser une trace au sol. 73 00:03:34,080 --> 00:03:38,520 Il faut voir que différents objets peuvent comprendre le même message. 74 00:03:39,120 --> 00:03:42,520 Par exemple, si je dis à une fenêtre de s'ouvrir, 75 00:03:42,840 --> 00:03:44,800 vous aurez une nouvelle fenêtre sur votre desktop. 76 00:03:45,880 --> 00:03:48,080 Maintenant, si je demande à un fichier de s'ouvrir, 77 00:03:48,400 --> 00:03:50,440 vous verrez peut-être le contenu du fichier. 78 00:03:50,800 --> 00:03:53,040 Si c'est une archive Zip, 79 00:03:53,360 --> 00:03:57,280 vous allez vouloir dézipper votre archive et obtenir son contenu. 80 00:03:57,600 --> 00:04:00,960 Il est important de voir que j'ai envoyé le même message "open" 81 00:04:01,280 --> 00:04:02,320 à trois objets différents. 82 00:04:02,680 --> 00:04:05,160 J'ai eu trois comportements différents. 83 00:04:06,080 --> 00:04:07,720 Pourtant, le message était le même. 84 00:04:09,040 --> 00:04:11,840 Donc, une méthode spécifie un comportement. 85 00:04:12,160 --> 00:04:14,640 Je voulais vous montrer comment la méthode 86 00:04:14,960 --> 00:04:16,920 qui calcule la hauteur d'un rectangle fonctionne. 87 00:04:17,240 --> 00:04:18,000 Que fait-elle ? 88 00:04:18,320 --> 00:04:21,200 Elle fait la différence entre le point en haut et le point en bas du rectangle 89 00:04:21,520 --> 00:04:23,160 et nous dit : "C'est la distance." 90 00:04:23,480 --> 00:04:26,480 De la même façon, si je veux calculer l'aire du rectangle, 91 00:04:26,800 --> 00:04:29,160 je vais multiplier sa hauteur par sa largeur. 92 00:04:30,080 --> 00:04:32,320 Donc mes méthodes spécifient un comportement 93 00:04:32,640 --> 00:04:34,200 qui sont une liste d'instructions. 94 00:04:35,440 --> 00:04:38,080 Donc, une méthode peut utiliser d'autres messages. 95 00:04:38,400 --> 00:04:40,600 Elle peut envoyer d'autres messages pour faire son calcul. 96 00:04:40,920 --> 00:04:43,640 Je vous montre que la méthode topCenter, 97 00:04:43,960 --> 00:04:47,720 elle envoie le message "center" et le message "top" 98 00:04:48,040 --> 00:04:51,240 qui sont des messages qui, eux aussi, peuvent faire appel 99 00:04:51,560 --> 00:04:55,520 à d'autres méthodes en envoyant des messages. 100 00:04:55,840 --> 00:05:02,000 Là, la méthode Center fait appel à "topLeft" et à "bottomRight", etc. 101 00:05:02,320 --> 00:05:04,160 Donc, c'est un système qui, potentiellement, 102 00:05:04,480 --> 00:05:07,400 quand vous envoyez un message, exécute une méthode 103 00:05:07,720 --> 00:05:12,800 qui va, elle, en cascade exécuter un certain nombre d'autres messages 104 00:05:13,120 --> 00:05:14,440 pour satisfaire cette demande. 105 00:05:16,200 --> 00:05:19,000 Donc, il faut voir que, sur l'exemple précédent, 106 00:05:19,320 --> 00:05:22,800 j'ai envoyé un message au rectangle. 107 00:05:23,120 --> 00:05:24,760 Il a exécuté des méthodes du rectangle 108 00:05:25,080 --> 00:05:28,760 et ces méthodes ont demandé d'autres choses sur le rectangle lui-même, 109 00:05:29,080 --> 00:05:30,800 mais je pourrais demander à d'autres objets. 110 00:05:31,120 --> 00:05:32,400 C'est la notion de délégation. 111 00:05:32,720 --> 00:05:34,120 Ça signifie que pour faire une tâche, 112 00:05:34,440 --> 00:05:36,880 je peux demander à un autre objet de la faire à ma place 113 00:05:37,200 --> 00:05:38,400 ou une partie de cette tâche. 114 00:05:38,720 --> 00:05:41,320 Donc je délègue ce que je dois faire à d'autres objets. 115 00:05:41,640 --> 00:05:45,240 Un exemple, quand on veut collectionner des items, 116 00:05:45,560 --> 00:05:49,800 on peut dire à chaque item qu'il sache se sauvegarder sur le disque. 117 00:05:50,440 --> 00:05:51,680 Ou alors on peut dire : 118 00:05:52,000 --> 00:05:54,800 "Je vais demander à un objet spécial qui sait sérialiser, 119 00:05:55,120 --> 00:05:56,400 c'est-à-dire mettre sur le disque, 120 00:05:56,720 --> 00:05:59,000 des objets compliqués et lui demander de me sérialiser." 121 00:05:59,320 --> 00:06:01,640 En tant qu'objet, je n'ai pas à tout savoir. 122 00:06:03,640 --> 00:06:06,120 Vous devez savoir maintenant qu'un objet est caractérisé 123 00:06:06,440 --> 00:06:08,720 par un état, un comportement et une identité, 124 00:06:09,040 --> 00:06:12,360 que les objets répondent à des messages en exécutant des méthodes 125 00:06:12,680 --> 00:06:16,840 et qu'un objet peut déléguer des messages à d'autres objets 126 00:06:17,160 --> 00:06:18,920 pour réaliser des tâches.