Menu
Coddy logo textTech

Arayüz ayrımı

Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 25 / 28.

"Birçok istemciye özel arayüz, tek bir genel amaçlı arayüzden daha iyidir."

Bir arayüz, bir nesnenin gerçekleştirebileceği davranışların açıklamasıdır.

Arayüz ayrımı ilkesi, bir arayüzün bütünlük açısından mümkün olduğunca küçük olması gerektiğini belirtir. Başka bir deyişle, yalnızca TEK bir şey yapmalıdır.

Kötü bir örneğe bakalım ve bunu düzelteceğiz:

from abc import ABC, abstractmethod


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

	@abstractmethod
	def swim(self):
		pass

Bu, birden fazla sorumluluğa sahip bir arayüzdür!

Bunu uygularken sorun yaşayacağız:

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!")

Gördüğünüz gibi bu arayüz, walk ve swim yapamayan hayvanlarla uyumlu değildir!

challenge icon

Görev

Kolay

Yukarıdaki örneği, Walkable ve Swimable sınıflarını uygulayarak düzeltelim; size yeni sınıfları uygulayan Frog ve Giraffe sınıfları verilmiştir

Görevler:

  • Yalnızca bir soyut walk(self) işlevine sahip soyut Walkable sınıfını oluşturun
  • Yalnızca bir soyut swim(self) işlevine sahip soyut Swimable sınıfını oluşturun

Verilen kodu değiştirmeyin!

Her arayüzün artık yalnızca bir sorumluluğu olduğuna ve ilkesini izlediğine dikkat edin 

Kendin dene

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")
			

Clean Code - Python ile daha iyi kod yazın bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi