Percursos
/
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. O código que representa o comportamento de um item, ou o comportamento de um processo, pode ser agrupado numa classe. As funções que são atribuídas a uma classe chamam-se methods, por convenção.

<?php

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

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

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

<?php

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

Uma classe instanciada pode referir-se à sua própria instância através da variável especial $this. As classes também podem ter propriedades, que funcionam como variáveis ligadas à instância do objeto da classe. Estas 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, vais simular um sistema informático baseado em janelas. Vais criar algumas janelas que podem ser movidas e redimensionadas. A imagem seguinte ilustra os valores com que vais trabalhar a seguir.

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

1. Define as propriedades da janela do programa

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

<?php

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

2. Define os valores iniciais da janela do programa

Define um construtor para ProgramWindow. Não deve receber quaisquer argumentos, mas durante a execução do construtor define os valores predefinidos das suas propriedades. Deve definir os valores iniciais de y e x como 0. Deve definir a height e a width iniciais para um tamanho de ecrã de 600x800.

<?php

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

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

Define uma nova classe em Size.php para uma classe Size. Deve receber argumentos do 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 as suas próprias propriedades.

<?php 

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

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

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

Define uma nova classe em Position.php para uma classe Position. Deve receber argumentos do 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 as 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 A ligação abre numa nova janela ou separador
PHP Exercism

Estás pronto para começar Sistema de janelas?

Inscreve-te no Exercism para aprenderes e dominares PHP com 11 conceitos122 exercícios, e mentoria humana real, tudo grátis.