Arquitetura do sistema

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.

Postagens mais visitadas deste blog

O modelo em cascata: um modelo sequencial

Representação dos Elementos do Diagrama de classes

instalar WordPress no computador (localhost)