Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Book 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, author ve isbn (String türünde) değerlerini alır ve aynı adlı özelliklerde saklar.
  • available başlangıçta true, borrower_id ise başlangıçta "" olur.
  • _to_string(), TITLE by AUTHOR (ISBN: ISBN) - Available döndürür; available değeri false olduğunda en sona Not Available gelir.

User, user.gd dosyasında:

  • Kurucu, user_id ve user_name değerlerini alır ve saklar.
  • borrowed_isbns, başlangıçta boş olan bir Array[String] dizisidir.
  • _to_string(), User: NAME (ID: ID) - Books borrowed: N döndürür; burada N, borrowed_isbns dizisinin 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

Kendi başına pratik yap: Online GDScript derleyicisi