Kitap ve Kullanıcı Sınıfları
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 57 / 65.
Görev
KolayBook ve User sınıflarını, her biri kendi dosyasında olacak şekilde ekle ve kütüphanenin bunları saklamasını sağla. Önceki adımda yazdığın her şeyi koru.
Book, book.gd dosyasında:
- Kurucu,
title,authorveisbn(Stringtüründe) değerlerini alır ve aynı adlı özelliklerde saklar. availablebaşlangıçtatrue,borrower_idise başlangıçta""olur._to_string(),TITLE by AUTHOR (ISBN: ISBN) - Availabledöndürür;availabledeğerifalseolduğunda en sonaNot Availablegelir.
User, user.gd dosyasında:
- Kurucu,
user_idveuser_namedeğerlerini alır ve saklar. borrowed_isbns, başlangıçta boş olan birArray[String]dizisidir._to_string(),User: NAME (ID: ID) - Books borrowed: Ndöndürür; buradaN,borrowed_isbnsdizisinin boyutudur.
library.gd dosyasında books'u Array[Book], users'ı Array[User] olarak değiştir ve bu dizilere ekleme yapan add_book(book: Book) ve add_user(user: User) yöntemlerini ekle.
Bir kitap, ödünç alan kişiyi kullanıcının kimliğiyle hatırlar; bir kullanıcı ise kitapları ISBN'leriyle hatırlar. Kitap User nesnesini, kullanıcı da Book nesnesini saklasaydı, ikisi de birbirlerini bellekte tutar ve program sona erdiğinde Godot bunların bellek sızıntısına yol açtığını bildirirdi.
main.gd dosyasındaki sağlanan kod değişti: alanlar artık | ile ayrılıyor. Komutlar şunlardır: book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (kitabın ve kullanıcının özelliklerini doğrudan ayarlar), books ve users (her kitabı veya kullanıcıyı yazdırır) ve show. Bu girdi için:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showçıktı şöyledir:
Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)Kodunu book.gd, user.gd ve library.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var library := Library.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"book":
library.add_book(Book.new(fields[0], fields[1], fields[2]))
"user":
library.add_user(User.new(fields[0], fields[1]))
"lend":
for book in library.books:
if book.isbn == fields[0]:
book.available = false
book.borrower_id = fields[1]
for user in library.users:
if user.user_id == fields[1]:
user.borrowed_isbns.append(fields[0])
"books":
for book in library.books:
print(book)
"users":
for user in library.users:
print(user)
"show":
print(library)
line = OS.read_string_from_stdin()
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 Sistemi8İleri OOP Kavramları
Composition ve Inheritance Karşılaştırmasıİç SınıflarBileşen Olarak DüğümlerRefCounted ve Node KarşılaştırmasıSınıflarda Enum’lar11Proje: Kütüphane Yönetimi
Projeye Genel BakışKitap ve Kullanıcı SınıflarıKendi başına pratik yap: Online GDScript derleyicisi