Comment coder plus vite : programmation orientée objet dans Python | Alvin Wan | Skillshare
Menu
Recherche

Vitesse de lecture


  • 0.5x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 2x

Comment coder plus vite : programmation orientée objet dans Python

teacher avatar Alvin Wan, Research Scientist

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      2:22

    • 2.

      Projet

      3:03

    • 3.

      Concept : paradigme OOP

      3:55

    • 4.

      Pratique : crème glacée

      9:54

    • 5.

      (bonus) Pratique : commutateur de lumière

      6:10

    • 6.

      (Bonus) Mystère : Lumières synchronisées

      5:13

    • 7.

      Concept : Abstraction

      5:03

    • 8.

      Pratique : Camion de crème glacée

      7:57

    • 9.

      (Bonus) Pratique : Lumières synchronisées

      6:35

    • 10.

      Concept : Héritage

      4:17

    • 11.

      Pratique : Camion de crème glacée de luxe

      4:37

    • 12.

      (Bonus) Pratique : Lumière scintillante

      4:07

    • 13.

      (Bonus) Mystère : MRO

      3:20

    • 14.

      Concept : Héritage+

      5:36

    • 15.

      Pratique : Faire fondre la crème glacée

      5:20

    • 16.

      (Bonus) Pratique : Lumières chronométrées

      5:40

    • 17.

      (Bonus) Mystère : Cas de base fragile

      3:01

    • 18.

      Conclusion

      2:55

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

6 909

apprenants

22

projets

À propos de ce cours

Avez-vous déjà entendu l’expression "programmation orientée objet" ? Peut-être pas, mais vous souhaitez améliorer vos performances en codage ?

Ce cours traite de la programmation orientée objet (POO) que chaque programmeur doit connaître. Nous allons évoquer plusieurs concepts et idées :

  • Le paradigme de la réflexion en matière de POO
  • Un simple camion de vendeur de glaces, simulation à l’aide de concepts POO
  • Une simulation minimale d’interrupteurs dans un logement avec les concepts POO
  • Les cours et les instances
  • Comment rédiger le contenu de votre premier cours
  • Comment avoir du code lisible (abstraction), qu’on puisse retravailler et qui puisse être réutilisable (mixins, composition)
  • Une heure de contenu, à raison de petites leçons de 5 minutes + 30 minutes en bonus

Le cours est très interactif, car nous coderons ensemble. À la fin de ce cours, vous serez en mesure d’écrire et lire du code en programmation orientée objet. Plus important, vous allez améliorer votre code avec un nouvel outil.

Le code créatif vous intéresse ? Suivez mon cours VR101 (AFrame).

Vous êtes intéressé par la science des données ou l’apprentissage automatique ? Suivez mon cours Coding 101 (Python), SQL 101 (Database Design), Data 101 (Analytics) ou Computer Vision 101 (Applied ML).

Remerciements : B-roll in introductory video filmed by creators on Pexels (Anthony Shkraba, Mikhail Nilov, Mart Production, Karolina Grabowska, Vitaly Vlasov, pixabay, pressmaster, Andy Barbour, pavel danilyuk, Roman Odintsov, German Korb, cottonbro)

Rencontrez votre enseignant·e

Teacher Profile Image

Alvin Wan

Research Scientist

Top Teacher

Hi, I'm Alvin. I was formerly a computer science lecturer at UC Berkeley, where I served on various course staffs for 5 years. I'm now a research scientist at a large tech company, working on cutting edge AI. I've got courses to get you started -- not just to teach the basics, but also to get you excited to learn more. For more, see my Guide to Coding or YouTube.

Welcoming Guest Teacher Derek! I was formerly an instructor for the largest computer science course at UC Berkeley, where I taught for several years and won the Distinguished GSI (graduate student instructor) award. I am now a software engineer working on experimentation platforms at a large tech company. 4.45 / 5.00 average rating (943 reviews) at UC Berkeley. For more, see my Skillshare or Webs... Voir le profil complet

Level: Intermediate

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: J' aurais aimé connaître ce secret il y a longtemps. Je vais vous le dire maintenant, il y a deux façons de grandir en tant que codeur. Premièrement, vous pouvez prendre des années pour vous entraîner à faire 100 erreurs pour chaque principe de codage que vous adoptez. Deux, vous pouvez prendre des jours, voire des heures, apprendre ces mêmes principes à partir d'un autre codeur. Voilà le kicker. L' une des choses les plus importantes qu'un codeur senior peut vous enseigner est la façon de penser au code. L' une de ces façons est la programmation orientée objet, ou OOP en bref, la sauce secrète pour amener votre code au niveau suivant. Salut, je m'appelle Alvin. À UC Berkeley, j'ai enseigné plus de 5 000 étudiants. Des cours de mathématiques discrètes à l'apprentissage automatique. Je vous transmettrai la sagesse que les professeurs, les ingénieurs et les mentors m'ont donnée pour que vous puissiez grandir plus vite en tant que codeur que je ne l'ai jamais fait. Dans cette classe, vous apprendrez à penser de manière critique en tant que programmeur. Cette pensée critique vous permettra alors de modéliser le monde qui vous entoure comme une série d'objets différents interagissant les uns avec les autres. Cette pensée critique vous permettra également d'évaluer le code lisible, maintenable et flexible. OOP est utilisé partout, pour les jeux, pour l'apprentissage automatique, pour la science des données. À la fin de ce cours, vous comprendrez pourquoi et comment. Vous serez en mesure d'imiter dans le code un atelier de vélo traitant les réparations, un camion de crème glacée gérant les commandes ou un contrôleur de la circulation aérienne dirigeant les avions. Cette classe de codage 101 plus est écrite pour les débutants qui sont soit intéressés par un, nivelant leur code ou deux, frustrés en essayant d'apprendre la programmation orientée objet. Si c'est vous, ne vous inquiétez pas. J' ai eu ma part de confusion dans le passé et j'espère vous aider avec votre confusion maintenant. Notez que cette classe s'attend à une certaine familiarité de codage avec Python. Si vous n'êtes pas déjà familier, assurez-vous de suivre mon cours Coding 101 : Python pour débutants pour vous rattraper. Vos leçons à retenir de cette classe ne seront pas une syntaxe bizarre ou des règles Python spécifiques. Au lieu de cela, c'est une façon de penser. Vous avez juste besoin de l'intuition pour appliquer ces concepts, même si vous oubliez ce que les concepts sont appelés. En plus de ces concepts, j'espère vous aider à renforcer la confiance, à lire, à écrire, à parler des concepts de POO. Maintenant, commençons à construire avec la programmation orientée objet. 2. Projet: Dans cette classe, votre projet consiste à construire une simulation en utilisant les concepts que vous avez appris. Par exemple, vous construirez un camion à crème glacée pour gérer les commandes et un modèle minimal d'interrupteurs d'éclairage dans une maison. Votre simulation pourrait être pour n'importe quoi. Un atelier de vélo qui traite les réparations, un entrepôt qui traite les envois en vrac ou un contrôleur de la circulation aérienne qui gère les aéronefs. Choisissez le scénario que vous voulez. Assurez-vous simplement que votre scénario comporte de nombreux types d'objets interactifs. La simulation que vous créez est puissante. À l'avenir, vous pouvez ajouter une interface pour en faire une application de gestion, utiliser ce système pour prédire l'avenir d'un système très complexe ou construire un jeu avec lui. Dans cette classe, nous ne couvrirons pas les cloches et les sifflets , par exemple, comment ajouter une interface. Au lieu de cela, nous nous concentrerons sur le cœur, une série d'objets interactifs, et sur la façon de rendre ce code flexible, évolutif et maintenable. C' est un excellent moyen de comprendre la puissance de la programmation orientée objet et comment l'utiliser efficacement. Comme vous l'avez peut-être entendu dans l'une de mes classes précédentes, ma devise est de vous donner l'excitation d'en apprendre plus, pas nécessairement vous donner une liste de linge de différents utilitaires Python. Il en va de même pour cette classe. Mais ici, je veux aussi vous donner l'intuition pour écrire un code meilleur et plus propre. Pour ce faire, nous allons coder chaque concept, pas une fois mais deux fois. Nous allons le faire spécifiquement en quatre phases différentes. abord, nous aborderons le paradigme de la POO, la philosophie et le fondement de la programmation orientée objet. Deuxièmement, l'héritage, les moyens de rendre la POO moins redondante, améliorant l'intelligibilité. Enfin, les mixins et la composition, des moyens de rendre OOP facilement extensible et flexible. Comme nous pratiquons chacun de ces concepts, je veux que vous ayez une idée de ce qui ne va pas et de ce qui est juste dans la conception du code. Oublier ces termes et définitions exacts ne fera pas beaucoup de différence, ce que vous voulez, c'est l'intuition pour écrire un code plus propre et meilleur. Chacune des quatre phases est divisée en trois parties différentes. La première partie est le concept, présentant les idées, les termes et les définitions. Le second est la pratique. Vous utiliserez ensuite ces concepts dans deux exemples différents. Certaines phases seront accompagnées d'une leçon de mystère. Cette leçon de mystère couvre un concept de POO spécial. Ces mystères sont des bugs réels que les étudiants ont rencontrés auparavant. J' espère que ces leçons vous éviteront de la douleur et de la confusion à l'avenir. Vous avez peut-être entendu parler d'autres concepts de POO comme le polymorphisme ou l'encapsulation. J' ai mentionné ces termes brièvement mais pas en détail, car je crois que le noyau de POO réside dans les termes que nous allons couvrir, abstraction, héritage, mixins et composition. Il y a un grand nombre de leçons, mais j'ai conçu chaque leçon pour être relativement courte et taille afin que vous puissiez, espérons-le, prendre chacune de ces leçons sur la route, sur vos déplacements, sur les pauses de salle de bain, à tout moment vraiment. J' espère que vous êtes excité de commencer à construire votre simulation. Commençons. 3. Concept : paradigme OOP: Dans cette leçon, je vais présenter le paradigme de programmation orienté objet. Il n'y aura pas de code dans cette leçon. Le but est simplement d'introduire la façon de penser de la POO. Nous aborderons trois concepts dans cette leçon. Le 1er concept est la différence entre une classe et une instance. Ici, nous avons un modèle de crème glacée. Plus tard, nous parlerons de ce que ce modèle contient réellement. Pour l'instant, pensez à ce modèle comme votre attente d'une crème glacée. Vous vous attendez à être en mesure de le manger, vous attendez une boule de crème glacée et un cône de crème glacée, et peut-être vous attendez une saveur de vanille par défaut. Cependant, ce modèle, votre attente est imaginaire. Ici, nous avons une véritable portion de crème glacée que vous pouvez manger. Notez que vous pouvez générer plusieurs portions à partir d'un seul modèle. Notez également que vous pouvez manger chaque portion à des tarifs différents. Une portion peut avoir une cuillerée à gauche et l'autre peut ne plus avoir de cuillerées. Maintenant, nous allons renommer le modèle et servir. Au lieu de template, nous appellerons cela une classe. La classe de crème glacée est votre attente d'une crème glacée, ce qu'elle contient et comment vous pouvez interagir avec elle. Nous allons le disséquer plus en détail dans la section suivante. Au lieu de servir, nous appellerons ces instances. Une instance de crème glacée est une véritable crème glacée que vous pouvez manger. Comme avant, remarquez que vous pouvez générer plusieurs instances à partir d'une seule classe. Vous pouvez également manger chaque instance à un rythme différent. Une instance peut avoir un scoop à gauche et l'autre peut ne pas avoir de scoops à gauche. Dans la terminologie POO, nous disons que nous avons défini la classe de crème glacée. Dans cette leçon, je vais vous donner plusieurs blocs de construction fondamentaux pour la conception de ces classes. Nous commencerons par définir des méthodes. Dans cette section, nous allons parler des méthodes de classe. Nous utilisons effectivement des méthodes dans Coding 101 Python pour les débutants, mais dans cette classe, nous allons définir des méthodes. Pour comprendre la méthode, revenons à notre exemple de crème glacée. Les méthodes nous aident à définir ce que je peux faire avec la crème glacée. On peut manger et ajouter des boules à notre glace, et c'est tout. Ces deux actions sont nos méthodes. Nous coderons ces méthodes plus tard. Dans la terminologie OOP, nous concevons notre classe de crème glacée pour inclure les méthodes manger et ajouter des scoop. Encore une fois, nous concevons notre classe de crème glacée pour inclure les méthodes de repas et d'ajout de scoop. Cela conclut les méthodes. Mais maintenant, comment mettre en œuvre ces méthodes ? Eh bien, chacune de nos instances de crème glacée doit savoir combien il reste de scoops. Cela nous amène à des attributs. Les attributs sont des éléments d'information. Nous nous concentrerons d'abord sur les informations spécifiques à une instance ou à une portion de crème glacée. Retour à notre exemple de crème glacée, quelles informations sont spécifiques à chaque instance de crème glacée ? Tout d'abord, le nombre de pelles restantes peut différer d'une instance à l'autre. Deuxièmement, la saveur de la crème glacée peut différer d'une instance à l'autre. Dans la terminologie OOP, nous concevons notre classe de crème glacée pour inclure les méthodes manger et ajouter des scoop. Il inclut également des attributs pour le nombre de boules à gauche et la saveur de crème glacée, et c'est tout. Ce sont les blocs de construction de la programmation orientée objet. Pour résumer, nous avons couvert la différence entre les classes ou les modèles et les instances. Nous avons également discuté de la règle des méthodes décrivant comment interagir avec une instance. Nous avons mentionné des attributs qui contiennent des informations sur une instance. Je sais qu'il y avait beaucoup de termes dans cette leçon, mais ne vous inquiétez pas, nous continuerons à utiliser ces termes encore et encore dans les leçons à venir. À la fin de cette classe, vous en aurez marre d'entendre les mots classe, instance, méthode et attribut. Mais vous comprendrez aussi ces termes beaucoup plus profondément. Pour obtenir une copie de ces diapositives et d'autres ressources, assurez-vous de consulter le site Web du cours. Ceci conclut notre leçon, le paradigme de programmation orientée objet. Dans la leçon suivante, nous commencerons à simuler un camion de crème glacée en utilisant ces concepts. 4. Pratique : crème glacée: Dans cette leçon, nous allons écrire notre tout premier morceau de code en utilisant une programmation orientée objet. Commencez par naviguer vers repl.it/languages/python3. Je suggère d'interrompre la vidéo ici et de créer un compte si vous ne l'avez pas déjà fait. Alors que vous pouvez coder sans compte, un compte vous permet d'enregistrer votre code. Ensuite, je suggère de placer vos fenêtres Skillshare et Repl.it côte à côte comme indiqué ici. De cette façon, vous pouvez coder avec moi. La première étape consiste à définir votre première classe. Voici comment. Tout caractère en noir est requis. Il doit être tapé exactement de cette façon. Nous commençons par le mot-clé de classe en noir, puis nous ajoutons le nom de classe indiqué en bleu. Comme beaucoup d'autres concepts Python que vous avez appris, ajoutez un deux-points, puis ajoutez deux espaces et pour l'instant, utilisez pass. Pass est juste un espace réservé pour un autre code que nous écrirons plus tard. Cordons ça maintenant. Dans cette leçon, nous allons créer un cours de crème glacée. Utilisons le format que nous voyons sur la gauche, tapez dans la classe, IceCream. Frappe le côlon. Une fois que vous tapez Enter, Repl.it créera automatiquement deux espaces pour vous. Maintenant, tapez la passe. Je vais frapper Escape pour rejeter ce modal. C' est tout pour ta première classe. Utilisons cette classe maintenant pour créer une instance. Nous appelons ce processus de création d'une instance à partir d'une instanciation de classe. Voici comment instancier. instanciation n'est vraiment que la moitié droite de ce format, tapez le nom de la classe en bleu, puis ajoutez deux parenthèses, et c'est tout ce dont vous avez besoin pour instancier. Nous affecterons également cette instance à droite à une variable à gauche. Tout comme pour définir toute autre variable, nous avons le nom de la variable en rose sur la gauche, un signe noir égal avec des espaces optionnels, puis la valeur. Dans ce cas, la valeur est l'instance. Cordons ça maintenant. Avant de commencer, assurez-vous d'exécuter votre fichier en appuyant sur « Exécuter », la flèche verte en haut. Ensuite, nous allons utiliser l'invite interactive pour tester notre code. Votre invite interactive peut se trouver sur le côté droit de votre écran. J' ai changé la mise en page pour que la mienne soit sur le fond. abord, tapez votre nom de variable, puis instancier en tapant votre nom de classe et les parenthèses. Voyons maintenant ce que contient la crème glacée variable et contient notre instance ou notre objet. Le concept suivant est une méthode. Nous allons maintenant ajouter une action ou un comportement à notre classe. C' est ce que nous avons jusqu'à présent. Pour ajouter une méthode, nous définissons simplement une fonction à l'intérieur de la classe. Cela devrait sembler familier, le mot-clé def que nous avons vu auparavant. Nous utilisons def pour définir des fonctions aussi. La seule différence est que notre premier argument de la méthode doit être auto-désigné en noir ici. Ici, nous avons le nom de la méthode en bleu, le contenu de la méthode en orange et les espaces en gris. Cordons ça maintenant. A l'intérieur de votre éditeur, nous allons maintenant supprimer cette passe et ajouter la méthode eat, donc def mange auto deux-points, comme nous le voyons sur le côté gauche. Maintenant, nous allons taper des imprimés, et je vais écrire Yum. C' est tout pour définir votre méthode de repas. Essayons maintenant ou utilisons cette méthode. Pour tester ou utiliser cette méthode, utilisez les expressions de points récupérées dans le cours Python pour débutants, tapez le nom de la variable d'instance, qui est glace dans notre exemple, ajoutez un point affiché en noir, puis ajoutez le paramètre nom de la méthode en bleu. Enfin, utilisez deux parenthèses pour appeler réellement la méthode comme nous appelons des fonctions. Cordons ça maintenant. Encore une fois, n'oubliez pas d'exécuter le fichier en cliquant sur la flèche verte. abord, instancier, donc ice_cream équivaut à IceCream avec des parenthèses. Ensuite, appelez la méthode de repas. Nous utiliserons le modèle à gauche, ice_cream, notre nom.eat variable. Appuyez sur Entrée et nous obtenons Yum, qui est notre déclaration imprimée dans le corps de la méthode de manger. Maintenant, nous introduisons un concept appelé le constructeur. Le code dans le constructeur est exécuté lorsque la classe est instanciée. Laissez-moi vous montrer par l'exemple. Voici un exemple de constructeur. Notez que la première ligne est toute noire. Vous devez copier ça exactement pour l'instant. Comme toujours, vous pouvez placer le code que vous voulez en orange dans le corps de la méthode. Ici, notre constructeur imprime simplement haut. Cordons ça maintenant. Nous allons ajouter un constructeur à notre classe de crème glacée. Ici, nous aurons deux-points def_init_self, comme nous le voyons sur le côté gauche, et ensuite nous allons imprimer quelque chose de mémorable. Dans ce cas, nous dirons imprimer Created ice cream. Je vais ajouter une ligne de clignotement ici juste pour garder notre code propre et lisible. Encore une fois, exécutez votre fichier en appuyant sur la flèche verte. Nous allons maintenant instancier notre classe de crème glacée, ice_cream équivaut à IceCream et ici, vous pouvez voir Created ice cream. Maintenant, pour notre concept final, un attribut. L' attribution d'un attribut est très similaire à la définition d'une variable. Ici, nous avons le nom de l'attribut en rose et la valeur en orange. Notez, cependant, que nous avons le sel. en noir. C' est important. C' est ainsi que nous attachons l'attribut à l'instance de glace actuelle. Self fera toujours référence à l'instance actuelle. Cordons ça maintenant. Supprimez le contenu d'un constructeur. Au lieu de cela, nous allons ajouter self.scoops égal à 3. Cela affecte le nombre de scoops à trois. Essayons ça. Exécutez votre fichier en cliquant sur la flèche verte tout en haut. Ensuite, instanciez votre cours de crème glacée. Vérifiez le nombre de scoops. Ici, nous aurons l'instance.scoops. Ici, nous en avons trois comme prévu. Ce n'était pas la dernière partie de la leçon. Nous avons en fait deux autres extraits de code à examiner. Changeons notre méthode de repas pour tenir compte du nombre de cuillères consommées. C' était notre précédente définition de méthode avec le nom de la méthode en bleu et le contenu de la méthode en orange. Maintenant, nous ajoutons un argument en vert. Nous pouvons ensuite utiliser cet argument d'entrée vert, dans ce cas, y dans notre méthode. Ici, nous utilisons y pour calculer y fois y. Nous avons aussi le nom de la méthode en bleu, le contenu de la méthode en orange et les espaces. Cordons ça maintenant. Dans notre méthode de repas, nous allons ajouter un argument d'entrée appelé scoops. Cela permettra à l'utilisateur de crème glacée de manger autant de boules qu'il aime à la fois. Maintenant, mettons à jour le nombre de boules qu'il reste de la crème glacée. Au lieu d'imprimer Yum, ajoutez self.scoops égal au total original, mais moins le nombre de scoops que nous voulons manger. Je vais également introduire une autre façon d'écrire cette ligne de code beaucoup plus courte. Nous pouvons également remplacer cela par self.scoops moins égale scoops. Ces deux lignes sont exactement les mêmes, donc je vais supprimer la première ici. Cette ligne dit diminuer le nombre de pelles par le nombre de pelles que nous voulons manger. Examinons comment appeler une méthode. De gauche à droite, nous avons le nom de la variable d'instance en rose, un point, et le nom de la méthode en bleu puis l'argument d'entrée en vert. Essayons ça maintenant. Allez-y et cliquez sur le bouton vert en haut pour lancer votre fichier. Ensuite, tapez IceCream est égal à IceCream. Ça instancie. Ensuite, nous allons vérifier combien de scoops sont actuellement contenus, qui sont trois. Ensuite, nous allons manger ou appeler la méthode manger avec l'argument deux comme nous le voyons sur le côté gauche. Cela va manger deux boules, et vérifions combien de boules il reste. Nous avons un scoop comme prévu. Cela conclut nos principes fondamentaux pour l'écriture de code de programmation orienté objet. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Vous pensez peut-être : « La vache sacrée, il y a beaucoup de nouveaux termes. C' est assez écrasant. » Si c'est vous, ne vous inquiétez pas. J' y étais aussi à un moment donné. N' hésitez pas à passer à la leçon suivante, qui est la pratique de continuer à vous familiariser avec ces termes de POO. Alternativement, si vous êtes intéressé par des problèmes d'entraînement de bonus difficiles, continuez la leçon. Maintenant, passez à notre séance d'entraînement de section bonus. Entraînons-nous à utiliser la terminologie de cette leçon en ajoutant deux extraits de code supplémentaires. abord, pour examiner, cette méthode de repas prend dans un argument de scoop et soustrait que beaucoup de scoops du nombre total de scoops. Maintenant, pour vous entraîner, créez une méthode appelée add qui prend un argument scoops et ajoute autant de scoops au total. Mettez la vidéo en pause ici et essayez ceci maintenant. Si tu ne sais pas par où commencer, c'est bon. Tu auras ça avec plus de répétition. Écrivons maintenant la méthode, ajoutez. Juste en dessous de chaque méthode, nous définirons add. Encore une fois, le premier argument est toujours soi. Ensuite, ajoutez l'argument scoops. Nous devrions ensuite ajouter ce nombre de scoops au total. Ceci conclut notre méthode d'ajout. Entraînons un autre. Cela va tester vos connaissances à partir de la classe de codage Python 101. Il est temps de vérifier si les déclarations si vous les avez oubliées. Dans la méthode de repas, vérifiez si le nombre de pelles restantes est inférieur au nombre de pelles que l'utilisateur essaie de manger. Si tel est le cas, n'imprimez pas assez d'octets restants ; sinon, déduisez le nombre de scoops du total comme d'habitude. Encore une fois, mettez la vidéo en pause ici pour essayer. Si vous ne savez pas comment faire ça, ne vous inquiétez pas. Avec plus de pratique viendra plus de familiarité. Maintenant, augmentons notre méthode de repas. Nous allons vérifier si le nombre de scoops est inférieur au nombre de scoops que l'utilisateur essaie de manger. Si c'est le cas, n'imprimez pas assez d'octets restants. Sinon, déduisez un certain nombre de pelles au total comme d'habitude. Cela conclut notre méthode de consommation augmentée. C' est tout pour cette leçon. Encore une fois, dans la leçon suivante, nous aurons de la pratique pour continuer à nous familiariser avec ces termes de POO. 5. (bonus) Pratique : commutateur de lumière: Bienvenue à la pratique bonus. Dans cette leçon, nous allons créer une simulation pour une série de lumières. Comme avant, accédez à repl.it/languages/python3. Ensuite, je suggère de placer vos fenêtres Skillshare et repl.it côte à côte comme indiqué ici. Tout d'abord, c'est comment vous devez définir votre classe. Nous avons le mot-clé de classe en noir, nom de classe en bleu, deux-points, deux espaces et le corps de la classe en orange, qui est l'espace réservé pour le moment. Cordons ça. Dans cette leçon, nous allons simuler un interrupteur de lumière. Appelons notre classe Lumière. Class Light : « Enter », qui va créer deux espaces pour nous et aller de l'avant et tapez « Pass ». Créons maintenant une instance de notre classe ou instancions notre classe. Sur le côté droit, nous avons le nom de la classe en bleu et les parenthèses en noir. C' est tout ce dont nous avons besoin pour instancier la classe. Cependant, nous devrions assigner cette instance à une variable. Nous avons le nom de la variable en rose, signe égal en noir avec des espaces facultatifs et le nom de la classe en bleu. Cordons maintenant ça. Allez-y et appuyez sur la flèche verte en haut pour exécuter votre code. Encore une fois, nous allons maintenant taper notre interprète. Pour vous, votre interprète peut être sur le côté droit de votre écran, mien est sur la moitié inférieure. Nous allons maintenant définir la variable qui est la lumière, et le nom de la classe avec des parenthèses à instancier. Voyons ce que contient la variable de lumière et elle contient une instance ou un objet. Ajoutons maintenant la possibilité d'allumer et d'éteindre la lumière. Voici la classe dans notre exemple, et voici la méthode add. Nous avons le mot-clé def en noir, nom de la méthode en bleu et le corps de la méthode en orange, ainsi que les espaces en gris. Nous allons maintenant définir une méthode bascule en utilisant ce format. Remplacez le mot-clé pass et tapez def toggle à nouveau avec l'argument self et imprimez « Toggle on and off ! ». Je vais frapper « Escape » pour rejeter ce modèle. Maintenant, nous devrions voir comment tester ce programme. Ce sont les expressions de points que vous avez vues auparavant. Nous avons le nom de la variable d'instance en rose, un point en noir, le nom de la méthode en bleu et les parenthèses en noir à nouveau. Ces parenthèses sont nécessaires pour coder la méthode. Essayons maintenant ce programme. abord, exécutez le code en cliquant sur la flèche verte tout en haut. Instanciez votre lumière, puis appelez la méthode toggle, light.toggle et ici nous obtenons notre déclaration d'impression. Dans cette section suivante, nous allons couvrir le constructeur. Voici un exemple de constructeur avec la première ligne complètement en noir et le corps du constructeur en orange. Nous avons l'expression ici et les espaces en gris. Ajoutons maintenant un constructeur. Nous allons définir init avec l'argument self, puis nous allons imprimer « Créer de la lumière ». Comme avant, je vais ajouter un espace pour la lisibilité. Encore une fois, exécutez votre code en cliquant sur la flèche verte en haut et tapez « Light equals Light » pour instancier. Ici, nous obtenons la déclaration imprimée que nous avons écrite auparavant. Nous allons maintenant ajouter des attributs pour suivre l'état interne de la lumière, qu'elle soit allumée ou désactivée. Il s'agit du format de définition des attributs. Nous avons un point auto en noir, le nom de l'attribut en rose et la valeur en orange. Self fait toujours référence à l'instance actuelle. Cordons ça maintenant. Tout d'abord, dans le constructeur, nous avons défini On sur False. Ensuite, à l'intérieur de la méthode de bascule, nous allons vérifier si la lumière est actuellement allumée. Donc, si self.on : alors nous mettons la lumière sur False et si elle n'est actuellement pas allumée, alors nous l'allumons. Nous pouvons en fait résumer rapidement ces quatre lignes de code en utilisant une seule ligne de code en tapant self.on équivaut à ne pas self.on. Si self.on est vrai, pas vrai nous donnera faux. Si self.on est vrai, pas vrai nous donnera faux. Donc ne nous permet pas simplement de basculer entre vrai et faux. Encore une fois, cette ligne est exactement la même que ces quatre lignes. Je vais supprimer ces quatre premières lignes et c'est notre méthode à bascule. Essayons maintenant notre code. Encore une fois, appuyez sur la flèche verte pour exécuter votre code et nous allons instancier notre lumière. On va vérifier si c'est allumé ou non. Il n'est pas activé pour le moment. Allons basculer la lumière et vérifier si elle est à nouveau allumée et qu'elle est bien allumée. Notre code fonctionne. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Cela conclut notre leçon de pratique. J' espère que vous vous sentez familier avec la terminologie jusqu'à présent. Il n'est pas nécessaire de mémoriser les formats que nous avons couverts. D' abord, vous pouvez toujours le chercher. Deuxièmement, en raison de voir ces formats encore et encore, ici la fin de ce cours, vous serez plus familier avec eux que vous ne l'êtes maintenant. Dans la leçon suivante, nous allons visiter un bug mystérieux et comment le réparer. Si vous souhaitez vous entraîner avec des problèmes plus difficiles, continuez à regarder cette leçon pour une pratique. Comme dans la dernière leçon, nous avons maintenant un entraînement bonus. Créez une méthode appelée is_on qui renvoie si la lumière est allumée ou non. Mettez la vidéo en pause et essayez ceci maintenant, et voici la solution. Nous allons ajouter une autre méthode à l'intérieur de la classe Light appelée is_on. Encore une fois, vous avez besoin de votre argument de soi, et nous allons simplement retourner soft.on. Je vais appuyer sur « Escape » pour rejeter ce modèle et aller de l'avant et exécuter votre code en cliquant sur la flèche verte. Je vais instancier la lumière et ici nous allons vérifier, est la lumière allumée en tapant light.is_on. Assurez-vous de coder votre méthode avec des parenthèses et en effet c'est faux. Maintenant, allumons la lumière pour qu'elle soit allumée et vérifions, est-ce qu'elle est allumée ? En effet, c'est vrai. Notre méthode fonctionne. Comme nous l'avons déjà dit, ceci conclut notre leçon et dans la prochaine leçon, nous allons visiter un bug mystérieux et comment le corriger. 6. (Bonus) Mystère : Lumières synchronisées: Dans cette leçon, nous allons couvrir un bug mystérieux et comment le corriger. Notez que ces mystères abordent certaines des parties les plus confuses de la POO. Si vous vous sentez débordée, je suggère de sauter ces sections mystérieuses sur la première passe, les revisiter sur une deuxième passe du parcours. Comme avant, accédez à repl.it/languages/python3. Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. Tout d'abord, c'est la classe. Essayez de créer une classe appelée Lumière. Mettez votre vidéo en pause ici si vous ne voulez pas d'indice. Voici maintenant votre indice. C' est le format d'une définition de classe. Écrivons maintenant la solution. Nous allons définir une classe Lumière. Pour cette prochaine étape, nous allons instancier ces lumières. Instanciez les classes Light deux fois, nommez vos instances a et b. Passez votre vidéo ici si vous ne voulez pas d'indice. Maintenant, voici votre indice. Il s'agit du format pour l'instanciation et l'affectation de l'instance à une variable. Écrivons maintenant la solution. C' est bon si tu ne savais pas quoi écrire. Ici, nous allons taper a est égal à Lumière et b est égal à Lumière. Ensuite, permettez-moi d'introduire une nouvelle façon de définir un attribut pour votre classe. Voici votre classe. Nous allons définir ce qu'on appelle l'attribut de classe en définissant une variable dans le corps de cette classe. Mettons à jour notre code Light. Au lieu d'une passe que nous allons taper ici sur est égal à False. Pour accéder à cet attribut de classe, nous pouvons directement référencer la classe et son attribut en utilisant une expression de point. Appuyez sur la « flèche verte » pour exécuter votre code. Maintenant, nous allons utiliser l'interprète. L' interprète pour moi est dans la moitié inférieure de l'écran, mais peut-être sur le côté droit pour vous. Allez-y et tapez le nom de classe .on. Nous pouvons voir que la valeur par défaut est False comme nous l'avons défini ici. Notez que si vous définissez une instance, vous pouvez également accéder à cet attribut. Par exemple, si nous tapons .on, nous obtiendrons False et b.on sera également False. Maintenant, il est temps pour nous d'introduire le mystère. Essayons de modifier l'un de ces attributs Light. Auparavant, nous avons modifié ces attributs dans une méthode. Nous pouvons également modifier les valeurs d'attribut en dehors des méthodes. Changer la lumière a pour être allumé. Nous pouvons définir un .on égal à True. Comme prévu si on vérifie un .on, on obtient Vrai. Maintenant, que pensez-vous qu'il arrive à la Lumière B, elle devrait toujours être éteinte. Nous pouvons vérifier pour savoir que la lumière b est en effet toujours éteinte. Maintenant, c'est l'heure du mystère. Changons l'attribut de classe à True. Ici, nous allons taper dans Light.On est égal à True. Que crois-tu qu'il arrive à Lumière B ? Il devrait toujours être éteint, on peut vérifier, mais Light.B est allumé. Que s'est-il passé ici ? Nous devons visualiser pour comprendre ce qui s'est passé. Nous avons commencé à définir l'attribut de classe Light pour être désactivé. Nous avons ensuite défini une nouvelle instance comme prévu, cette nouvelle instance est toujours désactivée. Nous avons ensuite changé l'attribut de classe à True afin que la valeur par défaut soit activée. C' est ce que nous nous attendions à ce que cela arrive. Nous nous attendions à ce que la Lumière instanciée ne soit pas affectée. Cependant, nous avons vu que la Lumière instanciée était affectée. C' était aussi sur, ce qui est juste ici, B.on était vrai aussi. Voici ce qui s'est réellement passé. Nous avons défini l'attribut de classe Light, qui est désactivé par défaut. Lorsque nous avons instancié la Lumière, la Lumière n'avait pas son propre attribut pour allumer ou éteindre. Au lieu de cela, l'instance Light avait toujours un attribut de classe. Par conséquent, lorsque nous modifions l'attribut de classe, les instances sur l'attribut ont également changé. À emporter est que les attributs de classe sont toujours partagés. Voyons maintenant un autre mystère. Nous allons maintenant mettre la lumière. On est égal à False. Que pensez-vous qu'il arrive à Lumière b, comme vous pouvez vous y attendre ? b est également maintenant Faux. Que pensez-vous qu'il est arrivé à Light A ? Si nous tapons un .on, Light a est en fait toujours allumé. Quoi ? Comment Éclairage échappe-t-il à l'attribut partagé ? Décomposer cela avec une autre visualisation. Sur le côté gauche, nous avons imaginé ce que nous pensons qu'il s'est passé. Nous avons la classe en noir et les deux instances ci-dessous. Comme nous l'avons appris dans la section précédente, les attributs de classe sont partagés. Utilisons des flèches à la place. Plus tôt, nous avons activé manuellement Light a. Dans ce cas, la définition de l'attribut directement convertit réellement l'attribut class en attribut d'instance. lumière a est maintenant découplée et a son propre état. Nous définissons ensuite l'attribut de classe sur True et définissons à nouveau l'attribut de classe sur False. Tout le temps, Lumière un reste allumé et n'est pas affecté. Take away est que les attributs de classe sont partagés, mais pas les attributs d'instance. Cela nous amène également à une astuce pour éviter cette confusion. L' astuce consiste à ne pas modifier les attributs de classe dans votre programme. Cela vous évitera le mal de tête que nous avons illustré. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut la leçon. Dans la prochaine leçon, nous présenterons un nouveau concept. 7. Concept : Abstraction: Bienvenue dans une autre leçon conceptuelle, l'abstraction. Il n'y aura pas de code dans cette leçon. Au lieu de cela, nous allons discuter d'un concept de programmation orienté objet appelé abstraction, ce qui améliore la lisibilité et la maintenabilité de votre code. Permettez-moi d'expliquer ce que l'abstraction utilise notre exemple de crème glacée. C' est notre diapositive d'avant. Notez que nous avons décrit les attentes de toute instance de crème glacée que nous rencontrons. Pour toute instance de crème glacée, nous savons ce que fait l'instance de crème glacée et quelles sont les données de chaque instance de crème glacée. Par exemple, nous pouvons manger une instance de crème glacée. Mais plus important encore, nous pouvons manger une instance de crème glacée sans savoir comment la méthode de manger est mise en œuvre. La dernière partie est la clé. En tant qu'utilisateur d'instances de crème glacée, nous pouvons abstraction et ignorer le fonctionnement de ces méthodes. Nous avons juste besoin d'une description approximative de ce que fait la méthode. Nous appelons cette notion d'abstraction des détails. Pour répéter cette définition plus succinctement, l'idée de l'abstraction est de supprimer les détails inutiles pour l'utilisateur. Dans notre exemple, l'utilisateur est le mangeur de crème glacée. La personne qui mange sait qu'elle peut manger de la crème glacée ou ajouter des boules. Les détails inutiles comment la crème glacée gère manger sont abstraits loin. Cela améliore la lisibilité de votre code. Nous allons maintenant discuter de ce que l'abstraction se cache. Quelle est cette information inutile ? Cette section suivante illustre un concept connexe appelé encapsulation. Au centre, nous avons nos deux méthodes manger et ajouter. Sur la droite en bleu, nous avons des descriptions de méthodes pour les utilisateurs externes que chaque méthode permet aux utilisateurs de manger jusqu'à ce qu'il ne reste plus de crème glacée. La méthode add permet aux utilisateurs externes d'ajouter plus de crème glacée. Sur la gauche en rouge, nous avons les rouages internes de chaque méthode en interne ou maintenons compte du nombre de pelles restantes. Pas trop étonnant, manger soustrait simplement une scoop, et ajouter ajoute simplement une scoop, les détails internes rouges sont cachés loin des utilisateurs externes. Pour appliquer cela, nous utilisons l'encapsulation. Nous n'insisterons pas trop sur l'encapsulation. Sachez simplement que dans l'encapsulation implique de restreindre l'accès à l'information interne, comme faire respecter que les scoops ne peuvent pas être modifiés par des étrangers. Dans certaines encapsulations masque les informations de l'utilisateur. Si vous êtes confus au sujet de la différence entre abstraction et l'encapsulation, c'est bon. Ne pas connaître la différence même après avoir terminé ce cours est correct. L' utilisation de l'abstraction et de l'encapsulation, quel qu'il soit, est la partie importante. Maintenant, nous allons discuter d'un avantage de l'abstraction, qui est de supprimer la redondance dans le code. Cette suppression de redondance est comment l'abstraction améliore réellement la maintenabilité de votre code. Voici comment l'abstraction supprime la redondance. A droite, nous avons un cône de crème glacée. Il prend en charge la méthode add, qui ajoute une boule de crème glacée. A gauche, on a un camion de crème glacée. Il est logique que lors de la commande du camion de crème glacée, nous avions aussi une boule de crème glacée. Cependant, que faire si nous voulons modifier le comportement d'ajout de scoop ? Maintenant, nous ne pouvons ajouter un scoop, si le nombre total de scoops est inférieur à trois. Nous devons également ajouter cette restriction partout où nous ajoutons une boule de crème glacée, comme dans le camion de crème glacée. Ensuite, que faire si nous ajoutons une autre modification ? S' il n'y a plus de scoops, ajoutez trois scoops à la fois. Nous devons également ajouter cela partout où nous ajoutons une boule de crème glacée, comme dans le camion de crème glacée, cela devient rapidement un cauchemar d'entretien. Voilà pourquoi. Que se passe-t-il lorsque ces deux copies de code d'ajout de scoop ne sont pas synchronisées ? Ensuite, la crème glacée commence à se comporter de manière inattendue. Vous pourriez avoir de la crème glacée avec plus de trois boules, par exemple. Ces comportements inattendus sont à l'origine des bogues en production, alors faites attention. Mais comment on répare ça ? Nous ne voulons qu'une copie du code d'ajout de scoop. Tout simplement, tout code qui ajoute crème glacée devrait appeler la méthode d'ajout de classes de crème glacée. Personne d'autre ne devrait modifier directement le nombre de boules dans un cône de crème glacée. L' application de cette abstraction nous permet de réduire la redondance dans le code. Astuce. Vérifiez le code redondant. Si votre copie coller ou écrire du code redondant, vous le faites mal. Nous expliquerons pourquoi et comment quand nous commencerons à coder. L' abstraction supprime les informations inutiles. Par exemple, vous n'avez pas besoin de savoir comment manger de la crème glacée fonctionne pour appeler la méthode de manger. Cela améliore la lisibilité de votre code, rendant plus facile et plus rapide à comprendre. L' encapsulation masque ou restreint l'accès à l'information. Par exemple, vous ne pouvez pas accéder au nombre de cuillères à crème glacée laissées directement. Enfin, l'abstraction supprime la redondance et le code, soustraction améliore également la maintenabilité de votre code. N' oublie pas l'abstraction. Voici un résumé des concepts que nous avons abordés jusqu'à présent. Pour obtenir une copie de ces diapositives et d'autres ressources, assurez-vous de consulter le site Web du cours. Ceci conclut notre leçon, l'abstraction. Dans la leçon suivante, nous allons simuler un camion de crème glacée qui implémente correctement l'abstraction. 8. Pratique : Camion de crème glacée: Dans cette leçon, nous allons pratiquer l'abstraction en créant un cours de camion de crème glacée. Une fois que vous voyez cette page, fautez le projet pour obtenir votre propre copie modifiable. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante, cliquez sur les points de suspension pour obtenir une autre liste déroulante, et enfin, cliquez sur le bouton Fourche. Ensuite, je suggère de placer vos fenêtres Skillshare et repl.it côte à côte comme indiqué ici. Vous devriez alors voir un code similaire à ceux que je vois sur la droite. Si vous faites défiler vers le bas, vous verrez le cours de crème glacée que nous avons écrit dans la dernière leçon. La première étape consiste à modifier notre fonctionnalité d'ajout de scoops. Si nous avons plus de trois boules, notre crème glacée devrait renverser, nous laissant zéro boule. À l'intérieur de notre méthode d'ajout, nous devrions d'abord vérifier s'il y a plus de trois scoops. Ici, nous allons taper si self.scoop est supérieur à trois, puis définir le nombre de scoops à zéro. Nous allons également ajouter une déclaration d'impression ici pour expliquer ce qui est arrivé à l'utilisateur. Ici, nous allons imprimer : « Trop de scoops ! Goutte de glace. Avant de passer à autre chose, voici un conseil. Éviter les nombres magiques. Les nombres magiques sont des nombres écrits directement dans le code comme celui-ci trois et ceci est zéro. zéros sont assez simples pour raisonner, mais pourquoi trois ? Nous savons que trois est le nombre maximum de scoops. Mais dans les programmes plus complexes, les nombres magiques deviennent plus difficiles à comprendre pour les autres codeurs. Au lieu de cela, nous devrions remplacer ces trois par une variable appelée max scoops, qui a la valeur trois. Faisons ça maintenant. Pour notre variable, nous allons définir un attribut de classe appelé max scoops. Faisons cela maintenant sur le code. À l'intérieur de votre classe de crème glacée, nous allons définir des boules maximales égales à trois. Nous pouvons ensuite utiliser cet attribut de classe ci-dessous au lieu du nombre 3. Ici, nous allons écrire au lieu du numéro 3 dans la méthode add, self.max scoops. Utilisons maintenant ce cours de crème glacée et voyons comment respecter l'abstraction dans la pratique. Cliquez sur la flèche verte en haut pour exécuter votre fichier. Instancier ta crème glacée. Ensuite, disons que nous voulons ajouter des scoops, nous pouvons directement modifier le nombre de scoops, crème glacée.scoops plus égal à deux. Mais rappelez-vous, nous voulons mettre le nombre de scoops à zéro. Si on dépasse trois scoops, on pourrait commencer à coder ça. Si la crème glacée est supérieure à trois, mais cela devrait sembler familier. Nous venons d'écrire ce code dans la méthode add, cette familiarité, cette redondance, devrait être un drapeau rouge. De plus, nous ne devrions pas modifier directement l'attribut scoops. Nous ne suivons pas correctement l'abstraction. Donc, au lieu de cela, nous devrions utiliser la méthode add que nous avons déjà écrite. Ici, à la place, nous devrions écrire de la crème glacée .add (2) et ici, nous remarquerons que notre fonctionnalité fonctionne réellement. Nous avons plus de trois boules dans la glace maintenant, donc nous renversons et nous n'avons que zéro boule. On pourrait répéter la même erreur. Dites que vous voulez diminuer le nombre de scoops. Nous pourrions taper de la crème glacée.scoops moins égale à trois. Mais attendez, nous voulons vérifier s'il reste assez de scoops avant de soustraire. Donc, nous pouvons taper, « Si la crème glacée.scoops moins de trois », et encore une fois, ils devraient sembler familiers. Nous venons d'écrire cette logique dans la méthode de repas. C' est notre drapeau rouge. Nous devrions utiliser la méthode de repas. Au lieu de taper ceci, nous allons maintenant écrire crème glacée.eat (3). Cela nous donnera, il ne reste pas assez de morsures. Astuce, vérifiez le code redondant. Si vous copiez le collage ou l'écriture de code redondant, vous le faites probablement mal, et voici pourquoi. Avoir un code redondant rend le code difficile à maintenir. Plus précisément, une mise à jour vers une copie peut ne pas être propagée à l'autre copie de ce code. Vous avez ensuite lentement des copies de code divergentes qui tentent toutes les deux de faire la même chose, alors vérifiez le code redondant, assurez-vous que vous respectez l'abstraction. Nous allons maintenant décrire une nouvelle classe de camion de crème glacée. En tant que rafraîchissement, voici le format. Définissez votre nouvelle classe avec le nom de la classe, deux espaces et passez pour le corps de la classe. Nous allons définir un camion de crème glacée de classe et passer pour l'instant. Ensuite, définissez vos méthodes. Vous aurez besoin d'une commande de méthode pour que les clients puissent commander leurs cônes de crème glacée. Pour cette méthode, nous devons savoir combien de scoops ajouter initialement. Supprimez « Pass » et ajoutez maintenant « Order » avec l'argument auto et le nombre de scoops à ajouter initialement. Encore une fois, nous allons taper passe et remplir le corps de notre méthode plus tard. Nous aurons également une deuxième méthode appelée add, afin que les clients puissent commander des recharges pour leurs cônes de crème glacée. Pour cette méthode, nous avons besoin de la crème glacée pour ajouter deux et combien de cuillères à ajouter. Définissez la méthode add, mais l'argument self, puis la crème glacée à ajouter et le nombre de cuillères à ajouter. Encore une fois, utilisez pass et nous remplirons la méthode plus tard. Maintenant, sortons le cours du camion de crème glacée. À l'intérieur de la méthode de commande, nous allons créer une nouvelle instance de crème glacée. Ici, nous avons de la crème glacée égale à une nouvelle instance de crème glacée. On va y ajouter des scoops. Nous avons appris notre leçon d'avant, nous allons utiliser la méthode add de la crème glacée au lieu de modifier directement l'attribut scoops. Maintenant tapez crème glacée.add et le nombre de scoops. Enfin, retournez la crème glacée au client. Nous allons également terminer la méthode add. Cette méthode est assez simple. Ajouter des boules à la crème glacée, sorte que la crème glacée.ajouter des boules. Voyons maintenant combien de scoops nous vendons. Nous devrons ajouter un constructeur qui initialise le nombre de scoops vendus à zéro. Ici, nous allons définir un nouveau constructeur avec l'argument self et définir le nombre de scoops vendus égal à zéro. Ensuite, nous mettrons à jour le nombre de scoops vendus dans la méthode de commande. Dans la méthode de commande, nous allons ajouter le nombre de scoops vendus. Enfin, dans la méthode add, nous allons le faire une fois de plus, nous allons remplir le nombre de scoops vendus. Mais attendez, nous venons d'écrire cette ligne de code ci-dessus. Si vous comparez ces deux lignes, 37 et 38 avec les deux lignes ci-dessus, 32 et 33, vous verrez qu'elles sont identiques. C' est encore un drapeau rouge. Nous avons du code redondant, nous pourrions briser l'abstraction. Il s'avère que nous le sommes. Cette méthode ajoute pour les poignées de camion de crème glacée ajoutant des cuillères à une crème glacée, donc nous devrions utiliser la méthode d'ajout de camions de crème glacée pour ajouter des cuillères à un cône de crème glacée. Au lieu de cela, supprimons les lignes 32 et 33 et remplacons cela par self.add des scoops de crème glacée. Nous respectons maintenant l'abstraction de notre camion de crème glacée. Astuce, comprendre le contrat fourni par une classe peut vous aider à organiser le code au sein de la classe. Ici, comprendre que la méthode add gère l'ajout de scoops et la comptabilisation d'un certain nombre de scoops vendus signifie que nous pouvons utiliser cette méthode add au lieu de faire ces deux étapes manuellement, nous évitant d'écrire du code redondant. Utilisons maintenant cette classe de camion de crème glacée. apprenant de nos erreurs précédentes, nous savons maintenant respecter l'abstraction. Encore une fois, appuyez sur la flèche verte en haut de votre fichier pour exécuter votre code. Notez qu'il existe maintenant un nouveau niveau d'abstraction. Nous ne devrions pas créer ou ajouter des cônes de crème glacée directement, au lieu de cela, nous devrions commander auprès du camion de crème glacée. Nous allons maintenant créer un nouveau camion. Commandez de la crème glacée avec trois boules. Ici, nous avons de la crème glacée un est égal à camion.commander avec trois cuillères à crème glacée, puis manger une partie de la crème glacée. Maintenant, nous allons commander encore plus de crème glacée dans le camion. Nous allons taper camion.ajouter de la crème glacée un et ajouter une cuillère. Voyons combien de scoops les camions de crème glacée vendus. Ça a l'air bien. La commande initiale était de trois scoops et nous avons ajouté une autre scoop, ce qui représente un total de quatre scoops vendus. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Dans cette leçon, nous avons abordé certaines pratiques d'abstraction utilisant un camion de crème glacée. En particulier, vous avez vu comment j'ai échoué à utiliser l'abstraction et comment résoudre cela. Rappelez-vous les trois conseils de cette leçon, évitez les nombres magiques, vérifiez le code redondant et soyez clair sur les attentes. La leçon suivante est la pratique bonus. 9. (Bonus) Pratique : Lumières synchronisées: Dans cette leçon, nous allons pratiquer davantage le concept d'abstraction dont nous avons parlé. Cette fois, nous nous baserons sur notre simulation de lumière en synchronisant certains interrupteurs d'éclairage. Accédez à cette URL pour commencer. Une fois que vous voyez cette page, forcez le projet pour obtenir votre propre copie modifiable. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante. Cliquez sur l'ellipse pour obtenir une autre liste déroulante et enfin, cliquez sur le bouton Fourche. Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. Avant de commencer, je veux introduire un nouveau concept que vous n'avez pas encore vu, un argument par défaut en Python. Commençons par définir une fonction de soustraction. Pour rappel, voici le format de définition d'une fonction. Pour une fois, cette diapositive de format est en fait le code exact que nous allons écrire. Écrivons notre code maintenant. Votre code sur le côté droit devrait correspondre au mien. Si vous faites défiler vers le bas, vous verrez la classe de lumière que nous avons définie dans les leçons précédentes. Juste au-dessus de cette classe de lumière, nous allons définir la sous-méthode que nous voyons sur le côté gauche. Continuez et tapez, définissez sub (x, y) et retournez x moins y. Utilisons maintenant cette fonction objective. On appellera le sous-marin avec les entrées sept et quatre. Allez-y et appuyez sur la flèche verte en haut pour exécuter votre code. Puis tapez sous 7, 4 pour en obtenir trois. Maintenant que se passe-t-il si vous oubliez le deuxième argument ? Et si on tape sous sept et touche « Entrée » ? Eh bien, vous obtiendrez une erreur et votre erreur ressemblera à ceci. Il vous dit que votre deuxième argument vous manque. Définissons une autre fonction de soustraction sous deux. Cette fois, nous allons attribuer y un argument par défaut de zéro. Écrivons notre code maintenant. Nous allons définir sub2 x mais maintenant nous tapons y égal à zéro et tout le reste reste le même. Ce signe égal dans la définition de la fonction donne une valeur par défaut. Il n'affecte pas toujours y à zéro. La fonction n'affecte y à zéro que si vous ne donnez pas un second argument d'entrée. Voyons cela en action. abord, exécutez le fichier en appuyant sur la flèche verte tout en haut. Voyons ce qui se passe lorsque nous passons les deux arguments comme avant. Tapez dans sub2 7, 4 et comme prévu, nous obtenons trois. Ici, x est affecté à sept et y est affecté à quatre. Voyons ce qui se passe si on ne passe qu'un seul argument. Tapez dans sub2 7 et il s'avère qu'il n'y a pas d'erreur et nous en obtenons sept. Que s'est-il passé ici ? C' est parce que x a été affecté à sept et y a été automatiquement affecté à zéro. On a 7 moins 0. Couvrons maintenant un concept connexe appelé arguments de mots-clés. Ceci est mieux expliqué par l'exemple. Réexécutons la version précédente avec deux numéros d'entrée. Ici, nous aurons sub2 7,4. Ici, sept est affecté à x et la seconde entrée quatre est affectée à y. vous appuyez sur « Entrée », nous obtenons 7 moins 4 qui est 3. Nous pouvons également dire explicitement à Python quelle entrée est x et quelle entrée est y. Ici, nous pouvons taper sub2, x est égal à sept et y est égal à quatre. On peut appuyer sur « Entrée » et on en a encore trois. Nous appelons ces x égal à sept, y est égal à quatre arguments de mots-clés. Vous pouvez spécifier des arguments de mots-clés dans n'importe quel ordre. Ici, nous pouvons changer le x et le mot clé y arguments sub2, y est égal à quatre, x est égal à sept. Appuyez sur « Entrée » et vous obtenez toujours trois. Notez que si vous n'utilisez pas d'arguments de mot-clé et que vous changez les entrées, alors vous obtiendrez quelque chose de différent. Je vais effacer ma sortie afin que vous puissiez voir le bas de mon écran et ici nous allons taper sub2 4, 7 en changeant l'ordre sans utiliser d'arguments de mots-clés et ici la sortie est différente. Nous obtenons 3 négatif parce que nous avons maintenant 4 moins 7 au lieu de 7 moins 4. Maintenant que vous avez couvert les arguments par défaut et les arguments de mots-clés, utilisons-les dans notre nouvelle classe. Nous allons enfin travailler sur le concept abstraction. Nous allons ajouter la possibilité de synchroniser deux lumières de sorte que basculement comme le numéro 1 bascule également comme le numéro 2. Allez-y et faites défiler jusqu'à votre classe de lumière. Nous allons ajouter un argument au constructeur appelé sync. Cet argument aura une valeur par défaut de none avec un N. None signifie juste vide. L' intention est de définir la synchronisation sur une autre lumière à synchroniser avec. Tu verras ce que je veux dire dans une seconde. Ici, nous allons définir la lumière après que la synchronisation de l'argument auto équivaut à aucun. Nous pouvons ensuite définir la synchronisation de l'argument d'entrée comme un attribut instancié également appelé sync. Ici, nous allons écrire self.sync égal à synchroniser. Utilisons maintenant l'attribut sync s'il n'est pas vide ou en d'autres termes, si l'attribut sync n'est pas nul, puis basculez la synchronisation sur la lumière. Continuez et faites défiler vers le bas jusqu'à votre méthode de bascule. Ici, nous allons taper si self.sync n'est pas nul, puis bascule la lumière de synchronisation. Ici, vous pourriez être tenté de simplement basculer la lumière de synchronisation vous-même en écrivant dans self.sync.on équivaut à ne pas self.sync.on. Cependant, vous seriez en train de briser l'abstraction. Et si cette lumière est synchronisée avec une autre lumière ? Ensuite, nous devrions vérifier si self.sync.sync n'est pas nul et ainsi de suite et ainsi de suite. Wow, c'est du code redondant. Donc, comme toujours, le code redondant est un grand drapeau rouge. Au lieu de cela, nous devons respecter l'abstraction, self.sync comme une lumière et nous pouvons basculer les lumières en appelant leur méthode de bascule. Au lieu de cela, nous allons écrire self.sync.toggle. Ceci conclut nos lumières synchronisées. Maintenant, nous allons instancier et utiliser la lumière synchronisée. Allez-y et appuyez sur la flèche verte en haut pour exécuter votre code et maintenant instancions notre toute première lumière. La lumière 1 est égale à la lumière. Instanciez votre seconde lumière, mais cette fois définissez l'argument d'entrée de synchronisation sur la première lumière. Cela garantit que si nous basculez la lumière numéro 2, la lumière numéro 1 bascule également. Ici définir la lumière Nombre 2 est égal à la lumière, régler la synchronisation égale à la première lumière. Voyons si la lumière numéro un est allumée. Nous allons taper lumière1. est activé. On dirait que notre première lumière n'est pas allumée. Maintenant, basculez la lumière numéro 2. Cela devrait activer à la fois la lumière numéro 1 et le numéro 2. Ici, nous avons light2.toggle et vérifions que la lumière numéro 1 est maintenant allumée. Le numéro 1 est allumé et il est maintenant allumé. Super, ça marche. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut notre pratique d'abstraction supplémentaire. 10. Concept : Héritage: Bienvenue à une autre leçon conceptuelle, l'héritage. Pour comprendre l'héritage, nous devons comprendre une relation « est une ». Par exemple, la crème glacée est un exemple de nourriture. Nous le savons parce que vous pouvez manger de la nourriture et manger de la crème glacée. Cependant, la crème glacée peut également avoir quelques méthodes supplémentaires que d'autres aliments peuvent ne pas, comme faire fondre. Parce que la crème glacée est un exemple de nourriture, nous définissons la crème glacée comme une catégorie d'aliments pour enfants. On peut aussi dire que la sous-classe de la crème glacée en tant que nourriture. On appelle la nourriture la classe des parents. Définir cette relation « est une » nous donne un avantage intéressant appelé héritage. Maintenant, voici comment fonctionne l'héritage. Pour tous les aliments, nous nous attendons à avoir la méthode de repas. Puisque la crème glacée est une classe d'aliments pour enfants, crème glacée hérite automatiquement de la méthode de repas. Vous pouvez ajouter autant de classes d'enfants que vous le souhaitez et tous hériteront de la même fonctionnalité de repas. Répétons cette analyse avec un autre exemple. Un camion de crème glacée est un camion. En particulier, un camion de crème glacée a toutes les propriétés d'un camion et plus encore. Par conséquent, nous définissons le camion à crème glacée comme une catégorie enfant de camion. Cela nous donne un avantage astucieux. Nous nous attendons à ce que tous les camions aient la fonctionnalité ou la méthode d'entraînement. Étant donné que le camion à crème glacée est une classe enfant de camion, il hérite aussi de la méthode d'entraînement. Enfin, camion de crème glacée peut avoir quelques méthodes supplémentaires que d'autres camions ne font pas, comme l'ordre. En résumé, A est un B si A a toutes les propriétés de B ; par exemple, la crème glacée est un aliment. Puisque la crème glacée a toutes les propriétés des aliments, cela signifie que la crème glacée hérite de toutes les fonctionnalités des aliments. Par défaut, manger de la crème glacée est comme manger n'importe quel autre aliment. Mais si ce n'est pas vrai ? Que faire si manger de la crème glacée est radicalement différent de manger d'autres aliments ? En d'autres termes, nous voulons remplacer la fonctionnalité héritée par défaut. C' est notre prochain concept en héritage, dominant. Auparavant, nous avions dit que la crème glacée hériterait la méthode de la nourriture puisque la crème glacée est un aliment. Cependant, disons que la consommation de crème glacée est unique et contrairement à la nourriture générale. Nous aurions besoin de remplacer la méthode de repas, définissant une méthode de repas personnalisée pour la crème glacée spécifiquement. Nous pourrions vouloir remplacer manger parce que nous représentons la quantité consommée de différentes manières. Avec la crème glacée, nous mesurons la quantité laissée dans les boules. Avec d'autres aliments, nous utilisons un pourcentage. En résumé, la classe enfant hérite de la méthode d'une classe parent par défaut. Cependant, la classe enfant peut remplacer ou redéfinir ces méthodes. Ces deux concepts sont les principaux points à retenir. Nous aborderons les deux derniers concepts de bonus après un bref résumé de ce que nous avons appris jusqu'à présent. Notre premier concept, la relation « est une », nous dit quelles classes se sous-classent les unes les autres. Puisque la crème glacée est un aliment, la crème glacée sous-classe les aliments. La crème glacée hérite alors des méthodes de la nourriture. Cependant, nous pouvons également avoir la crème glacée supplanter les méthodes héritées de la nourriture, si nécessaire. Pour obtenir une copie de ces diapositives et d'autres ressources, assurez-vous de consulter le site Web du cours, et cela conclut notre leçon sur l'héritage. Il y avait beaucoup d'idées clés dans cette leçon, mais les points à retenir les plus importants ou le « est une » relation et dominante. Ne vous inquiétez pas si les détails sont boueux. Nous rendrons ces idées plus concrètes dans la prochaine leçon, quand nous commencerons à coder. Nous allons maintenant couvrir deux autres concepts de bonus succincts. Si vous vous sentez débordée ou si vous ne voulez pas de contenu bonus en ce moment, hésitez pas à passer à la leçon suivante. Une interface, comme l'interface alimentaire sur la droite, décrit simplement les attentes mais ne fournit pas d'implémentations par défaut. Ici, food spécifie une méthode eat et add, mais n'implémente pas non plus. crème glacée implémente l'interface alimentaire avec des implémentations utilisables pour les deux méthodes. Notre dernier concept est un abstrait. Un résumé définit également les attentes pour une sous-classe. Cependant, il peut implémenter certaines méthodes et laisser d'autres méthodes inimplémentées. Ici, le résumé alimentaire implémente la méthode eat et spécifie une méthode add sans l'implémenter. crème glacée sous-classe l'abrégé alimentaire et remplit l'implémentation de la méthode d'ajout, ce qui conclut la leçon sur l'héritage, y compris les concepts bonus. Dans la leçon suivante, nous commencerons à coder certains de ces concepts d'héritage. 11. Pratique : Camion de crème glacée de luxe: Pour pratiquer l'héritage, nous allons faire un DeluxeiceCreamtruck. Ce DeluxeiceCreamtruck, vous donne une boule gratuite avec votre commande de crème glacée. Accédez à cette URL pour commencer. Une fois que vous voyez cette page, forcez le projet pour obtenir votre propre copie modifiable. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante. Cliquez sur « Ellipse » pour obtenir une autre liste déroulante. Enfin, cliquez sur le bouton « Fourchette ». Ensuite, je suggère de placer vos fenêtres Skillshare et repl.it côte à côte comme indiqué ici. Vous sauterez directement dans l'écriture d'une sous-classe. Voici le format. Nous avons notre définition de classe normale, sauf que nous incluons la classe parent en violet entre parenthèses, comme nous le voyons ici. Dans cet exemple, ice est la classe enfant et H_2O la classe parent. Utilisons ce format pour notre DeluxeiceCreamTruck maintenant. Après avoir forgé l'autre repl.it, vous devriez voir le code comme le mien sur la droite. Sous tout le code existant, nous allons maintenant définir notre DeluxeiceCreamTruck. abord, créez la classe DeluxeiceCreamTruck, puis sous-classe camion de crème glacée, comme nous l'avons discuté, tapez dans la classe DeluxeiceCreamtruck, et sous-classe le camion de crème glacée avec un deux-points. Nous pouvons ajouter passe ici comme un espace réservé. Maintenant, vous devrez remplacer la méthode de commande puisque le DeluxeiceCreamTruck offre un scoop gratuit à chaque commande. Il s'agit du format de définition d'une méthode. Le remplacement d'une méthode ne prend aucune syntaxe spéciale. Il suffit de redéfinir la méthode dans la classe enfant. Ici, nous allons définir votre méthode de commande. Supprimez la passe et définissez l'ordre. Encore une fois, vous avez besoin de soi comme premier argument et il accepte un argument, scoops. Comme avant, nous créons une nouvelle crème glacée. Ensuite, nous appelons la méthode self.add, et passons le nombre de scoops. Mais attendez, c'est exactement comme avant. C' est ton drapeau rouge. Comme nous l'avons dit, le code redondant signifie que quelque chose ne va pas. Comment pouvons-nous réutiliser notre méthode de commande originale ci-dessus ? Nous sommes particulièrement intéressés à appeler notre méthode de classe parent. Voici comment faire ça. Pour appeler la méthode de la classe parent, utilisez simplement la super instance. Laissez-moi vous montrer en code maintenant. Nous allons appeler super.order et passer l'argument scoops. Ici, nous allons au lieu de ces deux lignes taper super.order et passer dans scoops. Ici, cela appelle l'ordre de la méthode parent. Cette méthode renvoie l'instance de crème glacée. Donc, définissez cette instance sur une variable. Ici, nous aurons de la crème glacée égale super.order. Ensuite, nous ajouterons une boule de crème glacée gratuite sans mettre à jour le nombre de cuillères vendues. Ici, nous allons écrire, ice_cream.add1. Au cas où vous vous demandez, pourquoi ne pas utiliser la méthode d'ajout de camions de crème glacée ? Méthode add héritée de la classe parent. Cependant, nous n'utilisons pas la méthode d'ajout de camions, car la méthode d'ajout de camions met également à jour le nombre de scoops vendus. Dans cet exemple spécifique, nous donnons une boule de crème glacée gratuite et ne voulons pas mettre à jour un certain nombre de scoops vendus. C' est comme ça que nous avons de la crème glacée.add1. Enfin, retournez la crème glacée au client. Une petite note. Une bonne pratique consiste à toujours appeler le constructeur de classe parent dans votre propre constructeur. Nous allons le faire maintenant pour les autres constructeurs maintenant. Ici, dans le constructeur pour camion de crème glacée, nous appellerons super.init. Ensuite, on recommencera encore une fois pour le cours de crème glacée. Pour le dernier segment de cette leçon, utilisez l'instance DeluxeiceCreamTruck. Nous allons cliquer sur le bouton vert en haut pour exécuter notre code. abord, instancier le DeluxeiceCreamtruck. Ici, nous aurons camion est égal à DeluxeiceCreamtruck. Nous allons ensuite commander une crème glacée avec deux boules, crème glacée est égale à truck.order2, et boom, la crème glacée que nous recevons a maintenant trois boules. Il comprend le scoop gratuit que nous avons ajouté. Nous pouvons vérifier en écrivant ice_cream.scoops, et nous avons trois scoops. Nous pouvons également vérifier combien de scoops le camion de crème glacée a vendu. Ici, nous allons taper camion.sold, et nous n'attendons que deux. Comme prévu, on en a deux. Le camion ne vendait que deux scoops, et le troisième scoop était gratuit. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut la pratique DeluxeiceCreamTruck pour l'héritage. La leçon suivante est une leçon de pratique bonus pour se familiariser avec ces idées. 12. (Bonus) Pratique : Lumière scintillante: Dans cette leçon, nous allons pratiquer l'héritage une fois de plus. Cette fois, nous ferons une vieille lumière qui scintille chaque fois que vous l'allumez. Accédez à cette URL pour commencer. Une fois que vous voyez cette page, forcez le projet pour obtenir votre propre copie modifiable. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante. Cliquez sur le « Ellipse » pour obtenir un autre menu déroulant, et enfin, cliquez sur la « Fourche ». Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. Nous allons sauter directement dans la sous-classe de notre classe de lumière originale. Voici le format de définition d'une sous-classe. Dans votre code, vous devriez voir une classe légère que nous avons définie dans la leçon précédente. Faites défiler jusqu'au bas de votre fichier. Ici, nous allons définir une vieille lumière qui sous-classe la classe de lumière originale. Nous allons taper un laissez-passer ici pour l'instant. Vous allez maintenant remplacer la méthode de bascule dans la classe parent car notre lumière doit clignoter chaque fois que la lumière est allumée. Nous allons maintenant définir notre constructeur qui définit scintillement à false. Cela signifie que la valeur par défaut pour toutes les lumières sera de ne pas scintiller de démarrage. Définissez le constructeur avec l'argument self avec sync égal à none. Rappelons que cet argument par défaut était dans notre constructeur de classes d'origine. Nous aurons alors besoin d'écrire sur est égal à faux. Tout comme avant, nous allons écrire la synchronisation est égale à la synchronisation. Ces deux lignes ont l'air redondantes, et vous avez raison, ils sont, ça devrait être un drapeau rouge, nous allons ajuster ça dans une seconde. Enfin, définissons le scintillement sur false, cette façon la lumière ne scintille pas par défaut. Vous allez maintenant remplacer la méthode de bascule dans la classe parent, car notre lumière doit clignoter chaque fois que la lumière est allumée. Voici le format de définition d'une nouvelle méthode. Juste en dessous de notre constructeur, nous allons maintenant définir une méthode à bascule. Comme avant, nous devons changer la lumière d'allumage en éteignant ou en éteignant. Nous allons écrire ici self.on est égal à pas self.on. Cependant, nous devons alors vérifier la lumière synchronisée. Si self.sync n'est pas nul, cela devrait sembler louche. Nous avons un code redondant. C' est un drapeau rouge. Ce code répète simplement la méthode bascule du parent. La solution consiste à appeler la méthode parent. On doit appeler la méthode parent. Voici comment appeler la méthode parent. Nous utilisons simplement la super instance comme un substitut à notre instance parent. De retour dans votre code, nous allons réellement supprimer ces deux lignes et à la place écrire super () .toggle (). Avant de continuer, nous aurons besoin d'appeler le constructeur parent de tous les autres constructeurs de classes. Ici, nous devons appeler le constructeur parent. Le constructeur parent prend en fait un argument de synchronisation. Dans la lumière originale, nous appellerons également son constructeur parent. Maintenant, nous pouvons finir la méthode de bascule. Nous vérifions si la lumière est allumée. Si c'est le cas, bascule la lumière scintille ou non, cette façon chaque fois que la lumière clignote. Si la lumière est allumée, alors on change si elle scintille ou non. Cela complète notre vieille lumière scintillante. Enfin, utilisons cette vieille lumière. Allez-y et cliquez sur la flèche verte en haut pour exécuter votre code. Alors instanciez votre vieille lumière. La lumière est égale à l'ancienne lumière (). Vérifiez si c'est scintillant ou non, light.slicker. En effet, il ne scintille pas. Allons maintenant allumer la lumière. Vérifions si la lumière clignote maintenant. Il devrait l'être et il est en fait vacillant. Allumons la lumière puis allumons à nouveau, et vérifions à nouveau si la lumière clignote. Cette fois, ça ne devrait pas l'être. En effet, il ne scintille pas. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut notre pratique pour le concept de l'héritage en utilisant de vieilles lumières scintillantes. Dans la leçon suivante, nous allons parler d'une erreur mystérieuse dans la programmation orientée objet, pourquoi cela arrive et comment la corriger. 13. (Bonus) Mystère : MRO: Dans cette leçon, nous allons couvrir une erreur mystérieuse en Python. Cette erreur est due à un concept appelé ordre de résolution de méthode. Comme précédemment, notez que ces mystères ont abordé certaines des parties les plus confuses de la POO. Si vous vous sentez débordée, je vous suggère de sauter ces séances de mystère sur la première passe de ce parcours, les revisiter sur une deuxième passe. Comme avant, naviguez vers repl.it/languages/python3, car nous commencerons à partir de zéro. Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. Tout d'abord, permettez-moi d'expliquer un concept appelé héritage multiple. Avant, nous avons vu qu'une classe peut sous-classer une autre classe. Par exemple, la crème glacée pourrait sous-classer les aliments, parce que la crème glacée est un type d'aliment. Que faire si la crème glacée est aussi une boisson ? Parce que la glace pourrait fondre ? Ensuite, nous pouvons vouloir que la crème glacée sous-classe à la fois les aliments et les boissons. Voyons à quoi cela ressemble dans le code. C' est le format. Ici, classe C sous-classe A et B. Pour lire ceci, lisez de gauche à droite. méthodes en C peuvent remplacer les méthodes dans A. méthodes dans A peuvent remplacer les méthodes dans B. Juste pour garder une trace, nous allons résumer ceci comme A supérieur à B, qui signifie A a priorité sur B en utilisant cette notation ci-dessus. Introduisons maintenant l'erreur mystérieuse. Voici à nouveau le format. Cordons ça. Créez la classe A avec un corps d'espace réservé. Ensuite, créez une deuxième classe B, dont la sous-classe est A. Classe B sous-classant A et un espace réservé pour le corps. Enfin, créez une troisième classe C, qui sous-classe A et B. Assurez-vous d'écrire vos classes exactement dans cet ordre. A, B, puis passez pour votre espace réservé. Maintenant, essayez d'exécuter votre code en utilisant la flèche verte, exécutez en haut. Voici l'erreur mystérieuse, l'erreur de résolution de méthode. Qu' est-ce que cela signifie, et comment cela est-il arrivé ? Allons briser ça. Pour comprendre cette erreur, nous devrons la visualiser. Premièrement, les sous-classes B A aux lignes 4 et 5. B a priorité sur A. Nous désignons ceci comme B supérieur à A. Cependant, C sous-classes A et B, comme nous l'avons écrit ici. Selon notre notation, A, B, cela signifie que A a la priorité sur B. Nous désignerons ceci comme A supérieur à B. C'est la contradiction. B est supérieur à A et pourtant A est supérieur à B, donc lequel, A ou B a priorité ? C' est ce dont Python se plaint. Il ne sait pas quelle classe a la priorité. La prochaine question naturelle est, comment pouvons-nous réparer cela ? Réexaminer la visualisation que nous avons vu plus tôt, nous pouvons vraiment supprimer l'une de ces erreurs pour résoudre le problème. Mais l'une de ces erreurs est plus facile à supprimer que les autres. Nous pouvons redéfinir A et B afin que B ne sous-classe pas A. Cela prend un changement de paradigme dans la façon dont nous comprenons l'héritage. Dans la prochaine leçon, nous discuterons exactement de ce qu'est ce changement de paradigme. Pour l'instant, pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Cela conclut un mystère d'ordre de résolution de méthode. Nous avons discuté quand l'erreur se produit, pourquoi elle se produit, et introduit une façon de résoudre le problème. Dans la leçon suivante, nous allons couvrir ce corrigé plus en détail. 14. Concept : Héritage+: L' objectif de cette leçon est de vous mettre en avance sur la courbe pour rendre votre code beaucoup plus flexible que les autres. Il y a deux concepts qui approfondiront votre compréhension de la programmation orientée objet, les mixins et la composition. Auparavant, nous avons beaucoup parlé de la relation « est une » dans l'héritage. Un paradigme commun est de dire, par exemple, qu'un bus est un véhicule, c'est le transport. Mais que se passe-t-il quand on a un bus qui a été converti en maison ? C' est toujours un bus, mais ce n'est plus vraiment un véhicule. Dans cette leçon, nous allons affiner notre compréhension de l' héritage dans la programmation orientée objet. Pour comprendre pourquoi nous avons besoin d'être affinés, plongons dans le problème du cercle et de l'ellipse. Cette section vous demandera de réfléchir fort et dépend fortement de votre compréhension des leçons précédentes. Si vous en avez besoin, prenez de l'eau ou faites une pause d'étirement d'abord. Tout d'abord, rappelez-vous de l'école qu'un cercle est une ellipse. Pour jogger votre mémoire pour pourquoi c'est : une ellipse a deux axes, où chaque axe peut avoir une longueur différente. Un cercle est un cas particulier où les deux axes ont la même longueur. Donc, un cercle est un type spécial d'ellipse. Nous disons qu'un cercle est une ellipse. Cependant, rappelez-vous notre règle « est une » de la leçon d'héritage. A est un B si A a toutes les propriétés que B a. Brancher ce que nous savons, un cercle est une ellipse, car un cercle a toutes les propriétés que l'ellipse a ? Attends, ça semble vraiment faux. Les cercles n'ont pas toutes les propriétés d'une ellipse. Un cercle n'a qu'une longueur d'axe ; une ellipse a deux longueurs d'axes. Si vous y pensez vraiment, une ellipse a toutes les propriétés qu'un cercle a. Par conséquent, une ellipse est un cercle. Donc nos professeurs se trompent ? Il s'avère que ce n'est pas juste non plus. Un cercle a un rayon, mais pas une ellipse. ellipses n'ont pas non plus toutes les propriétés d'un cercle. Donc, je suppose qu'un cercle n'est pas une ellipse, et une ellipse n'est pas un cercle, au moins selon la relation « est une » dans l'héritage. Notre solution est d'utiliser un paradigme différent appelé mixins. Je pense que c'est la relation « peut ». Laissez-moi vous montrer ce que je veux dire. Voici deux classes, personne et chien. Sous les deux classes, j'ai listé leurs méthodes. Nous commencerons par utiliser l'héritage. Notre classe de parents naturels est la chose vivante, qui définit le mouvement et la croissance par défaut. Ici, le texte gris sous personne et chien signifie que ces deux classes héritent de ces méthodes. Cependant, que se passe-t-il si nous ajoutons une classe de voiture ? Une voiture n'est pas une chose vivante, mais elle peut bouger. Créons une autre classe parent pour les classes qui peuvent se déplacer. Cette nouvelle classe est appelée mobile, et la chose vivante et la voiture en héritent. Super. Mais si on avait une classe de plantes ? C' est un truc vivant, mais ça ne bouge pas. n'y a pas de hiérarchie claire où cela fonctionnera. Donc, au lieu de construire une hiérarchie en utilisant l'héritage, considérons ce que chaque classe est capable de faire. Chaque classe parent définit plutôt une propriété de l'objet. Ici, nous avons une classe parent pour toutes les classes qui peuvent grandir, appelée Growable, en rose. Nous avons aussi une classe distincte, appelée Movable, en bleu. Chaque classe parent définit un nouveau comportement que les sous-classes peuvent faire. Une plante peut pousser, une personne peut bouger et grandir, et ainsi de suite et ainsi de suite. En résumé, A peut B si a a la capacité B ; par exemple, une personne est cultivable puisqu'une personne peut grandir. Le nom officiel de ces classes basées sur les capacités sont des mixins, ce qui améliore considérablement la flexibilité de votre code. Vous pouvez mélanger et faire correspondre n'importe quel nombre de capacités différentes pour chaque nouvelle classe que vous définissez. Une autre alternative à la relation « est une » est la composition, où nous imbriquons des objets au lieu d'hériter des objets. La composition est résumée par « a un » relations, comme la façon dont une voiture a des roues. Je crois que la composition a plus de nuance que la plupart des articles en ligne couvrent, mais nous allons arrêter ici pour l'instant parce que je pense la nuance sera plus déroutante qu'utile. Nous aborderons la nuance de la façon dont la composition remplace l'héritage dans un cours ultérieur, un post ou une vidéo. Notre concept final dans cette leçon est le polymorphisme. En bref, le polymorphisme est lorsque plusieurs classes implémentent toutes la même interface. En d'autres termes, un ensemble de classes satisfait toutes les mêmes attentes. Par exemple, nous pouvons implémenter plusieurs classes d'animaux, comme le singe et le chien, qui ont toutes des méthodes de croissance et de déplacement. Disons que vous avez un morceau de code qui ne repose que sur les méthodes de croissance et de déplacement, alors le truc cool est que vous pourriez exécuter ce code sur n'importe quelle classe animale que vous avez. Cela conclut nos concepts pour cette leçon. En bref, nous avons couvert le problème du cercle et de l'ellipse pour révéler un défaut dans les relations « est un ». Nous avons ensuite abordé deux types alternatifs de relations, « can » et « a a », afin d'améliorer la flexibilité de votre code. Enfin, nous avons brièvement discuté d'un avantage de la programmation orientée objet, qui est le polymorphisme. Pour obtenir une copie de ces diapositives et d'autres ressources, assurez-vous de consulter le site Web du cours. Ceci conclut notre leçon d'héritage avancée, qui améliore votre compréhension de la programmation orientée objet. C' était une leçon difficile, donc si vous n'avez pas tout à fait suivi, c'est bon. Les conseils et les leçons à retenir de cette leçon auront plus de sens que vous commencez à utiliser la programmation orientée objet et que vous commencez à rencontrer des défauts de conception vous-même. Dans la leçon suivante, nous allons implémenter des mixins. 15. Pratique : Faire fondre la crème glacée: Dans cette leçon, nous allons mettre en œuvre de la crème glacée fondante. En particulier, nous allons utiliser le concept de mixin que nous avons appris à créer une crème glacée fondante que nous pouvons à la fois manger et boire. Accédez à l'URL suivante pour commencer. Une fois que vous voyez cette page, forcez le projet pour obtenir votre propre copie modifiable. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante. Cliquez sur les points de suspension pour obtenir une autre liste déroulante, et enfin, cliquez sur le bouton Fourche. Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. Commençons par visualiser l'objectif. En ce moment, tu n'as qu'un cours de crème glacée. Notre objectif est d'ajouter à la fois de la limonade et de la crème glacée fondante. Nous savons que la crème glacée fondue devrait sous-classer la crème glacée. Dans l'esprit des mixins, nous allons ajouter un cours buvable, ce qui ajoute la possibilité pour un cours d'être bu. Ici, la limonade et la crème glacée fondante peuvent être bu. classes que nous allons implémenter sont mises en évidence en rouge. Voici une chose à noter, cependant. Notez que la crème glacée et la boisson ont tous deux la méthode add. Nous devrons prendre des précautions particulières lors de l'utilisation de plusieurs héritages de la crème glacée fondue. crème glacée fondante doit sous-classer à la fois la crème buvable et la crème glacée, mais donner la priorité à la crème glacée. Vous allez maintenant créer ces classes une par une. Sur le côté droit, vous verrez le code que nous avons obtenu des leçons précédentes. On peut trouver la classe de crème glacée en faisant défiler vers le bas. Nous pouvons également trouver la classe camion de crème glacée, et enfin, la classe camion de crème glacée de luxe. Tout en bas après cette classe, ajoutons maintenant nos mixins. Nous allons créer notre classe de boisson. Dans le constructeur, définissez le nombre de tasses à zéro. Nous mesurerons combien de la boisson est laissée dans des tasses. Voici notre constructeur avec soi comme argument, nous allons définir des coupes égales à zéro. Ensuite, créez une méthode d'ajout qui ajoute un certain nombre de tasses à la boisson. Vous avez def, la méthode add avec cet argument auto, puis le nombre de coupes à ajouter. Ensuite, nous augmenterons le nombre de tasses de cette quantité. Enfin, créez une méthode de boisson qui soustrait un certain nombre de tasses de la boisson. Ici, nous aurons la méthode de boisson, qui prend un certain nombre de tasses et déduit ce nombre de tasses du total. Revenons maintenant aux diapositives. Pour votre référence, voici le schéma de ce que nous construisons. Maintenant, créez la classe de limonade. Encore une fois, pour votre référence, voici notre diagramme. Sous votre code existant, créons une nouvelle classe de limonade. Cette classe de limonade héritera de buvable. Cette classe de limonade sous-classe buvable. La classe de limonade hérite alors automatiquement de toutes les méthodes d'ajout et de boisson. Maintenant, pour la dernière pièce, vous allez mettre en œuvre de la crème glacée fondante. Encore une fois pour votre référence, voici notre diagramme. Créer une classe, crème glacée fondante qui hérite à la fois de la crème glacée et buvable. Ici, nous aurons de la crème glacée fondante qui hérite à la fois de la crème glacée et buvable. Notez que la commande est importante. En écrivant d'abord de la crème glacée, nous faisons respecter que la méthode d'ajout de la crème glacée a priorité sur la méthode d'ajout de la boisson. Nous allons maintenant ajouter une méthode elapse. Cette méthode mettra à jour le nombre de cuillères de crème glacée non fondue et de tasses de crème glacée fondue au fil du temps. Cette méthode prend le temps écoulé comme argument. Ici, nous allons écrire elapse (self), le temps qui s'est écoulé, et d'abord calculer le nombre de cuillères à crème glacée qui ont fondu. Il s'agit soit de la durée écoulée soit du nombre de boules restantes, selon la plus petite de ces deux valeurs. Ici, nous allons calculer fondu est égal au minimum d'un temps écoulé ou le nombre de scoops restant. Soustrayez ensuite le nombre de pelles fondues du nombre total de pelles. Ici, nous aurons des scoops moins égaux fondus. En outre, ajoutez le nombre de cuillères fondues aux tasses de crème glacée fondue. Ici, nous aurons des tasses plus égaux à fondu. Ça complète notre cours de crème glacée fondue. Les méthodes add, drink et eat sont toutes héritées des deux classes parentales. Maintenant, vous allez utiliser votre toute nouvelle classe de crème glacée fondante. Cliquez sur la flèche verte en haut pour exécuter votre code, puis instancier votre crème glacée fondante. Ajouter quelques scoops, puis le temps écoulé pour voir combien a fondu. Ici, nous allons écrire ice_cream.elapse (2). Voyons combien il reste de scoops. Nous nous attendons à ce que deux boules de crème glacée fondent donc qu'une seule boule de crème glacée soit laissée, et nous en voyons une. Voyons maintenant combien de tasses de crème glacée fondue sont laissées. Ice_cream.cups et nous attendons deux, tout comme nos résultats disent. Buvons maintenant de la crème glacée fondue. Ice_crème.Buvez, et buvons une tasse. Vérifions maintenant combien de crème glacée fondue reste. Ice_cream.cups, comme prévu, il ne reste qu'une tasse. C'est ça. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut notre pratique de la crème glacée fondue. Suivant est la pratique de bonus supplémentaire pour mixin. 16. (Bonus) Pratique : Lumières chronométrées: Dans cette leçon, nous allons pratiquer davantage le concept d' héritage mixin en utilisant des interrupteurs d'éclairage. En particulier, nous allons mettre en œuvre des lumières chronométrées, qui s'éteignent après un certain laps de temps. Accédez à l'URL suivante pour commencer. Une fois que vous voyez cette page, fourchez le projet pour obtenir votre propre copie comestible. Pour ce faire, cliquez sur le nom du projet en haut à gauche pour obtenir une liste déroulante. Cliquez sur le « Ellipse » pour obtenir un autre menu déroulant, et enfin, cliquez sur le bouton « Fourche ». Ensuite, je suggère de placer votre Skillshare et Repl.it fenêtres côte à côte comme indiqué ici. D' abord, nous allons visualiser notre plan. On a déjà une lumière. Nous allons maintenant créer un TimerLight, qui sous-classe à la fois une minuterie et une lumière. Notez que nous n'avons pas créé de classe de périphérique générique qui contient toutes ces capacités. Nous avons plutôt créé des classes de minuterie et de lumière séparées, où chacune représente une capacité comme un mixin. Surlignées en rouge, sont les nouvelles classes que nous aurons besoin de créer. Commençons par une classe de minuterie. Voici notre schéma de ce que nous créons. Après avoir forgé votre code, votre côté droit devrait correspondre au mien. Si je fais défiler vers le bas, vous verrez la classe de lumière que nous avons créée dans les leçons précédentes, ainsi que l'ancienne lumière. Au bas de votre fichier, nous allons maintenant créer une minuterie. Ici, nous avons la minuterie de classe. Dans notre constructeur, nous allons définir le temps restant à zéro. Définissez votre constructeur, et à l'intérieur du constructeur, nous définirons le temps restant à zéro. Ensuite, définissez une méthode de jeu qui vous permet de démarrer la minuterie. Nous allons définir set, qui prend dans un argument avec combien de temps il reste. Ici, nous allons définir un temps à l'heure demandée. Nous définissons ensuite un anneau de méthode pour sonner lorsque le temps est écoulé. Nous allons définir anneau, qui ne prend pas d'arguments supplémentaires et imprimera, « Timer is up ». Enfin, nous allons définir une méthode elapse, qui écoule le minuteur pendant un certain temps. Ici, nous aurons défini l'élapse, qui prend en soi comme son premier argument, puis le temps écoulé. Tout d'abord, vérifiez s'il reste du temps dans la minuterie. Si self.left est supérieur à zéro, soustrayez le temps restant. Ici, nous avons le temps restant est égal au temps laissé moins le temps écoulé. Cependant, nous devons nous assurer que cette quantité n'est pas négative. En d'autres termes, si le temps écoulé est supérieur au temps restant, il peut être négatif. Écrivons ici, max avec zéro, et cela garantit que le temps restant est toujours non négatif. Enfin, s'il ne reste plus de temps dans la minuterie, alors on devrait sonner. Si self.left est égal à zéro, alors nous devrions appeler notre méthode d'anneau. Maintenant, nous devrions écrire notre classe TimerLight. De retour à l'intérieur de votre code, nous allons créer une classe TimerLight. Ici, nous aurons TimerLight, qui hérite à la fois de la lumière et de la minuterie. La première chose que nous ferons, voici notre schéma de ce que nous créons. Créez votre classe TimerLight, et sous-classe à la fois lumière et minuterie. Ici, nous aurons TimerLight, avec des sous-classes à la fois lumière et minuterie. Notre première étape consistera à remplacer la méthode de jeu. Définir ensemble, qui prend le temps restant. La première leçon ici est de respecter les barrières de l'abstraction. Nous allons appeler les classes parents, méthode set. Maintenant, s'il reste du temps, allumez la lumière. Si self.left est supérieur à zéro, nous devrions automatiquement allumer la lumière. Nous devrions également remplacer la méthode de l'anneau. Ici, nous allons définir anneau, qui ne prend pas d'arguments supplémentaires, appeler votre méthode de bague parent, afin que nous puissions sonner la minuterie, puis éteindre la lumière, puisque la minuterie ne sonne que lorsque le temps est écoulé. Ceci conclut notre TimerLight. Enfin, nous allons utiliser notre classe TimerLight. Cliquez sur le bouton vert en haut pour exécuter votre code, puis instancier votre minuterie. Ici, nous allons commencer l'horloge avec cinq secondes. La minuterie est réglée, cinq. Alors écoutons trois secondes. Aucune sonnerie ne devrait se produire et aucune ne le fait. Ensuite, nous devons nous écouler trois secondes de plus. Cette fois, ça devrait sonner. De plus, le temps restant devrait être nul. Vérifions que timer.left est en effet zéro et non négatif. Ensuite, vérifions notre TimerLight. Je vais cliquer sur ce bouton X pour effacer ma sortie. Instanciez votre classe de minuterie. Timer_light est égal à TimerLight. Faites exactement la même chose. Démarrez l'horloge avec cinq secondes, timer_light point défini avec cinq. La lumière du temps devrait maintenant être allumée. Vérifions, timer_light dot is_on, et en effet la lumière est allumée. Nous devrions alors nous écouler trois secondes. Timer_Light dot elapse (3). La lumière devrait toujours être allumée, alors vérifions deux fois. Timer_Light dot is_on, est vrai. Allons encore trois secondes. Nous attendons un anneau et la lumière éteint. Timer_Light dot s'écoule, trois secondes, cette minuterie est activée. C' est notre bague, et vérifions si la lumière est allumée ou non. Timer_point lumineux est_on. On y va. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Cela conclut notre pratique de la lumière de minuterie. Ensuite, est un autre bug mystérieux lié à l'héritage, que vous pouvez rencontrer. Voyons ce qu'est cette mystérieuse erreur et comment y faire face. 17. (Bonus) Mystère : Cas de base fragile: Dans cette leçon, nous allons explorer le phénomène appelé Classe de Base Fragile. Cet étranger provoque et comment contourner cela. Comme avant, accédez à repl.it/languages/python3. Ensuite, je suggère de placer vos fenêtres Skillshare et repl.it côte à côte comme indiqué ici. Tout d'abord, permettez-moi de vous présenter l'erreur. Définissons une classe A. A l'intérieur de cette classe, nous allons définir une méthode hi, qui imprime hi, et imprimer hi. Définira ensuite une méthode hello, qui imprime également salut. Définira ensuite une classe B, qui sous-classes A. Nous remplacerons ensuite la méthode hi à la place appeler hello. Maintenant, cela lui-même ne créera pas de problèmes. Allons de l'avant et voyons comment les utiliser. On va frapper « Run » en haut. Puis instancier la classe B. Nous appellerons b.hi et pas de problèmes. Nous allons maintenant créer le problème dans la classe A. Disons que nous avons remarqué le problème de redondance. Méthode salut et bonjour faire exactement la même chose, donc nous décidons d'avoir la méthode bonjour simplement appeler une méthode salut. Mettons à jour la méthode bonjour pour appeler simplement salut. Essayons à nouveau. Nous allons frapper la flèche verte en haut pour exécuter votre fichier, puis nous taperons b est égal à B pour instancier, puis nous appellerons b.hi et wow. Nous avons eu cette erreur de récursion, la profondeur de récursion maximale dépassée. Que s'est-il passé ? Eh bien, la classe B hérite de la méthode bonjour, ce qui appelle salut. Classe B remplace également la méthode salut pour appeler bonjour, donc salut appelle bonjour et bonjour appelle salut. Ces deux méthodes, salut et bonjour, continuent à s'appeler infiniment et l'erreur en bas ici, la profondeur de récursion maximale dépassée, signifie que le code a couru un bajillion de fois jusqu'à ce que l'ordinateur ne puisse plus le gérer. Le correctif est simple dans ce cas, il suffit de ne pas redéfinir bonjour pour appeler salut. Cependant, dans un système plus complexe, cela devient difficile à vérifier et à appliquer. Malheureusement en Python, il n'y a pas de bonnes solutions intégrées pour cela. Mais dans d'autres langues, une solution est de marquer les méthodes comme finales et impossibles à remplacer. Dans ce cas, nous aurions pu marquer la méthode hi comme finale. Pour obtenir une copie de ces diapositives et le code fini de cette leçon, assurez-vous de consulter le site Web du cours. Ceci conclut le mystère de la classe de base fragile et leur héritage plus section. En fait, nous avons terminé tout nouveau contenu pour le cours. Dans la prochaine leçon, nous résumerons vos plats à emporter, les mises en page des prochaines étapes et décrirons le contenu bonus. Dans la leçon suivante, nous résumerons vos plats à emporter et nous vous présenterons les prochaines étapes. Félicitations pour l'avoir fait aussi loin. Ce n'était pas un cours facile et vous avez bien fait. 18. Conclusion: Félicitations pour la création de votre toute première simulation avec une programmation orientée objet. Nous avons couvert un grand nombre de concepts. concepts comme des classes, des instances, des paradigmes généraux comme l'abstraction. C' est beaucoup de matériel. Mais ne vous inquiétez pas, vous pouvez toujours revoir la syntaxe si vous l'oubliez. Le plus important à emporter, ce que vous ne pouvez pas facilement rechercher est le paradigme de programmation orienté objet. Comment penser aux entités dans le monde qui vous entoure comme une série d'objets interagissant les uns avec les autres. Comment utiliser l'abstraction pour la lisibilité, l'héritage pour la maintenabilité, et les mélanges ou la composition pour la flexibilité. Si vous oubliez ces termes spécifiques, c'est bon. Cependant, si vous vous trouvez à écrire du code inflexible, inmaintenable ou illisible, alors il peut être utile de revoir certaines de ces leçons pour retrouver l'intuition et pratiquer ces idées. Je suggère d'ajouter une toute nouvelle fonctionnalité à votre simulation, peut-être ajouter des déserts, d'autres déserts, faire camion de crème glacée, puis lier et partager votre projet dans l'onglet Projets et ressources. J' ai hâte de jeter un oeil. De plus, maintenant que vous venez d'apprendre la POO, vous avez probablement une façon différente et très unique d'expliquer les choses à emporter de ce cours. Si vous avez cela à l'esprit, n'hésitez pas à poster dans la partie discussion du cours Skillshare. Si cela a suscité votre intérêt et que vous cherchez à en apprendre un peu plus, il y a quelques prochaines étapes. Consultez les ressources supplémentaires sur alvinwan.com/oop101. Maîtriser la POO est unique et que vous n'avez pas besoin des bonnes réponses. Au lieu de cela, pratiquez simplement la conception de systèmes très complexes dans OOP. Votre moment aha viendra lorsque deux conditions seront remplies. abord, vous réalisez que votre code est difficile à lire ou difficile à maintenir. Deuxièmement, vous revisitez ce cours, appliquez ces conseils et réalisez comment cela rend votre code facile à mettre à l'échelle, facile à étendre ou facile à lire. Bien sûr, c'est toujours une découverte douce, mais au lieu d'essayer 100 façons différentes, je vous ai simplement transmis la bonne réponse que les génies avant moi ont trouvé. Pour en savoir plus sur le codage au-delà de la POO, vous pouvez essayer la classe My Computer Vision 101 pour explorer la vision par ordinateur, classe MySQL 101 pour commencer à concevoir des bases de données, ou ma classe Data Science 101 pour commencer à jouer avec des données. J' ai également conçu ce cours pour être autonome et relativement court. Il y a plus de contenu à venir pour vous aider à coder des interviews et à devenir un développeur Python avancé. Si cela semble intéressant, accédez à mon profil Skillshare et cliquez sur suivre pour être averti lorsque le prochain cours sera lancé. Félicitations encore une fois pour le faire à la fin du cours, et jusqu'à la prochaine fois.