Ir para conteúdo

POWERED BY:

Arquivado

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

Manoel Barros

Nas interface é obrigado declarar "public" e "absctract&#3

Recommended Posts

Nas interface é obrigado declarar `public´ e `absctract´ nos seus métodos? ou é opcional??

Já que por natureza a interface, já declara todos os seus métodos como `public´ e `absctract´.


Aproveitando este post queria saber uma coisa, que eu já vi muito gente comentando é que: "Fuga de classes abstrata, só use se realmente for muito necessário, prefira interface" isso é verdade??

Compartilhar este post


Link para o post
Compartilhar em outros sites

todos os métodos de uma interface devem ser declarados como publico.

 

 

Aproveitando este post queria saber uma coisa, que eu já vi muito gente comentando é que: "Fuga de classes abstrata, só use se realmente for muito necessário, prefira interface" isso é verdade??

Não é verdade, é necessidade.

se encontra mais a necessidade de interfaces do que objetos abstratos, mas não leve isso como regra pois assim vc vai acabar criando interfaces desnecessárias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interface => contrato

Classe abstrata => classe base com comportamento comum

 

Elas têm diferentes propósitos, logo não existe o porquê de fugir de alguma delas. Use interfaces para abstrair o código e classes abstratas para evitar a repetição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Nas interface é obrigado declarar `public´ e `absctract´ nos seus métodos? ou é opcional??

Já que por natureza a interface, já declara todos os seus métodos como `public´ e `absctract´.

 

Aproveitando este post queria saber uma coisa, que eu já vi muito gente comentando é que: "Fuga de classes abstrata, só use se realmente for muito necessário, prefira interface" isso é verdade??

 

Interfaces em PHP não podem ter implementação. Isso força que seus métodos sejam sempre abstratos.

 

Métodos abstratos precisam ser implementados. Isso força que seus métodos sejam sempre públicos.

 

Inserir a palavra-chave public é opcional não só em interfaces como em qualquer estrutura da Orientação a Objetos. Sejam métodos ou propriedades, interfaces ou classes, abstratos ou concretos.

 

Costuma-se obrigar o operador de visibilidade por uma questão de clareza. Isso entra em coding-standards não numa necessidade da linguagem.

 

Você precisa de uma classe abstrata quando você precisa de uma implementação. Se você conhece o porque de utilizar interfaces, sabe que devemos "programar para interfaces, não para implementações". Se você está descrevendo a interface, deve - sim - fugir de classes abstratas. Classes abstratas devem entrar quando você estiver criando a implementação da interface.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Evandro,

 

Só uma coisa: métodos abstratos que não implementam uma interface não precisam ser declarados como public.

abstract class Teste  {
	public function hello() {
		echo 'hello ', $this->world();
	}
	
	abstract protected function world();
}

class TesteImpl extends Teste {
	protected function world(){
		return 'world';
	}
}

$test = new TesteImpl();
$test->hello();

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Evandro,

 

Só uma coisa: métodos abstratos que não implementam uma interface não precisam ser declarados como public.


abstract class Teste  {
	public function hello() {
		echo 'hello ', $this->world();
	}
	
	abstract protected function world();
}

class TesteImpl extends Teste {
	protected function world(){
		return 'world';
	}
}

$test = new TesteImpl();
$test->hello();
@braços

 

 

Hugo, uma entidade abstrata é uma antecipação por assim dizer, do que será necessário para o todo funcionar, correto?

 

Porque nós nos anteciparíamos das internas de classes concretas? Se o método não é público, eu não posso deixar a critério de quem o está implementando escolher o nome, assinatura e retorno?

 

Gostaria de um exemplo onde faria qualquer sentido lógico em forçar - porque é isso que entidades abstratas fazem - a implementação de algo cujo escopo não seja público.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehehe, calma garoto :)

 

Não estou querendo entrar neste mérito, somente gostaria de apontar que a linguagem permite fazer isto que acabei de mostrar, fazendo isto sentido ou não. Para alguns (não sei quem) pode fazer sentido.

 

Concordo com o que você disse anteriormente:

 

"programar para interfaces, não para implementações".

 

Reforçando: não estou discutindo se faz sentido ou não, somente apontando que sim, você pode marcar um método não público (no caso protected) como abstract em classes abstratas.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu ae pessoal pela força.

 

Pessoal me corrijam se eu estiver errado:

 

Interface: Use interface para abstrair comportamentos de objetos, sem a necessidade de saber como é a implementação.
Classe Abstratas: Use classes abstratas para abstrair as implementações em comum dos objetos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu ae pessoal pela força.

 

Pessoal me corrijam se eu estiver errado:

Use classes, sejam abstratas ou concretas quando houver implementação. Ainda que mínima.

 

Se não houver implementação, você tem uma interface.

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.