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

المساحة الإجمالية

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

challenge icon

التحدي

سهل

لنقم بإضافة ميزة قوية إلى ShapeCollection الخاصة بك—القدرة على حساب المساحة الإجمالية لجميع الأشكال التي تحتوي عليها. هذا هو المكان الذي يتألق فيه تعدد الأشكال (polymorphism) حقًا: يمكن لمجموعتك استدعاء :getArea() على أي شكل دون معرفة ما إذا كان مستطيلاً أو دائرة.

ستستمر في البناء على ملفات مشروعك الحالية:

  • Shape.lua: فئة Shape الأساسية الخاصة بك (بدون تغيير).
  • Rectangle.lua: فئة Rectangle الخاصة بك مع :getArea() و :getPerimeter().
  • Circle.lua: فئة Circle الخاصة بك مع :getArea() و :getPerimeter().
  • ShapeCollection.lua: قم بتوسيع فئة المجموعة الخاصة بك عن طريق إضافة طريقة :getTotalArea(). يجب أن تمر هذه الطريقة عبر جميع الأشكال المخزنة، وتستدعي :getArea() لكل منها، وتعيد مجموع كل المساحات.
  • main.lua: قم باستيراد الوحدات (modules) الخاصة بك، واقرأ الأبعاد من المدخلات، وأنشئ Rectangle و Circle، وأضفهما معًا إلى ShapeCollection، ثم اطبع المساحة الإجمالية لجميع الأشكال في المجموعة.

يكمن جمال هذا النهج في أن :getTotalArea() لا يحتاج إلى منطق منفصل للمستطيلات والدوائر—فهو ببساطة يثق في أن كل شكل في المجموعة لديه طريقة :getArea(). يمكنك إضافة مثلثات أو أشكال سداسية أو أي شكل آخر لاحقًا، وسيعمل حساب المساحة الإجمالية دون تعديل.

المدخلات: ثلاثة أسطر—العرض (رقم)، والارتفاع (رقم)، ونصف القطر (رقم).

المخرجات: سطر واحد يحتوي على المساحة الإجمالية لجميع الأشكال في المجموعة.

جرّب بنفسك

-- استدعاء وحدة Rectangle
local Rectangle = require('Rectangle')

-- استدعاء وحدة Circle
local Circle = require('Circle')

-- استدعاء وحدة ShapeCollection
local ShapeCollection = require('ShapeCollection')

-- قراءة العرض والارتفاع من المدخلات
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)

-- إنشاء ShapeCollection جديد
local collection = ShapeCollection:new()

-- إضافة كلا الشكلين إلى المجموعة
collection:addShape(rect)
collection:addShape(circ)

-- طباعة المساحة الإجمالية لجميع الأشكال في المجموعة
print(collection:getTotalArea())

جميع دروس Object Oriented Programming