مراجعة - أدوار الموظفين
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 42 من 70.
التحدي
سهللنقم ببناء نظام مكافآت كشوف المرتبات الذي يوضح كيف يمكن لأنواع الموظفين المختلفة مشاركة نفس الواجهة مع حساب المكافآت بشكل مختلف!
ستقوم بإنشاء تسلسل هرمي صغير للموظفين عبر أربعة ملفات:
Employee.lua: الفئة الأساسية (base class) التي تمثل موظفاً عاماً. يجب أن يقوم المنشئ:new(name, salary)بتخزين اسم الموظف وراتبه. قم بتضمين تابع:calculateBonus()الذي يعيد 10% من الراتب (المكافأة الافتراضية للموظفين العاديين)، وتابع:getName()لاسترجاع الاسم.Manager.lua: فئة تابعة ترث من Employee. يعمل المديرون بجد ويتم مكافأتهم—قم بتجاوز (override) التابع:calculateBonus()ليعيد 20% من راتبهم بدلاً من الـ 10% الافتراضية.Intern.lua: فئة تابعة أخرى ترث من Employee. يتلقى المتدربون مكافأة ثابتة قدرها50بغض النظر عن راتبهم—قم بتجاوز:calculateBonus()ليعيد هذا المبلغ دائماً.main.lua: اجمع كل شيء معاً! اقرأ ثلاثة مدخلات لأسماء الموظفين وثلاثة مدخلات لرواتبهم. قم بإنشاء Manager واحد، و Intern واحد، وموظف عادي (Employee) واحد. قم بتخزين الثلاثة في جدول (table)، ثم قم بالمرور عبرهم في حلقة تكرارية واطبع اسم كل شخص متبوعاً بمكافأته المحسوبة.
ستتلقى ستة مدخلات:
- اسم المدير (Manager)
- راتب المدير (Manager)
- اسم المتدرب (Intern)
- راتب المتدرب (Intern)
- اسم الموظف العادي
- راتب الموظف العادي
لكل موظف في مجموعتك (بالترتيب: Manager، ثم Intern، ثم Employee)، اطبع اسمه ومكافأته بهذا التنسيق:
{name}: {bonus}على سبيل المثال، إذا كانت المدخلات هي Alice، و 5000، و Bob، و 2000، و Carol، و 3000، يجب أن يكون المخرج:
Alice: 1000
Bob: 50
Carol: 300لاحظ كيف أن استدعاء :calculateBonus() نفسه ينتج نتائج مختلفة بناءً على نوع كل موظف—هذا هو تعدد الأشكال (polymorphism) أثناء العمل! يحصل المدير على 20% من 5000، ويحصل المتدرب على 50 ثابتة، ويحصل الموظف العادي على 10% من 3000.
جرّب بنفسك
-- main.lua: تجميع كل شيء معاً
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- قراءة المدخلات
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO: إنشاء مدير واحد (Manager)، ومتدرب واحد (Intern)، وموظف عادي واحد (Employee)
-- TODO: تخزين الثلاثة في جدول (بالترتيب: المدير، المتدرب، الموظف)
-- TODO: حلقة تكرارية عبر الجدول وطباعة اسم كل شخص ومكافأته
-- {name}: {bonus} :التنسيق
جميع دروس 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 للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال