Tasarım Desenlerine Giriş
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 45 / 65.
Tasarım deseni, programdan programa tekrarlanan bir sorun için sınıfları düzenlemenin bilinen ve adlandırılmış bir yoludur. Bir kütüphane ya da kopyalanacak kod değildir: hangi nesnelerin var olduğunu, her birinin hangi sorumluluğu üstlendiğini ve birlikte nasıl çalıştıklarını açıklar. Kendi oyununa göre şekillendirerek kodu kendin yazarsın.
Kalıplar geliştiricilere ortak bir dil de sağlar. “Düşmanlar bir fabrikadan gelir” ya da “can çubuğu oyuncuyu gözlemler” demek, bir ekip arkadaşına dosyayı açmadan önce kodun nasıl düzenlendiğini anlatır.
İşte bir tasarım kalıbının çözdüğü bir sorun. Bir seviyeyi başlatmak, üç nesneyle iletişim kurmak anlamına gelir ve seviyeyi başlatan her betik bu satırları tekrarlar:
var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()
music.play("forest.ogg")
level_map.load_map(1)
hud.show_hearts(3)Facade deseni, bu nesnelerin önüne tek bir sınıf koyar ve ona basit bir yöntem verir:
# game_facade.gd
class_name GameFacade
extends RefCounted
var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()
func start_level(number: int) -> void:
music.play("forest.ogg")
level_map.load_map(number)
hud.show_hearts(3)# main.gd
var game := GameFacade.new()
game.start_level(1)Music: playing forest.ogg
Map: level 1 loaded
HUD: hearts 3Programın geri kalanı start_level() işlevini çağırır ve başlatılan bölüm değiştiğinde tek bir dosyayı düzenlersin.
Desen kalıpları, çözdükleri probleme göre gruplandırılır:
- Yaratımsal kalıplar, nesnelerin nasıl oluşturulacağını belirler: Singleton, Factory.
- Yapısal kalıplar, nesneleri daha büyük yapılar hâlinde birleştirir: Facade, Adapter, Decorator, Composite.
- Davranışsal kalıplar, nesnelerin birlikte nasıl çalışacağını düzenler: Observer, Strategy, Command, Template Method, State.
Bu bölüm ve sonraki bölüm bu kalıpları ele alıyor. Her biri, zaten bildiklerinden oluşturulmuştur: kendi dosyalarındaki sınıflar, kalıtım, çok biçimlilik, bileşim ve sinyaller.
Görev
KolayBir oyun, önceden yazılmış üç nesne aracılığıyla seviyeleri başlatır ve sonlandırır: MusicPlayer (music_player.gd), LevelMap (level_map.gd) ve Hud (hud.gd). Bunların önüne bir cephe olan GameFacade yaz:
- Üye değişkenlerinde bir
MusicPlayer, birLevelMapve birHudoluşturur. start_level(number, hearts),level_N.oggparçasını (N seviye numarasıdır) veya numara5'in katı olduğundaboss.oggparçasını çalar; ardından o seviyenin haritasını yükler ve son olarak kalpleri gösterir.quit_level(), HUD'yi gizler ve ardından müziği durdurur.
Verilen kod, kaç komutun geleceğini okur ve ardından her satırda bir komut okur: start NUMBER HEARTS veya quit. start 5 2 ve quit için çıktı şöyledir:
Music: playing boss.ogg
Map: level 5 loaded
HUD: hearts 2
HUD: hidden
Music: stoppedKodunu game_facade.gd dosyasına yaz. main.gd, verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var game := GameFacade.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "start":
game.start_level(int(parts[1]), int(parts[2]))
elif parts[0] == "quit":
game.quit_level()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt Sistemi3Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz KılmaKalıtım Zincirleriis ile Tür KontrolleriTekrar: Çalışan Hiyerarşisi9Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online GDScript derleyicisi