Ir para conteúdo

POWERED BY:

Arquivado

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

borsatti

Design Pattern

Recommended Posts

Eae pessoal, beleza... alguem ae tem alguma apostila boa de Design Pattern ?

 

Por que ta tenso , eu to com umas dúvidas na parte de interface , feio ahuhuahdua...

 

Eu não consigo entender o por que usar interface, se você pode apenas criar 2 classes com a mesma função!!!

 

Como esse exemplo

 

http://imasters.com.br/artigo/17673/php/design_patterns_e_o_desenvolvimento_em_php_strategy/

 

Cria-se a interface e depois as classes..

 

Por que não criar direto a Classe Carro e a Avião e dar o print nelas direto ? isso que não entendo..

 

Alguem pode me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae pessoal, beleza... alguem ae tem alguma apostila boa de Design Pattern ?

http://books.google.com/books/about/PHP_Objects_Patterns_and_Practice_Third.html?hl=de&id=hE9Qf-tqR0oC

 

Eu não consigo entender o por que usar interface, se você pode apenas criar 2 classes com a mesma função!!!

http://wbruno.com.br/blog/2011/04/20/afinal-e-interface-oop/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom , se eu entendi, a interface não é nada mais do que um "layout" da classe onde ele for implementado... correto?

é mais forte que isso, é um 'contrato'.

 

leia também, para entender oque é OO:

http://wbruno.com.br/blog/2011/04/29/afinal-e-orientacao-objetos/

Compartilhar este post


Link para o post
Compartilhar em outros sites

forçar você a criar alguns metódos!

Não, os métodos tem que existir para a interface ser implementada corretamente, se você não tiver os métodos que contem na interface, vai dar erro, ela não te 'força a criar', apenas verifica a existência desses métodos.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não, os métodos tem que existir para a interface ser implementada corretamente, se você não tiver os métodos que contem na interface, vai dar erro, ela não te 'força a criar', apenas verifica a existência desses métodos.

Não ficou redundante essa ideia? :mellow:

Ele não apenas verifica, como também emite um erro em caso de não existir. Eu vejo isso como forçar, para manter o padrão imposto pela interface. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, o erro é fora de questão, dando erro ou não, a interface não força o cara a criar, ele tem que ter os métodos, é bem diferente.

 

Está errado Andrey,

 

A interface é um contrato que, após assinado, precisa necessariamente ser cumprido.

 

<?php
interface Test {
   	public function doSomething();
}

class Testing implements Test {
}

 

O erro é:

Fatal error: Class Testing contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Test::doSomething) in /src/cdg4/teste.php on line 7

 

Isso significa que:

 

1. Você precisa implementar o método.

 

ou

 

2. Você retarda a implementação declarando a classe como abstrata, fazendo com que uma classe concreta implemente o método faltante.

 

Declarar a classe como abstrata é o mesmo que retardar a implementação, mas ela invariavelmente precisará ocorrer:

 

<?php
interface Test {
   	public function testSomething();
   	public function testSomethingElse();

}

abstract class AbstractTest implements Test {
   	public function testSomething() {
           	echo 'something';
   	}
}

class ConcreteTest extends AbstractTest {
   	public function testSomethingElse() {
           	echo 'something else';
   	}
}

class Client {
   	public function test( Test $test ) {
           	$test->testSomething();
           	$test->testSomethingElse();
   	}
}

$client = new Client();
$client->test( new ConcreteTest() );

 

Independentemente de declarar uma classe como abstrata ou implementar completamente uma interface em uma classe concreta não muda o fato de a interface precisar, necessariamente, ser completamente implementada.

 

Isso fica claro no exemplo acima, onde o método test do Client trabalha confiando na interface Test.

 

Quanto a pergunta inicial, se está procurando sobre design patterns, o primeiro livro deve ser Design Patterns: Elements of Reusable Object-Oriented Software

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo João, mas a diferença que eu quis dizer foi no sentido em que ele falou 'força a criar o método', e a diferença do método 'não existir' entende ?

 

hehe

 

Não entendi não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo João, mas a diferença que eu quis dizer foi no sentido em que ele falou 'força a criar o método', e a diferença do método 'não existir' entende ?

 

Mas não tem como o método não existir, se usar interface você é obrigado a ter os métodos!

Se os metódos não existir vai dar erro!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, como o William Bruno já me deu um puxão de orelha aqui, vou tentar ser mais claro.

Quando você disse, força a criar, eu entendi o seguinte:

interface A{

      public function hahaHum();

}
class B implements A{
     /**
      * Nenhum método
      */
}

O Que eu concluí com isso, que você já iria a implementar a interface na classe com os métodos na interface, mas não na class, entendeu ? ou seja, teu força criar, pra mim, ficou nesse sentido.

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.