المساحة الإجمالية
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 60 من 70.
التحدي
سهللنُضِف ميزةً قويةً إلى 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())
جميع دروس البرمجة كائنية التوجه
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 للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت