AOP x OOP x SOA

Amigos,

Gostaria da experiência de vocês relacionada as arquiteturas:

AOP - Arquitetura Orientada à Aspectos
OOP - Arquitetura Orientada à Objetos (A conhecida por todos nós, creio eu…)
SOA - Arquitetura Orientada à Serviços

Qual a usabilidade de cada uma delas?
Elas estão ligadas a o que, produtividade, padronização?!

Vamos discutí-las!

Abraço,

:wink:

A arquitetura do sistema eh a base fundamental dele… um conjunto de regras q vao reger a construcao dele do inicio ao fim, em consequencia influencia sim na produtividade, como na qualidade, manutenibilidade, flexibilidade, etc…

cada modelo de arquitetura q citou rende muito assunto, para conhece-los um primeiro passo pode ser a wikipedia, basicamente AOP voce divide os aspectos do sistema, funcionais, de auditoria, seguranca, etc e no fim integra tudo… OOP voce desenvolve de forma q seu sistema fike parecido com o mundo real (OOP faz parte da arquitetura, mas esta mais ligado ao modelo de desenvolvimento, eu posso ter uma arquitetura SOA onde meus servicos sao desenvolvidos num modelo orientado a objetos… um nao anula o outro). E no SOA voce tem um fluxo de trabalho desenhado com uma linguagem especifica q acessa servicos ou recursos…

dependendo da sua pesquisa poderia adicionar EDA (orientada a eventos) q eh uma continuacao do SOA…

Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros

AOP = Aspet Oriented Programming = Programação Orientada a Aspectos
OOP = Object Oriented Programming = Programação Orientada a objetos
SOA = Service Oriented Arquitecture = Arquitetura Orientada a Serviços

AOP é comummente utilizada junto com OOP para contornar limitações do Java por exemplo
SOA sim é uma arquitetura e não tem nada a ver com as outras duas

[quote=urubatan][quote=lorena.dourado]
AOP - Arquitetura Orientada à Aspectos
OOP - Arquitetura Orientada à Objetos (A conhecida por todos nós, creio eu…)
SOA - Arquitetura Orientada à Serviços

[/quote]
Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros

AOP = Aspet Oriented Programming = Programação Orientada a Aspectos
OOP = Object Oriented Programming = Programação Orientada a objetos
SOA = Service Oriented Arquitecture = Arquitetura Orientada a Serviços

AOP é comummente utilizada junto com OOP para contornar limitações do Java por exemplo
SOA sim é uma arquitetura e não tem nada a ver com as outras duas[/quote]

Amigos,

Não estou comparando ninguém! Quero apenas saber a experiência de vocês com relação as arquiteturas AOP, OOP e SOA…
Saber as dificuldades que cada um encontrou utilizando essas arquiteturas!

Abraço a todos,

:wink:

[quote=lorena.dourado][quote=urubatan][quote=lorena.dourado]
AOP - Arquitetura Orientada à Aspectos
OOP - Arquitetura Orientada à Objetos (A conhecida por todos nós, creio eu…)
SOA - Arquitetura Orientada à Serviços

[/quote]
Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros

AOP = Aspet Oriented Programming = Programação Orientada a Aspectos
OOP = Object Oriented Programming = Programação Orientada a objetos
SOA = Service Oriented Arquitecture = Arquitetura Orientada a Serviços

AOP é comummente utilizada junto com OOP para contornar limitações do Java por exemplo
SOA sim é uma arquitetura e não tem nada a ver com as outras duas[/quote]

Amigos,

Não estou comparando ninguém! Quero apenas saber a experiência de vocês com relação as arquiteturas AOP, OOP e SOA…
Saber as dificuldades que cada um encontrou utilizando essas arquiteturas!

Abraço a todos,

:wink:[/quote]

Lorena, não tem como alguém fazer uma explanação sobre algo equivocado. Acho que aqui caberia prestar um pouco de atenção, pois após a explicação dos amigos, você ainda persistiu no erro.

Acho que vale reforçar seus conceitos sobre o que é Arquitetura Orientada a Componentes, Arquitetura orientada a serviços. Isso não tem haver com paradigmas de programação , poderia ter um serviço exposto através de programação procedural, sem nada de OOP.

http://scaphe.wordpress.com/2006/08/19/soa/

Quanto à AOP - Orientação a Aspectos, essa visa interesses ortogonais , retirar do código da sua aplicação o que não faz parte necessariamente da construção do seu business e estão ali para cumprir outras funções, como Log, Segurança.

Só para salientar, quando se utiliza o framework de segurança Acegi juntamente com o Spring, você está exatamente fazendo isso, retirando da sua implementação direta e abstraindo através de Aspectos.

Os aspectos como disse o Urabatan, são complementos da OOP, que acabam dando ao java habilidades de manipulação baseada em MOP - MetaObject Protocols - http://www2.parc.com/csl/groups/sda/projects/mops/default.html. Aqui deixar claro que não se trata de uma implementação MOP e sim baseada em alguns conceitos !! Isso é uma longa discução e foge do tópico , para saber um pquinho mais - http://c2.com/cgi/wiki?AspectsAndMetaObjects

Dificuldade está na curvatura de aprendizagem de utilizar um framework como AsjpectJ ou JBoss AOP entre muitos outros que estão no mercado. Entretanto seus benefícios são grandes, principalmente em delegar algumas fases como segurança para depois e adicionar o aspecto à aplicação. Diria que apesar de muitos evidenciarem a qualidade do código, por não torná-lo spaghetti, evidenciaria o time-to-marketing, pois poderia separar bem as funções na equipe e cada um se preocupar somente com o que interessa de fato.

Por fim você fez uma pergunta meio esquisita: [quote]Elas estão ligadas a o que, produtividade, padronização?! [/quote]

Então vale à pena esse reforço no entendimento.

Para tentar simplificar pensem em :

AOP - Para retirar os interesses ortogonais do meu código e não torná-lo um spaghetti.

OOP - Abstração ao mundo real ( ao menos deveria ser :slight_smile: )

SOA - Exposição de algo que você criou como serviço.

Então sobre as dificuldades, AOP existe de curvatura, entender os pointcuts da vida, como funcionam os frameworks, mas depois de entendido isso é bem tranquilo e hoje muitos Frameworks e partes das soluções já utilizam AOP nos seus bastidores, como Spring e seu controle de transações.

SOA - você precisa pensar no que vai expor e como vai fazê-lo. Aqui realmente exige planejamento, quais tratativas vai utilizar, pois existem mutias formas de fazê-lo, segurança entre outras questões.

Aconselho duas literaturas - Tomas Erl e Restful WebServices para entender como conceitos e evolução.

Salve Kenobi,

Estou iniciando meu contato com SOA.

O Luca me recomendou como iniciação SOA e Web Services em Java (http://www.temporeal.com.br/produtos.php?id=170331). O que você acha deste livro?

Olá Kenobi,

Não persisti no erro como disse, pelo contrário… quero deixar bem claro que iniciei o tópico apenas para referências sobre o assunto, pois é algo crescente no mercado de trabalho…
Achei interessante ter algum lugar onde se pudesse explicar as diferenças entre cada uma das arquiteturas…
Ah, e Obrigada pelas referências bibliográficas citadas…

Abraço a todos,

:wink:

[quote=brunohansen]Salve Kenobi,

Estou iniciando meu contato com SOA.

O Luca me recomendou como iniciação SOA e Web Services em Java (http://www.temporeal.com.br/produtos.php?id=170331). O que você acha deste livro?

[/quote]

Bruno, eu não conheço o livro, mas se o Luca recomendou, assino embaixo :slight_smile:

[quote=urubatan][quote=lorena.dourado]
AOP - Arquitetura Orientada à Aspectos
OOP - Arquitetura Orientada à Objetos (A conhecida por todos nós, creio eu…)
SOA - Arquitetura Orientada à Serviços

[/quote]
Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros

AOP = Aspet Oriented Programming = Programação Orientada a Aspectos
OOP = Object Oriented Programming = Programação Orientada a objetos
SOA = Service Oriented Arquitecture = Arquitetura Orientada a Serviços

AOP é comummente utilizada junto com OOP para contornar limitações do Java por exemplo
SOA sim é uma arquitetura e não tem nada a ver com as outras duas[/quote]

Urubatan só me permita me discordar em um ponto AOP não contorna problemas do java e sim da O.O

[quote]Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros
[/quote]

Olha, não estou querendo abrir um tópico antigo, mas me chamou a atenção, porque
eu já li mais de um livro em Inglês que citou Object Oriented Architecture!

E não gostaria de deixar o pessoal sem outra opção de resposta…

Inclusive, várias faculdades dos Estados Unidos ensinam isto.

Segue um link só para constar: http://marte.dpi.inpe.br/col/dpi.inpe.br/sbsr@80/2006/11.15.20.33/doc/3615-3622.pdf

Certamente, o desconhecimento aqui não é por parte da Lorena (risos),
talvez ela tenha lido algum livro que citou isto.

Detalhe é que vc contorna os problemas OO em Java com coisas como AOP, enquanto em Ruby vc usa coisas como Metaprogramação.

Vi poucos ou nenhum projetos Ruby usando AOP

A granularidade da arquitetura que SOA prega está um nível acima dos fatores tecnologicos. São serviços sim, porém, estes serviços não tratam de web-services, mas sim de orquestração de serviços de NEGÓCIOS. Como isso será implementado? Pouco importa, se será com WS-*, REST, EJB, CORBA, RMI, troca de arquivos, ESB, whatever…

[quote=peerless]A granularidade da arquitetura que SOA prega está um nível acima dos fatores tecnologicos. São serviços sim, porém, estes serviços não tratam de web-services, mas sim de orquestração de serviços de NEGÓCIOS. Como isso será implementado? Pouco importa, se será com WS-*, REST, EJB, CORBA, RMI, troca de arquivos, ESB, whatever…

[/quote]

Isso me lembro o mini curso na global code sábado - parabéns kenobi e concordo prreless.

lorena.dourado - bom o pessoal ja desmistificou o que é cada um, aqui vai uma coisinha que achei no meu favoritos, não é experiência, mais ajuda no estudo. AOP , OOP tem muita coisa no fórum sobre cada conceito.

[]'s

SOA é uma espécie de Nirvana da indústria de software. Alguns monges budistas do alto do Himalaia dizem tê-lo atingido, mas como sua definição é construída em cima de abstrações qualquer um por aí pode dizer estar 24 hs no Nirvana. Ao meu ver é um tema bem complicado, e o SOA por si próprio leva a um conflito de impedância (Impedance Mismatch), termo tbm utilizado no confrontamento do Modelo Relacional e o Modelo de Domínio orientado a objetos, com a implantação de Business Inteligence, DataWare Houses e ETL.

Aqui um artigo interessante, mesmo vindo da M$: http://msdn.microsoft.com/en-us/library/bb419307.aspx