فئتا الكتب والمستخدمين
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 57 من 65.
التحدي
سهلأضف الصنفين Book وUser، كلًّا منهما في ملف خاص به، واجعل المكتبة تخزّنهما. احتفظ بكل ما كتبته في الخطوة السابقة.
Book في book.gd:
- يأخذ المُنشئ
titleوauthorوisbn(وكلها من النوعString) ويخزّنها في خصائص تحمل الأسماء نفسها. - تبدأ قيمة
availableبـtrue، وتبدأ قيمةborrower_idبـ"". - تعيد
_to_string()القيمةTITLE by AUTHOR (ISBN: ISBN) - Available، مع وضعNot Availableفي النهاية عندما تكون قيمةavailableهيfalse.
User في user.gd:
- يأخذ المُنشئ
user_idوuser_nameويخزّنهما. - تكون
borrowed_isbnsمصفوفة من النوعArray[String]تبدأ فارغة. - تعيد
_to_string()القيمةUser: NAME (ID: ID) - Books borrowed: N، حيث تشيرNإلى حجمborrowed_isbns.
في library.gd، غيّر books إلى Array[Book] وusers إلى Array[User]، وأضف الدالتين add_book(book: Book) وadd_user(user: User) اللتين تضيفان العناصر إليهما.
يتذكر الكتاب المستعير باستخدام معرّف المستخدم، ويتذكر المستخدم الكتب باستخدام رقم ISBN الخاص بها. إذا خزّن الكتاب كائن User وخزّن المستخدم كائن Book، فسيُبقي كلٌّ منهما الآخر حيًّا، وسيبلّغ Godot عن تسرّبهما عند انتهاء البرنامج.
تغيّر الرمز البرمجي المرفق في main.gd: إذ أصبحت الحقول مفصولة بالرمز |. الأوامر هي book TITLE|AUTHOR|ISBN وuser ID|NAME وlend ISBN|ID (يضبط خصائص الكتاب والمستخدم مباشرةً) وbooks وusers (لطباعة كل كتاب أو مستخدم) وshow. بالنسبة إلى هذا الإدخال:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showيكون الناتج:
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)ضع الرمز البرمجي في book.gd وuser.gd وlibrary.gd. يحتوي main.gd على رمز الإدخال/الإخراج المرفق، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# كود الإدخال/الإخراج المقدَّم: اتركه كما هو
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()
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصناف11المشروع: إدارة المكتبة
نظرة عامة على المشروعفئتا الكتب والمستخدمينتدرّب بنفسك: مترجم GDScript عبر الإنترنت