borsatti 2 Denunciar post Postado Julho 21, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Julho 22, 2011 Dê uma procurada em um livro chamado, Padrões de Arquitetura de Aplicações Corporativas, Autor: Martin Fowler, o conteúdo é ótimo ! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Julho 22, 2011 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
borsatti 2 Denunciar post Postado Julho 22, 2011 Bom , se eu entendi, a interface não é nada mais do que um "layout" da classe onde ele for implementado... correto? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Julho 22, 2011 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
borsatti 2 Denunciar post Postado Julho 26, 2011 Eu entendi bruno, o que eu quis dizer é que a Interface serve APENAS para forçar você a criar alguns metódos! Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Julho 26, 2011 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
Matheus Tavares 167 Denunciar post Postado Julho 26, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Julho 26, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 26, 2011 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
Matheus Tavares 167 Denunciar post Postado Julho 26, 2011 Já deste uma olhada nos tópicos que o JBN organizou sobre o assunto, no fórum? :seta: http://forum.imasters.com.br/topic/402329-padroes-gof/ :P Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Julho 26, 2011 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 ? Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 26, 2011 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
borsatti 2 Denunciar post Postado Julho 27, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Julho 27, 2011 Eu sei, estou falando da forma que você falou, força a criar ... Compartilhar este post Link para o post Compartilhar em outros sites
borsatti 2 Denunciar post Postado Julho 27, 2011 Mas se o código só ira funcionar se você criar os métodos, ele não te força a criar? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Julho 27, 2011 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