المسارات
/
PHP
PHP
/
التمارين
/
نظام النوافذ
نظام النوافذ

نظام النوافذ

تمرين تعلّمي

مقدمة

الأصناف

الأصناف وحدة من وحدات تنظيم الكود في PHP. يمكن تجميع الكود الذي يمثّل سلوك عنصر ما أو سلوك عملية ما في صنف واحد. وبحكم الاصطلاح، تُسمّى الدوال التي تُسنَد إلى صنف methods.

<?php

class Door
{
    function lock()
    {
        // ...
    }

    function unlock()
    {
        // ...
    }
}

نُنشئ نسخة من الصنف بالكلمة المفتاحية new، وهذا يخصّص ذاكرة لنسخة الصنف ويستدعي طريقة البناء الخاصة بالصنف. ويمكن إسناد الأصناف المُنشأة إلى متغير. ولاستدعاء طُرق نسخة صنف ما، يمكننا استخدام عامل الوصول ->.

<?php

$a_door = new Door();
$a_door->lock();
$a_door->unlock();

يمكن للصنف المُنشأ أن يشير إلى نسخته الخاصة باستخدام المتغير الخاص $this. وقد تمتلك الأصناف أيضًا خصائص، وهي تعمل بمثابة متغيرات مرتبطة بنسخة كائن الصنف. ويمكن الإشارة إلى هذه الخصائص داخليًا أو خارجيًا.

<?php

class Car
{
    public $color;

    function __construct($color)
    {
        $this->color = $color;
    }

    function getColor()
    {
        return $this->color;
    }
}

$a_car = new Car("red");
$a_car->color; // => "red" by accessing the property
$a_car->getColor(); // => "red" by invoking the instance method

التعليمات

في هذا التمرين، ستُحاكي نظام حاسوب قائمًا على النوافذ. ستُنشئ بعض النوافذ التي يمكن نقلها وتغيير حجمها. توضّح الصورة التالية القيم التي ستعمل عليها أدناه.

 ╔════════════════════════════════════════════════════════════╗
 ║                                                            ║
 ║        position::$y,_                                      ║
 ║        position::$x  \                                     ║
 ║                       \<---- size::$width ---->            ║
 ║                 ^      *──────────────────────┐            ║
 ║                 |      │        title         │            ║
 ║                 |      ├──────────────────────┤            ║
 ║                 |      │                      │            ║
 ║          size::$height │                      │            ║
 ║                 |      │       contents       │            ║
 ║                 |      │                      │            ║
 ║                 |      │                      │            ║
 ║                 v      └──────────────────────┘            ║
 ║                                                            ║
 ║                                                            ║
 ╚════════════════════════════════════════════════════════════╝

1. عرّف خصائص نافذة البرنامج

باستخدام هيكل الصنف المقدَّم، عرّف الخصائص الخاصة بقيم y وx وheight وwidth.

<?php

$window = new ProgramWindow();
$window->y; // => null
$window->x; // => null
$window->height; // => null
$window->width; // => null

2. عرّف القيم الأولية لنافذة البرنامج

عرّف دالة بناء لـ ProgramWindow. يجب ألا تأخذ أي وسائط، لكن أثناء تنفيذ دالة البناء عيّن القيم الافتراضية لخصائصها. يجب أن تعيّن القيم الأولية لـ y وx إلى 0. يجب أن تعيّن height وwidth الأوليين إلى حجم شاشة 600x800.

<?php

$window = new ProgramWindow();
$window->y; // => 0 
$window->x; // => 0
$window->height; // => 600
$window->width; // => 800

3. عرّف دالة لتغيير حجم النافذة

عرّف صنفًا جديدًا في Size.php لصنف Size. يجب أن تأخذ وسائط لدالة البناء لتعيين خاصيتي height وwidth. بالإضافة إلى ذلك، يحتاج ProgramWindow إلى دالة لتغيير الحجم، تستقبل نسخة كائن Size وتحدّث خصائصه الخاصة.

<?php 

$window = new ProgramWindow();
$size = new Size(764, 1080);
$window->resize($size)

$window->height;
// => 764
$window->width;
// => 1080

4. عرّف دالة لنقل النافذة

عرّف صنفًا جديدًا في Position.php لصنف Position. يجب أن تأخذ وسائط لدالة البناء لتعيين خاصيتي y وx. بالإضافة إلى ذلك، يحتاج ProgramWindow إلى دالة للنقل، تستقبل نسخة كائن Position وتحدّث خصائصه الخاصة.

<?php 

$window = new ProgramWindow();
$position = new Position(80, 313);
$window->move($position)

$window->y;
// => 80
$window->x;
// => 313
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
PHP Exercism

مستعد لبدء نظام النوافذ؟

سجّل في Exercism لتتعلّم وتتقن PHP عبر 11 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.