المساحة الإجمالية
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 60 من 70.
التحدي
سهللنقم بإضافة ميزة قوية إلى 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
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين10مشروع: مدير الأشكال
إعداد المشروعفئة المستطيل2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال