Trilhas
/
PHP
PHP
/
Exercícios
/
Sistema de janelas
Sistema de janelas

Sistema de janelas

Exercício de aprendizagem

Introdução

Classes

As classes são uma unidade de organização de código em PHP. Código que representa o comportamento de um item ou de um processo pode ser agrupado em uma classe. As funções atribuídas a uma classe são chamadas de methods por convenção.

<?php

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

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

As classes são instanciadas com a palavra-chave new. Isso aloca memória para a instância da classe e chama o método construtor dela. Uma classe instanciada pode ser atribuída a uma variável. Para invocar os métodos de uma instância de classe, podemos usar o operador de acesso ->.

<?php

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

Uma classe instanciada pode referenciar a própria instância usando a variável especial $this. As classes também podem ter propriedades, que funcionam como variáveis ligadas à instância do objeto da classe. Essas propriedades podem ser referenciadas interna ou externamente.

<?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

Instruções

Neste exercício, você vai simular um sistema de computador baseado em janelas. Você vai criar algumas janelas que podem ser movidas e redimensionadas. A imagem a seguir representa os valores com que você vai trabalhar abaixo.

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

1. Defina as propriedades da janela do programa

Usando a estrutura de classe fornecida, defina as propriedades para os valores de y, x, height e width.

<?php

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

2. Defina os valores iniciais da janela do programa

Defina uma função construtora para ProgramWindow. Ela não deve receber nenhum argumento, mas durante a execução do construtor defina os valores padrão de suas propriedades. Ela deve definir os valores iniciais de y e x como 0. Ela deve definir height e width iniciais para um tamanho de tela de 600x800.

<?php

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

3. Defina uma função para redimensionar a janela

Defina uma nova classe em Size.php para uma classe Size. Ela deve receber argumentos de construtor para definir as propriedades height e width. Além disso, ProgramWindow precisa de uma função de redimensionamento, que recebe a instância do objeto Size e atualiza suas próprias propriedades.

<?php 

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

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

4. Defina uma função para mover a janela

Defina uma nova classe em Position.php para uma classe Position. Ela deve receber argumentos de construtor para definir as propriedades y e x. Além disso, ProgramWindow precisa de uma função de movimento, que recebe a instância do objeto Position e atualiza suas próprias propriedades.

<?php 

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

$window->y;
// => 80
$window->x;
// => 313
Editar via GitHub O link abre em uma nova janela ou aba
PHP Exercism

Tudo pronto para começar Sistema de janelas?

Crie sua conta no Exercism para aprender e dominar PHP com 11 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.