Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

T.Colucci

[Resolvido] Um pouco de POO

Recommended Posts

Salve galera louca do IMasters, beleza?

 

Seguinte: tenho programado a algum tempo somente com POO, e as vezes me surgem duvidas em relação ao proprio conceito de poo mesmo, tipo isso:

 

1- Existem os chamados metodos get e set. Mas até agora, nao entendo muito bem O PORQUÊ de usa-los. Explico:

 

class tipo{

private $teste;

public function setTeste($valor){
    $this->valor = $valor;
}
public function getTeste(){
    return $this->valor;
}

}

//----------

class tipoDois{

private $teste;

public function __construct($valor){

  $this->teste = $valor
}

public function __destruct(){

}

}

//---- usando

$x = new tipo();
$x->setTeste = "Setei o valor";
echo $x->getTeste; // escreve "Setei o valor"

$y = new tipoDois("Setei o segundo valor");
echo $y->valor; 

Qual a vantagem de se ter esses metodos se eu posso fazer isso, digamos, diretamente? Segurança? Velocidade?

Alguém poderia me explicar? Acredito que seja algum conceito da POO que eu nao saiba, por isso, peço a ajuda dos mais entendidos do assunto.

 

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é útil para impedir acesso direto às propriedades de classe. Por exemplo, seu código usa uma propriedade (atributo, ou variável) do tipo public. O ideal seria deixá-la como private, para que somente a classe à qual ela pertence tenha acesso a ela.

 

Suponha que seja um valor numérico, como idade ou salário de um funcionário. Esse valor deve possuir restrições. Com um método set, você pode fazer validação, por exemplo. Se permitir acesso direto, qualquer valor poderia ser inserido nela, inclusive valor de outro tipo, como string. Isso não é um problema para o PHP, que não é tipado, mas num C++ ou Java isso pode causar exeções e erros indesejados em tempo de execução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Mas suponhamos que a atribuição do valor seja feito em um metodo privado ou protegido, ainda assim teria essa necessidade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas suponhamos que a atribuição do valor seja feito em um metodo privado ou protegido, ainda assim teria essa necessidade?

 

O ideal é sempre ter um método específico para atribuição, evitando erros.

 

É indiferente se o método é público, privado ou protegido. O importante é assegurar a consistência do dado armazenado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm, saquei!

 

Entao todas as variaveis da classe deverão ter seus metodos set e get, correto? Ou só as que são usadas por toda a classe?

 

Exemplo:

 


classe teste{

private $x;

private function setX($valor){
    $this->x = $valor; // essa variavel tem que ter o metodo SET e GET
}

private function banana(){
   $banana = $this->x + 25; // essa variavel nao precisa de metodo set e get, correto?

}

}

É isso?

 

Agradeço a paciencia amigao! hehehhee

 

Valew pela ajuda também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

os métodos set e get são utilizados apenas com as propriedades de classe. Variáveis internas a um método não precisam de métodos set e get, uma vez que apenas propriedades de classe estão normalmente ligadas com I/O, o que requer verificação de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo!

 

Obrigado pela ajuda beraldo, te pago uma heinecken la no boteco!

 

Vlw pela ajuda!

 

Tópico resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, me desculpe ressuscitar o tópico, mas me surgiu uma outra dúvida:

 

Se faz necessário que sempre que eu tenha um metodo set eu deva ter também um método get?

 

Por exemplo, posso setar um valor que me servirá como base para a execução de uma parte do código mas não necessariamente precisaria retornar esse valor, poderia usar o $this...

 

Podem me ajudar?

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiago, isso depende da visibilidade que você quer da sua variável, por exemplo, se você quer que uma determinada propriedade seja read-only, você define apenas o método get público, se você quer que seja apenas write-only, você define apenas o método set público. Eu particularmente não vejo problema em acessar direto os valores de um atributo dentro da própria classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Então nao é regra que se deva ter os dois para cada variavel de entrada... ok ok.

 

Tipo, particularmente, tb nao vejo problema algum em acessar direto os valores... até pq um dos argumentos é o fato de outras linguagens isso ser obrigatorio, tipo c++ e java. Mas no meu caso, nao precisarei usar tais linguagens. Meu negocio é o php mesmo, entao... fico meio na duvida.

 

Mas, como o objetivo é programar melhor, com mais elegancia e de forma mais "correta", então vou fazer o uso conforme me falaram.

 

Bem, duvida respondida! Obrigado _neto_

 

Qualquer outra, volto a postar aqui.

 

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, particularmente, tb nao vejo problema algum em acessar direto os valores...

É bom esclarecer o que eu disse: não vejo problema em acessar diretamente os atributos dentro da própria classe, fora da classe devem ser usados os métodos get/set.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh, ainda bem que você postou isso. Estava vindo aqui postar essa duvida, hahahahahaha!

 

Beleza, muito bem comentado.

 

Obrigado pela ajuda. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.