Menu
CoddyTech

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

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