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

Arayüz (interface), bir nesnenin yapabileceği davranışların bir tanımıdır.

Arayüz ayrımı (interface segregation) prensibi, bir arayüzün uyumluluk (cohesion) açısından mümkün olduğunca küçük olması gerektiğini belirtir. Başka bir deyişle, sadece TEK bir iş yapmalıdır.

Kötü bir örneğe bakalım ve onu düzeltelim,

from abc import ABC, abstractmethod


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

	@abstractmethod
	def swim(self):
		pass

Bu, birden fazla sorumluluğu olan bir arayüzdür!

Ve 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, hem yürüyüp hem yüzemeyen hayvanlarla uyumlu değildir!

challenge icon

Görev

Kolay

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

Görevler:

  • Yalnızca bir tane soyut fonksiyonu walk(self) olan Walkable soyut sınıfını oluşturun
  • Yalnızca bir tane soyut fonksiyonu swim(self) olan Swimable soyut sınıfını oluşturun

Verilen kodu değiştirmeyin!

Artık her arayüzün yalnızca bir sorumluluğu olduğuna ve prensibe uygun olduğuna 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