Integração de Tecnologias UML – CORBA - Java A Convergência das Tecnologias
description
Transcript of Integração de Tecnologias UML – CORBA - Java A Convergência das Tecnologias
Integração de TecnologiasUML – CORBA - Java
A Convergência das Tecnologias
Tutorial
por José Eduardo Zindel Deboni
Voxxel Consultoria de Sistemas
Objetivos do Tutorial
Observando que tudo esta orientado a objetos Análise/Modelagem……….UML Projeto…………………….UML e CORBA Implementação……………IDL e Java
Analisar como o desenvolvimento de sistemas pode tirar vantagens da integração de tecnologias
Estudar através de um exemplo como a UML pode integrar-se a CORBA e Java
O que é um Tutorial ?
Verbete: tutorial 2. Diz-se da modalidade de ensino exercido por
tutor (4).
Verbete: tutor [Do latim: tutore.] 4. Aluno designado como professor de outros
alunos, em formas alternativas de ensino.
Fonte: Dicionário Aurélio em CD-ROM V.1.4
Os sistemas atuais são…… complexos Negócios estão cada vez mais complexos Integração de mercados, globalização Competitividade crescente
… feitos para a internet Confiabilidade: o negócio depende do sistema e_bussiness: O negócio é o sistema
… distribuídos em n camadas Especialização de cada atividade do sistema Facilidade de manutenção e portabilidade e_business: O negócio é a rede
A arquitetura de n camadas
ok
objetos
HTMLs CGIs
Camadade
Apresentação
Camadade Negócios
Camadade
Dados
webserver
Corba/iiop Corba/iiop
Corba/iiop
Http/cgi
RDBMSOODBMSArquivos
Convergência para objetos
Análise e Modelagem
Projeto e Arquitetura
Implementação
UML
CORBA
Java
Lente convergente Da Orientação a Objetos
Tecnologias Orientadas a Objeto
Linguagem de Modelagem Orientada a Objetos UML – Unified Modeling Language
Arquitetura de Aplicações de Objetos Distribuidos CORBA – Common Object Request Broker Architecture
Ambiente flexível e portável para desenvolvimento Java (Aplicações, Applets, Servlets, JDBC, Swing, RMI, EJB…)
Como fica a Engenharia de Software?
É necessário fazer Engenharia de Software?É possivel se fazer Engenharia do Software? Integrar :Analise – Projeto - Implementação Projetar a solução antes de construir Criar uma “planta” do software Utilizar um método para desenvolvimento de sistemas Simular, prever resultados antes da construção
Como desenvolver em tempo de internet?Com agregar as novas tecnologias disponíveis?
Respostas:Sim, é indispensável usar as técnicas da Eng. de Software, para atender à complexidade e garantir confiabilidade às soluções distribuidas.
Sim, é possível realizar a Eng. de Software porque tudo esta Orientado a Objetos.
Modelagem Orientada a Objetos (UML) Arquitetura de Objetos distribuidos (CORBA) Implementação para internet (Java)
Novas questões:
Como integrar estas novas tecnologias com os métodos de Engenharia de Software?
Como integrar a UML (analise/projeto) com CORBA (Arquitetura da solução) e com Java (implementação) serm perder as vantagens individuais de cada uma
A UML é capaz de modelar e dar uma visão completa do todo tão heterogêneo?
Abordagem
Analisar a UML e a sua integração com Java e CORBA
Propor um método para o trabalho em conjunto destas tecnologias
Exemplificar a integração
Integração entre as tecnologias
JavaAmbiente de Implementacao
CORBAArquitetura da Solucao
Dominio do Problema
UMLAnalise e Projeto
O que é a UML?
UML
Unified Modeling Language É uma linguagem de modelagem de sistemas É orientada a objetos É padronizada pela OMG É suportada por diversas ferramentas CASE Ainda é pouco difundida, e utilizada
Seqüência de diagramas*
Comportamentointerno
ComportamentoExterno
Estrutura
Implementação
Casos de Uso
Eventos Colaboração Atividades Estados
Classes
Componentes Distribuição
Pacotes
* esta seqüência não faz parte da UML é apenas uma sugestão
Casos de Uso
Descreve os cenários de interação
Identifica elementos externos
Caracteriza os objetivos de cada um com o sistema
Um Ator se comunica com Casos de Uso
Define-se a fronteira do sistema
Diagramas de Casos de Uso
Cliente
Vendedor
Gerente
Fazer Pedidos
AprovarCrédito
EntregarMaterial
Sistema
Diagramas de Classes
Estrutura das partes que formam o sistema
Expõe os componentes internos
Estabelece as relações entre as classes
É um diagrama estrutural estático e não dinâmico
Possui uma relação direta com a estrutura dos códigos
Exemplos de representação
Pessoa
Pessoa
nome: Textoidade: inteiro
cadastrar()
Pessoa {abstrata,
autor=JEDeboni}
+nome: Texto#RG : inteiro+casado : boolean=false
+cadastra()+criar(RG:inteiro)
ReservasDataReservaDataValidadeCriarCancelar
UsuariosNomeLocalTelefoneSenhaFazReserva
MateriaisCodigoAssuntoTituloAutorEmprestarDevolver
LivrosEditoraEdiçãoISBNMostraDetalhes
1
Consultar
1
1
1
Empréstimo
DataEmpréstimoDataRetornoATRASONovo
Modelo de Classes
Diagramas de Interação
Diagramas de Seqüência de Eventos
Diagramas de Colaboração As classes se comunicam pelos métodos Descreve a troca de mensagens Mostra a dinâmica observável entre as classes Uma mensagem se da pela invocação de um
método de outra classe e pela passagem de parâmetros
Diagrama de seqüência de eventos
Diagrama de Estados
Emprestado
Disponível
Atrasado
Reservado
Emprestar
Retornar
Retornar[ExisteReserva]
Emprestar
[DataReserva<Hoje]
[DataEmprestimo>Hoje]/AvisarUsuário
Devolver[AvisarGerente]
Devolver[ExisteReserva]/AvisarUsuario
Diagramas de Implementação
Descrição dos componentes de software que formam o sistema e a arquitetura de hardware Diagramas de Componentes Diagramas de Distribuição
Diagrama de Componentes
GUI
Libs
BancoDeDados
Diagrama de Dsitribuição
Impressora
Cliente:PC
Servidor:Host1
Integração da implementação
GUI Libs
BancoDeDados
Cliente:PC
Servidor:Unix
Pacotes
interfaces
ClassesAulixiares
Classes Persistentes(Banco de Dados)
Classes deNegócio
Agrupam os objetos
Pode-se usar para identificar as camadas
Integração entre os diagramas
Mapeamento de um URL
http://www.empresa.com.br/aplic/horas/index.html
www.empresa.com.br
<<pagina>>index
\horas\
Integração entre as tecnologias
JavaAmbiente de Implementacao
CORBAArquitetura da Solucao
Dominio do Problema
UMLAnalise e Projeto
Modelo UML de sistemas Java
Representação gráfica dos sistemas Visão do todo, integrada e coerente Permite uma visão sistêmica Facilita o entendimento da arquitetura Permite esconde os detalhes do código
durante a visão da arquitetura UML + Java uma união vantajosa para os dois
UML e Java – ida e volta
Geração de Código Tradução dos diagramas em código Java Os diagramas de classe geram estruturas Java
Engenharia Reversa Gerar modelo com base em código Java Identificar classes, componentes e relações
Mapeamento em uma classe java
Funcionario
nometelefoneativonovo
public class Funcionario { private String nome = ""; private int telefone = 0; private boolean ativo = false; public void novo () { } }
Mapeamento de uma Applet java
import java.applet.*;import java.awt.*;
public class Funcionario extends Applet { private String nome = ""; private int telefone = 0; private boolean ativo = false; public void novo () { } }
Applet
{abstract}
Funcionario
{final}
-nome:String-telefone:int-ativo:boolean+novo( ):void
Exemplo de diagrama de estado
ListandoItens
INIT
CLOSE
EditandoItens
iniciar[teste1==true]/modifica=false
fechar[teclaCancel=true]/BD.fechar()
fechar[TeclaCancel()==true]/BD.fechar(
editar[teclaEdit()==true]/BD.abrir()
fechar[teclaOK()==true]/BD.fechar()
Código do diagrama de estado
class DEMO { private String currentState = "INIT" ; //States: INIT, CLOSE, ListandoItens, EditandoItens //Events: nullEvent, iniciar, fechar, editar
void process ( String anEvent ) {
if ( ( currentState == "INIT" ) && ( anEvent == "iniciar" ) && ( teste1==true ) ) { currentState = "ListandoItens" ; modifica=false return; }
if ( ( currentState == "ListandoItens" ) && ( anEvent == "fechar" ) && ( teclaCancel=true ) ) { currentState = "CLOSE" ; BD.fechar() return; } if ( ( currentState == "ListandoItens" ) && ( anEvent == "editar" ) && ( teclaEdit()==true ) ) { currentState = "EditandoItens" ; BD.abrir() return; } … else return; }}
Métodos para relacionar classes
Interfaces Uma descrição do que deve ser feito, sem se preocupar
com a implementação
Herança Trasferir para uma classe filha os métodos, atributos e
relacionamentos da classe mãe
Composição Criar uma instância de uma classe para poder utilizar os
serviços que ela dispõe
Interface UML, Java ou CORBA
Permite descrever como deve ser uma classe sem dizer como ela deve ser implementada.
Uma classe com assinaturas de operações
Uso: integrar análise/projeto e sistemas Pode usada para representar o resultado da análise, A análise define as assinaturas das operações, No projeto as assinaturas serão implementadas As classes devem implementar as interfaces
Interfaces UML e Java
ClasseModelo
+criar(String):void
impClasse
+criar(String):void
<<implementa>>
public class impClasse implements ClasseModelo{ public void criar (String p) { // // aqui devem ser inserido o código // do método //
}}
public interface ClasseModelo { public void criar (String p1); }
Herança
classeMae
classeFilha
public class classeFilha extends classeMae{ }
Toda a funcionalidade da mãe éTransferida para a classe filha comoSe fosse dela.
Agregação
Recursos
+funcao( ):void
ClasseA
1
1
oRec
public class ClasseA { private Recursos oRec = new Recursos() ; }
A ClasseA agora dispões dos recursos da classe Recursos atraves da instância oRec
A classe de Recursos deve estar diponível
Todas as opções juntas
minhaClasse
ClasseModelo
+criar(String):void
Recursos
+funcao( ):void
classeMae
<<implementa>>
1
1
oRec
public class minhaClasse extends classeMae implements ClasseModelo { private Recursos oRec = new Recursos() ; }
Integração entre as tecnologias
JavaAmbiente de Implementacao
CORBAArquitetura da Solucao
Dominio do Problema
UMLAnalise e Projeto
O que é a tecnologia CORBA?
CORBA Common Object Request Broker Architecture Uma camada de software que distribui objetos Oferece uma série de serviços de objeto É padonizada pela OMG
IDL - Interface Definition Language Padrão para definição dos Serviços dos objetos Linguagem semelhate ao C Portabilidade para Java, C++, Delphi, VB etc.. Permite integração entre sistemas heterogêneos.
Integração Cliente/Servidor
Requisições de Objeto
Invocamétodo () no
objeto Z
Objeto Zmétodo()
IDLIDL
ORB – barramento de objetosObject Request BrokerOs serviços são distribuidos na forma deObjetos em um barramento
CORBA algumas características
Invocação estática Os parâmetros podem ser conhecidos
Invocação dinâmica Os parâmetros podem ser “descobertos”
Escalabilidade Criação de uma rede de serviços intergalática
Segurança, Transparência e Controle Serviços disponíveis pela arquitetura
Coexistência com sistemas atuais (legados)
Anatomia do CORBA 2.0
Cliente
interface
Servico
_STUB _SKELTON
BOAORB
IIOP - Internet InterORB Protocol
A UML modela as interfaces
float balance
Account
makeDepositmakeWithdrawal
A linguagem IDL suporta Os princípios da Orientação a Objetos
Exemplo de interface IDL
// IDLinterface Account{//Attributesattribute float balance;readonly attribute string owner;//Operationsvoid makeDeposit(in float amount,out float newBalance);void makeWithdrawal(in float amount,out float newBalance);};
float balance
Account
makeDepositmakeWithdrawal
A interface IDL faz a ligação
Interface IDL
Cliente
Servidor
ClienteStub
ServerStub
IDL compiler
Compiladorem linguagem
nativa
idl2java
Interface.idl idl2java
InterfaceHolder.java
InterfaceHelper.java
_st_Interface
_sk_Interface
_InterfaceImplBase.java
Interface.java
Cliente
Servidor_exemplo_Interface.java
Distribuição da aplicação
org.omg.CORBA.Object
_InterfaceImplBase.java
Interface.java
ImplementacaoInterface.java
org.omg.CORBA.ORB
org.omg.CORBA.ORB
ClienteServidor
Passos para a criação de
Definição dasInterfaces IDL
Cliente
Servidor
ClienteStub
ServerStub
Implementaçãodos métodos(ling. nativa)
ORB
7
1
2
34
9
8
5
Ling. NativaCria aplicação
6
CORBA e UML
O modelo da analise recebe elementos da arquitetura da solução na fase de projeto
Os modelos devem ser trabalhados para refletir a arquitetura do projeto
O resultado da análise deve ser preservado nas manipulações do projeto
CORBA e Java
O uso de Java na Arquitetura CORBA ... ... Dá mobilidade de código portabilidade ... Facilita a ida do CORBA para a WEB ... Permite a construção de Agentes ... Permite a integração do mundo OO
Java “concorre” com CORBAno RMI e EJB (alternativas semelhantes)
Metodo para desenvolvimento
Análise
Projeto
CodigoModelo InterfaceIDL
ClienteJava/outras
Browser
ServidorJava/outras
Negócio
ModelagemUML/CORBA
ImplementaçãoCORBA/Java
ORB
ServidorWeb
Seqüência de passos
Cliente
interface
Servico
_STUB _SKELTON
BOAORB
IIOP - Internet InterORB Protocol
Projeto
Análise
Implementação
Apresentação do Problema
Levantar o problema a ser resolvido O que ? Porque?
e não da implementação Como?
Trabalho do Especialista da Aplicação e do Engenheiro de Software
CASOS DE USO
Análise
Entendimento do problema
Modelagem Conceitual Modelo de Casos de Uso Modelo se Eventos Modelo Conceitual de Classes
Produtos da análise.
Analise
Desenvolver Modelos em um CASE
Com a UML (Linguagem padronizada)
Representar o sistema (problema)
Criar um Modelo de Interfaces
Projeto
Aplicação de alguns padrões de projeto.
Modelagem da arquitetura
Componentização do sistema
Definir a Interfaces do negócio (IDL)
Definir a camada de apresentação (IHM)
Definir a camada de persistência (BD)
Projeto
Integrar a arquitetura CORBA ao modelo
Proposta de componentes e distribuição
Integração com Java em alto nível
Definição da estrutura das classes
Criar Classes de Implementação das Interfaces, Aplicar patterns e manipular o modelo de análise
Relacionar (herança, implementação ou composição) comas classes da arquitetura e da linguagem de programação
Implementação
Contrução dos componentes de negócio IDL2Java
Construção dos códigos do servidor
Integração com serviço de Banco de Dados
Teste local
Construção da Interface Homem Máquina
Integração com ORB
Implementação
Programas Java
Geração de Códigos
Criação dos componentes e dos programas
Gerar código dos modelosComplementar os códigos com programação
Fazer a Engenharia Reversa para atualizar os modelos
Resumo do Método
Análise Criar um Modelo de Interfaces do problema
Projeto Criar Classes de Implementação das Interfaces, Relacionar as classes com a arquitetura Aplicar patterns e manipular o modelo de projeto
Implementação Gerar código dos modelos Complementar os códigos com programação Fazer a Engenharia Reversa para atualizar os modelos
Importância de um CASE
CASE – Computer-Aided Software EngineeringFunções Principais Facilidade de Uso, interface gráfica amigável Aderência à UML, sem mudanças proprietárias Integração entre os diagramas Teste (cheklist) dos diagramas Geração de Relatórios (textos e gráficos) Geração de Código (linguagens OO, BD) Engenharia Reversa Repositório de Modelos e Objetos Controle de Versão (integração com software 3o)
Exemplo de Aplicação
Demonstrar que a UML é capaz de ajudar na modelagem e projeto de aplicações distribuidas pela tecnologia CORBA
Receita …
Aplicação Local (UML <> Java) Projetar uma aplicação local com UML Gerar o código Java do projeto UML Construir a aplicação em Java Executar a aplicação local Fazer a atualização do modelo UML
Aplicação Distribuída (UML <> CORBA <> Java) Distribuir a aplicação com CORBA no modelo UML Construir os elementos auxiliares CORBA Construir os novos códigos em Java Executar a aplicação distribuída
Visitem nossa cozinha…
Ambiente de Desenvolvimento Ferramenta CASE Ambiente Java (jdk) Editor Java Banco de Dados (opcional) ORB com suporte Java (idl2java)
Ambiente de Processamento Navegador Internet (se for executar uma Applet) Servidor CORBA (ORB)
Ferramenta CASE
Produtos do Mercado, Shareware, Demos Rational Rose (www.rational.com) System Architect (www.choose.com.br) WithCLASS (www.microgold.com) ToghetherJ
Exemplo de Ferramenta CASE
Ambiente Java
JDK1.1.X (JDK1.1.5)
JDK1.2, JDK 1.3, …
Visual Café (Symantec)
Jbuilder (Imprise)
Visual Age (IBM)
FreeJava (RealJ)
Editor Java
Ferramentas
CASE WithCLASS 99
JDK 1.1.5 (com jdbc)
FreeJava 3.0 (RealJ) – editor Java shareware
JBuilder (opcional para o projeto gráfico)
Ambiente de rede - execução
VisiBroker for Java 3.1
VisiBroker Naming Service fo Java 3.0
Internet Explorer 5.0
Windows 98
Arquitetura
Servidor
Desenvolvedor
Cliente
navegador
Servidor WEBServidor ORBServidor BD
CASEAmbiente Desenv.Bibliotecas
O prato principal…
Sistema para consulta em uma lista de telefones
Diagrama de Caso de Uso
Usuario
ConsultarTelefone
O usuário entra com um nome e consultao telefone de uma lista de telefones armazenada em um arquivo
Diagrama de Classes (inicial)
Lista
+procura( )
Usuario
11
Diagrama de seqüência de eventos
Usuario Lista
procura(nome)
Modelo de estados do Usuario
Procurando
EntrandoNome
OK
Fechar
Modelo de Classes final
oUsuario+lis:Lista+l:Label+b:Button+t:TextField+main( String):void+oUsuario( )+handleEvent( Event):boolean+action( Event, Object):boolean
Usuario Lista
-procura( String):String
aLista
+procura( String):String
1
1
lis
consulta
Diagrama de Implementação
Usuario Lista
lista.txt
Exemplo da apresentação
Código da aplicaçãoimport java.io.*;public class aLista implements Lista{
public String procura(String texto){ String linha,alinha="não encontrei :"+texto; try { FileInputStream is = new FileInputStream("lista.txt"); DataInputStream ds = new DataInputStream(is); while ((linha = ds.readLine())!=null) { if(linha.indexOf(texto)!=-1) alinha=linha; } ds.close(); is.close(); } catch (IOException e) { System.out.println("Erro: "+e); } return(alinha);}}
Aplicação distribuida
CLIENTE
SERVIDOR
Lista
lista.txt
Usuario
Tradução da interface para IDL
Lista
-procura( string ):string
interface Lista{ string procura(in string texto); };
Código gerado pelo CASE
Pré-compilador idl2java
Interface.idl idl2java
InterfaceHolder.java
InterfaceHelper.java
_st_Interface
_sk_Interface
_InterfaceImplBase.java
Interface.java
Cliente
ServidorInterface.java
Classes de implementação Java
Classes CORBA
Lista{interface}
+procura( java.lang.String):java.lang.String
Usuario{interface}
oUsuario+lis:Lista {static}+l:Label+b:Button+t:TextField+orb:org.omg.CORBA.ORB {static}
+main( String):void {static}+Usuario( ){constructor}+handleEvent( Event):boolean+action( Event, Object):boolean
_ListaImplBase-__ids:java.lang.String[] {array}
#_ListaImplBase {abstract}#_ListaImplBase{constructor}+_ids:java.lang.String[]+_methods:org.omg.CORBA.portable.MethodPointer[]+_execute:boolean+_execute:boolean {static}
aLista
-aLista( String){constructor}+procura( String):String
ListaServer+l:aLista {static}+orb:org.omg.CORBA.ORB {static}+boa:org.omg.CORBA.BOA {static}
+main( String):void {static}
org.omg.CORBA.BOA {abstract}org.omg.CORBA.ORB
{abstract}
org.omg.CORBA.Object {abstract}
1 1l
1
1
orb1
1
orb
1
1
boa
Classes analise (UML)
Interface Lista.java (gerada)public interface Lista extends org.omg.CORBA.Object { /** <p> Operation: <b>::Lista::procura</b>. <pre> string procura( in string texto ); </pre> </p> */ public java.lang.String procura( java.lang.String texto );}
A interface Lista
Deve ser traduzida para IDL
Pre compilada pelo idl2java
_ListaImplBase
aListaLista{interface}
A implementação da interface
Deve herdar da classe gerada pelo idl2java _ListaImplBase
aListaLista{interface}
public class aLista extends _ListaImplBase{
Criar uma aplicação servidora public static void main(String args[]){ try { // inicializa o ORB
orb = org.omg.CORBA.ORB.init(args,null);// inicializa o BOAboa = orb.BOA_init();// criar o objetol = new aLista("minha lista");// exportar o objeto criadoboa.obj_is_ready(l);// Pronto para atender os pedidosboa.impl_is_ready();
} catch (org.omg.CORBA.SystemException e) { System.err.println(e); }}
Inicilização do serviço
ORB aListaListaServerBOA
init
init
new
obj_is_ready
impl_is_ready
Classes de implementação Java
Classes CORBA
Lista{interface}
+procura( java.lang.String):java.lang.String
Usuario{interface}
oUsuario+lis:Lista {static}+l:Label+b:Button+t:TextField+orb:org.omg.CORBA.ORB {static}
+main( String):void {static}+Usuario( ){constructor}+handleEvent( Event):boolean+action( Event, Object):boolean
_ListaImplBase-__ids:java.lang.String[] {array}
#_ListaImplBase {abstract}#_ListaImplBase{constructor}+_ids:java.lang.String[]+_methods:org.omg.CORBA.portable.MethodPointer[]+_execute:boolean+_execute:boolean {static}
aLista
-aLista( String){constructor}+procura( String):String
ListaServer+l:aLista {static}+orb:org.omg.CORBA.ORB {static}+boa:org.omg.CORBA.BOA {static}
+main( String):void {static}
org.omg.CORBA.BOA {abstract}org.omg.CORBA.ORB
{abstract}
org.omg.CORBA.Object {abstract}
1 1l
1
1
orb1
1
orb
1
1
boa
Classes analise (UML)
Classe Usuario (cliente)
Deve se ligar ao ORB
Deve instanciar o objeto
// inicializa o orb orb = org.omg.CORBA.ORB.init(arg,null);
// liga no objeto lis = ListaHelper.bind(orb, "minha lista");
Modificações na classe Usuariopublic class oUsuario extends Frame{ public static Lista lis; public Label l = new Label("Procura :");
public Button b = new Button("Ok");public TextField t = new TextField(40);public static org.omg.CORBA.ORB orb;
public static void main(String arg[]) {
// inicializa o orb orb = org.omg.CORBA.ORB.init(arg,null);
// liga no objeto lis = ListaHelper.bind(orb, "minha lista"); Usuario u = new Usuario();
...
Sequencia para execução
C:> start osagent Coloca no ar o ORB e os seus serviços
C:> start java –DOAid=Tsession ListaServer Coloca no ar o serviço de Lista
C:> java Usuario Executa a aplicação no cliente
Seqüência de execução
oUsuario ORB ListaHelper aLIsta:ListaUsuario
init
bind
procura(nome)
procura(nome)
OK
TextField.SetText()
Exemplo de resultado
Leitura Recomendada
UML Jacobson, I; Rumbaugh, J; Booch, G. UML: Guia do
Usuário. Editora Campus, 2000.
CORBA com JAVA ORFALI, R. e HARKEY, D. Client/Server
Programming with Java and CORBA. 2nd Ed. John Wiley & Sons Ed. 1998. Excelente LIVRO e CD-ROM
OMG www.omg.org
Artigos e Documentação da UML, CORBA, IDL, etc…
Conclusão
Demanda crescente por Flexibilidade Desempenho Baixo custo
Leva à distribuição dos negóciosPadrões vão garantir os investimentos em sistemas distribuídos