UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSÕES
URI - CAMPUS DE SANTO ÂNGELO
DEPARTAMENTO DE ENGENHARIAS E CIÊNCIA DA COMPUTAÇÃO
CURSO DE CIÊNCIA DA COMPUTAÇÃO
VINÍCIUS MARAN
UMA API GRÁFICA DE AUXÍLIO AO
DESENVOLVIMENTO DE APLICAÇÕES
INTERATIVAS PARA A TELEVISÃO
DIGITAL BASEADA EM PRINCÍPIOS DE
USABILIDADE
Trabalho de Conclusão do Curso de Ciência da
Computação
Prof. M. Sc. Denílson Rodrigues da Silva
Santo Ângelo, 12 de dezembro de 2008
UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSÕES – URI
Campus de Santo Ângelo
Reitor: Bruno Ademar Mentges
Pró-Reitora de Ensino: Helena Confortin
Pró-Reitor de Ensino, Extensão e Pós-Graduação: Sandro Rogério Vargas Ustra
Pró-Reitor de Administração: Clóvis Quadros Hempel
Diretor Geral: Gilberto Pacheco
Diretora Acadêmica: Dinalva Agissé de Souza
Diretora Administrativa: Rosane Maria Seibert
Coordenador do Departamento de Engenharias e Ciência da Computação: Paulo Betencourt
Coordenadora do curso de Ciência da Computação: Cristina Paludo Santos
AGRADECIMENTOS
À Deus que me deu a vida e a capacidade para estar aqui hoje.
Aos meus pais, Paulino e Leda, que sempre me estimularam durante todas as minhas
fases de vida. Vocês sempre foram a base de tudo para mim.
A minha irmã Ana Paula, pelo companheirismo e paciência.
A minha namorada Francine, pela compreensão, disponibilidade e pelo imenso
carinho dedicado.
Ao meu orientador Denílson, que com paciência muito ajudou e incentivou para
chegar com êxito a este momento.
SUMÁRIO
AGRADECIMENTOS ............................................................................................................................... 3
RESUMO .................................................................................................................................................... 6
ABSTRACT ................................................................................................................................................ 7
LISTA DE ABREVIAÇÕES ..................................................................................................................... 8
LISTA DE FIGURAS ................................................................................................................................ 9
LISTA DE TABELAS .............................................................................................................................. 10
1
INTRODUÇÃO ............................................................................................................................... 11
2
TELEVISÃO DIGITAL ................................................................................................................. 13
2.1 PADRÕES .......................................................................................................................................... 14
2.2 MIDDLEWARES ................................................................................................................................. 16
2.2.1
Middleware MHP ............................................................................................................... 17
2.2.2
Middleware DASE .............................................................................................................. 19
2.2.3
Middleware ARIB ............................................................................................................... 19
2.2.4
Middleware GINGA ............................................................................................................ 20
3
LINGUAGEM NCL........................................................................................................................ 23
3.1 SCRIPTS LUA ................................................................................................................................... 24
4
A LINGUAGEM JAVA E O AMBIENTE DE TELEVISÃO .................................................... 26
4.1 API JAVATV .................................................................................................................................... 27
4.2 API HAVI ........................................................................................................................................ 29
4.2.1
Componentes Gráficos ....................................................................................................... 31
4.2.2
Manipulação de Eventos .................................................................................................... 33
5
USABILIDADE NA TV DIGITAL INTERATIVA ..................................................................... 35
5.1 USABILIDADE ................................................................................................................................... 36
5.2 PRINCÍPIOS DE USABILIDADE PARA O AMBIENTE DE TV DIGITAL INTERATIVA ................................ 36
6
PROJETO E IMPLEMENTAÇÃO DA API ................................................................................ 40
6.1 DEFINIÇÕES ...................................................................................................................................... 40
6.2 DOUBLE BUFFERING ......................................................................................................................... 41
6.3 EVENTOS....................................................................................................................................... 42
6.3.1 Interface MActive ..................................................................................................................... 42
6.3.2 Classe MControllerEvent......................................................................................................... 43
6.4 PACOTES ....................................................................................................................................... 44
6.4.1 Pacote Maran.Component ....................................................................................................... 44
6.4.2 Pacote Maran.Event ................................................................................................................ 45
6.5 COMPONENTES ............................................................................................................................. 45
6.5.1 MLabel ..................................................................................................................................... 45
6.5.2 MImageItem ............................................................................................................................. 46
6.5.3 MAnimation ............................................................................................................................. 47
6.5.4 MSlider..................................................................................................................................... 48
6.5.5 MPanel ..................................................................................................................................... 49
6.5.6 MColoredPanel ........................................................................................................................ 51
6.5.7 MColoredControlButton .......................................................................................................... 52
6.5.8 MImageButton.......................................................................................................................... 52
6.5.9 MTextButton............................................................................................................................. 53
6.5.10 MAnimationButton ................................................................................................................. 54
6.5.11 MImageRender....................................................................................................................... 54
6.5.12 MDateChoice ......................................................................................................................... 55
6.5.13 MVirtualKeyboard ................................................................................................................. 55
6.5.14 MTextField ............................................................................................................................. 56
6.6 INTEGRAÇÃO DE PRINCÍPIOS DE USABILIDADE .............................................................................. 57
7
ESTUDO DE CASO ....................................................................................................................... 59
7.1
7.2
8
TESTES .......................................................................................................................................... 61
RESULTADOS ................................................................................................................................ 62
CONCLUSÃO ................................................................................................................................. 64
8.1 SUGESTÕES PARA TRABALHOS FUTUROS .......................................................................................... 65
9
REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................................... 66
RESUMO
O início das atividades de transmissão da televisão digital de padrão aberto no Brasil
tem sido assunto constantemente discutido em fóruns pelo país inteiro. Isto se deve ao
fato de que é inegável que a televisão de um modo geral tem papel fundamental na
socialização e na cultura do povo brasileiro.
Atualmente, há padrões definidos para o ambiente de televisão digital, onde o sinal
já está sendo transmitido. No Brasil os padrões não estão completamente definidos.
Apesar disso, o desenvolvimento de componentes e aplicações baseadas para o
ambiente televisivo tem aumentado consideravelmente nos últimos meses. Porém
mesmo existindo padrões e frameworks de desenvolvimento, novos frameworks
precisam ser criados para atender as necessidades dos desenvolvedores. Este trabalho
propõe a construção de um framework de desenvolvimento para a linguagem Java no
ambiente de televisão digital.
A construção deste framework foi baseada em características que não são
encontradas nos frameworks de desenvolvimento atuais e em alguns princípios de
usabilidade específicos para o ambiente de televisão digital interativa.
Desta forma, a construção do framework trouxe como resultado um conjunto de
componentes leves, de fácil utilização e que oferecem recursos para que os princípios de
usabilidade estudados neste trabalho sejam utilizados na construção de interfaces para
aplicativos específicos para o ambiente de televisão digital.
Palavras chave: API, framework, televisão digital, interatividade, usabilidade.
ABSTRACT
The beginning of activities for transmission of digital television in Brazil to open
standard has been constantly discussed topic in the forums for the whole country. This
is due to the fact that it is undeniable that television in general has key role in
socialization and culture of the Brazilian people.
Currently, there are standards for digital television environment, where the signal is
being transmitted. In Brazil the standards are not fully defined.
Nevertheless, the development of components and applications based on the
environment television has grown considerably in recent months. But even if there are
patterns and frameworks for development, new frameworks must be created to meet the
needs of developers. This paper proposes the creation of a framework for development
of the Java language in the environment of digital television.
The construction of this framework is based on characteristics that are not found in
the frameworks of development in current and principles of usability for the specific
environment of interactive digital television.
Thus, the construction of the framework as a result has brought a set of lightweight
components, easy to use and providing resources to the principles of usability included
in this study are used in the construction of interfaces for applications specific to the
environment of digital television.
Key words: API, framework, digital television, interactivity, usability.
8
LISTA DE ABREVIAÇÕES
API – Application Programming Interface
ATSC – American Television Standards Committee
AWT – Abstract Window Toolkit
CDC – Connected Device Configuration
CLDC - Connected Limited Device Configuration
DAVIC – Digital Audio Video Council
DASE – Digital TV Application Software Environment
DVB – Digital Video Broadcasting.
DVB-C – Digital Video Broadcasting standard for cable delivery systems.
DVB-S - Digital Video Broadcasting standard for satellite delivery systems.
DVB-T – Digital Video Broadcasting standard for terrestrial delivery systems.
GEM – Globally Executable MHP
HAVi – Home Audio/Video Interoperability
HDTV – High Definition Television.
IDE – Integrated Development Environment
ISDB – Integrated Services Digital Broadcasting.
ISDTV-T – International Standard for Digital Television Terrestrial
JAR – Java Archive
JDK – Java Development Kit
JMF – Java Media Framework
JVM – Java Virtual Machine
MHP – Multimedia Home Platform
OCAP – OpenCable Application Platform
PC – Personal Computer
SBTVD – Sistema brasileiro de Televisão Digital
9
LISTA DE FIGURAS
Figura 2.1 – Arquitetura de um sistema de IDTV. [SUF04]
Figura 2.2 – Distribuição mundial dos padrões de middlewares existentes. [ASS08]
Figura 2.3 – Arquitetura do middleware para IDTV. [SOU03]
Figura 2.4 – MHP Profiles. [MHP08]
Figura 2.5 – Arquitetura do middleware Ginga. [ABN07]
Figura 3.1 - Modelo conceitual NCM básico. [DIN08]
Figura 3.2 – Estrutura básica de um documento NCL. [DIN08]
Figura 4.1 – Divisões de perfis, configurações e Máquinas Virtuais da plataforma
J2ME.
Figura 4.2 – Ciclo de vida de um xlet. [OLI05]
Figura 4.3 – Organização de layers utilizada pela API HAVi. [EDW03]
Figura 4.4 – Comparação de hierarquias utilizando a interface HMatte. [HAV01]
Figura 6.1 – Componentes base para a construção da API.
Figura 6.2 – Diagrama de estados possíveis de um componente que implementa a
interface MActive.
Figura 6.3 – Diagrama de classes do pacote Maran.Component.
Figura 6.4 – Diagrama de classes do pacote Maran.Event.
Figura 6.5 – Exemplo de uso da classe MLabel.
Figura 6.6 – Exemplo do uso da classe MImageItem.
Figura 6.7 – Exemplo de utilização da classe MAnimation.
Figura 6.8 – Exemplo de utilização do componente MSlider com a forma de desenho
padrão.
Figura 6.9 – Exemplo de utilização do componente MSlider com a forma de desenho
associado a imagens.
Figura 6.10 – Construção e resultado de um MPanel contendo alguns componentes
desta API.
Figura 6.11 – Construção e resultado de um MColoredPanel contendo quatro MPanels.
Figura 6.12 – Construção e resultado de um componente MColoredControlButton.
Figura 6.13 – Construção e resultado de um componente MImageButton.
Figura 6.14 – Construção e resultado de um componente MTextButton.
Figura 6.15 – Construção e resultado de um componente MAnimationButton.
Figura 6.16 – Construção e resultado de um componente MDateChoice.
Figura 6.17 – Construção e resultado de um componente MVirtualKeyboard.
Figura 6.18 – Construção e resultado de um componente MTextField.
Figura 7.1 – Interface do software xletview.
Figura 7.2 – Emulação dos componentes no software xletview.
Figura 7.3 – Resultados dos testes de ocupação de memória dos componentes
construídos.
Figura 7.4 – Testes de ocupação de memória dos componentes da API AWT.
10
LISTA DE TABELAS
Tabela 2.1 – Middlewares atuais. [DIN08]
Tabela 2.2 – Divisões do middleware DASE. [OLI05]
Tabela 2.3 – Relação de versões do MHP e dos anos de criação destas versões.
Tabela 2.4 – Divisão da especificação do ARIB STD-B24. [OLI05]
Tabela 4.1 – Classes do pacote Java.awt disponíveis para o framework HAVi. [HAV01]
Tabela 4.2 – HUI Events. [HAV01]
Tabela 5.1 – Televisão Convencional X Computador. [PIC06]
Tabela 6.1 – Constantes de controle de entrada de dados definidas na interface MActive.
Tabela 6.2 – Nomes de constantes e valores de teclas da classe MControllerEvent.
Tabela 6.3 – Relação entre princípios de usabilidade e os componentes construídos.
Tabela 7.1 – Comparação de tamanhos de pacotes.
11
1 INTRODUÇÃO
A televisão digital já é uma realidade que se faz presente na maioria dos países
desenvolvidos, porém somente agora os padrões de transmissão e programação
começam a ser consolidados no Brasil. Além disso, a televisão digital começa a criar
um novo mercado de aplicações e junto com o início das atividades relacionadas à
televisão digital, alguns problemas acabam surgindo em decorrência da definição dos
padrões que serão adotados para a programação de aplicações interativas.
Um destes problemas é que atualmente no cenário mundial, apesar de termos a
plataforma Java implementada por todos os padrões de middlewares, não temos um
padrão definido de APIs (Application Programming Interface) de auxílio à
programação, seja na área de comunicação ou na área de componentes gráficos para
aplicativos feitos especificamente para o ambiente de televisão digital interativa.
Atualmente o padrão GEM (Globally Executable MHP) [DVB07] define um padrão de
middleware mundial, porém este não é adotado por todos os países que já
implementaram a televisão digital.
Para a construção de interfaces gráficas, a única API implementada por todos os
padrões de middlewares que suportam a linguagem Java é a API AWT (Abstract
Window Toolkit), que faz parte de um conjunto de APIs chamado JavaTV, porém, a
AWT foi construída para ser utilizada no ambiente desktop e não leva em consideração o
novo paradigma de programação que é utilizado em aplicações feitas para o ambiente de
televisão digital interativa.
Portanto, uma nova API de desenvolvimento de componentes gráficos foi criada a
partir do estudo das soluções existentes atualmente, dos princípios de usabilidade de
uma forma geral, e dos princípios que podem ser aplicados somente ao ambiente de
televisão digital interativa.
Além disso, outra grande contribuição deste trabalho é trazer as discussões sobre o
ambiente de televisão digital para dentro do ambiente acadêmico e que desta forma se
mantém atualizado sobre os padrões brasileiros, que já estão sendo discutidos em outras
universidades pelo Brasil afora.
Este trabalho propõe a implementação de uma API que baseada na API AWT,
consiga garantir a compatibilidade com os padrões de middlewares atuais e que
implemente soluções que contemplem os princípios de usabilidade desejáveis para o
ambiente de televisão digital interativa.
Este documento está organizado da seguinte maneira: no próximo capítulo são
apresentados os conceitos básicos sobre um sistema de televisão digital, os padrões que
já estão definidos para o uso e construção de aplicativos para este ambiente e as
principais inovações oferecidas por cada um destes padrões. O capítulo três descreve
12
um breve estudo feito sobre a linguagem declarativa NCL, que se trata de uma inovação
implementada pelo middleware brasileiro Ginga, e que oferece a integração de
aplicações declarativas e aplicações procedurais construídas na linguagem LUA ou na
linguagem Java. O capítulo quatro apresenta os estudos realizados sobre a linguagem
Java e o seu uso no ambiente de televisão digital interativa, assim como os frameworks
criados especialmente para este ambiente. O capítulo cinco apresenta um estudo
específico sobre princípios de usabilidade aplicáveis ao ambiente de televisão digital
interativa e de que forma estes princípios poderiam ajudar no resultado da utilização dos
componentes gráficos construídos neste trabalho. O capítulo seis descreve as definições
e etapas de construção da API proposta, além de descrever o uso e os resultados de uso
dos componentes gráficos construídos. O capítulo sete por sua vez, descreve um estudo
de caso criado para avaliar os componentes criados.
13
2 TELEVISÃO DIGITAL
A televisão é uma das principais fontes de informação existentes atualmente,
oferecendo entretenimento e cultura a seus utilizadores. Após a transmissão em cores, a
televisão está sofrendo mais uma nova grande mudança com a digitalização do sinal e
conseqüentemente a inclusão da capacidade de interação com o usuário em tempo real.
Apesar da produção e armazenamento das informações já serem digitais, a transmissão
ainda se dá via sinal analógico na televisão aberta.
A digitalização do sinal da televisão traz muitos benefícios ao usuário final, entre
eles estão:
•
Possibilidade de transmissão de imagens em alta definição com maior imunidade
a ruídos e distorções.
•
Possibilidade de transmissão de áudio de melhor qualidade, com menor ruído e
com utilização de mais de dois canais.
•
Possibilidade de transmissão de programas interativos junto com as imagens e o
som dos programas, fazendo com que a pessoa que assiste à televisão deixe de
ser apenas um expectador e se torne um usuário, que consegue interagir com a
programação da televisão.
•
Possibilidade de transmissão de vários programas por um único canal.
•
Possibilidade de recepção de sinais de televisão em dispositivos móveis
(celulares, pdas, etc).[MON05]
Porém a característica mais interessante da TV digital combinada com um canal de
retorno é a possibilidade de criação de serviços interativos como, por exemplo, vídeo
sob demanda, pay-per-view, exibir programas esportivos em vários ângulos, jogos, chat,
além da possibilidade de uso da televisão na educação à distância. [TEI06]
“A TV Interativa está causando uma revolução no mundo todo por causa do
seu poder de feedback. A emissora, que antes contava apenas com estimativas de
audiência (como a que é feita pelo IBOPE no Brasil), agora possui dados estatísticos
precisos e reais sobre seus produtos e sobre a preferência de seus usuários que
puderam se segmentar para produtos audiovisuais um pouco mais específicos e ligados
ao seu interesse.” [TEI06]
Esta nova forma de interatividade tem grande importância para a sociedade como
um todo, principalmente pelo grande número de pessoas que possuem televisão em suas
residências. Em 2004 a televisão existia em 91,4% dos domicílios e o rádio em 88,0%,
enquanto o microcomputador estava disponível em 18,6% das residências. [IBG05]
14
Além de oferecer interatividade, a televisão digital oferece uma nova forma de
transmissão de sinal, o sinal digital pode ser emitido via satélite, via cabo ou broadcast
terrestre, nas residências o sinal é decodificado no set-top-box1, que são aparelhos
ligados ao televisor. Em cada set-top-box um middleware faz o controle das operações
de entrada e saída, além de oferecer capacidade de processamento para aplicações que
são recebidas através do sinal que é transmitido junto com o vídeo e o áudio dos
programas de televisão. Além da possibilidade de recepção de sinais televisivos em
residências com o uso de antenas e set-top-boxes ligados a televisores, o conteúdo da
televisão digital pode ser visto em carros, trens e telefones celulares. Com isso a
complexidade dos programas interativos deve ser tratada como fator fundamental no
sucesso do programa, já que a aplicação não será executada necessariamente em um settop-box. [TEI06]
Esta nova forma de transmissão tem uma arquitetura básica, que é definida pelo
termo “sistema de televisão digital”, que nada mais é que um conjunto de definições
criadas para servirem como referência, seja para a construção de aparelhos eletrônicos,
construção de novas linguagens para a televisão digital ou padronização de codificações
de vídeo ou áudio. Como podemos observar na Figura 2.1, a arquitetura de um sistema
de televisão digital é composta de cinco camadas, são elas: Transmissão, transporte,
compressão, middleware e aplicativos. [SUF04]
Figura 2.1: Arquitetura de um sistema de IDTV. [SUF04]
Após a definição das camadas básicas de um sistema de televisão digital, padrões
foram criados pelos consórcios formados pelos governos e por empresas do ramo de
televisão.
2.1 Padrões
Atualmente existem três padrões mundiais de televisão digital, o padrão europeu, o
padrão americano e o padrão japonês. Além destes três padrões, o Brasil optou pela
criação de um novo padrão, que utiliza como base para transmissão o padrão japonês,
mas a codificação de vídeo e o middleware usados são diferentes de todos os outros
padrões, assim o padrão brasileiro se tornou um padrão “híbrido”, unindo características
1
Set-top-box – Conversor
15
de transmissão do padrão japonês com um middleware brasileiro e com outros padrões
de codificação de vídeo e de áudio. [OLI05]
O padrão europeu é denominado como DVB (Digital Video Broadcasting)
[MHP08], o norte-americano é denominado como ATSC (Advanced Television Systems
Committee) [ATS08], o padrão japonês é denominado como ISDB (Integrated Services
Digital Broadcasting) [DIB08], já o padrão “brasileiro” é denominado como ISDTV-T
(International System for Digital TV). Cada um destes padrões define como será feita a
codificação de vídeo e áudio, além de padrões para a transmissão de dados e um
middleware específico, que rodará nos set-top-boxes compatíveis com o seu padrão.
[OLI05]
Na figura 2.2, podemos ver alguns dos padrões definidos mundialmente para os
sistemas de televisão digital.
Figura 2.2: Distribuição mundial dos padrões de middlewares existentes. [ASS08]
O padrão DVB é utilizado em países da Europa, áfrica, Oceania e Ásia. Ele define
como padrão de transmissão via satélite o padrão DVB-S, como padrão para transmissão
via terrestre o padrão DVB-T e via cabo o padrão DVB-C. Assim como o ISDB, o
ISDTV-T definiu três padrões de transmissão via terrestre, satélite e cabo. Já o ATSC
possui apenas a transmissão via broadcast terrestre e via cabo. Os padrões DVB, ISDB e
ATSC utilizam o MPEG-2 para codificação de vídeo, já o ISDTV-T utiliza o MPEG-4
como padrão para codificação de vídeo. [DIN08]
Dentro do padrão DVB existe o middleware MHP (Multimedia Home Platform)
[MHP08], criado pelo consórcio DVB e que define um conjunto de tecnologias para
aplicações interativas digitais, este middleware visa adaptar a Internet à televisão
digital, provendo assim, conteúdo interativo digital no terminal do usuário. Possui dois
tipos de aplicações: DVB-HTML e DVB-J, sendo a última a mais popular. Esta é escrita
em Java usando um conjunto de APIs definidas pelo MHP. [DIN08]
O padrão ATSC é utilizado nos Estados Unidos, Canadá, México e na Coréia do Sul.
Ele definiu o DASE como middleware do padrão norte americano. As aplicações
desenvolvidas tanto para o MHP quanto para o DASE são compatíveis com a tecnologia
Java. [DIN08]
16
O Padrão japonês ISDB é utilizado apenas no Japão, e o padrão de transmissão é
utilizado no Brasil, este padrão define o ARIB como middleware e tem como
característica principal oferecer melhor distribuição do sinal, porém exigindo melhores
condições de infra-estrutura que os outros padrões mundiais. [DIN08]
Já o padrão brasileiro IDSTV-T utiliza o Ginga como padrão de middleware, o Ginga
é dividido em duas plataformas principais: Ginga-NCL e Ginga-J. [DIN08]
Ginga-NCL é o framework utilizado para a execução de aplicativos NCL e
aplicativos escritos na linguagem LUA. Já o Ginga-J é o framework responsável pela
implementação da máquina virtual Java e das APIs que possibilitarão a construção e
execução de xlets.
O middleware é uma das partes mais importantes em um ambiente de televisão
digital, pois é ele quem define o conjunto de tecnologias que serão implementadas e
como estas tecnologias serão empregadas.
2.2 Middlewares
O middleware é uma das camadas mais importantes no contexto de um sistema de
televisão digital. De uma forma genérica, middlewares são definidos como uma camada
de software que liga dois sistemas separados, um deles sendo software e o outro sendo
hardware. No caso da televisão digital, ele liga o hardware do set-top-box e o sistema
operacional do set-top-box às aplicações. [SOU03]
Além de exercer a função de ligar dois sistemas distintos, ele oferece APIs de
desenvolvimento para auxiliar os desenvolvedores na construção de aplicações que
utilizem os recursos que a televisão digital propicia, por exemplo, manipulação de
gráficos, faixas de áudio e vídeo, acesso ao canal de retorno, construção de interfaces,
acesso as informações do serviço, entre outros. A figura 2.3 demonstra como a
arquitetura de um middleware para IDTV é dividida e como os componentes são
organizados.
Figura 2.3: Arquitetura do middleware para IDTV [SOU03]
17
Os padrões de middlewares foram definidos por consórcios formados por empresas
que trabalham no meio televisivo e alguns foram desenvolvidos em conjunto com o
governo de seus países. Na Tabela 2.1 podemos ver quais linguagens de programação
são suportadas pelos padrões de middlewares existentes até o momento e quais
frameworks são compatíveis com estes padrões de middlewares.
Além disso, a tabela 2.1 apresenta quais normas estão relacionadas com os padrões
estabelecidos para programação nos middlewares e quais linguagens estas normas
contemplam.
Tabela 2.1: Middlewares atuais [DIN08]
Os ambientes declarativos geralmente são utilizados em aplicações mais simples e
que não precisam de muitos recursos, ocupam menos memória que os aplicativos
procedurais.
Em contrapartida, o ambiente procedural é implementado a fim de proporcionar
mais recursos se comparado ao ambiente declarativo. As aplicações procedurais
precisam de mais memória para serem executadas se comparadas as aplicações
declarativas, além disso, as aplicações procedurais são usadas em programas maiores e
mais robustos, que além de utilizarem componentes gráficos, precisam utilizar
esquemas de segurança de dados ou manipulação de dados.
2.2.1 Middleware MHP
O middleware MHP surgiu da necessidade de criação de um padrão europeu de
middleware pelo consórcio DVB para que uma plataforma de middleware fosse
compatível com as diversas marcas de set-top-boxes que já estavam disponíveis no
mercado. A sua especificação teve início no ano de 1997 e em junho de 2000 a
especificação da plataforma deu origem ao middleware MHP, nos anos seguintes foram
lançadas novas especificações para este middleware, e o seu nome foi revisado para
DVB-MHP. A tabela 3 demonstra a relação de versões do middleware MHP e o ano de
criação das versões. [OLI05]
Na tabela 2.3 encontramos a relação entre as versões do middleware MHP e seus
respectivos anos de criação.
18
Versão
1.0
1.1
1.1.1
1.1.2
Ano
2000
2001
2003
2005
Tabela 2.3: Relação de versões do MHP e dos anos de criação destas versões.
A principal característica do MHP é a definição de uma interface genérica entre as
aplicações interativas e o terminal, deste modo, o programador não precisa se preocupar
com detalhes específicos de hardware ou em qual marca de set-top-box a sua aplicação
irá rodar. [DVB07a]
“O MHP introduziu o conceito de Profile para ajudar na implementação das
padronizações. Um profile consulta uma área da aplicação e, conseqüentemente, as
potencialidades do set-top Box em operar com os diferentes tipos de funcionalidades
habilitadas pelo DVB”[OLI05]
Como podemos ver na figura 2.4, o DVB-MHP define três profiles distintos de
acordo com a capacidade dos dispositivos.
Figura 2.4: MHP Profiles [MHP08]
O perfil Enhanced Broadcast Profile foi definido já na primeira especificação do
MHP, ele é um profile básico e com recursos limitados, como um canal de retorno
limitado e não oferece suporte para conexão IP.
O perfil Interactive TV Profile também foi definido desde a primeira versão da
especificação do MHP. Este perfil é mais avançado que o perfil anterior em matéria de
desempenho, pois apresenta no terminal um canal de interação mais significativo,
além de que neste perfil, há possibilidade de realização de downloads, o que não é
possível com o perfil Enhanced Broadcast Profile.
O perfil Internet Access Profile foi definido na especificação MHP 1.1. É o profile
mais utilizado atualmente na especificação MHP, pois foi construído pensando em
19
execução em hardware com poder de processamento e memória maior do que os que
eram usados com os primeiros profiles definidos na especificação MHP. Ele oferece
suporte às aplicações com acesso a conteúdos da internet. Além disso, esse profile
contém o elemento DVB-HTML, no qual a informação é apresentada através de
conteúdo hipermídia.
O MHP é capaz de executar aplicações procedurais através do padrão DVB-J, que
define um conjunto de APIs para a construção de aplicativos, entre estas APIs estão a
JavaTV (desenvolvida pela Sun Microsystems), a API HAVi, criada por um consórcio de
marcas ligadas a televisão e que oferece componentes para a criação de interfaces com o
usuário e a API DAVIC, criada para especificar um padrão para interoperabilidade
fim-a-fim de informações audiovisual digital interativa e por difusão, além de uma
comunicação multimídia. [OLI05]
2.2.2 Middleware DASE
Nos países da América do norte temos como padrão de middleware o DASE, que foi
definido e implementado pelo consórcio ATSC no ano de 1982. O middleware DASE é
dividido em oito partes, como é mostrado na tabela 2.2. [OLI05]
Tabela 2.2: Divisões do middleware DASE [OLI05]
O middleware DASE é capaz de executar aplicações procedurais escritas na
linguagem Java e que façam uso da API JavaTV, além disso, o middleware DASE
oferece suporte a aplicações declarativas através de uma versão estendida de HTML e da
linguagem Java Script. Apesar de o DASE ter um modelo semelhante ao MHP, as duas
plataformas não são compatíveis, ou seja, os serviços desenvolvidos para uma
plataforma não serão compatíveis com a outra plataforma. [OLI05]
2.2.3 Middleware ARIB
No ano de 1999, o grupo japonês DiBEG promoveu o padrão japonês para a
televisão digital japonesa transmitida de forma terrestre, este padrão foi denominado
20
ISDB-T, alguns anos mais tarde, foram feitas especificações para mais dois padrões, o
ISDB-S e o ISDB-C. [OLI05]
Dentro da especificação ISDB, foi definido o ARIB como middleware, ele adota um
modelo de aplicação que permite a programação de conteúdo e aplicações.
O middleware ARIB é dividido em duas especificações:
•
ARIB STD-B24: É a principal especificação estabelecida pelo ARIB e é a mais
utilizada nos set-top-boxes, ela é organizada em três volumes, como podemos
ver na tabela 2.4, que descreve quais são os volumes existentes nesta
especificação e qual é o título que contempla cada volume:
Tabela 2.4: Divisão da especificação do ARIB STD-B24 [OLI05]
O primeiro volume trata das especificações de codificação de áudio e vídeo,
além disso, trata das especificações de transmissão.
O segundo volume e o terceiro volume tratam das especificações de uma
linguagem BML2, que é baseada na linguagem XML, mas com componentes
específicos para o ambiente de televisão digital interativa. Esta linguagem é
definida pelos componentes descritos pelo W3C: XHTML, CSS, DOM e
ECMAScript.
•
ARIB STD-B23: Especificação baseada no DVB-MHP, é considerada uma
especificação opcional, que oferece compatibilidade entre os padrões MHP e
DASE, deste modo compartilhando uma mesma plataforma “global”, deste modo
em conjunto com o consórcio DVB, foi criado o padrão GEM. [DVB07]
O padrão GEM foi criado com intuito de permitir que as organizações pudessem
definir especificações baseadas no MHP junto com o consórcio DVB e desta
forma oferecerem serviços compatíveis entre plataformas diferentes, desde que
estas utilizem o middleware MHP, que foi definido como middleware padrão
para a especificação GEM. [DVB07]
2.2.4 Middleware GINGA
O Brasil apresenta grandes diferenças sócio-econômicas em relação aos países
que já propuseram seus próprios sistemas de televisão digital, por isso a adoção integral
de qualquer um dos três padrões existentes não atende plenamente às condições
particulares e prioridades do país. Assim, o Brasil está desenvolvendo o seu sistema,
2
BML (Broadcast Markup Language) – Linguagem baseada na linguagem XML, foi desenvolvida pelo
ARIB no ano de 1999 e é utilizada no framework de desenvolvimento de aplicações declarativas no
padrão ARIB STD B-24. [ARI99]
21
modelo e padrão de TV digital no serviço de radiodifusão (televisão aberta),
denominado de Sistema Brasileiro de Televisão Digital (SBTVD). [DIN08]
O SBTVD envolve diversos setores do País, como universidades, empresas de
tecnologia e o próprio governo, que estão trabalhando para criar um modelo que possa
suprir os requisitos tecnológicos, mercadológicos, econômicos e sociais do Brasil.
[OLI05]
Entre as diversas atividades exercidas por este consórcio, estão a definição de
padrões e a organização de atividades relacionadas com televisão digital no Brasil.
Os padrões para a transmissão da televisão digital já foram definidos pelo
governo federal e pelo SBTVD. Apesar de ter adotado o padrão japonês de transmissão
(ISDB), os padrões de codificação de vídeo e o middleware usado são características
diferenciadas do padrão brasileiro de middleware em comparação com outros padrões
mundiais. [DIN08]
Como middleware, o Brasil definiu o Ginga, resultado de uma parceria entre o
governo federal com a universidade PUC do Rio de Janeiro [PUC08] e a Universidade
federal da Paraíba [UFP08]. A escolha destas universidades como centros de
desenvolvimento do middleware brasileiro se deve ao fato de que estas universidades
têm apresentado projetos focados na proposta de implementação de middlewares.
Como podemos ver na figura 2.5, o Ginga é dividido basicamente em duas
partes, a primeira é chamada de Ginga-NCL, já a segunda é conhecida como Ginga-J.
Essas duas partes são separadas pelo seu tipo de programação. O Ginga-NCL trata da
parte de linguagens declarativas que podem ser executadas no middleware, e o Ginga-J
controla a parte de programas procedurais que podem ser executados no middleware.
[ABN07]
Figura 2.5: Arquitetura do middleware Ginga [ABN07]
“Nas linguagens declarativas, o programador fornece apenas o conjunto das
tarefas a serem realizadas, não estando preocupado com os detalhes de como o
executor da linguagem (interpretador, compilador ou a própria máquina real ou virtual
de execução) realmente implementará essas tarefas. Em outras palavras, a linguagem
enfatiza a declaração descritiva de um problema ao invés de sua decomposição em
implementações algorítmicas, não necessitando, em geral, de tantas linhas de código
para definir uma certa tarefa.” [ROG06]
“Numa programação procedural deve-se informar ao computador cada passo
a ser executado. Pode-se afirmar que, em linguagens procedurais, o programador
22
possui um maior controle do código, sendo capaz de estabelecer todo o fluxo de
controle e execução de seu programa. Entretanto, para isso, ele deve ser bem
qualificado e conhecer bem os recursos de implementação.” [ROG06]
O Ginga-NCL é um framework que define um ambiente de apresentação para
aplicações declarativas escritas em NCL. NCL é uma linguagem de programação
declarativa, que foi derivada da linguagem XML e que oferece facilidades para a
especificação de aspectos de interatividade, além disso, o Ginga-NCL implementa uma
máquina virtual capaz de executar programas feitos na linguagem LUA. [SOU03]
O outro framework presente na especificação Ginga é chamado de Ginga-J e é
responsável pela implementação da máquina virtual que é capaz de executar programas
criados em Java, ao contrário do Ginga-NCL, o Ginga-J ainda não está totalmente
implementado devido a questões de royalties de APIs. [SOU03]
Além de implementar codificação de vídeo mais avançada que os outros
middlewares (o Ginga utiliza o padrão de codificação MPEG-4 enquanto os outros
utilizam MPEG-2), outra funcionalidade que não é implementada por outros
middlewares é a capacidade de carregar um programa de outra linguagem em tempo de
execução. Esta funcionalidade é possível graças a implementação de uma “ponte”, que
realiza as chamadas aos programas que serão executados sob o middleware. [ROG06]
Através da “ponte” implementada pelo middleware Ginga, as aplicações
construídas em linguagem declarativa podem ser executadas juntamente com as
aplicações procedurais através de chamadas feitas pelos aplicativos, desta forma os
desenvolvedores podem controlar uma determinada funcionalidade do aplicativo na
linguagem NCL e outras partes em linguagem Java ou LUA. [ROG06]
No escopo deste trabalho é importante destacar que, através dos estudos
realizados sobre os padrões de middlewares implementados até o momento podemos
definir que a maioria dos middlewares implementam dois ambientes de programação:
Um declarativo e outro procedural, e que todos os middlewares tem a linguagem Java
como padrão para aplicações procedurais.
Desta forma a API proposta por este trabalho torna-se compatível com qualquer
padrão de middleware existente e ainda possibilita a utilização de componentes em
programas escritos na linguagem NCL, já que esta pode utilizar aplicações Java em
tempo de execução.
23
3 LINGUAGEM NCL
A linguagem NCL (Nested Context Language) é uma linguagem de aplicação XML
que permite aos autores escreverem apresentações multimídia interativas. Ela é parte
das especificações de codificação de dados para o padrão brasileiro de televisão digital e
compreende a especificação da linguagem utilizada pela máquina de apresentação
Ginga-NCL do middleware Ginga. [SOU03]
Utilizando a linguagem NCL, um autor pode descrever o comportamento temporal
de uma apresentação multimídia, associar hyperlinks (interação do usuário) a objetos de
mídia, definir alternativas para apresentação (adaptação) e descrever o leiaute da
apresentação em múltiplos dispositivos. [SOA06]
A linguagem NCL é declarativa e tem como base o modelo NCM, que tem como
entidades básicas as entidades representadas na figura 3.1.
Figura 3.1: Modelo conceitual NCM básico [DIN08]
A figura 3.2 apresenta a estrutura básica de um aplicativo escrito na linguagem NCL,
quais conectores e quais regiões foram definidas na construção do aplicativo.
“Um programa criado em NCL é um arquivo escrito em XML. Todo
documento NCL possui a seguinte estrutura:
Um cabeçalho de arquivo NCL (linhas 1 e 2); uma seção de cabeçalho do
programa (seção HEAD, linhas 3 e 13), onde se definem as regiões, os descritores, os
conectores e as regras utilizadas pelo programa; o corpo do programa (seção BODY,
linhas 14 a 17), onde se definem os contextos, nós de mídia, elos e outros elementos que
definem o conteúdo e a estrutura do programa; pelo menos uma porta que indica por
24
onde o programa começa a ser exibido (PORT PINICIO, linha 15); e a conclusão do
documento (linha 18).” [DIN08]
Figura 3.2: Estrutura básica de um documento NCL. [DIN08]
Além de oferecer suporte ao controle de mídias, a linguagem NCL pode ainda
chamar scripts escritos na linguagem LUA e xlets escritos na linguagem Java para serem
executados em uma determinada região de uma mídia definida em um programa escrito
em NCL. [SWP08]
Os xlets criados para a execução cooperativa com a linguagem NCL precisam ser
construídos garantindo a compatibilidade com o padrão JSR-1217 [JCP06] e com as
APIs definidas pelo SBTVD. Da mesma forma, os scripts construídos na linguagem
LUA precisam seguir os padrões definidos pela norma ABNT NBR 15606-2 [ABN07],
que define um conjunto de módulos que podem ser utilizados para a programação de
scripts.
3.1 Scripts LUA
A linguagem LUA é amplamente utilizada em ambientes gráficos, principalmente
em jogos e aplicações de tratamento de imagens, sendo caracterizada por ser uma
linguagem de grande poder computacional, por ser relativamente leve se comparada a
outras linguagens de programação como o Java e por ser uma linguagem de código
aberto. [LUA08]
25
A primeira revisão da linguagem foi apresentada no ano de 1983, pelo Telegraf, que
se trata do Grupo de Computação Gráfica da PUC-RJ [TEL08], atualmente a linguagem
está na versão 5.0.2, mas a versão 5.1 já está sendo implementada e testada. [CEL08]
Para a construção de interfaces no ambiente de televisão digital, a norma ABNT
NBR 15606-2[ABN07] define que é obrigatória a implementação do módulo canvas,
que se trata de uma API para desenhar primitivas gráficas e manipular imagens.
O módulo canvas oferece controles sobre cores, desenhos geométricos e
carregamento de imagens que serão utilizadas por um programa construído na
linguagem LUA. [ABN07]
Além de definir as funções que devem ser implementadas para realizar o tratamento
gráfico pela linguagem LUA, a norma ABNT NBR 15606-2 [ABN07] define que um
módulo event deve ser implementado pelo middleware, para realizar o tratamento de
eventos realizados pelo usuário.
Graças a implementação do módulo event, um formatador NCL pode se comunicar
de forma assíncrona com uma aplicação em LUA. Portanto, o uso mais comum para este
módulo resume-se em tratar eventos de usuário (controle remoto, interação com
componentes) e tratar eventos NCL. [ABN07]
“As relações em NCL são baseadas em eventos. Um evento é uma ocorrência
no tempo que pode ser instantânea ou ter duração mensurável.” [ABN07]
Apesar de a linguagem LUA oferecer grande poder computacional e ser leve, ela
não é implementada por todos os padrões de middlewares atuais, para ter
compatibilidade com todos os padrões, o desenvolvedor precisa utilizar a linguagem
Java, que será apresentada no estudo feito no próximo capítulo.
26
4 A LINGUAGEM JAVA E O AMBIENTE DE TELEVISÃO
A linguagem Java [SUN08a] sempre foi caracterizada pela compatibilidade com as
mais diversas plataformas existentes, desde servidores e aplicações web até sistemas
embarcados, como acontece em um ambiente de televisão digital.
Enquanto os padrões de transmissão dos sistemas de televisão digital eram criados, a
plataforma Java era consolidada como a linguagem que seria utilizada pelos set-topboxes, isto porque o Java já oferecia a plataforma J2ME (Java Micro Edition)
[SUN08b], que se trata de uma plataforma definida para sistemas embarcados ou que
oferecem pouco processamento e tem conectividade limitada.
Como podemos ver na figura 4.1, a plataforma Java oferece dois perfis para sistemas
restritos em capacidade de processamento e conectividade. O perfil CLDC (Connected
Limited Device Configuration) é destinado a sistemas com grandes restrições de
processamento e conectividade, além disso, este perfil é indicado para sistemas que
tenham limite de 512Kb de memória disponível para execução. Este perfil é
amplamente utilizado em telefones celulares. [KNU05]
Figura 4.1: Divisões de perfis, configurações e Máquinas Virtuais da plataforma
J2ME.
Além de oferecer o CLDC, a plataforma Java define o CDC (Connected Device
Configuration) [SUN05] como perfil para sistemas embarcados que possuem
capacidade de processamento maior que os sistemas que utilizam o CLDC, porém não
possuem as capacidades de um sistema definido na plataforma J2SE (Java Standard
Edition). Este perfil é utilizado em sistemas que não possuem mais de 2MB de memória
disponível para a execução de aplicativos Java e define um conjunto mais restrito de
APIs de desenvolvimento se comparada à versão J2SE do Java. [KNU05]
27
Os set-top-boxes rodam aplicações Java baseadas na configuração CDC, porém
como a configuração CDC possui APIs limitadas para desenvolvimento de aplicações,
cada padrão de middleware implementa o conjunto de APIs denominado JavaTV, que se
trata de um perfil que é vinculado à configuração CDC e oferece recursos adicionais
para que as aplicações Java possam desfrutar dos serviços oferecidos pelo sistema de
televisão digital. [OLI05]
Além disso, cada padrão de middleware implementa um conjunto de APIs auxiliares
ao desenvolvimento de aplicativos para a televisão digital, por este motivo as aplicações
que foram desenvolvidas em uma plataforma de middleware não são compatíveis com
outra plataforma de middleware. [OLI05]
Para auxiliar a criação de aplicações e garantir que a plataforma Java possa usufruir
de todas as funcionalidades que o middleware proporciona, cada padrão de middleware
implementa conjuntos de APIs que podem ser utilizadas na construção de aplicações.
No middleware MHP, há um padrão chamado DVB-J, que define um conjunto de
APIs para a construção de aplicativos Java, entre eles estão à biblioteca HAVi, o
framework DAVIC e a API JavaTV. [OLI05]
No middleware DASE, há uma divisão de ambientes, um destes ambientes é
denominado Procedural Application Environment, neste ambiente é definida uma JVM
(Java Virtual Machine) e o conjunto de APIs implementadas pelo middleware DASE,
entre estas APIs se encontra a API JavaTV. [OLI05]
No middleware japonês ARIB, é definida uma especificação chamada ARIB STDB23, que define uma JVM e um conjunto de APIs para desenvolvimento baseadas nos
padrões definidos pelo middleware DVB-MHP. [OLI05]
No middleware brasileiro Ginga, o framework Ginga-J é o responsável pela
especificação das APIs implementadas e pela definição da JVM, porém até o presente
momento o SBTVD não confirmou quais APIs serão implementadas pelo Ginga-J, nem
mesmo as especificações da JVM que será utilizada neste middleware. [DIN08]
4.1 API JavaTV
A API JavaTV [JTV00] foi desenvolvida pela Sun Microsystems para suprir as
necessidades dos desenvolvedores por programas interativos para que conseguissem
unir a capacidade de realizar interatividade com o usuário e controlar as operações de
segurança e de tratamento de dados.
Esta API foi desenvolvida de modo que cada programa de televisão seja tratado
como um serviço, e que em conjunto com a API Java Media Framework e um
subconjunto da API AWT, a API consiga fazer manipulação do vídeo e do áudio de
forma independente dos dados que são transmitidos junto com a mídia. [JTV00]
Além disso, a API JavaTV introduz um novo conceito de ciclo de vida das
aplicações feitas em Java, além de definir um gerenciador de ciclo de vida das
aplicações. No ambiente desktop, uma aplicação pode ser iniciada e finalizada, já em
um ambiente J2ME, uma classe que estende a classe MIDlet tem um ciclo de vida
28
diferente das aplicações desktop e das aplicações baseadas na configuração CDC.
[JTV00]
Como podemos ver na figura 4.2, um xlet3 tem um ciclo de vida que possui os
seguintes estados:
•
Loaded (Carregado)
•
Paused (Pausado)
•
Active (Ativo)
•
Destroyed (Destruído)
Figura 4.2: Ciclo de vida de um xlet [OLI05]
“Inicialmente, o gerenciador de aplicação carrega o Xlet principal,
instanciando através de um método new, para depois colocá-lo no estado Loaded.
A partir daí, o Xlet já está pronto para ser inicializado, seja pelo próprio
usuário, seja automaticamente. Para tanto, o gerenciador de aplicações usa o
método initXlet(), passando como parâmetro o objeto XletContent. Este objeto que se
comunica com o gerenciador de aplicações para solicitar uma mudança de estado do
Xlet. Usando o objeto XletContent, o Xlet consegue obter propriedades do
ambiente de execução e comunicar ao gerenciador de aplicação sobre as
mudanças de estado. Assim, o estado do Xlet pode ser alterado tanto por ele mesmo,
quanto pelo gerenciador de aplicação.[OLI05]
“Encontrando-se no estado Paused, significa que o Xlet foi corretamente
inicializado, não podendo manter ou usar nenhum recurso compartilhado. Para
ser ativado, o método startXlet() é utilizado. Desta forma, passa ao estado Active,
no qual o Xlet ativa suas funcionalidades e provê seus serviços, proporcionando a
interação propriamente dita com o usuário. Nada impede que o Xlet retorne ao
estado Paused, bastando para isso utilizar o método pauseXlet(). Para ser
destruído um Xlet, não importa em qual estado, deve ser utilizado o método
destroyXlet(), que o move para o estado Destroyed e libera todos os recursos e finaliza
a execução.” [OLI05]
Os desenvolvedores que utilizarem esta API para a construção de aplicações têm a
disposição os seguintes pacotes:
3
Xlet – Especificação de programa projetado para ser executado na configuração CDC.
29
•
Javax.tv.carousel: conjunto de classes que juntamente com o pacote Java.io
provêm acesso a arquivos em broadcast e diretórios de dados.
•
Javax.tv.graphics: cria mecanismos de implementação de transparências.
•
Javax.tv.locator: implementa componentes capazes de referenciar o conteúdo
acessível por esta API.
•
Javax.tv.media: implementa extensões e derivações de classes da API Java
Media Framework para o gerenciamento de mídias em tempo real.
•
javax.tv.net: implementa componentes que permitem o acesso e a transmissão de
datagramas.
•
Javax.tv.service: implementa o controle sobre serviços e acesso a bases de
dados. [JTV00]
Logo após a definição da API JavaTV, os desenvolvedores de aplicativos e as
empresas que trabalham no ramo de televisão começaram a desenvolver frameworks,
visando obter facilidade e eficiência na programação de aplicativos e a possibilidade de
agregar funcionalidades a API JavaTV.
4.2 API HAVi
A API HAVi foi criada inicialmente com o intuito de oferecer uma API que
permitisse a intercomunicação de dispositivos, porém com o passar do tempo, foi sendo
cada vez mais utilizada para a construção de interfaces gráficas, pois ela estende
capacidade dos componentes da API AWT da linguagem Java, de modo que consiga
atender a necessidade dos programadores de aplicativos para a televisão interativa.
Esta biblioteca foi criada por um grupo de companhias de produtos eletrônicos, e é
proprietária, ou seja, para utilizar os componentes implementados por ela os
desenvolvedores precisam pagar royaties. Ela especifica uma arquitetura de software
distribuída que busca assegurar a interoperabilidade entre dispositivos de áudio e vídeo
digital, deste modo os desenvolvedores tem a garantia de que os componentes utilizados
em seus programas são compatíveis com as mais diversas arquiteturas de áudio e vídeo
digital. [HAV01]
“Os fabricantes desenvolvem dispositivos interoperáveis, de forma que os
desenvolvedores de aplicações possam prover aplicações usando uma API Java
padronizada pelo próprio HAVi.”[OLI05]
A API divide-se basicamente em dois pacotes, um deles, trata da implementação dos
mecanismos de tratamento de eventos e é definida como org.havi.ui.event, já o outro
pacote trata da implementação dos componentes gráficos em si e é chamada de
org.havi.ui. Para a construção de interfaces gráficas, a biblioteca HAVi estende os
componentes da API AWT, presente no JDK 1.1. Porém ela não oferece o pacote AWT
por completo, mas sim algumas classes, que estão listadas na tabela 4.1. [HAV01]
30
Java.awt
Java.awt.event
Java.awt.image
Adjustable(intf)
ActionListener(intf)
ImageConsumer(intf)
ItemSelectable(intf)
AdjustementListener(intf)
ImageObserver(intf)
LayoutManager(intf)
ComponentListener(intf)
ImageProducer(intf)
LayoutManager2(intf)
ContainerListener(intf)
ColorModel
MenuContainer(intf)
FocusListener(intf)
DirectColorModel
AWTError
ItemListener(intf)
IndexColorModel
AWTEvent
KeyListener(intf)
MemoryImageSource
AWTEventMulticaster
MouseListener(intf)
PixelGrabber
AWTException
MouseMotionListener(intf)
BorderLayout
TextListener(intf)
CardLayout
WindowListener(intf)
Color
ActionEvent
Component
AdjustementEvent
Container
ComponentAdapter
Cursor
ContainerEvent
Dimension
FocusAdapter
Event
FocusEvent
EventQueue
InputEvent
FlowLayout
ItemEvent
Font
KeyAdapter
FontMetrics
KeyEvent
Graphics
MouseAdapter
GridLayout
MouseEvent
IllegalComponentStateException MouseMotionAdapter
Image
PaintEvent
Insets
TextEvent
MediaTracker
WindowAdapter
Point
WindowEvent
Polygon
ComponentEvent
Rectangle
ContainerAdapter
Shape
Toolkit
Tabela 4.1: Classes do pacote Java.awt disponíveis para o framework HAVi
[HAV01]
Todos os componentes gráficos da biblioteca HAVi são componentes derivados da
classe HComponent, que por sua vez é derivada da classe Component, definida pelo
pacote Java.awt. [HAV01]
Porém isto não significa que para criarmos uma aplicação compatível com o HAVi
precisamos utilizar somente as classes definidas por este framework, os
desenvolvedores podem utilizar as classes do pacote Java.awt que estão presentes na
definição da biblioteca HAVi.
31
4.2.1 Componentes Gráficos
A biblioteca HAVi implementa uma série de componentes gráficos que trazem como
objetivo aumentar a capacidade de representação gráfica da API AWT e fornecer classes
de uso específico no ambiente de televisão interativa.
Para gerenciar questões relacionadas ao vídeo em si, a API implementa a classe
HScreen, cada instância desta classe representa um sinal independente do dispositivo,
que é composto por sinais de vídeo, sinais gráficos e planos de fundo, a partir desta
classe é possível obter o objeto instanciado da classe HScreenDevice, que faz controle
das propriedades do dispositivo de vídeo. [HAV01]
A forma de organização dos componentes é baseada em layers4 organizadas de
acordo com a sua função na interface gráfica do aplicativo. Como podemos ver na
figura 4.3, o sistema de camadas da API HAVi é dividido em quatro camadas, a
primeira, chamada de Background Image Plane é responsável pela imagem de fundo da
aplicação (se ela possuir), a segunda é chamada de Vídeo Plane, e é a camada onde os
vídeos e a mídia em si da televisão se encontra, a terceira é chamada de Application
Graphics Plane e comporta os componentes gráficos da API para a exibição de
aplicações e a quarta e última camada é chamada de Cursor Plane, que exibe os
cursores (se disponíveis). [HAV01]
Figura 4.3: Organização de layers utilizada pela API HAVi [EDW03]
A camada Application Graphics Plane é basicamente uma camada que contém um
container de alto nível implementado pela classe HScene, neste container, o
programador pode inserir qualquer componente gráfico, desde que ele seja derivado da
classe Component do pacote Java.awt ou derivado da classe HComponent, do pacote
havi.ui. [HAV01]
4
Layers – Camadas.
32
A API ainda define a interface HMatte que modifica a hierarquia de componentes
dentro da layer Application Graphics Layer e serve para incluir canais de transparência
no componente onde é implementada. [HAV01]
Na figura 4.4 podemos ver uma comparação de hierarquias de componentes em uma
interface construída com a classe HScene (representada por scene na figura), um
HContainer (representado por c3 na figura) e dois HComponents (representados por c1
e c3), e utilizando os mesmos componentes porém com interfaces HMatte
implementadas. [HAV01]
Figura 4.4: Comparação de hierarquias utilizando a interface HMatte [HAV01]
Então, basicamente para construirmos uma interface gráfica simples devemos seguir
os seguintes passos:
•
•
•
•
Criar um objeto da classe HScreen.
Após obter o objeto da classe HScreen, obter os objetos que correspondem as
camadas de fundo, de vídeo, e de aplicação gráfica.
Criar um objeto da classe HScene para o contexto da camada gráfica, este objeto
se comporta da mesma forma que um objeto Window ou Frame da API AWT, e
nele serão inseridos os componentes que irão compor a interface.
Inserir componentes gráficos e implementar o tratamento de eventos pelos
componentes. [POZ06]
Novos tipos de botões foram implementados a fim de melhorar as funcionalidades
da classe Button da API AWT. Os principais componentes implementados que
funcionam como botões são:
•
HGraphicButton: é a implementação de um botão compatível com diversos tipos
de listeners e que tem imagens associadas a este botão. Desta forma em cada um
dos estados deste botão uma imagem determinada pelo programador é mostrada
na tela. [HAV01]
Este componente implementa a interface HActionable, que permite as operações
de foco e associação de listeners com este componente.
•
HTextButton: implementa um botão que contém um texto simples no seu
interior. [HAV01]
33
•
HToggleButton: implementa um botão gráfico que tem comportamento
booleano, ou seja, pode estar no estado falso ou no estado verdadeiro, sendo
assim, tem o funcionamento semelhante a uma caixa de checagem.
Neste componente só uma imagem pode ser associada, se o programador precisa
utilizar um label como referência a este botão, terá que utilizar outro
componente da API HAVi. [HAV01]
Para realizar o controle de animações na tela, a API HAVi implementa os
componentes HAnimation e HStaticAnimation, o primeiro é capaz de transferir e receber
foco, já o segundo componente é estático e não pode ser acessado pelo usuário, os dois
funcionam basicamente da mesma forma quanto a forma de desenho, que se trata do
desenho de um vetor de imagens estáticas durante um período de tempo. [HAV01]
O controle de imagens é feito por classes específicas de acordo com o uso do
componente, para exibir uma imagem simples na tela as classes HStaticIcon e HIcon
devem ser usadas, sendo que na segunda há possibilidade de transmissão de foco pelo
componente. [HAV01]
Além das classes descritas anteriormente, a API HAVi implementa mais classes no
pacote havi.ui, que estão descritas no javadoc da API HAVi [HDO01].
Apesar de estender as capacidades de representação gráfica dos componentes da API
AWT, a biblioteca HAVi ainda necessita de melhorias que foram implementadas pela
Sun na construção da API Swing, como formas de desenhos com gradientes de cor e
suporte a transparência de forma natural pelos componentes, e não apenas através de
imagens com níveis de transparência.
Portanto, a API proposta neste trabalho traz como principal contribuição, a
construção de componentes totalmente compatíveis com os atuais padrões utilizados
nos middlewares, porém implementando algumas das funcionalidades presentes na API
swing e implementando novos componentes pensados de acordo com os princípios para
o ambiente de televisão digital interativa, e desta forma, complementando o número de
opções de componentes que podem ser usados, com componentes que contemplam
questões de usabilidade para a televisão digital e que são compatíveis com todos os
padrões de middlewares.
4.2.2 Manipulação de Eventos
Para a manipulação de eventos, a biblioteca HAVi implementa um pacote chamado
havi.ui.event, que contém classes derivadas das classes presentes no pacote
Java.awt.event, responsável pela manipulação de eventos na API AWT. [HAV01]
Os eventos podem ser gerados por um teclado, por mouse ou por um controle
remoto. Para detectar a presença de dispositivos como o teclado e o mouse, a API HAVi
implementa
a
classe
org.havi.ui.event.HKeyCapabilities,
a
classe
org.havi.ui.event.HMouseCapabilities e a classe org.havi.ui.event.HRcCapabilities.
[HAV01]
Os eventos de teclado são semelhantes aos eventos de teclado, porém possuem
alguns
identificadores
a
mais.
São
eles:
VK_COLORED_KEY_0,
VK_COLORED_KEY_1,
VK_COLORED_KEY_2,
VK_COLORED_KEY_3,
34
VK_COLORED_KEY_4 e VK_COLORED_KEY_5 para as teclas coloridas do controle
remoto, o identificador VK_POWER para a tecla de liga/desliga, além dos
identificadores VK_VOLUME_UP e VK_VOLUME_DOWN para as teclas de volume e
VK_CHANNEL_UP e VK_CHANNEL_DOWN para os botões de seleção de canal.
[HAV01]
Como podemos ver na tabela 4.2, o mecanismo de eventos da API HAVi é dividido
basicamente em sete classes, que complementam as classes que tratam eventos
presentes na API AWT padrão.
Classe HAVi
Uso
HActionEvent
Interage com um componente implementando a
interface HActionInputPreferred.
HFocusEvent
Interage com um componente implementando a
interface HNavigationInputPreferred.
HRcEvent
Possibilita a capacidade de captar eventos do
controle remoto.
HKeyEvent
Interage com um componente implementando a
interface HKeyboardInputPreferred.
HAdjustementEvent Interage com um componente implementando a
interface HAdjustementValue.
HItemEvent
Interage com um componente implementando a
interface HSelectionInputPreferred.
HTextEvent
Interage com um componente implementando a
interface HKeyboardInputPreferred.
Tabela 4.2: HUI Events [HAV01]
Estas classes correspondem aos tipos de eventos que qualquer classe derivada da
classe HComponent pode tratar, porém isto não significa que todas as classes da
biblioteca HAVi implementam todas as classes de tratamento de eventos.
O próximo capítulo trata de estudos realizados sobre alguns princípios de
usabilidade desejáveis para a construção de interfaces para a televisão digital e que
serão utilizados na construção dos componentes da API proposta por este trabalho.
35
5 USABILIDADE NA TV DIGITAL INTERATIVA
Junto com a melhoria da qualidade de som e imagem proporcionada pela recepção
de televisão digital, a possibilidade de transformar o telespectador, que até então era um
usuário passivo de televisão, ou seja, que só recebia informações e não era capaz de
interagir diretamente com a mídia, em um usuário de televisão tem importância
fundamental no contexto da televisão digital.
Essa importante mudança de conceitos, que transforma o telespectador em um
usuário capaz de interagir em tempo real com o sistema, precisa de atenção das
emissoras quanto ao desenvolvimento de aplicativos, pois estes serão usados por
pessoas de todas as faixas etárias e econômicas, que utilizam a televisão atualmente e
que virão a utilizar o sistema de televisão digital no futuro. [BEC06]
A importância da interatividade no ambiente de televisão fica evidente quando
lemos o decreto presidencial que definiu os objetivos a serem alcançados com o Sistema
Brasileiro de TV Digital, principalmente no trecho citado a seguir.
“promover a inclusão social, a diversidade cultural do país e a língua pátria
por meio do acesso a tecnologia digital, visando à democratização da informação”.
[DOU03]
Portanto, a preocupação com conceitos de usabilidade deve ser redobrada, pois
diversos fatores influenciam na complexidade do projeto de construção de interfaces,
como o nível de formação dos usuários, que é mais heterogêneo se comparado ao nível
de formação médio de usuários atuais de computadores. Além disso, o ambiente de
televisão digital visa ter a computação embarcada e invisível ao usuário, mostrando
apenas a interface de programas, mas não expondo questões computacionais ao usuário.
[BEC06]
Desta forma, a dificuldade na realização de projetos de aplicativos para o ambiente
de televisão digital fica evidente, pois os projetistas e desenvolvedores precisam manter
dois caminhos constantes no desenvolvimento: O primeiro deles visa proporcionar
recursos e interatividade para o usuário, seja de qualquer uma das seguintes formas:
•
•
•
Reativa: As opções são dirigidas pelo programa, havendo pouco controle do
usuário sobre a estrutura do conteúdo.
Coativo: O usuário tem a possibilidade de controlar a seqüência, ritmo e estilo da
interface.
Pró-ativo: O usuário pode controlar a estrutura e o conteúdo da interface.
[TEI06]
Já o outro caminho visa proporcionar interfaces simples, funcionais e de fácil
entendimento, visando sempre atender a qualquer tipo de usuário que virá a utilizar a
sua aplicação.
36
5.1 Usabilidade
Segundo NIELSEN [NIE08], a usabilidade tratada de um modo geral, trata-se de
uma medida de qualidade dos objetos e interfaces aliados a utilidade dos mesmos.
Porém, apesar de termos um conceito sobre o que é usabilidade, ainda não é possível
determinar a priori o conceito de uma boa interface, pois esta conceituação é dependente
de fatores externos, como tipos de usuários e das tarefas que estes usuários precisam
realizar em um determinado sistema.
Ainda segundo NIELSEN [NIE08], a usabilidade pode ser definida em cinco
componentes qualitativos:
•
Facilidade de aprendizado – A realização de tarefas e a exploração do sistema
são capazes de serem feitas rapidamente pelo usuário;
•
Eficiência de uso – A produtividade do usuário no sistema é elevada, uma vez
que este usuário esteja habituado com a interface do sistema;
•
Facilidade de memorização – O usuário utiliza o sistema de forma produtiva,
mesmo que este usuário não utilize o sistema freqüentemente.
•
Baixa taxa de erros – O usuário é capaz de realizar as tarefas necessárias no
sistema sem transtornos externos ao seu foco de trabalho e é capaz de reparar
erros caso seja necessário.
•
Satisfação subjetiva – O usuário interage com o sistema de forma simples,
porém funcional, considerando assim agradável a interação com este sistema.
Apesar de termos definições de usabilidade de um modo geral, cada tipo de sistema
requer a compreensão de princípios de usabilidade específicos, que podem ser aplicados
somente para aquele tipo de sistema, e com o ambiente de televisão digital isto não é
diferente.
Do ponto de vista tecnológico, a televisão interativa é tratada como uma combinação
de televisão digital com a tecnologia e os mecanismos de interatividade seja por
telefone, cabo, satélite ou mesmo sem possuir um canal de retorno. [BEC06]
5.2 Princípios de Usabilidade para o Ambiente de TV Digital Interativa
Apesar de NIELSEN [NIE08] ter enumerado e descrito componentes qualitativos
para a definição de usabilidade, cada sistema tem necessidades específicas, que são
definidas pelo tipo de usuário que o utiliza, pelo tipo de aplicação e ambiente desta
aplicação e pelas tarefas que são ou precisam ser realizadas neste sistema.
Portanto, pode haver princípios de usabilidade que são definidos e aplicados a um
determinado sistema, e a um tipo de usuário, mas que se usados em outro tipo de
sistema não irão obter o resultado esperado. O sistema brasileiro pode definir
determinados princípios a serem usados na construção de interfaces para o sistema de
37
televisão brasileiro, e que não teriam tanta eficácia caso fossem aplicados ao padrão
americano de televisão digital, por exemplo.
Na tabela 5.1, que é uma adaptação de NIELSEN [NIE97], são mostradas algumas
das diferenças mais significativas entre a televisão digital interativa e o computador.
Tabela 5.1: Televisão Convencional X Computador. [PIC06]
Mas mesmo tratando a televisão digital de uma forma única, desconsiderando a
questão da diferença entre os usuários, ainda há muitas diferenças de uma aplicação
para a televisão e uma aplicação para PCs comuns.
“Em relação a um PC, a TV interativa apresenta uma série de diferenças
importantes; tela de menor resolução e com área periférica sujeita a distorções, não
oferece rolagem horizontal, propõe dispositivos bastante limitados para o controle da
dados (...) a tecnologia atual ainda apresenta deficiências como lentidão nas respostas
e freqüentes bloqueios, com a necessidade de recarregar o sistema.” [BEC06]
Além de que, a principal proposta das aplicações para a televisão é oferecer
interatividade ocultando questões computacionais do usuário. Portanto, a grande
maioria dos erros devem ser detectados e corrigidos pelo próprio software evitando que
o erro chegue até a interface que interage com o usuário.
38
Quanto aos textos exibidos na tela, algumas considerações importantes devem ser
levadas em conta no projeto de construção de interfaces para a TV digital. BBC
[BBC08] sugere sete considerações importantes sobre legibilidade em monitores de
televisão, são eles:
•
Na maioria dos casos, se possível utilizar fontes maiores que 24 pontos;
•
Em nenhuma circunstância textos apresentados na tela devem ter menos de 18
pontos;
•
Preferencialmente utilizar textos com cores mais claras que a cor de fundo, pois
facilitam a legibilidade na tela;
•
Os textos precisam espaços nas entrelinhas maiores que textos impressos;
•
Se for possível, o espaço entre os caracteres de um texto deve ser aumentado em
30% em relação ao espaço normal;
•
Se for possível, uma tela completamente composta de textos deve conter no
máximo 90 palavras;
•
Para facilitar a leitura e aumentar a velocidade de leitura, os textos devem ser
divididos em pequenos blocos.
As cores têm papel fundamental na construção das interfaces, na televisão digital o
controle remoto por padrão traz quatro botões coloridos que servem para permitir o
acesso rápido a determinadas funções designadas pelo programador. [BEC06]
“Porém, apesar da eficiência da cor no processo de memorização, é
importante evitar excessos. Uma interface completamente ocupada por qualquer uma
das quatro cores, devido a sua saturação, poderia rapidamente causar fadiga visual em
seus usuários”. [BEC06]
A navegabilidade é outra característica importante na construção de interfaces, pois
ela define questões de como o usuário poderá alcançar o seu objetivo na interação com
o programa.
Segundo KRUG [KRU06], a navegação tem os seguintes objetivos:
•
Ela dá algo ao qual nos apoiamos - Opções de retornar, e informações de
localização do usuário na interface.
•
Ela nos diz o que existe no site – Mostra uma breve listagem do conteúdo total
da interface.
•
Ela diz como usar o site - Em uma navegação bem projetada é dito
implicitamente onde devemos começar ou quais são os locais onde podemos
encontrar o que queremos.
Ainda segundo KRUG, a navegação possui alguns conceitos básicos que, se
seguidos pelo desenvolvedor facilitam a navegação e a satisfação do usuário nas
interfaces construídas. São eles:
•
•
•
•
Sempre oferecer um caminho de volta ao usuário;
Oferecer um caminho de volta ao início;
Oferecer indicadores que mostrem aonde está o foco da interface e indiquem
onde o usuário se encontra no contexto da interface;
Limitar a profundidade de caminhos pela interface;
39
Com base nos estudos realizados sobre os conceitos gerais sobre usabilidade e sobre
as diferenças entre o ambiente de computadores pessoais e o ambiente de televisão
digital interativa, é possível considerar a implementação de uma API que ofereça
componentes gráficos flexíveis, ajudando o desenvolvedor a construir interfaces que
contemplem os princípios de usabilidade para a televisão digital.
40
6 PROJETO E IMPLEMENTAÇÃO DA API
A partir dos estudos feitos nos princípios de usabilidade e nas opções de frameworks
já existentes para a criação de interfaces para programas interativos, este trabalho traz
como proposta a construção de uma nova API que implemente novos componentes que
priorizem a compatibilidade com diversos padrões de middlewares e que ajudem na
construção de interfaces que contemplem os princípios de usabilidade estudados
anteriormente.
Estes componentes foram criados de forma a explorar a capacidade de representação
gráfica oferecida pela API AWT e, além disso, fornecer uma nova forma de interação
com os componentes utilizados nas interfaces criadas.
Esta API é totalmente compatível com o perfil JSR 217[JCP06], que é amplamente
utilizado pelos padrões de middlewares, desta forma esta API tem compatibilidade total
com todos os padrões de middlewares que implementam uma JVM até o presente
momento.
Uma lista foi criada para definir os principais princípios de usabilidade que serão
levados em conta na construção dos componentes gráficos da API proposta neste
trabalho.
• Facilidade de aprendizado
• Facilidade de memorização
• Baixa taxa de erros
• Satisfação subjetiva
• Utilização de cores mais escuras nos planos de fundo
• Espaço nas entrelinhas de textos maior que em textos impressos.
• Evitar saturação de cores na tela.
Após a definição da lista de prioridades de usabilidade que os componentes devem
ajudar a implementar, a estrutura básica da API foi construída, e os componentes foram
construídos. No final deste capítulo, há uma descrição completa de quais princípios de
usabilidade são implementados e onde eles foram implementados.
6.1 Definições
Para garantir a compatibilidade desta API com os padrões de middlewares atuais, foi
implementada a classe MComponent, que através da derivação da classe Component do
pacote java.awt, como mostrado na figura 6.1, garante a compatibilidade com as APIs
criadas que tem como base a API AWT, como por exemplo a API HAVi.
41
Para a construção de painéis e containeres, a classe Container do pacote Java.awt foi
utilizada como base para a construção da classe MContainer, que é a classe base para
todos os containeres implementados na API, desta forma os containeres construídos
nesta API são totalmente compatíveis com os gerenciadores de leiautes do pacote
Java.awt.
A principal característica criada pela classe MComponent e pela classe MContainer
é a implementação do mecanismo de double buffering, que evita o aparecimento de
erros durante o desenho dos componentes gráficos na tela.
Figura 6.1: Componentes base para a construção da API.
6.2 Double Buffering
Um dos problemas encontrados no início do desenvolvimento dos componentes
gráficos foi a dificuldade de redesenhar os componentes na tela sem que ocorresse
flickering, que se trata de um problema muito comum em componentes gráficos
definidos em APIs mais antigas.
Isso acontece porque um componente é desenhado na tela depois que a máquina
virtual faz uma requisição verificando se pode utilizar o objeto que desenha o
componente na tela. Se o método que realiza o desenho na tela faz muitas operações,
pode ser que quando uma requisição é feita apenas uma parte do componente seja
desenhada, e desta forma o componente pode ser desenhado em partes ou acontecem
piscadas quando o componente é desenhado, isto acontece em transições rápidas de tela
ou de componentes na tela. [SUN08]
Para resolver este problema, todos os componentes implementados nesta API
possuem dupla buferização, também conhecido como double buffering. Esta técnica
consiste na definição de um buffer e toda vez que um componente é desenhado,
primeiro o programa desenha todas as formas em um buffer, nesta API o buffer é um
objeto BufferedImage da API AWT, e o buffer é desenhado na tela, desta forma o
42
método de desenho dos componentes realiza somente uma operação, evitando o
flickering.
A dupla buferização já é implementada na API Swing [SUN08], mas como esta API
não é implementada pelos padrões de middlewares, esta funcionalidade foi
implementada integralmente para a API proposta.
6.3 Eventos
A implementação de um mecanismo de eventos internos e externos aos
componentes tem importância vital no trabalho, pois dita a facilidade de acesso aos
componentes e obtenção de resultados de suas ações.
6.3.1 Interface MActive
Para realizar o controle de eventos nos componentes da API, uma interface chamada
MActive foi criada. Esta interface define um conjunto de constantes que definem
possíveis estados que um componente da API pode ter.
O diagrama representado pela figura 6.2 representa os possíveis estados de um
componente, que inicialmente sempre é definido como desabilitado. Caso o
programador deseje que este componente possa responder a eventos externos e que
possa gerar eventos, ele deve mudar manualmente o estado deste componente para o
estado normal, caso o programador queira desabilitar o componente, ele deve mudar o
estado do componente para desabilitado de forma manual.
Quando um componente está em seu estado normal ele pode mudar para o estado
FOCUS_STATE caso ele receba foco do container no qual ele se encontra. Caso o
componente esteja no estado FOCUS_STATE, pode passar para o estado
NORMAL_STATE se ele perder o foco, ou pode ir para o estado LOCK_STATE caso o
usuário queira trancar o foco no componente e então a interação com este componente
pode ser realizada.
A partir do momento que o componente se encontra no estado LOCK_STATE, a
interação com este componente pode ser realizada, e quando uma interação com um
componente é realizada este componente passa a estar no estado ACTION_STATE, ou
seja, no estado que representa a realização de uma ação no componente.
Para evitar que o usuário tenha que clicar duas vezes em um botão (uma para travar
o foco neste botão e outro para realizar a ação), todos os botões criados nesta API
passam do estado FOCUS_STATE para o estado ACTION_STATE, desta forma o
usuário precisa interagir apenas uma vez com o componente para realizar uma ação e
estas definições otimizam o uso do controle remoto reduzindo ao mínimo possível o uso
de comandos pelo usuário.
Após a realização de uma ação por parte do componente, o estado do componente
volta automaticamente para o estado FOCUS_STATE.
A troca de foco entre os componentes é responsabilidade do container no qual o
objeto se encontra, desta forma o programador pode implementar novas formas de
43
trocar o foco mudando o comportamento de um único container, sem a necessidade de
mudar o modo de funcionamento de todos os componentes.
Figura 6.2: Diagrama de estados possíveis de um componente que implementa a
interface MActive
Além de definir constantes de estados dos componentes, a interface MActive define
constantes de definição do tipo de entrada de dados que os componentes podem
implementar.
Como
podemos
ver
na
tabela
6.1,
são
eles
MActive.MOUSE_COMPATIBLE,
MActive.KEY_COMPATIBLE
e
MActive.MOUSE_KEY_COMPATIBLE.
Constante da classe MActive
MOUSE_COMPATIBLE
KEY_COMPATIBLE
MOUSE_KEY_COMPATIBLE
Função da definição
Define que o componente é
compatível com mouse
Define que o componente é
compatível com teclado e/ou
controle remoto
Define que o componente é
compatível com mouse e
teclado/controle remoto
Tabela 6.1: Constantes de controle de entrada de dados definidas na interface MActive.
6.3.2 Classe MControllerEvent
A classe MControllerEvent é uma classe que foi construída basicamente para
estender a classe KeyEvent do pacote Java.awt.event e para definir os códigos das teclas
especiais do controle remoto que não estão definidas originalmente na classe KeyEvent.
A tabela 6.2 mostra quais são os códigos de teclas definidas que não estão presentes
na classe KeyEvent.
44
Nome da constante
RED_BUTTON
BLUE_BUTTON
GREEN_BUTTON
YELLOW_BUTTON
EXIT_BUTTON
OK_BUTTON
UP_BUTTON
DOWN_BUTTON
LEFT_BUTTON
RIGHT_BUTTON
MULTI_BUTTON
NUMBER_SIGN_BUTTON
Código da tecla (int)
403
406
404
405
27
10
38
40
37
39
151
520
Tabela 6.2 Nomes de constantes e valores de teclas da classe MControllerEvent.
6.4 Pacotes
6.4.1 Pacote Maran.Component
O pacote Maran.Component contém todas as classes que definem os componentes
gráficos da API, assim como as classes pai utilizadas para definições mais abstratas dos
componentes construídos.
Na figura 6.3 podemos observar as associações e as derivações das classes criadas
neste projeto no pacote Maran.Component
Figura 6.3: Diagrama de classes do pacote Maran.Component
45
6.4.2 Pacote Maran.Event
Como podemos ver na figura 6.4, o pacote Maran.Event define duas classes que
ajudam no tratamento de eventos e na definição de estados dos componentes
implementados pela API.
A classe MControllerEvent é derivada da classe KeyEvent do pacote Java.awt.event
e sua função é basicamente definir os códigos das teclas do controle remoto, estes
códigos foram obtidos através do emulador xletview [XLE08].
Já a interface MActive define um conjunto de constantes usadas para definir os
estados de um determinado componente que implemente esta interface, além disso,
define um conjunto de métodos que devem ser obrigatoriamente implementados pelos
componentes que implementam esta interface.
Os métodos definidos pela interface MActive basicamente tratam da inclusão ou
remoção do tratamento de eventos, sejam eles de foco, mouse, controle remoto ou
mesmo eventos internos que ocorrem através da classe ActionEvent, presente no pacote
Java.awt.event.
Figura 6.4: Diagrama de classes do pacote Maran.Event
6.5 Componentes
6.5.1 MLabel
O componente MLabel tem como proposta oferecer algumas funcionalidades
específicas para o ambiente de televisão que não estão presentes na classe Label da API
AWT padrão do Java.
46
A função do componente MLabel é praticamente a mesma da classe Label da API
AWT [JCP06] padrão, ou seja, apresentar uma determinada
determinad cadeia de caracteres em um
container gráfico.
Este componente implementa o mesmo mecanismo de alinhamento de texto presente
na classe Label.. Porém, possui algumas vantagens em relação a classe Label:
Label
•
Possibilidade de utilização de cores com níveis de transparência, tanto no plano
de fundo do texto quanto no próprio texto.
•
Os textos podem ter mais de uma linha. O que era uma limitação da classe Label
que apenas apresenta um texto com uma única linha.
•
O componente ajusta a sua área automaticamente de acordo com o texto e a
fonte utilizada. Na classe Label o tamanho do componente tinha que ser definido
manualmente.
•
Possibilidade de escrita do texto em uma determinada cor e ter o plano de fundo
de outra cor ou apresentar o texto sem plano de fundo.
•
Oferece dois estilos de plano de fundo:
o Rounded:: plano de fundo com uma determinada cor e com bordas
arredondadas;
o Normal: plano de fundo com uma determinada cor e com cantos retos.
Para a construção deste componente, foram utilizados
utilizados objetos da classe FontMetrics
[JCP06]] para a medição de fontes, objetos da classe Font [JCP06]] para controlar as
fontes associadas ao componente e da classe Color [JCP06]] para o controle das cores.
Na figura 6.5 mostramos um exemplo de implementação da
da classe MLabel
utilizando
lizando transparência na cor de fundo e utilizando cantos arredondados.
Figura 6.5: Exemplo de uso da classe MLabel.
6.5.2 MImageItem
O componente MImageItem tem como proposta oferecer um componente que
desenha uma imagem estática na tela e que não seja capaz de tratar eventos de foco.
foco
O usuário pode associar uma imagem ao componente ou um endereço de onde a
imagem se encontra e o componente
c
carrega a imagem. Após a construção do
47
componente ou da associação de uma nova imagem ao componente, ele calcula
automaticamente o tamanho necessário dentro de um container para que o componente
seja desenhado.
A principal vantagem deste componente em relação a um componente Image
[JCP06] comum da API AWT é o processo de desenho da imagem na tela. Neste
componente a imagem é transformada em um objeto da classe BufferedImage e então
desenhada na tela. Desta forma o flickering é evitado em transições de tela.
Este
ste componente não é capaz de modificar o nível de transparência de uma
determinada imagem associada a ele.
Na figura 6.6 mostramos um exemplo de uso da classe MImageItem utilizando uma
imagem de extensão PNG previamente carregada no programa.
Figura 6.6: Exemplo do uso da classe MImageItem.
MImageItem
6.5.3 MAnimation
O componente MAnimation define um componente que controla uma thread que
tem a função
ão exclusiva de controlar vetores de imagens que são mostrados na tela em
um determinado intervalo de tempo que é definido pelo programador.
A utilização de uma thread para a troca de imagens se deve pelo fato de que o
processo de desenho de um componente acontece através de threads e o desenho
d
que é
requisitado nem sempre pode ser atendido no momento pelo gerenciador gráfico.
gráfico
[SUN08]
O próprio componente trata erros que possam acontecer na execução da thread
criada especificadamente para a troca de imagens do componente, desta forma o
programador
gramador não precisa se preocupar com a propagação desses erros por outras partes
do programa que utiliza este componente.
Este componente pode realizar a troca de imagens na animação em um intervalo
de tempo definido pelo usuário da API, além disso, pode ter seu tempo de execução
variado, assim como pode ter a sua execução para sempre, ou seja, sem um limite de
tempo de execução que também é determinado pelo usuário da API,,a constante que
define a execução contínua e sem limite de tempo é a constante
MAnimation.FOREVER.
48
Na figura 6.7 podemos ver um exemplo de uso da classe MAnimation utilizando
uma animação de dez imagens no formato PNG sem limite de tempo de execução da
animação.
Figura 6.7 Exemplo de utilização da classe MAnimation.
MAnimation
6.5.4 MSlider
O componente MSlider define um componente que tem como principal função
registrar uma medida de acordo com a escolha do programador. O programador define
um valor mínimo e um valor máximo, enquanto o usuário pode interagir com este
componente movimentando um ponto horizontalmente por uma barra para a escolha de
um valor.
Para facilitar a integração deste componente com as interfaces que serão criadas pelo
programador, o componente foi construído permitindo que o programador utilize a
forma padrão de desenho do componente ou que associe imagens a este componente, e
desta forma permitindo uma maior integração deste componente com o ambiente da
aplicação em si.
A forma de desenho é baseada na área que o programador definiu para o
componente, desta forma o programador
programador só precisa se preocupar com os limites do
desenho do componente, pois as medidas de desenhos são calculadas automaticamente
pelo próprio componente.
Diferentemente da forma de desenho, na forma de associação de imagens o
programador apenas associa as
as imagens ao componente na construção do componente, e
o próprio componente calcula o tamanho necessário
necessário para o desenho das imagens. O
programador não precisa necessariamente utilizar uma imagem de ponto central maior
que a imagem da barra do MSlider, o componente
mponente irá calcular o tamanho necessário do
componente com qualquer combinação de tamanhos das imagens.
49
Na figura 6.8 podemos ver um exemplo de utilização do componente MSlider na
forma de desenho normal.
Figura 6.8: Exemplo de utilização do componente
component MSlider com a forma de desenho
padrão.
Na figura 6.9 podemos ver um exemplo de utilização do componente MSlider na
forma de desenho associado a imagens.
Figura 6.9:: Exemplo de utilização do componente MSlider com a forma de desenho
associado a imagens.
6.5.5 MPanel
O componente MPanel define um container capaz de transferir o foco entre os
componentes presentes dentro deste componente utilizando as teclas direcionais do
50
controle remoto da televisão. A troca de foco entre os componentes é implementada
implem
por
métodos que são
ão chamados pelos componentes presentes no MPanel.
Para integrar o componente ao conceito de troca de foco a cada interação de teclas
direcionais, o programador deve adicionar o código mostrado a seguir ao método que
trata os eventoss de teclado gerados para o seu componente.
“((MPanel)getParent()).choiceFocusComponent(TECLA_DE_DIREÇÃO);
((MPanel)getParent()).choiceFocusComponent(TECLA_DE_DIREÇÃO);
((MPanel)getParent()).choiceFocusComponent(TECLA_DE_DIREÇÃO);”
Quando este trecho de código é utilizado pelo componente, o MPanel requisita o
foco e controla qual será o próximo componente que receberá o foco.
O componente é compatível com qualquer classe que seja derivada da classe
Component do pacote Java.awt,
Java
, ou seja, é compatível com qualquer componente
compon
implementado pela API HAVi,
HAVi pela API AWT ou pelos componentes construídos nesta
API.
Além de implementar o mecanismo de troca de foco e trava de foco nos
componentes presentes no MPanel,
MPanel, este componente permite que o programador associe
uma imagem de fundo com transparência ou uma cor simples com transparência como
plano de fundo, deste modo este componente garante
garante uma integração maior com o
ambiente em si, se comparado a um Panel [JCP06] definido no pacote Java.awt.
Java
Na figura 6.10, mostramos um exemplo de construção de um MPanel e como este
MPanel é mostrado na aplicação.
Figura 6.10: Construção e resultado de um MPanel contendo alguns componentes
desta API.
51
6.5.6 MColoredPanel
O componente MColoredPanel é um componente que exibe o conteúdo de até quatro
containeres, e que responde a eventos do controle remoto quando estes eventos estão
relacionados com os botões coloridos do controle remoto.
Quando este componente é ativado, todos os MPanels associados a ele são mostrados
mostra
na tela e cada MPanel é associado a uma cor de botão do controle remoto,
remoto deste modo a
troca de MPanels na tela é feita de forma rápida e intuitiva,
intuitiva, aumentando a eficácia de
uso da interface pelo usuário.
usuário Os MPanels podem conter formulários, componentes
soltos, ou até mesmo ser um container de vídeo.
Este componente utiliza o componente MImageRender para redimensionar
redimensio
os
MPanels para que seu tamanho seja compatível com o tamanho do MColoredPanel
oloredPanel
Para acessar este componente,
omponente, ele deve ser associado a um componente
MColoredButtonControl.. Na figura 6.11 temos um exemplo de construção do
componente em uma aplicação e o resultado de exibição do componente depois de
ativado.
Figura 6.11: Construção e resultado de um MColoredPanel contendo quatro MPanels
52
6.5.7 MColoredControlButton
Button
O componente MColoredControlButton
MColored
é um botão com aparência fixa, que tem a
função exclusiva de acionar um MColoredPanel que é associado a este componente
quando ele é construído.
Este componente
onente deve ser inserido em cada MPanel que está presente em um
determinado MColoredPanel,
MColoredPanel, para que quando este objeto seja acionado, o
MColoredPanel seja acionado e ganhe o foco na tela.
O motivo de o botão ter a aparência sempre fixa é facilitar a memorização
ização do usuário
quanto a funcionalidade do componente. O desenho do componente é feito de forma de
que se ajuste ao tamanho do componente que é definido pelo usuário.
Na figura 6.12 podemos ver um exemplo de implementação e o resultado posterior
do uso do componente MColoredControlButton.
MColored
Figura 6.12: Construção e resultado de um componente MColoredControl
ControlButton.
6.5.8 MImageButton
O componente MImageButton implementa um botão que possui imagens associadas
a ele e que são exibidas em cada um dos estados possíveis em que o componente se
encontra.
O programador pode associar três imagens ao componente ou três caminhos para as
imagens desejadas e o próprio componente
com
carrega as imagens.
Caso alguma destas imagens seja inválida, o componente dispara uma exceção,
exceção desta
forma o programador pode tratar algum erro que aconteça no momento em que o objeto
é criado.
O cálculo do tamanho necessário para o desenho do componente
componente é calculado
automaticamente pelo componente baseando-se
baseando se nas figuras que estão associadas e no
estado atual do componente. Caso ocorra uma exceção e o componente não consiga
calcular o tamanho das imagens associadas a ele, o componente define um valor
v
positivo para o seu tamanho evitando futuros problemas nas rotinas de desenho deste
mesmo componente na interface criada pelo usuário da API.
53
Na figura 6.13 podemos ver um exemplo de implementação e o resultado posterior
do uso do componente MImageButton.
MImageBu
Figura 6.13: Construção e resultado de um componente MImageButton.
MImageButton
6.5.9 MTextButton
O componente MTextButton implementa um botão que possui um componente
MLabel associado ou um texto simples associado e mostra este texto na tela com a
funcionalidade de um botão.
Caso o programador queira, o botão pode conter apenas o texto ou ser envolvido por
uma caixa de cor definida pelo programador, além disso, o botão suporta transparências.
O programador não precisa se preocupar com o tamanho do componente, pois este é
calculado automaticamente pelo próprio componente de acordo com a fonte utilizada e
com o tamanho do texto
to que está presente no botão.
Na figura 6.14 podemos ver um exemplo de implementação e o resultado posterior
do uso do componente MTextButton.
MTextButton
Figura 6.14: Construção e resultado de um componente MTextButton.
MTextButton
54
6.5.10 MAnimationButton
O componente MAnimationButton
imationButton implementa um botão que possui animações e
uma imagem associadas a ele, o estado normal é representado por uma animação, o
estado focado é representado por outra animação e o estado de ação é representado por
uma imagem estática que o programador
programador define na construção do objeto.
O controle de como este componente é apresentado é feito por uma thread, que
controla o vetor de imagens formado pelas animações associadas ao componente.
Na figura 6.15 podemos ver um exemplo de implementação e o resultado
res
posterior
do uso do componente MAnimationButton.
MAnimationButton
Figura 6.15: Construção e resultado de um componente MAnimationButton.
MAnimationButton
6.5.11 MImageRender
Como não temos um padrão de resolução no ambiente de televisão digital, as
imagens utilizadas nas interfaces devem ser redimensionadas conforme a resolução e o
tamanho da tela. Para realizar esta tarefa o componente MImageRender foi
implementado.
Sua principal
cipal função é receber um objeto do tipo Image ou do tipo BufferedImage e
redimensionar esta imagem de acordo com o tamanho desejado, mantendo a escala
original da imagem
m ou utilizando uma nova escala que é definida pelo usuário.
Para realizar a tarefa de redimensionamento, o componente redimensiona cada pixel
da imagem para um tamanho menor ou maior e desenha estes novos pixels em uma
imagem auxiliar, que no final da operação é retornada.
55
6.5.12 MDateChoice
A escolha de uma data para uma finalidade em programas
programas que rodam em PCs
geralmente são feitas com um calendário que é mostrado ao usuário ou com múltiplas
caixas de seleção, porém para facilitar este processo para o usuário e tornar esta escolha
possível interagindo somente com um único objeto, o componente
comp
MDateChoice foi
implementado.
O funcionamento básico do componente acontece da seguinte forma:
• Uma vez no estado travado, o usuário pode trocar de campos (dia, mês e ano)
utilizando as teclas direcionais para a direita e para a esquerda do controle
remoto.
• Estando um dos campos em modo de seleção, o usuário pode alterar o valor deste
campo utilizando as teclas direcionais para cima e para baixo do controle
remoto.
• Conforme o usuário interage com o componente, os campos auxiliares são
atualizados, para
ra manter a consistência dos dados das datas apresentadas na tela.
Para realizar o controle da data atual e dos limites de datas, a classe
GregorianCalendar [JCP06
JCP06]] foi utilizada realizando os controles internos sobre as
datas.
Na figura 6.16 podemos ver um exemplo de implementação e o resultado posterior
do uso do componente MDateChoice.
MDateChoice
Figura 6.16: Construção e resultado de um componente MDateChoice.
MDateChoice
6.5.13 MVirtualKeyboard
A entrada de dados é feita de forma restrita no ambiente de televisão digital, pois o
usuário nem sempre tem um teclado completo a disposição no set-top-box
box e o principal
dispositivo usado para a entrada de dados é o controle remoto.
Para facilitar a entrada
da de dados o componente MVirtualKeyboard foi criado. Sua
principal função é, em conjunto com o componente MTextField,, oferecer um teclado
virtual para que o usuário navegue utilizando teclas direcionais para selecionar as letras
que irão compor palavras inseridas
nseridas no MTextField.
56
O teclado associa quatro operações às teclas coloridas do controle remoto, desta
forma o acesso a essas funções pode ser feito através de um toque em algum dos botões
associados pelas cores.
Na figura 6.17 podemos ver um exemplo de implementação e o resultado posterior
do uso do componente MVirtualKeyboard.
MVirtualKeyboard
6.17: Construção e resultado de um componente MVirtualKeyBoard
VirtualKeyBoard.
.
6.5.14 MTextField
Para ser utilizado exclusivamente em conjunto com o componente
MVirtualKeyboard,, o componente MTextField foi construído com o intuito de ser uma
caixa de texto simples, que quando acionada pelo usuário, mostra um objeto
MVirtualKeyboard que é associado a ele e se comunica com este objeto.
Este objeto se comunica com o objeto MVirtualKeyboard associado através do uso
da classe ActionEvent [JCP06]. Na figura 6.18 podemos ver um exemplo de
implementação e resultado do uso do objeto MTextField em conjunto com o
componente MVirtualKeyboard.
MVirtualKeyboard
6.18: Construção e resultado de um componente MTextField.
MTextField
57
6.6 Integração de princípios de usabilidade
Durante a construção dos componentes, alguns princípios de usabilidade foram
considerados para que os componentes fossem construídos a fim de ajudar os
desenvolvedores na criação de interfaces que contemplem estes princípios de
usabilidade.
Na tabela 6.3, há uma descrição de quais princípios foram levados em conta e onde
estes princípios foram aplicados na construção de quais componentes.
Componente
Princípio
usabilidade
de Como foi implementado
Todos
Baixa taxa de erros
MLabel
Espaço
entrelinhas
que
em
impressos.
MLabel
Utilização de cores Plano
de
fundo
se
ajusta
mais escuras nos automaticamente ao tamanho do texto,
planos de fundo.
desta forma a leitura fica mais fácil
quando uma cor escura é usada como
plano de fundo.
MSlider
Facilidade
memorização.
MPanel
Facilidade
de Implementação do mecanismo de
aprendizado.
/ troca de foco através de teclas
Satisfação subjetiva. direcionais.
MPanel
Utilização de cores Implementação da possibilidade de
escuras nos planos integração de uma imagem ou de uma
de fundo.
cor estática ao plano de fundo do
MPanel.
MColoredPanel
Evitar saturação de Utilização de cores menos saturadas
cores na tela.
nos desenhos pré definidos pelo
componente.
MColoredPanel
Facilidade
memorização.
Tratamento
de
exceções
nos
componentes e disparo de exceções
não tratadas permitindo o tratamento
pelo desenvolvedor que utiliza os
componentes.
nas Implementação de métodos que
maior aumentam o espaço de desenho entre
textos as linhas quando um MLabel possui
mais de uma linha.
de O componente oferece a possibilidade
de desenho fixo, e a flexibilidade de
desenho que facilita a integração com
a interface desenvolvida.
de Interatividade baseada nas cores do
controle remoto. Facilitando a
identificação pelo usuário.
58
MColoredControlButton Facilidade
memorização
de Método de desenho estático, facilita a
memorização da ação do componente.
MColoredControlButton Evitar saturação de Utilização de cores menos saturadas
cores na tela.
nos desenhos pré definidos pelo
componente.
MImageButton
Utilização de cores Flexibilização
mais escuras nos parte gráfica.
planos de fundo.
do
componente na
MTextButton
Espaço
entrelinhas
que
em
impressos.
MDateChoice
Utilização de cores Flexibilização na escolha das cores do
mais escuras nos componente.
planos de fundo.
MDateChoice
Espaço
entrelinhas
que
em
impressos.
MDateChoice
Facilidade
aprendizado.
Facilidade
memorização.
de Componente intuitivo, muda cores
/ conforme o estado, facilitando o
de aprendizado e a memorização.
MVirtualKeyboard
Facilidade
aprendizado.
de Interação realizada
direcionais.
MVirtualKeyboard
Facilidade
memorização.
de Ações pré definidas para os botões
coloridos do controle remoto.
MVirtualKeyboard
Evitar saturação de Utilização de cores menos saturadas
cores na tela.
nos desenhos pré definidos pelo
componente.
nas Implementação de métodos que
maior aumentam o espaço de desenho entre
textos as linhas quando um MLabel possui
mais de uma linha.
nas Textos utilizados com
maior entrelinhas aumentado.
textos
com
espaço
teclas
Tabela 6.3: Relação entre princípios de usabilidade e os componentes construídos.
Após a implementação e o teste de todos os componentes quanto as suas funções, um
caso de uso foi criado para realizar testes quanto ao consumo de memória dos
componentes.
O caso de uso criado para testar os componentes e os seus resultados serão
apresentados no capítulo a seguir.
59
7 ESTUDO DE CASO
Para realizar a validação dos componentes construídos neste projeto, um estudo de
caso foi definido para testar o uso dos componentes em uma aplicação para a televisão
digital, e em outro caso, avaliar o consumo de memória dos componentes quando
utilizados.
Na criação e desenvolvimento dos componentes, a IDE NetBeans [NET08] foi
utilizada, pois como a API construída neste projeto utiliza somente componentes
presentes na biblioteca padrão da linguagem Java, a IDE NetBeans é compatível com o
desenvolvimento dos componentes desta API.
Além disso, nos primeiros testes realizados com os componentes a própria IDE foi
utilizada como software de testes e os componentes eram testados em Frames da API
AWT, portanto, apesar de que os componentes criados nesta API tenham sido
construídos e implementados tendo como alvo principal o ambiente de televisão digital,
nada impede que eles sejam utilizados em aplicações compatíveis com a plataforma
J2SE.
Porém a realização de testes utilizando a IDE NetBeans não pode ser considerada
uma simulação de um ambiente de televisão digital interativa. Tendo como solução a
utilização de um emulador ou de um set-top-box real. Todavia, o teste de uso dos
componentes em um set-top-box real ainda não é possível, pois ainda não há no
mercado um set-top-box que implemente o middleware Ginga e ainda não há
emuladores ou simuladores compatíveis com o padrão de middleware brasileiro.
Por isso, para a validação dos componentes quando usados em uma aplicação para a
televisão digital, o emulador xletview [XLE08] foi utilizado. Este emulador é um
projeto open source que tem como objetivo emular o uso de xlets compatíveis com o
padrão de middleware MHP.
O emulador xletview permite que os desenvolvedores testem os seus xlets sem a
necessidade de simular o set-top-box completamente, ele apenas implementa as APIs
utilizadas no framework responsável pela execução de aplicativos Java no middleware
MHP.
Para iniciar a execução de um xlet, o usuário deve acessar o menu Applications e
posteriormente o sub menu ManageApplications. Acessando este sub menu, uma
pequena janela aparece e nesta tela o usuário escolhe um nome para a sua aplicação e
indica o local onde os aquivos de extensão class gerados na compilação do xlet se
encontram.
Após a realização desta etapa, o usuário escolhe o item que corresponde a sua
aplicação no menu Applications e o xlet é executado.
60
Para simular o uso de um controle remoto, o desenho de um controle remoto é
mostrado sempre no lado direito da janela do emulador, e os eventos de controle remoto
são gerados conforme o usuário clica com o mouse nos botões deste controle remoto.
A interface do emulador é simples e as configurações de execução são limitadas. Na
figura 7.1 podemos ver a interface básica do programa.
Figura 7.1: Interface do software xletview.
Além da definição do cenário de teste, foi definida uma lista de componentes desta
API que foram testados e inseridos na aplicação criada.
Os seguintes componentes foram utilizados no teste de uso:
•
•
•
•
•
•
•
•
•
•
•
MLabel
MPanel
MTextButton
MImageButton
MTextField
MVirtualKeyboard
MSlider
MDateChoice
MAnimationButton
MImageItem
MColoredControlButton
Como container principal, a classe HScene da API HAVi foi utilizada, pois o
emulador xletview foi construído sob as especificações no middleware MHP, que utiliza
o container HScene como container principal para a camada de aplicação.
61
7.1 Testes
Para a realização do teste de uso dos componentes, um projeto foi criado na IDE
NetBeans e o arquivo jar da API criada foi adicionado ao projeto. Por um problema de
ligação do emulador, os arquivos de extensão class também precisaram ser copiados,
isto não precisou ser feito no teste de consumo de memória, pois este teste foi realizado
na própria IDE, que realizou a ligação com o arquivo jar de forma correta, portanto, a
ligação trata-se de um problema do emulador xletview.
A figura 7.2 demonstra o uso dos componentes em seu estado inicial e em um
segundo estado, onde o MImageButton utilizado na primeira tela foi acionado, além
disso, a figura indica quais componentes foram utilizados e onde foram utilizados na
emulação feita pelo software xletview.
Figura 7.2: Emulação dos componentes no software xletview.
62
Além de testar o uso dos componentes, outro cenário foi criado para avaliar o
consumo de memória dos componentes criados, este teste foi realizado na própria IDE
através do uso de um profiler5 que mede o uso de memória dos componentes em tempo
de execução.
Neste cenário, os componentes foram inseridos dentro de um container Frame
[JCP06], pois o profiler funciona somente com projetos criados para o ambiente J2SE,
porém isto não interfere na medição de memória dos componentes e não diferencia o
uso de memória dos componentes quanto ao uso em uma aplicação no ambiente de
televisão digital.
7.2 Resultados
Com o estudo de caso implementado e testado, alguns resultados foram obtidos.
Talvez o resultado mais interessante tenha sido a facilidade de programação e
integração dos componentes com exemplos já construídos em outros frameworks.
Isso se deve ao fato de que os componentes da API seguem um padrão de nomeação
de métodos e de atributos, desta forma um desenvolvedor que já programa na
linguagem Java irá reconhecer o nome dos métodos dos componentes. Além disso, um
javadoc completo foi gerado a partir do código final dos componentes, podendo ser
consultado pelo programador caso haja alguma dúvida quanto a utilização dos
componentes.
A geração do javadoc da API proposta por este trabalho foi realizada através da IDE
NetBeans e contém a descrição de cada método público ou protegido das classes criadas
na API. Além disso, as constantes que podem ser utilizadas por outras classes são
descritas quanto a sua funcionalidade e onde essas constantes podem ser utilizadas na
API proposta.
Uma das vantagens detectadas após a realização dos testes é demonstrada na tabela
7.1, onde o tamanho do pacote gerado pela API proposta é muito menor se comparado
ao tamanho do pacote gerado por uma API gráfica de uso geral como a API swing.
Pacote
Tamanho do pacote
(KB)
Swing.jar
2420
MaranAPI.jar
91
Tabela 7.1: Comparação de tamanhos de pacotes.
Outro resultado importante obtido com o teste dos componentes em conjunto com o
profiler oferecido pela IDE NetBeans foi a quantidade de memória ocupada por cada
5
Profiler – Recurso de monitoração de utilização de recursos por programas construídos na linguagem
Java, é capaz de realizar medições em tempo de execução do programa que será analisado. [NET08]
63
instância de objeto utilizado em uma aplicação, os resultados obtidos neste teste podem
ser vistos na figura 7.3.
Figura 7.3:: Resultado dos testes de ocupação de memória doss componentes
construídos.
Além de medir a ocupação de memória de alguns dos componentes criados por este
trabalho, uma medição semelhante foi realizada utilizando componentes gráficos da API
AWT para que uma comparação fosse realizada entre a questão de ocupação de memória
dos componentes. Os resultados das medições realizadas nos componentes da API AWT
podem ser vistos na figura 7.4.
7.
Figura 7.4:: Resultado dos testes de ocupação de memória dos componentes da API
AWT.
Foram comparados apenas os componentes da biblioteca AWT que possuem
funcionalidade semelhante com alguns dos componentes criados pela API construída
neste projeto.
Os resultados doss testes mostram que a API construída é tão leve quanto os
componentes mais básicos da API AWT e os componentes construídos ocupam pouco
espaço em memória,, apesar de oferecerem funcionalidades extras se comparados aos
componentes testados da API AWT, além disso, o pouco espaço ocupado em memória
pelos componentes construídos se trata de uma característica importante pelo fato de
que set-top-boxes
boxes são dispositivos que possuem capacidade de processamento
pr
e
memória limitados, características típicas da plataforma J2ME.
64
8 CONCLUSÃO
O interesse sobre televisão digital interativa tem aumentado constantemente
conforme os padrões brasileiros têm sido definidos e as primeiras soluções de
desenvolvimento têm sido lançadas no mercado. Isto é visto claramente se
considerarmos o grande número de novos fóruns de desenvolvimento focados
especialmente no ambiente de televisão digital interativa.
Primeiramente, este trabalho mostrou alguns conceitos básicos e apresentou um
breve estudo sobre os principais frameworks utilizados para a construção de interfaces
em sistemas de televisão digital, analisando as possibilidades de utilização e as
limitações existentes nestes frameworks.
Após o estudo realizado sobre os frameworks existentes, um estudo mais
aprofundado foi realizado tendo como foco a usabilidade de um modo geral na criação
de interfaces e alguns princípios de usabilidade que são desejáveis na construção de
interfaces específicas para o ambiente de televisão digital interativa.
Foram enumerados alguns princípios de usabilidade que seriam utilizados para a
construção dos componentes gráficos da API e então a implementação da API gráfica
foi realizada e os componentes desta API foram testados no emulador xletview.
A compatibilidade com todos os padrões de middlewares foi garantida graças ao uso
de classes que integram a API AWT que é um padrão consolidado na linguagem Java,
porém apesar de ter como mérito a compatibilidade, traz alguns bugs e limitações que
foram constatados durante o desenvolvimento do trabalho, principalmente no que se
refere à falta de implementações de objetos 2d, o que com certeza ajudaria na
implementação dos desenhos dos componentes e na possível criação de animações entre
as transições feitas pelos componentes.
O estudo dos princípios de usabilidade para a televisão teve grande importância no
desenvolvimento dos componentes, pois estes foram concedidos de forma que ajudem
os desenvolvedores a criarem interfaces que contemplem estes princípios de
usabilidade.
Outro fator determinante na construção da API proposta foi a facilidade de uso que
esta oferece ao programador, que conta com uma ferramenta open source,
completamente documentada e com características de programação semelhantes aos
frameworks que já existem no mercado, desta forma uma possível mudança de
utilização de tecnologias ocorre mais facilmente.
Um ponto importante a ser destacado, é que este trabalho contribui com a
colaboração do meio acadêmico na criação de projetos e na definição de padrões que
serão utilizados no sistema de televisão digital brasileiro.
65
8.1 Sugestões para Trabalhos futuros
Ao longo do desenvolvimento deste trabalho alguns temas interessantes foram
identificados e considerados importantes para o aprofundamento e desenvolvimento de
trabalhos futuros. Desta forma como trabalhos futuros podemos sugerir:
•
•
•
•
•
Implementação de um módulo baseado em princípios de usabilidade para a
linguagem LUA e o ambiente de televisão digital: Realizar um estudo
aprofundado sobre princípios de usabilidade e aplicá-los na implementação de
um módulo open source que ofereça componentes gráficos prontos e flexíveis
para a criação de scripts feitos na linguagem LUA.
Implementação de um módulo de controle de animações compatíveis com os
componentes criados neste trabalho de conclusão: Realizar um estudo profundo
na API AWT e considerar a implementação de um módulo capaz de controlar e
integrar animações de transição a componentes construídos a partir da API AWT,
conseqüentemente sugerindo a integração deste módulo com a API criada neste
trabalho.
Criação de um ambiente de avaliação de usabilidade utilizando os componentes
criados neste trabalho: Através de estudos realizados sobre ambientes de
avaliação de usabilidade de interfaces, criar um estudo de caso utilizando os
componentes gráficos criados nesta API e realizar testes de usabilidade
avaliando os mesmos.
Criação de um conjunto de classes que implementem mecanismos de
acessibilidade que possam ser integrados aos componentes criados neste
trabalho.
Realização de um estudo detalhado sobre os princípios de usabilidade
específicos para o ambiente de televisão digital, ambiente desktop e ambiente
web; Realizar um comparativo entre estes princípios e elencar as principais
diferenças e semelhanças entre os ambientes do ponto de vista da usabilidade.
66
9 REFERÊNCIAS BIBLIOGRÁFICAS
[TEI06]
Teixeira, Lauro H. P. - Usabilidade e Entretenimento na TV Digital
Interativa.
Disponível
em:
http://www.unirevista.unisinos.br/_pdf/UNIrev_Teixeira.PDF. Acesso em: 12 de abr.
2008.
[IBG05]
Instituto Brasileiro de Geografia e Estatística – Comentários sobre a
pesquisa
nacional
por
amostra
de
domicílios.
Disponível
em:
http://www.ibge.gov.br/home/estatistica/populacao/trabalhoerendimento/pnad2005/com
entarios2005.pdf. Acesso em: 20 de abr. 2008.
[OLI05]
Oliveira, Carina T. – Um estudo sobre os padrões de middleware para
televisão
digital
interativa.
Disponível
em:
www.gta.ufrj.br/~carina/artigos/MonografiaCarina.pdf. Acesso em: 26 de abr. 2008.
[ROG06]
Rodrigues, Rogério F.;Soares, Luiz F.G.– Produção de Conteúdo
Declarativo
para
TV
Digital.
Disponível
em:
http://www.ncl.org.br/documentos/SEMISH2006.pdf. Acesso em: 15 de abr. 2008.
[SOU03]
Leite, L., Batista, C., Souza, G., Kuleza, R., Alves, L., Bressan, G.,
Rodrigues, R., Soares, L. - Ginga-J: The procedural middleware for the brazillian digital
TV
system.
Disponível
em:
http://www.lavid.ufpb.br/papers/artigo_GingaJ_Revista_SBC.pdf. Acesso em: 29 de abr. 2008.
[DVB07]
Digital Video Broadcast Group – Globally Executable MHP (GEM)
Specification
1.1.1.
Disponível
em:
http://dvb.org/technology/standards/a103r1.tm3567r1.GEM1.1.1.pdf. Acesso em: 10 de
abr. 2008.
[SUN05]
Sun Microsystems – CDC: Java platform technology for connected
devices.
Disponível
em:
http://java.sun.com/javame/technology/cdc/cdc_whitepaper.pdf. Acesso em: 02 de abr.
2008.
[JTV00]
BartCalder, JonCourtney, BillFoote, LindaKyrnitszke, DavidRivas,
ChihiroSaito, JamesVanLoo, TaoYe – The Java TV API Whitepaper. Disponível em:
http://java.sun.com/products/javatv/jtv-1_0-spec_overview.pdf. Acesso em: 25 de abr.
2008.
67
[ABN07]
Associação Brasileira de Normas Técnicas - Televisão digital terrestre Codificação de dados e especificações de transmissão para radiodifusão digital - Parte 2:
Ginga-NCL para receptores fixos e móveis - Linguagem de aplicação XML para
codificação
de
aplicações.
Disponível
em:
http://www.abnt.org.br/imagens/Normalizacao_TV_Digital/ABNTNBR156062_2007Vc_2008.pdf. Acesso em: 15 de maio 2008.
[MHP08]
Digital Video Broadcast Group - Official website for DVB-MHP and
DVB-GEM, Open middleware for Interactive TV. Disponível em: www.mhp.org/.
Acesso em: 05 de outubro de 2008.
[SUN08]
Sun Microsystems – Painting in AWT and SWING. Disponível em:
http://java.sun.com/products/jfc/tsc/articles/painting/#awt. Acesso em: 16 de setembro
de 2008.
[SUF04]
Subgrupo de Trabalho 2 do CAPDA - Comitê das Atividades de Pesquisa
e Desenvolvimento na Amazônia. - TV Digital Interativa. Versão 1.0. Disponível em:
http://www.suframa.gov.br/download/documentos/programa_tv_digital.pdf, Acesso em
: 28 de outubro de 2008.
[DIN08]
Barbosa, Simone D. J., Soares, Luis F. G. – TV Interativa no Brasil se faz
com ginga, fundamentos, padrões, autoria declarative e usabilidade. Disponível em:
www.ncl.org.br/documentos/JAI2008.pdf. Acesso em: 04 de outubro de 2008.
[HAV01]
HAVi, Inc - Specification of the Home Audio/Video Interoperability
(HAVi) Architecture, Chapter 8 – Level 2 User Interface. Disponível em:
http://www.havi.org/techinfo/docs/Chapter8-HAVi1.1-May15.pdf. Acesso em: 25 de
setembro de 2008.
[BEC06]
Becker, Valdecir; Fornari, Augusto; Filho, Günter H. Herweg; Montez,
Carlos - Recomendações de Usabilidade para TV Digital Interativa. Disponível em:
http://www.itvproducoesinterativas.com.br/pdfs/A-usabilidade_final-sbrc.pdf. Acesso
em: 08 de setembro de 2008.
[HDO01]
HAVi,
Inc
–
The
HAVi
Javadoc.
Disponível
em:
http://www.havi.org/techinfo/docs/JavadocL2V1.1.zip. Acesso em: 19 de abril de 2008.
[DOU03]
Diário Oficial da união. Decreto 4.901, de 26 de novembro de 2003.
Disponivel
em:
http://itvproducoesinterativas.com.br/pdfs/legislacao/decreto_4901_2003.pdf. Acesso
em: 02 de novembro de 2008.
[BBC08]
British Broadcasting Corporation - BBCi Style Guide. Disponível em:
www.bbc.co.uk/commissioning/bbci/pdf/styleguide2_1.pdf Acesso em: 11 de outubro
de 2008.
68
[POZ06]
Pozzo, Douglas Dal – Aplicativos para televisão digital interativa.
Disponível
em:
http://www.enapet.ufsc.br/anais/APLICATIVOS_PARA_TELEVISAO_DIGITAL_IN
TERATIVA.pdf. Acesso em: 15 de julho de 2008.
[EDW03]
Edward M. Schwalb (2003) - “iTV Handbook: Technologies and
Standards”, Prentice Hall PTR, Julho de 2003.
[PIC06]
Piccolo, Lara S. Godoy; Baranauskas, Maria Cecília C - Desafios de
Design
para
a
TV
Digital
Interativa.
Disponível
em:
http://portal.acm.org/citation.cfm?id=1298023.1298025&coll=GUIDE&dl=&CFID=42
75513&CFTOKEN=23447516. Acesso em: 14 de outubro de 2008.
[SOA06]
Soares, Luiz F. G.; Rodrigues, Rogério F.; Barbosa, Simone D. - Manual
de Construção de Programas Audiovisuais Interativos Utilizando a NCL 2.3 – Perfil
Básico. 1ª Edição. Disponível em: www.ncl.org.br/documentos/manualNCL2_3.pdf.
Acesso em: 17 de julho de 2008.
[JCP06]
Java Community Process - JSR 217: Personal Basis Profile 1.1 Javadoc.
Disponível em:http://java.sun.com/javame/reference/apis/jsr217/. Acesso em: 12 de
abril de 2008.
[LUA08]
The programming language LUA website. Diponível
http://www.lua.org/portugues.html. Acesso em: 23 de outubro de 2008.
em:
Grupo de Tecnologia em Computação Gráfica - Tecgraf website. Disponível
[TEL08]
em: http://www.tecgraf.puc-rio.br/. Acesso em: 19 de setembro de 2008.
[CEL08]
Celes, Waldemar; Figueiredo, Luiz H. de; Ierusalimschy, Roberto - A
Linguagem Lua e suas Aplicações em Jogos. Disponível em: http://www.tecgraf.pucrio.br/~lhf/ftp/doc/wjogos04.pdf. Acesso em 09 de novembro de 2008.
[SWP08]
Rodrigues, Rafael Ferreira – How to, Ginga-NCL com Java, Xlets como
objetos
de
mídia.
Disponível
em:
http://www.softwarepublico.gov.br/dotlrn/clubs/ginga/gingancl/xowiki/gingancl_java.
Acesso em: 02 de novembro de 2008.
[MON05]
MONTEZ, Carlos; BECKER, Valdecir. TV Digital Interativa: conceitos,
desafios e perspectivas para o Brasil. Florianópolis: Ed. da UFSC, 2005. 2ª edição.
[XLE08]
XleTView website. Disponível em: http://www.xletview.org/. Acesso
em: 25 de abril de 2008.
[ASS08]
Assis, Thiago Rocha de – Desenvolvendo aplicações para TV Digital e
Interativa
usando
Java.
Disponível
em:
http://www.youlabs.com.br/resources/tutorials/YouLabs-TVDigital-Desenvolvendo.pdf
Acesso em: 15 de abril de 2008.
[NIE08]
Nielsen, Jacob – Usability 101: Introduction to usability. Disponivel em:
http://www.useit.com/alertbox/20030825.html. Acesso em: 14 de setembro de 2008.
69
[NIE97]
Nielsen, J. (1997) WebTV Usability Review. Alertbox. Disponível em:
http://www.useit.com/alertbox/9702b.html . Acesso em 05 de novembro de 2008.
[KNU05]
Knudsen, Jonathank; Li, Sing - Beginning J2ME From novice to
Professional. 3ª Ed. 2ª Pg. , 2005, Editora Apress.
[SUN08a]
Sun
Microsystems
Java
website.
http://java.sun.com/java. Acesso em: 01 de novembro de 2008.
Disponível
em:
[SUN08b]
Sun Microsystems - Java Micro Edition website. Disponível em:
http://java.sun.com/javame/index.jsp. Acesso em: 03 de novembro de 2008.
[ATS08]
Advanced Television Systems Comitee - Atsc website. Disponível em:
http://www.atsc.org/. Acesso em 16 de novembro de 2008.
[DIB08]
Digital Broadcasting Experts Group - Isdb website. Disponível em:
http://www.dibeg.org/. Acesso em 16 de novembro de 2008.
[PUC08]
Pontífica Universidade Católica do Rio de Janeiro – Telemídia website.
Disponível em: http://www.telemidia.puc-rio.br/pt/index.html. Acesso em: 17 de junho
de 2008.
[UFP08]
Universidade Federal da Paraíba – LAVID website. Disponível em:
http://www.lavid.ufpb.br/. Acesso em 17 de junho de 2008.
[DVB07a]
Digital Video Broadcast Group – Multimedia Home Platform (MHP)
Specification 1.2. Disponível em: http://www.mhp.org/specs/a107_mhp_12.zip. Acesso
em: 15 de abril de 2008.
[NET08]
Netbeans
org.
–
Netbeans
website.
http://www.netbeans.org. Acesso em 12 de novembro de 2008.
Disponível
em:
[ARI99]
Association of Radio Industiries and Bisinesses (ARIB) - Overview of BXML/BML draft specification developed by ARIB. Disponível em:
http://lists.w3.org/Archives/Public/www-tv/1999OctDec/att-0031/01-BML-BXMLAbst2.htm. Acesso em 29 de novembro de 2008.
[KRU06]
Krug, Steve - Don’t make me think! - ISBN:8576081180 - 2º edição Alta Books – 2006.
Download

uma api gráfica de auxílio ao desenvolvimento de aplicações