blob: edd1eaebe973db431fee326a9b21dd72cb6f8b9f (
plain)
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
|
---
tags:
- sorbonne
- informatique
semestre: 1
---
On utilise de plus des langages multi-paradigmes
Les langages les plus connus en POO sont Java et C++
POO permet de créer ses propres types de données
Une classe est un modèle des objets
```python
class FeuTricolore:
def __init__(self) -> None:
self._couleur = "rouge"
def couleur(self) -> str:
return self._couleur
def change(self) -> None:
if self._couleur == "rouge":
self._couleur = "vert"
elif self._couleur == "vert":
self._couleur = "orange"
elif self._couleur == "orange":
self._couleur = "rouge"
def __rep__(self) -> str:
"""est l'équivalent du toString en Java"""
return f"couleur {self._couleur}"
feu: FeuTricolore = FeuTricolore()
for _ in range(10):
feu.change()
print(f"la couleur du feu est {feu}")
```
Pour faire hériter une classe, on la met entre parenthèse, e.g.
```python
class Point:
# ...
class PointColore(Point):
# hérite de Point
```
cela permet d'avoir accès à toutes les méthodes de la méthode parente
On représente des classes avec des diagrammes de classes (UML)
Typage nominal = le nom de la classe détermine le type
|> simple mais limité
Typage structurel = le nom de la classe et toutes les méthodes dans la classe (alourdie le type)
|> puissant mais lourd
En python, c'est canardesque : duck-typing en anglais ; le typage est dynamique
|> presque aucun effort mais dangereux
On vérifie le type avec la fonction `isinstance`
Voir le cours pour créer des itérables
|