Chapitre 11

Chapitre 11

11.1 Bases de la programmation orientée objet

1.
b. Le nom d'utilisateur d'Ellis représente le créateur de la publication.
2.
b. Un objet modélise une entité du monde réel à l'aide de champs et de procédures.
3.
a. Une procédure, telle que Change venue, peut modifier le champ et le protéger contre les accès inappropriés.
4.
b. Limiter l'accès aux données prévient les modifications accidentelles et rend les relations entre les objets plus claires.
5.
b. Une bonne abstraction ne rend visible que les informations nécessaires. Un moteur qui surchauffe pouvant causer des dommages irréparables, un indicateur est nécessaire pour le conducteur.
6.
a. Ne présenter que les informations nécessaires réduit l'encombrement et améliore l'expérience globale.

11.2 Classes et instances

1.
a. Cat suit le mot-clé class au début de la définition de la classe et constitue le nom de la classe.
2.
c. pet_1 est une instance de la classe Cat créée en appelant Cat(). L'autre instance est pet_2.
3.
a. breed est un attribut d'instance défini in __init__(). Les autres attributs d'instance sont name et age.
4.
c. Le style CapWords, où tous les mots commencent par une majuscule et sans espace entre les mots, est recommandé pour les noms de classes. « Pet » et « cat » étant des mots distincts, chacun prend une majuscule et ils s'enchaînent directement.
5.
b. Deux instances, room_1 et room_3, sont créées en appelant Rectangle(), qui appelle le constructeur __init__().
6.
b. room_1 est l'instance qui a appelé la méthode area(), donc self représente cette instance spécifique.
7.
a. La ligne 3 se trouve dans __init__(), qui initialise length et les autres attributs d'instance pour chaque nouvelle instance.
8.
c. __init__() a un paramètre obligatoire, classiquement appelé self, qui permet au constructeur d'accéder à l'instance.
9.
b. order_id est un attribut d'instance défini dans __init__(). L'autre attribut d'instance est cup_size.
10.
b. Modifier order_1.cup_size n'affecte pas order_3.cup_size. order_1.cup_size passe à 8 et order_3.cup_size vaut toujours 16 .
11.
a. order_1, order_2 et order_3 partagent tous l'attribut de classe CoffeeOrder.loc. Modifier loc affecte toutes les instances, donc Caffeine Cafe est affiché pour l'emplacement.
12.
b. Tenter d'accéder à un attribut de classe à l'aide d'une instance n'est pas sûr. Dans __init__(), tenter d'accéder à l'attribut de classe crée un nouvel attribut d'instance nommé cls_id. Bien que cela soit possible, les programmeurs devraient éviter d'utiliser le même nom pour des attributs de classe et des attributs d'instance afin d'éviter toute confusion.

11.3 Méthodes d'instance

1.
b. Supprimer la valeur par défaut du paramètre fait de bp un paramètre obligatoire.
2.
b. self est le premier paramètre dans la définition de __init__(), et non un argument explicite. self ne doit pas être inclus dans l'appel.
3.
c. La deuxième définition écrase la première car les définitions explicites multiples de __init__() ne sont pas autorisées. __init__() requiert tous les paramètres, de sorte que les deux premiers appels à __init__() pour patient_1 et patient_2 sont incorrects.
4.
c. order_1 est initialement un café sans lait ni sucre, mais l'appel à change() ajoute du sucre à la commande en affectant à order_1.with_sugar la valeur True .
5.
c. Le premier paramètre d'une méthode d'instance indique que la méthode peut modifier une instance. change() permet de modifier la présence de lait ou de sucre dans une commande de café.
6.
b. Désindenter print_order() produirait une erreur. Une méthode d'instance doit être définie au sein de la classe.

11.4 Surcharge d'opérateurs

1.
c. __add__() est une méthode magique, indiquée par les doubles traits de soulignement au début et à la fin du nom de la méthode.
2.
b. Les méthodes magiques sont conçues pour être appelées en interne afin d'exécuter des actions en coulisses et ainsi simplifier les tâches de l'utilisateur.
3.
c. __init__() est définie par le programmeur pour initialiser les attributs d'instance. __str__() est définie par le programmeur pour personnaliser la représentation sous forme de chaîne de caractères d'une instance de Engineer.
4.
a. Un programmeur peut surcharger un opérateur pour personnaliser le fonctionnement de l'opérateur intégré.
5.
b. L'opération d'addition associe l'opérande de gauche, acct_a, au paramètre self et l'opérande de droite, acct_b, au paramètre other.
6.
c. - est un opérateur binaire, donc __sub__() possède deux paramètres. Les attributs x et y des paramètres sont soustraits les uns des autres, et les valeurs résultantes forment un nouveau Pair.
7.
a. <, > et == sont surchargés respectivement avec __lt__(), __gt__() et __eq__().
8.
b. __le__() est la méthode magique pour l'opérateur <=. __le__() prend deux paramètres pour les opérandes de gauche et de droite, et renvoie la comparaison correcte des deux valeurs amount.
9.
b. __gt__() surcharge l'opérateur >, qui effectue une comparaison et renvoie True ou False .

11.5 Utilisation de modules avec des classes

1.
b. Level et XP sont des classes importées du module character dans le programme. Toute autre classe du module character n'est pas importée.
2.
b. Une seule classe ou plusieurs classes peuvent être importées depuis un module en utilisant le ou les name de classe.
3.
c. Le nombre de classes dans un module n'est pas limité, mais les classes devraient être regroupées au sein de modules afin de maximiser leur réutilisabilité.
4.
b. Le module character a reçu l'alias game_char, donc character n'est pas défini dans le programme. game_char est utilisé à la place de character.
5.
c. game_char faisait référence au module importé, mais affecter une valeur à game_char remplace le module importé par la chaîne 'Ranger' . game_char ne peut plus être utilisé pour accéder aux classes.