مسیرها
/
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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.