دالة المحيط
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 58 من 70.
التحدي
سهلدعنا نوسع مدير الأشكال (Shape Manager) الخاص بنا عن طريق إضافة طريقة :getPerimeter() إلى كل من فئتي Rectangle و Circle. تماماً مثل :getArea()، يحسب كل شكل محيطه بشكل مختلف، لكنهما يتشاركان في نفس اسم الطريقة — وهو مثال مثالي لتعدد الأشكال (polymorphism) قيد التنفيذ.
ستستمر في العمل مع ملفاتك الحالية:
Shape.lua: تظل فئة Shape الأساسية الخاصة بك دون تغيير.Rectangle.lua: أضف طريقة:getPerimeter()التي تعيد محيط المستطيل باستخدام الصيغة 2 × (width + height).Circle.lua: أضف طريقة:getPerimeter()التي تعيد محيط الدائرة باستخدام الصيغة 2 × π × radius. استخدمmath.piلتمثيل π.main.lua: قم باستدعاء كلا وحدتي الأشكال، واقرأ الأبعاد من المدخلات، وأنشئ كائناً واحداً من Rectangle وكائناً واحداً من Circle، ثم اطبع ستة أسطر: اسم المستطيل، ومساحته، ومحيطه، يليه اسم الدائرة، ومساحتها، ومحيطها.
تمتلك كلتا الشكلين الآن واجهة كاملة مع :getName() و :getArea() و :getPerimeter() — وكلها يمكن الوصول إليها من خلال نفس أسماء الطرق على الرغم من اختلاف التنفيذ.
المدخلات: ثلاثة أسطر — العرض (رقم)، والارتفاع (رقم)، ونصف القطر (رقم).
المخرجات: ستة أسطر بالترتيب: اسم المستطيل، مساحة المستطيل، محيط المستطيل، اسم الدائرة، مساحة الدائرة، محيط الدائرة.
جرّب بنفسك
-- استدعاء وحدة المستطيل (Rectangle)
local Rectangle = require('Rectangle')
-- استدعاء وحدة الدائرة (Circle)
local Circle = require('Circle')
-- قراءة العرض والارتفاع من المدخلات
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())
-- إنشاء كائن مستطيل جديد بالأبعاد المعطاة
local rect = Rectangle:new(width, height)
-- إنشاء كائن دائرة جديد بنصف القطر المعطى
local circ = Circle:new(radius)
-- طباعة اسم المستطيل ومساحته ومحيطه
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- طباعة اسم الدائرة ومساحتها ومحيطها
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())
جميع دروس 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 للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال