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

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

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

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

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