الاختبار والتكامل
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 61 من 65.
التحدي
متوسطأكمِل النظام بإضافة عمليات الإرجاع، ثم دع الاختبارات تشغّل جميع أجزائه معًا. احتفظ بكل ما كتبته في الخطوات السابقة؛ سيتغير library.gd وuser.gd.
في Library، اكتب return_book(isbn: String, user_id: String) -> String. تحقّق بالترتيب التالي:
- لا يوجد كتاب يحمل ISBN هذا: أعد
Book not found - لا يوجد مستخدم يحمل هذا المعرّف: أعد
User not found - الكتاب متاح، أو أن
borrower_idالخاص به يعود إلى مستخدم آخر: أعدThis book was not borrowed by this user - وإلا، اجعل الكتاب متاحًا مجددًا، واضبط
borrower_idعلى""، واحذف ISBN منborrowed_isbnsالخاص بالمستخدم، وأعدBook returned successfully
في User، اكتب return_all_books(library: Library) -> int. تعيد هذه الدالة كل كتاب استعاره المستخدم عبر library.return_book()، وتعيد عدد الكتب التي أُعيدت. يتلقى المستخدم المكتبة كوسيط ولا يخزّنها، وبذلك لا يشير أي كائنين إلى بعضهما.
يضيف الكود المرفق الأمرين return ISBN|ID وreturn_all ID. بالنسبة إلى هذا الإدخال:
Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book 1984|George Orwell|345678
user U001|Alice
user U002|Bob
borrow 123456|U001
borrow 345678|U001
return 123456|U002
return_all U001
users
statsيكون الناتج:
Book borrowed successfully
Book borrowed successfully
This book was not borrowed by this user
Books returned by Alice: 2
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 0
Total Books: 2
Available Books: 2
Borrowed Books: 0
Total Users: 2
Users with Books: 0ضع الكود في 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]))
"borrow":
print(library.borrow_book(fields[0], fields[1]))
"return":
print(library.return_book(fields[0], fields[1]))
"return_all":
var reader: User = library.find_user(fields[0])
var count: int = reader.return_all_books(library)
print("Books returned by ", reader.user_name, ": ", count)
"search":
var term: String = parts[1] if parts.size() > 1 else ""
var found: Array = library.search_by_title(term)
print("Results for '%s': %d" % [term, found.size()])
for book in found:
print("- ", book.title, " by ", book.author)
"stats":
var stats: Dictionary = library.get_statistics()
print("Total Books: ", stats["total_books"])
print("Available Books: ", stats["available_books"])
print("Borrowed Books: ", stats["borrowed_books"])
print("Total Users: ", stats["total_users"])
print("Users with Books: ", stats["users_with_books"])
"loans":
var reader: User = library.find_user(fields[0])
print(reader.user_name, " has borrowed:")
for isbn in reader.borrowed_isbns:
print("- ", library.find_book(isbn).title)
"holder":
var book: Book = library.find_book(fields[0])
if book.available:
print(book.title, " is on the shelf")
else:
print(book.title, " is borrowed by ", library.find_user(book.borrower_id).user_name)
"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 عبر الإنترنت