POO - 03 Orientação a Objetos - O que é Herança, Visibilidades e encapsulamento
Vamos de mais PHP e programação orientada à objetos. Agora vamos entender os termos Herança, Visibilidade e Encapsulamento.
Visibilidade - é a forma como o atributo pode ser acessado e visualizado. Temos 3 tipos de visibilidade que podem ser trabalhadas nos atributos: Public, Private, e Protected.
public - aqui qualquer arquivo ou classe tem acesso a ver e alterar
private - somente a própria classe tem acesso ou visibilidade a essa propriedade, o acesso a essa propriedade só pode ser feito por meio de métodos..
protected - é como uma mistura da visibilidade public e private, de dentro da classe ele é acessado como o public pelos métodos, de outros objetos essa propriedade não poderá ser acessada diretamente o que faz essa propriedade assumir característica de uma visibilidade private quando acessado de outra classe que a herde.
Encapsulamento - é a possibilidade de visualizar e alterar informações.O aluno pode ver sua nota mas não pode digita-la para altera-la no sistema. Encapsular é uma forma de proteger as informações que não podem ser manipuladas por todos que acessem a mesma. Já que o aluno pode apenas visualizar a sua nota e não pode altera-la, não posso deixar essa informação dentro de um atributo declarado como public, pois o public permite que seja passado um novo valor facilmente por um usuário mal intencionado por exemplo.
Herança - é a característica de se poder passar propriedades de uma classe para outra. Na prática saberemos que uma classe carrega heranças de outras através da palavra chave extends.
Fica assim:
class nome_da_classe_que_recebe_a_herança extends nome_da_classe_pai {
Herança - é a característica de se poder passar propriedades de uma classe para outra. Na prática saberemos que uma classe carrega heranças de outras através da palavra chave extends.
Fica assim:
class nome_da_classe_que_recebe_a_herança extends nome_da_classe_pai {
Práticas e analise da classe MediaAluno() :
Essa analise tem como objetivo exibir na prática e identificar todos os termos vistos até o momento para um melhor entendimento dos mesmos e também para ver como todos esses termos se fazem necessário para um bom dialogo entre membros de uma equipe de desenvolvimento.
OBS: Aqui todos os comentários de código serão colocados com // no inicio do mesmo ou estando entre os símbolos de barra asterisco /* comentário */
Os textos em vermelho são apenas explicativos para fazer a prática não copiar os textos em vermelho ou comente os mesmos colocando // ao inicio do mesmo. Exemplo //esse é um atributo
arquivo MediaAluno.class.php essa classe é a classe pai (classe pai é uma classe que sede suas características e propriedades para outra classe através de herança).
arquivo MediaAluno.class.php essa classe é a classe pai (classe pai é uma classe que sede suas características e propriedades para outra classe através de herança).
<?php
// declarando a classe, inicio da classe
class MediaAluno{
private $nome; //esse é um atributo com visibilidade public
protected $turma; //esse é um atributo com visibilidade protecte
public $nota1;
public $nota2;
private $media; // esse é um atributo com visibilidade private
/*o valor do atributo $media não pode ser alterado por um usuario, só pode ser alterado por um método!*/
public function CalcularMedia($a, $b) {
//esse é o inicio do método CalcularMedia
$this->nota1 = $a;
//o $this acessa elementos dessa classe
$this->nota2 = $b;
$this->media = ($this->nota1 + $this->nota2)/2;
return $this->media;
}// fim do método CalcularMedia()
}
// final da classe
// fim do código
?>
Ótimo, agora vamos iniciar nossos primeiros testes:
TESTE 1:
$teste1 = new MediaAluno(); // instanciei a classe
$teste1->nota1 = 7; // atribui valor em $nota1
echo $teste1->nota1; // exibe o atributo $nota1
Salve e execute o arquivo no localhost e vera o seguinte resultado: 7
Então continuando o teste faça:
$teste1-> turma = "5A"; //atribui o valor em turma
echo $teste1->turma; // exibe o valor de turma
No teste acima vai dar erro na linha do $teste1-> turma = "5A"; isso porque o atributo $turma foi definido como protected, tente apagar essas duas ultimas linhas e atribuir um valor para a propriedade nome, e também dará erro por ser um elemento privado (private).
Como atribuir um valor para a propriedade nome e turma então? Vamos com mais um teste:
Agora nosso arquivo vai ficar assim:
<?php
class MediaAluno{
private $nome;
protected $turma;
public $nota1;
public $nota2;
private $media;
public function CalcularMedia($a, $b) {
//esse é o inicio do método CalcularMedia
$this->nota1 = $a;
//o $this acessa elementos dessa classe
$this->nota2 = $b;
$this->media = ($this->nota1 + $this->nota2)/2;
return $this->media;
}// fim do método CalcularMedia()
// agora teremos mais um método
public function testar($a,$b){
$this->nome = $a; // valor passado pelo parâmetro do método ($a)
$this->turma = $b;
echo "O aluno/a eh:".$this->nome;// exibe o $nome
echo"<br>"; // apenas uma quebra de linha
echo "a turma eh: ".$this->turma;
}
}
// final da classe
$teste1 = new MediaAluno();
$teste1->nota1 = 7;
echo "<br>";
echo $teste1->nota1;
echo "<br>";
$teste1->testar('Laura', '4B'); // passa os valores por parâmetro
// os valores estão entre aspas pois é texto, separados por virgula
// Laura = $a e 4B = $b
//echo $teste1->turma;
// fim do código
?>
Agora basta salvar e executar o código no localhost e veremos que tudo irá funcionar normalmente.
TESTE 2:
Crie um arquivo FilhaDoMedia.class.php e escreva o seguinte código:
<?php
include "MediaAluno.class.php"; // inclui o arquivo
class VerMedia extends MediaAluno {
/* note no class temos um extends então o VerMedia herda as propriedades de MediaAluno (classe do arquivo MediaAluno.class.php)
*/
public function VA() {
//método VA
$teste2 = new MediaAluno(); //instanciar a classe MediaAluno
echo "a media eh:" . $teste1->CalcularMedia(10, 6);
// chamar o método CalcularMedia do arquivo MediaAluno.class.php
$teste2->turma = "Turma 1C"; // passa o valor para a turma
echo "<br>";
echo $teste2->turma; // exibe a turma
echo '<br>';
}
}
$t = new VerMedia();
$t->VA();
?>
Salve e execute o arquivo FilhaDoMedia.class.php no localhost
Agora vamos passar um valor para o $nome, assim:
Basta acrescentar a linha abaixo dentro do método VA() abaixo do echo "<br>";
$teste2->nome = "Rita";
echo $teste2->nome;
Salve e execute o arquivo no localhost, e então... Deu erro né. Pois é então o Private só pode ser acessado via método e dentro do próprio arquivo, e o protected já pode ser trabalhado por método fora e dentro do seu arquivo.
Pois então agora sim chegamos ao fim desse post, espero ter ajudado e até o próximo post!
// declarando a classe, inicio da classe
class MediaAluno{
private $nome; //esse é um atributo com visibilidade public
protected $turma; //esse é um atributo com visibilidade protecte
public $nota1;
public $nota2;
private $media; // esse é um atributo com visibilidade private
/*o valor do atributo $media não pode ser alterado por um usuario, só pode ser alterado por um método!*/
public function CalcularMedia($a, $b) {
//esse é o inicio do método CalcularMedia
$this->nota1 = $a;
//o $this acessa elementos dessa classe
$this->nota2 = $b;
$this->media = ($this->nota1 + $this->nota2)/2;
return $this->media;
}// fim do método CalcularMedia()
}
// final da classe
// fim do código
?>
Ótimo, agora vamos iniciar nossos primeiros testes:
TESTE 1:
$teste1 = new MediaAluno(); // instanciei a classe
$teste1->nota1 = 7; // atribui valor em $nota1
echo $teste1->nota1; // exibe o atributo $nota1
Salve e execute o arquivo no localhost e vera o seguinte resultado: 7
Então continuando o teste faça:
$teste1-> turma = "5A"; //atribui o valor em turma
echo $teste1->turma; // exibe o valor de turma
No teste acima vai dar erro na linha do $teste1-> turma = "5A"; isso porque o atributo $turma foi definido como protected, tente apagar essas duas ultimas linhas e atribuir um valor para a propriedade nome, e também dará erro por ser um elemento privado (private).
Como atribuir um valor para a propriedade nome e turma então? Vamos com mais um teste:
Agora nosso arquivo vai ficar assim:
<?php
class MediaAluno{
private $nome;
protected $turma;
public $nota1;
public $nota2;
private $media;
public function CalcularMedia($a, $b) {
//esse é o inicio do método CalcularMedia
$this->nota1 = $a;
//o $this acessa elementos dessa classe
$this->nota2 = $b;
$this->media = ($this->nota1 + $this->nota2)/2;
return $this->media;
}// fim do método CalcularMedia()
// agora teremos mais um método
public function testar($a,$b){
$this->nome = $a; // valor passado pelo parâmetro do método ($a)
$this->turma = $b;
echo "O aluno/a eh:".$this->nome;// exibe o $nome
echo"<br>"; // apenas uma quebra de linha
echo "a turma eh: ".$this->turma;
}
}
// final da classe
$teste1 = new MediaAluno();
$teste1->nota1 = 7;
echo "<br>";
echo $teste1->nota1;
echo "<br>";
$teste1->testar('Laura', '4B'); // passa os valores por parâmetro
// os valores estão entre aspas pois é texto, separados por virgula
// Laura = $a e 4B = $b
//echo $teste1->turma;
// fim do código
?>
Agora basta salvar e executar o código no localhost e veremos que tudo irá funcionar normalmente.
TESTE 2:
Crie um arquivo FilhaDoMedia.class.php e escreva o seguinte código:
<?php
include "MediaAluno.class.php"; // inclui o arquivo
class VerMedia extends MediaAluno {
/* note no class temos um extends então o VerMedia herda as propriedades de MediaAluno (classe do arquivo MediaAluno.class.php)
*/
public function VA() {
//método VA
$teste2 = new MediaAluno(); //instanciar a classe MediaAluno
echo "a media eh:" . $teste1->CalcularMedia(10, 6);
// chamar o método CalcularMedia do arquivo MediaAluno.class.php
$teste2->turma = "Turma 1C"; // passa o valor para a turma
echo "<br>";
echo $teste2->turma; // exibe a turma
echo '<br>';
}
}
$t = new VerMedia();
$t->VA();
?>
Salve e execute o arquivo FilhaDoMedia.class.php no localhost
Agora vamos passar um valor para o $nome, assim:
Basta acrescentar a linha abaixo dentro do método VA() abaixo do echo "<br>";
$teste2->nome = "Rita";
echo $teste2->nome;
Salve e execute o arquivo no localhost, e então... Deu erro né. Pois é então o Private só pode ser acessado via método e dentro do próprio arquivo, e o protected já pode ser trabalhado por método fora e dentro do seu arquivo.
Pois então agora sim chegamos ao fim desse post, espero ter ajudado e até o próximo post!
Nenhum comentário:
Postar um comentário