Menu
Coddy logo textTech

Şablon Metot Kalıbı

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 52 / 64.

Template Method Deseni, bir algoritmanın iskeletini bir temel sınıfta tanımlar ve alt sınıfların algoritmanın yapısını değiştirmeden belirli adımları geçersiz kılmasına (override) olanak tanır.

İşte şablon yöntemi (template method) içeren bir temel sınıf:

class DataProcessor:
    def process(self):
        """Algoritma yapısını tanımlayan şablon yöntemi"""
        self.read_data()
        self.process_data()
        self.save_data()
    
    def read_data(self):
        print("Reading data...")
    
    def process_data(self):
        raise NotImplementedError("Subclasses must implement this")
    
    def save_data(self):
        print("Saving data...")

Şablon yöntemi process() algoritma adımlarını tanımlarken, process_data() yönteminin uygulanması alt sınıflara bırakılmıştır.

Soyut metodu uygulayan somut sınıflar oluşturun:

class CSVProcessor(DataProcessor):
    def process_data(self):
        print("Processing CSV data")

class JSONProcessor(DataProcessor):
    def process_data(self):
        print("Processing JSON data")

Her bir somut sınıf, gerekli adımın kendi uygulamasını sağlar.

Şablon yöntemini kullanın:

csv_processor = CSVProcessor()
csv_processor.process()

print()  # Boş satır

json_processor = JSONProcessor()
json_processor.process()

Oyun şablonu içeren başka bir örnek oluşturun:

class Game:
    def play(self):
        """Template method for playing a game"""
        self.start_game()
        self.play_game()
        self.end_game()
    
    def start_game(self):
        print("Game started!")
    
    def play_game(self):
        raise NotImplementedError("Define the game rules")
    
    def end_game(self):
        print("Game ended!")

class Chess(Game):
    def play_game(self):
        print("Playing chess - thinking strategically...")

class Soccer(Game):
    def play_game(self):
        print("Playing soccer - running and kicking...")

chess = Chess()
chess.play()

Çıktı:

Reading data...
Processing CSV data
Saving data...

Reading data...
Processing JSON data
Saving data...
Game started!
Playing chess - thinking strategically...
Game ended!

Önemli Nokta: Template Method Deseni, alt sınıfların belirli adımları özelleştirmesine izin verirken üst sınıfta ortak bir algoritma yapısı tanımlar. Üst sınıf genel akışı kontrol eder, ancak alt sınıflar belirli uygulamaları sağlar. Bu, bireysel adımlarda esneklik sağlarken tutarlı bir yapı sağlar.

challenge icon

Görev

Orta

template.py ve driver.py dosyalarını uygun kapsülleme ve metotlarla uygulayın. Adım adım rehberlik için TODO yorumlarını takip edin.

Kopya kağıdı

Template Method Deseni, bir algoritmanın iskeletini bir temel sınıfta tanımlar ve alt sınıfların algoritmanın yapısını değiştirmeden belirli adımları geçersiz kılmasına (override) olanak tanır.

Şablon yöntemi içeren bir temel sınıf oluşturun:

class DataProcessor:
    def process(self):
        """Algoritma yapısını tanımlayan şablon yöntemi"""
        self.read_data()
        self.process_data()
        self.save_data()
    
    def read_data(self):
        print("Reading data...")
    
    def process_data(self):
        raise NotImplementedError("Subclasses must implement this")
    
    def save_data(self):
        print("Saving data...")

Soyut yöntemi uygulayan somut sınıflar oluşturun:

class CSVProcessor(DataProcessor):
    def process_data(self):
        print("Processing CSV data")

class JSONProcessor(DataProcessor):
    def process_data(self):
        print("Processing JSON data")

Şablon yöntemini kullanın:

csv_processor = CSVProcessor()
csv_processor.process()

json_processor = JSONProcessor()
json_processor.process()

Template Method Deseni, üst sınıfta ortak bir algoritma yapısı tanımlarken alt sınıfların belirli adımları özelleştirmesine izin verir. Üst sınıf genel akışı kontrol eder, ancak alt sınıflar özel uygulamaları sağlar.

Kendin dene

from template import Template

# Test senaryosu işleyicisi
test_case = input()

if test_case == "basic_test":
    # YAPILACAK: "Test Name" adıyla bir Template nesnesi oluşturun
    # YAPILACAK: Nesne üzerindeki display_info() metodunu çağırın
    pass
elif test_case == "validation_test":
    # YAPILACAK: "Validation Test" adıyla bir Template nesnesi oluşturun
    # YAPILACAK: name özelliğini kullanarak ismi şu formatta yazdırın: "Name: {obj.name}"
    pass
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler