Menu
CoddyTech

دالة المحيط

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 58 من 70.

challenge icon

التحدي

سهل

لنوسّع مدير 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())

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Lua عبر الإنترنت