Escolar Documentos
Profissional Documentos
Cultura Documentos
INICIAR
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.
Desejamos um excelente estudo.
VOCÊ SABIA?
Com o crescimento rápido de computação em nuvem, tem aumentado a preocupação com a
necessidade de serviços oferecidos. Um grande desafio é implementar um ambiente tolerante a
falhas. Para combatê-las, muitas técnicas são projetadas para reduzir os erros. O que acontece é que
gestores pagos oferecem esse tipo de suporte, 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?
sequence=1&isAllowed=y
(https://repositorio.unesp.br/bitstream/handle/11449/127619/000843909.pdf?
sequence=1&isAllowed=y)>.
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
(esquema e descrição técnica) quanto elementos comerciais (preço e descrição de
marketing).
Figura 1 - Modelo de uma árvore de conteúdo para um componente e seus relacionamentos de um sistema
de vendas. Fonte: Elaborada pelo autor, baseado em PRESSMAN, 2016.
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):
Funcionalidade observável pelo usuário fornecida pelo aplicativo aos
usuários finais.
As operações contidas nas classes de análise que implementam
comportamentos associados à classe.
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.
3.2.1 Engenharia de domínio
A engenharia de domínio é um processo que tem como objetivo desenvolver
diversas aplicações que podem ser reusáveis em um domínio particular de
problema. Nesse caso, de forma geral, ela compreende as fases de:
CASO
Utilizar corretamente um padrão de projeto pata desenvolvimento de sistemas acarreta uma série de
benefícios para tornar mais ágil e eficiente toda a estrutura de tecnologia de uma corporação. Uma
grande empresa de tecnologia implantou, há alguns anos, os chamados ‘serviços inteligentes’. Na
época, estes sistemas tinham como objetivo diminuir as chamadas perdidas por meio dos serviços
‘siga-me’, ‘caixa-postal’ e ‘desvio de chamada’. Os serviços – sistemas – não foram implantados todos
de uma vez e foi estipulado um determinado padrão para a implantação do primeiro serviço, o qual
foi utilizado para a implantação dos outros. Houve uma redução de 30% de desenvolvimento e
implantação dos sistemas posteriores, pois a utilização do mesmo padrão agregou a experiência do
primeiro sistema nos demais. Isso é chamado de ‘curva de experiência’.
VOCÊ O CONHECE?
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 não chamam uns aos outros”. Esse tipo de composição pode ser
usado com componentes.
Figura 5 - Demonstração de um modelo UML do padrão 'Observer' mostrando a relação entre as classes.
Fonte: Elaborada pelo autor, baseado em SOMMERVILLE, 2011.
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.
Padrões estruturais: têm como objetivo se ocuparem com a maneira como classes e
objetos são compostos para criar estruturas maiores. Então, as heranças são
utilizadas pelos padrões de classe para que sejam compostas as interfaces ou
implementações. Por outro lado, os objetos descrevem como os objetos devem ser
compostos para as novas.
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.
VOCÊ SABIA?
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/15124
(http://periodicos.uem.br/ojs/index.php/EspacoAcademico/article/view/29122/15124)>.
Quadro 3 - Elementos do
contexto que devem ser considerados durante a seleção de uma opção arquitetural. Fonte: Elaborado pelo
autor, baseado em AZEVEDO, 2014.
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.
Neste capítulo, você teve a oportunidade de:
conhecer projetos de conteúdo e funcional;
compreender os sistemas baseados em componentes;
diferenciar os tipos de padrões de projeto;
realizar as descrições de padrões;
analisar os projetos baseados em padrões.
Bibliografia
AZEVEDO, R. P. M. Seleção de padrões para a arquitetura de software: uma
abordagem baseada em procura de termos e sinônimos. 2014. 94 f. Dissertação
(Mestrado em Ciência da Computação) – Universidade Federal de Viçosa, Viçosa,
2014. Disponível em:
<http://www.locus.ufv.br/bitstream/handle/123456789/2686/texto%20completo.pdf
?sequence=1&isAllowed=y
(http://www.locus.ufv.br/bitstream/handle/123456789/2686/texto%20completo.pdf
?sequence=1&isAllowed=y)>. Acesso em: 6/6/2018.
BRANDES, E. S.; BACELO, A. P. T. RADA: uma abordagem para a documentação de
arquiteturas de referência através de linguagens de descrição arquiteturais. 2010.
211 f. Dissertação (Mestrado em Ciência da Computação) – Pontifícia Universidade
Católica do Rio Grande do Sul, Faculdade de Informática, Porto Alegre, 2010.
Disponível
em: <http://repositorio.pucrs.br/dspace/bitstream/10923/6778/1/000460611-
Texto%2bCompleto-0.pdf
(http://repositorio.pucrs.br/dspace/bitstream/10923/6778/1/000460611-
Texto%2bCompleto-0.pdf)>. Acesso em: 6/6/2018.
FARIAS, T. M. M. Aplicação de padrões ao processo de desenvolvimento de
software RUP. 2006. 62 f. Trabalho de conclusão de curso (Graduação em
Engenharia de Produção) – Escola Politécnica de Pernambuco, Departamento de
Sistemas Computacionais, Recife, 2006. Disponível em:
<http://tcc.ecomp.poli.br/20062/Monografia_TiagoMoraes.pdf
(http://tcc.ecomp.poli.br/20062/Monografia_TiagoMoraes.pdf)>. Acesso em:
6/6/2018.
FONSECA FILHO, C. História da computação: o caminho do pensamento e da
tecnologia. Porto Alegre: PUC-RS, 2007.
GALLOTI, G. M. A. Arquitetura de software. São Paulo: Pearson Education do Brasil,
2016.
LAGMANN, D. F. Um estudo de caso sobre a utilização de padrões de projeto na
definição de uma arquitetura de software voltada ao desenvolvimento de
sistemas de gestão. 2013. 126 f. Trabalho de conclusão de curso (Graduação em
Sistemas de Informação) – Centro Universitário Univates, Centro de Ciências Exatas e
Tecnológicas, Lajeado, 2013. Disponível em:
<https://www.univates.br/bdu/bitstream/10737/357/1/DouglasLagemann.pdf
(https://www.univates.br/bdu/bitstream/10737/357/1/DouglasLagemann.pdf)>.
Acesso em: 6/6/2018.
MARTINS, H. P. Tolerância a falha em um ambiente de computação em nuvem
open source. 2014. 83 f. Dissertação (Mestrado em Ciência da Computação) –
Universidade Estadual Paulista Júlio de Mesquita Filho, Bauru, 2014. Disponível
em: <https://repositorio.unesp.br/bitstream/handle/11449/127619/000843909.pdf?
sequence=1&isAllowed=y
(https://repositorio.unesp.br/bitstream/handle/11449/127619/000843909.pdf?
sequence=1&isAllowed=y)>. Acesso em: 6/6/2018.
PRESSMAN, R. Engenharia de software: uma abordagem profissional. 8. ed. Porto
Alegre: McGraw Hill, 2016.
QUINTERO, J. B.; DUITAMA MUÑOZ, J. F. Reflexiones acerca de la adopción de
enfoques centrados en modelos en el desarrollo de software. Revista Ingeniería y
Universidad, Bogotá, Pontifícia Universidade Javeriana, v. 15, n. 1, p. 219-243, jan.-
jul. 2015. Disponível
em: <http://revistas.javeriana.edu.co/index.php/iyu/article/view/1131/810
(http://revistas.javeriana.edu.co/index.php/iyu/article/view/1131/810)>. Acesso em:
6/6/2018.
SILVA FILHO, A. M. Software everywhere: sobre a demanda de software e da
Engenharia de Software. Revista Espaço Acadêmico, Maringá, UEM, v. 15, n. 172, p.
1-4, set. 2015. Disponível
em: <http://periodicos.uem.br/ojs/index.php/EspacoAcademico/article/view/29122/
15124
(http://periodicos.uem.br/ojs/index.php/EspacoAcademico/article/view/29122/1512
4)>. Acesso em: 6/6/2018.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Prentice Hall,
2011.
SORKIN, A.; MEZRICH, B. A rede social. Direção: David Fincher. Produção: CHAFIN, C.
et al. Estados Unidos: Sony Pictures, 2010.