Session du 24 mars 2022 à 18h00
Bases du Langage
Veille & Discussions
Programmation Orientée Objet (POO)
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Débloquer sa progression en POO Python
Discussion autour du problème d'un étudiant : bloqué dans sa progression d'apprentissage de Python à l'approche de la Programmation Orientée Objet
Exemple de codes en POO & comment appréhender ce problème
00:00:00 :Bonjour Thierry, ça va?Mais oui, et toi?Bah écoute, ça va bien, merci, ça va bien.Alors on verra s'il y a des gens.Aujourd'hui, Thibault m'a demandé de faire le mentorat cette semaineparce qu'il est dans une zone avec peu de wifi et il n'arrivait pas à le faire.
00:00:24 :C'est pour ça que c'est moi aujourd'hui. Et puis, je n'ai pas reçu de questions encore en particulier,donc n'hésite pas à poser des questions si tu en as.
00:00:34 :Alors, je ne sais pas si on peut appeler ça une question.Actuellement, je trouve que je suis bloqué, en fait, dans ma progression au niveau de Python.
00:00:45 :Je suis bloqué par la programmation orientée objet.J'ai l'impression que jusqu'à présent, je progressais.Vraiment, la dernière fois, toi tu as vu mon projet concernant les outils, etc.
00:01:00 :Et là vraiment, je voyais monter en flèche.Et quand je suis passé à la programmation orientée objet,c'est comme si j'étais perdu au milieu de l'océanet que j'avais l'impression de devenir une espèce de vache qui ne comprenait rien,enfin un animal quoi.
00:01:16 :Je suis là et je n'arrive pas à m'en sortir.Donc, je ne sais pas quoi faire.Est-ce que je dois m'entraîner à trouver des exercices ou est-ce qu'il existe ce genre de choses?
00:01:28 :Je dirais que le point principal qui fait que certaines personnes se sentent perdues,en général quand ils passent sur la programmation orientée objet,vient en partie du fait que peut-être ils ne voient pas le lien directavec ce qu'ils faisaient avant, déjà, une première chose.
00:01:49 :Et puis, une deuxième chose, c'est faire attentionou éviter au début de se perdre dans des détails, on va dire,inutiles en premier temps de la programmation orientée objet.
00:02:04 :Et vraiment se concentrer sur qu'est-ce qu'un objet, déjà,et bien comprendre ça, parce que ça c'est le point fondamental.Techniquement, en fait, tu ne devrais pas ressentir de différenceentre ce que tu faisais avant de programmer orientée objetet ce que tu fais avec la programmation orientée objet.
00:02:26 :Avant de faire la programmation orientée objet, tu utilisais déjà des objets.Tu utilisais des entiers, des chaînes de caractères, des dictionnaires, des listes.Tout ça, c'est des objets.
00:02:41 :C'est simplement des objets qui sont fournis de base par Python.Donc, une liste, ou le comportement d'une liste,va être décrit par une classe liste, ou par un constructeur liste.
00:02:54 :C'est pas aussi explicite que ça, mais on va dire par un type listequi est géré par une sorte de classe, même si c'est implicite en Python.
00:03:05 :Et puis, un dictionnaire va être géré, ou le comportement d'un dictionnaireva être géré par une classe dictionnaire.Pareil pour les chaînes de caractères et tout ça.
00:03:18 :Donc, ce qu'il faut, c'est quand tu conçois ton programme,commencer à penser en termes d'objets, de quoi tu as besoin.Prenons l'exemple, par exemple, je ne sais pas, je veux faire un programmepour gérer, alors prenons un truc classique, par exemple,des étudiants dans une université, et tout ça, par exemple.
00:03:41 :Qu'est-ce que j'ai? J'ai une université, j'ai des étudiants,j'ai des cours auxquels les étudiants peuvent s'inscrire, par exemple.On peut imaginer d'autres éléments là-dedans,mais c'est quelque chose que je vais pouvoir,la programmation orientée objet va directement pouvoir me permettrede penser dans ce vocabulaire, si tu veux, du problème.
00:04:10 :Le vocabulaire qu'on appellera le vocabulaire métier.Une fois que j'ai commencé à identifier que pour mon programme,j'aurais besoin de représenter des étudiants,dans mon programme j'aurais besoin de représenter des cours,dans mon programme j'aurais besoin de représenter une université,dans mon programme j'aurais besoin de représenter n'importe quoi
00:04:31 :que tu peux imaginer pour modéliser ce système.À ce moment-là, tu vas pouvoir te poser la question,comment représenter un étudiant?Quelles sont les données? Qu'est-ce qui fait qu'un étudiant est un étudiant?
00:04:45 :Un étudiant sera représenté par une classe étudiant,et je vais commencer à penser aux actions que va pouvoir faire cet étudiantet aux différents attributs qui le caractérisent.
00:04:59 :Bien sûr, on peut dire qu'un étudiant étant un être humain,ou étant homme ou femme, il va forcément avoir un nom et un prénom,c'est très classique, mais qu'est-ce qui fait qu'un étudiantest différent d'une personne?
00:05:17 :Un étudiant peut-être va obtenir des notes,il va être inscrit à un certain nombre de cours, etc.Donc ça, c'est des attributs qui vont pouvoir rejoindre cette classe étudiant.
00:05:29 :En fait, la classe, ou le concept de classe,est juste là pour te permettre d'inventer ou d'ajouter à Pythondes nouveaux types de données.Jusque-là, Python ne connaissait que les listes et les dictionnaires,et les chaînes de caractère, et les entiers, les ensembles, etc.
00:05:51 :Et maintenant, avec la programmation orientée object,tu vas pouvoir ajouter ce que tu veux.Si tu as un programme qui gère des e-mails,tu vas pouvoir inventer un type e-mail.
00:06:02 :Tu vas commencer à penser réellement à partir des chosesque tu veux modéliser ou les choses que tu veux gérer,plutôt que de penser en termes d'entiers, de chaînes de caractère,de fonctions qui vont manipuler ces choses-là,est-ce que je vais représenter toutes ces choses-là dans une liste,dans un dictionnaire, etc.
00:06:25 :On ne pense pas à ça au début.On pense vraiment que ce sont les concepts du domaine métierque je veux modéliser.Si je suis en train de réaliser un programme qui...
00:06:34 :Toi, c'était quoi, qui gérait des outils, c'est ça?Oui, oui, oui.Alors, on peut imaginer déjà éventuellement une classe outils,ou alors si on a plusieurs types d'outils très différents,on va avoir plusieurs classes d'outils différents.
00:06:53 :Moi, je partirais sur éventuellement une classe outilsqui va pouvoir réunir un petit peu tout ce qu'il y a de communà tous les outils, et ensuite éventuellement des sous-classespour différencier les différents outils, par exemple.
00:07:07 :Donc, tu ne vas pas te commencer à penser,ok, moi je voudrais pouvoir ajouter des outils à mon programme,je voudrais pouvoir rechercher un outil,je voudrais pouvoir faire ci.
00:07:16 :Non, on ne pense pas plus en termes d'action,mais comment ça penser en termes de choses?Qu'est-ce que mon programme va manipuler, représenter?Et ça, ça devrait t'aider à identifier les classes.
00:07:30 :Ensuite, dans un tout premier temps,ne te perds pas dans les détails obscursde la programmation orientée objet.Il y a beaucoup de cours qui veulent en mettre plein la vueet qui vont te présenter très rapidement des concepts,par exemple, comme l'héritage.
00:07:50 :On peut très bien vivre sans héritage,on peut faire de la programmation orientée objet sans héritage.9 fois sur 10, l'héritage est mal utiliséà la fois par les personnes débutanteset par les personnes expérimentées.
00:08:04 :9 fois sur 10.C'est vraiment quelque chose qui est énorme.Et parce qu'on a l'impression que parce qu'on a apprisà travailler avec ce concept d'héritage,on doit en mettre partout, par exemple.
00:08:17 :Alors qu'il y a des langages,comme par exemple le langage Go de Google,qui aujourd'hui laissent complètement tomber l'héritageet ne fait plus d'héritage.Donc, ce n'est pas nécessaire.
00:08:30 :Donc, il y a vraiment des détails qu'on peut laisser de côtéet les réintroduire progressivementquand on a compris à quel besoin ils répondent.Et surtout, il faut éviter de les utiliserpour répondre à des besoins auxquels ils ne répondent pas.
00:08:45 :Donc, fondamentalement, les classes vont te permettrede créer n'importe quel type de données.En plus des chaînes de caractère et tout ça,tu vas pouvoir créer des voitures, des e-mails,des étudiants d'université, des cours, etc.
00:09:03 :Et ça, c'est à la limite tout ce qu'il y a à savoir au débutsur la programmation orientée objet.Donc, si on prend vraiment la programmation orientéevraiment à la base,et on va ouvrir le navigateur.
00:09:24 :Je ne sais pas si j'ai partagé mon écran,mais si ce n'est pas fait, c'est bon.Maintenant, c'est fait.Donc là, vous devriez voir mon navigateuravec Google dessus.
00:09:43 :Et prenons simplement Jupyter Notebookpour pouvoir expérimenter.Alors, vraiment à la base,finalement, la programmation orientée objet,en tout cas comme elle est vue en Python,mais également dans d'autres langages,finalement, ça te sert à coder des choses.
00:10:04 :Alors, je vais parler d'étudiants.Donc ici, je peux créer une classe étudiant.Je peux créer des cours.Je peux créer n'importe quel conceptque ton programme aurait besoin de manipuler,donc un outil par exemple.
00:10:26 :On va appeler ça « tool ».Je ne sais pas comment toi tu l'as appelédans le contexte de ton programme.On peut même créer une boîte à outilspuisque tu gères des outils.
00:10:35 :Alors, est-ce qu'il y a un élément dans lequel...Là, je fabule un peu parce que je ne suis pas vraimentconvaincu dans ton projet.Donc à la base, c'est ça.
00:10:44 :De quoi mon programme aura besoin.Maintenant, bien sûr, ces objets-là ne font rien.Donc je peux créer un étudiant.Par exemple, Thierry, on va dire que c'est un étudiant.
00:10:57 :Donc à ce stade, je peux bien sûr créer des étudiants.Et là, j'ai déjà un objet.J'ai déjà un objet.Je peux d'ailleurs le vérifier que Thierry est bien un objetde type étudiant.
00:11:09 :Donc finalement, de manière très, très simple,ici, je fais déjà la programmation orientée d'objetsdans le sens que j'ai déjà une sorte d'entité,j'ai déjà un type à dispositionqui va permettre de représenter les objetsde mon programme.
00:11:26 :Et après, je dirais qu'en bon design d'objet,finalement, c'est similaire à une histoirequi se raconte bien.Je prends à nouveau l'histoire des étudiants et des cours.
00:11:40 :Donc ici, un étudiant doit pouvoir s'inscrire à un cours,à un ou plusieurs cours.Donc quelque part, on devra pouvoir à la fois,enfin en cours, on devra offrir une possibilitéd'inscription, par exemple, et également, éventuellement,une possibilité de pouvoir obtenir la listedes étudiants inscrits, par exemple.
00:12:09 :De la même manière, un étudiant, lui,dans les attributs qu'il possède, va pouvoir nous fournirou devrait pouvoir nous fournir la liste des coursauxquels il est inscrit, ainsi éventuellementque la possibilité de calculer la moyenne des notesqu'il a obtenues dans ses cours, ou je ne sais pas.
00:12:27 :On peut imaginer des méthodes qui, elles, vont dépendrede ce que doit faire ton programme.Donc c'est une chose.Alors à partir de là, pour décrire ta classe,tu vas utiliser tes attributs et tes méthodes.
00:12:51 :Alors qu'est-ce que sont les attributs et les méthodes?Les attributs, c'est finalement quels sont les donnéesqui font qu'un étudiant est un étudiant.Qu'est-ce que je veux savoir sur un étudiant?
00:13:03 :Alors l'étudiant Thierry, ici, qu'est-ce que je voudraissavoir sur lui? Qu'est-ce que mon programmeaura besoin de manipuler? Alors on peut imaginerque mon programme aura besoin de manipuler son first nameou d'obtenir la donnée son first name, son name.
00:13:19 :Et éventuellement, ça a de la naissance, puisqu'il a un birth date, par exemple.Qu'est-ce qu'on aura besoin d'obtenir comme donnéessur Thierry, par exemple les cours qu'il suit?
00:13:40 :Je ne sais pas ce qu'on pourrait l'appeler,attended courses, par exemple, etc.Et donc, on en a déjà quelques-uns.On pourrait imaginer plein d'autres choses,l'adresse, l'adresse email, d'ailleurs,si je veux écrire à mes étudiants, email.
00:14:02 :Ok, donc j'ai un certain nombre d'attributsque mon programme va devoir utiliser sur Thierry.À ce stade, je peux alors commencer à créer ces attributs.
00:14:14 :Alors comment est-ce qu'on crée un attribut en Python?Alors, il y a plusieurs méthodes,mais la plus courante, c'est de créer notre constructeur,donc ici la méthode d'initialisation,et puis de créer les attributs via le mot-clé selfqui est disponible ici, qui nous permet d'ajouterdans l'objet créé des différentes variables
00:14:42 :qui seront persistantes et propres à l'objet.C'est ce qu'on appelle les attributs.Alors ici, on peut lui ajouter un prénom.Pour l'instant, je vais tout mettre à Nonepuisque je n'ai pas de valeur particulière à lui donner.
00:14:56 :Donc ici, on va lui donner un name.Je te coupe, excuse-moi deux secondes.Par exemple, est-ce que tu peux mettredans le premier attribut self.firstname,
00:15:12 :est-ce que tu peux mettre un input,égal input pour demander l'âge?Est-ce que ça, tu le fais ailleurs?Alors non, déjà, en tu ne le mets pas là.
00:15:22 :Et ma recommandation, c'est que input,tu ne le mettras pas dans une classequi représente tes données.Dans la pratique, ce qu'on va essayer,input, on va dire que c'est un détaild'interface utilisateur.
00:15:42 :Alors dans ton programme, tu auras deux choses.Tu auras des classes qui vont représenterdes données, donc typiquement,la classe qui représente un étudiant,c'est ce que j'appellerais une donnée.
00:15:55 :Dans certains contextes, on appelle ça un modèle.Ça va modéliser mes étudiants.Et puis, j'aurai des éléments de codeou des classes qui vont représenterdes éléments d'interface utilisateur.
00:16:06 :Que l'interface utilisateur soit une interfaceen ligne de commande, ou que ce soitune interface graphique, ou que ce soitune interface web, ça ne change absolument rien.
00:16:14 :Dans tous les cas, c'est un élément d'interface.Le fait qu'on demande à l'utilisateurvia le terminal de fournir en prénom et en nom,ça n'a absolument rien à voir avec l'étudiant.
00:16:30 :C'est quelque chose qui a à voir avecl'interface utilisateur qu'on met en placepour saisir les données d'un étudiant.Donc, la distinction est relativement fine ici.
00:16:44 :Mais, toujours est-il que si je voulais avoirun mécanisme pour cela,alors si on imaginait même d'avoir un mécanismepour saisir des données ici,ce serait au mieux une méthode.
00:16:58 :Par exemple, prompt user data,on pourrait mettre quelque chose comme ça,alors on pourrait créer une méthode,create student, par exemple,student from terminal.Ok, toujours self, et puis voilà, c'est tout.
00:17:25 :Alors, cette méthode va faire quelque chose.On pourrait imaginer qu'elle va poser des questionsà l'utilisateur, puisqu'on est ici dans une méthodequi serait clairement dans le terminal,et qui va poser des questions à l'utilisateur,et puis ensuite retourner en student.
00:17:45 :Donc là, on est typiquement dans une méthodequi aura l'objectif de créerun nouvel étudiant.Je pourrais même, dans l'absolu, me dire,ok, je crée ça sous forme d'une fonction.
00:18:04 :Une méthode, c'est rien de plus qu'une fonction.Je dirais que si on veut rester simple au début,je pourrais créer une fonction qui a la responsabilitéde créer un étudiant à partir du terminal,et puis qui, quelque part dans le code,va, à un moment donné, faire un return de student,
00:18:23 :et puis qui va créer un student avec son first nameégale une valeur.Ok, je ne mets rien pour l'instant.Un name qui aura une certaine valeur, également.
00:18:35 :Ici, je ne mets rien.Et un email qui aura une certaine valeur.Et puis là, on aura tous les inputsqui seront responsables de demander à l'utilisateur,ok, donne-moi le first name de ton étudiant,donne-moi le name de ton étudiant,et l'email, et d'autres données si nécessaire.
00:18:58 :Et va créer un nouvel étudianten instantiant la classe étudiant.Ce code-là, il ne fait pas vraiment partiede l'étudiant lui-même.Certaines personnes, je dirais qu'on avanceun peu plus ici.
00:19:18 :On peut être éventuellement tenté,et c'est une assez bonne pratique.Alors si ce n'était pas quelque chose qui dépendaitdu terminal et qu'on voulait avoir une sortede méthode comme ça qui appartient à un student,on pourrait la mettre dans student, éventuellement.
00:19:33 :Si on fait ça, ce qu'on ferait en général,on en ferait ce qu'on appelle une méthode de classe.Donc classe, classe méthode.Alors tu me diras quelle est la différenceentre une classe méthode et une méthode.
00:19:45 :C'est simplement finalement l'idée que c'est une méthodequi vivra avec la classe, mais qui n'est pasune méthode qu'on peut appeler sur un objet,mais une méthode qu'on peut appeler sur la classe.
00:19:57 :Par exemple, simplement ici,imaginons que je veux créer Thierry.Je peux faire en student, donc la classe,student.createStudentFromTerminal.Je demande, et puis là, ok, j'aurai des questionsqui seront posées à mon utilisateur pour créer cet étudiant.
00:20:16 :Puis il va retourner, il va retourner à un nouvel étudiant.On peut dire que cette méthode-là est en substitutde notre init,ce qui veut dire un substitut spécialisé.
00:20:30 :Alors ici, soit j'en fais une classe méthode,et puis du coup, ici, je crée ça comme ça.Mais je dirais dans un cours d'introduction,ce que tu peux effectivement faire.
00:20:41 :Et donc, pour éviter de t'embêter avec ces détailsqui, pour l'instant, sont des détails, à mon avis,qui vont juste t'éloigner de ta préoccupation principale,donc savoir qu'est-ce qu'une méthode de classe,qu'est-ce qu'une méthode d'instance, etc.
00:20:53 :Une méthode de classe, elle peut toujours être remplacéesimplement par une méthode comme celle-là.Donc ici, une méthode, et puis du coup,si je veux l'appeler, j'ai qu'à enlever le student.devant,
00:21:05 :et puis c'est pareil.Voilà, donc ici, dans cette méthode-là,typiquement, je ferai des inputs.Alors ici, un input pour demander le prénom,et puis ensuite, un input pour demander le nom.
00:21:29 :Donc ici, un first name.Donc la gestion d'erreur qui va bien, toujours.Un input pour demander le nom,et puis pareil pour l'email.Email, et puis de nouveau,un input pour demander l'email.
00:21:55 :Et puis ensuite, on réunit tout çaavec un first name,name et email.Donc ça, c'est l'approche que j'essaierai d'avoirdans ce cas-là.Séparer la logique de construction de ton student.
00:22:19 :Donc, tu crées un objet, tu commences à réfléchir,quels sont les attributs qui décrivent mon objet.Et puis ensuite, qu'est-ce qu'on peut faireavec un étudiant, qu'est-ce qu'un étudiant peut faire.
00:22:33 :Quand tu penses à ton téléphone,smartphone aujourd'hui,quand je pense à qu'est-ce que je peux faireavec ce téléphone, je vais pouvoir téléphoner,je vais pouvoir envoyer des emails,je vais pouvoir jouer aux échecs,je vais pouvoir faire plein de choses.
00:22:51 :Donc si j'ai un objet téléphone,on peut imaginer des méthodes,une méthode qui s'appelle Play Chess,quelque chose qui va faire appel à une applicationde jeu d'échecs et qui me permet de jouer aux échecs.
00:23:04 :Donc ça, c'est des fonctionnalités de mon téléphone,c'est ce que peut faire mon téléphone.Éventuellement, mon téléphone, pour jouer aux échecs,va déléguer une partie de sa fonctionnalitéà un autre objet qui est l'application Chess.quelque chose.
00:23:19 :Donc, de nouveau, un objet peut utiliser d'autres objetspour fonctionner.Par exemple, ici,self.coursesou attendingattended courses oufollow courses, je n'ai pas la bille,on va juste mettre courses ici.
00:23:44 :Alors les cours, on va commencer avec une liste vide,mais ces cours vont simplement, cette liste coursva simplement par exemple être une liste,on peut l'imaginer en tout cas comme une listed'instances de l'objet course.
00:23:57 :Ok?Et donc du coup,tu n'as plus besoin de te demander,est-ce que mes cours, est-ce que je vais créer une listequi va ce qu'un dictionnaire, étant ce dictionnaire,j'aurai des données qui sont relatives aux cours, etc.
00:24:10 :Non!En programmation à orientement objet, c'est beaucoup plus simplequ'en programmation procédurale.En étudiant est toujours représenté par une classe d'étudiants,en cours est représenté par une classe cours,et puis éventuellement après, on peut refactorisersi nécessaire, si on pense qu'on a fait des classes inutiles,on peut toujours,
00:24:31 :des données d'une classe, on peut toujours les représentersous la forme d'un dictionnaire.Et puis, ce qu'on met dans un dictionnaire,on peut toujours le représenter sous une forme de classe.
00:24:40 :L'avantage d'une classe par rapport à un dictionnaire,c'est que tu peux justement ajouter des méthodes.Donc tu peux dire, voilà, un étudiant,on va pouvoir le contacter par e-mail, par exemple.
00:24:54 :C'est un e-mail.Ça aide, un message.Je vais pouvoir lui envoyer un message par e-mail.En étudiant, je vais pouvoir,là, qu'est-ce que je vais pouvoir faire, par exemple,on va pouvoir l'exmatriculer ou l'immatriculer,je ne sais pas, ça c'est plutôt quelque chose qui appartiendraità l'objet qui représente l'école ou l'université, par exemple.
00:25:17 :Qu'est-ce que je vais pouvoir faire avec un étudiant?Je vais pouvoir calculer, ah oui, je vais pouvoir calculer,je ne sais pas, sa moyenne,s'il obtient des notes dans les cours.
00:25:30 :En Suisse, on parle de moyenne, ici.Donc, DEF, Compute, Final Grade, par exemple.Final Grade, Self, ici.Une méthode qui va calculer à l'aide des notesobtenues par l'étudiant, une note finale,de 1 à 6 comme en Suisse, ou de 1 à 20 comme en France.
00:25:54 :Donc, voilà des choses toujours pensées.Voilà, mon étudiant, qu'est-ce que je vais pouvoir faire?Tes outils, donc ton application,que faire avec?Qu'est-ce que je peux faire avec? En outils,
00:26:08 :qu'est-ce que je peux faire avec?Bien sûr, ça va dépendre de l'outil, éventuellement.Mais en premier temps,créer autant de classes que tu as d'outils différents,est-ce que tu risques de voir que tu créesautant de classes que d'outils différents?
00:26:25 :Tu risques de voir que certains outilsvont partager certaines actions,donc certaines méthodes,vont partager certains attributs.Et c'est seulement là que tu peux commencer éventuellementà penser, ok, mais ces choses qu'il y a en commun ici,est-ce que je suis vraiment obligé de les redéfinirdans chaque classe, ou est-ce que je ne peux pas
00:26:49 :éventuellement utiliser ce mécanisme d'héritageet une classe qui répond à cela?C'est un peu, finalement, ça se rapproche un peude la MCD.Alors, qu'est-ce que c'est que la MCD?
00:27:02 :C'est la Modélisation Conceptuelle de Bases de Données.La réflexion ressemble pas mal.Alors, aujourd'hui, par exemple,à part en France, où on utilise encore des trucscomme MERIS, justement, le modèle conceptuel de données,c'est très froufou en français,dans la plupart du reste du monde, en fait,on pense aujourd'hui aux bases de données relationnelles
00:27:26 :comme une modélisation objet.La seule différence, c'est que dans une base de données relationnelle,on ne peut pas directement, en tout cas pas directementfaire ou reproduire toutes les relations qu'on adans une relation entre objets.
00:27:42 :Par exemple, on ne peut que simulercette relation d'héritage, par exemple.Mais je dirais que fondamentalement,on fait exactement la même chose dans une base de données.
00:27:51 :Quand on fait de la conception de bases de données,on va essayer de penser aux différents conceptsdu domaine métier.Donc, si je m'occupe de nouveaude programmer une application qui va gérerles étudiants d'université,je vais clairement penser en ces termes-là.
00:28:14 :Je vais regarder quels sont les termes du domaine métier,la notion d'étudiant, la notion de notes,la notion de cours, etc.Et dans un premier temps, je vais me direça, ça va être les notions pour lesquellesje vais créer des objets dans mon domaine.
00:28:30 :Après, certains objets, tu verras peut-êtrequ'il n'y a pas forcément besoin de créerune classe apparente, par exemple une note.Une note obtenue comme résultat d'un cours.
00:28:40 :Est-ce que je dois créer un objetou est-ce que c'est simplement un entier?A priori, c'est simplement un entier.Donc, un entier, c'est un objet.
00:28:48 :Je peux même hériter de la classe d'un entier.Je pourrais imaginer créer une classegrade ou note, mais parfois tu verrasque ça ne vaut vraiment pas la peine de le faire.
00:29:01 :Parce que, voilà, tu as juste besoinde créer un entier. Par exemple, si j'ai besoinde créer un message en texte,on pourrait être tenté de créer une classe messageavec éventuellement des actions,des méthodes particulières relativesau traitement de ces messages.
00:29:20 :Mais si un message, c'est juste une représentationsous forme de chaîne de caractèreet que ma classe, je n'ai rien à y mettre,je pourrais utiliser éventuellement simplementune chaîne de caractère. Pas besoin de classe pour ça.
00:29:31 :Donc, de nouveau, je peux dans un premier tempsidentifier le concept de message,mais ensuite, je peux réaliser quece concept de message est tout aussi bienreprésenté par une simple chaîne de caractère.
00:29:47 :Mais toutefois, si je veux ajouter des méthodesvraiment spécifiques à la gestion d'un message,par exemple l'email, à la gestion d'un email,en email, par exemple, on pourrait vouloir y ajouterdes pièces jointes, par exemple.
00:30:00 :En email, on a à la fois le sujetet le corps de l'email.Là, par exemple, en email, ça vaut la peinede créer une classe email qui va engloberle concept de sujet, du corps de message,de pièces jointes et de tout ça.
00:30:19 :Et dans ce cas-là, une chaîne de caractère simplene suffit pas.Et donc, ça te permet de créer de nouveaux concepts.Donc, au tout début, finalement, quand tu commences,moi je donne des cours à des enfantset on commence directement avec les classes en Pythonparce qu'avec des enfants, pour eux,
00:30:40 :c'est beaucoup plus simple de leur...même si on fait un programme de jeuou quelque chose, c'est beaucoup plus simplede penser dans des concepts de mots qu'ils connaissent,dans les concepts du jeu qu'ils veulent inventer,plutôt que de se dire, de penser en termesde chaîne de caractère, d'entier et tout ça.
00:31:00 :Et donc, on va directement concevoir les objetsqui vont constituer le programme qu'on veut créer.Et c'est dans cet esprit de simplicitéque la programmation orientée objet a été inventée.
00:31:14 :Au départ, Alan Kay, qui est l'inventeurdu langage Smalltalk,alors il y a eu d'autres essais avant,il y a eu un historique là-derrièreavec le langage Modula et autres.
00:31:26 :Mais Alan Kay, par exemple, ce qu'il voulait,c'est apprendre la programmation objetà des enfants de 4 ans.Et effectivement, il partait à l'aide de classesur justement cette idéequ'on allait simplement pouvoir représenter des objets.
00:31:47 :Et ces objets sont eux-mêmes structurésà l'aide d'autres objets.Alors dans les cours de Thibault,bien que je ne les ai pas écoutés en détail,par exemple, on voit qu'à un moment donné,je crois qu'on représente une voiture.
00:32:00 :Une voiture elle-même est représentée,et finalement contient d'autres objetscomme un moteur, comme un autoradio,comme des roues, un système de direction,un système de changement de vitesse, etc.
00:32:13 :Et tout ça, c'est d'autres objets.Donc finalement, une classe va faire appelà d'autres classes pour représenterla structure, la mécanique interne d'un objet.Mais donc, pour toi, par rapport à ta difficulté,c'est probablement que tu restes encore tropdans la logique procédurale des actions.
00:32:33 :C'est-à-dire que dans la premièreimplémentation de ton programme,tu as certainement créé un certain nombre de fonctions.Ces fonctions vont implémenter des actions,souvent elles contiennent des verbes.
00:32:46 :Et donc, quand on programme de manière procédurale,on a cette tendance à penserà qu'est-ce que notre programme doit faireet à sortir un petit peu toutes les actionsqui vont être faites, et puis on va créerdes fonctions pour ça.
00:33:02 :Dans la programmation orientée objet,on fait complètement différemment.On ne pense pas d'abord à ce qui va être fait,mais on pense à ce qui va être manipulépar le programme aux objets.
00:33:14 :Et c'est pour cette raison que c'est souvent en nonce.Beaucoup de gens disent, je commence à fairemon programme en procédural, et ensuiteje vais le passer en objet.
00:33:23 :En général, passer en programme,ou refactoriser en programme,depuis du procédural à de l'objet,sans passer par un refactoring complet,finalement en repassage à table à dessin,ça donne quelque chose de très bancal,parce qu'on reste focalisé par les actions du programme.
00:33:42 :Donc toi, ce que tu dois faire,ou ce que tu devrais faire, maintenant,ton autre programme est relativement avancé,donc il faut essayer de refactoriseraussi bien que mal, mais dans l'idéal,c'est de se dire, ok, quels sont les objetsque je manipule dans mon programme,sans penser à tout ce que tu as d'existant actuellement.
00:34:00 :Et puis ensuite, pour chacun de ces objets,est-ce que j'ai plusieurs objetsqui vont appartenir à la même classe,ou est-ce que chaque objet va donner lieu à une classe?
00:34:12 :Et pour comprendre ça,tu vas essayer d'identifier quels sont les attributsdes objets, et quelles sont les actionsqu'ils peuvent réaliser, donc les méthodes.Et déjà, quand tu as ça,tu as déjà un bon paysage de ce que va donner ton programme.
00:34:28 :Ce que je te recommande de faire,c'est une technique assez low-tech.Prends un paquet de post-it,et puis tu identifies les objetsque tu devrais représenter de ton programme,et tu notes sur chaque post-itle nom d'un objet.
00:34:46 :Et puis, une fois que tu as identifiéquelques objets, tu vas commencer à essayerd'identifier quels sont les attributsqui peuvent représenter cet objet.D'abord, pas les actions, pas les méthodes,juste les attributs qui font qu'un étudiantest un étudiant. Quels sont les attributs
00:35:05 :qui font qu'un cours est un cours?Quels sont les attributs qui fontqu'un outil est un outil?Puisque je peux lister un certain nombrede caractéristiques qui font qu'un outilsera différent d'un autre, par exemple.
00:35:20 :Ça, c'est la première phase.La deuxième phase, c'est qu'est-ce qu'on veutpouvoir faire avec cet outil?Est-ce qu'il propose des choses?Alors, en autoradio, par exemple,on va pouvoir l'allumer, on,et puis l'éteindre, off, par exemple.
00:35:36 :On va pouvoir, également, l'autoradio,si il fonctionne encore que la radio,choisir le canal qu'on désire écouter,par exemple.Et on va pouvoir sélectionnerentre radio ou CD, par exemple,si ça existe encore de CD chez vous.
00:35:51 :Et puis, on va pouvoir, éventuellement,sur un CD, passer d'une chanson à l'autre, etc.Tout ça, c'est des actions qui pourrontêtre réalisées par l'autoradio,et ça va donc donner lieu à des méthodes.
00:36:04 :Donc, vraiment, ici, on penseautour d'un objet, comme si je pouvaisle tenir dans les mains.Ça, c'est vraiment dans un premier temps,on va commencer à objectiser mêmedes concepts un petit peu moins tangibles,qui ne peuvent pas se toucher,mais qui peuvent servir au programme.
00:36:21 :Ça, c'est dans un deuxième temps.Dans un premier temps, ça aidede manipuler surtout des objetsqu'on peut imaginer,qu'on peut même presque tenirdans ses mains.
00:36:33 :Et puis, là, c'est plus facile.Donc, si tu envisagesla programmation orientée comme ça,tu verras que dans un premier temps,tu auras les concepts de classe,le concept de méthode,et en particulier,également de constructeur, parce que tu en auras besoin.
00:36:51 :Donc, concept de méthode.Une méthode, c'est rien de plus qu'une fonction.Là, normalement, c'est un concept que tu maîtrises déjà.La seule chose qui faitqu'une méthode est différente d'une fonction,c'est qu'il va prendreen premier paramètreun objet qui est particulier,qui est l'objet sur lequel travaille la méthode.
00:37:09 :Etc'est la seule différence.Honnêtement.Le reste, c'est du détail mécanistiqueque tu n'as pas besoin de connaîtrenécessairement à ce niveau-là, mais j'ai faitun webinaire en décembre qui expliquaitpas mal la mécanique là-derrière.
00:37:25 :Je peux toujours mettre le liendans le Discord.Et c'est tout.En premier temps, c'est tout. Après, il faut vraimentpasser sur le terrain de la conceptionet commencerà essayer d'identifier les objets.
00:37:39 :Tout le reste viendraaprès, dans un deuxième temps.Je pense que j'ai meilleur temps de remettre tout à platet de laisser de côtéce qui a été fait jusqu'à maintenant, parce quene serait-ce qu'avec le projet Purbure,si je veux faire quelque chose de propre, comme tu nous l'as montré,
00:37:55 :il faudrait vraiment que je le reprennetout depuis le début, etfinalement, ce ne serait pas plus mal, parce quej'aurai la bonne pratique.Ce que tu viens de me montrer.
00:38:05 :De plus, moi, j'ai vraiment étédans le métier, donc quand tu distenir presque l'objet dans ses mains,je sais exactementce qu'on peut faire avec un outil, avec une plaquette, etc.
00:38:15 :Donc ce sera plus simple pour moi,je pense, de tout recommencer à zéropour obtenirun programme propre.Je dirais qu'à ce stade, le challengepour toi de dire, ok,cet outil, bien sûr, il va êtrereprésenté virtuellement dans ton programme.
00:38:31 :Se dire, voilà,je pense qu'en outil physique,je peux le réduireà des caractéristiques,à des données,donc à des attributs sous forme de donnéesqui vontle décrire ou permettre son fonctionnement.
00:38:47 :Et c'est làpeut-être l'exercice d'abstraction.Mais effectivement, toi tu dis que tu esen practicien par rapportà ce domaine métier-là,et c'est généralement un avantage.
00:38:59 :C'est-à-dire que quand tuconçois un programme pour un domainemétier que tu connais bien,normalement, en termes de conception objet,ça devrait être un avantage.
00:39:09 :Ça devrait être un avantageparce que tu connais bien les objetsque tu manipules. Mais attention,tu les connais peut-être trop biendans leur représentation physique.
00:39:19 :Et toujours se demanderquelles sont les données dont j'ai besoinpour le représenter virtuellement.Certaines caractéristiquesphysiques seront éventuellementpas nécessaires. Je prends l'exempled'un outil. Alors je ne sais pas
00:39:33 :quel type de manipulation ton programme va faire.Est-ce que la couleur a de l'importance?Tu peux être attachéà ton marteau noir ou ton marteau vert.
00:39:41 :Je ne sais pas pourquoi.Maisil se peut quedans l'action qui va être réalisée au seinde ton programme, ce détail-là,cet attribut de l'objet, n'ait pasd'importance. Donc tu auras
00:39:55 :un certain tri à faire.Bien sûr qu'on peut représentertout ce qui est imaginable sur un outil.On peut ajouter un attributqui va permettre de le décrire.
00:40:05 :C'est simplement des données qu'on auraà chaque fois besoin de fournir. Donc ça peut éventuellementêtre rébarbatif etcompliqué, le rôledu programmeur et de l'utilisateur.
00:40:15 :Et après on peut élaguer. On peut voirque ces éléments ne sont pasutilisés par le programme.Mais de son premier jet,pense à un objet, pense à tous lesattributs qui le représentent,sans barrière.
00:40:31 :Et dans un deuxième temps, tu peux toujoursbiffer des choses.C'est vraiment important.Je dirais dans un tout premier temps des'éloigner un petit peude l'ordinateur. C'est vrai que
00:40:43 :quand on veut devenir développeur, on atendance à avoir cette imageet cette envie desauter sur le code.Je dirais que la programmationorientée objet, dans sa première phase,au début,c'est surtout pas ducode, mais c'est de la réflexion parrapport au domaine métierque tu essaies de représenter,
00:41:05 :d'évaluer.Voilà.Et voilà,dès que tu voisdes catégories d'objets,tu poses des classes. Et dans ton premier temps, tu metsrien dans ces classes. Et petit à petit,
00:41:19 :tu mettras des attributs. Et petit à petit,tu mettras des méthodes. Éventuellement, vides, ces méthodes,dans ton premier temps, elles ne feront rien, mais ça te donneraun squelette. Et
00:41:27 :ensuite, à l'intérieur de ces méthodes,tu retombes sur tes pattes du procédural,parce qu'à l'intérieur de ces méthodes,on retrouvel'usage de books, de listes,de dictionnaires éventuellement,pour faire des choses, pour faire descalculs, pour faire des...
00:41:43 :pour implémenterdes comportements. Mais là, on aura déjàsuffisamment cadré le sujet pourque ça devienne relativement facile.Mais le premier temps,vraiment, de la programmation orientée objet, c'estcomme le nom l'indique, orientéobjet. C'est qu'on va commencer à penser
00:42:01 :aux objetsdont on va avoir besoin. Et non pasaux actions que notre programmedoit faire.C'est déjà plus clair.Voilà, je vois que d'autrespersonnes nous ont rejointsau moment où Loïcétait le premierarrivé, donc a posé la questionsur la programmation orientée objetpar rapport à sa difficulté
00:42:27 :dedémarrerou de refactoriser son programme existantsur la programmation orientée objet.Les autres, je voisqu'il y a Guillaume et Romain qui sont là.
00:42:39 :Vous n'étiez paslà quand j'ai démarré, doncThibault m'a demandé de fairela session aujourd'huiparce qu'il ne pouvait pas êtreprésent cette semaine avec un bon réseau.
00:42:51 :Donc c'est pour ça quec'est moi qui suis là aujourd'hui.Je n'ai pas reçu de question en particulier,donc je n'ai pas de thématique en particulier,mais si vous avez soit l'enviede continuersur des questionsliées à la programmation orientée objet ou si vous avezd'autres questions, n'hésitez pas
00:43:09 :à encrocher le micro et à vous exprimer.Et puis Loïc, si tu as d'autres questions,n'hésite pas non plus.Juste pour le projet Turber,il y a les deux parties, est-ce que tu en as faitune troisième ou est-ce que tu vas y aller en avant?
00:43:21 :J'ai fait deux partieset puis après j'ai étépris par le travail, donc pour l'instant je n'ai pas encorefait la troisième.Je crois que je n'ai même pas encore publié la vidéo du deuxième.
00:43:31 :Il faut que je mette un petit peu de l'ordre dans tout ça.C'est simplement savoir sij'ai loupé la troisième partie ou sielle n'est pas existante.
00:43:39 :Non, elle n'est pas encore existante.Je n'ai pas encore trouvédeux soirs où je pouvais être présentle soir à 18h30pour ça.C'est déjà bien gentil de donner ton temps.
00:43:51 :Voilà,là effectivement c'est sur une basepurement bénévole et c'est étantles imprévus sont tropsouvent là pourpouvoir fixer quelque chose à l'avance.Mais ça va venir.
00:44:05 :C'est vrai que toi, par exemple,le projet Turber, ça a des années linéairesde ce que moi je suis capablede faire et tout ça, mais çam'a beaucoup aidé en termes de compréhensionde structure du programme.
00:44:17 :Ça, c'était vachement intéressant.Et du coup, c'est pour ça que je te dismoi je pense que c'est mieux si je faistable rase de ce que j'ai déjà faitet que je fais le parallèle entrele projet Turberet ce que tu viens de me montrer ce soir
00:44:31 :et leprogramme qui existe déjà. Et là, je pense queje pourrais obtenir quelque chose de propre.Que j'aurais pas honte de te présentersi tu étais mon professeur.
00:44:41 :Alors déjà,il faut jamaisavoir honte de présenter quoi que ce soitparce quefinalementc'est clair qu'on va toujourscoder mieux lorsqu'on va gagneren expérience, déjà.
00:44:57 :C'est une première chose.Et de manière générale,souvent on diten plaisantant qu'en programme,il faut toujours êtrepréparé à l'implémenter deux fois.Une première fois pour explorerle terrain et puis une deuxième foisprobablement entièrement. En fait,
00:45:15 :si on regardele cycle de vie de vraiesapplicationsqui ont une durée de vie longue et qui passentpar un système de gestion, de version, etc.
00:45:27 :On peut voir quedans le cycle de vie, c'estpas vrai pour tout, mais finalement pour certainson arrive souvent à des points charnièresoù on fait table raseet où on faitun refactoring en profondeur.
00:45:41 :Donc,de jeter quelque chosepour le faire mieuxou pour changer un petit peul'architecture qui est derrière,c'est pas négatifet c'est pas signequ'on est mauvaisou qu'on s'est planté la première fois.
00:45:59 :Les problèmes sont généralementtrop complexes pour qu'on fassejuste la première fois.Et même la deuxième fois, on fera pas juste,mais on essaie de chaque fois de faire au mieuxpar rapport à l'expérience qui est la nôtre.
00:46:11 :Donc, évidemment,sur ce domaine-là, j'ai 20 ans de plus que toiou 20 ans d'avance, donc je vais forcémentfaire des choses différemment.Mais j'enseigne à l'universitéet j'ai plein de gens qui sont,qui commencent Python, et doncje vois effectivementà la fois leur évolution et ce qu'ils font
00:46:31 :au début. Et il faut,je dirais le plus dur, c'est de toujours trouverune solutionà ton problème.Et déjà, de trouverune solution fonctionnelle à un problème,c'est un premier pas.
00:46:47 :Ma recommandation,celle que je fais le plus fréquemmentau début,c'est que de toute manière, tu vas jamais savoirquelle est la meilleure pratique.Parce que tu n'as pas l'expérience pour savoirquelle est la bonne pratique surle problème que tu es en trainde résoudre, sur le code que tu es en train d'écrire,
00:47:07 :sur Pythonde manière générale. Ça, c'est normalparce que Python, on l'apprenden quelques semaines, on apprendsa syntaxe, mais pour les détailsfins, il faut compterquelques années.
00:47:21 :Et par contre,ce que tu peux essayer de faire toujours,c'est quand tu résous un problème,essayed'essayerde penser à deux solutions.Tu penses à deux solutionsqui utilisentdes chemins différents.
00:47:39 :Essaye,alors, je ne sais pas moi, pour un problèmeconcret, on pourraitvouloir en faire une foisavec une liste et une fois avec un dictionnaireen présentant les données de manière complètement différente.
00:47:51 :Si j'ai deux algorithmes à choix,je peux vraiment essayerde faire les choses d'une manièreou en utilisant un autre algorithmecomplètement différent également.Essaye de faire deux foisle problème de manière différente.
00:48:05 :Et là, tu ne sauras toujours passi tu as quelque chosed'optimal, maistu pourras au moins déjà comparerles deuxidées que tu asavec des avantages et des inconvénients.
00:48:19 :Alors, des avantages, ça pourrait êtrele code semble plus simple, plus propre,plus...avec une des deux solutions.Et puis après, d'autresmétriques que tu vas pouvoir éventuellement voir.
00:48:31 :Est-ce qu'avec l'une de mes solutions,ça ram, ça tournedans le vide pendant quelques secondes,et avec l'autre, c'est super rapide, par exemple.Est-ce que tu peux voirdes avantages et des inconvénients dans les deux solutions?
00:48:43 :Et ton job en tant quedébutant va être definalement choisirentre les deuxvoies ou les deux solutionsauxquelles tu as pensé. Et tu pourras
00:48:55 :au moins déjà dire que la solutionque tu as choisie, ce n'est pas la plusmauvaise, parce que tu en as trouvé une plusmauvaise.
00:49:03 :Et avec l'expérience,tu vas voir que les idées que tu aurassonttoujours meilleures.Mais il y a une chose qui est toujoursvraie dans le métier de développeur, c'est quetu seras probablement confrontépresque toujours à desnouveaux domainesde métier, soit des choses que tu n'as encore
00:49:23 :jamais faites. Parce que sile produit existe déjà,et qu'il satisfait l'utilisateur,il n'a aucune raison deredévelopper une solution pour ça.Donc, techniquement,tu vas toujours avancer dans un terrainplus ou moins connu, et il faut s'habituerun petit peu à ça, et puis s'habituerau fait que tu n'es jamais très sûr
00:49:43 :que ce que tu fais,c'est bon.C'est juste le mieux que tu puisses faireà ce moment-là. Donc, en tout cas, ne t'excuse pasd'arriver avec une solution quine sera pas la mienne. De toute manière,
00:49:55 :la solution à laquelle tu vas arriver ne sera pas celle deGuillaume, ne sera pas celle de Romain, ne sera pas celle deThibault. Et avec Thibault, on a souvent des discussions
00:50:01 :où lui fait des choses, et puismoi, je trouve ça horrible,et puis sans doute, je disais ça.Donc, ça va dans les deux sens.
00:50:09 :Ok.D'accord.Est-ce que vous avez d'autres questions?Je vois que...Je vais peut-être laisser parler les collègues.Bonsoir Thierry. Bonsoir Romain.Non, bah, je suisvenu plus en spectateur ce soir que...
00:50:37 :Je n'ai pas vraiment de questions.Pas de souci. Comme je l'ai dit avec Guillaume,on fera que les questions qui arrivent.Et puis, comme je l'ai dit à Thibault,on fera que les questions qui arrivent, et puis s'il n'y a plusde questions, au bout d'un moment,on arrête la session.
00:50:51 :Savoir que, de toutemanière, la rediffusion sera dispo,et de toute manière, le Discord est là.Donc, si, lorsquevous travaillez sur vos projetsrespectifs, et que vousavez des questions,parfois pas des vraies questions,donc, voilà comment j'ai fait, est-ce qu'il y aune meilleure façon de faire? Ou est-ce qu'il y a
00:51:11 :une façon plus idiomatique de faire?Finalement, ceDiscord est également là pourfournir uncoup de main dans cette étapequi est difficile à acquérir quand on se formesur un langage. C'est qu'on va se former sur un
00:51:27 :langage en résolvant des problèmes.Et parfois,soit on n'a jamais fait de programmation,donc on ne sait pas si ce qu'on est en train de faireen termes de style, c'estbien, ou en termes decode, c'est le plussimple qu'on peut faire. Mais même si on vient dans
00:51:43 :notre langage, si on a une super expérience en Javaou une expérienceen PHP ou autre,on aura tendanceparfois à faire du piton qui ressembleà ce qu'on connaît déjà au langage.
00:51:55 :Alors, moi, je viens du C, par exemple, et au tout début,j'avaisfinalement la tendance à fairel'équivalentde ce que j'aurais fait en C, mais enpiton.
00:52:07 :Petit à petit, on voitque piton, à une autre philosophie, permetdes choses que d'autres ne permettent pas,et vice-versa. Des autres, des fois, permettent des choses
00:52:15 :que piton nene permet pas. Donc, n'hésitez passi vous n'avez pas forcémentune question, mais que vous avezfait quelque chose,que vous avez Discord sous la main,par exemple, voilà ce que j'ai fait,est-ce qu'il y a une autre approche,est-ce qu'on pourrait le faire différemment,est-ce que ça représente
00:52:35 :le consensus,ce qui pourrait être une bonne pratiqueou bien pas.Et puis là, une discussion peut partir.Donc, ne pas hésiter égalementà utiliser le Discordet Doctrine pour ça.
00:52:49 :Voilà, donc, s'il n'y a pas d'autresquestions, moi, je propose qu'on en restelà pour aujourd'hui, mais que,comme discuté, si vous avezdes questions à l'avenir, n'hésitez pasà utiliser les différents salonsdu Discord.
Aucune occurrence trouvée pour « ».