Livro Proprietario - Arquitetura de Sistemas PDF
Livro Proprietario - Arquitetura de Sistemas PDF
Livro Proprietario - Arquitetura de Sistemas PDF
DE SISTEMAS
1ª edição
SESES
rio de janeiro 2017
Conselho editorial roberto paes e luciana varga
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida
por quaisquer meios (eletrônico ou mecânico, incluindo fotocópia e gravação) ou arquivada em
qualquer sistema ou banco de dados sem permissão escrita da Editora. Copyright seses, 2017.
CDD 658.403
1. Componentes de sistemas e o
processo de desenvolvimento 9
Introdução 10
Componentes 11
Exemplos de componentes de sistema 14
Arquitetura de sistemas 15
Camadas da arquitetura de sistemas 18
Arquitetura de componentes 20
Camadas de arquitetura de componentes 21
Modelos de componentes 22
Exemplos de modelos de componentes 24
Workflow 25
Gerenciamento de processos 27
Modelo conceitual 52
Especificação de interfaces 53
3. Identificação e especificação de componentes 61
Introdução 62
Identificação de componentes 63
Processo de identificação de componentes 64
Tipos de componentes 68
Session bean 69
Entity bean 70
Message-driven bean 71
Metodologias/Padrões 72
Engenharia de Domínio 72
Desenvolvimento de Software Baseado em Componentes 74
Linha de Produtos de Software 75
4. Interação de componentes 87
Introdução 88
Interação de componentes 89
Prezados(as) alunos(as),
8
entre outras coisas, está dentro do planejamento deste livro. Bem como o processo
de desenvolvimento RUP e o padrão arquitetural MVC, além do framework para
arquitetura de sistemas distribuídos, o CCM.
Diante de todos os aspectos descritos acima, este livro foi desenvolvido para
que você, aluno, possa compreender melhor a importância desta disciplina para
a sua carreira, seja ela acadêmica ou profissional. Esperamos que, com um estudo
dedicado e atencioso a este material, você, aluno, desperte o seu interesse pelo
desenvolvimento de sistemas através do uso de boas práticas de desenvolvimento.
Bons estudos!
9
1
Componentes
de sistemas e
o processo de
desenvolvimento
Componentes de sistemas e o processo
de desenvolvimento
Introdução
OBJETIVOS
• Aprender os principais conceitos de componentes de sistemas;
• Conhecer os conceitos sobre arquitetura de sistemas e a sua importância;
• Entender a importância de aplicar o conceito de arquitetura a componentes;
• Poder identificar os componentes de sistemas no seu dia a dia;
• Conhecer e aprender o padrão estrutural em camadas;
• Aprender os fundamentos de workflow;
• Compreender os conceitos de processo de desenvolvimento de sistemas;
• Entender a aplicabilidade de workflow em modelos de gestão;
• Compreender os objetivos de metodologia de desenvolvimento e de gestão.
capítulo 1 • 11
Componentes
capítulo 1 • 12
Os componentes possuem objetivos específicos dentro de um contexto, e os
seus conceitos assemelham-se com o conceito de objetos em POO. Na Programação
Orientada a Objetos, chamamos de componentes a classe responsável por
implementar uma interface e que possua autonomia em relação aos outros. Vale
ressaltar que objetos não implementam interfaces. O objeto é, nesse contexto, a
instância de uma classe que é responsável por implementar uma interface.
O usuário ou cliente pode construir o próprio componente ou adquirir os
componentes COTS (Commercial Off-The-Shelf), que são componentes com
domínio específico. Mais genéricos, eles podem ser adquiridos comercialmente:
são os chamados componentes de prateleira. Porém, o seu uso de forma efetiva
necessita de desenvolvimento de métodos com maior precisão para produção e
utilização (Carney, 1997).
Cheesman (2001) pontuou os princípios fundamentais e conceituais acerca
de componentes de sistemas. Eles são os seguintes:
capítulo 1 • 13
componentes possam atingir os seus objetivos é uma documentação adequada e
clara dele.
Sametinger (1997) pontuou algumas características dos componentes:
capítulo 1 • 14
Exemplos de componentes de sistema
capítulo 1 • 15
de dados a partir de uma fonte (News Feed), os registra em Planilha e repassa os
resultados para um Banco de Dados. Esse último componente é compartilhado
também com uma Aplicação Web que coleta as informações sob demanda. Cada
um desses três componentes (News Feed, Planilha e Banco de Dados) é, de certa
forma, independente, compartilhado e utilizado. Juntos, esses componentes
formam um sistema maior. Observe que eles possuem suas interfaces para suas
respectivas conexões, e, como estudado anteriormente, isso permite que sejam
facilmente substituídos por outros componentes equivalentes.
Arquitetura de sistemas
capítulo 1 • 16
possuem forte influência na escolha de qual solução identificada será adotada. O
mesmo se repete no que diz respeito ao desenvolvimento de softwares. Podemos
encontrar várias soluções computacionais com potencial para atender aos
requisitos, e para minerar essas soluções se faz necessário o uso de análise para
definir a solução que mais se adequa ao contexto de desenvolvimento da aplicação.
A arquitetura de sistemas ou software é a abordagem mais utilizada para
representar soluções; dessa forma, se alcança a solução mais adequada ao
problema. A arquitetura é baseada em modelo de alto nível para permitir um maior
entendimento e uma análise mais fácil do software que se pretende desenvolver.
Garlan e Perry (1995), além de Kazman (2001), apontam duas tendências
para o uso de arquitetura na representação de soluções de software:
Vale ressaltar que a arquitetura não serve apenas para facilitar o entendimento
dos projetistas mas também para o entendimento dos vários stakeholders que par-
ticipam do projeto de software e de seu desenvolvimento (GARLAN, 2000). Em
geral, a arquitetura possibilita o seu uso como uma ferramenta para comunicar
a solução proposta a todos os envolvidos; ela, por ser um modelo de alto nível,
facilita o entendimento de quem não possui os conhecimentos técnicos. Para que
haja essa comunicação da solução, é desenvolvido um artefato ou documento cha-
mado de documento arquitetural.
E, logicamente, se a arquitetura está sendo utilizada para verificar a solução
mais adequada para um problema, ou seja, a solução que deve resolver determinado
problema, e esse problema é descrito em forma de requisitos, tanto a arquitetura
quanto o documento arquitetural devem utilizar os requisitos como a principal
fonte de informações. Veja bem, os requisitos devem ser utilizados como a principal
fonte; portanto, existem outras fontes que podem ser utilizadas para definir os
elementos arquiteturais e como eles serão organizados. Nessas outras fontes, as
que possuem um maior destaque são: experiência do arquiteto, raciocínio sobre os
requisitos, estilos e táticas arquiteturais.
Segundo Bass e colaboradores (2003), a arquitetura de software é responsável
por representar a estrutura ou o conjunto dela, compreendendo os elementos de
capítulo 1 • 17
software bem como as suas propriedades externas e relacionamentos. Mas, para
que se possa criar tal estrutura, alguns elementos básicos, defendidos por Dias e
Vieira (2000), podem ser utilizados:
capítulo 1 • 18
para a implementação da solução, pois ela passa a incorporar as informações
relacionadas às decisões do projeto.
Vale ressaltar que não existe uma forma única de construir uma arquitetura de
software e o documento arquitetural. No que diz respeito à arquitetura de software,
listamos alguns dos diversos padrões existentes:
Observe que separamos os padrões em algumas categorias; isso quer dizer que,
de acordo com o contexto e a necessidade, o nosso sistema, ou parte dele, pode-
rá ser projetado em várias formas de arquitetura. Neste capítulo, trataremos do
padrão estrutural Camadas, e no decorrer deste livro iremos tratar o padrão de
sistemas interativos MVC.
capítulo 1 • 19
Geralmente, é criada apenas uma camada responsável pela funcionalida-
de específica do sistema. Quando o sistema complexo, ou de grande porte,
é composto por outros sistemas menores, as camadas intermediárias respon-
sáveis pelo domínio de negócio devem estar estruturada em camadas. E, por
fim, as camadas inferiores têm um papel fundamental, em que possivelmente
poderão ter várias camadas para que o sistema funcione adequadamente no
local onde for implantado.
Na figura a seguir, temos um exemplo de arquitetura com quatro camadas.
Analisaremos cada uma para melhor entendimento sobre esse tópico.
capítulo 1 • 20
Arquitetura de componentes
capítulo 1 • 21
Gimenes (2005) apontou alguns outros benefícios que estão relacionados com
componentes e o fato de eles serem reutilizáveis:
capítulo 1 • 22
última camada, a inferior, tem a responsabilidade de permitir que os eventos sejam
distribuídos na rede de computadores; dessa forma, comunicam os componentes
que estão executando em várias estações de trabalho.
Modelos de componentes
capítulo 1 • 23
interoperabilidade, documentação, nomeação, mecanismos de customização,
composição, evolução, controle de versões, instalação e desinstalação, serviços
de execução, empacotamento, entre outros (HEINEMAN e COUNCILL,
2001; D'SOUZA e WILLS, 1998).
Weinreich e Sametinger (2001) definem modelo de componentes como
o padrão de descrição de interface, definindo quais são os padrões de
composição. O tipo mais comum de acoplamento entre dois componentes são
publicador/ouvinte e o cliente/servidor. No primeiro, o ouvinte faz seu registro
como tratador de eventos e informações que são publicadas pelo publicador. No
segundo, o cliente faz chamadas ao servidor. Também faz parte do modelo de
componentes definir os tipos de interfaces disponibilizadas. Esse modelo define
o padrão de deployment, especificando a estrutura e semântica que os arquivos
descritores devem possuir (WEINREICH e SAMETINGER, 2001).
A Figura 5 representa, para melhor entendimento dos conceitos aqui tratados,
um projeto baseado em componentes, relacionando componentes, modelo de
componentes e frameworks de componentes.
capítulo 1 • 24
Os componentes são administrados por contratos que garantem que os
componentes obedecem determinadas regras. Diferentes tipos de componentes
podem existir, representando cada um o seu papel no sistema que é descrito por
uma interface. O modelo de componente contém os tipos de componentes, suas
interfaces e especificações de padrão de interação. E o framework de componentes
dá todo o suporte e reforço necessários ao modelo de componentes.
Ainda não existe um consenso sobre o que deve constar ou não em um modelo
de componentes; Bachmann (2000) e Spagnoli (2003), por exemplo, defendem os
seguintes padrões e convenções:
capítulo 1 • 25
desenvolvidos por vários fabricantes. O foco da solução trata de componentes
binários interoperáveis.
O JavaBeans é um outro modelo de componentes, mas esse foi fabricado
pela Sun. Ele define como serão tratados eventos, propriedades, introspecção,
reflexão, customização e empacotamento de componentes. O Enterprise
JavaBeans já é um modelo voltado para sistemas corporativos, tratando da
interconexão de componentes remotos.
Um outro exemplo de modelos de componentes é o Web Services, que é
um padrão de comunicação entre componentes através da internet. Um sistema
pode fazer o uso de serviços de componentes por meio do protocolo SOAP, que,
por sua vez, encapsula as chamadas e os retornos dos serviços em pacotes no
formato XML.
Um último exemplo é o CORBA (Common Object Request Broker Architecture),
e trataremos dele com mais detalhes em outro ponto deste livro. Ele fornece um
modelo de componentes que permite a comunicação entre componentes distribuídos,
utilizando IDL (Interface Definition Language) com o intuito de descrever interface
pública de seus serviços. Dessa forma, o cliente não possui dependência do local
onde se encontra o objeto que está sendo executado nem da linguagem na qual ele
foi programado ou do sistema operacional que está sendo utilizado.
Workflow
capítulo 1 • 26
Na Figura 6, podemos observar as terminologias básicas que, segundo o
Workflow Management Coalition (1996), estão relacionados ao workflow. Elas são
descritas logo a seguir:
capítulo 1 • 27
• Itens de Trabalho: Representa as tarefas que devem ser executadas por
participante do workflow dentro do contexto de atividade e instância de processo;
• Aplicativos Invocados: Ferramentas e aplicativos utilizados para a execução
de uma atividade.
Gerenciamento de processos
capítulo 1 • 28
de atividades guarda-chuva que são aplicadas no decorrer de todo o processo de
desenvolvimento de software e na forma como as atividades são organizadas e
utilizadas, ou seja, sequenciais ou intercaladas: a variação ocorre de acordo com
o modelo de desenvolvimento que está sendo utilizado e independe dele. Dessa
forma, pode-se dizer que existem, nesse contexto, algumas atividades genéricas.
Sommerville (2007) as destaca:
capítulo 1 • 29
organizacional, natureza do projeto, entre outros fatores (PMBOK, 2008).
Como já citado anteriormente, existem vários modelos de desenvolvimento que
são utilizados atualmente. Alguns dos mais importantes são: Modelo Cascata,
Modelos Incrementais, Modelos Evolucionários (Prototipagem e Espiral) e
Desenvolvimento baseado na reutilização.
Para o desenvolvimento de processo, também existe uma variedade de
modelos que são utilizados como ciclo de vida para a gestão de melhoria de
processos na organização. Essa gestão de processos é uma série de metodologias
e técnicas que ajudam as organizações a gerenciarem o seu negócio por meio do
conhecimento e compreensão de seus processos. Os modelos de processos de
negócio ajudam na formalização de processos, apresentando-os em linguagem
comum e em um bom nível de entendimento. Nesse contexto, modelos
baseados em workflow são bastante utilizados. Não basta apenas implementar
um ciclo de vida de software; até mesmo para implementá-lo, existe a
necessidade de implementar processos que devem ser planejados de forma
estruturada, em fases distintas, com recursos e artefatos. Compreender como
cada atividade funciona e se relaciona com as demais, seus artefatos e entregas,
é de suma importância para garantir a qualidade na entrega do produto final.
Alguns dos modelos para projetos de processo mais utilizados por gestores
são: PDCA (plan-do-check-act), DMAIC (Define, Measure, Analyse, Improve,
Control), IDEF (Integrated Computer Aided Manufacturing Definition) e BPM
(Business Process Management).
ATIVIDADE
01. De acordo com o que foi estudado neste capítulo, defina o que são componentes.
02. De acordo com o que foi estudado neste capítulo, conceitue arquitetura de sistemas.
03. De acordo com o que foi estudado neste capítulo, conceitue workflow e processos
de software.
capítulo 1 • 30
GABARITO
01. Componentes são unidades de software cujas funcionalidades são responsáveis por
executar atividades definidas no sistema. São desenvolvidos e implantados para que atuem
de forma independente com a possibilidade de serem combinados entre si, por meio de
interfaces, para formar um sistema.
02.. A arquitetura de sistemas é a abordagem mais utilizada para representar soluções;
dessa forma, se alcança a solução mais adequada ao problema. A arquitetura é baseada
em modelo de alto nível para permitir um maior entendimento e uma análise mais fácil do
software que se pretende desenvolver.
03. Workflow: representa a automação de processo de negócio, em que documentos,
informações ou tarefas são distribuídos de acordo com procedimentos predefinidos.
Processos de software: formam o alicerce no que diz respeito ao controle gerencial de
projetos de software, além de estabelecer o meio para a aplicação de métodos técnicos,
a produção de produtos de trabalho, estabelecimento de metas, assegurar a qualidade e a
gerência adequada de alterações no projeto.
REFLEXÃO
Neste capítulo, iniciamos os nossos estudos sobre Arquitetura de Sistemas.
Iniciamos o nosso aprendizado com a definição de componentes, em que conhecemos os
seus princípios fundamentais e características, além de compreendermos melhor o seu
conceito através de dois exemplos que demonstraram bem o que é componente e como
eles interagem por meio de suas interfaces. Estudamos também o conceito de arquitetura
de sistemas e conhecemos os seus elementos básicos, pelos quais podemos fazer uma
ligação entre arquitetura, componentes, conectores e a sua organização. E aprendemos
que a arquitetura de sistemas pode ser organizada de diversas formas ou padrões.
Conhecemos alguns: estruturas, sistemas adaptáveis, sistemas distribuídos e sistemas
interativos. Conhecemos a organização em camadas que faz parte do padrão Estruturas.
Com a base adquirida nos estudos sobre componentes e arquitetura de componentes, foi
possível compreender de forma mais breve os conceitos de arquitetura de componentes e
a sua organização em camadas. Aprendemos as vantagens, os benefícios e os problemas
enfrentados por esse tipo de arquitetura. Também estudamos os conceitos dos padrões
para o desenvolvimento de modelos de componentes e conhecemos alguns modelos
através de exemplos.
capítulo 1 • 31
Para se aprofundar nos conceitos de Processo de Desenvolvimento, começamos os
nossos estudos tratando sobre Workflow. Conhecemos as duas definições, conceitos e
terminologia básica. Definimos processo de software tomando como base os conhecimentos
de dois autores renomados na literatura de engenharia de software. Tomamos ciência
das atividades comuns aos processos de desenvolvimento e o conceito de atividades
guarda-chuva. E, por fim, aprendemos os objetivos de utilizar modelos de processos de
desenvolvimento de software e modelos de gestão de processos.
Finalizamos este capítulo com uma base de conhecimento solidificado acerca de
arquitetura de sistemas e de componentes, além da importância do gerenciamento, seja
no ciclo de vida de software ou de processos. Com os conhecimentos adquiridos neste
capítulo, podemos continuar os nossos estudos neste livro.
LEITURA
Para você avançar mais o seu nível de aprendizagem envolvendo os conceitos referentes
a este capítulo, consulte as sugestões abaixo:
capítulo 1 • 32
REFERÊNCIAS BIBLIOGRÁFICAS
______. Project Management Coliation (PMI). In: PMBOK Guide. XXXX, YYY, 2008.
______. Workflow Management Coliation. In: The Workflow Reference Model, Document Number
WFMC-TC00-1003 Document status – Issue. Hampshire: Workflow Management Coalition, 1996.
______. Workflow Management Coliation. In: The Workflow Management Coliation – Terminology
and Glossary, Document Number WFMC-TC-1011 Document status – Issue. Hampshire: Workflow
Management Coalition, 1999.
BACHMANN, F. et al. Technical Concepts of Component-Based Software Engineering.
Pittsburgh: Carnegie Mellon University, 2000.
BASS, L., CLEMENTS, P., KAZMAN, R. Software Architecture in Practice, . Massachusetts: Addison-
Wesley, 2003.
BROWN, A. W., WALLNAU, K. C. Component-Based Software Engineering IEEE Computer
Society Press. Los Alamitos: Wiley-IEEE Computer Society Press, 1996.
CARNEY, D. Assembling Large Systems from COTS Components: Opportunities, Cautions,
and Complexities. SEI Monographs on the Use of Commercial Software in Government Systems.
Pittsburgh: Carnegie Mellon University, 1997.
CHEESMAN, J., DANIELS, J. UML Components: a Simple Process for Specifying Component-Based
Software. Massachusetts: Addison-Wesley, 2001.
CLEMENTS, P., BACHMANN, F., BASS, L., GARLAN, D., IVERS, J., LITTLE, R., NORD, R., STAFFORD, J.
Documenting Software Architectures. Pittsburgh:Addison-Wesley, 2004.
DIAS, M.S., VIEIRA, M.E.R. Software architecture analysis based on statechart semantics. In:
International Workshop on Software Specification and Design. Washington: IEEE Computer
Society, 2000.
D’SOUZA, D., WILLS, A. Objects, Components and Frameworks with UML – The Catalysis
Approach. Boston: Addison-Wesley, 1998.
GARLAN, D. Software architecture: a roadmap. In: Proceedings of The Conference on The Future
of Software Engineering. Limerick: Carnegie Mellon University, 2000.
GARLAN, D., PERRY, D. Introduction to the Special Issue on Software Architecture. In: IEEE
Transactions on Software Engineering. Piscataway: IEEE Press, 1995.
GIMENES, I., HUZITA, E. Desenvolvimento Baseado em Componentes: Conceitos e Técnicas. Rio
de Janeiro: Ciência Moderna, 2005.
HEINEMAN, G. T., COUNCILL, W. T. Component-Based Software Engineering: putting the pieces
together. Boston: Addison-Wesley, 2001.
KAZMAN, R. Handbook of Software Engineering and Knowledge Engineering. In: World Scientific
Publishing. Farrer Road: World Scientific Publishing Company, 2001.
capítulo 1 • 33
KRUCHTEN, P. Modeling Component with the Unified Modeling Language. XXXX: International
Workshop on Component-Based Software Engineering: XXX, 1998.
PRESSMAN, R. S. Engenharia de Software. São Paulo: Mcgraw-hill, 2006.
SOMMERVILLE, I. Engenharia de Software. São Paulo: Pearson Education-Br, 2007.
SPAGNOLI, L. A., BECKER, K. Um Estudo Sobre o Desenvolvimento Baseado em Componentes.
Porto Alegre: Pontifícia Universidade Católica - RS, 2003.
SZYPERSKI, C. Component Software: Beyond Object-Oriented Programming. Boston, : Addison-
Wesley, 2002.
VINCENZI, A. M. R. et al. Desenvolvimento baseado em componentes: Conceitos e Técnicas [S.l.].
Rio de Janeiro: Ciência Moderna Ltda., 2005.
WALLNAU, K. et al. On the Relationship of Software Architecture to Software Component Technology.
In: International Workshop on Component-Oriented Programming. Budapest,: XXXX, 2001.
WERNER, C., BRAGA, R. Desenvolvimento Baseado em componentes. João Pessoa: , 2000.
capítulo 1 • 34
capítulo 1 • 35
2
Definição de
requisitos e a
aplicação de UML
Definição de requisitos e a aplicação de UML
Introdução
OBJETIVOS
• Aprender o que são requisitos;
• Aprender quais são os tipos de requisitos;
• Conhecer as técnicas de elicitação de requisitos;
• Aprender os principais conceitos que cercam a validação de requisitos;
• Entender os conceitos e a importância da prototipação para a validação de requisitos;
• Entender a UML e a sua importância na arquitetura de sistemas;
• Conhecer um pouco sobre modelo conceitual;
• Compreender a especificação de interfaces.
capítulo 2 • 37
Definição de requisitos
capítulo 2 • 38
• Uma capacidade ou condição que é necessária para que o usuário resolva
determinado problema ou alcance determinado objetivo;
• Uma capacidade ou condição que possua a necessidade de ser atendida ou
que deve estar presente no sistema ou componente, e, dessa forma, satisfazer a
sua especificação, norma, contrato ou outro documento que pode ser imposto de
forma formal;
• Uma representação documentada de determinada capacidade ou condição,
de acordo com os itens anteriores.
capítulo 2 • 39
Tipos e técnicas de levantamento de requisitos
capítulo 2 • 40
Exemplo: O usuário comum só poderá ter acesso aos relatórios pertencentes ao
seu departamento;
• Requisito do software: descrição de uma característica ou comportamento
que é exigido do software. Geralmente, são definidos por analistas de sistemas.
Exemplo: Cada pedido deverá conter um único identificador.
A elicitação (ou levantamento) de requisitos é uma das fases da engenharia
de requisitos, a primeira. Ou seja, é o início de toda atividade que cerca o
desenvolvimento de software. Porém, mesmo sendo a primeira fase, ela não
é executada apenas uma vez, mas sim de forma interativa, em que todas
as outras etapas da engenharia de requisitos (ver Figura 1) podem possuir o
levantamento de requisitos. Para que essa fase seja realizada, existe a necessidade
de primeiramente identificar quais serão os usuários finais, ou seja, quem são os
usuários que possuem um forte papel para o processo de desenvolvimento de
software por meio de suas experiências e conhecimentos (GOGUEN, 1997).
Para que esses usuários sejam escolhidos, deve ser levada em consideração a
veracidade das informações que podem ser passadas por eles. Essas informações
devem ser de confiança, já que isso se trata de informações que serão utilizadas
no projeto e devem estar de acordo com a necessidade organizacional. Caso a
pessoa errada seja escolhida, isso acarretará em perda de tempo e de dinheiro
para ambas as partes. Essa escolha é de extrema importância.
capítulo 2 • 41
ou políticas. Além disso, o desenvolvedor precisa conhecer o contexto no qual as
informações estão situadas.
Para que a fase de levantamento de requisitos seja eficaz, existe a necessidade de
aplicar técnicas para melhorar a comunicação e o entendimento entre os clientes
e analistas com o objetivo de que problemas não aconteçam, e, se ocorrerem, que
possam ser resolvidos de forma facilitada. Para Jackson (1995), uma técnica de
levantamento de requisitos procura explorar as características de determinada
situação-problema e como elas variam. Como essa fase aborda um contexto
social (comunicação), ela não pode ser abordada de forma totalmente tecnológica
como na fase que envolve a codificação. Algumas das técnicas de levantamento de
requisitos são:
capítulo 2 • 42
• JAD: A técnica Joint Application Development é uma marca da IBM que
procura unir dentro de um workshop autoridades gerenciais e representativas
para que as decisões possam ser promovidas. JAD é composto em cinco fases:
definição do projeto, pesquisa, preparação para a sessão JAD, a sessão JAD e
documento final. JAD permite a promoção de cooperação, entendimento e
trabalho em grupo entre os muitos grupos de usuários e os analistas;
• PD: A técnica Participatory Design permite a inclusão de fatores técnicos-
sociais, em que o projeto é desenvolvido com o usuário. Os trabalhadores e os
clientes contribuem de forma produtiva para as organizações, sendo encorajados
a expressar seus desejos e a exercitar suas capacidades de tomada de decisão,
assumindo a responsabilidade do impacto de suas ações;
• QFD: A técnica Quality Function Deployment aborda um conceito que
permite a interpretação dos requisitos do cliente em requisitos técnicos. As
fases iniciais dessa técnica podem ser descritas como sistema de identificação e
priorização das necessidades de acordo com a avaliação de cada recurso. O conceito
de QFD é aplicado no levantamento de requisitos, em que o cliente é o guia para
a criação de requisitos;
• CRC: A técnica Cooperative Requirements Capture, assim como o JAD, é
uma sessão de grupo que possui papéis claramente definidos. Nessa técnica, os
participantes são os usuários, o facilitador e outros envolvidos de forma indireta
no sistema. O CRC diferencia-se do JAD e QFD por focar no usuário operativo;
• Prototipação: Essa técnica utiliza-se de protótipos que levam em
consideração um conjunto inicial de requisitos para que sejam avaliados pelo
usuário. Esse conjunto de requisitos são traduzidos em um protótipo de
interface do usuário, que é criado e mantido pelo projetista da forma mais
simples possível. A maior vantagem dessa técnica é que ela permite apresentar
uma variedade de alternativas antes que se gaste esforço com a implementação/
codificação de algum protótipo. E somente após os usuários finais aceitarem o
protótipo é que será criado o documento de especificação dos requisitos;
• Cenários: Para alguns, a utilização dessa técnica facilita por se relacionar
mais a exemplos reais do que a descrições de funcionalidades do sistema. Por isso,
é bastante útil criar uma variedade de interação dos cenários e utilizá-los para
levantar e compreender melhor os requisitos de sistema. Os cenários exemplificam
as sessões de interação entre os usuários finais e o sistema, permitindo que eles
simulem suas interações por meio dos cenários. Dessa forma, os usuários explicam
capítulo 2 • 43
o que estão fazendo e a informação que precisam que o sistema dê para possam
descrever a tarefa descrita no cenário.
TÉCNICA DESCRIÇÃO
Nessa técnica, existe um contato direto e prolongado entre
o contexto, o ambiente onde o software será inserido, e o
OBSERVAÇÃO observador. É como se estivesse uma pessoa observando os
usuários finais realizando as suas tarefas que poderão ser
ajudadas com o novo software.
capítulo 2 • 44
Validação de requisitos e prototipação
capítulo 2 • 45
É como se fosse um processo de lapidação para encontrar os pontos concordantes
acerca dos requisitos e visualizar as implicações de decisões futuras. Dessa forma,
é essencial a participação de especialistas para orientar os clientes, usuários e
desenvolvedores a fim de resolver seus conflitos. E isso deve ser feito em vários
momentos, o que torna esse processo contínuo, tendo um maior esforço nas fases
de levantamento e especificação de requisitos. Como também é um processo
interativo, é aplicado tanto no modelo final de requisitos quanto nos modelos
ditos intermediários durante todo o processo de requisitos.
A validação de requisitos deve gerar um documento bem definido para
que as incoerências e inconformidades sejam corrigidas a fim de que se possa
dar continuidade ao processo de desenvolvimento; assim, a validação reduz o
tempo que seria gasto para identificar essas incoerências e inconformidades.
A validação possui um alto grau de eficiência na descoberta de erros e
também reduz a possibilidade de encontrá-los em alguma fase final, o
que poderia gerar algum desastre no trabalho. É desafiante para esse processo
ter de mostrar a especificação correta do sistema, pois ele não possui uma
representação que possa ser utilizada como base da mesma forma que o projeto
e a implementação possuem o documento de requisitos. Ou seja, formalmente,
não há uma maneira para demonstrar que a especificação está de fato correta
(KONTONYA, 1998).
Podemos citar alguns problemas que somente são identificados durante o
processo de validação de requisitos:
capítulo 2 • 46
Embora para a validação não exista algum documento que possa ser utilizado
como base, existe uma forma demonstrar a conformidade da especificação de
requisitos. A figura a seguir ilustra o processo de validação de requisitos.
capítulo 2 • 47
requisitos possam apresentar. Além disso, essa técnica melhora a comunicação
entre os desenvolvedores e os usuários.
Porém, a técnica de prototipação na validação de requisitos apresenta
algumas desvantagens:
capítulo 2 • 48
• Problemas de documentação: os problemas encontrados devem ser
documentados para que sejam analisados; essa coleta de problemas deve ser
realizada de forma cautelosa.
capítulo 2 • 49
As principais características da UML, de acordo com Booch, Jacobson e
Rumbaugh (2000), são:
Diagrama de Objeto
Diagrama de Pacotes
DIAGRAMAS DE ESTRUTURA
Diagrama de Componentes
(ESTÁTICOS)
Diagrama de Implantação
Diagrama de Perfis
capítulo 2 • 50
Diagrama de Casos de Uso
Diagrama de Atividade
Diagrama de Interação
DIAGRAMAS DE COMPORTAMENTO (Diagrama de Sequência)
Diagrama de Interação
(Diagrama de Tempo)
Diagrama de Interação
(Diagrama de Interação Geral)
capítulo 2 • 51
Logicamente, antes da criação de um diagrama UML, os requisitos já devem
ter sido coletados. Esse tipo de diagrama pode ser utilizado na técnica de cenários
da elicitação de requisitos para capturar novos requisitos; por fim, ao atingir a
validação dos requisitos, ele será responsável por delimitar o escopo do projeto,
ou seja, representará o que o sistema deverá fazer, e o que não estiver nele poderá
ser considerado como o que o sistema não precisa fazer. Observando a figura
acima, temos um diagrama representando um sistema de vendas com possui cinco
atores, sendo o Cliente Especial e o Cliente Comum tipos do ator Cliente, além
de nove casos de uso (Fazer Pedido, Verificar Pedido, Cancelar Pedido, Pedidos
em Oferta, Cliente Especial, Procurar Pedido, Calcular Postagem, Entregar
Produto, Fornecer Produto) que representam as funcionalidades do sistema. E,
por fim, temos as interações entre casos de usos e atores, em que a esses últimos
são delegados suas responsabilidades diante das funcionalidades do sistema. Por
exemplo, o ator Funcionário é o único que não vai interagir diretamente com o
sistema, enquanto o autor Cliente (Cliente Especial e Cliente Comum) poderá
fazer pedido (podendo opcionalmente fazer pedido em oferta ou como cliente
especial), verificar pedido e cancelar pedido (em ambos, obrigatoriamente terá
de procurar o pedido). Já o ator Transportador será responsável por calcular a
postagem e entregar o produto, e, por último, o ator Fornecedor será responsável
por fornecer o produto.
Com isso, podemos observar que um único diagrama pode nos dizer muito.
Claro que no documento de projeto arquitetural os diagramas são descritos de
uma melhor forma. Mas observe que a visualização gráfica dos requisitos torna
o entendimento das funcionalidades, interações e escopo do projeto mais fácil
para a compreensão do que uma tabela de requisitos repleta de textos. Embora
existam quatorze diagramas UML, não necessariamente serão criados quatorze
diagramas em um projeto arquitetural: a quantidade de diagramas UML que
precisarão ser construídos depende da complexidade e das visões do sistema que
será desenvolvido. Em alguns projetos, por exemplo, em relação ao diagrama
de casos de uso, alguns casos de uso que compõem um diagrama deverão ser
detalhados em outros diagramas de casos de uso exclusivamente para eles.
Outro exemplo de aplicação de UML está presente na Figura 1 deste capítulo,
em que consta a ilustração do processo de engenharia de requisitos. Trata-se do
diagrama de atividades.
capítulo 2 • 52
Modelo conceitual
capítulo 2 • 53
Especificação de interfaces
capítulo 2 • 54
definição para o desenvolvimento de interfaces: modelo de tarefa, modelo de
plataforma e, por último, modelo de apresentação.
Assim como as demais, as especificações de interface do WebML (WebRatio
Team, 2002) possuem base na linguagem XML e são independentes de plataforma
e linguagem de programação. Os elementos são representados em XML para
a codificação e manutenção de sites de forma automática. Combinando
com a tecnologia XSL, ao se especificar com WebML existe a possibilidade
de transformação em templates de páginas, sendo eles transcritos para
determinada linguagem escolhida de acordo com o seu suporte. Elementos
visuais são utilizados pelo WebML com o intuito de representar informações
em uma página, na qual tais informações foram descritas no modelo de dados da
linguagem, podendo representar conteúdo ou operações. As interfaces que fazem
uso dessa linguagem são multiplataformas, independentemente de plataforma
e linguagem de programação, e o XML, de forma abstrata, faz descrição que
abrange todos os elementos e operações.
Já a segunda abordagem que trata das não associadas a métodos de projetos
possui fundamento em modelos voltados à criação de interfaces e geralmente
possui um nível de menor grau quando se trata de descrever interfaces.
Entre as linguagens que possuem mais destaque, trataremos de: XUL (XML
User Interface), UIML (User Interface Markup Language), XAML (eXtensible
Applications Markup Language) e o PIMA (Platform Independent Model for
Applications) da IBM.
Com o XUL (Harjono, 2001), tem-se a possibilidade de construir
facilmente aplicações Web sofisticadas, ricas, de fácil implementação e
manutenção, por serem baseadas em XML. Com menor esforço, as especificações
de interfaces definidas com XUL podem ser transformadas em outras linguagens.
E, assim como o HTML, essa ferramenta permite a utilização de CSS Style Sheet
e JavaScript, além de XSLT, Xpath e o DOM.
A UIML (Ali et al., 2002) é uma linguagem declarativa para a descrição de
interface e também baseada em XML. O seu objetivo é a criação de interfaces
multiplataformas permitindo a codificação de interfaces sem a necessidade
de aprender linguagens e APIs (Aplicações de Programação de Interfaces)
específicas. A UIML separa o código lógico da aplicação do código da interface.
Essa linguagem não descreve interfaces de maneira tão abstrata.
capítulo 2 • 55
A XAML (Dalal, 2011) permite a definição de interfaces com sintaxe
XML, tratando a lógica de programação do sistema de forma separada da
interface, em que é possível a utilização de JavaScript e CSS. Assim como o
XUL, o seu nível de definição é pouco abstrato. A XML depende da plataforma
da Microsoft Windows.
O Projeto PIMA, da IBM, procura especificar aplicações sem depender
de plataforma, ou seja, plataforma independente. E, para o desenvolvimento
de determinada aplicação com o PIMA, tal aplicação deverá conter um ciclo de
vida que possui três partes: design-time, load-time e run-time. O design-time é a
fase de identificação dos elementos abstratos que interagem, sendo responsável
por modelar e desenvolver o sistema. A load-time compõe o sistema, adapta e
carrega em dispositivos os componentes que pertencem ao sistema. E o run-
time é a execução do sistema por parte do usuário, em que um dispositivo
inicia a utilização de funções do sistema.
ATIVIDADE
01. De acordo com o que foi estudado neste capítulo, conceitue definição de requisitos.
02. De acordo com este capítulo, quais são os tipos e técnicas de levantamento
de requisitos?
03. De acordo com o que foi estudado, neste capítulo, qual a importância da
validação dos requisitos?
04. De acordo com o texto, qual a importância da UML na arquitetura de sistemas?
05. De acordo com o texto, o que é modelo conceitual e quais os tipos de abordagens
para especificações de interfaces?
capítulo 2 • 56
GABARITO
01. Uma descrição, uma especificação do que deve ser implementado. Ou seja, os
requisitos são responsáveis por descrever como será um comportamento, um atributo ou
uma propriedade do sistema. E os requisitos também podem definir quais são as restrições
ao desenvolvimento.
04. A UML é uma linguagem utilizada para descrever por meio de modelos uma
arquitetura de software de forma simplificada, realista, apresentando uma perspectiva bem
específica para que proporcione uma melhor compreensão acerca do sistema. Ela vai ser
responsável por facilitar visualmente o entendimento de todos acerca do projeto.
05. Modelo conceitual: é um modelo baseado nos requisitos e tem como objetivo a criação
de um sistema de acordo com os objetos, propriedades e relações mapeadas que abrangem
as tarefas dos usuários. Um modelo conceitual é composto por diversas suposições extraídas
no mundo real que apontam quais são as regras de negócio de determinado sistema: trata-
se de descrever um sistema respondendo a algumas perguntas, como: o que sistema deve
fazer? Como ele deve se comportar? Como ele deve parecer?
Tipos de especificação de interfaces: abordagens associadas a métodos de projeto e
abordagens não associadas a métodos de projeto.
capítulo 2 • 57
REFLEXÃO
Neste capítulo, iniciamos os nossos estudos sobre Definição de Requisitos e Aplicação
de UML. Iniciamos o nosso aprendizado com a definição de requisitos, quando conhecemos
um pouco sobre engenharia de requisitos, além de conceitos presentes na literatura sobre
ambos. Conhecemos também os tipos de requisitos, a sua importância e algumas técnicas da
fase de levantamento ou elicitação de requisitos. E aprendemos quão importante é validar os
requisitos junto ao cliente. Entre algumas técnicas de validação dos requisitos, o foco de nossos
estudos foi a técnica de prototipação: conhecemos as suas vantagens e desvantagens, além de
visualizarmos a técnica de prototipação no processo de validação de requisitos.
Compreendemos também a importância de se utilizar representação gráfica, seja para
levantar requisitos os validá-los, e, sobretudo, a sua importância no projeto arquitetural do
sistema. Nesse ponto dos estudos, podemos fazer um link com o que foi estudado no capítulo
anterior, em que se tratou do uso de modelos para o reconhecimento da abstração, quando
todos os envolvidos no projeto poderiam obter de forma facilitada o entendimento acerca do
que será desenvolvido. Mostramos que a UML é uma aliada para a arquitetura de sistemas de
software. Conhecemos suas características e verificamos que existem quatorze representações
gráficas ou diagramas UML divididos em duas técnicas de modelagem. Aprendemos um deles,
o diagrama de casos de uso, em um exemplo prático de sistemas de vendas.
Ao partir para Modelo Conceitual, aprendemos que esses modelos são baseados nos
requisitos e procuram criar sistemas de acordo com os objetos, propriedades e relações
mapeadas que abrangem as tarefas dos usuários. Um modelo do mundo real deve fazer
parte do produto da interface, ou seja, nele são utilizados cenários e metáforas que simulam
e estabelecem alguma relação com a utilização em determinada tarefa do usuário final.
Aprendemos também que, para especificar interface, é interessante trabalharmos apenas
com ela independentemente da lógica de programação das regras de negócio. Deve-
se trabalhar com a especificação de interface de forma “isolada” do resto do sistema. E
conhecemos algumas ferramentas que fazem muito bem isso, procurando ser multiplataforma
e atender a essa especificação com qualidade. Algo interessante que podemos notar é o uso
da tecnologia XML para essa etapa, quando se utiliza o seu potencial de interoperabilidade e
independência de linguagens de programação e plataforma.
Finalizamos este capítulo com um entendimento melhor sobre requisitos, seus tipos e
técnicas de levantamento, validação de requisitos e a utilização da técnica de prototipação,
a utilização da UML em arquiteturas de sistemas, modelo conceitual, além da especificação
capítulo 2 • 58
de interfaces e ferramentas para o seu suporte. Com os conhecimentos adquiridos neste
capítulo, podemos dar continuidade aos nossos estudos neste livro.
LEITURA
Para você melhorar o seu nível de aprendizagem envolvendo os conceitos referentes a
este capítulo, consulte as sugestões abaixo:
REFERÊNCIAS BIBLIOGRÁFICAS
______. IEEE, IEEE Std 610.12. In: IEEE Standard glossary of software engineering
terminology. New York: IEEE Computer Society, 1990.
______. WebRatio Team. In: WebML User Guide. Tutorial fornecido pela ferramenta
WebRatio 4.2. XXX: YYY, 2002.
capítulo 2 • 59
ABRAMS, M. et al. Appliance-Independent XML User Interface Language. In: Proceedings
of the Eighth International World Wide Web Conference. Toronto: XXXX, 1999.
ALI, M. F., QUIÑONES, M. A. P., ABRAMS, M., SHELL, E. Building Multi-Platform User
Interfaces with UIML. In: Computer-Aided Design of User Interfaces III. Dordrecht:
Kluwer Academic Publishers, 2002.
BERTI, S., CORREANI, F., PATERNÒ, F., SANTORO, C. The TERESA XML Language
for the Description of Interactive Systems at Multiple Abstraction Levels. In: Proceeding
Workshop on Developing User Interfaces with XML: Advances on User Interface
Description Languages. Gallipoli: ACM, 2004.
BOOCH, G., RUMBAUGH, J., JACOBSON, I. UML, Guia do Usuário. Rio de Janeiro:
Campus ,2000.
CASTRO, J. F. B. Introdução à engenharia de requisitos. In: XXI Congresso da Sociedade
Brasileira de Computação. Canela: XXX, 1995.
CHRISTEL, M., KANG, K. Issues in Requirements Elicitation. Pittsburgh: Software
Engineering Institute, 1998.
DALAL, M., GHODA, A. XAML developer reference. XXX: Microsoft Press, 2011.
DAVIS, A. M. Software requirements: objects, functions and states. : Prentice Hall, 1993.
GOGUEN, J. A. Techniques for Requirements Elicitation. In: Software Requirements
Engineering. XXXX: IEEE Computer Society Press, 1997.
HARJONO, J. H. XUL Application Development. Singapore: Nanyang Technological
University, 2001.
JACKSON, M. Software Requirements and Specifications. London: Addison-
Wesley, 1995.
KOTONYA, G., SOMMERVILLE, I. Requirements Engineering Processes e
Techniques. XXXX: John Wiley and Sons, 1998.
Lamsweerde, A., Darimont, R. Letier, E. Managing Conflicts in Goal - Driven Requirements
Engineering. In: IEEE Transactions on Software Engineering. Special Issue on Managing
Inconsistency in Software Development. XXXX: YYYY, 1998.
LAMSWEERDE, A. V. Requirements engineering in the year 00: a research
perspective. Limerick: ACM Press, 2000.
LEE, W. J., CHA, S. D., KWON, Y. R. Integration and analysis of use cases using modular
petri nets in requirements engineering. In: IEEE Transactions on Software Engineering.
Washington: IEEE Computer Society, 1998.
LEITE, J. C. S. P. Engenharia de Requisitos: Notas de Aula. Rio de Janeiro, PUC-Rio, 1994.
PFLEEGER, S. L. Engenharia de software: teoria e prática. São Paulo: Prentice Hall, 2004.
capítulo 2 • 60
LOUCOPOULOS, P., KAVAKLI, V. Enterprise Modelling Engineering, International
and Teleological Approach to Requirements Engineering Journal of Intelligent and
Cooperative Information Systems. XXXX: YYYY, 1995.
KOTONYA, G., SOMMERVILLE, I. Requirements Engineering: Processes and
Techniques. West Sussex: John Willey & Sons Ltd, 1998.
SOMMERVILLE, I. Software engineering. XXXX: Addison-Wesley, 2004.
SOMMERVILLE, I., SAWYER, P. Requirements engineering: a good practice guide.
XXXX: Wiley, 1997.
THAYER, R. H., DORFMAN, M. Introduction to Tutorial Software Requirements
Enginnering. In: Software Requirements Engineering. Washington: IEEE Computer
Society, 1997.
ZAVE, P. Classification of research efforts in requirements engineering. In: ACM
Computing Surveys. New York: ACM Press, 1997.
capítulo 2 • 61
3
Identificação e
especificação de
componentes
Identificação e especificação de componentes
Introdução
OBJETIVOS
• Compreender o que é a identificação de componentes;
• Conhecer o processo de identificação de componentes;
• Compreender a especificação de componentes;
• Entender os tipos de componentes EJB;
capítulo 3 • 63
• Conhecer metodologias que utilizam componentes de software;
• Compreender a importância de empacotar componentes;
• Conhecer algumas técnicas de implementação de alterações em componentes.
Identificação de componentes
capítulo 3 • 64
Processo de identificação de componentes
capítulo 3 • 65
relacionadas ao seu grau de reuso. Com isso, podemos destacar três passos da
identificação de componentes:
capítulo 3 • 66
Componentes similares: componentes com a mesma finalidade.
Tipo: especificação (diagramas ou documentação) ou implementação (código-
fonte ou executável).
Fase de integração: em qual fase do ciclo de vida o componente poderá
ser integrado.
Granularidade: tamanho do componente (total de funcionalidade, número
de casos de uso, fase de integração etc.);
3. Maturidade: grau de estabilidade e maturidade do componente.
Nível de reuso: quantas vezes o componente foi utilizado em
diversos sistemas.
Versões: o controle de versionamento permite a reutilização e atualização
ou correção de funções do componente;
4. Documentação: documentos do componente.
Modelo de componentes: estabelece os padrões (estrutura, recursos
disponíveis etc.), descrevendo a maneira de interação entre as funcionalidades.
Especificação das interfaces: as funcionalidades devem ser descritas,
assim como as informações sobre as interfaces (nome, métodos,
parâmetros, tipos etc.);
5. Tecnologia: informações a respeito da implementação e da tecnologia
utilizada na construção do componente.
Infraestrutura: suporte para a interação dos componentes de acordo com o
modelo de componente, fornece a infraestrutura necessária para a execução
dos componentes.
Portabilidade: a plataforma para qual o componente foi desenvolvido.
Ferramenta de desenvolvimento: a linguagem de programação,
ambiente de desenvolvimento, compilador, biblioteca e outras
ferramentas utilizadas.
Interoperabilidade: a troca de informações entre diferentes componentes.
Interface gráfica: ferramenta visual para manipular o componente.
Características não funcionais: desempenho, segurança, confiabilidade etc.
Restrições: as limitações devido a implementação ou tecnologia utilizada
na construção do componente.
Distribuição: identifica onde o componente está localizado e se ele pode
ser distribuído (em rede);
6. Alterações: como as alterações podem ser realizadas no código-fonte
do componente.
capítulo 3 • 67
Formas de modificações: são identificadas as maneiras de modificar
o componente.
Acesso ao código-fonte: identifica a permissão ao acesso do código-fonte
do componente;
7. Controle de qualidade: controle e garantia de qualidade do componente.
Métricas: definição das métricas responsáveis pela avaliação da utilização,
qualidade e maturidade.
Teste: mecanismos de testes de componentes.
CARACTERÍSTICAS
Nome
IDENTIFICAÇÃO
Origem
Propósito
Domínio da aplicação
Componentes similares
USO
Tipo
Fase de integração
Granularidade
Nível de reuso
MATURIDADE
Versões
Modelo de componentes
DOCUMENTAÇÃO
Especificação das interfaces
capítulo 3 • 68
Infraestrutura
Portabilidade
Ferramenta de desenvolvimento
Interoperabilidade Infraestrutura
TECNOLOGIA
Interface gráfica
Restrições
Distribuição
Formas de modificações
ALTERAÇÕES
Acesso ao código-fonte
Métricas
CONTROLE DE QUALIDADE
Teste
Tipos de componentes
capítulo 3 • 69
Figura 2. EJB e a arquitetura cliente/servidor.
Session bean
capítulo 3 • 70
Esses beans podem ser classificados de duas formas:
Entity bean
capítulo 3 • 71
em que cada registro da tabela representa determinada instância. Outra diferença
entre esse e o bean anterior está relacionada ao ciclo de vida que, nesse caso, é
mais longo. O Entity bean não possui dependência de sessão com o cliente,
mas depende da existência de dados em sua base de dados (Roman, 2002).
Devido ao Entity bean utilizar-se de acesso a dados presentes em uma base
de dados de um dispositivo, devemos compreender que, para isso, deve haver
sincronização feita de forma periódica entre o componente e o dispositivo.
Tomando conhecimento disso, podemos classificar a persistência desses dados na
tecnologia EJB, e essa classificação está relacionada à diferença entre os responsáveis
por tal implementação. São elas:
Message-driven bean
Esse tipo de componente se difere dos outros que, como já foi citado
anteriormente, são baseados em RMI; portanto, eles são beans distribuídos que
são acessados pela rede. Já o Message-drive bean utiliza a tecnologia JMS, ou
seja, recebe as mensagens que são enviadas por clientes JMS (Roman, 2002).
Sendo assim, nesse tipo de componente não temos os acessos através de invocação
de métodos; aqui, esses acessos são realizados por meio de envio de mensagens.
Uma característica desse bean é o fato de ele ser assíncrono, ou seja, os clientes
JMS enviam as mensagens, mas não guardam as respostas dos beans, já que esses
componentes não apresentam tipos de retornos.
capítulo 3 • 72
Figura 3. Enterprise JavaBeans.
Metodologias/Padrões
Engenharia de Domínio
capítulo 3 • 73
parte do mesmo domínio é chamado de Engenharia de Aplicação. Ela utiliza-se
de modelos, arquiteturas e componentes que são desenvolvidos na Engenharia de
Domínio (ver Figura 4).
capítulo 3 • 74
Desenvolvimento de Software Baseado em Componentes
capítulo 3 • 75
às vezes existe a necessidade de realizar modificações nesses componentes para
adaptá-los ao novo software;
• Combinação dos componentes em sistemas: a integração dos componentes
no sistema utiliza a infraestrutura predefinida de acordo com a tecnologia de
componentes de software que será utilizada;
• Evolução do sistema: corrigir erros de componentes pode resultar em
substituí-los por outros ou até mesmo na codificação de novas soluções de tais
problemas, que podem ser, por exemplo, modificações no comportamento dos
componentes ou em suas interfaces.
capítulo 3 • 76
Na figura a seguir, são apresentadas as atividades-chave, interativas e necessárias
entre si, em linhas de produtos baseadas no desenvolvimento de artefatos centrais
(core asset development), no desenvolvimento de produtos (product development) e
no gerenciamento de linha de produto (management).
Empacotamento de componentes
capítulo 3 • 77
os requisitos do software que o irá receber. O empacotamento ou encapsulamento
é uma das abordagens bastante utilizadas para adaptar um componente ao novo
sistema que o irá acoplar, porém, em vez de modificá-lo, é criada uma nova visão
externa para o componente.
Empacotar componentes é gerar uma nova visão para determinado
componente, ou seja, uma nova interface deverá ser adaptada, diferentemente
da interface original do componente, pois deverá atender a requisitos específicos
para a nova reutilização (ver Figura 7).
capítulo 3 • 78
a modificação de funcionalidade(s) original(is) do componente que foi
empacotado. Nesse acaso, a estrutura do empacotamento de componentes deve
atuar na inserção de novas funcionalidades ou, ainda, modificar a forma original
de tratar invocações de métodos do componente.
Implementação de componentes
Para tal, também existem algumas técnicas tradicionais que podem ser utilizadas.
São elas (BOSCH, 1999): técnicas de caixa-branca (white-box) e técnicas de
capítulo 3 • 79
caixa-preta (black-box). Essas técnicas serão descritas mais detalhadamente
a seguir.
Tratando dos requisitos que devem ser observados e avaliados para a escolha
de utilização de cada uma das técnicas, temos:
Técnicas de caixa-branca
capítulo 3 • 80
de programação que são usadas na codificação de componentes. Exemplos de
técnicas de caixa-branca:
Técnicas de caixa-preta
capítulo 3 • 81
ao componente. Porém essa técnica está ligada à sobrecarga de codificação nas
interfaces, incluindo aquelas em que não há necessidade de alterações;
• Proxy: essa técnica faz o intermédio entre a comunicação e o componente
original. Sendo assim, as requisições recebidas são redirecionadas ao componente.
Diferentemente da técnica anterior, essa não encapsula o componente original,
mas fica alocada para filtrar as requisições que chegam para o componente original.
Aqui é possível efetuar o acesso direto ao componente original: isso elimina
possíveis sobrecargas de codificações. Não é exigido conhecimento interno sobre
o funcionamento dos componentes, já que as modificações são feitas de forma
externa por meio do componente proxy.
ATIVIDADE
01. De acordo com o que foi estudado neste capítulo, conceitue identificação de
componentes e cite quais são as técnicas utilizadas para identificar componentes.
02. De acordo com o que foi estudado neste capítulo, cite e conceitue os passos para
identificar componentes.
03. De acordo com o que foi estudado neste capítulo, utilizamos a tecnologia EJB para
exemplificar os tipos de componentes. Quais são esses tipos?
04. De acordo com o texto, qual a principal diferença entre o Session bean e o Entity bean
com o Message-driven bean?
05. De acordo com o texto, cite os modelos para desenvolvimento que utilizam códigos
reutilizáveis juntamente com suas respectivas atividades.
capítulo 3 • 82
GABARITO
01. Trata-se de uma tarefa que procura analisar um sistema já desenvolvido com o
objetivo de extrair possíveis componentes reutilizáveis, em que se torna possível reaver o
conhecimento, a experiência e o trabalho que foram aplicados em sistemas já desenvolvidos.
Sobre as técnicas utilizadas para identificar código reutilizável, temos as baseadas em
transformação de componentes que já existem em componentes reutilizáveis e as baseadas
em identificar componentes por meio de métricas.
04. Tanto o Session bean quanto o Entity bean são baseados em RMI (Remote Method
Invocation); portanto, são acessados por meio de protocolos de objetos distribuídos. Já o
Message-driven bean somente trata as mensagens, recebendo-as e as processando, com
base no JMS (Java Message Service).
capítulo 3 • 83
• Desenvolvimento de software baseado em componentes: Qualificação de componentes,
Adaptação dos componentes, Combinação dos componentes em sistemas e Evolução
do sistema;
• Linha de produtos de software: desenvolvimento de artefatos centrais (core asset
development), desenvolvimento de produtos (product development) e gerenciamento de linha
de produto (management).
06. Empacotar componentes é gerar uma nova visão para determinado componente,
ou seja, uma nova interface deverá ser adaptada, diferentemente da interface original do
componente, pois deverá atender a requisitos específicos para a nova reutilização. Ela é
uma das abordagens mais utilizadas para adaptar um componente ao novo sistema que o irá
acoplar, porém, em vez de modificá-lo, é criada uma nova visão externa para o componente.
O empacotamento de componentes é geralmente utilizado quando se torna necessário
alguma(s) alteração(ões) para adaptar o componente de acordo com os requisitos do
software que o irá receber.
REFLEXÃO
Neste capítulo, iniciamos os nossos estudos acerca da Identificação e Especificação
de Componentes. Começamos o nosso aprendizado com o conceito de Identificação de
Componentes, em que fomos apresentados para duas técnicas e conhecemos o processo de
identificação de componentes. Conceituamos a definição da especificação de componentes
tomamos como exemplo características de um suposto componente e detalhamos tais
características para compreendermos como ela funciona.
Conhecemos os tipos de componentes presentes na especificação de componentes de
software a serem desenvolvidos por meio da tecnologia EJB. Conhecemos os seus tipos
(Session bean, Entity bean e Message-drive bean) e suas diferenças. Também conhecemos
três metodologias (Engenharia de Domínio, Desenvolvimento de Software Baseado
em Componentes, Linha de Produtos de Software) e suas atividades que fazem uso da
reusabilidade de software. Em Desenvolvimento de Software Baseado em Componentes,
reforçamos o conceito de COTS (Commercial Off-the-shelf) visto no Capítulo 1 deste livro.
Conceituamos, também, a atividade de Empacotamento de Componentes, em que
observamos que ela parte de uma nova interface que deverá ser adaptada, diferentemente
da interface original do componente, pois deverá atender a requisitos específicos para a nova
reutilização. Ou seja, será necessário alguma(s) alteração(ões) para adaptá-lo de acordo
capítulo 3 • 84
com os requisitos do software que o irá receber. E podemos compreender isso através de
exemplos de dois contextos para o empacotamento de componentes. Conhecemos também
as técnicas de caixa-branca e caixa-preta, bem como suas respectivas técnicas que auxiliam
na implementação de modificações em componentes.
Finalizamos este capítulo com uma base de conhecimentos solidificada acerca de
identificação e especificação de componentes, o que complementa os estudos realizados nos
capítulos anteriores. Com os conhecimentos adquiridos neste capítulo, podemos continuar os
nossos estudos neste livro.
LEITURA
Para você avançar mais no tocante a seu nível de aprendizagem envolvendo os conceitos
referentes a este capítulo, consulte as sugestões abaixo:
REFERÊNCIAS BIBLIOGRÁFICAS
__________. A Framework for Software Product Line Practice. Disponível em: http://www.sei.cmu.
edu/productlines/frame_report/rel_domains.htm. Acesso em: 08/08/2016.
ARAÚJO, S. P. C. Uma abordagem de apoio à reutilização de componentes em ferramentas
ORACLE. Blumenau: Universidade Regional de Blumenau, 1995.
ARNOLD, R. S.; FRAKES, W. B. Software Reuse and Reengineering. Califórnia: Institute of Eletrical
and Eletronicsengenieers, 1994.
BASS, L. et al. Volume II: Technical concepts of components-based software engineering. Pittsburg:
Carnegie Mellon University, 2000.
capítulo 3 • 85
BAYER, J. et al. PuLSE: A Methodology to Develop Software Product Lines. Symposium on Software
Reusability (SSR). Los Angeles: ACM Press, 1999.
BOSCH, J. Superimposition: a computer adaptation technique. Information and Software Technology.
XXX: YYYY, 1999.
CATTONI, S. M. Protótipo para a identificação de código reusável em Dataflex. Blumenau:
Universidade Regional de Blumenau, 1996.
DEMICHIEL, L. G. Enterprise JavaBeans Specification. Version 2.0. Palo Alto: Sun Microsystems,
Inc., 2000.
FOREMAN, J. Product Line Based Software Development – Significant Results, Future Challenges. In:
Software Technology Conference. Salt Lake City: 1996.
FURLAN, J. D. Reengenharia da Informação: Do Mito à Realidade. São Paulo: MAKRON Books do
Brasil, 1995.
MONSON-Haefel, R. Enterprise JavaBeans. Sebastopol: O’Reilly, 2001.
ROMAN, E., AMBLER, S., JEWELL, T. Mastering Enterprise JavaBeans. New York: John Wiley &
Sons, 2002.
YACOUB, S., AMMAR, H., MILI, A. Characterizing a Software Component. In: Proc. of Int. Workshop
on Component-Based Software Engineering, 2. Los Angeles: XXXX, 1999.
capítulo 3 • 86
capítulo 3 • 87
4
Interação de
componentes
Interação de componentes
Introdução
OBJETIVOS
• Conhecer a interação de componentes;
• Conhecer os fatores essenciais para que os objetivos da interação de componentes
possam ser alcançados;
• Aprender a definição de operações ou as regras de negócio;
• Aprender como funcionam os sistemas de gerenciamento de versão;
• Entender como são classificados os sistemas de gerenciamento de versão;
• Definir o processo de desenvolvimento RUP;
• Conhecer os elementos estruturais do RUP;
• Aprender o que é o padrão arquitetural MVC;
• Diferenciar o padrão de três camadas do MVC com base na comunicação.
capítulo 4 • 89
Interação de componentes
capítulo 4 • 90
que tratam de eventos. Na figura a seguir, podemos visualizar o comportamento
de um componente assíncrono.
capítulo 4 • 91
É importante a existência de mecanismos para a utilização de componentes que,
em sua grande parte, possuem implementação, características e funcionalidades
diversas. E, como já tratamos em capítulos anteriores. A interação entre
componentes é dada por chamadas a métodos de interface. Essas interfaces,
segundo (GIMENEZ, HUZITA, 2005), são responsáveis por agrupar uma série
de serviços que estão relacionados, garantindo, assim, que tanto os dados quanto
os processos estejam encapsulados.
Por meio das interfaces que conectam os componentes entre si, é possível
habilitar a interação ou comunicação entre cliente e componente sem o acesso
direto ao componente, apenas por interface. De forma geral, podemos imaginar
os componentes possuindo dois tipos de interfaces para que haja a interação com
os demais. Na figura a seguir, são apresentados esses dois “tipos” de interfaces que
permitem a interação de componentes.
capítulo 4 • 92
A interação de componentes ocorre no sistema logo após a fase de especificação
de componentes. Segundo Pagano (2004), operações com assinaturas completas
são descobertas por meio de modelos de interação, e, somado a isso, as interfaces
dos componentes são refinadas, divididas ou, ainda, agrupadas. Barroca, Gimenes
e Huzita (2005) ressaltam que nessa fase de interação de componentes ocorre a
identificação de novas operações relacionadas a negócios, já que os diagramas de
colaboração UML são utilizados para detalhar suas interações.
A análise sobre interação de componentes tem como ponto de partida
(BARROCA, GIMENES, HUZITA, 2005):
capítulo 4 • 93
No primeiro, as regras de negócios são responsáveis pela definição de restrições
devido a algum fator do negócio que se tem a preocupação de gerenciar. Nesse
aspecto, as regras de negócios estão relacionadas com os dados que estão e poderão
ser inseridos no sistema. Já no segundo, possuem a preocupação em tratar do
comportamento do negócio propriamente dito. Assim, haverá todo um suporte
para o gerenciamento e controle de riscos, ameaças ou oportunidades, além das
políticas do negócio. Nesse aspecto, as regras de negócios envolvem pessoas ligadas
ao negócio para que possam solucionar possíveis questões.
Ou seja, a abordagem utilizada pelo BRG (Business Rule Group) define as regras
de negócios sob o ponto de vista de sistemas de software sem que haja algum tipo
de compromisso ou dependência de tecnologias ou implementações. E sob a ótica
do empreendimento sem qualquer presença de software ou tecnologias. Porém,
embora exista essa distinção, na prática existe conflito: por muitas das vezes, esses
dois aspectos possuem regras que atuam ao mesmo tempo.
capítulo 4 • 94
Existem, também, outras formas de entender e definir as regras de negócio.
Para Ross (1998), elas podem ser agrupadas de acordo com suas respostas a
determinado evento, em que ele se trata de alteração de estado da aplicação
ou alguma operação em execução. Podem ser agrupadas em:
capítulo 4 • 95
projetos inteiros. O CVS teve seu início no ano de 1986 baseado no RCS;
foi criado por Dick Grune, que inicialmente o tinha denominado de CMT.
O CVS mais popular teve o seu desenvolvimento iniciado por Brian Berliner
no ano de 1989. A empresa CollabNet, visando a melhorar o CVS, acabou
desenvolvendo o Subversion, que também foi bastante aceito no mercado
(SUSSMAN, FITZPATRICK, PILATO, 2009).
Os sistemas de gerenciamento de versão já citados são do tipo centralizado
e de licença livre. Existem também os que são centralizados e de licença
comercial, assim como há os do tipo distribuído, que também podem ser de
licença livre ou comercial. Tanto que a SUN chegou a iniciar, na década de
90, o próprio sistema de gerenciamento de versões de forma distribuída, o
TeamWare, que teria a responsabilidade de gerenciar os seus projetos internos.
No entanto, o TeamWare foi deixado de lado, pois os desenvolvedores da
SUN passaram a utilizar o Mercurial, que também é do tipo distribuído e
com funções mais avançadas e modernas. O Mercurial foi desenvolvido em
2005 por Matt Mackall e teve uma enorme aceitação do mercado. Assim
também ocorreu com o Git, que foi criado, no mesmo ano de 2005, por
Linus Torvalds, e também teve uma grande aceitação do mercado. Ambos são
sistemas distribuídos e de licença livre.
Na tabela a seguir, podemos observar diversos sistemas de gerenciamento
de versão com seus respectivos anos de desenvolvimento, classificados em
centralizado ou distribuído e em licença livre ou comercial.
CENTRALIZADO
CCC/Harvest (1997), ClearCase (1992),
COMERCIAL Sourcesafe (1994), Perforce (1995), TFS (2005).
capítulo 4 • 96
GNU arch (2001), Darcs (2002), DCVS
(2002), SVK (2003), Monotone (2003),
LIVRE Codeville (2005), Git (2005), Mercurial
(2005), Bazaar (2005), Fossil (2007).
COMERCIAL
TeamWare(199?), Code co-op (1997),
COMERCIAL Bitkeeper (1998), Plastic SCM (2006).
capítulo 4 • 97
realizar as alterações e salvá-las em sua área de trabalho para depois realizarem o
Commit. Na figura a seguir, podemos visualizar melhor essa comunicação existente
entre o repositório e a área de trabalho do desenvolvedor.
capítulo 4 • 98
alterações, deve efetuar um commit e, assim, estará enviando as suas alterações para
o repositório central. Porém, conflitos entre os arquivos são possíveis que ocorram
entre os comandos de commit e de update. Uma solução para esse conflito é a
utilização do comando merge.
Já o modelo distribuído, que também pode ser chamado de descentralizado,
é composto por diversos repositórios independentes: cada desenvolvedor possui
o seu somado a uma área de trabalho. Aqui, os comandos de commit e de update
ocorrem de forma local. A figura 8 demonstra bem essa classificação.
capítulo 4 • 99
juntamente com a arquitetura cliente-servidor com um servidor (repositório)
central. A figura a seguir demonstra bem a união dessas duas classificações.
Subversion
capítulo 4 • 100
• Realizar alterações: svn add adiciona artefatos, svn delete exclui cópia, svn
copy copia um artefato e svn move movimenta artefatos;
• Verificar alterações: as informações de estados de artefatos são exibidas
pelo comando svn status, e o svn diff apresenta as diferenças presentes nas revisões;
• Desfazer alterações: svn revert reverte (desfaz) as modificações locais;
• Resolver conflitos: svn update atualiza no espaço de trabalho uma cópia, e
o svn resolved remove o artefato que está em conflito;
• Submeter alterações: svn commit envia ao repositório uma cópia com as
alterações realizadas na área de trabalho.
Mercurial
capítulo 4 • 101
• Atualizar repositório e cópia de trabalho: hg pull efetua download das
modificações do repositório, e o comando hg update mescla as modificações com
a cópia de trabalho;
• Fazer alterações: hg add adiciona arquivos, hg remove exclui artefatos de
uma cópia de trabalho, hg mv ou hg rename move ou renomeia artefatos;
• Verificar alterações: hg status mostra as informações de estados dos artefatos
presentes na cópia de trabalho, hg diff apresenta as diferenças entre as revisões;
• Desfazer algumas alterações: hg revert reverte as alterações locais;
• Resolver conflitos: hg resolve os conflitos entre arquivos;
• Submeter alterações: hg commit manda as modificações realizadas na área
de trabalho ao repositório;
• Propagar alterações para outro repositório: hg push manda as modificações
locais para um repositório de destino.
Git
capítulo 4 • 102
• Atualizar repositório e cópia de trabalho: git fetch efetua download das
modificações presentes no repositório, git merge mescla essas informações com
o repositório local e git pull atualiza o repositório e o espaço de trabalho com as
modificações presentes em outro repositório;
• Fazer alterações: git add adiciona artefatos, git rm exclui artefatos e git mv
move ou renomeia artefatos;
• Verificar alterações: git status apresenta as informações de estado de
artefatos, e git diff mostra as diferenças entre as revisões;
• Desfazer alterações: git revert reverte as modificações locais;
• Resolver conflitos: git mergetool resolve os conflitos de artefatos;
• Submeter alterações: git commit manda as modificações presentes no
espaço de trabalho para o repositório;
• Propagar alterações para outro repositório: git push manda as modificações
locais para um repositório de destino.
Embora tenha sido desenvolvido com foco em usuários Linux, o Git tam-
bém possui suporte para outros sistemas operacionais, como Unix, Windows,
Mac OS X, BSD, Solaris e Darwin. A interoperabilidade do Git permite a
disponibilização de plug-ins para diversas IDEs. E, assim como o Mercurial,
disponibiliza pacotes completos para instalação. Para os sistemas Linux, o Git
é um pacote presente em seus repositórios de softwares. E também trabalha
com protocolos de rede, como RSYNC, SSH, HTTP, HTTPS ou ainda pro-
tocolo próprio. O protocolo Git permite a otimização de largura de banda;
dessa forma, as suas operações sobre as atualizações são realizadas de forma
rápida e eficiente.
Elementos do RUP
capítulo 4 • 103
A sua arquitetura está apresentada na figura a seguir.
capítulo 4 • 104
O RUP pode se ser utilizado de diversas formas, pois não existe uma única
maneira de aplicá-lo. Martins (2007) apresenta algumas características que
diferenciam o RUP dos outros métodos interativos:
capítulo 4 • 105
Padrão de arquitetura MVC
capítulo 4 • 106
Figura 14. Arquitetura do padrão MVC.
capítulo 4 • 107
assim, podemos observar que o Controller é basicamente uma camada intermediária
que existe entre o Model e o View.
Na figura a seguir, está representado o padrão MVC com algumas operações e
a sua comunicação entre cada um dos componentes (ZEMEL, 2009).
capítulo 4 • 108
Padrão de arquitetura MVC e a arquitetura em três camadas
capítulo 4 • 109
ATIVIDADE
01. De acordo com o que foi estudado neste capítulo, defina componentes síncrono,
assíncrono e autônomo.
02. De acordo com o que foi estudado neste capítulo, diferencie sistemas de
gerenciamento de versão centralizado e distribuído.
03. De acordo com o que foi estudado neste capítulo, defina o RUP e cite os
seus elementos.
04. De acordo com o que foi estudado neste capítulo, o RUP apresenta algumas
características que o diferenciam dos outros métodos interativos. Cite essas características.
05. De acordo com o que foi estudado neste capítulo, quais são os componentes do
padrão arquitetural MVC e o que representa cada componente dele?
GABARITO
01. Componente Síncrono: nele, é preciso fazer o uso de abstração com o intuito de
sincronizar processos. Dessa forma, deve-se armazenar, de forma obrigatória, a resposta de
serviço desse tipo de componente, já que, para continuar a execução de determinada tarefa,
existe uma dependência com resultados da execução dos serviços.
Componente Assíncrono: ele não bloqueia determinado cliente à espera da finalização de
seu serviço. O componente assíncrono permite que as tarefas sejam executadas de maneira
concorrente. Nele, geralmente, é realizada alguma notificação que sinaliza o término de
determinado serviço com a utilização de funções de retorno ou, ainda, por meio da utilização
de sistemas que tratam de eventos.
Componente Autônomo: são aqueles que possuem serviços independentes de alguma
chamada de componente. O que guia as tarefas do componente autônomo são eventos.
capítulo 4 • 110
diversos repositórios independentes, e cada desenvolvedor possui o seu somado a uma área
de trabalho.
03. O RUP pode ser definido como uma forma interativa de desenvolvimento de software
guiado por casos de uso e centrado à arquitetura ou como um processo bem definido e
estruturado, em que nele é definido o responsável pelas atividades, como elas devem ser
realizadas e quando. O RUP apresenta estrutura voltada ao ciclo de vida de projeto ou, ainda,
como um processo que oferece estrutura personalizável para a engenharia de software.
Os elementos do RUP são: papel, atividade, artefato e fluxo.
04. Algumas das características que diferenciam o RUP dos outros métodos
interativos são:
• Atacar riscos de forma antecipada e contínua;
• Certificação de que algo de valor é entregue ao cliente;
• Foco no software executável;
• Acomoda as mudanças antecipadas;
• Libera de forma antecipada um executável da arquitetura;
• Desenvolvimento de sistema com componentes;
• Trabalho em equipe;
• Qualidade como estilo de vida, não algo deixado para ser feito depois.
05. Os componentes do padrão arquitetural MVC são: Model, View e Controller. O Model
representa a camada lógica da aplicação; o View, a camada de apresentação; e o Controller;
a camada de controle da aplicação.
REFLEXÃO
Neste capítulo, demos início aos nossos estudos sobre a interação de componentes.
Começamos por sua definição, em que tratamos de três tipos de componentes e dos
quatros fatores essenciais para que os objetivos da interação de componentes possam ser
atingidos. Em seguida, definimos as operações de negócio segundo alguns autores, quando
pudemos dividir essas operações ou regras sob dois aspectos, classificá-las em grupo e
ainda relacioná-las como requisitos.
capítulo 4 • 111
Aprendemos também sobre sistemas de gerenciamento de versão, um pouco de sua
história e a vasta implementação de aplicações com esse fim, além de alguns pontos
em comum entre eles e a classificação que possuem. Como exemplo de sistemas de
gerenciamento de versão, conhecemos como funciona o ciclo básico do Subversion,
Mercurial e o Git, bem como alguns detalhes técnicos e os comandos desses três sistemas.
Continuamos os nossos estudos conhecendo os elementos do processo de
desenvolvimento de software chamado RUP. Apresentamos três definições sobre esse
processo, conhecemos o seu Gráfico de Baleias e ainda aprendemos algumas características
que diferenciam o RUP dos outros métodos interativos. E também conhecemos e detalhamos
cada um dos quatros elementos do RUP.
Ao estudarmos o padrão de arquitetura MVC, conhecemos um pouco de sua história
e sobre a responsabilidade de cada um dos três componentes que constituem esse
padrão de arquitetura. Conhecemos, também, suas vantagens e desvantagens, além de
conhecermos alguns frameworks que fazem a utilização do MVC. E, ainda sobre MVC,
aprendemos a diferença entre o MVC e a arquitetura em três camadas acerca da forma
de comunicação que ambas possuem.
Finalizamos este capítulo com base sólida sobre a interação de componentes, as regras
de negócio e, principalmente, sobre sistemas de gerenciamento de versão, processo de
desenvolvimento RUP e o padrão arquitetural MVC. Complementam-se, assim, os estudos
realizados nos capítulos anteriores deste livro. Sendo assim, poderemos dar continuidades
ao próximo capítulo.
LEITURA
Para você melhorar mais o seu nível de aprendizagem envolvendo os conceitos referentes
a este capítulo, consulte as sugestões abaixo:
capítulo 4 • 112
ARAUJO, A. C. M., VASCONCELOS, A. M. L. Adaptando o RUP para o Desenvolvimento de Sistemas
de Informações Web. In: XI Conferência Internacional de Tecnologia de Software – Qualidade de
Software. Curitiba: XXXX, 2000.
BOENTE, A. N. P., OLIVEIRA, F. S. G., ALVES, J. C. N. RUP como Metodologia de Desenvolvimento de
Software para Obtenção da Qualidade de Software. In: SEGeT – Simpósio de Excelência em Gestão e
Tecnologia. Resende: Associação Educacional Dom Bosco, 2008.
REFERÊNCIAS BIBLIOGRÁFICAS
_____. Defining Business Rules - What Are They Really. Disponível em: http://www.
businessrulesgroup.org/first_paper/br01c0.htm. Acesso em: 28/08/2016.
_____. IBM. Acesso em: http://www.ibm.com/developerworks/downloads/r/rup/?S_CMP=rnav.
Acesso em: 31/08/2016.
BARROCA, L., GIMENES, I. M. S., HUZITA, E.H.M. Desenvolvimento Baseado em Componentes.
Rio de Janeiro: Ciência Moderna, 2005.
GAMMA, E., et al. Padrões de Projeto: soluções reutilizáveis de software Orientado a Objetos. Porto
Alegre: Bookman, 2000.
GIMENES, I. M. S., HUZITA E. H. M. Desenvolvimento Baseado em Componentes. Rio de Janeiro:
Ciência Moderna, 2005.
KROLL, P., KRUCHTEN P. The rational unified process made easy: a practitioner's guide to the
RUP. Boston: Addison Wesley, 2003.
KRUCHTEN, P. The rational unified process: an introduction. Boston: Addison-Wesley , 2003.
LEITE, J.C.S.P., LEONARDI, M.C. Business Rules as organizational policies. In: Proceedings of
the 9th International Workshop on Software Specification & Design. Los Alamitos: IEEE
Computer Society, 1998.
MACORATTI, J. C. Padrôes de projeto: O modelo MVC - Model View Controller. Disponível em:
http://www.macoratti.net/vbn_mvc.htm. Acesso em: 30/03/2016.
MARTINS, J. C. C. Gerenciando projetos de desenvolvimento de software com PMI, RUP e UML.
Rio de Janeiro: Brasport, 2007.
NASCIMENTO, L. B. Componentização de Software em JAVA2 Micro Edition – Um framework
para Desenvolvimento de Interface Gráfica para Dispositivos Móveis. Recife: Universidade Federal de
Pernambuco, 2005.
PAGANO, V. A. Uma Abordagem Arquitetural com Tratamento de Exceções para Sistemas de
Software Baseado em Componentes. Campinas: Universidade Estadual de Campinas, 2004.
REENSKAUG, T. M. H. MVC XEROX PARC 1978 - 79. Disponível em: http://heim.ifi.uio.no/~trygver/
themes/mvc/mvc-index.html. Acesso em: 30/08/2016.
capítulo 4 • 113
RIBEIRO, R. T. MVC: a essência e a web. Disponível em: http://rubsphp.blogspot.com.br/2013/02/
mvc-essencia-e-web.html. Acesso em: 30/08/2016.
ROSS, R. G. Business Rules Concepts. Houston: Business Rules Solutions Inc., 1998.
SANTOS, I., et al. Possibilidades e limitações da arquitetura mvc (model – view – controller)
com ferramenta ide (integrated development environment). Alfenas: Universidade José do
Rosário Vellano, 2010.
SOMMERVILLE, I. Engenharia de Software. São Paulo: Addison Wesley, 2003.
ZEMEL, T. MVC (Model – View – Controller). Disponível em: <http://codeigniterbrasil.com/passos-
iniciais/mvc-model-view-controller/>. Acesso em: 30/08/2016.
capítulo 4 • 114
capítulo 4 • 115
5
Provisionamento e
construção
Provisionamento e construção
Introdução
OBJETIVOS
• Compreender o Framework CCM;
• Entender a Arquitetura CORBA;
• Adquirir uma visão geral acerca do CORBA;
• Entender a fase de empacotamento e de distribuição de componentes;
• Compreender a importância dos componentes CORBA;
• Compreender a importância da Arquitetura CORBA na integração de sistemas heterogêneos.
capítulo 5 • 117
VINOSKI, 1999). A arquitetura do CORBA é composta por um ORB (Object
Request Broker), e esse possui a responsabilidade de gerenciar, de maneira
transparente, as comunicações, além de tratar das facilidades no que envolve
os elementos do sistema e os de serviços, que são os elementos direcionados ao
usuário. Logicamente, como desenvolvedor do CORBA, o OMG disponibiliza
essas especificações que são tratadas como uma série de padrões de facilidades e
de serviços.
A arquitetura
capítulo 5 • 118
• Object Request Broker: um mecanismo é disponibilizado pelo ORB com o
objetivo de fornecer a transparência de comunicação entre cliente e servidor. Dessa
forma, a programação distribuída é simplificada devido ao fato de ela intermediar
as chamadas de serviços. O cliente solicita o serviço ao servidor, e o ORB tem a
responsabilidade de encontrar esse servidor, de executar a solicitação e gerar um
retorno como resposta ao cliente quando for necessário;
• Interface ORB: no CORBA, essa interface é definida como abstrata, o
que faz com que ela possua uma série de operações genéricas. Isso permite que a
Interface ORB seja codificada de diversas formas;
• CORBA IDL stubs e skeletons: esses são elementos que buscam a união
entre cliente e servidor por intermédio do ORB. Faz-se necessária a utilização de
compilador CORBA IDL específico quando se quer transformar as definições
do CORBA IDL para alguma linguagem de programação, que geralmente é a
do sistema;
• Dynamic Invocation Interface (DII): com essa interface, é permitido
ao cliente o acesso direto ao mecanismo responsável por realizar as chamadas de
mensagens fornecidas pelo ORB sem que seja necessária a utilização de algum
IDL Stub;
• Dynamic Skeleton Interface (DSI): essa interface é análoga à DII que
pertence ao cliente. A DSI é a versão de servidor, e é ela quem permitirá que as
requisições sejam entregues ao servidor por meio do ORB; assim, nesse momento,
o servidor não possui o conhecimento sobre o tipo de objeto que estará sendo
implementado por ele. O cliente não possui o conhecimento de que irá se
comunicar com uma DSI ou com uma IDL Skeleton ao realizar chamada;
• Object Adapter: ele atua em conjunto com o ORB no servidor com o
intuito de auxiliá-lo na inicialização do servidor e com a entrega de requisições
de serviços.
ELEMENTO DESCRIÇÃO
Define operações que são descritas
OBJECT IMPLEMENTATION pela interface IDL CORBA.
capítulo 5 • 119
Responsável por encontrar o servi-
dor solicitado, executar a solicitação
OBJECT REQUEST BROKER e gerar um retorno como resposta ao
cliente quando for necessário. Forne-
ce transparência na comunicação.
capítulo 5 • 120
Figura 2. Utilização de stub e skeleton na comunicação cliente/servidor.
Visão geral
O CCM estende a IDL (Interface Definition Language) para que ela possibilite a
descrição de componentes CORBA e incorpora o CIDL (Component Implementation
Definition Language) para a descrição de detalhes acerca da implementação com o
objetivo de que seja permitido que o servidor possa gerar, empacotar e implantar
toda a estrutura. O mapeamento realizado com o Enterprise JavaBeans é definido
pelo CCM, permitindo assim que um EJB possa ser visto como um componente
CORBA. A maior parte do que é especificado do CCM é baseada nas experiências
que os desenvolvedores possuem com modelos de componentes COM+ e EJB.
E isso também foi baseado nas experiências de desenvolvimento de estruturas e
aplicações para a construção de servidor CORBA. As partes que interagem entre
si de forma a se integrarem e relacionarem, compondo o CCM, são:
capítulo 5 • 121
No CORBA, a IDL especifica os componentes e o Repositório de Interfaces
que podem os representar. A sua implementação e representação interna devem
ser encapsuladas pelo componente, procurando apresentar aos clientes quais são as
suas operações para que eles, ou até mesmo outros serviços CORBA e elementos
da aplicação, possam interagir por meio de portas (ports).
capítulo 5 • 122
O CCM possui quatro tipos de portas. A faceta é uma delas, e os outros
tipos são:
Para que sistemas possam ser desenvolvidos utilizando o CORBA, alguns pas-
sos devem ser seguidos:
capítulo 5 • 123
Figura 5. Visão geral da interação entre componentes do CORBA.
Um vasto número de interfaces são definidas pelo CCM com o intuito de que
elas comportem funcionalidades dos componentes e, principalmente, a estrutura
deles. E muitas dessas interfaces possuem a possibilidade de serem geradas de
forma automática. E é aí que entra o CIF. O CIF utiliza o CIDL para que os
skeletons possam produzir de forma automática algumas tarefas básicas.
A seguir, é apresentado o funcionamento do desenvolvimento/compilação de
CCM utilizando CIF.
capítulo 5 • 124
Figura 6. CCM Implementation Framework.
Contêineres
capítulo 5 • 125
• Fornecer camada de adaptação com serviços de transação, persistência,
segurança e notificação;
• Fornecer camada de adaptação para callbacks;
• Gerenciar políticas do POA (Portable Object Adapter).
capítulo 5 • 126
Empacotamento e distribuição
capítulo 5 • 127
99 Arquivo descritor de pacote do componente (.csd): cada
componente possui o seu arquivo descritor de pacote, onde se encontram
todos os detalhes acerca da implementação, bem como os sistemas
operacionais e o processador que suporta a aplicação, linguagem de
programação e compilador. Além dessas informações, é possível encontrar
outras, como a localização de arquivos de propriedades, descritor do
componente e, ainda, a porta de entrada do componente;
99 Arquivo descritor do componente (.ccd): possui informações
acerca da implantação do componente no contêiner. Cada componente
deve possuir o seu arquivo descritor, que contém informações sobre
serviços, identificação, interfaces, facetas, receptáculos, categoria e demais
características do componente;
99 Arquivo descritor de montagem (.cad): cada sistema deve possuir
apenas um arquivo descritor de montagem, pois é ele que contém todas
as informações que são necessárias para que os componentes possam ser
implantados. Tais informações são: localização do pacote, nome e localização
do home e de cada um dos componentes utilizados no sistema, nome das
instâncias, arquivos descritores de propriedades, conexões de interfaces etc.;
99 Arquivo descritor de propriedades (.cpf ): nele estão contidos
valores sobre os atributos que fazem parte de cada instância do componente.
Logo após a geração de todos esses arquivos já citados, eles serão distribuídos
para todos os equipamentos onde o sistema será implantado. E, bem logo após
capítulo 5 • 128
essa distribuição, é realizado o início do processo chamado implantação. O pro-
cesso de implantação utilizando o CCM deve ser o mais simples possível e pode
ser resumido da seguinte forma:
Componentes
capítulo 5 • 129
uso da palavra-chave component; e corpo, com o uso de conteúdo entre chaves.
Ao ser compilada, essa definição gera uma interface que possuirá as operações
que foram definidas dentro do corpo da definição. Essa interface que é gerada
estende a definição de interfaces do CORBA, no qual é dado suporte para as novas
operações disponibilizadas pelo CCM, como portas e atributos.
No CCM, não é especificada uma palavra-chave definida para que haja
uma diferença entre declarar um componente básico ou estendido. Mas todo
componente do tipo básico é declarado em IDL da seguinte forma:
• Declaração simples:
99 IDL3:
componentcomponent_name { ... };
99 IDL2 (interface equivalente):
interfacecomponent_name: Components::CCMObject { ... };
• Herança de componente:
99 IDL3:
component<component_name> : <base_name> { ... };
99 IDL2 (interface equivalente):
interface<component_name>: <base_name> { ... };
capítulo 5 • 130
• Herança de componente e interfaces admitidas por herança:
9 IDL3:
component<component_name> : <base_name>
supports<interface_name_1>, <interface_name_2> { ... };
9 IDL2 (interface equivalente):
interface<component_name>: <base_name>,
<interface_name_1>, <interface_name_2> { ... };
capítulo 5 • 131
Como já foi tratado neste capítulo, o CORBA foi desenvolvido a fim de
permitir o tratamento e desenvolvimento de sistemas heterogêneos por meio
de objetos com o intuito de integrar diferentes sistemas. Na figura a seguir,
é mostrada uma solicitação de serviço sendo solicitada através do ORB do
CORBA; nela, podemos observar que o cliente não possui dependência em
relação à linguagem de programação à qual o objeto foi codificado nem em
relação à localização do objeto, e muito menos por outro fator que não esteja
presente na interface do objeto.
• Estática: para que uma interface do objeto seja definida dessa forma, é
necessário utilizar a IDL, que possibilitará a definir de acordo com seu tipo de
operação e os parâmetros que serão necessários. Do lado cliente, é gerado uma
IDL stub para que seja permitido ao cliente acessar o objeto através do ORB. E,
na codificação, o objeto deve possuir um IDL skeleton;
• Dinâmica: de forma dinâmica, determinada interface poderá ser adicionada
a algum serviço de Repositório de Interfaces. Nesse serviço, são representados os
componentes de interface única, a exemplo de objetos. Sendo assim, o acesso a
esses componentes, durante a execução, é permitido. A DII é utilizada para que o
cliente tenha acesso ao objeto definido de forma dinâmica.
capítulo 5 • 132
ORBs são fornecidos por vários fornecedores: a utilização do padrão
CORBA os permite serem interoperáveis, seguindo a OMG IIOP ou GIOP.
Esse protocolo permite o envio de solicitações de serviços para objetos distribuídos
que são gerenciados em outros domínios por ORBs. A figura a serguir apresenta a
utilização do IIOP na comunicação entre dois ORBs:
capítulo 5 • 133
somente auxilia na comunicação entre objetos distribuídos, mas também fornece
infraestrutura em relação a utilitários e serviços; por meio de ORB, ele garante
o acesso a objetos graças às solicitações de serviços sem ter a necessidade de
saber a localização desses objetos, possibilitando, assim, a interoperabilidade
entre diferentes ORBs, além de, claro, não haver a dependência de linguagem
graças à utilização de IDL.
ATIVIDADE
01. De acordo com o que foi estudado neste capítulo, o que é o CORBA?
02. De acordo com o que foi estudado neste capítulo, o que é o ORB?
03. De acordo com o que foi estudado neste capítulo, descreva os conceitos essenciais
da arquitetura CORBA.
04. De acordo com o que foi estudado neste capítulo, descreva os tipos de portas
de componentes.
05. De acordo com o que foi estudado neste capítulo, descreva as classificações dos
arquivos que são gerados após o empacotamento de componentes CORBA.
06. De acordo com o que foi estudado neste capítulo, descreva de forma simples e resu-
mida o processo de implantação utilizando o CCM.
GABARITO
01. O CORBA (Common Object Request Broker Architecture) é uma arquitetura que
possui o objetivo de agilizar a comunicação entre objetos distribuídos dentro de um mesmo
ambiente heterogêneo. E, para isso, ele é composto por uma série de especificações que não
apresentam restrições para determinado objeto distribuído.
capítulo 5 • 134
03. • Object Implementation: responsável por definir operações que são descritas pela
interface IDL CORBA. A sua implementação pode ser realizada por utilização de várias
linguagens de programação;
• Client: trata-se do lado Cliente que realiza uma solicitação de serviço ao Servidor. Esse
acesso aos serviços remotos deve ser transparente. E, por transparente, entenda-se que a
sintaxe do código de comunicação não está encapsulada;
• Object Request Broker: um mecanismo é disponibilizado pelo ORB com o objetivo de
fornecer a transparência de comunicação entre cliente e servidor. Dessa forma, a programação
distribuída é simplificada devido à intermediação das chamadas de serviços. O cliente solicita
o serviço ao servidor, o ORB tem a responsabilidade de encontrar esse servidor, de executar
a solicitação e gerar um retorno como resposta ao cliente quando for necessário;
• Interface ORB: no CORBA, essa interface é definida como abstrata, o que faz com que ela
possua uma série de operações genéricas. Isso permite que a Interface ORB seja codificada
de diversas formas;
• CORBA IDL stubs e skeletons: esses são elementos que buscam a união entre cliente e
servidor por intermédio do ORB. Faz-se necessária a utilização de compilador CORBA IDL
específico quando se quer transformar as definições do CORBA IDL para alguma linguagem
de programação, que geralmente é a do sistema;
• Dynamic Invocation Interface (DII): com essa interface, é permitido ao cliente o acesso
direto ao mecanismo responsável por realizar chamadas de mensagens fornecidas pelo
ORB sem que seja necessária a utilização de algum IDL stub;
• Dynamic Skeleton Interface (DSI): essa interface é análoga à DII que pertence ao cliente.
A DSI é a versão de servidor, e é ela quem permitirá que as requisições sejam entregues ao
servidor por meio do ORB; e, nesse momento, o servidor não possui o conhecimento sobre o
tipo de objeto que estará sendo implementado por ele. O cliente não possui o conhecimento
se ele irá se comunicar com uma DSI ou com uma IDL Skeleton ao realizar a chamada;
• Object Adapter: ele atua em conjunto com o ORB no servidor com o intuito de auxiliá-lo
na inicialização do servidor e com a entrega de requisições de serviços.
04. • Facetas: admitem as interfaces, que não se relacionam, por meio da composição;
• Receptáculos: permitem que determinado componente possa utilizar referências que são
disponibilizadas por elementos externos;
• Fontes de eventos: publicam eventos para consumidores de eventos ou para algum canal
de eventos;
• Consumidores de eventos: realizam a solicitação de eventos.
capítulo 5 • 135
05. • Arquivos cujo conteúdo está relacionado com a implementação dos componentes,
como, por exemplo, arquivos no formato .class na linguagem Java;
• Arquivos chamados de descritores, que basicamente são do formato XML, gerados de
forma automática pelo compilador CIDL ou, ainda, por alguma outra aplicação utilizada para
o empacotamento;
• Arquivos de pacote, que contêm os arquivos anteriores comprimidos em formato ZIP.
REFLEXÃO
Neste capítulo, o nosso foco de estudos para o provisionamento e a construção foi feito
com a utilização de um framework voltado para o desenvolvimento de sistemas distribuídos,
o qual se trata de um modelo arquitetural de sistemas que se utiliza da interoperabilidade por
meio de uma linguagem definida para facilitar a comunicação e integração de sistemas e
componentes de diferentes fornecedores.
Iniciamos os nossos estudos trazendo ao nosso conhecimento o Framework CCM (CORBA
Component Model), que foi desenvolvido pelo OMG para tratar a comunicação entre objetos
remotos que fazem parte de um mesmo ambiente/sistema heterogêneo. Aprendemos que a
sua arquitetura é composta por ORBs que gerenciam de forma transparente a comunicação
entre os objetos remotos. Conhecemos os conceitos que são essenciais na implementação
dessa comunicação. Compreendemos também como stub e skeleton são utilizados na
comunicação entre cliente e servidor. Na visão geral do CCM, conhecemos quais são as
partes que interagem e compõem o CCM, os tipos de portas presentes nos componentes
capítulo 5 • 136
CORBA e outros elementos que compõem o CCM. Além dos passos que devem ser seguidos
para utilizar o CORBA. E tratamos brevemente sobre IDL.
Estudamos, também, o funcionamento da implementação de CCM utilizando CIF e CIDL. E
entendemos que a implementação de componente CORBA envolve um conjunto de artefatos
que são responsáveis por apresentar os relacionamentos e comportamentos, construindo um
componente funcional e completo. Assim, conhecemos dois tipos de artefatos, os gerados
automaticamente e os gerados pelo programador. Sobre os contêineres, conhecemos o seu
objetivo de integrar componentes aos serviços CORBA em tempo real e algumas de suas
operações, além do seu modelo arquitetural de programação e os elementos que fazem parte
desse modelo.
Conhecemos, também, os arquivos que fazem parte do empacotamento de sistemas
desenvolvidos com componentes e uma breve descrição de cada um. Verificamos o seu esquema
genérico de empacotamento de componentes CORBA e aprendemos os conceitos e os tipos
desses arquivos. Entendemos que a distribuição parte da finalização do empacotamento de
componentes com a meta de eles chegarem a todos os equipamentos onde o sistema será
implantado. E então a implantação é realizada. Conhecemos como a implantação utilizando o
CCM é realizada passo a passo.
Concentramos os nossos estudos, também, nos componentes CORBA, em que, através
de exemplos com IDL, aprendemos como especificar e definir componentes e interfaces
equivalentes com essa linguagem. Compreendemos, também, o funcionamento da comunicação
entre objetos distribuídos através de ORBs, o que permite que sistemas possam ser integrados,
e entendemos como a interoperabilidade ocorre. E mais uma vez entendemos a importância da
IDL na comunicação e integração.
Finalizamos este capítulo com uma base de conhecimentos solidificada acerca de arquitetura
de sistemas e de componentes, além da importância da interoperabilidade para a integração de
sistemas distribuídos através da utilização da arquitetura CORBA, o uso do Framework CCM. Com
os conhecimentos adquiridos neste capítulo, finalizamos os nossos estudos acerca de arquitetura
de sistema de forma satisfatória, pois obtivemos um entendimento amplo sobre o assunto. Porém
devemos estar sempre em constante estudo e atualização, já que sempre algo novo surge ou
conceitos são melhorados, principalmente em termos de tecnologias.
capítulo 5 • 137
LEITURA
Para você melhorar ainda mais o seu nível de aprendizagem envolvendo os conceitos
referentes a este capítulo, consulte as sugestões abaixo:
REFERÊNCIAS BIBLIOGRÁFICAS
________. ISO – Reference Model of Open Distributed Processing – Part 1. In: Overview. XXXX:
YYY, 1993.
________. Object Management Group. In: CORBA Components, v. 3.0. Disponível em: http://www.
omg.org/cgi-bin/doc?formal/02-06-65. Acesso em: 13/09/2016.
________. Object Management Group. Disponível em: http://www.omg.org. Acesso em: 13/09/2016.
ORFALI, R., HARKEY, D., EDWARDS, J. The Essential Distributed Objects Survival Guide. New
York: John Wiley & Sons, 1996.
VINOSKI, S. Advanced CORBA Programming with C++. Massachusetts: Addison-Wesley, 1999.
capítulo 5 • 138
ANOTAÇÕES
capítulo 5 • 139
ANOTAÇÕES
capítulo 5 • 140
ANOTAÇÕES
capítulo 5 • 141
ANOTAÇÕES
capítulo 5 • 142
ANOTAÇÕES
capítulo 5 • 143
ANOTAÇÕES
capítulo 5 • 144
ANOTAÇÕES
capítulo 5 • 145