فئة الدائرة
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 57 من 70.
التحدي
سهلدعنا نواصل بناء مدير الأشكال (Shape Manager) الخاص بنا عن طريق إضافة فئة Circle إلى جانب فئة Rectangle التي أنشأتها في الدرس السابق.
ستعمل مع أربعة ملفات للحفاظ على تنظيم أشكالك:
Shape.lua: فئة Shape الأساسية الخاصة بك مع:new(name)و:getName().Rectangle.lua: فئة Rectangle الخاصة بك من التحدي السابق مع:getArea().Circle.lua: قم بإنشاء فئة Circle ترث من Shape. يجب أن يقبل المنشئ (constructor) قيمةradius، ويستدعي منشئ الفئة الأب بالاسم"Circle"، ويخزن نصف القطر (radius). أضف طريقة:getArea()التي تحسب مساحة الدائرة باستخدام الصيغة πr². استخدمmath.piلقيمة π.main.lua: قم باستدعاء كل من وحدات Rectangle و Circle. اقرأ ثلاث قيم من المدخلات: عرض المستطيل، وطول المستطيل، ونصف قطر الدائرة. أنشئ نسخة واحدة من كل شكل واطبع أربعة أسطر—اسم المستطيل، ومساحة المستطيل، واسم الدائرة، ومساحة الدائرة.
يتشارك كلا الشكلين الآن في نفس الواجهة من خلال الوراثة—لكل منهما طريقة :getName() من Shape وتطبيق :getArea() الخاص به. ستصبح هذه الواجهة المشتركة مفيدة في الدروس القادمة.
المدخلات: ثلاثة أسطر—العرض (رقم)، والطول (رقم)، ونصف القطر (رقم).
المخرجات: أربعة أسطر—اسم المستطيل، مساحة المستطيل، اسم الدائرة، مساحة الدائرة.
جرّب بنفسك
-- استدعاء وحدة Rectangle
local Rectangle = require('Rectangle')
-- استدعاء وحدة Circle
-- TODO: استدعاء وحدة Circle هنا
-- قراءة width و height من المدخلات
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: قراءة radius من المدخلات
-- إنشاء مثيل (instance) جديد من Rectangle بالأبعاد المعطاة
local rect = Rectangle:new(width, height)
-- TODO: إنشاء مثيل (instance) جديد من Circle بنصف القطر المعطى
-- طباعة اسم ومساحة المستطيل
print(rect:getName())
print(rect:getArea())
-- TODO: طباعة اسم ومساحة الدائرة
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين10مشروع: مدير الأشكال
إعداد المشروعفئة المستطيل2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال