Menu
Coddy logo textTech

Interface Segregation

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

"Viele client-spezifische Schnittstellen sind besser als eine Allzweck-Schnittstelle."

Ein Interface ist eine Beschreibung von Verhaltensweisen, die ein Objekt ausführen kann.

Das Interface-Segregation-Prinzip besagt, dass ein Interface im Hinblick auf die Kohäsion so klein wie möglich sein sollte. Mit anderen Worten, es sollte nur EINE Sache tun.

Schauen wir uns ein schlechtes Beispiel an und wir werden es beheben,

from abc import ABC, abstractmethod


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

	@abstractmethod
	def swim(self):
		pass

Dies ist ein Interface mit mehreren Verantwortlichkeiten!

Und wir werden ein Problem haben, wenn wir dies implementieren,

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 Sie sehen, ist dieses Interface nicht kompatibel mit Tieren, die nicht laufen und schwimmen können!

challenge icon

Aufgabe

Einfach

Lassen Sie uns das obige Beispiel korrigieren, indem wir die Klassen Walkable und Swimable implementieren. Ihnen werden die Klassen Frog und Giraffe gegeben, welche die neuen Klassen implementieren.

Aufgaben:

  • Erstellen Sie die abstrakte Klasse Walkable, die nur eine abstrakte Funktion walk(self) hat.
  • Erstellen Sie die abstrakte Klasse Swimable, die nur eine abstrakte Funktion swim(self) hat.

Ändern Sie den vorgegebenen Code nicht!

Beachten Sie, dass nun jedes Interface nur eine Verantwortung hat und dem Prinzip folgt 

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