Da mesma maneira que um arquiteto trabalha organizando os espaços para a
construção de uma casa, organizamos os componentes de software de maneira a distribuir da forma mais eficaz todos os componentes que farão parte do
nosso sistema. Existem várias formas de se projetar um software, dependendo
de seu objetivo e funcionalidade. Assim, também na arquitetura de software
são definidos modelos que podem ser utilizados para que cada projeto esteja
com o formato mais adequado para seu uso.
Começamos nesta aula o estudo da forma como nossos sistemas podem
agrupar seus componentes. Pelo estudo das camadas nas quais podemos
dividir nosso projeto, aprenderemos quais os tipos de arquitetura podemos
usar para que tenhamos um bom projeto. Dessa forma, estaremos nos preparando para as futuras fases de desenvolvimento de sistemas (codificação)
de forma planejada e que atenda às necessidades dos nossos clientes.
Definições de arquitetura de software
Após a fase em que levantamos os requisitos do sistema, precisamos nos
preparar para transformarmos esses requisitos em uma implementação.
Uma boa estratégia para chegarmos à implementação é dividirmos o problema em problemas menores. Assim, esses problemas menores podem ser
vistos como blocos, que possuem as seguintes vantagens:
a) podemos reutilizar esses blocos;
b) qualquer dependência dentro de um bloco fica local a ele;
c) podemos trocar blocos equivalentes;
d) alguns blocos podem ser padronizados.
A arquitetura de software mostra a forma como um sistema está dividido/
organizado; mostra como as classes, os subsistemas e as camadas estão logicamente organizados.
A organização é feita utilizando-se os conceitos de Camada e Partições.
🔔 Camada
É definida como uma divisão
lógica na arquitetura com uma
responsabilidade específica
sobre um tópico. Cada camada é
responsável por um conjunto de
classes, pacotes ou subsistemas
A interação entre as camadas se dá pela troca de informações entre elas, as
que estão nos níveis superiores e as de níveis mais inferiores.
Larman (2007) aponta dois tipos de camadas (Figura 6.1):
a) arquitetura em camadas estritas, quando uma camada solicita apenas
os serviços da camada inferior;
b) arquitetura em camadas relaxadas, quando uma camada superior solicita serviços de várias camadas inferiores.
Divisão de um sistema em camadas
Para facilitar a divisão das camadas de um software é importante que:
a) cada camada tenha uma responsabilidade bem definida;
b) as camadas sejam definidas de maneira que as de níveis inferiores executem serviços gerais e as de níveis superiores executem mais serviços
específicos do sistema;
c) as interfaces sejam do tipo caixa-preta (quando a camada n não sabe
nada sobre a camada n-1 e usa a interface pública para acessá-la) ou do tipo caixa- branca (quando a camada n conhece os detalhes da camada
n-1 e usa esse conhecimento para acessá-la).
Talvez os termos mais adequados para os nomes dessas interfaces na língua
portuguesa fossem: caixa opaca e caixa transparente. O nome “preta” é
usado por ser uma cor que não permite visibilidade. O nome “branca”, pelo
contrário, seria a cor que mais permitiria visibilidade. Assim, quando dizemos
que uma caixa é preta, estamos querendo dizer que não conseguimos ver o
que existe em seu interior, ou seja, não sabemos detalhes da implementação
daquele software. Por outro lado, a caixa branca seria aquela sobre a qual
sabemos tudo sobre a implementação de seu software.
Representação da arquitetura
de software na UML
A Figura 6.2 apresenta os símbolos que utilizamos em UML para representar os packages (pacotes) e subsistemas (partições de camadas complexas
de um sistema).
As Figuras 6.3 e 6.4 mostram um exemplo de arquitetura.
Observe que os exemplos acima são idênticos: mostram a mesma coisa. Ambos mostram os pacotes inseridos em seus respectivos subsistemas, porém
com representações gráficas distintas. Use a representação que achar mais
interessante em seus projetos.
Tipos de arquiteturas de sistemas
de informação mais comuns
Estudaremos nesta seção os tipos de arquitetura de sistemas que se encontram mais comumente no mercado de desenvolvimento de software.
Arquitetura em uma única camada
Essa arquitetura era muito comum até a década de 1980, com a utilização
de mainframes e terminais de computadores. Todo o processamento era
centralizado em um único computador.
Arquitetura em duas camadas
Essa arquitetura surgiu com a difusão da utilização dos microcomputadores
nas empresas e permite uma melhor escalabilidade na utilização dos recursos computacionais disponíveis. É uma arquitetura adotada nos sistemas
cliente-servidor tradicionais.
As duas camadas são (Figura 6.5):
a) camada Cliente: trata da lógica de negócio e da interface com o usuário;
b) camada Servidor: trata dos dados (sistema de banco de dados)
Arquitetura em três camadas
Essa arquitetura é uma melhoria da arquitetura em duas camadas e resolve
alguns problemas:
a) aumenta a escalabilidade;
b) permite mudança mais fácil na lógica da aplicação ou na interface com
o usuário;
c) permite acessar fontes de dados heterogêneas, isto é, sistemas gerenciadores de bancos de dados diferentes.
As camadas são três (Figura 6.6):
a) camada de Apresentação: interface gráfica com o usuário;
b) camada de Aplicação: lógica do negócio;
c) camada de Dados: sistemas de bancos de dados.
É importante lembrar que estamos falando de camadas lógicas. Fisicamente,
em uma mesma máquina, podemos ter mais de uma camada lógica, mas na
maioria das vezes isso não ocorre!
Arquitetura em n-camadas
Com a disseminação da internet, o acesso a sistemas via web tem se tornado
muito comum e útil.
Assim, surgiram as arquiteturas multicamadas, ou seja, aquelas que têm várias
camadas. Suas características são:
a) permitem o acesso por meio de navegadores web;
b) qualquer dispositivo pode acessar o sistema via web;
c) não necessitam da instalação de software nos clientes (só o navegador!);
d) a atualização do software é imediata;
e) permitem balancear a carga de serviços em vários servidores.
Uma arquitetura típica n-camadas é mostrada na Figura 6.7 a seguir.
Service oriented architecture (SOA) -
Arquitetura orientada a serviços
Uma arquitetura SOA permite que um programa acesse uma aplicação remota.
A tecnologia empregada atualmente é a de Web Services.
🔎 Web Service
É uma solução utilizada na
integração de sistemas e na
comunicação entre aplicações
diferentes. Com essa tecnologia
é possível que novas aplicações
possam interagir com aquelas
que já existem e que sistemas
desenvolvidos em plataformas
diferentes sejam compatíveis. Os
Web Services são componentes
que permitem às aplicações enviar e receber dados em formato
XML. Cada aplicação pode ter a
sua própria “linguagem”, que é
traduzida para uma linguagem
universal, o formato XML.
A SOA expõe as funcionalidades de um sistema para outro programa
Essa arquitetura apresenta como principais vantagens (SERAFINI; CUNHA,
2010, p. 80):
a) a independência de plataforma. Por exemplo, uma parte do sistema pode
ser feita em uma linguagem e a outra parte em uma segunda linguagem
de programação;
b) a integração de serviços de forma fácil;
c) composição de serviços para criar serviços maiores e mais complexos.
Resumo
Nesta aula aprendemos importantes conceitos sobre arquitetura de software. A
partir do detalhamento das partes que compõem conceitualmente o sistema,
chegamos aos pacotes e subsistemas. A arquitetura é a organização desses blocos de forma a aumentar a qualidade e eficácia dos sistemas.
Estudamos também os conceitos de caixa-preta e caixa-branca, que são utilizados quando estamos projetando a arquitetura de um software.
Na última seção desta aula vimos quais os tipos de arquiteturas são mais comumente usados no mercado: arquitetura em uma camada, arquitetura em duas
camadas, arquitetura em três camadas e, por fim, arquitetura em n-camadas.
A seguir, conheceremos um dos diagramas mais importantes da UML, o
diagrama de classes. A partir do levantamento dos requisitos do sistema e
da definição do modelo conceitual e da arquitetura, estaremos prontos para
definirmos as classes pertencentes ao sistema a ser desenvolvido, bem como
suas relações e métodos.