Méthodologie de la programmation
TP IV
- Les TP sont à rendre au plus tard le dimanche suivant à 23:59.
- Le travail attendu est une archive, contenant le ou les fichiers réponses, nommée :
- Les rendus se font par mail :
- Dont l’objet est [MDLP] TPx
- Dans lequel vous indiquez qui vous êtes (nom, numéro étudiant)
TP Programmation orientée objet II.
Exercice 0
Définissons deux classes : Adresse et Personne.
Adresse contient les attributs :
- _rue : str
- _ville : str
- _code_postal : str
Personne contient les attributs :
- _nom : str
- _sexe: str
- _adresses : [Adresse]
A
- Écrivez leur constructeur et leur méthode __str__().
B
- Écrivez des méthodes permettant d’accéder aux attributs de ces classes sans avoir à les manipuler directement.
Ce type de méthode est appelée “getter” et permet d’éviter d’avoir à exposer publiquement le comportement interne d’une classe.
C’est la raison pour laquelle on donne aux attributs “cachés” le préfixe “_”.
a = Adresse('foo', 'bar', 'loo')
print(a._rue)
print(a.rue())
Exercice 1
A
-
Créez une troisième classe Liste_personnes n’ayant qu’un attribut, un tableau d’objets Personne.
-
De la même manière que précédemment, écrivez son constructeur et son getter.
B
- Ajoutez à la classe Liste_personnes la méthode trouver_par_nom(), qui prend en paramètre une chaîne de caractères et qui cherche dans la liste de Personne l’objet dont le nom correspond au paramètre.
- La méthode renvoie le premier objet correspondant s’il existe ou None sinon.
C
- Toujours dans la classe Liste_personnes, ajoutez la méthode existe_code_postal() qui prend en paramètre une chaîne de caractères et qui cherche dans la liste de Personne si un des objets possède le code postal correspondant.
- Si c’est le cas elle retourne True, False sinon.
Exercice 2
A
- Dans la classe Liste_personnes, implémentez la méthode nombre_personne_ville() qui prend en paramètre une chaîne de caractère et qui compte le nombre de Personne possédant une adresse dans la ville passée en paramètre.
B
- Dans la classe Liste_personnes, implémentez la méthode edit_personne_nom() prenant en paramètre deux chaînes de caractères. Le premier est le nom de la Personne à rechercher dans la liste, le deuxième est le nouveau nom à attribuer cette Personne.
C
- De la même manière que dans l’exercice précédent, implémentez la méthode edit_personne_ville() qui prend en paramètre une chaînes de caractère et un objet Adresse. Le premier est le nom de la Personne à rechercher dans la liste, le deuxième est la nouvelle Adresse à lui attribuer.
Bonus
A
- Dans Liste_personnes, implémentez un indexeur sur le tableau de Personne que cette classe a en attribut.
Un indexeur est une méthode qui permet d’accéder à l’objet en utilisant les crochets :
# l ici est un objet Liste_personnes :
# un indexeur est donc une méthode permettant ce genre de comportement
print(l[0])
En python, il faut implémenter la méthode “magique” __getitem__().
A priori cette méthode prend en argument une clef et renvoie l’élément de sa liste de Personne correspondant à la clef.
B
Implémentez la méthode __len__() permettant d’utiliser la méthode len() sur votre objet Liste_personnes.
# l est toujours un objet de type Liste_personnes :
# méthode __len__() permet d'utiliser len() sur un objet.
print(len(l))
La classe Liste_personnes ne contenant qu’un seul attribut, il est facile d’immaginer ce que len(l) pourrait être…
Bonus
Il existe une autre méthode, appelée itérateur qui permet comme son l’indique d’itérer sur objet. Comme par exemple de la manière suivante :
for i in range(0, len(l)):
print(i)
for i in l:
print(i)
N’insistez pas trop sur ces questions si ça ne vous vient pas, on verra ça plus end détail en cours.