Open Closed
Lektion 23 von 28 im Kurs Clean Code - Schreibe besseren Code mit Python von Coddy.
„Softwareeinheiten sollten für Erweiterungen offen, aber für Änderungen geschlossen sein.“
Das Prinzip besagt, dass jede Funktion, jedes Modul oder jede class eine Erweiterung ihres Verhaltens ermöglichen sollte, ohne den Code selbst zu ändern.
Angenommen, wir haben die class TxtConvertor, die eine txt-Datei in json oder xml konvertiert:
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Diese Struktur verletzt das Open-Closed-Prinzip.
Warum?
Wenn wir beispielsweise Unterstützung für die Konvertierung von einer txt-Datei in html hinzufügen möchten, müssen wir die vorhandene class ändern (verletzt das Closed-Prinzip).
Was sollten wir also tun?
Eine Lösung wäre in diesem Beispiel, eine abstrakte class zu erstellen, die die Hauptfunktion enthält:
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.Die Bibliothek
abcunterstützt abstrakte Basisklassen für Python. Mehr dazu kannst du hier lesen.
Aufgabe
MittelDeine Aufgabe besteht darin, das gegebene Beispiel so zu ändern, dass das Open-Closed-Prinzip angewendet wird, und einen Konverter hinzuzufügen, der txt in html umwandelt.
- Erstelle die abstrakte Klasse
TxtConvertor - Erstelle die Klassen
TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTML, die vonTxtConvertorerben und die Konverter implementieren (wie im obigen Beispiel)
Probier es selbst
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Alle Lektionen in Clean Code - Schreibe besseren Code mit Python
Übe selbstständig: Online-Python-Compiler