#ifndef FORMA_H
#define FORMA_H

#include "quadro.H"

/** Representa o conceito de forma como algo que tem uma posição, que se pode
    mover, e que se sabe desenhar num quadro. */
class Forma {
public:
    /// Constrói uma forma dada uma posição.
    Forma(Posicao const& posicao);

    /** Destrutor virtual.  Garante que os destrutores das classes derivadas
        são invocados mesmo através dum ponteiro para a classe Forma. */
    virtual ~Forma() = 0;

    /// Devolve a posição da forma.
    Posicao posicao() const;

    /// Desenha a forma num quadro.
    virtual void desenhaEm(Quadro& quadro) const = 0;

    /// Desloca a forma para nova posição.
    virtual void movePara(Posicao const& nova_posicao);

private:
    // A posição da forma (um ponto particular, como um centro ou canto):
    Posicao posicao_;
};

#include "forma_impl.H"

#endif // FORMA_H