Você está na página 1de 16

INE5612

INE 5612
INE 5612 Conteúdo Programático
 Unidade I – Componentes de Software
Motivação; O Paradigma de Componentes; Vantagens e
Desenvolvimento de Sistemas Limitações; Interfaces; Contêineres; Interação; Projeto;
Desenvolvimento; Testes; Distribuição; Implantação;
Orientados a Objetos II Padrões e Produtos
 Unidade II - Componentes no Java SE
Prof. Frank A. Siqueira A Plataforma Java SE; JavaBeans; Desenvolvimento de
Aplicações usando JavaBeans; Construção de JavaBeans
E-Mail: frank@inf.ufsc.br  Unidade III - Componentes no Java EE
URL: http://www.inf.ufsc.br/~frank/INE5612 A Plataforma Java EE; Java Server Faces; Enterprise
JavaBeans; Java Persistence API
 Unidade IV – Novas Tecnologias de
Desenvolvimento de Sistemas (Seminários)

Motivação
Unidade I
 Crise do Software
Componentes  Constatada ao final dos anos 60
de Software  Software evoluía mais lentamente e era visto
como menos confiável do que o hardware
 Poucos fornecedores de software no mercado
 Motivação  Projeto
 Usuários especializados em computação
O Paradigma de Componentes  Desenvolvimento

 Vantagens e Limitações  Testes  Técnicas de Eng. Software pouco difundidas

 Interfaces  Distribuição  Ferramentas de desenvolvimento limitadas

 Contêineres  Implantação  Linguagens de mais baixo nível


 Interação  Padrões e Produtos  Pouca proteção contra falhas nos SOs

Motivação Motivação
 Outras indústrias passaram por obstáculos  Já ao final dos anos 60 reconhecia-se os
similares aos enfrentados pela indústria de benefícios advindos do uso de
software naquela época componentes de software reutilizáveis
 Na maioria delas, a adoção de componentes  A tecnologia da época não permitiu que a
resultou em ganhos significativos ideia de desenvolver software a partir de
 Indústria eletrônica
componentes fosse usada na prática
 Indústria automobilística
 Construção civil  Nos anos 80, apesar da popularização das
 etc. linguagens orientadas a objetos, não
 Por que não utilizar componentes também houve a melhoria esperada em relação à
para construir software? qualidade do software

1
INE5612

Motivação Motivação
 O que mudou nos últimos anos?  A tecnologia de componentes tornou-se
 Softwares estão cada vez mais complexos e viável com as novas ferramentas de
com suporte à interação via rede desenvolvimento e ambientes de execução
 Maioria dos usuários sem formação na área
 Ambientes de desenvolvimento permitem que
aplicações sejam “montadas” graficamente
 Evolução de linguagens, SOs, ferramentas e
 Ambientes de execução podem, via reflexão
técnicas de desenvolvimento de software computacional, inspecionar um componente
 O mercado de software tornou-se altamente de modo a prover o suporte adequado
competitivo, exigindo que o desenvolvedor  Servidores de aplicação fornecem o suporte
produza mais em menos tempo necessário para execução de componentes,
 Qualidade do software ainda é insatisfatória! permitindo, por exemplo, a interação via rede

O Paradigma de Componentes O Paradigma de Componentes


 Componente  Componente de Software
 “Aquilo que entra na composição de alguma  “Unidade de Software independente que
coisa. Parte elementar de um sistema.”
(Fonte: Aurélio)
encapsula, dentro de si, seu projeto e
implementação, e oferece serviços, por meio
 Composição de interfaces bem definidas, para o meio
 “Formar ou construir de diferentes partes.” externo” (Fonte: I. Gimenes & E. Huzita)
(Fonte: Aurélio)
 “Unidade de software com interfaces e
dependências claramente especificadas, que
pode ser implantada independentemente e ser
utilizada por terceiros para composição.”
(Fonte: C. Szyperski)

O Paradigma de Componentes O Paradigma de Componentes


 Componentes de Software  A estrutura de um componente é definida
 Unidades funcionais de software por um modelo seguido na implementação
 Executam uma atividade bem definida no  Um modelo de componentes define:
sistema  A forma como componentes são vistos
 Produzidos e implantados independentemente externamente
 Distribuídos em código binário  Aspectos da estrutura interna dos componentes
 Combinados para compor aplicações  Os serviços que o suporte de execução deve
 Podem ser configurados de acordo com as fornecer aos componentes
necessidades dos usuários  O mecanismo usado para comunicação entre os
 Podem ser facilmente atualizados e reutilizados componentes
 Podem ser criados usando métodos, técnicas e  O processo de desenvolvimento, de distribuição
ferramentas de desenvolvimento padronizados e de implantação de componentes

2
INE5612

O Paradigma de Componentes O Paradigma de Componentes


 Estrutura interna de um componente  Componentes fornecem serviços a
 Código funcional terceiros através de suas interfaces
 Responsável pela implementação dos  Um serviço é uma atividade bem definida
serviços fornecidos pelo componente executada pelo componente
 Escrito pelo desenvolvedor
 A interface de um componente define como
 Código não-funcional terceiros podem solicitar os serviços do
 Responsável por interagir com o suporte de componente
comunicação e de execução padronizado
pelo modelo de componentes
 Pode ser gerado automaticamente pelo
suporte de desenvolvimento

O Paradigma de Componentes O Paradigma de Componentes


 Componentes podem ser classificados em  Estado do componente pode ser
função da forma como lidam com seus persistente ou volátil
dados de estado
 Estado persistente: mantido em memória
 Stateless: componentes sem estado
persistente (HD, BD, etc.) e restaurado em
 Stateful: componentes com estado
execuções subsequentes
 Estado interno: dados privados do
 Estado volátil (não-persistente): dados são
componente
perdidos entre uma execução e outra
 Estado externo: dados acessíveis através
da interface

O Paradigma de Componentes O Paradigma de Componentes


 Componentes rodam sobre um suporte de  Mecanismos de comunicação são fornecidos
execução definido pelo modelo pelo suporte de execução para interação
 O suporte de execução pode ser fornecido entre componentes
por:  O formato dos dados e o protocolo de
 Linguagem de programação comunicação utilizado devem ser padronizados
para que componentes possam interagir
 Máquina virtual
 Contêiner
 Comunicação entre componentes pode ser:
 Servidor de aplicação
 Local: componentes em uma mesma máquina
 Remota: componentes em máquinas diferentes

3
INE5612

O Paradigma de Componentes Vantagens e Limitações


 O processo de desenvolvimento,  O paradigma de componentes simplifica o
distribuição e implantação de componentes desenvolvimento de sistemas
 A complexidade necessária para executar uma
segue regras bem definidas, podendo tarefa é encapsulada por um componente, o que
utilizar-se de: esconde detalhes internos do mundo externo
 Uma aplicação pode ser totalmente construída a
 Metodologias de desenvolvimento
partir de componentes reutilizados ou fornecidos
 Compiladores e geradores de código por terceiros
 Servidores de aplicação  Um componente pode ser substituído/atualizado
independentemente do restante da aplicação,
 Mecanismos de distribuição
facilitando a manutenção e evolução do sistema
 etc.  Componentes são testados individualmente,
melhorando a confiabilidade da aplicação

Vantagens e Limitações Vantagens e Limitações


 Reutilização é favorecida pelo uso de  Nem todos os problemas são resolvidos
componentes de software pelos componentes de software
 Outras unidades de desenvolvimento de  Generalização pode levar a ineficiência
software, como classes e bibliotecas, não  Interfaces e/ou modelos de componentes podem
trazem os mesmos benefícios: ser incompatíveis, impedindo sua composição
 Mecanismos para interação entre componentes
 São dependentes de linguagem/ambiente precisam ser padronizados
 Possuem granularidade inadequada  É raro encontrar componentes de fabricantes
 São difíceis de combinar diferentes que sejam intercambiáveis
 Não são tão flexíveis quanto componentes  Nem sempre é possível configurar um
componente para atender todas as necessidades
do usuário

Vantagens e Limitações Interfaces


 Os serviços fornecidos pelo componente
são disponibilizados através de uma ou
mais interfaces claramente definidas
 Na interface do componente são descritos:
Flexibilidade  Propriedades: as características configuráveis
Desempenho dos componentes, que serão levadas em
Custo de desenvolvimento conta durante a sua execução
Tempo de desenvolvimento  Métodos: rotinas chamadas por terceiros para
solicitar os serviços fornecidos pelo
componente
0 % de componentes de software 100

4
INE5612

Interfaces Interfaces
 Outras informações podem constar da  Descrição das interfaces de componentes
interface do componente  Na linguagem de programação, nos modelos
que utilizam somente uma linguagem
 Número de versão e de série
 Em uma linguagem de descrição de interface
 Linguagem de programação (IDL), nos modelos multi-linguagem
 Dependências de outros componentes/serviços  De posse da descrição da interface, é
 Mecanismos de comunicação/invocação possível gerar o código não-funcional
 etc.  Utilização dos mecanismos de comunicação
 Conhecendo a interface de um componente  Interação com serviços e com o suporte de
execução
é possível utilizá-lo para compor aplicações
 etc.

Interfaces Interfaces
 Exemplo de Interface em Java  Representação em UML de componentes
public interface CadastroUsuarios {
public void cadastrar(String nome, String email,
long senha) throws UsuarioJaCadastrado;
public boolean autenticar(String email, long senha);
public void alterarSenha(String email, long senha, Componente
long novaSenha) throws UsuarioNaoEncontrado;
}
Componente Componente
 Exemplo de Interface em CORBA IDL
interface CadastroUsuarios {
void cadastrar(in string nome, in string email,
in long senha) raises(UsuarioJaCadastrado);
boolean autenticar(in string email, in long senha);
void alterarSenha(in string email, in long senha,
in long novaSenha) raises (UsuarioNaoEncontrado);
}

Interfaces Interfaces
 Representação em UML de interfaces  Representação em UML 1.x da
<<interface>> interconexão entre componentes
Interface  Componente X usa a Interface de Y
atrib: int
metodo: void Interface Componente Componente
X Y
Interface
Componente Componente

5
INE5612

Interfaces Interfaces
 Representação em UML 2.0 da  Várias interfaces podem ser suportadas
interconexão entre componentes por um mesmo componente
 Componente X usa a Interface de Y  Interfaces diferentes podem ser fornecidas
para cada tipo de usuário
Componente Componente
X Y Gerente
Sistema Loja
Interface
Admin Vendedor
Usuário Cliente

Interfaces Interfaces
 Um componente também pode  Uma interface padrão suportada por todos
ter diferentes interfaces para: os componentes permite inspecionar suas
Sistema
 Suportar características internas
TCP/IP
diferentes
Cliente
TCP/IP
 Descobrir a(s) interface(s)
protocolos de suportada(s) pelo componente
Cliente

comunicação RMI  Obter informações como Componente


RMI
número de versão, de série,
 Se comunicar Sistema chave pública, etc.
usando vários ASN.1
Cliente  Descobrir o(s) mecanismo(s)
formatos de ASN.1
de comunicação aceito(s)
dados Cliente
pelo componente
XML
 etc. XML

Interfaces Interfaces
 Polimorfismo: uma mesma interface pode  Escolha de componentes polimórficos
ser implementada por dois ou mais  O desenvolvedor deve considerar fatores
componentes de maneiras diferentes como precisão, qualidade, desempenho e
 Se dois ou mais componentes custo dos componentes polimórficos ao fazer
a escolha entre os componentes existentes
implementam uma mesma interface:
 De modo geral, a relação entre estas
 Fornecem os mesmos serviços grandezas é a seguinte:
 São intercambiáveis
 Polimorfismo permite que o desenvolvedor
escolha qual componente é mais adequado
Desempenho Custo
para a aplicação que está construindo
Precisão, Qualidade Precisão, Qualidade

6
INE5612

Interfaces Contêineres
 Polimorfismo também permite manter o  Um Contêiner é um ambiente de execução
suporte a versões ‘legadas’ do componente para componentes
 Faz a ligação entre os componentes e o
 Nova versão Sistema
1.0 mundo exterior
do componente
Interface  Recebe pedidos de execução de serviços e os
suporta a interface Cliente
repassa ao componente, que executa o serviço
antiga e a nova Antigo
 Evita que o componente tenha que interagir
 Nova versão pode Sistema com o sistema operacional, o suporte de
incorporar novos Interface 2.0 comunicação e com os serviços de aplicação
Cliente
serviços através Antigo
 Permite que componente seja independente
de uma nova Cliente do ambiente de execução, tornando-o mais
Novo
interface Interf2.0 portável e mais fácil de reutilizar

Contêineres Contêineres
 As interfaces do Contêiners são definidas  Contêiners utilizam recursos de software e
pelo modelo de componentes hardware e serviços da plataforma de
execução para executar o componente
 Podem ser vistas como uma API completa para
execução de componentes  Serviço de Nomes: permite localizar instâncias
de componentes
 Tornam o código do componente mais portável
 Serviço de Comunicação: troca de informação
 Podem haver diferentes tipos de Contêiner  Serviço de Persistência: faz o armazenamento
 Exemplo: Contêiners para componentes sem de estado dos componentes
estado, com estado transiente (volátil) ou  Serviço de Transações: mantém a consistência
persistente  Serviço de Segurança: autentica componentes
e verifica a autorização para executar serviços

Contêineres Contêineres
 Tipos de Interfaces
 Externa: atravessa o contêiner
Componente Componente Componente
 Interna: acessível somente dentro do contêiner
 De Callback: interface usada pelo contêiner
para se comunicar com o componente

Contêiner Contêiner Componente Componente

Interface
Suporte de Execução/Comunicação Interface Interna
Externa
Serviço Serviço Serviço Serviço
Interfaces
de Callback Contêiner

7
INE5612

Contêineres Interação
 O contêiner efetua Callbacks para:  Componentes interagem para trocar dados
 Indicar falhas na obtenção ou na utilização de e solicitar a execução de serviços
recursos do suporte de execução  Componentes podem estar localizados em:
 Entregar mensagens do serviço de  Um mesmo servidor  Interação local
comunicação  Servidores diferentes  Comunicação remota
 Salvar o estado do componente e restaurá-lo  O ideal é que o desenvolvedor abstraia a
em caso de reinicialização localização dos componentes, podendo
 Relatar a violação de regras de funcionamento agir da mesma forma independentemente
ou de segurança de os componentes estarem na mesma
máquina ou em máquinas diferentes

Interação Interação
 Para abstrair a localização de componentes  Chamada de procedimento/método
o ideal é que os mecanismos usados para  Segue o modelo Cliente/Servidor
interação local sejam usados também para  Um componente fornece uma interface com
comunicação remota procedimentos/métodos para solicitar a
execução de seus serviços – é um servidor
 Mecanismos de interação local
 Componentes/aplicações utilizam os serviços
 Chamada de procedimento/método de outros componentes – são seus clientes
 Notificação de eventos/mensagens Cliente Servidor
 Mecanismos de comunicação remota
 Chamada remota de proced./método (RPC)
… Soma(int y, int z) {
 Notificação de eventos/mensagens remotos x = Servidor.Soma(y,z);
Soma(y,z) }
return(y+z);

Interação Interação
 Chamada remota de procedimento/método  Notificação de eventos
 Idêntica a uma chamada local  Notificações de eventos ocorridos são
 Os componentes estão em máquinas diferentes difundidas por produtores e entregues a
 A chamada tem que ser enviada como uma consumidores de eventos
mensagem pela rede  Eventos podem ser oriundos da interface
 O suporte de execução se encarrega disso gráfica. Ex.: click de um botão do mouse,
tecla digitada, seleção de um elemento, etc.
Cliente Servidor
Produtor Consumidor
Rede
… Soma(int y, int z) {
x = Servidor.Soma(y,z); Soma(y,z) return(y+z); 1..* 1..*
… }

8
INE5612

Interação Interação
 Notificação de eventos remotos  Formato dos dados
 Produtores e consumidores de eventos podem  Na chamada de método, a sua assinatura
estar em máquinas diferentes define os parâmetros e seus tipos de dados
 Canal de eventos permite desacoplamento  O formato dos eventos é em geral mais flexível
 Não é necessário que as partes se conheçam
ou se sincronizem para enviar o evento  Cardinalidade
 Chamada de método tem sempre apenas um
Produtor
Rede
Consumidor cliente e um servidor
Canal de  Notificação de eventos pode ser de M para N
Eventos
1..* 1..*

Interação Interação
 Sincronismo  Protocolos de comunicação de alto nível
 Na chamada de método o emissor fica são necessários para interação entre
bloqueado aguardando o término da execução componentes em máquinas diferentes
Cliente Chamada Retorno
t  Escolha natural: usar TCP/IP como base
t  Cria conexões entre processos para troca de
Servidor Execução
mensagens
 Na notificação de eventos o produtor continua
 Amplamente disponível, confiável e robusto
a execução sem aguardar resposta
Produtor Envio Envio  Relativamente simples e eficiente
t

t
Consumidor Execução Execução

Interação Projeto
 Mecanismo de comunicação entre  Projeto de sistemas basedos em
componentes deve tratar questões não componentes
resolvidas pelo TCP/IP  Técnicas tradicionais de Eng. de Software
 Formato comum dos dados podem ser usadas na análise e projeto de
 Localização de componentes
sistemas baseados em componentes
 Com base nas funcionalidades requeridas do
 Segurança
sistema, define-se quais componentes são
 Os protocolos usados pelos suportes de necessários para sua construção
execução de componentes já incorporam  Deve-se buscar reutilizar componentes e/ou
tais mecanismos desenvolver novos componentes que possam
ser reaproveitados

9
INE5612

Projeto Projeto
 Projeto deve levar em conta que:  Abordagem de Cheesman & Daniels
 O componente deve fornecer serviços a outros  Modelagem do Domínio: realizada para
componentes, que os utilizarão através das entender o contexto do problema a ser
interfaces do componente solucionado, sem assumir nenhuma solução
 Deve ser possível ajustar a forma como os de software
serviços são executados, alterando valores de  Especificação do Software: consiste na
propriedades concepção de um sistema de software para
 O componente deve ser sujeito a composição resolver o problema em questão
 O componente deve procurar ser
independente de outros componentes

Projeto Projeto
 Modelagem do Domínio  Casos de uso
 Definir casos de uso  Especificam as funcionalidades existentes no
 Definir modelo conceitual sistema
 Definir modelo comportamental  Exemplo: Sistema de Bibliotecas

Nome: Efetuar empréstimo


 Especificação do Software Objetivo: Emprestar um livro a um usuário
 Identificar componentes Pré-condição: Livro deve estar disponível para empréstimo;
usuário deve ter <5 livros emprestados.
 Identificar interações entre componentes Ação: emprestar (livro, usuário)
 Especificar componentes Nome: Fazer devolução
Objetivo: Devolver um livro emprestado a um usuário
Pré-condição: Livro estar emprestado; não estar danificado.
Ação: devolver (livro)

Projeto Projeto
 Modelo conceitual  Modelo comportamental
 Especificar as entidades do mundo real  Identificar estados, eventos e transições de
manipuladas pelo sistema e suas associações estado
 Exemplo:  Exemplo: Diagrama de estados de livro

Usuário Livro
emprestar(livro,usuario)
1 1 disponível emprestado
Efetua devolver(livro)
Envolve
Empréstimo
0..5 0..1

10
INE5612

Projeto Projeto
 Identificação de componentes  Interação entre componentes
 Produz uma especificação de arquitetura inicial  Identifica as operações necessárias
de um sistema
 Atribui responsabilidades
 Identifica as interfaces suportadas por cada
 Exemplo:
componente
 Deve-se sempre buscar reutilizar componentes  Se uma pré-condição exige que o usuário

 Exemplo: respeite um limite máximo de empréstimos,


Gerenciador de Gerenciador de deve haver uma operação para recuperar o
Empréstimos Usuários número de empréstimos de um usuário
 O componente Gerenciador de Usuários e a
IGerEmpréstimo IGerUsuário entidade Usuário devem ter essa operação

Projeto Desenvolvimento
 Especificação dos componentes  Desenvolvimento de sistemas é baseado em
 Cria uma especificação detalhada das interfaces reutilização de componentes
dos componentes, definindo as assinaturas de  Quando não houver um componente disponível
suas operações e suas propriedades que forneça as operações desejadas, um novo
 Exemplo:
componente deverá ser desenvolvido, tendo em
mente a possibilidade de reutilização
<<interface>>
IGerEmprestimo  Desenvolvimento de componentes
numLimiteEmprestimos: integer
 São usadas linguagens de programação
emprestar(livro: Livro, usuario: Usuario)
devolver(livro: Livro) tradicionais
 Deve seguir padrões definidos por um modelo
de componentes

Desenvolvimento Desenvolvimento
 Composição: permite que aplicações ou  Composição é mais adequada que herança
novos componentes sejam criados a partir para reutilizar código
de outros componentes  Na maioria dos casos não queremos estender,
mas incorporar a funcionalidade do componente
 Diferenças entre herança e composição
 Herança  Compare:
 X é um Y
 Interface gráfica é um Botão + Rótulo + ...
 Usada para estender a funcionalidade
?? ou ??
Interface gráfica tem um Botão + Rótulo + ...
 Composição
 Processador de texto é um dicionário
 X tem um Y
?? ou ??
 Usada para incorporar a funcionalidade Processador de texto tem um dicionário

11
INE5612

Desenvolvimento Desenvolvimento
 Composição de componentes pode ser feita  Grande parte dos ambientes de
através de: desenvolvimento fornece ferramentas para
 Código de programas geração de código
 Linguagens de composição  Código não-funcional (para interação com o
 Ferramentas gráficas de composição suporte) é gerado automaticamente
 Código funcional (os métodos que
 Linguagens e ferramentas de composição
implementam o comportamento do
devem verificar se: componente) deve ser escrito pelo
 As dependências de componentes são satisfeitas programador
 As interfaces conectadas são compatíveis

Desenvolvimento Desenvolvimento
 Código "cola" (glue)  O processo de desenvolvimento varia
 Código adicional usado para adaptação de conforme o modelo de componentes
interfaces ligeiramente diferentes
 Modelos multi-linguagem
 Permite conectar um componente que requer
a interface X a outro que provê a interface Y,  Permitem que componentes escritos em
caso X e Y implementem as mesmas linguagens diferentes interajam
funcionalidades, mas as assinaturas de  Desenvolvimento é mais complexo
métodos sejam diferentes
 Modelos mono-linguagem
Componente Componente
 Não permitem interoperabilidade entre
X Cola Y linguagens
 Desenvolvimento é mais simples

Desenvolvimento Desenvolvimento
 Desenvolvimento do Componente  Uso do Componente em uma Aplicação
Descrição Código Binário Descrição
da Interface do Componente da Interface
01010101010101
01010101010101
01010101010101 Pacote de
Gerador de Código Distribuição

Código Gerador de Código


Código Não-
Funcional Funcional
Código Não- Código
Funcional Funcional
Compilador Código Binário Descrição
do Componente da Interface Código Binário
01010101010101 da Aplicação
01010101010101 Compilador 01010101010101
01010101010101 Pacote de 01010101010101
Distribuição 01010101010101

12
INE5612

Testes Testes
 Softwares baseados em componentes precisam  Testes de unidade
ser testados para garantir que são estáveis e  Componentes são testados individualmente,
corretos antes de efetuar a composição
 Fases de teste  O desenvolvedor do componente pode
 Testes de unidade
executar testes estruturais, também chamados
de caixa branca (white box ), que exigem
 Testes de integração acesso ao cód. fonte para testar cada operação
 Testes de sistema  Já quem reutiliza o componente pode apenas
realizar testes funcionais, também chamados
de caixa preta (black box ), que consistem em
aplicar entradas e observar se as saídas
produzidas pelo componente são corretas

Testes Testes
 Testes de integração  Plano de teste
 Visam verificar se subconjuntos dos  Definir entradas possíveis e saídas esperadas
componentes do sistema funcionam  Verificar a conformidade das saídas e se o
corretamente após o processo de composição comportamento (tempo exec., etc) é aceitável
 Em geral são testes funcionais (caixa preta)  Registrar o ambiente de execução utilizado

 Testes de sistema  Documentação de teste do componente


 Analisam se o sistema completo funciona  Vital para que, ao fazer a composição, o
conforme especificado na fase de projeto desenvolvedor saiba se o componente foi
 Simula a operação em ambiente real
testado em condições análogas e em ambiente
compatível com aquele no qual será utilizado
 Costumam ser realizados testes funcionais

Distribuição Distribuição
 Componentes são distribuídos na forma de  Em geral, o código executável é
pacotes de distribuição (packages) dependente da plataforma de execução
 Pacotes de distribuição podem conter:  Neste caso, pode-se gerar executáveis para
cada plataforma suportada e colocar no
 Apenas um componente mesmo package
 Um framework (coleção) de componentes  Na implantação, deve ser escolhida a versão
 Uma aplicação completa do componente compatível com a plataforma
 Um package contém: local
 O código executável do(s) componente(s)
 Pode ter também descritores de componentes
 Geralmente são compactados (.Zip ou .Jar)

13
INE5612

Distribuição Distribuição
 Algumas linguagens são multi-plataforma  O descritor do componente é usado por:
 Máquina virtual converte o código para  Clientes
instruções da máquina onde o componente é  Descobrir os serviços fornecidos pelo

executado componente
 Descobrir a forma de obtenção dos serviços
 Exemplos:
 Ferramentas de composição e servidores de
 Java usa JVM (Java Virtual Machine)
aplicação
 Linguagens do .NET (C#, VB.NET, etc.)  Conhecer a versão, no de série,
usam CLR (Common Language Runtime) dependências, etc.
 Saber como instanciar, configurar e
conectar os componentes

Distribuição Distribuição
 Os descritores devem estar em uma  Exemplo de descrição de package em XML OSD
<SOFTPKG NAME=“Crypt" VERSION="1,2,0,0">
linguagem para descrição de software <TITLE>Crypt</TITLE>
<AUTHOR>
<COMPANY>MySoft Corporation</COMPANY>
 A maior parte dos modelos de componentes <WEBPAGE HREF="http://www.mysoft.com/crypt/" />
utiliza linguagens proprietárias para descrever </AUTHOR>
<IMPLEMENTATION>
o conteúdo dos pacotes de distribuição <OS VALUE="WinXP“/>
<OS VALUE="Win7"/>
<CODE TYPE=“Zip”>
 Tendência do mercado é migrar para um <FILEINARCHIVE NAME=“crypt.zip"/>
</CODE>
padrão como o XML OSD (Open Software </IMPLEMENTATION>
<IMPLEMENTATION>
Description) <IMPLTYPE VALUE="Java" />
<CODE TYPE=“Jar”>
<FILEINARCHIVE NAME=“crypt.jar"/>
</CODE>
</IMPLEMENTATION>
</SOFTPKG>

Distribuição Implantação
 Componentes podem ser armazenados em  Para implantar uma aplicação construída a
repositórios, que são subdivididos em: partir de componentes é importante definir
 Repositórios locais centralizados: armazenam onde cada componente será implantado
componentes de propósito geral; são
geralmente inchados, dificultando a busca  Diagrama de implantação da UML
 Repositórios específicos: contêm componentes
Máq. Cliente Serv. Aplicação Serv. Banco
focados em um domínio de aplicação, inclusive de Dados
componentes com as mesmas funcionalidades Aplicação Componente
 Repositórios de referência: apontam para Cliente Servidor

componentes contidos em outros repositórios, 1..* BD


facilitando a busca (“páginas amarelas”) <<RMI>> <<JDBC>>

14
INE5612

Implantação Implantação
 Os componentes que disponibilizarão  Packages podem ser instalados no servidor
serviços remotamente devem ser  A partir da implantação no servidor, o
implantados em servidores de aplicação componente está disponível para interagir com
 Servidores de aplicação servem como outros componentes no mesmo servidor ou
ambiente de execução dos componentes e em outros servidores da rede
servem como Contêiners
 Servidor verifica o descritor do pacote e
 Servidores Web com extensões podem ser
usados com este objetivo seleciona a implementação do componente
compatível com a sua plataforma

Implantação Implantação
 Servidores de aplicação devem fornecer:  Servidores de aplicação gratuitos:
 Interface para localização dos componentes  Glassfish (Sun/Oracle)
 Suporte para comunicação  JBoss Application Server (JBoss/Red Hat)
 Serviços adicionais de propósito geral  Geronimo (Apache)
 Segurança  etc.
 Transações  Servidores de aplicação pagos:
 Persistência  WebSphere Application Server (IBM)
 ...  WebLogic Application Server (Oracle/BEA)
 Mecanismos para gerenciamento de aplicações  ColdFusion (Adobe)
 etc.

Padrões e Produtos Padrões e Produtos


 Padronização é necessária para que o  Padrões podem coexistir, desde que:
mercado de componentes de software se  Haja meios de interconexão de tecnologias
desenvolva  O mercado de cada tecnologia seja grande o
 Definição de interfaces, para permitir a suficiente para se manter ativo
composição entre componentes  Não haja um número grande de padrões

 Definição de modelos e arquiteturas, para  A convivência entre padrões é normal em


permitir a interoperação entre componentes diversas áreas
 Ainda não existe um padrão definitivo  Linguagens de programação
 Redes
para componentes de software
 Telefonia
 etc.

15
INE5612

Padrões e Produtos Padrões e Produtos


 Padrões podem ser:  Ainda não existe um padrão definitivo para
 De jure componentes de software, mas apenas
 Definido por um bureau de padronização alguns candidatos a padrão
reconhecido por lei (ex.: ISO, ANSI, ABNT)  São três os principais candidatos a padrão:
 De fato  JavaBeans e Enterprise JavaBeans
 Aceito como padrão pela indústria  Propostos pela Sun, baseados no Java
 Geralmente definido por um comitê sem  COM, DCOM, ActiveX, COM+ e .NET
poder legal (ex.: IETF, OMG, W3C, etc.)  Produtos da Microsoft
 De mercado
 CORBA e CCM
 Proposto por alguma empresa que domina
 Padrão de fato proposto pela OMG
uma grande fatia do mercado

Padrões e Produtos Padrões e Produtos


 Modelo de Componentes da Oracle/Sun  Modelo de Componentes da OMG
 JavaBeans  CORBA
 Enterprise JavaBeans (EJB)  CORBAServices
 Modelo de Componentes CORBA (CCM)
 Estratégia da Oracle/Sun
 Usar Java para integração com a Internet  Estratégia da OMG
 Padrões de componentes baseados em Java  CORBA: permite independência de linguagem,
 Permite discussão do padrão, mas mantém o
de sistema operacional e de plataforma
controle sobre o copyright e sobre as decisões  Padrão de componentes baseado no CORBA

 Busca a integração com outras tecnologias

Padrões e Produtos Padrões e Produtos


 Produtos da Microsoft  Componentes são utilizados na construção
 COM/ActiveX e .NET das mais diversas aplicações
 Sistemas operacionais
 Estratégia da Microsoft
 Processadores de texto e planilhas
 Controla o padrão  Reprodutores de mídia
 Tem sempre Windows como base  Navegadores e servidores Web
 Vem adotando padrões abertos (XML, SOAP,  Sist. de informações geográfica
UDDI, WSDL) a partir do .NET  Sist. de informações gerenciais
 Sist. de gerenciamento de bancos de dados
 Sist. de comércio eletrônico
 etc.

16

Você também pode gostar