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

ملخص - حاسبة الأشكال

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 32 من 91.

challenge icon

التحدي

سهل

لنَبْنِ حاسبة أشكال توضّح قوة الواجهات في إنشاء كود مرن وقابل للتوسّع. ستنشئ واجهة Calculable تحدد عقدًا لحساب المساحات، ثم تنفّذها في فئات أشكال مختلفة.

ستنظّم الكود عبر أربعة ملفات:

  • Calculable.php: Define واجهة Calculable مع توقيع method واحد: calculateArea(). يضمن هذا العقد أن أي شكل قابل للحساب يمكنه حساب مساحته.
  • Rectangle.php: Create فئة Rectangle التي implements Calculable. Include ملف الواجهة. يجب أن تحتوي الفئة على خاصيتي $width و$height من النوع private، ويتم تعيينهما عبر constructor. نفّذ calculateArea() لإرجاع المساحة (العرض multiplied في الارتفاع).
  • Circle.php: Create فئة Circle التي implements أيضًا Calculable. Include ملف الواجهة. يجب أن تحتوي الفئة على خاصية $radius من النوع private، ويتم تعيينها عبر constructor. نفّذ calculateArea() لإرجاع المساحة باستخدام formula pi() * radius * radius.
  • main.php: Include كلا ملفي الشكلين. Create function تُسمى displayArea تقبل parameter من النوع Calculable واسم شكل (string). يجب أن تطبع function: "[name] area: [area]"، حيث تُقرَّب المساحة إلى منزلتين عشريتين باستخدام number_format().

ستتلقى أربعة inputs: عرض المستطيل، وارتفاع المستطيل، ونصف قطر الدائرة، واسم شكل للدائرة. Create كائن Rectangle باستخدام العرض والارتفاع (مع تحويلهما إلى أعداد عشرية)، وCircle باستخدام نصف القطر (مع تحويله إلى عدد عشري). Call على displayArea() مرتين: أولًا مع المستطيل باستخدام "Rectangle" كاسم، ثم مع الدائرة باستخدام اسم الشكل provided. Print كل نتيجة في سطر مستقل.

تعمل function displayArea() مع أي شكل implements Calculable. ولا تحتاج إلى معرفة ما إذا كانت تحسب مساحة مستطيل أو دائرة أو أي شكل مستقبلي قد تضيفه. هذه هي روعة البرمجة باستخدام interface!

جرّب بنفسك

<?php
// تضمين ملفات الأشكال
require_once 'Rectangle.php';
require_once 'Circle.php';

// TODO: أنشئ دالة تسمى displayArea
// يجب أن تقبل معامل Calculable واسم شكل (string)
// اطبع: "[name] area: [area]" حيث تُقرَّب المساحة إلى منزلتين عشريتين باستخدام number_format()

// قراءة المدخلات
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));

// TODO: أنشئ Rectangle بالعرض والارتفاع

// TODO: أنشئ Circle بنصف القطر

// TODO: استدعِ displayArea() مع المستطيل باستخدام "Rectangle" كاسم

// TODO: استدعِ displayArea() مع الدائرة باستخدام اسم الشكل المقدم
?>

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

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