UM ESTUDO COMPARATIVO ENTRE SOA E POO
1
Eduardo Augusto Silvestre, 2Lucilene Aparecida de Oliveira
Instituto Federal do Triângulo Mineiro (IFTM) – Campus Avançado Patrocínio, Patrocínio – MG,
1
[email protected], [email protected]
Resumo – SOA (Service Orientation Architecture) é
um estilo arquitetural para a construção de soluções
corporativas baseadas em serviços. Na literatura existe
muita confusão e disputa entre SOA e a Programação
Orientada a Objetos (POO). Neste trabalho, pretende-se
desmistificar as diferenças e similaridades entre ambos.
Para isso, serão apresentados os principais conceitos
relacionados a SOA e a orientação a objetos. Também
será feito uma comparação entre ambos através da
perspectiva de diversos autores. Na parte final, conclui-se
que SOA e POO na verdade não são rivais e não
disputam o mesmo espaço.
Palavras-Chave – Service Oriented Architecture,
Programação Orientada a Objetos, Estilo Arquitetural
A COMPARATIVE STUDY AMONG SOA
AND OOP
Abstract - SOA (Service Orientation Architecture) is
an architectural style for constructing enterprise solutions
based on services. In literature there is much confusion
and dispute between SOA and Object-Oriented
Programming (OOP). This work aims to demystify the
differences and similarities between them. For this, we
will present the main concepts related to SOA and objectorientation. Also a comparison will be done both through
the perspective of many authors. In the end, it appears
that SOA and OOP are not really rivals and not compete
in the same space.
Keywords - Service Oriented Architecture, Object
Oriented Programminc, Architectural Sttyle.
I. INTRODUÇÃO
A programação orientada a serviços (OS), representa uma
nova plataforma de computação distribuída. Esta por sua vez,
envolvem muitos fatores, incluindo paradigmas e princípios
de projetos, catálogos e linguagens padrões do projeto, um
modelo arquitetural distinto, conceitos, tecnologias e
frameworks [1].
_______________________
Já Arquitetura Orientada a Serviços (SOA), ou, em ingles,
Service-Oriented Architecture é um termo que descreve duas
coisas muito distintas. As duas primeiras palavras, ServiceOriented, expressam uma metodologia para desenvolvimento
de software. E a terceira palavra, Architecture ou Arquitetura,
é um panorama de todos os ativos de software de uma
empresa, assim como uma planta arquitetônica é uma
representação de todas as peças que, juntas, formam uma
construção. Portanto, ―service-oriented architecture‖ é uma
estratégia que proclama a criação de todos os ativos de
software de uma empresa via metodologia de programação
orientada a serviços.
Existem pontos de confusão entre SOA e o uso do termo
OS, entre os principais enganos tem-se [2]: uma aplicação que
usa Web Services (WS) é OS; SOA é apenas uma estratégia de
TI, um termo de marketing usado para marcar WS, e sua
computação distribuída; o termo SOA simplifica este tipo de
computação.
Há alguns benefícios tangíveis em relação a SOA, como
[2]: integração melhorada -resultar na criação de serviços
inerentemente interoperáveis; reuso inerente; soluções e
arquiteturas alinhadas; investimento legado aproveitado;
estabelecimento de uma representação de dados padronizado
(XML); foco de investimento na comunicação da infraestrutura; agilidade organizacional.
II. HISTÓRICO
SOA surgiu nos últimos anos como uma das abordagens
preferidas para projeto de sistemas. Aproveitando padrões
abertos e a presença da internet, ela é baseado na utilização de
serviços reutilizáveis que correspondem a unidades lógicas de
trabalho auto-contidas. A promessa é que esses serviços
podem ser agrupados rapidamente usando padrões comuns
para formar novas aplicações que estão alinhadas com as
necessidades do negócio [3].
Em [3] é apresentado uma introdução sobre os conceitos e
tecnologias que antecederam essa nova arquitetura e também
quem criou o termo. Já em [4] são apresentadas uma
introdução ao termo e a dificuldade de definir SOA com
precisão.
Os sistemas mainframe das décadas de 1960 e 1970
raramente se comunicavam um com o outro. De fato, um dos
principais pontos de um mainframe era que ele forneceria
tudo necessário para realizar funções de computação em um
negócio [3].
Nos anos de 1980, computadores pessoais explodiram no
ambiente e os desenvolvedores procuravam formas mais
eficazes para alavancar o poder de computação dos
computadores pessoais. Como o preço do hardware diminuiu,
o número de servidores dentro da empresas aumentou
exponencialmente [3]. Essas evoluções, junto com a
maturidade crescente do Remote Procedure Call (RPC),
levaram a dois avanços importantes na computação
distribuída. O primeiro a tecnologia Common Object Request
Broker Architecture (CORBA,) que é uma arquitetura padrão
criada pelo Object Management Group (OMG) para
estabelecer e simplificar a troca de dados entre sistemas
distribuídos heterogêneos. O segundo é o Distributed
Computing Object Model (DCOM), que é uma tecnologia
proprietária da Microsoft para comunicação entre
componentes de software distribuídos em todos os
computadores em uma rede [3].
Até o final dos anos 1990 [3], com a adoção da Internet, as
empresas começaram a reconhecer os benefícios de ampliar
sua plataforma de computação para parceiros e clientes.
Anteriormente, a comunicação entre as organizações era
altamente onerosa e havia a necessidade de contar com linhas
privadas (leased lines). Sendo que essas eram impraticáveis,
exceto para as grandes empresas.
Os conceitos que hoje são associados com SOA surgiram
com a expansão e adoção da Internet e mais especificamente
do protocolo HTTP [3].
Muitos frameworks baseados em componentes tentaram
objetivos similares aos de SOA. Entretanto esta arquitetura
difere em algumas características dessa abordagem [3]:
CORBA, EJB, DCOM são baseados em tecnologias RPC, o
que encoraja o alto acoplamento, contrariando os princípios
de SOA que presa baixo acoplamento.
Surpreendentemente, é difícil descobrir quem criou o termo
SOA [4]. O momento atual do SOA foi criado pelos Web
Services, que inicialmente era dirigido pela Microsoft,
alcançaram um público amplo em 2000 [4]. Logo, outras
companhias e grandes vendedores (como IBM, ORACLE,
HP, SAP e SUN) aderiram a essa tendência. Um novo
mercado surgia com os novos conceitos e ferramentas (ou
conceitos reinventados e ferramentas). Além disso, o tempo
estava certo, porque as companhias estavam cada vez mais
integrando seus negócios com outros sistemas, departamentos
e companhias.
Posteriormente os analistas começaram a olhar SOA como
um conceito chave para software no futuro. Um estudo feito
por [5] chegou à conclusão que em 2008, SOA forneceria
80% da base de todos os projetos de desenvolvimento.
No entanto cada movimento cria grandes críticas devido ao
exagero usado no termo. Grady Booch, um dos idealizadores
da UML fez o seguinte comentário em 2006 em seu blog [6]:
“Minha opinião sobre toda a cena que acontece com SOA
é mais ousada do que eu tenho visto. Muito do que se fala
sobre SOA fica parecendo que SOA é a melhor coisa que
existiu desde os cartões perfurados. SOA não irá
aparentemente transformar sua organização e fazer você
mais ágil e inovador.”
Booch estava certo. Pois é importante lembrar que SOA é
uma estratégia que requer tempo e esforço. É necessário
alguma experiência para entender o que SOA realmente é,
onde, e como ela ajuda.
III. CONCEITOS RELACIONADOS
A. Arquitetura
Normalmente, poucos programas de computador são
suficientes para atender a uma empresa pequena ou
organização. Estes pequenos programas são fáceis de gerir e
não há necessidade de um projeto global. No entanto, quando
são consideradas organizações maiores, o número de
programas de computador cresce e existe maior necessidade
de um projeto global ou desenho da estratégia com o objetivo
de evitar o caos. Este projeto global ou estratégia de projeto é
chamado de arquitetura de software [7].
Arquitetura é a caracterização da organização do sistema
em termos das suas partes constituintes. Ela caracteriza a
estrutura física, organização funcional e o comportamento
colaborativo das suas partes constituintes e os relaciona à
finalidade do sistema. Uma descrição arquitetural completa
serve como referência para os stakeholders, como eles se
esforçam para assegurar que os sistemas que são feitos,
satisfazem a finalidade que motivou a sua construção [9].
Arquitetura de Software engloba as decisões importantes
sobre [10] [11]:

A organização de um sistema de software.

A seleção dos elementos estruturais e suas
interfaces, que o sistema é composto.

A composição desses elementos em subsistemas
progressivamente maiores.

O estilo arquitetural que guia essa organização,
esses elementos e suas interfaces, suas colaborações e sua
composição.
A arquitetura de software não está preocupada somente
com a estrutura e comportamento, mas também com o uso,
funcionalidade,
desempenho,
robustez,
reutilização,
compreensão, restrições econômicas e tecnológicas, tradeoffs
e estética [10] [11].
B. Serviço
A palavra serviço refere-se a uma pessoa realizando algum
trabalho ou tarefa para alguém. Uma definição superficial
mais genérica para serviço é uma pessoa ou organização
realizando algum trabalho para outra pessoa ou organização
[7]. Um serviço é um componente de software que tem as
seguintes propriedades [8]:

É definido por uma interface que pode ser
independente da plataforma.

Está disponível através de uma rede.

As operações definidas na interface executam as
funções de negócio.
Sua interface e sua implementação podem ser decoradas
com extensões que tem efeito em tempo de execução.
C. SOA
SOA é um estilo de arquitetura que usa serviços como
blocos de construção para facilitar a integração da empresa e
reuso de componentes através de baixo acoplamento [8] e
para a construção de soluções corporativas baseadas em
serviços. Mais especificamente, esta arquitetura está
preocupada com a construção independente de serviços
alinhados aos negócios que podem ser combinadas em
processos de negócios de alto nível e soluções dentro do
contexto de uma empresa [10].
Existem alguns conceitos técnicos sobre SOA que
permitem lidar com diversas características de sistemas [4]:
 Alta interoperabilidade: com sistemas heterogêneos, o
primeiro objetivo é ser capaz de conectar esses sistemas, ou
seja, interagir e comunicar com outro. Esse processo é
chamado de ―alta interoperabilidade‖. Para SOA essa
característica é a base para começar a implementar
funcionalidades de negocio (serviços) que esta espalhada por
diversos sistemas distribuídos.
 Baixo acoplamento: é o conceito de minimizar as
dependências, ou seja, está relacionado com a sua capacidade
de ser independente de outros serviços para realizar a sua
tarefa. Alem do baixo acoplamento, é importante que um
serviço tenha alta coesão, ou seja, a sua atividade seja bem
definida e coerente.
 Serviços: descrito anteriormente.
SOA modulariza informações do sistema dentro de
serviços. Em um projeto bem executado, pode-se facilmente
recombinar esses serviços de várias maneiras para
implementar um processo de negócio novo ou melhorado [9].
Este tipo de arquitetura tem um processo evolutivo das
técnicas de modularização de software que começaram há
mais de 50 anos com a introdução da programação
estruturada. A novidade do SOA é que ele oferece aumento na
flexibilidade na escolha das tecnologias de implementação e
locais para os fornecedores de serviço e consumidores. A
interface de serviços abstrata também habilita fornecedores e
consumidores a se envolverem independentemente - contanto
que as interfaces permaneçam estáveis [9].
composição e interação entre diversas unidades de software
chamadas de objetos [14].
POO é a programação implementada pelo envio de
mensagens a objetos. Cada objeto irá responder às
mensagens conhecidas por este, e cada objeto poderá enviar
mensagens a outros, para que sejam atendidas, de maneira
que ao final do programa, todas as mensagens enviadas
foram respondidas, atingindo-se o objetivo do programa.
POO, técnicas e artefatos ditos ―orientados a objetos‖
incluem linguagens, sistemas, interfaces, ambientes de
desenvolvimento, bases de dados, etc [16].
Algumas das vantagens que motivam programadores a
utilizar o para o paradigma de orientação a objeto são [17]:

Redução no custo de manutenção: existem
características (herança e encapsulamento) que permitem
que, quando for necessária alguma alteração, modifique-se
apenas o objeto que necessita desta alteração, e ela propagarse-á automaticamente às demais partes do software que
utilizam este objeto.

Aumento na reutilização de código: pode-se dizer,
de modo simplório, que o conceito de orientação a objetos
(OO) fornece a possibilidade de um objeto acessar e usar
como se fossem seus os métodos e a estrutura de outro
objeto. Deste modo, quando, por exemplo, existirem dois
objetos bastante semelhantes, com mínimas diferenças, podese escrever os métodos apenas uma vez e usá-los para os dois
objetos. Apenas os métodos que realmente forem diferentes
para os dois objetos é que precisam ser escritos
individualmente.
D. Separação de Interesses
A separação de interesses (separation of concerns) é o
princípio mais fundamental da SOA. Os interesses são
mantidos separados para que os elementos independentes
permaneçam independentes. O benefício é que uma mudança
em uma parte do sistema não altera outras partes. Em outras
palavras, eles podem ser modificados independentemente.
Um exemplo familiar desse princípio é a separação da
interface da implementação [10].
Ou seja, baseado na teoria de Separação de Interesses,
―quebrando‖ um problema grande e complexo em uma série
de pequenos problemas, como ilustrado na Fig. 1:
A OO é um paradigma de análise, projeto e programação
de sistemas de software baseado na composição e interação
entre diversas unidades de software chamadas de objetos. A
análise e projeto OO têm como meta identificar o melhor
conjunto de objetos para descrever um sistema de software.
O funcionamento deste sistema se dá através do
relacionamento e troca de mensagens entre estes objetos. Na
programação orientada a objetos, implementa-se um conjunto
de classes que definem os objetos presentes no sistema de
software.
Serão apresentadas algumas comparações entre Sistemas
OO e Sistemas OS, nas próximas linhas. Primeiramente, são
mostradas comparações feitas por Thomas Erl – onde
conceitos básicos de OO são comparados com conceitos de
OS. Posteriormente, Dan Woods e Thomas Mattern explicam
o porquê, segundo eles, OS é melhor que OO. Finalmente,
Nicolai M. Josuttis faz uma comparação direta focada entre
SOA e POO.
O paradigma OO é composto de um conjunto rico de
princípios de projeto fundamentais que estruturam e
organizam a lógica OO através das classes. Alguns desses
princípios foram carregados para orientação a serviços e,
outros não [1]. Os princípios da orientaçãoa objetos
comparados com a orientação a serviços são mostrados na
Tabela I.
Fig. 1. Modelo de Separação de Interesses
E. POO
A orientação a objetos é um paradigma de análise, projeto
e programação de sistemas de software baseado na
IV. ESTUDO COMPARATIVO
TABELA I
Comparação dos princípios de OO com OS
OO
OS
OO
OS
OO
OS
OO
OS
OO
OS
OO
OS
CLASSES
Em OO classe é representado como um conjunto
de objetos com características comuns.
Uma classe é comparável, mas não equivalente a
um contrato de serviço técnico. Uma classe pode
definir uma combinação de acesso público e
privado aos detalhes de implementação,
enquanto que um contrato de serviço expressa
apenas informação pública. Nesse sentido, um
contrato de serviço é mais parecido com uma
interface implementada por uma classe.
OBJETOS
Um objeto é capaz de armazenar estados através
de seus atributos e reagir a mensagens enviadas a
ele, assim como se relacionar e enviar
mensagens a outros objetos
Uma instância em tempo de execução de uma
classe é um objeto, assim como uma instância
em tempo de execução de um serviço é
uma instância de serviço.
METÓDOS E ATRIBUTOS
Em OO eles são usados para associar um
comportamento
e
dados
dos
objetos
respectivamente.
Em OS eles manifestam os comportamentos
como capacidades abstratas. A capacidade é o
equivalente de um método se um serviço é
implementado como um componente e uma
operação se um serviço é implantado como um
WS.
MENSAGENS
É uma chamada a um objeto para invocar um de
seus métodos, ativando um comportamento
descrito por sua classe.
As mensagens utilizadas pelos serviços
implementados
como
WS
normalmente
manifestam-se como unidades com base em
texto de comunicação, que podem ser trocadas
(sincronament ou assincronamente).
INTERFACE
É um contrato entre a classe e o mundo externo.
Em OO as coleções de métodos relacionados
podem ser definidos (mas não implementados)
dentro de uma interface.
Em OS concentra-se sobre a definição do
contrato de serviço e sua solução lógica básica.
ENCAPSULAMENTO
A separação de aspectos internos e externos de
um objeto é chamada de encapsulamento. Em
OO a noção deste esta ligada ao ocultamento de
informação.
O princípio é válido para OS, que está
interessado em ocultar informações sobre os
serviços.
OO
OS
OO
OS
OO
OS
OO
OS
HERANÇA
É o mecanismo pelo qual uma classe pode
estender outra classe, aproveitando seus
comportamentos e variáveis possíveis.
Em OS é desencorajado a utilização de herança
entre serviços, porque há uma ênfase na
autonomia individual de um serviço e reduzido
acoplamento entre serviços.
GENERALIZAÇÃO
Em OO a generalização é realizada quando uma
super-classe pai é definida. As sub-classes da
classe pai (especializadas) implementam
variações distintas de uma super-classe, essa
definição é referenciada como especialização.
Existem conceitos similares de generalização e
especialização dentro da orientação a serviços.
ABSTRAÇÃO
É a habilidade de concentrar nos aspectos
essenciais de um contexto qualquer, ignorando
características menos importantes ou acidentais.
Em OO o conceito de abstração também está
relacionado ao ocultamento de informação.
Conceitualmente, abstrações em OS são
similares a OO. Entretanto, como OS não
fornecem herança não existe uma noção
correspondente a classe abstrata.
POLIMORFISMO
Em OO, polimorfismo consiste em 4
propriedades:

Universal:
1Inclusão;
2Paramétrico.

Ad-Hoc:
3Sobrecarga;
4Coerção.
Como não existe herança na OS essa forma de
polimorfismo também não é aplicada a serviços
individuais.
A OO é um poderoso paradigma de programação em que
as aplicações são expostas funcionalmente através de
interfaces bem definidas chamadas de métodos. No entanto, a
aplicação chamada precisa ser escrita na mesma linguagem
do objeto que está tentando acessar. Se não for, é preciso de
um programa tradutor como mostrado na Fig. 2 [13].
Fig 2. OO e Interoperabilidade
Os WS fornecem uma forma padrão para a comunicação
entre os serviços, que podem ser escritos em linguagens
diferentes, como é mostrado na Fig. 3 [13].
Baixo acoplamento
de serviço
Abstração de
Serviços
Fig 3. OS e Interoperabilidade
Existem duas perguntas muito comuns, se SOA substitui
POO ou qual deles é o melhor. Uma resposta interessante é
dada no livro Enterprise SOA, por Dan Woods e Thomas
Mattern (O'Reilly). Sob a seção intitulada "Por que OS é
melhor do que OO ?" Dois pontos aparecem. A primeira
explica OO com a seguinte limitação: "No entanto, o
aplicativo de chamada deve ser redigida na mesma
linguagem que o objeto que está tentando acessar." O
segundo parágrafo é constituído de uma única frase: "WS
fornecem uma forma padrão para se comunicar entre os
serviços, que podem ser escritos em linguagens diferentes
[4]."
―Toda esta discussão, é claro, é um desperdício. A
comparação entre SOA e POO simplesmente não faz sentido,
porque eles têm finalidades diferentes [4].‖
Nem SOA nem POO é melhor ou substitui a outra. POO é
um paradigma de programação de aplicações, enquanto que
SOA é um paradigma de arquitetura para ambientes de
sistemas. SOA é a abordagem a utilizar para conectar os
sistemas de escritos em paradigmas OO e outros. Em outras
palavras, a menos que seja gerado um único programa, você
precisa de ambos [4].
Componibilidade
de Serviço
Autonomia de
Serviço
O acoplamento em geral, é uma
das qualidades principais de OS
que se desvia da OO.
A abstração de serviços tem como
finalidade ocultar os detalhes
subjacentes ao serviço, de modo
que apenas o contrato do serviço
esteja disponível.
OO
suporta
conceitos
de
associação, tais como agregação e
composição. Estes, dentro de um
contexto de baixo acoplamento,
também são suportados pela OS.
A qualidade de autonomia é mais
enfatizada em OS, do que em
OO.
Nicolai M. Josuttis [4] chega mais perto da realidade na
tentativa de comparar SOA e POO. Porque não faz muito
sentido esta comparação, pois são coisas diferentes.
Enquanto POO trata das características internas de um
sistema, SOA está mais relacionado à comunicação externa.
OO se preocupa com a flexibilidade e abstração, ao passo
que SOA está preocupado com conformidade com normas,
simplicidade, protocolos e refere-se tanto como estratégia de
negócios como um projeto de arquitetura baseado em
serviços de software. SOA não é um substituto de OO, sendo
este ultimo a melhor opção para projetos de aplicativos e
componentes.
REFERÊNCIAS BIBLIOGRÁFICAS
V. CONCLUSÕES
SOA não apresenta nenhum conceito novo. É um
paradigma que traz consigo conceitos existentes e práticas
específicas para um conjunto de requisitos.
Procurando na literatura – livros, artigos de conferências,
blogs especializados – são encontrados algumas comparações
entre SOA e POO. Mas, poucos materiais têm algo formal,
bem definido, separado e organizado.
SOA e POO tem alguns objetivos semelhantes como o
aumento da robustez, da extensibilidade, da flexibilidade, da
reutilização e da produtividade. Como mostrado acima – pela
comparação dos termos inerentes a OO com OS -, ambos tem
algumas similaridades, mas não são a mesma coisa, como
pode ser visto na Tabela II.
TABELA II - PRINCÍPIOS COMUNS DA OO
RELACIONADOS COM OS
Princípios de OS
Reutilização de
Serviços
Contrato de
serviço
Princípios da OO
relacionados
Grande parte da OO é voltada para
a criação de classes reutilizáveis.
A reutilização de serviço é uma
continuação deste objetivo.
Assim como as definições WSDL,
as interfaces fornecem um meio
de abstrair a descrição de uma
classe.
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
Thomas Erl. SOA Principles of Service Design. Prentice
Hall, 2007.
Thomas Erl. Service-Oriented Architecture: Concepts,
Technology, and Design. Prentice Hall, 2005.
J, Davis. Open Source SOA. Manning, 2009.
N. M. Josuttis. SOA in Practice The Art of Distributed
System Design. O’Reilly, 2007.
Gartner (D. Cearley, J. Fenn, and D. Plummer). 2005.
―Gartner’s Positions on the Five Hottest IT Topics and
Trends
in
2005.‖
http://www.gartner.com/DisplayDocument?id=480912.
Booch, Grady. 2006. Blog for March 2006, ―SOA Best
Practices‖.
http://www.booch.com/architecture/blog.jsp?archive=20
06-03.html.
W. Roshen. SOA-Based Enterprise Integration: A Stepby-Step Guide to Services-Based Application
Integration. McGraw-Hill, 2009
Hewitt, E. Java SOA Cookbook. O'Reilly Media, 2009.
P. C. Brown. Implementing SOA: Total Architecture in
Practice. Addison Wesley Professional, 2008.
M. Rosen, B. Lublinsky, K. T. Smith, M. J. Balcer.
Applied SOA: Service-Oriented Architecture and Design
Strategies. WileyPublishing, 2008
Booch and Kruchten. The Rational Unified Process —
An Introduction. Addison-Wesley,1999.
M.H. van Emden. Object-oriented programming as the
end of
history in programming languages.
[13]
[14]
[15]
[16]
[17]
Communications, Computers and Signal Processing,
1997. '10 Years PACRIM 1987-1997 - Networking the
Pacific Rim'. 1997 IEEE Pacific Rim Conference on.
D. Woods, T. Mattern. Enterprise SOA: designing IT for
business innovation. O’Reilly, 2006.
Takahashi, Tadao; Liesenberg, Hans K.E.; Xavier,
Daniel T. Programação orientada a objetos: uma visão
integrada do paradigma de objetos. São Paulo: IMEUSP, 1990.
Goldberg, Adele e D Robson, Smalltalk-80 The
Language and its Implementation, Addison-Wesley,
Reading, MA, 1983
Digitalk, Inc. Smalltalk/V 286 Tutorial and
Programming Handbook e Smalltalk /V Windows
Tutorial and Programming Handbook, Digitalk, Los
Angeles, 1988 e 1992.
Coad, Peter; Yourdon, Edward. Análise baseada em
objetos. Rio de Janeiro: Campus, 1992.
Download

um estudo comparativo entre soa e poo