Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponentes de Software
Ponentes de Software
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
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
2
INE5612
3
INE5612
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
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
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
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
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
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
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
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.
15
INE5612
16