classDiagram
class Courrier {
<<Abstract>>
+poids: float
+expedition_rapide: bool
+destination: str
+__str__(): str
+complement_str()*: str
+calcul_affranchissement()*: float
}
class Colis {
+volume: float
+complement_str(): str
+calcul_affranchissement(): float
}
class Lettre {
+format: str
+complement_str(): str
+calcul_affranchissement(): float
}
Courrier <|-- Colis
Courrier <|-- Lettre
UML
Introduction à UML
1 Diagramme
2 Code
courrier.py
from abc import ABC, abstractmethod
class Courrier(ABC):
"""Définition d'un article
"""
def __init__(self, poids, expedition_rapide, adresse_destination):
"""Constructeur
Parameters
----------
poids : float
Poids en kilogramme
expedition_rapide : bool
True si mode d'expédition rapide
adresse_destination : str
Adresse de destination
"""
self.poids = poids
self.expedition_rapide = expedition_rapide
self.adresse_destination = adresse_destination
@abstractmethod
def calcul_affranchissement(self):
pass
def __str__(self):
"""Affichage d'un courrier"""
return f"""
Colis :
Adresse destination : {self.adresse_destination}
Poids : {self.poids} grammes
Mode : {self.expedition_rapide}
{self.complement_str()}
Prix du timbre : {self.calcul_affranchissement()}€"""
@abstractmethod
def complement_str(self):
passlettre.py
from courrier import Courrier
class Lettre(Courrier):
"""Définition d'une lettre"""
def __init__(self, poids, expedition_rapide, adresse_destination, format):
"""
Parameters
----------
format : str
Format de la lettre (A3 ou A4)
"""
super().__init__(poids, expedition_rapide, adresse_destination)
self.format = format
def complement_str(self) -> str:
return "Format : {}".format(self.format)
def calcul_affranchissement(self) -> float:
"""Calcule l'affranchissement
Returns
--------
float
prix du timbre
"""
tarif = 0
if self.format == "A4":
tarif = 2.5 + self.poids * 0.001
else:
tarif = 3.5 + self.poids * 0.001
if self.expedition_rapide:
tarif *= 2
return tarifcolis.py
from courrier import Courrier
class Colis(Courrier):
"""Définition d'un colis
"""
def __init__(self, poids, expedition_rapide, adresse_destination, volume):
"""
Parameters
----------
volume : float
Volume en litres
"""
super().__init__(poids, expedition_rapide, adresse_destination)
self.volume = volume
def complement_str(self) -> str:
return f"Volume : {self.volume} litres"
def calcul_affranchissement(self):
"""Calcule l'affranchissement
Returns
--------
float
prix du timbre
"""
tarif = self.volume / 4 + self.poids * 0.001
if self.expedition_rapide:
tarif *= 2
return tarifsandbox.py
from colis import Colis
from lettre import Lettre
l1 = Lettre(80, "normal", "Bordeaux", "A4")
print(l1)
c1 = Colis(3500, "rapide", "Rennes", 2.25)
print(c1)