Exercices Architecture & Patterns ISP : Ségrégation des interfaces
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

ISP : Ségrégation des interfaces

Le principe de segregation des interfaces (ISP) dit : ne force pas les classes a implémenter des méthodes qu'elles n'utilisent pas.

Imagine une grosse interface Machine avec imprimer(), scanner(), envoyer_fax(). Si tu as une simple imprimante, elle est forcee d'implémenter scanner() et envoyer_fax() meme si elle ne sait pas faire ca. C'est absurde.

La solution : plusieurs petites interfaces au lieu d'une grosse.

En Python, on utilise les classes abstraites (ABC) pour definir des interfaces :

from abc import ABC, abstractmethod

class Imprimable(ABC):
@abstractmethod
def imprimer(self):
pass

Une classe qui herite d'un ABC est OBLIGEE d'implémenter les méthodes abstraites. Sinon, Python refuse de l'instancier.

Crée des interfaces fines :
- Imprimable (ABC) avec imprimer() abstraite
- Scannable (ABC) avec scanner() abstraite
- Faxable (ABC) avec envoyer_fax() abstraite

Puis :
- Imprimante(Imprimable) : imprimer() retourne 'Impression en cours'
- Scanner(Scannable) : scanner() retourne 'Scan en cours'
- ImprimanteMultifonction(Imprimable, Scannable, Faxable) : implémente les trois

Exemple :
Imprimante().imprimer() # 'Impression en cours'
ImprimanteMultifonction().envoyer_fax() # 'MFP: Fax envoye'

Tests (3/4)

Imprimante
assert Imprimante().imprimer() == 'Impression en cours'
Scanner
assert Scanner().scanner() == 'Scan en cours'
Multifonction
m = ImprimanteMultifonction()
assert 'Impression' in m.imprimer()
assert 'Scan' in m.scanner()
assert 'Fax' in m.envoyer_fax()

+ 0 tests cachés

Indices (3 disponibles)

solution.py