مراجعة - مدير المستخدمين
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 68 من 70.
التحدي
سهللنَبْنِ نظامًا لإدارة المستخدمين: تطبيقًا عمليًا قد تجده في العديد من البرامج الواقعية! ستنشئ فئتين تعملان معًا: إحداهما تمثل المستخدمين الفرديين، والأخرى تدير collection منهم بكفاءة.
ستنظّم شفرتك عبر ثلاثة ملفات:
User.lua: أنشئ فئة User تمثل مستخدمًا واحدًا في النظام. لكل مستخدمidوname. ضمّن أسلوب:getInfo()يعيد سلسلة نصية بالتنسيق"ID: {id}, Name: {name}".UserManager.lua: أنشئ فئة manager تتعامل مع collection من المستخدمين. فكّر في كيفية تخزين المستخدمين لإجراء lookup بكفاءة: إن استخدام معرّف المستخدم كمفتاح للجدول يجعل العثور على المستخدمين وإزالتهم أبسط بكثير من البحث عبر list. يحتاج manager إلى::addUser(user): يضيف User object إلى collection:removeUser(id): يزيل مستخدمًا باستخدام معرّفه:findUser(id): يعيد User صاحب المعرّف المطابق، أوnilإذا لم يتم العثور عليه:listUsers(): يطبع info جميع المستخدمين، واحدًا في كل line
main.lua: اجمع everything معًا! أنشئ UserManager، وأضف بعض المستخدمين استنادًا إلى inputs التي تتلقاها، ونفّذ العمليات، ثم اعرض النتائج.
ستتلقى خمسة inputs:
- معرّف المستخدم الأول (رقم)
- اسم المستخدم الأول
- معرّف المستخدم الثاني (رقم)
- اسم المستخدم الثاني
- معرّف المستخدم الذي تريد البحث عنه (رقم)
في ملفك الرئيسي:
- أنشئ UserManager وأضف both المستخدمين
- استدعِ
:listUsers()لطباعة جميع المستخدمين - أزل المستخدم الأول (باستخدام المعرّف الأول)
- اطبع
"After removal:" - استدعِ
:listUsers()again - ابحث عن المستخدم ذي معرّف الإدخال الخامس؛ إذا تم العثور عليه، اطبع info الخاص به؛ وإذا لم يتم العثور عليه، اطبع
"User not found"
على سبيل المثال، إذا كانت inputs هي 101 وAlice و102 وBob و102، فينبغي أن يكون الناتج:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bobإذا كانت inputs هي 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" لأنه لم يعد موجودًا في النظام!
REQUIRED OUTPUT FORMAT:جرّب بنفسك
-- 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: أنشئ مثيلًا من UserManager
-- TODO: أنشئ كائنين User ببيانات الإدخال
-- TODO: أضف كلا المستخدمين إلى المدير
-- TODO: استدعِ listUsers() لطباعة جميع المستخدمين
-- TODO: أزل المستخدم الأول (باستخدام id1)
-- TODO: Print "After removal:"
-- TODO: استدعِ listUsers() مرة أخرى
-- TODO: ابحث عن المستخدم باستخدام searchId
-- If found, print their info; if not found, print "User not found"
جميع دروس البرمجة كائنية التوجه
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 النهائيتدرّب بنفسك: مترجم Lua عبر الإنترنت