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;
}
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.';
}
}
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.';
}
}
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();
}
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)