27 - Exos Objets Méthodes
Toutes les questions sont corrigées. Mais écrivez d'abord VOTRE correction. Le jour du BAC, il n'y aura pas la correction.
1 - Classe Livre
Dans le but de gérer une bibliothèque (et avant de faire les Bases de Données, bien plus efficaces pour faire cela), nous voudrions créer une Classe nous permettant d'enregistrer les informations sur chaque livre et interagir avec lui.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 |
|
01° Comment doit-on nommer Livre ?
- un constructeur
- une méthode
- un attribut
- une classe
02° Comment doit-on nommer Livre(), avec les parenthèses cette fois, ?
- un constructeur
- une méthode
- un attribut
- une classe
03° Comment doit-on nommer etat sur la ligne 10 ?
- un constructeur
- une méthode
- un attribut
- une classe
04° Comment doit-on nommer empruntable sur la ligne 17 ?
- un constructeur
- une méthode
- un attribut
- une classe
05° Piègeux. Comment doit-on nommer titre sur la ligne 7 ?
- un attribut
- un argument
- un paramètre
- un truc...
06° Piègeux. Comment doit-on nommer le titre de self.titre sur la ligne 9 ?
- un attribut
- un argument
- un paramètre
- un truc...
07° Comment doit-on nommer les variables livre1, livre2 et livre3 ?
- une Classe
- un objet ou une instance
- un bouquin
- un stance
08° Lancer le programme. Que faut-il taper dans la console pour observer le titre du livre 2 ?
09° Compléter maintenant le code de la méthode empruntable. Votre méthode devra renvoyer un booléen : True si le livre n'a pas encore d'emprunteur, False sinon.
Voici le prototype :
1 |
|
Il s'agit bien entendu de comparer le contenu de l'attribut emprunteur à None s'il n'y a pas d'emprunteur, c'est bien que le livre est empruntable.
10° Compléter le code de la méthode modifier_etat. Votre méthode devra remplacer le contenu de l'attribut par le paramètre-string .
Vous imposerez par une assertion que ce paramètre soit bien un string.
Voici le prototype.
1 |
|
Voici le code à compléter :
1
2 |
|
11° Tapez ceci dans la console pour découvrir comment sont stockées les dates d'enregistrement du livre :
>>> livre1.enregistrement
datetime.date(2020, 10, 20)
Module datetime
Ce module permet de gérer beaucoup de choses au niveau des dates et des horaires.
On utilise ici notamment la classe datetime (je sais, la Classe porte le même nom que le module et elle ne commence pas par une Majuscule).
On y trouve la méthode now() qui permet d'obtenir avec précision l'année, le mois, le jour et la date exacte de ... maintenant.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2020, 10, 20, 16, 34, 59, 294905)
Si vous ne voulez que la date, pas l'horaire, il faut appliquer la méthode date sur l'objet-date obtenu avec l'utilisation de now :
>>> datetime.datetime.now().date()
datetime.date(2020, 10, 20)
De plus, on peut très bien ne récupérer que l'année, le mois ou le jour :
>>> d = datetime.datetime.now().date()
>>> d.year
2020
>>> d.month
10
>>> d.day
20
De la même façon, si vous ne voulez que l'horaire, pas la date :
>>> import datetime
>>> datetime.datetime.now().time()
datetime.time(16, 38, 25, 578947)
>>> t = datetime.datetime.now().time()
>>> t.hour
16
>>> t.minute
38
>>> t.second
58
>>> t.microsecond # 1 000 000 µs pour 1s
245178 # soit 0,245178 s
Et comment faire si on veut calculer une date à partir d'aujourd'hui ? Il existe une classe nommée timedelta qui permet de créer des durées. On pourra additionner une date ou un horaire avec cette durée. Le module permet une gestion automatique du passage d'un mois à l'autre. Très pratique.
>>> maintenant = datetime.datetime.now().date()
>>> maintenant
datetime.date(2020, 10, 20)
>>> dans15jours = maintenant + datetime.timedelta(days=15)
>>> dans15jours
datetime.date(2020, 11, 4)
12° Compléter le code de la méthode calcul_retour : elle doit renvoyer la date à laquelle le livre devra revenir à la bibliothèque, sachant qu'on autorise des emprunts de 21 jours.
Regarder dans la méthode __init__ pour savoir dans quel attribut se trouve la date initiale de l'emprunt.
1
2
3
4 |
|
Avant de pouvoir continuer à gérer nos livres (à savoir les emprunts et les retours), il va falloir des gens pour les louer. Passons à la classe Client.
2 - classe Client
Passons donc à la classe Client.
Voici le code à utiliser mais pensez bien à placer vos propres versions des méthodes empruntable et calcul_retour dans la classe Livre.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 |
|
13° Donner les contenus des 3 attributs de l'instance de Client nommée c2 après exécution de la ligne 69.
14° Que doit-il s'afficher sur la console si on tape ceci ? Deuxième question : comment doit-on nommer informations ?
>>> c2.informations()
15° Expliquer ce que fait cette méthode ligne par ligne lorsqu'on l'active de cette façon :
>>> c2.louer(livre1)
>>> livre1.informations()
"NSI forever ! - emprunté jusqu'au 2020-11-05 par Léponge Bob"
16° Comment se nomme le principe de programmation qui nous empêche (par principe, on pourrait le faire en réalité) de coder la modification du livre directement dans le code du Client. Après tout, c'est assez compliqué : on active une méthode d'un client qui va activer une méthode de la classe Livre...
- Encapsulation
- Encapsulite
- Encapsulose
- Enfermement
17° Dernière question, plutôt difficile du coup : à vous de coder les méthodes retour de la classe Livre et rendre de la classe Client.
Il faudra remettre les dates ainsi que l'emprunteur à None dans le livre mais stocker l'identifiant de l'ancien emprunteur.
3 - Classe Bibliothèque
Pour finir, juste un peu de blabla.
Si on veut réellement créer notre bibliothèque, nous pourrions créer nos variables livres et clients et gérer ainsi les interactions.
Mais si on veut vraiment respecter la programmation objet, il faudrait en réalité créer un objet de classe Bibliotheque qui pourra stocker les instances des livres et des clients.
Voici cette classe. Elle n'est pas finalisée : on peut juste enregistrer les livres et les clients. Il faudrait encore créer des méthodes d'interface pour sélectionner un client et un livre particulier ainsi que l'action emprunter ou rendre par exemple.
18° Mettre la version 3 classes en mémoire. Lancer le code et lire le programme pour comprendre l'affichage obtenu.
Voici les clients enregistrés :
Liddell Alice
Léponge Bob
Kent Charlie
Voici les livres disponibles :
NSI forever ! - emprunté jusqu'au 2020-11-05 par Léponge Bob
Comment réussir ses études supérieures ? - disponible
En travaillant ! - disponible
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 |
|
Activité publiée le 21 10 2020
Dernière modification : 21 10 2020
Auteur : ows. h.