Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة المحيط

جزء من قسم البرمجة كائنية التوجه في رحلة 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 عبر الإنترنت