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

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

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

challenge icon

التحدي

سهل

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

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

  • Shape.lua: فئة Shape الأساسية الخاصة بك (من دون تغيير).
  • Rectangle.lua: فئة Rectangle الخاصة بك مع :getArea() و:getPerimeter().
  • Circle.lua: فئة Circle الخاصة بك مع :getArea() و:getPerimeter().
  • ShapeCollection.lua: وسّع فئة مجموعتك بإضافة طريقة :getTotalArea(). يجب أن تكرّر هذه الطريقة عبر جميع الأشكال المخزّنة، وتستدعي :getArea() على كل واحد منها، وتعيد مجموع جميع المساحات.
  • main.lua: اطلب الوحدات، واقرأ الأبعاد من الإدخال، وأنشئ 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())

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

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