Introdução Geral à Plataforma Java ou Desenvolvimento Java de Sistemas na Web, em Celulares e na TV Digital Interativa Prof. Dr. Jorge H C Fernandes jorgehcfernandes@uol.com.br CIC/UnB DIMAp/UFRN
Introdução Geral à Plataforma Java Apresentação teórico-prática sobre os conceitos em amplitude da plataforma Java no apoio ao desenvolvimento de software e sistemas Exemplos de aplicações da linguagem Java na: Programação de pequenos programas em computadores pessoais Desenvolvimento de módulos de sistemas web Software para execução em dispositivos móveis como celulares e PDAs Distribuição via broadcast e execução em equipamentos para televisão digital interativa (set top box)
Parte 1 Conceitos no desenvolvimento de software e sistemas Sofware e Sistemas Máquinas e Linguagens Cadeia de Valor na Convergência Digital Middleware
Conceitos no desenvolvimento de software e sistemas O que é um software e o que é um sistema Quando o software é livre
public class Calc { import java.awt.*; private int estadointeracao; import java.awt.event.*; Software private int operacaoselecionada; public class CalcVisual extends Frame { private long acumulador0; // Cria os painéis private long acumulador1; Panel panelteclas = new Panel(); private static final int NENHUMA Panel panelteclastopo = 0; = new button_9.setlabel("9"); Panel(); } private static final int SOMA Panel = 1; panelteclasnumericas = button_soma.setlabel("+"); new Panel(); private static final int SUBTRACAO = 2; }); button_igual.setlabel("="); private static final int ACUMULANDO_0 // cria os gerenciadores = 0; de layout dos painéis private static final int ACUMULANDO_1 BorderLayout BorderLayoutPrincipal = 1; = new BorderLayout(); public Calc() {} BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout(); long soma() { GridLayout gridlayoutclearcebackspace = new GridLayout(); operacaoselecionada = GridLayout SOMA; gridlayoutteclasnumericaseoperacoes = new GridLayout(); estadointeracao = ACUMULANDO_1; return acumulador0; // cria a área de display da calculadora } TextField textfielddisplay = new TextField(); } long um() {return numerodigitado(1);} }); long dois() {return numerodigitado(2);} // cria os botões da calculadora long numerodigitado(int valor) Button { buttonbackspace = new Button(); if (estadointeracao == ACUMULANDO_0) Button buttonc = new { Button(); acumulador0 = acumulador0 Button * buttonce 10 + valor; = new Button(); estadointeracao = ACUMULANDO_0; Button button_0 = new Button(); return acumulador0; Button button_1 = new Button(); } else if (estadointeracao Button == ACUMULANDO_1) button_2 = new Button(); { acumulador1 = acumulador1 Button * button_3 10 + valor; = new Button(); } estadointeracao = ACUMULANDO_1; Button button_4 = new Button(); }); return acumulador1; Button button_5 = new Button(); } Button button_6 = new Button(); return 0; Button button_7 = new Button(); racoes); } Button button_8 = new Button(); long igual() { Button button_9 = new Button(); long resultado = 0; Button button_pontodecimal = new Button(); if (operacaoselecionada Button == SOMA) button_igual { = new Button(); resultado = acumulador0 Button + acumulador1; button_soma = new Button(); } p button_2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent button_2_actionperformed(e); // cria o tratador de evento para o botão "+" button_soma.addactionlistener(new // adiciona alguns botões no painel de teclas superior java.awt.event.actionlistener() { gridlayoutclearcebackspace.setcolumns(3); public void actionperformed(actionevent panelteclastopo.setlayout(gridlayoutclearcebackspace); button_soma_actionperformed(e); panelteclastopo.add(buttonbackspace, null); panelteclastopo.add(buttonce, null); panelteclastopo.add(buttonc, null); // cria o tratador de evento para o botão "-" button_subtracao.addactionlistener(new // adiciona alguns botões java.awt.event.actionlistener() no painel de teclas inferior { gridlayoutteclasnumericaseoperacoes.setrows(4); public void actionperformed(actionevent gridlayoutteclasnumericaseoperacoes.setcolumns(5); button_subtracao_actionperformed(e); gridlayoutteclasnumericaseoperacoes.sethgap(4); gridlayoutteclasnumericaseoperacoes.setvgap(4); // cria o tratador de evento para o botão "*" panelteclasnumericas.setlayout(gridlayoutteclasnumericase button_mult.addactionlistener(new java.awt.event.actionlistener() { panelteclasnumericas.add(button_7, null); public void actionperformed(actionevent panelteclasnumericas.add(button_8, null); button_mult_actionperformed(e); panelteclasnumericas.add(button_9, null); lt l N i dd(b tt di i ll)
Software Conjunto organizado de instruções e descrições de dados Escrito em uma (ou mais) linguagens compreensíveis por um sistema de computação
Sistema um conjunto de elementos inter-relacionados que interagem no desempenho de uma função Sistema econômico mantém os recursos da economia em circulação Sistema Computacional atende a uma determinada necessidade de processamento de informações de usuários Sistema Solar Manter os planetas girando em torno do sol Sistema de injeção eletrônica regular a mistura ótima de combustível e ar para o funcionamento do motor Sistema digestivo incorporar, ao corpo de um animal, a energia e matéria contidas em alimentos Biosfera manter a vida sobre a terra
Um Sistema De Computador é uma Máquina O Usuário Conversa com a Máquina Sistema de Computador (Estendido Pelo Software) Saída (output) Entrada (input) Usuário
Uma Máquina de Calcular
Uma Máquina para Analisar Programas Java
Um Sistema para Desenhar ou Máquina de Desenhar
Um Sistema ou Máquina para Tratar Imagens
Um Sistema ou Máquina, que Simula um Celular, que simula um jogo de damas
Várias Máquinas Coexistem em um Sistema de Computador em um Mesmo Instante de Tempo
Um Sistema de Computador Programável é uma Fábrica de Máquinas Extensível E cada software descreve como fábricar uma máquina E o programador constrói estas descrições de máquinas conforme especificações do que a máquina deve fazer quando em funcionamento
O uso da Máquina é feito por uma Conversa, que é Baseada uma Linguagem Linguagem A (Conversar com Celular) Linguagem B (Conversar com Paint) Linguagem C (Conversar com Calculadora)
A Linguagem da Máquina Paint
A Linguagem da Máquina Calculadora
Vamos conversar com Algumas Máquinas? Converse com o Paint Converse com o GIMP Converse com o Powerpoint! Converse com o sistema operacional
No que consiste o conversar? Num diálogo com a máquina Na locução de frases que são construídas numa linguagem com sintaxe e semântica próprias
Quando uma máquina faz sucesso? Quando a conversa entre usuário e máquina é produtiva Quando do diálogo são produzidos resultados que satisfazem as necessidades do usuário
Máquinas Complexas e Hierarquizadas
Usuário Uso Máquina n+1 Interpretação do Software Software Carga Máquina n
Um Sistema Computacional Usual Máquina n( MCSW) Software em Execução Interpretação... Máquina 2 ( MCSW) Software em Execução Uso Interpretação Software Carga... Software Carga Máquina 1 ( MCSW) Software em Execução Interpretação Uso Software Carga Máquina 0 MPU Uso
usuário echo.txt (software) Loader.class (software) input output input output input output Loading Loader (machine) Echo (machine) JVM Java Virtual Machine (machine) Interpretation vc0 (machine) Interpretation java.exe (software) input output cmd (machine) Loading Interpretation Sistema Operacional (machine)
Uma Máquina explorer criada pelo sistema operacional input Usuário do Explorer explorer.exe (software) Read output explorer (machine) Interpretation Usuário do Sistema Operacional input output cmd (machine) Loading Sistema Operacional (machine)
public class Calc { private int estadointeracao; private int operacaoselecionada; private long acumulador0; private long acumulador1; private static final int NENHUMA = 0; private static final int SOMA = 1; private static final int SUBTRACAO = 2; private static final int ACUMULANDO_0 = 0; private static final int ACUMULANDO_1 = 1; public Calc() {} long soma() { operacaoselecionada = SOMA; estadointeracao = ACUMULANDO_1; return acumulador0; } long um() {return numerodigitado(1);} long dois() {return numerodigitado(2);} long numerodigitado(int valor) { if (estadointeracao == ACUMULANDO_0) { acumulador0 = acumulador0 * 10 + valor; estadointeracao = ACUMULANDO_0; return acumulador0; } else if (estadointeracao == ACUMULANDO_1) { acumulador1 = acumulador1 * 10 + valor; estadointeracao = ACUMULANDO_1; return acumulador1; } return 0; } long igual() { long resultado = 0; if (operacaoselecionada == SOMA) { Você Usa ou Testa Software? resultado = acumulador0 + acumulador1; } reset(); return resultado; } long reset() { estadointeracao = ACUMULANDO_0; operacaoselecionada = NENHUMA; acumulador0 = 0; acumulador1 = 0; return acumulador0; } } import java.awt.*; import java.awt.event.*; public class CalcVisual extends Frame { // Cria os painéis Panel panelteclas = new Panel(); Panel panelteclastopo = new Panel(); Panel panelteclasnumericas = new Panel(); // cria os gerenciadores de layout dos painéis BorderLayout BorderLayoutPrincipal = new BorderLayout(); BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout(); GridLayout gridlayoutclearcebackspace = new GridLayout(); GridLayout gridlayoutteclasnumericaseoperacoes = new GridLayout(); // cria a área de display da calculadora TextField textfielddisplay = new TextField(); // cria os botões da calculadora Button buttonbackspace = new Button(); Button buttonc = new Button(); Button buttonce = new Button(); Button button_0 = new Button(); Button button_1 = new Button(); Button button_2 = new Button(); Button button_3 = new Button(); Button button_4 = new Button(); Button button_5 = new Button(); Button button_6 = new Button(); Button button_7 = new Button(); Button button_8 = new Button(); Button button_9 = new Button(); Button button_pontodecimal = new Button(); Button button_igual = new Button(); Button button_soma = new Button(); Button button_subtracao = new Button(); Button button_mult = new Button(); Button button_divisao = new Button(); Button button_percento = new Button(); Button button_raiz = new Button(); Button button_invertesinal = new Button(); Button button_reciproco = new Button(); // cria o "modelo de dados", isto é, o próprio objeto calculadora // que irá efetivamente realizar os cálculos Calc calc = new Calc(); // construtor da parte visual da calculadora public CalcVisual() { try { buildgui(); } catch (Exception e) { e.printstacktrace(); } } /** * Constroi os elementos da interface grafica da calculadora */ private void buildgui() throws Exception { // ajusta as propriedades display textfielddisplay.settext("0"); // modifica cores de alguns botões buttonbackspace.setforeground(color.red); buttonc.setforeground(color.red); buttonce.setforeground(color.red); // atribui rótulos aos botões da calculadora buttonc.setlabel("c"); buttonce.setlabel("ce"); buttonbackspace.setlabel("backspace"); button_0.setlabel("0"); button_1.setlabel("1"); button_2.setlabel("2"); button_3.setlabel("3"); button_4.setlabel("4"); button_5.setlabel("5"); button_6.setlabel("6"); button_7.setlabel("7"); button_8.setlabel("8"); button_9.setlabel("9"); button_soma.setlabel("+"); button_igual.setlabel("="); // adiciona alguns botões no painel de teclas superior gridlayoutclearcebackspace.setcolumns(3); panelteclastopo.setlayout(gridlayoutclearcebackspace); panelteclastopo.add(buttonbackspace, null); panelteclastopo.add(buttonce, null); panelteclastopo.add(buttonc, null); // adiciona alguns botões no painel de teclas inferior gridlayoutteclasnumericaseoperacoes.setrows(4); gridlayoutteclasnumericaseoperacoes.setcolumns(5); gridlayoutteclasnumericaseoperacoes.sethgap(4); gridlayoutteclasnumericaseoperacoes.setvgap(4); panelteclasnumericas.setlayout(gridlayoutteclasnumericaseoperacoes); panelteclasnumericas.add(button_7, null); panelteclasnumericas.add(button_8, null); panelteclasnumericas.add(button_9, null); panelteclasnumericas.add(button_divisao, null); panelteclasnumericas.add(button_raiz, null); panelteclasnumericas.add(button_4, null); panelteclasnumericas.add(button_5, null); panelteclasnumericas.add(button_6, null); panelteclasnumericas.add(button_mult, null); panelteclasnumericas.add(button_percento, null); panelteclasnumericas.add(button_1, null); panelteclasnumericas.add(button_2, null); panelteclasnumericas.add(button_3, null); panelteclasnumericas.add(button_subtracao, null); panelteclasnumericas.add(button_reciproco, null); panelteclasnumericas.add(button_0, null); panelteclasnumericas.add(button_invertesinal, null); panelteclasnumericas.add(button_pontodecimal, null); panelteclasnumericas.add(button_soma, null); panelteclasnumericas.add(button_igual, null); // adiciona ao painel geral de todas as teclas // os dois paineis de teclas menores // ajusta as propriedades dos gerenciadores de layout panelteclas.setlayout(borderlayouttodasasteclas); panelteclas.add(panelteclastopo, BorderLayout.NORTH); panelteclas.add(panelteclasnumericas, BorderLayout.CENTER); // ajusta propriedades gerais visuais da interface this.setsize(250, 275); this.setresizable(false); this.setlayout(borderlayoutprincipal); // adiciona o painel geral de teclas ao centro frame (this) this.add(panelteclas, BorderLayout.CENTER); // adiciona o display ao topo do frame (this) this.add(textfielddisplay, BorderLayout.NORTH); /** * cria os vários tratadores de evento */ // cria o tratador de evento para o botão C (clear) buttonc.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { buttonc_actionperformed(e); } }); // cria o tratador de evento para o botão "1" button_1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_1_actionperformed(e); // cria o tratador de evento para o botão "2" button_2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_2_actionperformed(e); } }); // cria o tratador de evento para o botão "+" button_soma.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_soma_actionperformed(e); } }); // cria o tratador de evento para o botão "-" button_subtracao.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_subtracao_actionperformed(e); } }); // cria o tratador de evento para o botão "*" button_mult.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_mult_actionperformed(e); } }); // cria o tratador de evento para o botão "/" button_divisao.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_divisao_actionperformed(e); } }); // cria o tratador de evento para o botão "=" button_igual.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent e) { button_igual_actionperformed(e); } }); // cria o tratador de evento para o comando de janelas window close // (ALT+F4 no windows) this.addwindowlistener(new java.awt.event.windowadapter() { public void windowclosing(windowevent e) { this_windowclosing(e); } }); // mostra a interface grafica para o usuário show(); } // métodos que implementam o tratamento de eventos void this_windowclosing(windowevent e) { System.exit(0); } void button_soma_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.soma()); } void button_subtracao_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.sub()); } void button_mult_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.mult()); } void button_divisao_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.div()); } void button_igual_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.igual()); } void button_1_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.um()); } void button_2_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.dois()); } void buttonc_actionperformed(actionevent e) { this.textfielddisplay.settext("" + calc.reset()); } public static void main(string[] args) { CalcVisual CalcVisual1 = new CalcVisual(); } } Introdução Geral à Plataforma Java para Desenvolvimento de } Sistemas na Web, em Celulares e na Televisão Digital Interativa });
Software ou Sistema? Win32 Windows Device Drivers Hardware
Ser livre é ter liberdade para pensar, criar e se comunicar com sistemas de computadores complexos e hierarquizados: Apropriar-se dos meios de comunicação com as máquinas computáveis
Conversas com Sistemas Sistemas Computacionais muito Abstratos
Descrever Casos de Uso de uma Aplicação # Caso de Uso Descrição
Mapa de navegação de uma aplicação
Conceber um mapa de um site
Conversas com Sistemas Sistemas Computacionais menos Abstratos
Descrever Estruturas de uma aplicação
Descrever Comportamentos
Conversas com Sistemas Computacionais Concretos: Programação
Construir Código compreensível e útil Construir programas funcionais e coerentes através da codificação, auto-validação e teste unitário. Passos Organize a arquitetura e design antes de implementar Entenda as APIs antes de usar Utilize técnicas e convenções de codificação Faça teste unitário dos módulos Adote padrões e idiomas de design
Testar Software e Sistemas Verificar dinamicamente o comportamento do programa através do uso de um conjunto finito de casos de teste - adequadamente selecionados de um domínio de execuções usualmente infinito - contra o comportamento esperado deste Passos Defina e documente um plano de teste e um formulário de log de testes, que serão executados durante o desenvolvimento da aplicação e que servirão para validar a aplicação antes de entregar/apresentar
Plano de Teste Plano de Teste: <APLICACAO> <VERSÃO-DO-PLANO> Autor: <AUTOR-PLANO> Configuração sob teste: <DESCRIÇÃO-CONFIG><VERSÃO-CONFIG> Histórico de Alterações: <DT-CRIACÃO> <ALT-1> <ALT-2>,, <ALT-N> Caso de Teste CASO 1 Objetivo: <OBJETIVO DO CASO DE TESTE-1> Passos: Resultado Esperado <PASSO-1-1> <RESULTADO-1-1> <PASSO-1-2> <RESULTADO-1-2> <PASSO-1-n> <RESULTADO-1-n> CASO 2 Objetivo: <OBJETIVO DO CASO DE TESTE-2> Passos: Resultado Esperado <PASSO-1-1> <RESULTADO-1-1> <PASSO-1-2> <RESULTADO-1-2> <PASSO-1-n> <RESULTADO-1-n>
Log de Teste Log de Teste: <APLICACAO> <VERSÃO-DO-PLANO> Testador: <TESTADOR> Configuração sob teste: <DESCRIÇÃO-CONFIG><VERSÃO-CONFIG> Data: <DATA DE REALIZACAO DO TESTE> Casos de Teste CASO 1 Objetivo: <OBJETIVO DO CASO DE TESTE-1> Passos: Resultado Esperado Observações <PASSO-1-1> <RESULTADO-OBTIDO> <ERRO? Ou ACERTO?> <PASSO-1-2> <RESULTADO-OBTIDO> <ERRO? Ou ACERTO?> <PASSO-1-n> <RESULTADO-OBTIDO> CASO 2 Objetivo: <OBJETIVO DO CASO DE TESTE-2> Passos: Resultado Esperado <PASSO-1-1> <RESULTADO-OBTIDO> <PASSO-1-2> <RESULTADO-OBTIDO> <PASSO-1-n> <RESULTADO-OBTIDO> <ERRO? Ou ACERTO?> <ERRO? Ou ACERTO?> <ERRO? Ou ACERTO?> <ERRO? Ou ACERTO?>
A Amplitude das Plataformas Computacionais Atuais
Cadeia de Valor na Era da Convergência Digital Network Back-End Wap/Web Servers Internet Mobile/Broadcast Network Technology Software Development Payment Solutions Security Solutions Software Platforms Application Development Content Content Provision Content Aggregation Interface Portals/ Services/ Channels Devices (TV / Mobile)
Middleware: Solução para Organização da Complexidade dos Sistemas Computacionais
Middleware: Um Modelo de Portabilidade Uma camada de software que provê uma API (Application Programming Interface) genérica, padronizada e bem definida que abstrai especificidades e heterogeneidades de hardware e software dos diversos tipos de dispositivos Aplicações Desenvolvedores independentes Diferentes provedores de serviços Diversas áreas de aplicação API Genérica Sistema Operacional Hardware Implementações independentes Diferentes plataformas de hardware Diferentes plataformas de sistema operacional
Parte 2: Plataforma e Linguagem de Programação Java
Java: Uma Plataforma de Desenvolvimento de Software com Arquitetura Aberta e Amplo Espectro de Aplicação
Java é uma proposta de middleware que apresenta várias características de suporte ao modelo aberto de desenvolvimento de software e sistemas: Arquiteturas bem conhecidas
Edições Java 2 e Seus Dispositivos
Linguagem de Programação Java
Introdução A linguagem de Programação Java é De uso geral Concorrente Baseada em classes Orientada a objetos Fortemente tipada Compilada
Tempo de compilação (compile-time) e tempo de execução (runtime) Tempo de compilação Tradução para byte-code independente de máquina Tempo de Runtime Carga e ligação de classes necessárias à execução Geração de código de máquina (opcional) Otimização dinâmica do programa Execução do código
Gerenciamento Automático de Memória
Tipos e valores: primitivos e referências
Organização modular Organização em packages, similar à linguagem Modula. Membros de um package: classes, interfaces, e subpackages Packages são divided em unidades de compilação Unidades de Compilação Contem declarações de tipos Podem importar tipos de outros packages
Métodos e Variáveis de Classe e Instância Variáveis de classe uma por classe Métodos de classe operam sem referência a instâncias específicas Variáveis de instância dinamicamente criadas em objetos que são instâncias de uma classe Métodos de instância são invocados sobre uma instância de uma classe: this
String Strings de caracter em formato Unicode
Herança (inheritance) Herança simples de implementação
Sincronização e Exceções Programação concorrente com métodos sincronizados Declaração de exceções checadas em tempo de compilação
Interfaces Declaram métodos abstratos, tipos aninhados e constantes Classes não relacionadas por herança podem implementar a mesma interface Uma variável do tipo de uma interface pode conter uma referência a qualquer objeto que implementa a interface Implementação de múltiplas interfaces
Arrays Com verificação de limites de acesso Arrays são objetos dinâmicamente criados
Tratamento de Exceções Totalmente integrado com a semântica da linguagem e mecanismos de concorrência Três tipos de exceções: Checadas Run-time Errors
Blocos e Comandos Baseados em C e C++. Sem goto, mas com break e continue Sem conversão entre booleanos e inteiros Blocos sincronizados Comando try, com cláusulas catch e finally
Expressões Com ordem de avaliação completamente especificada: determinismo e portabilidade Métodos e construtores sobrecarregados e sobrescritos
Threads e Locks Usa modelo de concorrência baseado em monitor, introduzido originalmente com a linguagem Mesa Modelo de memória para sistemas multi-processados com memória compartilhada
Java Organização Léxica e Sintática
Java Organização Léxica Análise léxica de uma unidade de compilação (arquivo) produz uma seqüência de tokens Tradução léxica (tradução para unicode, tradução para input chars e terminadores, produção de input-elements) White-space Comments Tokens (terminais) class HelloWorld { // HelloWorld public static void main(string[] args) { System.out.println( Olá + Mundo \u0030 ); } } Id KW Literal Sep Operator
Java Organização Sintática class HelloWorld { // HelloWorld public static void main(string[] args) { String s = Olá + Mundo \u0030 ; System.out.println(s); } class : KW } public : KW HelloWorld : Id static : KW void : KW ResultType { : Sep main :Id Type ( :Sep MethodDecl MethodDeclarator FormalParas FormalParam Name ) :Sep Name Type CompilationUnit Type-Decl Class-Decl ClassBody ClassBodyDecl { :Sep BlockStmt LocalVarDecl Name VarDecl VarInit } : Sep Block BlockStmt System : Id. :Sep Stmt Identifier-Id Keyword-KW Literal-Lit Separator-Sep Operator-Oper } :Sep ExprStmt s : Id ( :Sep String : Id Name [ :Sep args : Id String : Id s : Id ] :Sep \ Olá\ :Lit + :Oper \ Mundo0\ :Lit out : Id. :Sep println : Id ) :Sep Expr
Java: Um Modelo de Organização Semântica Concorrência e tratamento de exceções herança de implementações alocação de memória Estruturas de classes-módulos-interfaces Controle Subrotinas estruturas Classes de controle e subrotinas Objetos Herança variáveis e tipos de dados
Concorrência e tratamento de exceções Linguagem Java: Keywords[1996] herança de implementações alocação de memória Estruturas de classes-módulos-interfaces Controle Subrotinas estruturas Classes de controle e subrotinas Objetos Herança variáveis e tipos de dados boolean if implements new throw byte else interface this throws short while import try char do package catch int for private finally long break protected synchronized float switch abstract transient double default extends volatile static continue native final return super const class void instanceof goto public
Linguagem Java: Literais Integer DecimalInteger HexInteger OctalInteger FloatingPoint Float Double Boolean true, false (reserved literal words) Character String Null Literal null (reserved literal word)
Linguagem Java: Separadores ( ) { } [ ] ;,.
Linguagem Java: Operadores Numéricos Atribuição Lógicos = attrib > greather ++ incr < smaller -- decr! not + sum += attrib-sum ~ bitwise-inv - sub -= attrib-sub? conditional * mult *= attrib-mult : conditional / div /= attrib-div == equals % remainder %= attrib-rem-div <= small-or-equal & and-bin &= attrib-and-bin >= great-or-equal or-bin = attrib-or-bin!= different ^ xor-bin ^= attrib-xor-bin logical-or << shiftleft <<= attrib-shl && logical-and >> shiftright >>= attrib-shr >>> unsigned-shr >>>= attrib-unsigned-shr
Linguagem Java: Categorias de Variáveis Variáveis de classe Usam a palavra reservada static numa declaração de classe Dentro de uma declaração de interface Variáveis de Instância Declaradas no escopo de uma classe sem a palavra reservada static Componentes de array Variáveis não nomeadas dentro de um array Parâmetros de métodos Valores de argumentos nomeados passados para um métodos Parâmetros de Constructor Valores de argumentos nomeados passados para um métodos Parâmetros de tratamento de exceção Criadas sempre que uma exceção e agarrada em uma clásula catch Variáveis locais Declaradas dentro de blocos
Aprendendo a Programar em Java: Reconstruindo a História das Linguagens de Programação
Programação Estruturada em Algoritmos simples Java
Tipos de dados Primitivos Referências
Programação Java Baseada em Classes: Métodos e variáveis estáticas Calculando com módulos
Programação Java Baseada em Objetos: Métodos e variáveis de instância Alocando Memória
Interfaces, contratos e arquiteturas Descrevendo e implementando contratos
Parte 3: Aplicações de Java na programação de pequenos programas em computadores pessoais
Programação de pequenos programas em computadores pessoais Linguagem Java + Java 2 Standard Edition Ferramenta para desenvolvimento Java Development Kit JDK Ferramenta para Aprendizagem BlueJ Exemplos Interface Gráfica Acesso a arquivos Conectividade de rede Estado da prática
Estrutura Hierárquica da Interface de uma Calculadora :Frame (Container) [components] :TextField (Component) :Panel (Container) [components] 7 :Button 8 :Button 9 :Button / :Button 4 :Button 5 :Button 6 :Button * :Button 1 :Button 2 :Button 3 :Button - :Button 0 :Button +/- :Button. :Button + :Button = :Button C :Button % :Button M+ :Button
Parte 4: Aplicações de Java no Desenvolvimento de módulos de sistemas web
Aplicações de Java no Desenvolvimento de módulos de sistemas web Arquitetura de Sistemas Web HTTP/HTML/JDBC Animação em Páginas HTML: Applet Usando o Protocolo HTTP: Servlet Gerando Páginas HTML: JSP Conectividade com SGBDs: JDBC Estado da prática
Arquiteturas Multi-Camadas Two-Tier Cliente Java Aplicação/Applet, HTML Browser java.net com Servlets Three-Tier Cliente Java Aplicação/Applet, HTML Browser java.net N-Tier Cliente Java Aplicação/Applet, HTML Browser java.net Middleware HTTP Servlets java.servlet Middleware HTTP Servlets javax.servlet java.sql HTTP javax.servlet Servlets java.net, javax.servlet SGBD Relacional A B C
Arquiteturas Multi-Camadas com Enterprise Java Beans (EJBs) Two-Tier Cliente Java Aplicação/Applet, java.rmi, javax.jndi N-Tier Cliente Java Aplicação/Applet java.rmi, javax.jndi N-Tier Cliente Java Aplicação/Applet, HTML Browser java.net Middleware RMI, JNDI EJBs javax.ejb Middleware RMI, JNDI javax.ejb EJBs java.rmi, javax.jndi java.sql HTTP javax.servlet Servlets java.rmi, javax.jndi SGBD Relacional A B C
Construindo um Pequeno Exemplo: Uma Aplicação de Consulta a Dados de um Restaurante
Um Restaurante Quer oferecer o cardápio de pratos através da internet Consulta cardápio Faz pedido Clientes web Clientes via celular Clientes através de televisão digital
Arquitetura da Aplicação Restaurante usando Browser Cliente Web Servidor Web Servidor Dados
Protocolos Usados HTTP (Servlets) SQL(JDBC)
Um Típico Pedido HTTP (com GET) GET /~jhcf/cgi/welcome.html HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.5 [en] (WinNT; I) Host: www.cic.unb.br:80 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8
Uma Típica Resposta HTTP HTTP/1.1 200 OK Date: Wed, 28 Jul 1999 02:29:08 GMT Server: Apache/1.2.5 Last-Modified: Wed, 28 Jul 1999 01:32:21 GMT ETag: "1bfc-62-379e5da5" Content-Length: 98 Accept-Ranges: bytes Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html <HTML> <HEAD> <TITLE> Saudação </TITLE> </HEAD> <BODY> <H1>Bem vindo à Web!</H1> </BODY> </HTML>
HTTP e HTML com Servlets Web Server WWW (HTTP) Web Browser Servlet Engine Formulário Nome Sepia Ano 1997 Mod 999.999
Modelo Computacional JDBC Cliente getconn() Aplicação createstmt() next(); next();next(); get*( Col-n ); get*(n); execquery() execupdate() Col-1 Col-2... Col-n Conn Stmt ResultSet Servidor SGBD Relacional Bases de Dados DriverMngr JDBC API Java CORE APIs Driver A B C
Construindo a Aplicação Restaurante usando Browser Cliente Web Servidor Web Servidor Dados
Java e a Computação Corporativa: Estado da Arte Muita gente desenvolvendo soluções para organizações de pequeno e médio porte Modelo já estabelecido no Brasil
Parte 5: Software Java para dispositivos móveis como celulares e PDAs
Software para dispositivos móveis como celulares e PDAs J2ME/MIDP Arquitetura de sistemas com mobilidade HTTP/XML Programação de pequenos programas para celulares Dispositivos de acesso a dados Jogos e outras aplicações com interface gráfica de baixo nível Estado da prática
Limitações dos Dispositivos Móveis Pequena espaço de display Pequeno espaço para entrada de dados Pequeno espaço de memória Pequena capacidade de processamento Pequena banda de rede Rede insegura Trabalho eventual em modo desconectado Necessidade de sincronização
Vantagens dos Dispositivos Móveis O celular é mais importante que a Internet! A internet está no celular Computador móvel, de baixo custo, com alta taxa de penetração mundial Canal de lucros constante através dos modelos fidelizadores das operadoras Curto ciclo de renovação tecnológica Oportunidades de integração com automação doméstica e corporativa
Características do Modelo de Aplicações e Serviços Móveis Independência de localização Conectividade instantânea Adaptabilidade e intimidade Novas formas de trabalho Novas formas de negociação Novas formas de entretenimento
Categorias de Aplicações da Internet Móvel[MBS, 2001] Comunicação Comércio Corporativo Voz E-mail Mensagem instantânea Messagem unificada Ferramentas de trabalho em grupo Video telefonia Varejo Comércio-baseado em localização Corretagem de ações Serviços bancários Leilões corporativos Comércio multicanais Seguros Reservas Anúncios Consumidor Voz E-mail Mensagem instantânea Messagem unificada Chat Video telefonia Serviços em comunidade Cartões postais digitais Varejo Comércio-baseado em localização Compras por comparação no shopping Compra de tickets Corretagem de ações Serviços bancários Leilões corporativos Comércio multicanais Música Jogos e apostas Tons musicais e ícones Seguros Reservas Anúncios Notícias financeiras e industriais Notícias CRM - Customer Relatioship Management Entretenimento Relatórios gerenciais Viagens Gerência de frota Direcionamento ao volante Automação de força de vendas Serviços baseados em localização Serviços de valor Auto-serviço para empregados Segurança agregado Gerenciamento de viagens Controle remoto doméstico Recrutamento Calendário Gerenciamento de cadeia de suprimentos Serviços sociais Gerencia de recursos humanos Mensagens instantâneas Segurança Controle remoto
MIDlets Pequenas aplicações instaláveis em um dispositivo MIDP, baseadas numa API bastante reduzida de programação, formada por aproximadamente 138 classes e interfaces (MIDP 1.0) Similar ao modelo de applets Downloadable Permite criar serviços para consumidores de telefones celulares jogos e aplicações de comércio
Mobile Information Devices (Versão 1.0) Mobilidade Operado com bateria Memória (mínima) 128KB de memória não volátil para implementação MIDP 8KB de memória não volátil para persistir dados das aplicações 32KB de runtime e heap Interface com o usuário (mínima) Display com 1 bit de cor e resolução mínima de 96 x 54 pixels Entrada de dados via teclado ou tela sensível ao toque Conexões de rede bidirecionais, com banda limitada
J2ME: Organização em Configurações e Perfis... Profile... Profile... Profile... Profile... Profile Foundation Profile Connected Device Configuration (CDC) JVM (CVM)...... Profile Profile Mobile Information Device Profile (MIDP) Connected, Limited Device Configuration (CLDC) KVM (Kilo Virtual Machine)
Evolução das Tecnologias de Sistemas Interativos na Web Desktop HTML + FORMS Applet HTML Browser HTML Browser + Java VM Wireless WML MIDlet WAP Cell Phone MIDP Cell Phone
Applet 2 Applet 1 Applet 3 Web Server Funcionamento dos Applets WWW (HTTP(s)) Web Browser Applet 1 Applet 2 Applet 3 Interface Browser Applet 1 Applet 2 Applet 3 Página HTML Classe Classe Applet Sandbox Objeto Applet Prof. Dr. Jorge Objeto H C Fernandes (jorgehcfernandes@uol.com.br). Depto Ciência da Computação / UnB Depto Informática e Mat. aplicada / UFRN
Applet 2 Applet 1 Applet 3 Funcionamento dos MIDlets Web Server WWW (HTTP(s)) Repositório Web Sandbox SUITE 1 SUITE 2 SUITE 3 MIDlet SUITE 1 A MIDlet SUITE 2 B MIDlet SUITE C 3 SUITE 3 Página HTML Descritor de Aplicação (JAD) Arquivos (Imagens, etc) Classe Classe MIDlet Objeto Objeto MIDlet SUITE 1 RecordStore
HelloWorldMIDlet: Implementação import javax.microedition.midlet.midlet; import javax.microedition.lcdui.*; public class HelloWorldMIDlet extends MIDlet implements CommandListener { } private Command exitcommand; private TextBox textbox; public HelloWorldMIDlet() { // Para associar a softkey // Para entrada de dados exitcommand = new Command("Exit", Command.EXIT, 1/*Priority*/); textbox = new TextBox("OláMundo MIDlet /* Nome do componente */, "Olá, Mundo! /* conteúdo */, 15 /*tamanho máximo */, 0 /*máscara*/); textbox.addcommand(exitcommand); textbox.setcommandlistener(this); } protected void startapp() { Display.getDisplay(this).setCurrent(textBox); } protected void pauseapp() {} protected void destroyapp(boolean unconditional) {} public void commandaction(command c, Displayable d) { if (c == exitcommand) { destroyapp(false); notifydestroyed(); } } // Adapta para tratar comandos // Criação e // interligação // entre objetos // Exec.quando MIDLet é ativado // Exec. quando MIDlet é suspenso // Exec. quando MIDLet é destruído // Exec. quando comando é acionado
HelloWorldMIDlet em Ação: Diagrama de Objetos current :Display thedisplay :HelloWorldMIDlet current textbox <<displayable>> :TextBox exitcommand :Command 1 new HelloWorldMIDlet() - Criação do MIDlet 1.1 Criação de um textbox (Displayable) para preencher o display 1.2 Criação de comandos para inserir no Displayable 2 startapp() - Associação do Displayable ao Display 3 commandaction() Ativação do comando Exit 3.1 destroyapp() Desativação do MIDlet
Packages CLDC1.0/MIDP 1.0 J2SE java.lang java.io java.util CDC CLDC javax.microedition.io MIDP1.0 javax.microedition.lcdui javax.microedition.midlet javax.microedition.rms
CLDC1.0/MIDP1.0: java.lang
CLDC1.0/MIDP1.0: java.io
CLDC1.0: java.util - MIDP1.0: java.util
CLDC1.0: javax.microedition.io e MIDP1.0: javax.microedition.io GENERIC CONNECTION FRAMEWORK
MIDP1.0: javax.microedtion.midlet
MIDP1.0: javax.microedition.lcdui
javax.microedition.rms
Arquitetura da Aplicação M-Commerce em J2EE [Gupta and Mayank, 2001]
Arquitetura da Aplicação Restaurante usando Dispositivo Móvel Dispositivo Móvel Gateway/ Servidor Web Servidor Dados
Java e a Computação Móvel: Estado da Arte Muita gente desenvolvendo soluções que dão lucro Modelo Asiático/Americanode consumo já bem desenvolvido Oportunidades no Brasil
Parte 6: Software em Java para plataformas de televisão digital interativa
Breve Introdução à Televisão Digital Interativa
Televisão Interativa Apresentação de menus e seleções de links em um aparelho de tv Associada ao conteúdo apresentado Que pode estar interagindo com o broadcaster
Televisão Digital Padrão para codificação, transmissão, modulação, difusão e recepção digital de programas televisivos TV Digital Terrestre Satélite Cabo
Substituição Analógica- >Digital Arquivos -> Sistemas de Arquivos LP -> CD Telefone Analógico -> Digital Celular Analógico -> Digital Televisão Analógica -> Digital
Ondas de Impacto na Transformação Analógica->Digital 1a Substituição de Equipamentos de Estúdio / Laboratório 2a Padrão Uniforme de Distribuição e Transmissão 3a Novos Modelos de Negócios
Aplicações em TVDI Televisão Digital de Alta Definição Democracia Eletrônica Guias de Programação Eletrônica (EPG) Pay-Per-View Personalização Personal Video Recorder Vídeo sob Demanda com Inscrição Propaganda Focalizada T-Commerce Jogos baseados na TV Vídeo sob Demanda Walled Garden BroadBand Data Transfer Rede Doméstica Segurança Doméstica
Arquitetura de Alto Nível de um Sistema de TV
Arquitetura Atual de Sistemas de TV
Arquitetura de Sistemas de TV Digital
Impactos da TVD Sobre o Estúdio Câmera com maior resolução Codificador MPEG-2 Streams de A/V armazenáveis em DVD Ilha de Edição não Linear distribuição dos programas através de rede de computadores
Impactos da TVD Sobre a Central de Produções Chamada de provedora de serviços Streamer transmite e recebe fluxos de transporte MPEG-2 (MPEG-2-TS) aumenta fortemente a capacidade de integração da Central com uma maior quantidade de estúdios, inclusive externos Reduz o uso de satélite Multiplexador Agrega programas de vários estúdios para distribuição em rede de tv
Impactos da TVD Impacto da TV Digital sobre a Rádio-Difusão Técnicas de compressão Tornam possível transmitir pelo menos 4 programas com qualidade superior Transmitir programas e dados adicionais Módulo Remultiplexador Responsável por fazer a multiplexação entre os vários TS gerados por uma ou mais centrais de produção Eliminar, substituir ou inserir programas e fluxos de dados que serão veiculados Inserir informações gerais sobre a programação dos vários canais veiculados Proteger programas cujo conteúdo é consumido através de pagamento (pay-per-view). Permite ao difusor operar uma maior quantidade de Centrais de Produção (Provedores de Serviços), o que aumenta a oferta de conteúdo e canais.
Impactos da TVD Sobre a Recepção Doméstica Necessita de um STB equipamento digital com capacidade de processamento de sinais de áudio e vídeo, e eventualmente capacidade de execução de programas Capaz de receber, demodular, decodificar e remodular o sinal televisivo Gera sinal de A/V compatível com televisores analógicos Interação Pseudo e Real
TV Digital Pseudo-Interativa Enhanced DTV
TV Digital Interativa
Arquitetura Genérica de um STB Interativo
Arquitetura do Carrossel
Uma questão fundamental para o sucesso de um sistema de televisão digital! Adoção e aceitação de padrões abertos para os vários componentes do sistema No Brasil Milhares de estações transmissoras e retransmissoras Milhões de aparelhos receptores E no Mundo
Modelo de Referência ITU, para TVD [2] MPEG-2 Padrões Mundiais
MPEG-2 Video, Audio e Systems [5] PS Arbitrary size packets Variable bitrate TS 188 bit Packets Fixed bitrate
MPEG-2 Systems TS - Transport Streams
Estrutura de um Transport Stream PID Packet Identification Code PCR Program Clock Reference
MPEG-2-TS-PSI PMT: Program Map Table Elementary stream 1 (Video) Elementary stream 2 (Audio1) Elementary stream 3 (Audio2)... Elementary Stream n-1 (Data i) Elementary Stream n (Data j) Elementary stream map (program_map_tabl e) PID1 PID2 PID3 PID(n-1) PIDn PID(n+1) Multiplexer MU Xed program transport bit stream
MPEG-2-TS-PSI PAT: Program Association Table Program transport stream 1 Program transport stream 2 Program transport stream 3... Program transport stream 4 Program transport stream 5 Multiplexer System level multiplex Program stream map (program_assocication_table) PID = 0
Remultiplexação Program transport stream 1 Program transport stream 2 Program transport stream 3... Program transport stream 4 Program transport stream 5 Program stream map (program_assocication_table) Program transport stream 1 Program transport stream 2 Program transport stream 3... Program transport stream 4 Program transport stream 5 PID = 0 Multiplexer Multiplexer Program transport stream 1 System level multiplex Program transport stream 2 Program transport stream 3 System level multiplex... Program transport stream 4 Program transport stream 5 Program stream map (program_assocication_table) PID = 0 Multiplexer Program transport stream 1 System level multiplex Program transport stream 2 Program transport stream 3... Program transport stream 4 Program transport stream 5 Program stream map (program_assocication_table) PID = 0 Multiplexer System level multiplex Program stream map (program_assocication_table) PID = 0 Program transport stream 1 Program transport stream 2 Elementary stream 1 (Video) Elementary stream 2 (Audio1) Elementary stream 3 (Audio2)... Elementary Stream n-1 (Data i) Elementary Stream n (Data j) Elementary stream map (program_map_table) PID1 PID2 PID3 PID(n-1) PIDn PID(n+1) Multiplexer Program transport stream 3... Program transport stream 4 MU Xed Program transport stream 5 program transport Program stream map bit stream (program_assocication_table) PID = 0 Multiplexer System level multiplex
Demultiplexação de Programas e Fluxos Elementares System bit stream PID = 0 program_association_table program_ map_pid Obtain program_map_pid (PID of bit stream containing the program_map_table) program_map_table Obtain PIDs for elementary bit streams Program Identity PID1 PID2.. PIDn... Elementary bit streams for a program Dump other transport packets
Blocos Fundamentais de um Middleware para TV Digital DAVIC - Digital Audio-Visual Council HAVi - Home Audio Video Interoperability Java TV Java Media Framework
DAVIC - Digital Audio-Visual Council[8] Padrão da indústria para interoperabilidade fim-a-fim de informações audiovisual digital interativa e por difusão.