Menu
Coddy logo textTech

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 abc unterstützt abstrakte Basisklassen für Python. Mehr dazu kannst du hier lesen.

challenge icon

Aufgabe

Mittel

Deine 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.

  1. Erstelle die abstrakte Klasse TxtConvertor
  2. Erstelle die Klassen TxtConvertorToJson, TxtConvertorToXML, TxtConvertorToHTML, die von TxtConvertor erben 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