galera, estava eu estudando sobre padrões de projetos, e me deparei com uma situação onde no livro, na parte onde falava sobre o padrão Bridge, que ele separava a abstração da implementação em hierarquias diferentes, até aí tudo bem, conciliei a abstração à interfaces, essas coisas, em seguida, tinha uma parte que dizia que a ABSTRAÇÃO DEFINIA UMA INTERFACE, aí a dúvida, fiquei confuso, me pareceu coisas distintas, abstração e interface, e entrei em contradição comigo mesmo, alguém poderia me esclarecer isso por favor…
é isso mesmo? Esse termo: Abstração, são as interfaces, classes “abstratas”, como parece óbvio!
O livro fornece exemplos em C++, pior ainda, hehe nem tem interface…mas se referiu dessa forma…
bom, vou continuar com essa definição mesmo…como você disse ignacio83, interfaces e classes abstratas, não podem ser instanciadas, e fornecem um modelo abstrato dos objetos.
A confusão foi viajem então…hehe
Bom, sua dúvida ocorre porque as pessoas (da àrea da computação) normalmente houvem a palavra abstração e lembra de coisas relacionadas a codificação. Essa palavra existe faz um bom tempo provavelmente antes de existir os computadores, ela passa a idéia sobre como o individuo imagina uma provável solução sem se importar no momento em COMO ela será resolvida de fato, é por isso que ela DEFINE a interface porque antes vem a imaginação (abstração) - lembra do Mr. Einstein? “A imaginação é mais importante do que…”. E definir a interface está relacionado a idéia da criação da interface, mesmo passando por ajustes para chegar a um aprimoramento de nível satisfatório e etc…
bem, segundo o que o fantomas colocou abstração seria uma espécie de modelo mental do problema que podemos criar antes de trabalhar com o problema em si
segundo a citação do celso abstração seria trabalhar com um sub-conjunto de atributos de um objeto do domínio do problema
[quote=André Fonseca]bem, segundo o que o fantomas colocou abstração seria uma espécie de modelo mental do problema que podemos criar antes de trabalhar com o problema em si
segundo a citação do celso abstração seria trabalhar com um sub-conjunto de atributos de um objeto do domínio do problema
para mim as duas definições são validas … certo?[/quote]
Eu só não restringiria a definição do Page-Jones tanto assim. De uma forma mais geral, o que entendi foi: OO mapeia, de forma bem próxima, o mundo real. Mas não quer dizer, necessariamente, uma cópia fiel, um espelho, uma xerox.
Acho que a definição do fantomas é mais abrangente.
Eu estou sem o livro aqui, mas nesse caso em específico, acredito que com abstração ele não esteja se referindo à uma interface ou classe abstrata. São duas situações: a primeira é que o objetivo do padrão é desacoplar as abstrações (interfaces, classes abstratas ou o que for) das implementações. A segunda é que, pra atingir o objetivo da primeira situação, ele cria duas hierarquias: a abstração (e acho que é isso que ele se refere na frase) e a implementação. Veja aqui:
Na seção Structure tem o diagrama. Veja que a esquerda tem uma hierarquia de classes de abstração (Abstraction e RefinedAbstraction) e na direita tem a hierarquia de classes de implementação (Implementor e ConcreteImplementor). A abstração define uma interface. Mas a abstração no caso da hierarquia (falando diretamente, a classe Abstraction) e não uma interface ou classe abstrata. Um benefício é que você pode estender a abstração sem impactar na implementação e vice-versa.
Ouvi uma vez uma definição do conceito “Abstração” que achei bem interessante. Foi meu professor de análise de sistemas, ele pediu pra cada um de nós imaginar um carro e escrever no papel o que viu nessa imagem mental. Cada um colocou algo diferente, uns colocaram que viram a roda, outros que viram o motor, outros pensaram no painel, etc. isso aconteceu pois cada um “abstraiu” detalhes diferentes do carro. Conheço um cara que desenha qualuqer coisa que você pedir, do nada, sem se basear em nada, desenhos simples que continham pequenos detalhes que deixavam muito bonitos. Já eu quando desenhava tinha muita dificuldade de criar desenhos sem base real, pois não tinha um senso de abstração muito evoluido, em compensação eu era muito bom copiando pessoas, rostos, objetos. Caricaturistas tem um senso de abstração muito interessante, pois eles se atêm aos detalhes mais marcantes das pessoas como nariz, boca, olhos, aqueles detalhes bobos que fazem toda a diferença, mesmo o desenho ficando feio você reconhece a pessoa, pois o desenhista abstraiu os detalhes significantes para que saisse uma boa caricatura.
Em sistemas eu acredito ser a mesma coisa, você se atêm aos detalhes mais importantes para uma boa construção do domínio, algo como a definição do Page Jones(celso.martins). Não adianta criar um atributo numeroDeFiosDeCabelo num contexto bancário por exemplo. No caso você deve abstrair os detalhes relevantes. (Não consigo imaginar, mas talvez esse tipo de informação seja relevante em algum cenário)
galera, estava eu estudando sobre padrões de projetos, e me deparei com uma situação onde no livro, na parte onde falava sobre o padrão Bridge, que ele separava a abstração da implementação em hierarquias diferentes, até aí tudo bem, conciliei a abstração à interfaces, essas coisas, em seguida, tinha uma parte que dizia que a ABSTRAÇÃO DEFINIA UMA INTERFACE, aí a dúvida, fiquei confuso, me pareceu coisas distintas, abstração e interface, e entrei em contradição comigo mesmo, alguém poderia me esclarecer isso por favor…
é isso mesmo? Esse termo: Abstração, são as interfaces, classes “abstratas”, como parece óbvio!
[]'s[/quote]
Quando ele fala “ABSTRAÇÃO DEFINIA UMA INTERFACE” ele usa interface no sentido lato, não no sentido estrito (interfaces em Java). Apesar de que as interfaces em Java são pautadas pelo significado de interface no sentido lato também…As interfaces são uma camada abstrata que fica entre duas camadas de implementação. Ela serve para definir uma espécie de contrato de como essas duas camadas vão interagir. A idéia de se usar interfaces é diminuir o acoplamento entre os componentes de software.