class Buku dan Pengguna
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 57 dari 65.
Tantangan
MudahTambahkan class Book dan User, masing-masing dalam filenya sendiri, lalu buat library menyimpan keduanya. Pertahankan semua yang kamu tulis pada langkah sebelumnya.
Book dalam book.gd:
- Konstruktor menerima
title,authordanisbn(semuanyaString) lalu menyimpannya dalam property dengan nama yang sama. availabledimulai dengan nilaitruedanborrower_iddimulai dengan nilai""._to_string()mengembalikanTITLE by AUTHOR (ISBN: ISBN) - Available, denganNot Availabledi bagian akhir saatavailablebernilaifalse.
User dalam user.gd:
- Konstruktor menerima
user_iddanuser_name, lalu menyimpannya. borrowed_isbnsadalahArray[String]yang dimulai dalam keadaan kosong._to_string()mengembalikanUser: NAME (ID: ID) - Books borrowed: N, denganNsebagai ukuranborrowed_isbns.
Dalam library.gd, ubah books menjadi Array[Book] dan users menjadi Array[User], lalu tambahkan method add_book(book: Book) dan add_user(user: User) untuk menambahkan item ke masing-masing array.
Buku mengingat peminjamnya melalui id pengguna, dan pengguna mengingat buku melalui ISBN-nya. Jika buku menyimpan object User dan pengguna menyimpan object Book, keduanya akan saling mempertahankan keberadaan satu sama lain, dan Godot akan melaporkan keduanya sebagai kebocoran saat program berakhir.
Kode yang disediakan dalam main.gd telah berubah: field kini dipisahkan dengan |. Perintahnya adalah book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (perintah ini menetapkan property buku dan pengguna secara langsung), books dan users (mencetak setiap buku atau pengguna), serta show. Untuk input ini:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showoutput-nya adalah:
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)Tulis kodemu di book.gd, user.gd, dan library.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
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()
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online