quinta-feira, 18 de novembro de 2010

Encapsulation (Encapsulamento)

O encapsulamento é um dos recursos mais interessantes da programação orientada a objetos. Encapsular significa, na programação, esconder os dados contidos nas propriedades de uma classe. Qualquer classe é completamente responsável pelos dados que ela transporta e necessita que os mesmos se mantenham íntegros, ou seja, sem alterações não previstas durando o fluxo da aplicação.


Por exemplo, não é necessário conhecer todo o funcionamento interno de um carro para poder dirigi-lo. Para isso é escondido por baixo da lataria tudo que faz com que o carro funcione, deixando apenas para o usuário o que é realmente necessário para se dirigir. Assim é garantido que o usuário leigo, ou que não saiba completamente do funcionamento do carro faça mexa na peça errada, corte o fio errado ou faça qualquer outra besteira.


1. Public

A palavra chave public informa que a propriedade ou o método são públicos, ou seja, qualquer um pode acessar (desde subclasses como outras classes que estão a instanciando).

2. Private

Já a palavra chave private informa que a propriedade ou método só podem ser acessados internamente na classe. Nem seus filhos podem acessá-lo.

3. Protected

Enquanto isso protected indica que subclasses podem acessar, mas outras classes ou funções não têm essa permissão. Um exemplo de tudo isso junto:






class  Pessoa
{
               private $id;
               protected $nome;
               public function setId( $id )
               {
                    $this->id = $id;
               }
               public function getId()
               {
                    return $this->id;
               }
               public function getNome()
               {
                   return $this->nome;
               }
}

class  PessoaFisica extends Pessoa
{
               public function setId( $id )
               {
                      $this->id = $id;
               }
               public function setNome( $nome )
               {
                  $this->nome = $nome;
               }
}

$pessoa = new Pessoa();
$pessoaFisica = new PessoaFisica();

/**
       * Isto causa um Fatal Error,
       * pois esta proriedade está como private
       */ 
$pessoa->id = 1;
$pessoa->setId(1); // já isto, funciona normalmente
$pessoaJuridica->setId(1); // isto causa outro Fatal Error

/**
       * Isto causa um Fatal Error,
       * pois esta proriedade está como protected
       */ 
$pessoaFisica->nome = 'Ademir Braga';

$pessoaFisica->setNome( 'Ademir Braga' ); // já isto, funciona

Nenhum comentário:

Postar um comentário