Introdução Geral à Plataforma Java ou Desenvolvimento Java de Sistemas na Web, em Celulares e na TV Digital Interativa



Documentos relacionados
Natureza do Software e dos Sistemas

Desenvolvimento de Sistemas Móveis em Java com J2ME/MIDP. Jorge H. C. Fernandes

Uma Introdução ao. Computação Móvel (MAC5743/MAC330) Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro

As 10 Áreas da Engenharia de Software, Conforme o SWEBOK. Jorge H C Fernandes 2004

Teste de Software: Existe Isto? Jorge Fernandes Junho de 2004

GTTV - Grupo de Trabalho de Televisão Digital. Guido Lemos de Souza Filho LAViD - DI CCEN UFPB

Java. Marcio de Carvalho Victorino

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação para Dispositivos Móveis. Prof. Wallace Borges Cristo

Programação para Celular com Java

Tutorial J2ME Parte 3

Curso de Aprendizado Industrial Desenvolvedor WEB

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Java ME e suas principais tecnologias de conectividade. Gracieli Begia Mateus

Um pouco do Java. Prof. Eduardo

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Desenvolvimento de Sistemas para TV Digital. Prof. Fabrício J. Barth Faculdades Tancredo Neves

EMENTA DO CURSO. Tópicos:

FBV - Linguagem de Programação II. Um pouco sobre Java

Java Enterprise Edition. by Antonio Rodrigues Carvalho Neto

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

MAGREGISTER 1.0: GERADOR DE INTERFACES DE COLETAS DE DADOS PARA PDA S. Acadêmico: Gilson Chequeto Orientador: Adilson Vahldick

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Invocação de Métodos Remotos

Jorge Fernandes 1,2 Guido Lemos 3 Gledson Elias Silveira 3

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Linguagens de. Aula 02. Profa Cristiane Koehler

Sistemas Distribuídos

O protocolo HTTP. O que é o protocolo HTTP?

Java 2 Standard Edition Como criar classes e objetos

SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1

Padrão Arquitetura em Camadas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

2 Orientação a objetos na prática

JavaScript 2.0X X

A Linguagem Java. Alberto Costa Neto DComp - UFS

Manual de Operação Aplicativo ClickIt

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Programação Orientada a Objetos

Digifort Mobile Manual Version 1.0 Rev. A

Sobre o Professor Dr. Sylvio Barbon Junior

Linguagem de Programação Introdução a Linguagem Java

O Modelo DX sumário executivo

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

J2ME, Uma Platarfoma de programação para Dispositivos Móveis

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

UMA ABORDAGEM SOBRE J2ME

Orientação a Objetos

Introdução a Java. Hélder Nunes

Introdução à Linguagem Java

BSI UFRPE Prof. Gustavo Callou

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

insfcanceof new public switch transient while byte continue extends for int null

Internet e protocolos web. A Internet é uma rede descentralizada de recursos computacionais. Topologia tem de fornecer caminhos alternativos

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação de Computadores - I. Profª Beatriz Profº Israel

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas)

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

CURSO DE PROGRAMAÇÃO EM JAVA

UNIVERSIDADE FEDERAL DO PARANÁ

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

I N T R O D U Ç Ã O W A P desbloqueio,

Análise de Programação

Programação Básica em Arduino Aula 2

RUI ROSSI DOS SANTOS PROGRAMAÇÃO DE COMPUTADORES EM. Java

A INTERNET E A NOVA INFRA-ESTRUTURA DA TECNOLOGIA DE INFORMAÇÃO

Conexão Socket na MIDP

FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Aula 03-04: Modelos de Sistemas Distribuídos

AULA Uma linguagem de programação orientada a objetos

JPA: Persistência padronizada em Java

3 Classes e instanciação de objectos (em Java)

FileMaker Pro 13. Utilização de uma Conexão de Área de Trabalho Remota com o FileMaker Pro 13

O objetivo desta prática é ensinar como usar a máquina chamada computador visível ou vc0, um simulador de computador de von Neumann escrito em Java.

UFG - Instituto de Informática

Noções de. Microsoft SQL Server. Microsoft SQL Server

Especialização em Engenharia de Software - CEUT

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

VPAT (Voluntary Product Accessibility Template, Modelo de Acessibilidade de Produto) do eportfolio da Desire2Learn Maio de 2013 Conteúdo

Desenvolvimento de Aplicações Locais na Plataforma Microsoft

Programação Orientada a Objetos

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

Módulo 06 Desenho de Classes

Transcrição:

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.