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

ملخص - التسلسل الهرمي للأشكال

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

challenge icon

التحدي

سهل

لنقم ببناء هيكل هرمي كامل للأشكال من الصفر! ستقوم بإنشاء فئة أب Shape ترث منها جميع الأشكال، ثم ستبني فئات أبناء Circle و Square، حيث تمتلك كل منها خصائصها الفريدة مع مشاركة الوظائف العامة.

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • Shape.lua: الفئة الأساسية التي سترث منها جميع الأشكال. يجب أن تحتوي على منشئ :new(color) يقوم بتخزين لون الشكل، وتابع :getColor() يقوم بإرجاعه. هذه الخاصية المشتركة تعني أن كل شكل — سواء كان دائرة أو مربعاً — سيكون له لون.
  • Circle.lua: فئة ابن ترث من Shape. يجب أن يستدعي منشئها :new(color, radius) منشئ الأب للتعامل مع اللون، ثم يضيف نصف القطر (radius) كسمة فريدة. قم بتضمين تابع :describe() يطبع تفاصيل الدائرة.
  • Square.lua: فئة ابن أخرى ترث من Shape. يجب أن يستدعي منشئها :new(color, side) أيضاً منشئ الأب، ثم يخزن طول الضلع (side). قم بتضمين تابع :describe() للمربعات أيضاً.
  • main.lua: اجمع كل شيء معاً عن طريق إنشاء مثيلات (instances) لكلا الشكلين وإثبات أنهما يرثان بشكل صحيح من Shape مع الحفاظ على خصائصهما الفريدة.

ستتلقى مدخلين:

  1. بيانات الدائرة: اللون ونصف القطر مفصولين بفاصلة (مثلاً، blue,5)
  2. بيانات المربع: اللون وطول الضلع مفصولين بفاصلة (مثلاً، red,4)

في ملفك الرئيسي، قم بإنشاء Circle و Square بالقيم المعطاة. ثم اطبع ما يلي في أسطر منفصلة:

  1. استدعِ :describe() على الدائرة
  2. استدعِ :describe() على المربع
  3. اطبع لون الدائرة باستخدام :getColor()
  4. اطبع لون المربع باستخدام :getColor()

يجب أن يطبع التابع :describe() الخاص بـ Circle ما يلي:

Circle with radius {radius}

يجب أن يطبع التابع :describe() الخاص بـ Square ما يلي:

Square with side {side}

على سبيل المثال، إذا كانت المدخلات هي blue,5 و red,4، يجب أن يكون المخرج:

Circle with radius 5
Square with side 4
blue
red

يوضح هذا نمط الوراثة الكامل: يرث كلا الشكلين :getColor() من Shape (لم يقوما بتعريفه بأنفسهما مطلقاً)، بينما يمتلك كل منهما سمته الفريدة وتابع :describe() الخاص به!

جرّب بنفسك

-- main.lua: تجميع كل شيء معاً

local Circle = require('Circle')
local Square = require('Square')

-- قراءة المدخلات للدائرة (اللون، نصف القطر)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- قراءة المدخلات للمربع (اللون، الضلع)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: إنشاء كائن (instance) للدائرة باللون ونصف القطر المعطيين

-- TODO: إنشاء كائن (instance) للمربع باللون وطول الضلع المعطيين

-- TODO: استدعاء ()describe: على الدائرة

-- TODO: استدعاء ()describe: على المربع

-- TODO: طباعة لون الدائرة باستخدام ()getColor:

-- TODO: طباعة لون المربع باستخدام ()getColor:

جميع دروس Object Oriented Programming