Menu
Coddy logo textTech

Interface Segregation

Lektion 25 von 28 im Kurs Clean Code - Schreibe besseren Code mit Python von Coddy.

„Viele clientspezifische Schnittstellen sind besser als eine allgemeine Schnittstelle.“

Eine Schnittstelle ist eine Beschreibung von Verhaltensweisen, die ein Objekt ausführen kann.

Das Prinzip der Schnittstellentrennung besagt, dass eine Schnittstelle im Hinblick auf ihre Kohäsion so klein wie möglich sein sollte. Mit anderen Worten: Sie sollte nur EINE Sache tun.

Sehen wir uns ein schlechtes Beispiel an und korrigieren es:

from abc import ABC, abstractmethod


class Animal(ABC):
	@abstractmethod
	def walk(self):
		pass

	@abstractmethod
	def swim(self):
		pass

Dies ist eine Schnittstelle mit mehreren Verantwortlichkeiten!

Und bei der Implementierung werden wir ein Problem haben:

class Frog(Animal):
	def walk(self):
		print("Walking")
	
	def swim(self):
		print("Swimming")


class Giraffe(Animal):
	def walk(self):
		print("Walking")
	
	def swim(self):
		raise Exception("Girrafe cannot swim!")

Wie du siehst, ist diese Schnittstelle nicht mit Tieren kompatibel, die nicht laufen und schwimmen können!

challenge icon

Aufgabe

Einfach

Beheben wir das obige Beispiel, indem wir die Klassen Walkable und Swimable implementieren. Die Klassen Frog und Giraffe, die die neuen Klassen implementieren, sind vorgegeben.

Aufgaben:

  • Erstelle eine abstrakte Klasse Walkable, die nur eine abstrakte Funktion walk(self) besitzt.
  • Erstelle eine abstrakte Klasse Swimable, die nur eine abstrakte Funktion swim(self) besitzt.

Ändere den vorgegebenen Code nicht!

Beachte, dass jetzt jedes Interface nur eine Verantwortung hat und dem Prinzip 

Probier es selbst

from abc import ABC, abstractmethod


# Enter you code here


class Frog(Walkable, Swimable):
	def walk(self):
		print("Walking")
	
	def swim(self):
		print("Swimming")


class Giraffe(Walkable):
	def walk(self):
		print("Walking")


if __name__ == "__main__":
	animal_type = input()
	if animal_type == "frog":
		animal = Frog()
		animal.walk()
		animal.swim()
	elif animal_type == "giraffe":
		animal = Giraffe()
		animal.walk()
		print("not Swimming")
			

Alle Lektionen in Clean Code - Schreibe besseren Code mit Python

Übe selbstständig: Online-Python-Compiler