DEV Community

Raphael da Silva
Raphael da Silva

Posted on • Edited on

POO - Relacionamentos e interfaces (de objetos)

Imagine que alguém quer ter um amigo e deseja que esse amigo seja verdadeiro. Para isso, um amigo deve se comportar de certa maneira, pois para ser um amigo ele deve fazer o seguinte:

  • Confiar

Ou seja, para ser o amigo esperado, ele deve implementar a seguinte interface e fazer as seguintes ações (operações):

<?php

/**
 *
 * @author Raphael da Silva
 *
 */
interface Amigo
{

    public function confiar(): void;

}
Enter fullscreen mode Exit fullscreen mode

Agora uma pessoa mais introvertida pode implementar essa interface fazendo as ações (a.k.a operações) do seu jeito (de acordo com a sua implementação):

<?php

/**
 *
 * @author Raphael da Silva
 *
 */
class PessoaIntrovertida implements Amigo
{

    public function confiar(): void
    {

        echo 'Estabelece um vínculo de confiança silenciosa.';

    }

}
Enter fullscreen mode Exit fullscreen mode

Além da pessoa mais introvertida, uma pessoa extrovertida também pode implementar a interface e, com isso, ser um amigo também:

<?php

/**
 *
 * @author Raphael da Silva
 *
 */
class PessoaExtrovertida implements Amigo
{

    public function confiar(): void
    {

        echo 'Estabelece um vínculo de confiança bem explícido.';

    }

}
Enter fullscreen mode Exit fullscreen mode

Para a pessoa que quer o amigo que atenda a interface Amigo é esperado alguém que se comporte dessa forma como a interface representa através de suas operações. Segue a classe que representa a(o) quem vai ter o amigo:

<?php

/**
 *
 * @author Raphael da Silva
 *
 */
class PessoaQueQuerUmAmigo
{

    public function __construct(
        private Amigo $amigo
    ){}

    public function estabelezerAmize()
    {

        $this->amigo->confiar();

    } 
Enter fullscreen mode Exit fullscreen mode

Ter um amigo é algo que expressa uma relação de composição (e injeção de dependência), pois a classe PessoaQueQuerUmAmigo tem um objeto do tipo da interface Amigo passada como parâmetro no seu construtor.

No uso de interfaces na comunicação entre objetos tudo gira em torno de ação, confiança e expectiva, assim como acontece nas relação humanas.

Top comments (0)