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

دالة المحيط

جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 58 من 70.

challenge icon

التحدي

سهل

دعنا نوسع مدير الأشكال (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