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