مراجعة - مدير المستخدمين
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 68 من 70.
التحدي
سهللنقم ببناء نظام إدارة مستخدمين—وهو تطبيق عملي ستجده في العديد من البرامج الواقعية! ستقوم بإنشاء فئتين (classes) تعملان معاً: إحداهما تمثل المستخدمين الفرديين، والأخرى تدير مجموعة منهم بكفاءة.
ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:
User.lua: قم بإنشاء فئة User تمثل مستخدماً واحداً في النظام. كل مستخدم لديهidوname. قم بتضمين تابع:getInfo()يعيد سلسلة نصية بتنسيق"ID: {id}, Name: {name}".UserManager.lua: قم ببناء فئة مدير تتعامل مع مجموعة من المستخدمين. فكر في كيفية تخزين المستخدمين للبحث الفعال—استخدام معرف المستخدم (ID) كمفتاح للجدول يجعل العثور على المستخدمين وإزالتهم أسهل بكثير من البحث عبر قائمة. يحتاج المدير الخاص بك إلى::addUser(user)— يضيف كائن User إلى المجموعة:removeUser(id)— يزيل مستخدماً عن طريق معرفه (ID):findUser(id)— يعيد كائن User الذي يطابق المعرف، أوnilإذا لم يتم العثور عليه:listUsers()— يطبع معلومات جميع المستخدمين، كل واحد في سطر
main.lua: اجمع كل شيء معاً! قم بإنشاء UserManager، وأضف بعض المستخدمين بناءً على المدخلات التي تتلقاها، وقم بإجراء العمليات، واعرض النتائج.
ستتلقى خمسة مدخلات:
- معرف المستخدم الأول (رقم)
- اسم المستخدم الأول
- معرف المستخدم الثاني (رقم)
- اسم المستخدم الثاني
- معرف المستخدم المراد البحث عنه (رقم)
في ملفك الرئيسي:
- قم بإنشاء UserManager وأضف كلا المستخدمين
- استدعِ
:listUsers()لطباعة جميع المستخدمين - قم بإزالة المستخدم الأول (باستخدام المعرف الأول)
- اطبع
"After removal:" - استدعِ
:listUsers()مرة أخرى - ابحث عن المستخدم باستخدام معرف المدخل الخامس—إذا تم العثور عليه، اطبع معلوماته؛ وإذا لم يتم العثور عليه، اطبع
"User not found"
على سبيل المثال، إذا كانت المدخلات هي 101، Alice، 102، Bob، و 102، يجب أن يكون الناتج:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bobإذا كانت المدخلات هي 201، Charlie، 202، Diana، و 201، يجب أن يكون الناتج:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundلاحظ في المثال الثاني، بعد إزالة المستخدم 201 (Charlie)، فإن البحث عن ذلك المعرف يعيد "User not found" لأنه لم يعد موجوداً في النظام!
جرّب بنفسك
-- main.lua: تجميع كل شيء معاً
local User = require('User')
local UserManager = require('UserManager')
-- قراءة المدخلات
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: إنشاء نسخة (instance) من UserManager
-- TODO: إنشاء كائنين من User باستخدام بيانات المدخلات
-- TODO: إضافة كلا المستخدمين إلى المدير (manager)
-- TODO: استدعاء listUsers() لطباعة جميع المستخدمين
-- TODO: إزالة المستخدم الأول (باستخدام id1)
-- TODO: طباعة "After removal:"
-- TODO: استدعاء listUsers() مرة أخرى
-- TODO: البحث عن المستخدم باستخدام searchId
-- إذا تم العثور عليه، اطبع معلوماته؛ وإذا لم يتم العثور عليه، اطبع "User not found"
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال9التركيب و Mixins
علاقة "يحتوي على" (Has-A)التفويض (Delegation)Mixins بسيطةتطبيق Mixins متعددةMixins مقابل الوراثةملخص - تجميع الروبوت12التحديات النهائية
مراجعة - نظام المخزونمراجعة - مدير المستخدمينمراجعة - متتبع النقاطاختبار OOP النهائي