Escolar Documentos
Profissional Documentos
Cultura Documentos
ARQUITETURA
DE
SOFTWARE
2
ARQUITETURA DE
SOFTWARE
U1 - QUAIS SÃO OS
FUNDAMENTOS E CONCEITOS
BÁSICOS DA ARQUITETURA DE
SOFTWARE?
Introdução
A complexidade dos sistemas de software tem aumentado consideravelmente nas últimas
décadas devido à inclusão de novas interfaces, integração de várias mídias e novas tecnologias
de armazenamento e distribuição de dados. Nesse sentido, os engenheiros de software têm
utilizado novas abordagens, a fim de desenvolver sistemas com alto desempenho. Portanto,
desenvolver softwares com qualidade é uma questão que tem merecido a devida atenção dos
cientistas da computação.
Assim, podemos nos questionar: qual o papel da arquitetura de software? Quais são os
modelos de arquitetura? Como a implantação de um modelo de arquitetura de software pode
melhorar a qualidade dos sistemas de informação?
Você sabe qual o propósito da arquitetura de software? Segundo Galloti (2016, p. 3),
é o de “criar soluções [...] cada vez mais simples, rápidas e eficientes”. Além do
exposto pelo autor, devemos ir além, ou seja, não somente resolver problemas, mas
também prevenir a ocorrência deles e aperfeiçoar as soluções já existentes.
A história recente da Ciência da Computação mostra a evolução das técnicas e dos
métodos de desenvolvimento de sistemas, passando pela programação estruturada,
orientada a evento até a orientação a objeto, assim como a evolução da lógica dos
algoritmos e da estrutura de dados.
Diante da complexidade dos sistemas atuais, é inevitável que tenhamos estilos de
arquitetura acompanhando tal evolução. É necessário ter um conhecimento bastante
sólido dos fundamentos e conceitos básicos da arquitetura de software para
compreender a evolução dos sistemas de informação e a estruturação lógica e
abstrata deles, além de desenvolvê-los com confiabilidade e alta qualidade.
Qual o sentido fundamental de arquitetura de software? Para Galloti (2016, p. 10), ela
“[...] explica a forma como [ele] se organiza e funciona, além de seu modo de
implementação”. Portanto, agrega os componentes denominados elementos
arquiteturais (dados, processamentos e conexão), que se organizam de maneira
lógica para atender aos requisitos funcionais e não funcionais. Para tal, a arquitetura
de software deve ser clara, a fim de atingir o máximo da simplicidade, tendo o software
as seguintes características:
Quãdro 1 - Atributos essenciãis de quãlidãde de um softwãre, sendo pãrte integrãnte dã elãborãção dã ãrquiteturã de
um sistemã de informãção. Fonte: SOMMERVILLE, 2011, p. 5.
Existem arquiteturas de softwares com diversas abordagens, inclusive as que são orientadas para a
avaliação do processo de ensino-aprendizagem de forma contínua. Esta, inclusive, é bastante criativa e
interessante, e foi desenvolvida em uma pesquisa feita pelos autores Cunha; Filgueira; Viana (2017). Leia
mais em: <www2.ifrn.edu.br/ojs/index.php/HOLOS/article/download/5335/pdf>.
Quais são as visões e descrições que são necessárias ao se projetar uma arquitetura
de sistema? Quais notações devem ser usadas com o objetivo de se descrever os
modelos de arquitetura? É necessário considerar que é impossível representar todas
as informações relevantes da arquitetura de software em um único modelo, porque
8
Hofmeister; Nord; Soni (2000) argumentam que é necessário, também, incluir uma
visão conceitual, pois ela pode servir como uma decomposição dos requisitos de um
nível mais alto para um mais detalhado. Essa ferramenta é fundamental para a
administração da complexidade do sistema, porque pode esconder detalhes,
permitindo que os desenvolvedores se concentrem no nível de abstrações do
sistema.
A internet das coisas é uma revolução tecnológica recente que tem como objetivo
conectar os itens – ou seja, as coisas – utilizados no dia a dia com a internet. Cagnin
(2015) desenvolveu sua dissertação propondo uma arquitetura de software denominada
de “Uma arquitetura multiagente para o gerenciamento de dispositivos em ambientes
da internet das coisas”. Veja mais em:
<http://www.athena.biblioteca.unesp.br/exlibris/bd/cathedra/02-082017/000868971.pdf>.
Uma das possíveis visões que podem servir de referência para a construção da
arquitetura de um sistema é a Unified Modeling Language (UML), uma linguagem de
modelagem que serve para definir artefatos que auxiliam na tarefa de desenhar e
documentar os sistemas, sendo composta por diversos diagramas que compõem a
estrutura do projeto de arquitetura do sistema. Segundo Galloti (2016, p. 81, grifos
nossos), os diagramas UML são de:
Alguns autores têm opiniões divergentes pelo uso da UML para a construção da
arquitetura de software, pois às vezes ela é usada de forma inadequada para
demonstrar o comportamento dos componentes do sistema e suas relações. Sua
utilização – ou não – dependerá do nível de experiência do desenvolvedor e da
complexidade do sistema que se está implementando. Por outro lado, vários
pesquisadores indicam o uso de linguagens de descrição de arquitetura
(Architectural Description Languages, as ADLs) para apresentá-la. Os elementos
fundamentais das ADLs são os componentes e conectores, que agregam regras e
diretrizes para a arquitetura do sistema.
com exemplos e situações em que são utilizados, bem como suas vantagens e
desvantagens.
A arquitetura de um software pode ser baseada em um determinado padrão ou estilo.
Um padrão de arquitetura significa como o software é organizado: por exemplo,
existe o padrão de organização cliente-servidor e um padrão de arquitetura em
camadas. Esses padrões mostram o objetivo de uma arquitetura que foi utilizada em
sistemas de software diferenciados. Nesse sentido, o desenvolvedor, ao tomar
decisões sobre qual a arquitetura de um sistema, deve conhecer os padrões mais
comuns e saber onde eles podem ser usados e quais são seus prós e contras.
É necessário que o desenvolvedor saiba escolher a estrutura que mais se adequa às
necessidades do sistema a ser desenvolvido, como a arquitetura cliente-servidor ou
a em camadas, que seja capaz de permitir o atingimento dos requisitos do sistema.
Para que se decomponham em unidades estruturais do sistema, o desenvolvedor
deverá decidir sobre qual a estratégia utilizada para a decomposição de
componentes em seus subcomponentes. As abordagens que podem ser usadas
devem permitir a implantação de tipos distintos de arquitetura.
Por fim, ao chegar ao processo de modelagem de controle, é necessário tomar
decisões sobre como a execução dos componentes do sistema é controlada. Ou
seja, se desenvolve um modelo de visão mais alta dos relacionamentos de controle
entre as diversas unidades do sistema. Segundo Sommerville (2011, p. 106, grifos
nossos), devem ser analisados os seguintes requisitos para que se faça a escolha
do estilo de arquitetura:
Figurã 2 - Arquiteturã centrãlizãdã em dãdos demonstrãndo o deposito de dãdos e os softwãres ãssociãdos. Fonte:
Elãborãdã pelo ãutor, bãseãdo em PRESSMAN, 2016.
Figurã 3 - Arquiteturã de fluxo de dãdos demonstrãndo os filtros de dãdos e os tubos ãssociãdos. Fonte: Elãborãdã
pelo ãutor, bãseãdo em PRESSMAN, 2016.
Fi
gurã 4 - Arquiteturã de chãmãdãs e retornos demonstrãndo o progrãmã principãl e subprogrãmãs controlãdores e
de ãplicãção. Fonte: Elãborãdã pelo ãutor, bãseãdo em PRESSMAN, 2016.
igurã 5 - Arquiteturã em cãmãdãs demonstrãndo ãs diversãs cãmãdãs e os componentes ãssociãdos ã elãs. Fonte:
Elãborãdã pelo ãutor, bãseãdo em PRESSMAN, 2016.
Figurã 6 - Modelo dã orgãnizãção MVC com ã demonstrãção do fluxo de ãçoes e dãs mudãnçãs de estãdo. Fonte:
Elãborãdã pelo ãutor, bãseãdo em SOMMERVILLE, 2011.
Existe uma proposta de arquitetura de software baseada no padrão em camadas e que demonstra sua
aplicação na construção e integração de ambientes virtuais de aprendizagem. A arquitetura facilita a adição
de novos módulos a estes sistemas de forma distribuída. Essa proposta foi realizada por Sizo; Lino e Favero
(2010). Leia mais em:
<http://www.scielo.mec.pt/scielo.php?script=sci_arttext&pid=S164698952010000200003>.
Figurã 7 - Modelo cliente-servidor, demonstrãndo ã relãção entre clientes, internet e serviços disponíveis. Fonte:
Elãborãdã pelo ãutor, bãseãdo em SOMMERVILLE, 2011.
Os desenvolvedores estavam analisando qual seria o estilo de arquitetura que mais se adequaria ao
modelo desse tipo sistema. Segundo os princípios analisados, as arquiteturas centralizada em
dados, de fluxo de dados, orientada a objetos e em camadas não foram consideradas adequadas ao
perfil do sistema. Concluiu-se que o estilo de chamadas e retornos seria o que mais se acopla à
proposta de um ERP, devido ao fato de que esse estilo teria um programa principal: faria o controle
de informações e procedimentos entre os outros subprogramas e procedimentos remotos.
Você sabe dizer como decisões específicas de arquitetura podem ser feitas enquanto
o sistema é implantado? Como estas decisões impactam no desenvolvimento do
sistema? O primeiro passo importante no processo de projeto é tomar a decisão de
quais modelos de projeto que são necessários e o nível de detalhamento para eles.
Isso dependerá do tipo de sistema que está sendo desenvolvido.
A maneira de projetarmos um sistema sequencial de processamento é diferente da
maneira de fazer um sistema de tempo real – assim como a arquitetura terá modelos
de projeto diferentes. Por exemplo, segundo Sommerville (2011, p. 130, grifos
nossos), quando utilizamos a Unified Modeling Language (UML), geralmente
utilizamos dois modelos de projeto:
John von Neumann foi um cientista que contribuiu fortemente para a evolução da Ciência da Computação,
sendo um dos construtores do primeiro computador: o Eniac. Foi responsável pelo aprimoramento do poder
computacional, levando-o a um aperfeiçoamento da estrutura lógica do processamento de dados,
contribuindo de maneira inigualável para a evolução da Ciência da Computação. Veja mais a respeito no
livro de Fonseca Filho (2007), disponível em:
<http://www.pucrs.br/edipucrs/online/historiadacomputacao.pdf>.
Você sabe qual é o objetivo e quais são as decisões que precisamos tomar ao fazer
um projeto de arquitetura de um sistema? Entender e saber desenvolver um bom
projeto de arquitetura é fundamental para o sucesso de um sistema.
O projeto de arquitetura é focado na compreensão de como um sistema de
informação deverá ser organizado e como é estabelecida a estrutura global do
sistema. No modelo do processo de desenvolvimento de um sistema, consideramos
o projeto de arquitetura como o primeiro estágio do processo de projeto de software.
Assim, uma arquitetura de software serve, fundamentalmente, como um plano de
projeto para a negociação de requisitos de sistema com seus usuários e, em
seguida, como uma forma de estruturar as discussões com os desenvolvedores e
gerentes. É também uma ferramenta essencial que pode gerenciar a complexidade,
pois pode esconder detalhes e permitir que os desenvolvedores foquem nas
abstrações do sistema.
22
O filme O jogo da imitação (TYLDUM; MOORE, 2014) mostra a história do matemático Alan Turing –
considerado o pai da informática – e sua tentativa de quebrar um código de comunicação nazista durante
a 2ª Guerra Mundial. O longa-metragem mostra um episódio fundamental na história da computação. Não
deixe de conferir.
Neste momento, podemos nos questionar: como os sistemas operam entre si? O que
temos como resposta é o que chamamos de contexto de arquitetura, que representa
como o sistema interage com entidades externas a seus limites. O desenvolvedor,
para modelar como o sistema interage com suas entidades externas, utiliza o
Diagrama de Contexto Arquitetural, e os sistemas que interagem com o chamado
sistema-alvo são representados segundo Pressman (2016, p. 240, grifos nossos)
como:
Figurã 9 - Exemplo do Diãgrãmã de Contexto em um sistemã de segurãnçã domiciliãr. Fonte: Elãborãdã pelo ãutor,
bãseãdo em PRESSMAN, 2016.
Síntese
SOBRE ARQUITETURA
Referências
GALLOTI, G. M. A. Arquitetura de Software. São Paulo: Pearson
Education do Brasil, 2016.
TETURA DE SOFTWARE
U 2 - QUAIS SÃO AS
ABORDAGENS ALTERNATIVAS E
DE ARQUITETURA PARA
SISTEMAS WEB E APLICATIVOS
MÓVEIS?
Introdução
Com o grande avanço da web e dos dispositivos móveis nos últimos anos, os cientistas da
computação se viram diante de grandes desafios. Quais são as abordagens da arquitetura de
software que foram elaboradas para contemplar esses novos modelos de sistemas? Como
esses sistemas são tratados no processo de projeto, desenvolvimento e implantação? Existem
modelos alternativos de arquitetura de software? Estas questões se tornam relevantes, visto a
convergência de novas mídias e aplicativos para web e dispositivos móveis.
O desenvolvimento de sistemas está cada vez mais atrelado às inovações tecnológicas,
surgindo, assim, novas linguagens e novos modelos de arquitetura em um intervalo cada vez
menor de tempo. O que temos é uma tendência de se projetar sistemas mais dependentes
da web e dos dispositivos móveis, a fim de atender aos modelos de negócio contemporâneos.
Temos visto que diversos serviços que eram oferecidos em plataformas tradicionais estão
migrando paulatinamente para ambiente web ou para dispositivos móveis. Mais do que isso:
diversos serviços já nascem nestes ambientes. Um exemplo claro são os aplicativos urbanos
para transporte de passageiro.
Neste capítulo, veremos como a arquitetura de software é modelada para aplicações web e
dispositivos móveis, analisaremos quais são as avaliações possíveis das alternativas de
projetos, descreveremos como é empregada a linguagem de descrição da arquitetura (ADL) e,
por fim, como é feita a verificação de conformidade da arquitetura de software. Desejamos
um excelente estudo.
Desenvolver sistemas para web e dispositivos móveis é uma tarefa complexa, pois
essas aplicações sempre agem integrando diversos bancos de dados e
componentes distribuídos, além de suportarem perfis múltiplos de usuários. Quais
as características específicas na criação da arquitetura de software para ambiente
30
1. Cada vez mais, indivíduos e sociedades dependem dos sistemas de software avançados.
Temos de ser capazes de produzir sistemas confiáveis econômica e rapidamente. 2.
Geralmente é mais barato, a longo prazo, usar métodos e técnicas da engenharia de software
para sistemas de software, em vez de simplesmente escrever os programas como se fossem
algum projeto pessoal. Para a maioria dos sistemas, a maior parte do custo é mudar o
software depois que ele começa a ser usado.
Figurã 1 - Modelo MVC demonstrãndo ã relãção entre o Modelo, ã Visão e o Controlãdor e os eventos ãssociãdos ãos
componentes. Fonte: Elãborãdã pelo ãutor, bãseãdo em JÚNIOR; FORTES, 2007.
Vimos, na figura anterior, que o componente Visão envia um determinado evento para
o componente Controlador que, a partir daí, chama um método que alterará o estado
do Modelo. A partir do momento em que o Modelo tem o estado alterado, este
componente informa à Visão, por meio do Controlador, o novo estado em que ele se
encontra. A partir daí, a Visão procura os dados no Modelo. Concluindo, o modelo
MVC é formado pelas entidades que agrupam os dados (apresentados pelo
componente Visão, que pode ser uma interface gráfica, por exemplo). Por outro lado,
o Controlador pode ser classes que têm métodos que permitem que o componente
Modelo seja atualizado a partir dos eventos que foram disparados pelas Visões. Na
figura a seguir, demonstraremos um exemplo de interação entre os componentes do
padrão MVC em uma aplicação Java. Neste esquema, há a apresentação de como
os dados são apresentados no componente Visão: os pontos ‘x’ e ‘y’, o nível de
opacidade das informações apresentadas, o estilo da fonte e um texto descritivo.
Neste caso, um evento será disparado pelo botão change, que está na interface
gráfica. A partir do momento em que este evento é disparado, os dados são enviados
para o componente Controlador, no qual estão as classes que possuem os métodos
32
que permitem ao componente Modelo ser atualizado a partir dos eventos disparados
pelo componente Visão.
Figurã 2 - Exemplo de interãção entre os componentes do pãdrão MVC e suãs interãçoes de umã ãplicãção em
linguãgem Jãvã. Fonte: SÚN, 2007 ãpud JÚNIOR; FORTES, 2007, p. 6.
• Arquitetura distribuída
Tem como característica principal desacoplar as regras de negócio do software (que
se encontram na camada de Modelo) das regras relativas de apresentação (camadas
de Visão e Controle). Assim, as aplicações para dispositivos móveis são
desacopladas das aplicações corporativas, e a comunicação ocorre por meio dos
35
serviços via web. O que temos é que as aplicações para dispositivos móveis agregam
exclusivamente as regras de visualização e controle. No lado das aplicações
corporativas, acoplam-se as regras de negócio.
Suas vantagens são:
• Arquitetura centralizada
Tem como principal característica englobar, em uma única aplicação, todas as
camadas e regras do sistema. A alteração desta arquitetura está na interface, na qual
a estrutura de dispositivo móvel serve para adaptar a interface da aplicação para
telas menores e sensíveis ao toque, melhorando a usabilidade dos usuários. A
camada de Modelo fica responsável somente para acessar serviços externos.
Segundo Pilar (2005, p. 26),
Figurã 4 - Exemplo de ãrquiteturã pãrã ãplicãtivos moveis com ãs cãmãdãs físicãs e logicãs e suãs interãçoes.
Fonte: Elãborãdã pelo ãutor, bãseãdo em LEE, 2005.
Vannevar Bush foi professor do Instituto de Tecnologia de Massachusetts (MIT) na década de 1920 e um
dos responsáveis pela criação dos primeiros modelos de formulação matemática para problemas em teoria
dos circuitos, dando uma base fundamental para a criação dos primeiros modelos de computadores. Leia
mais em Fonseca Filho (2007).
39
O filme Caçada virtual (NEWMAN et al., 2000) é bastante interessante para compreender como atuam os
chamados os hackers éticos (ethical hacking). Este longa-metragem mostra a história real de Kevin Mitnick,
que utilizou todo o seu conhecimento em computação para entrar no sistema do FBI e acessar documentos
altamente sigilosos, tornando-se o criminoso mais procurado dos Estados Unidos na época.
[As ADLs] podem ser usadas como base para o desenvolvimento dirigido a modelos. No
entanto, acredito que os modelos e as notações informais, como a UML [ unified modeling
language, ou seja, a linguagem de modelagem unificada], continuarão a ser a forma mais
comumente usada para documentar arquiteturas de sistema.
Portanto, para atender à necessidade de usar a ADL, foram criadas linguagens como:
• manualmente;
• por meio de técnicas e ferramentas, como a Matriz de Dependência
Estrutural (DSM), modelos de reflexão ou testes de design.
A arquitetura orientada a serviço (SOA) é considerada complexa pelos pesquisadores e pela Academia
sobre os meios para sua construção. O artigo publicado por Serman (2010) visa trazer o gerenciamento de
portfólio de projetos de software como uma opção para orientar o desenvolvimento da SOA. Quer ler mais?
Acesse: <http://www.scielo.br/pdf/jistm/v7n3/07.pdf>.
1. Componentes são independentes, então eles não interferem na operação uns dos outros.
Detalhes de implementação são ocultados. Implementação dos componentes pode ser
alterada sem afetar o restante do sistema.
2. Os componentes comunicam-se por meio de interfaces bem definidas. Se essas
interfaces forem mantidas, um componente poderá ser substituído por outro, que forneça
funcionalidade adicional ou aumentada.
3. As infraestruturas dos componentes oferecem uma gama de serviços-padrão que podem
ser usados em sistemas de aplicações, o que reduz a quantidade de códigos novos a serem
desenvolvidos.
serviço. Não é necessário preocupar onde ele está sendo executado ou em que
linguagem foi desenvolvido.
Uma universidade de grande porte estava reorganizando o seu portal web, que já se encontrava em
um formato obsoleto. Foram propostas duas metodologias diferentes a serem aplicadas: uma de
design centrada no usuário e outra de design participativo. Este tipo de abordagem impactaria no
modelo de arquitetura de implantação do novo portal. O objetivo era propor uma metodologia para
a reestruturação, priorizando a organização e facilidade de uso do site. A primeira etapa foi a
realização de uma entrevista com os usuários para obter as necessidades fundamentais. O
problema é se seria adotada a metodologia orientada no perfil do usuário ou na tarefa. A
metodologia orientada ao perfil do usuário leva a uma arquitetura a um modelo no qual o foco está
centrado na interface. Por outro lado, uma metodologia orientada na tarefa faz com que a
arquitetura esteja mais centrada no modelo cliente-servidor.
interface, e todas as interações se dão por meio dessa interface. A interface de componente
é expressa em termos de operações parametrizadas e seu estado interno nunca é exposto.
Assim, o componente tem duas interfaces que se relacionam, e elas mostram o
serviço que o componente fornece e os serviços que ele necessita. Segundo
Sommerville (2011, p. 318), “a interface ‘provides’ define os serviços prestados pelo
componente. Essa interface, essencialmente, é API de componente. Ela define os
métodos que podem ser chamados por um usuário do componente [...]”. Em um
diagrama de componentes UML (sigla para unified modeling language, isto é, a
linguagem de modelagem unificada), a interface ‘provides’ para um componente é
indicada por um círculo no fim de uma linha a partir do ícone de componente. Na
figura a seguir, demonstramos um modelo genérico de um componente e as
interfaces ‘requires’ e ‘provides’.
Por outro lado, Sommerville (2011, p. 318) nos diz que “a interface ‘requires’ especifica
quais serviços devem ser fornecidos por outros componentes no sistema se um
componente deve funcionar corretamente. Se eles não estiverem disponíveis, o
componente não funcionará. [...]”. Isso não compromete a independência ou a
capacidade de implantação de um componente, pois a interface ‘requires’ não define
como esses serviços deverão ser prestados. Em UML, o símbolo de uma interface
‘requires’ é um semicírculo no fim de uma linha, a partir do ícone de componente.
Na figura a seguir, demonstraremos as interfaces ‘requires’ e ‘provides’ de um
componente coletor de dados, projetado para coletar e reunir informações a partir de
um vetor de sensores.
45
ele é executado autonomamente para coletar dados durante um período e, sob requisição,
fornece dados agrupados para um componente. A interface ‘ requires’ inclui métodos para
adicionar, remover, iniciar, parar e testar sensores. O método report retorna os dados do
sensor que foram coletados e o método listAll fornece informações sobre os sensores
conectados.
Sommerville (2011) ainda nos informa que existe o serviço externo e um componente
como elemento de programa, mas eles são diferentes: o primeiro é uma entidade
independente, já o último pode usar esses serviços sem a necessidade de se
implementar nenhum suporte adicional exigido por eles.
Por outro lado, para componentes implantados como unidades de programa, no lugar
de serviços externos, o modelo de componentes define os serviços que são
fornecidos pelo middleware. Este, por sua vez, oferece suporte para a execução dos
componentes, sendo “o software que se encontra entre o sistema operacional e os
aplicativos nele executados” (MICROSOFT AZURE, 2018). Segundo Sommerville
(2011, p. 320, grifos nossos), podemos dividir os serviços fornecidos por uma
implementação de modelo de componente em duas categorias:
Síntese
Concluímos este capítulo compreendendo como as arquiteturas de software se adaptam e se
modelam às novas tecnologias de sistemas, como ambiente web e dispositivos móveis. Vimos que
existem alternativas para a criação de arquiteturas dependendo da aplicação e do ambiente de
negócios no qual ele está inserido. Essas arquiteturas devem se acoplar aos modelos, e não existe
uma regra rígida, mas sim um bom senso na criação e definição das linguagens, dos modelos e das
características dos sistemas.
Projeto
Vamos Praticar
Baseado nos casos mencionados anteriormente, descreva como os componentes de software
podem ser identificados, construídos e mantidos? Além disso, como seria a forma de
relacionamento entre eles? Ao final, disponibilize seu trabalho no fórum da seção.
51
Referências
GALLOTI, G. M. A. Arquitetura de software. São Paulo: Pearson
Education do Brasil, 2016.
ARQUITETURA DE
SOFTWARE
U 3 - QUAIS SÃO OS PADRÕES
UTILIZADOS NA IMPLANTAÇÃO
DE ARQUITETURA DE SOFTWARE?
Introdução
Elaborar a arquitetura de um software tem sido uma tarefa complexa para muitos
desenvolvedores de sistemas. Dependendo do tamanho e do objetivo do sistema, são
desenvolvidas milhares de linhas de código, centenas de componentes e conectores, várias
bibliotecas, integração com sistemas legados, servidores de aplicações, tabelas de banco de
dados, segurança de acesso, alta disponibilidade e vários requisitos funcionais e não funcionais
que elevam a complexidade da arquitetura. Além disto, nos últimos anos, houve uma evolução
tecnológica de software e hardware exponencial, com dispositivos móveis possuindo novas
funcionalidades e alta integração de múltiplas plataformas. O que temos são diversos modelos,
padrões e estilos de arquitetura de software e de projetos que foram criados e evoluídos para
atenderem às novas tecnologias. Estes modelos e padrões devem ser aplicados conforme o
cenário e o objetivo do sistema.
Nesse sentido, saber escolher de forma correta os padrões de arquitetura de software se torna
uma função fundamental. Diante desse cenário, temos as seguintes questões: quais são os
padrões disponíveis para a implantação de uma arquitetura de software? Como analisar os
fundamentos do projeto da arquitetura? Como descrever as atividades e as funcionalidades de
um determinado padrão de arquitetura?
Neste capítulo, veremos como distinguir projeto de conteúdo de projeto funcional e saberemos
identificar a fronteira entre conteúdo e função. Apresentaremos, também, a forma de
descrever a engenharia de domínio e analisar os tipos de padrões de arquitetura. Por fim,
descreveremos o funcionamento do projeto baseado em padrões e distinguiremos padrões de
arquitetura, de componentes e de interfaces do usuário.
mas aqueles chamados open source não fornecem elementos que permitam tolerar
falhas e deixam os usuários vulneráveis às falhas de um ambiente de tecnologia. Veja
a dissertação de Martins (2014) e saiba
mais: <https://repositorio.unesp.br/bitstream/handle/11449/127619/000843909.pdf?se
quence=1&isAllowed=y>.
O projeto de conteúdo identifica o escopo completo do conteúdo a ser fornecido pelo
aplicativo na web. Nesse sentido, o conteúdo pode aparecer na forma de texto,
gráficos, imagens, vídeo ou áudio, sendo que ele é o elemento estrutural para
fornecer uma visão fundamental dos requisitos para o aplicativo. Esses elementos
compreendem os objetos de conteúdo e todas as classes de análise, cujas entidades
são visíveis aos usuários que foram criadas ou manipuladas, na proporção em que
o usuário interage com o aplicativo.
Segundo descrito por Pressman (2016, p. 199), “O conteúdo pode ser desenvolvido
antes da implementação da Webapp, enquanto a Webapp está sendo construída ou
bem depois de estar em funcionamento”. Nesse caso, os objetos de conteúdo podem
ser tanto uma descrição textual de um produto quanto uma foto, uma animação etc.
Eles podem ser guardados como arquivos diversos, sendo incorporados diretamente
em páginas da web ou também obtidos de forma direta e dinâmica em um banco de
dados. Quer dizer, um objeto de conteúdo significa qualquer informação que seja
coesa e que deve ser apresentada ao usuário final.
Portanto, os objetos de conteúdo podem ser obtidos a partir dos casos de uso,
analisando a descrição do cenário para obter as referências diretas e indiretas ao
conteúdo. Assim, o projeto de conteúdo tem como objetivo fazer a descrição do
conteúdo componente. Em algumas situações, uma lista dos objetos de conteúdo
com uma descrição sucinta dos objetos já é suficiente para se definir os requisitos
para os conteúdos que serão projetados. Porém, em alguns casos, o projeto de
conteúdo pode ser obtido a partir de uma análise que demonstre, graficamente, os
relacionamentos entre os objetos de conteúdo e a hierarquia do conteúdo do
aplicativo.
O filme A rede social (SORKIN; MEZRICH, 2010) retrata a história de Mark Zuckerberg e da evolução do
Facebook, uma verdadeira revolução na sociedade moderna. O longa-metragem mostra o início da rede
desenvolvida por Mark, dentro da Universidade de Harvard, e as desavenças entre Zuckerberg e os outros
fundadores, inclusive com o brasileiro Eduardo Saverin.
Podemos criar uma árvore de dados com a elaboração para qualquer conteúdo
composto de vários objetos de conteúdo e cujo objetivo é tentar demonstrar as
relações hierárquicas entre os objetos de conteúdo, oferecer uma maneira de
revisar o conteúdo para que as omissões e inconsistências sejam mostradas antes
do início do projeto e servir de base para o projeto de conteúdo.
Na figura a seguir, demonstraremos uma árvore de conteúdo para um componente
de um sistema de vendas. Neste exemplo, temos a decomposição de um
determinado componente mecânico em suas descrições e podemos observar que há
uma relação hierárquica. Entre as descrições, temos tanto elementos técnicos
55
Por outro lado, segundo Sommerville (2011), muitos aplicativos móveis podem
oferecer várias funções computacionais e manipuladoras, as quais podem ser
associadas diretamente ao conteúdo e são a meta principal de interação com o
usuário. Nesse sentido, o projeto funcional se associa com dois elementos de
processamento de aplicativos, com diferentes níveis de abstração procedural
(SOMMERVILLE, 2011, p. 201):
Este modelo baseado em componentes leva ao reuso, o que proporciona uma série
de benefícios aos engenheiros de software, como a redução no tempo de ciclo de
vida de desenvolvimento e no custo do projeto. Mas, para ocorrer, isso deve ser um
procedimento da cultura do grupo de desenvolvedores.
Na arquitetura de software, a reutilização de modelos é considerada uma das estratégias com mais
receptividade nas propostas metodológicas, chegando a envolver de forma exaustiva o conceito de modelo.
Ela promete, na construção de uma aplicação de software, construir modelos e transformá-los de forma
semiautomática no código de um sistema de informação. Ainda existem grandes desafios para se enfrentar
na adoção de enfoques centrados em modelos, como uma grande diversidade de técnicas, linguagens e
ferramentas para transformar modelos. Acesse o artigo publicado por Quintero; Duitama-Muñoz (2011) e
leia mais: <http://revistas.javeriana.edu.co/index.php/iyu/article/view/1131/810>.
Uma das boas práticas de engenharia de software é a utilização do reuso, acarretando uma melhoria
considerável para a qualidade dos artefatos de software. Nesse sentido, pesquisas em engenharia de
domínio têm proposto métodos e abordagens, objetivando e apoiando o reuso de software. Quer ler mais?
Acesse a dissertação de Brandes; Bacelo (2010) em:
<http://repositorio.pucrs.br/dspace/bitstream/10923/6778/1/000460611-Texto%2bCompleto-0.pdf>.
Fonseca Filho (2007, p. 101) explica a importância do engenheiro Konrad Zuse para a evolução da Ciência
da Computação: “[...] foi o primeiro engenheiro a criar máquinas de cálculo controladas automaticamente.
Esse engenheiro civil percebeu de forma rápida que um dos aspectos mais onerosos ao se fazerem longos
cálculos com dispositivos mecânicos era guardar os resultados intermediários para depois utilizá-los nos
lugares apropriados nos passos seguintes. Este foi um dos princípios da computação moderna”.
Por fim, na composição aditiva, que corresponde à situação (c) na figura apresentada
anteriormente, ocorre quando dois ou mais componentes são colocados juntos para
se criar um novo componente, que engloba suas funcionalidades. A interface
‘provides’ e a interface ‘requires’ do novo componente é uma combinação das
interfaces correspondentes nos componentes A e B. Conforme descrito por
Sommerville (2011, p. 326), “Os componentes são chamados separadamente por
meio da interface externa do componente composto. A e B não são dependentes e
63
não chamam uns aos outros”. Esse tipo de composição pode ser usado com
componentes.
3.3 Pãdroes de projeto
Os padrões de projeto foram obtidos a partir das ideias apresentadas por Christopher
Alexander [...], que sugeriu haver padrões comuns de projeto de prédios que eram
inerentemente agradáveis e eficazes. O padrão é uma descrição do problema e da essência
de sua solução, de modo que a solução possa ser reusada em diferentes contextos. O
padrão não é uma especificação detalhada. Em vez disso, você pode pensar nele como uma
descrição de conhecimento e experiência, uma solução já aprovada para um problema
comum.
Por fim, os padrões podem suportar reuso de conceito em alto nível. Ao buscar o
reuso de componentes executáveis, pode acontecer de ter limitações nas decisões
do projeto detalhado feito pelos implementadores: desde os algoritmos particulares
(que são usados para implantar os componentes) até os objetos e a interface de
componentes.
com que o sistema se torne independente da forma como são seus objetos. Uma
topologia é apresentada por Farias (2006, p. 31, grifos nossos) e descreve que os
padrões podem ser classificados como:
• Padrões estruturais: tem como objetivo se ocupãrem com ã mãneirã como clãsses e
objetos são compostos pãrã criãr estruturãs mãiores. Então, ãs herãnçãs são utilizãdãs
pelos pãdroes de clãsse pãrã que sejãm compostãs ãs interfãces ou implementãçoes. Por
outro lãdo, os objetos descrevem como os objetos devem ser compostos pãrã ãs novãs.
• Padrões comportamentais: têm como foco o algoritmo e as responsabilidades
atribuídas entre os objetos do sistema. Não é objetivo, portanto, descrever
os padrões em si, mas as comunicações que são realizadas entre os objetos.
• Padrões para persistência: têm como objetivo descrever soluções para
problemas de armazenamento de informações.
• Padrões para apresentação: têm como objetivo definir as soluções para
problemas comuns no projeto da interface de software. É considerado um
caso particular dos padrões de projeto.
[...] utilização de padrões formaliza o método de descrição dos padrões, e o uso de padrões
não limitaria os desenvolvedores às soluções prescritas, mas garantiria a presença de
elementos fundamentais, e a possibilidade de aperfeiçoa-la através das experiências
adquiridas.
Nas últimas décadas, o software deixou de ser uma parte pequena e de custo baixo
dos sistemas para se tornar parte fundamental e dispendiosa. Hoje em dia, tudo o que
se toca tem software, seja no uso doméstico ou nas organizações. O artigo de Silva
Filho (2015) discute a onipresença do software, as mudanças no cotidiano das pessoas
e organizações, e a preocupação com profissionais da área de engenharia de software.
Leia mais
em: <http://periodicos.uem.br/ojs/index.php/EspacoAcademico/article/view/29122/151
24>.
Síntese
Concluímos este capítulo compreendendo como distinguir projeto de conteúdo de projeto funcional
e suas fronteiras. Também foi possível compreendermos os fundamentos de componentes para
ambiente web e aplicativos móveis. Apresentamos como analisar o processo de desenvolvimento
baseado em componentes, a engenharia de domínios e demonstramos os padrões de projeto e
projetos baseados em padrões.
Projeto
PROJETO DE SOFTWARE BASEADO EM PADRÕES
73
Vamos Praticar
Baseado no caso mencionado acima, como os padrões de projetos de software podem ser
utilizados para que melhore a qualidade do software e o projeto de arquitetura? Além disso, de
que maneira os padrões de projeto permitem a criação de arquiteturas robustas? Ao final,
disponibilize seu trabalho no fórum da seção.
Referências
GALLOTI, G. M. A. Arquitetura de software. São Paulo: Pearson
Education do Brasil, 2016.
ARQUITETURA DE
SOFTWARE
U4 - COMO O DESENVOLVEDOR
DEVE DECIDIR SOBRE QUAL
76
ARQUITETURA UTILIZAR OU SE
DEVE TERCEIRIZAR O
DESENVOLVIMENTO?
Introdução
Diante desse cenário, temos as seguintes questões: quais são os modelos e padrões para
aplicações web e de aplicativos móveis? Quais são os parâmetros que auxiliam os
desenvolvedores a utilizarem determinado padrão? Como são desenvolvidos e aplicados os
projetos de arquitetura? É mais coerente desenvolver ou terceirizar o desenvolvimento de um
aplicativo? Para respondê-las, abordaremos neste capítulo como o desenvolvedor deve decidir
sobre qual arquitetura utilizar ou se deve terceirizar o desenvolvimento. Analisaremos como
identificar os padrões de arquitetura para ambiente web e para dispositivos móveis.
Explicaremos o que são sistemas distribuídos e quais são seus padrões. Mostraremos, também,
os sistemas embutidos, suas características e como criar projetos de arquitetura para tais
sistemas. Por fim, demonstraremos a web service e a arquitetura orientada a serviços.
Após a explanação desses tópicos, você será capaz de decidir quais os padrões e modelos de
arquitetura adotar, como aplicá-los a cada situação específica e objetivo de determinado
sistema, obtendo sistemas eficientes e com alto nível de qualidade.
Projetãr softwãre orientãdo ã objetos e umã tãrefã difícil, mãs projetãr softwãre reutilizãvel orientãdo ã
objetos e ãindã mãis difícil. E necessãrio modelãr objetos pertinentes, fãtorã -los em clãsses no nível correto
de grãnulãridãde, definir ãs interfãces dãs clãsses e ãs hierãrquiãs de herãnçã e estãbelecer ãs relãçoes
entre eles.
• O produto que estã sendo desenvolvido deve fãzer uso de componentes ‘ open source’?
• Úmã ãbordãgem ‘open source’ deve ser usãdã pãrã o desenvolvimento de softwãre?
Segundo Pressman (2016), a arquitetura não é o software operacional, mas sim uma
representação que permite, primeiramente, analisar a efetividade do projeto para
atender os requisitos que foram declarados na engenharia de requisitos, considerar
as possíveis arquiteturas na fase inicial do projeto e, por fim, reduzir os riscos de
construção do software.
Conforme explicado por Langmann (2013), a definição da arquitetura de um software
influencia diretamente na sua qualidade, pois o sistema deve ser capaz de evoluir e
suportar mudanças, obtendo-se uma visão do software como um todo. O projeto de
um sistema, focando na sua arquitetura, consiste em descrever o sistema em um
nível mais alto, definindo seus principais elementos, que são os seus módulos. Na
sequência deve ser realizado o refinamento e detalhamento de seus recursos e suas
funcionalidades, explicitando como eles interagem. Demonstraremos na figura a
seguir a decomposição.
78
Open source são recursos e serviços oferecidos pela internet, entregues a partir de centros de dados
localizados em todo o mundo. Com seu rápido crescimento, a preocupação com a necessidade de serviços
79
oferecidos e de implantar um ambiente tolerante a falhas é grande. Martins (2014) desenvolveu sua
dissertação com o objetivo de criar um mecanismo totalmente tolerante a falhas. Leia mais em:
<http://www.athena.biblioteca.unesp.br/exlibris/bd/cathedra/31-08-2015/000843909.pdf>.
• cãsos de uso;
• diãgrãmãs de sequenciã; • prototipos de interfãce.
Pressmann (2016) demonstra que o modelo funcional de uma aplicação web lida com
dois elementos de processamento: as funcionalidades observáveis pelo usuário e as
operações contidas nas classes do sistema. Por outro lado, este mesmo autor (2016)
explica que o modelo de navegação expõe como cada categoria de usuário navegará
de um elemento web para outro, sendo que a lógica de navegação é definida como
parte do projeto. Por fim, o padrão para web pode usar a maioria dos elementos do
padrão de sistemas tradicionais, adicionando-se características próprias desse
ambiente: conteúdo, interação, navegação e configuração cliente-servidor.
• A publicãção (deploy) dã ãplicãção web mobile tornã-se independente dos serviços remotos
utilizãdos por elã.
• O controle de versoes dã ãplicãção web mobile ficã segregãdo de quãlquer serviço web
utilizãdo.
• Desãcoplãmento entre ã ãplicãção web mobile e ãs regrãs negociãis envolvidãs nos serviços
web consumidos.
• A ãplicãção web mobile pode reusãr diversãs funcionãlidãdes contidãs em outrãs
ãplicãçoes.
• Multiplãtãformã, devido suã nãturezã web.
• Possibilidãde de reusãr o sistemã de segurãnçã nãs ãplicãçoes web mobile.
• Não requer instãlãção do ãplicãtivo no dispositivo movel.
81
Por outro lado, a arquitetura centralizada concentra uma aplicação exclusiva e com
responsabilidade relacionadas a todas as camadas (MVC). Neste modelo da camada
de visualização, o framework é utilizado para adaptar a apresentação da aplicação a
partir das características próprias de cada dispositivo móvel. A seguir,
apresentaremos um modelo de arquitetura centralizada.
82
Outras arquiteturas para dispositivos móveis são as arquiteturas nativas, que são
aplicações implantadas para serem executadas no próprio ambiente do dispositivo
móvel.
sistema, ela se torna independente de terceiros e tem o poder sobre todo o processo
de desenvolvimento. O que acontece: na maioria das vezes, a decisão é tomada
somente com base em custos, ou seja, terceirizar reduz os custos? Existe, também,
a questão de fabricá-lo: a empresa pode, estrategicamente, desenvolver o sistema e
comercializá-lo, mesmo que esse não seja o seu ramo, planejando a diversificação
do negócio.
Segundo Sommerville (2011), uma das decisões de implementação mais importantes
que precisam ser tomadas em um estágio inicial de um projeto de software é se você
deve ou não comprar ou construir o software de aplicação. Atualmente, é possível
adquirir sistemas de prateleira (COTS, do inglês commercial off-the-shelf) em uma
ampla variedade de domínios. Os sistemas podem ser adaptados e ajustados aos
requisitos dos usuários. Por exemplo, se quiser implementar um sistema de
prontuário médico, você pode comprar um pacote que já seja usado em hospitais.
Essa abordagem pode ser mais barata e rápida do que desenvolver um sistema em
uma linguagem de programação convencional.
Para solucionar esse problema, foi implantada a solução SOA, isto é, um conceito de arquitetura
que efetua a integração entre o negócio e a TI por meio de conjunto de interfaces de serviços
acoplados.
A implantação da SOA agregou valor aos negócios da instituição bancária, sendo um recurso
estratégico para o aumento da competitividade da organização.
• Trãnspãrenciã. Em que medidã o sistemã distribuído deve ãpãrecer pãrã o usuãrio como
um unico sistemã? Quãndo e util ãos usuãrios entender que o sistemã e distribuído?
85
• Tãmãnho. Deve ser possível ãdicionãr mãis recursos ã um sistemã pãrã lidãr com um
numero crescente de usuãrios. Existe umã distinção entre escãlãmento pãrã cimã e
escãlãmento pãrã forã. Escãlãmento pãrã cimã significã ã substituição de recursos no
sistemã por recursos mãis poderosos. Escãlãmento pãrã forã significã ãdicionãr recursos
ão sistemã.
• Distribuição. Deve ser possível dispersãr geogrãficãmente os componentes de um sistemã
sem comprometer seu desempenho.
• Cãpãcidãde de gerenciãmento. E possível gerenciãr um sistemã ã medidã que ele ãumentã
de tãmãnho, mesmo que pãrtes dele estejãm locãlizãdãs em orgãnizãçoes independentes.
entrada para outras partes do sistema. Conforme explicado por Sommerville (2011,
p. 336), os tipos de ataques dos quais um sistema distribuído deve se defender são:
Um grande problema que pode ocorrer com relação aos sistemas distribuídos é
planejar uma política de proteção que seja aplicável a todos os componentes dos
sistemas.
Haskell B. Curry executou uma experiência complexa com o Eniac, um dos primeiros computadores
desenvolvidos, sugerindo uma notação mais compacta para o código. O ponto principal de interesse foram
os algoritmos de conversão de códigos. Houve uma descrição recursiva de um procedimento de conversão
de expressões aritméticas para um código de máquina apropriado, tornando Curry a primeira pessoa a
descrever a fase de geração de código de um compilador (FILHO, 2007).
Por outro lado, a qualidade do serviço (QoS, do inglês Quality of Service) significa a
capacidade de entregar seus serviços de maneira confiável e em um determinado
tempo de resposta que seja o esperado. O ideal é que os parâmetros de QoS sejam
especificados com bastante antecedência, mas essa não é uma tarefa fácil pelo
seguintes motivos: não é efetivo projetar e configurar o sistema para oferecer uma
alta QoS no momento de carga de pico, e os parâmetros de QoS podem ser
mutuamente contraditórios. Por exemplo, um alto índice de confiança pode gerar taxa
reduzida de transferência.
O filme O quinto poder (DOMSCHEIT-BERG et al., 2013) é baseado na história real de Julian Assange,
fundador do WikiLeakes, e que, por meio de uma plataforma desenvolvida por ele, expõe documentos
sigilosos do governo norte-americano, crimes corporativos e documentos de inteligência confidenciais da
história dos Estados Unidos.
Segundo Sommerville (2011) explica, existem dois tipos principais de interação que
podem ocorrer entre os computadores em um sistema de computação distribuído: a
procedural (envolve um computador que chama um determinado serviço de outro
computador já conhecido) e a baseada em mensagens (envolve um computador que
define as informações sobre o que é requerido em uma mensagem, enviando para
outros computadores).
87
Existe uma computação na nuvem chamada green cloud, que se baseia nos conceitos
da computação nas nuvens e a TI verde, com o objetivo de oferecer um ambiente
computacional flexível e eficiente. O artigo escrito por Westphall; Villarreal (2013)
demonstra os fundamentos e o estado da arte dessa tecnologia. Saiba mais em:
<http://www.periodicosibepes.org.br/index.php/reinfo/article/view/1050/0>.
Os sistemas distribuídos, por um lado, quando acessados pela web, são organizados
no modelo cliente-servidor. Por outro lado, o computador remoto fornece os serviços
solicitados pelo programa local. Na arquitetura cliente-servidor, um sistema é
implantado como sendo um conjunto de serviços fornecidos pelo servidores.
Portanto, os clientes poderão acessar os serviços e apresentar para os usuários
finais.
Na figura a seguir, mostraremos um esquema de uma arquitetura cliente-servidor, na
qual existem quatro servidores (S1, S2, S3 e S4) e 12 clientes (C1 a C12).
• Arquiteturã de mestre-escrãvo
Este padrão de arquitetura é geralmente utilizado para sistemas em tempo real com
processadores separados atrelados à obtenção de dados do ambiente do sistema.
O processo mestre é responsável por processar, coordenar e comunicar os
componentes. Ele é responsável, também, por controlar os processos escravo.
Portanto, os processos escravos são dedicados a ações específicas. Na figura a
seguir, ilustraremos a arquitetura mestre-escravo com um modelo de um sistema de
controle de tráfego, em que três processos lógicos são executados em
processadores separados. O processo mestre é o processo da sala de controle, que
se comunica com processos escravos separados e que são responsáveis pela coleta
de dados de tráfego e gerência de funcionamento de semáforos.
90
um exemplo de umã situãção em que ã ãrquiteturã cliente-gordo e usãdã e um sistemã de bãnco ATM, que
oferece dinheiro e outros serviços bãncãrios pãrã os usuãrios. ATM e o computãdor cliente, e o servidor e,
normãlmente, um mãinfrãme executãndo o bãnco de dãdos de contã de cliente. Úm computãdor
mãinfrãme e umã mãquinã poderosã que e projetãdã pãrã o processãmento de trãnsãçoes. Assim, ele pode
lidãr com o grãnde volume de trãnsãçoes gerãdãs pelãs ATMs e outros sistemãs de cãixã e bãncos on-line.
O softwãre nã mãquinã de cãixã reãlizã vãrios processãmentos relãcionãdos ão cliente ãssociãdo com umã
trãnsãção.
Portanto, para cada tipo de sensor haverá um processo que gerenciará a sua coleta
de dados. As etapas de processamento de dados devem calcular as respostas, e não
existe um processo que seja padrão de projeto de sistemas embutidos. O que ocorre
é que processos diferentes são usados dependendo do tipo do sistema, do tipo de
hardware e da organização que está desenvolvendo o sistema.
Segundo Sommerville (2011), as seguintes atividades podem ser incluídas em um
processo de projeto de software de tempo real:
• seleção de plãtãformã;
• identificãção de estímulos/respostã;
• ãnãlise do timing;
• projeto do processo;
• projeto do ãlgoritmo;
• projeto dos dãdos; • progrãmãção dos processos.
• Pipeline de processo. Esse pãdrão e usãdo quãndo dãdos precisãm ser trãnsformãdos de
umã representãção pãrã outrã ãntes que possãm ser processãdos. A trãnsformãção e
implementãdã como umã sequenciã de etãpãs de processãmento, que podem ser reãlizãdãs
concorrentemente. Isso permite o processãmento de dãdos muito rãpido, porque um
nucleo sepãrãdo ou processãdor pode executãr cãdã trãnsformãção.
Esses padrões podem ser combinados e, muitas vezes, existe mais de um modelo
em um único sistema. Temos, como exemplo, o padrão ‘controle de ambiente’, em
que é usual para que os atuadores sejam monitorados usando o padrão ‘observar e
reagir’. No caso de uma falha de atuador, o sistema pode reagir exibindo uma
mensagem de aviso, desligando o atuador, comutando para um sistema de backup.
A ideia de um serviço tipo web service surgiu como uma proposta de disponibilizar as
informações entre programas, definindo e publicando as informações por meio de
uma interface própria. A interface web service define os dados disponíveis e a maneira
como podem ser acessados, sendo, de modo geral, uma representação para algum
recurso ou de informações que pode ser acessado por outros softwares, podendo ser
recursos de informações, de computador ou de armazenamento.
Foram criados padrões fundamentais para oferecer suporte a web services, conforme
ilustraremos na figura a seguir.
baixo, as linhas contêm: Tecnologias XML (XML, XSD, XSLT, ...); Suporte
(WSSecurity, WS-Addressing, ...); Processo (WS-BPEL); Definição de serviço (UDDI,
WSDL), e; Serviço de mensagem (SOAP).
• SOAP. Esse e um pãdrão de trocãs de mensãgens que oferece suporte ã comunicãção entre
os serviços. Ele define os componentes essenciãis e opcionãis dãs mensãgens pãssãdãs
entre serviços.
• WSDL. A linguãgem de definição de web service (Web Service Definition Language) e um
pãdrão pãrã ã definição de interfãce de serviço. Define como ãs operãçoes de serviço
(nomes de operãção, pãrãmetros e seus tipos) e ãssociãçoes de serviço devem ser definidãs.
• WS-BPEL. Esse e um pãdrão pãrã umã linguãgem de workflow, que e usãdã pãrã definir
progrãmãs de processo que envolvem vãrios serviços diferentes.
Úm sistemã de informãçoes em um cãrro fornece ãos motoristãs informãçoes sobre climã, condiçoes de
trãfego dã estrãdã, informãçoes locãis, e ãssim por diãnte. Ele e ligãdo ão rãdio do cãrro pãrã que ã
informãção sejã entregue como um sinãl em um cãnãl de rãdio específico. O cãrro e equipãdo com
receptores GPS pãrã descobrir suã posição, e, com bãse nessã posição, o sistemã ãcessã umã gãmã de
serviços de informãção. Em seguidã, ãs informãçoes podem ser entregues nã linguãgem especificãdã pelo
motoristã.
99
Síntese
Concluímos este capítulo mostrando a importância de conhecer e aplicar as arquiteturas
alternativas aplicadas ao ambiente web e aplicativos móveis. Conhecemos os diversos padrões de
arquitetura com os sistemas distribuídos e sistemas embutidos e orientados a serviços e web
service. Tivemos a oportunidade de verificar como as novas tecnologias impactam e levam ao
desenvolvimento de novos padrões e modelos de arquitetura.
Projeto
Vamos Praticar
Como a arquitetura para sistemas embarcados deve ser considerada para melhorar o
desempenho e confiabilidade do software a ser executado nestes dispositivos? Ao final,
disponibilize seu trabalho no fórum da seção.
Referências
GALLOTI, G. M. A. Arquitetura de software. São Paulo: Pearson
Education do Brasil, 2016.