Buscar

Livro-Texto Unidade IV poo

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

112
Unidade IV
Unidade IV
Dando continuidade ao desenvolvimento de aplicativos Android, vamos agora criar um aplicativo 
com interface responsiva e que realiza alguns cálculos.
7 CALCULADORA DE GORJETAS
Vamos criar um aplicativo que calcule rapidamente o valor de gorjetas típicas (5, 10 e 15%), assim 
como gorjetas personalizadas. Desta vez, nosso aplicativo vai possuir comportamento além do layout 
da activity. Vamos separar o processo de elaboração do aplicativo em duas partes. Primeiro, vamos criar 
o projeto gráfico do aplicativo, o qual será responsivo. Depois, vamos criar o código que fará com que o 
aplicativo execute as suas tarefas.
 Observação
É importante sempre criar interfaces gráficas responsivas, ou seja, que 
são capazes de se adequar aos diversos dispositivos em que serão utilizadas, 
nas diversas condições e cenários de uso. Por exemplo, uma interface 
gráfica responsiva deve funcionar igualmente bem, seja ela utilizada em 
um smartphone, em um tablet, em um notebook, na orientação paisagem 
ou retrato, usando tela de toque, caneta digitalizadora, tela de toque ou o 
que mais for desenvolvido.
7.1 Layout do aplicativo Calculadora de Gorjetas
Inicie o seu novo projeto no Android Studio do mesmo modo que você fez no projeto anterior. 
Crie um novo projeto com o modelo Empty Activity, defina o nome do projeto como “Calculadora de 
Gorjeta”, o nome do pacote como “br.unip.calculadoraDeGorjeta”, mantenha a linguagem como “Java” 
e certifique-se de que o SDK mínimo seja API 16 (Jelly Bean).
O assistente cria uma Activity com o TextView “Hello World!”. Selecione o TextView no editor gráfico 
ou na árvore de componentes e o exclua.
Nossa Activity poderá ser grande demais para ser apresentada por inteiro na tela de dispositivos 
menores ou se o dispositivo for girado para a orientação paisagem. Assim, vamos criar um projeto 
gráfico que utiliza uma barra de rolagem vertical. Arraste o Container ScrollView para o RelativeLayout 
da árvore de componentes, como mostrado na figura a seguir.
113
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Observação
Ao criar seu aplicativo, selecione como SDK mínimo a API 16. 
Afinal, você vai testar seu aplicativo em um emulador que está usando 
justamente a API 16.
Figura 97 – Inserindo uma barra de rolagem ao layout do aplicativo
Para criar a interface gráfica, vamos utilizar o layout TableLayout, que organiza os componentes 
como uma tabela. Para tanto, comece apagando o LinearLayout, criado automaticamente ao inserir o 
ScrollView. A seguir, arraste o TableLayout para dentro do ScrollView na árvore de componentes.
114
Unidade IV
Figura 98 – Definindo o layout da interface gráfica como TableLayout
Devem-se sempre criar interfaces gráficas responsivas, não importa se o aplicativo será desktop, 
móvel ou web. Todo aplicativo deve se adaptar às mais variadas modalidades de visualização. Isso 
é particularmente importante para dispositivos móveis, pois eles se apresentam em uma variedade 
enorme de tamanhos, resoluções e combinações entre os dois. Um aplicativo deve se comportar de 
maneira semelhante em qualquer dispositivo compatível.
O componente TableLayout irá redimensionar e reposicionar os componentes gerenciados por 
ele de maneira automática sempre que a tela mudar de tamanho – ao ser instalado em dispositivos 
diferentes – ou se a tela mudar de orientação – entre retrato e paisagem. Para tanto, precisamos indicar 
ao TableLayout quais colunas ele pode esticar para ocupar toda a sua área disponível. Primeiro, com o 
TableLayout selecionado, expanda a seção All Attributes para exibir todos os atributos. Depois, vamos 
modificar sua propriedade strechColumns para o valor “1, 2, 3” para indicar que a segunda, terceira e 
quarta colunas podem ser esticadas – a numeração das colunas inicia em zero, como em qualquer array 
ou coleção em Java.
115
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 99 – Exibindo todos os atributos do TableLayout
Figura 100 – Definindo as colunas que podem ser esticadas no layout 
116
Unidade IV
A interface gráfica que projetamos apresenta sete linhas de componentes. Assim, vamos arrastar sete 
TableRow para dentro do TableLayout na árvore de componentes. Também vamos alterar a propriedade 
id de cada TableRow para atribuir um nome único a cada um. Atribua os nomes tableRow1, tablerRow2, 
..., tableRow7. Sua árvore deve apresentar a estrutura mostrada a seguir:
Figura 101 – Inserindo sete linhas ao layout de tabela
Na tableRow1, adicione um TextView. Em sua propriedade text, em vez de definir o texto “Conta” 
diretamente, vamos criar uma entrada no arquivo string.xml com o valor que será apresentado no 
TextView. Para tanto, clique no botão ao lado do espaço de texto na propriedade text.
117
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 102 – Definindo um recurso de texto ao TextView
Na janela que se abre, clique no botão “+” e selecione String value.
118
Unidade IV
Figura 103 – Acrescentando um novo recurso de texto
Na janela que se abre, defina o nome do recurso como “conta” e o valor do recurso com “Conta”.
119
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 104 – Definindo recursos de texto
Clique em OK duas vezes e veja o resultado de sua edição. À primeira vista, pode parecer uma 
maneira complicada e desajeitada de definir o texto de um TextView. A razão para fazer isso é que o 
TextView só precisa saber o nome do recurso de texto que irá apresentar, que, no caso, é “@string/conta”. 
Já o valor desse recurso, por enquanto, é “Conta”, definido no arquivo “string.xml”. A vantagem, agora, é 
que é bastante fácil criar traduções dos textos presentes nesse arquivo para diversos idiomas diferentes. 
Quando isso é feito, o seu aplicativo irá se configurar automaticamente para o idioma do sistema 
operacional no qual será instalado, claro, desde que a tradução para tal idioma tenha sido feita.
Abra o arquivo “string.xml” e confira o recurso de texto que você acabou de criar.
120
Unidade IV
Figura 105 – Exibindo recursos de texto no arquivo “strings.xml”
Adicione agora ao tableRow1 um Tex Number (Decimal). Defina sua id como “contaEditText”. Defina 
também sua propriedade ems para nenhum valor. Um valor na propriedade ems indica um tamanho fixo 
para o EditText, o que acaba fazendo com que o layout ultrapasse os limites da tela.
121
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 106 – Configurando o campo de texto numérico para receber o valor da conta
Figura 107 – Definindo o atributo ems de contaEditText
Além disso, queremos que o contaEditText ocupe o espaço total das três colunas restantes da tabela. 
Assim, vamos definir a sua propriedade layout_span para o valor 3.
122
Unidade IV
Figura 108 – Definindo a abrangência da célula contaEditText
Na tableRow2, adicione um textView. Em sua propriedade text, crie uma nova entrada no arquivo 
strings.xml chamada “explicacao1” com o valor “Abaixo estão os valores típicos de gorjeta”. Defina sua 
propriedade layout_span para 4, de modo que ela ocupe as quatro colunas da tabela.
Figura 109 – Inserindo o primeiro texto explicativo
123
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Na tableRow3, adicione um TextView com uma nova entrada no arquivo strings.xml chamada 
“percentual” com o valor “Percentual”.
Adicione três Text Fields Number (Decimal) com os textos “5”, “10” e “15”. Esses textos podem ser 
definidos diretamente na propriedade text de cada EditText, pois nunca seriam traduzidos.
Selecione os três EditText clicando neles na árvore de componentes e mantendo a tecla [CTRL] 
pressionada. Isso permite que você selecione mais de um componente simultaneamente. Com isso, a 
palheta de propriedades exibe apenas as propriedades em comum que os componentes possuem. Altere 
a propriedade ems das três para nada.
Figura 110 – Inserindo os elementos de tableRow3
Na tableRow4, crie um TextView com uma nova entrada no arquivo strings.xmlchamada “gorjeta” 
com o valor “Gorjeta”. Adicione três Text Fields Number (Decimal). Eles receberão os valores calculados 
das gorjetas padrão, por isso, devem ser nomeados como ngorjeta5EditText, gorjeta10EditText e 
gorjeta15EditText. Não se esqueça de apagar o valor da propriedade ems deles.
124
Unidade IV
Figura 111 – Inserindo os elementos de tableRow4
Ao tableRow5, adicione um TextView com uma nova entrada no arquivo strings.xml de nome 
“explicacao2” e valor “Defina uma gorjeta de valor personalizado”. Defina seu layout:span para 4.
125
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 112 – Inserindo a segunda linha de explicação
Adicione ao tableRow6 um TextView. Dessa vez não é preciso definir uma nova entrada no arquivo 
strings.xml. Ela já existe e vamos reutilizá-la. Clique no botão ao lado da propriedade text. Escolha a 
entrada “percentual” do strings.xml do seu projeto.
126
Unidade IV
Figura 113 – Selecionando um recurso de texto preexistente
Adicione um Widgets:SeekBar ao tableRow6. Defina sua id como percentualSeekBar. Altere sua 
propriedade layout_span para 2.
Adicione um Text Field Number (Decimal). Defina sua id para percentualEditText e apague o valor de 
sua propriedade ems.
Na tableRow7, adicione um TextView com a entrada “gorjeta” do arquivo strings.xml. Adicione um 
Text Field Number (Decimal). Defina seu layout_span para 3 e apague sua propriedade ems. Defina seu 
id para gorjetaEditText.
127
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 114 – Completando o layout do aplicativo
 Lembrete
Devem-se sempre criar interfaces gráficas responsivas, não importa se 
o aplicativo será desktop, móvel ou web. Todo aplicativo deve se adaptar 
às mais variadas modalidades de visualização, se comportando de maneira 
semelhante em qualquer dispositivo compatível.
Vamos mudar a cor e o tamanho dos textViews. Selecione-os todos mantendo a tecla [CTRL] 
pressionada. Altere a propriedade textColor para #000000 (preto) e a propriedade textSize para 18sp. 
Como cada dispositivo Android possui um tamanho de tela diferente e uma densidade de pixels diferente, 
é muito difícil definir tamanhos por pixels absolutos. Assim, o Android define dois tipos de pixels que 
não dependem da resolução da tela. Eles são os pixels independentes da escala (sp), que são úteis para 
definir tamanhos de fontes, e os pixels independentes da densidade (dp), que são úteis para todo o resto. 
Assim, com esses tipos de pixels, sua interface gráfica terá a mesma aparência em qualquer dispositivo.
128
Unidade IV
Figura 115 – Definindo a cor e o tamanho dos textViews simultaneamente
 Saiba mais
As unidades de pixel do Android são outra maneira que a plataforma 
oferece para facilitar o trabalho do desenvolvedor ao criar interfaces 
gráficas responsivas, coerentes e consistentes. As unidades dp e sp 
são as mais importantes, mas não são as únicas. Você pode saber mais 
nestes documentos:
COMPATIBILIDADE com densidades de pixel diferentes. Developers. 
[s.d.]. Disponível em: https://developer.android.com/training/multiscreen/
screendensities?hl=pt-br. Acesso em: 10 ago. 2020.
DIFFERENCE Between dp, dip, sp, px, in, mm, pt in Android. Javapapers. 2014. 
Disponível em: https://javapapers.com/android/difference-between-dp-dip 
-sp-px-in-mm-pt-in-android/. Acesso em: 10 ago. 2020.
129
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Selecione todos os editTexts e altere a sua propriedade gravity para center.
Figura 116 – Alterando a gravidade dos editTexts
 Observação
Conforme você for criando o seu layout, tenha certeza de que a 
visualização está saindo como esperado. Se seu visualizador estiver diferente, 
vale a pena conferir os últimos passos para ver se você se enganou ou se 
esqueceu de algum ponto.
Remova da seleção o contaEditText e defina o atributo focusable como false. Isso evita que o usuário 
seja capaz de alterar os valores de todos os editTexts, menos o primeiro.
130
Unidade IV
Figura 117 – Protegendo os editTexts de edições do usuário
Selecione o percentualSeekBar e altere o seu atributo layout_gravity para center_vertical, de modo 
que ele fique centralizado na direção vertical da linha do layout.
131
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 118 – Centralizando o percentualSeekBar
Clique no botão para mudar a visualização para a orientação paisagem e verifique se seu layout se 
comporta de maneira responsiva.
132
Unidade IV
Figura 119 – Testando a responsividade de seu aplicativo
8 CODIFICAÇÃO DO APLICATIVO CALCULADORA DE GORJETA
No ponto em que estamos, você já pode compilar e executar o aplicativo para testar o layout e 
verificar se ele está funcionando corretamente. Entretanto, o aplicativo ainda não consegue realizar 
qualquer tarefa. Para começar, vamos criar uma classe Java convencional para implementar os métodos 
que farão os cálculos das gorjetas. 
 Lembrete
A activity é uma classe de estereótipo fronteira e não deve realizar 
cálculos relacionados ao negócio. Tais cálculos devem ser realizados por 
outra classe, uma com o estereótipo controle.
No navegador de projeto, clique com o botão direito no pacote de seu aplicativo e selecione 
[new] -> [Java class].
133
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 120 – Crie uma nova classe Java
A seguir escreva o código da classe Calculadora, como mostrado na figura a seguir:
134
Unidade IV
Figura 121 – Código da classe Calculadora
135
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Observação
No código apresentado na figura anterior usamos um formato especial 
de comentário, com o símbolo “/**”. Esse símbolo, que funciona como o 
comentário em bloco, além de estabelecer um bloco de comentário, 
estabelece um bloco de documentação. Para usar esse recurso, primeiro 
escreva ao menos a assinatura do método. A seguir, na linha acima do método, 
digite “/**” e tecle [Enter]. A IDE já irá criar um bloco de documentação 
listando os parâmetros do método e o seu retorno (se houver). Escreva 
agora uma descrição para o método e para cada um dos parâmetros, assim 
como para o valor de retorno. Agora, sempre que esse método for usado 
em qualquer parte do aplicativo, essa documentação pode ser apresentada 
para auxiliar o programador. Por exemplo, na linha 24, com o cursor sobre 
o método gorjeta(), clique em [CTRL] + [Q]. Veja como o Android Studio 
apresenta a documentação que você acabou de criar. Isso funciona em 
qualquer IDE que não seja absurdamente antiga.
Agora vamos editar o arquivo MainActrivity.java.
Figura 122 – Importações de pacotes da MainActivity
As primeiras linhas do arquivo definem o pacote e as importações. Você pode definir as importações 
manualmente ou permitir que a correção automática crie essas linhas para você conforme for escrevendo 
o restante do código.
136
Unidade IV
Figura 123 – Atributos da classe MainActivity
No início da classe são declarados seus atributos. Nem todos os atributos estão declarados aqui. 
Deixamos dois atributos mais para o final do código, pois eles requerem mais explicações.
Figura 124 – Início da codificação do método onCreate()
137
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Na linha 33 declaramos a sobrescrita do método onCreate(), que é chamado sempre que a Activity 
é carregada ou recarregada. Na linha 34 chamamos o método onCreate() da superclasse. A linha 35 
especifica que o arquivo de layout dessa Activity é o activity_main. Esse layout é obtido da classe 
R, que é uma classe do aplicativo escrita para nós pelo compilador Gradle. Essa classe não deve ser 
alterada. Nas linhas 38 a 44 obtemos referências aos componentes interativos usando o método 
findViewById(). Só podemos obter referências de componentes que tenham sua propriedade id definida, 
como fizemos anteriormente.
Figura 125 – Associação dos ouvintes de eventos
Nessas linhas, definimos quais são os objetos que irão tratar os eventos de mudança de texto do 
contaEditTexte de mudança do progresso do percentualSeekBar. Note que, enquanto você digita essas 
linhas, os atributos ouvinteContaEditText e ouvintePercentualSeekBar ainda não foram declarados e 
serão destacados como um erro. Não se preocupe. Mais abaixo esses atributos serão declarados, e o 
erro desaparecerá.
Figura 126 – Recuperação do estado do aplicativo
Se o aplicativo está sendo reiniciado, por exemplo, se a orientação do dispositivo mudou entre 
retrato e paisagem, é necessário recarregar os valores de conta e percentual. A linha 52 testa se o 
aplicativo não está sendo reiniciado. Se é a primeira vez que é executado, as linhas 53 e 54 definem 
138
Unidade IV
valores padrão para conta e percentual. Caso contrário, as linhas 59 e 60 recuperam os valores de conta 
e percentual que foram gravados pelo aplicativo anteriormente. O método que grava esses valores será 
visto mais adiante.
 Observação
Note que na linha 66 fechamos a chave do método onCreate(). A partir 
de agora, você vai criar novos métodos na classe. Esse é um ponto em que 
muita gente erra.
Figura 127 – Métodos que atualizam os valores calculados da Activity
Esses métodos são responsáveis por calcular tanto os valores da gorjeta padrão (método 
atualizaGorjetas()) quanto os valores da gorjeta personalizada (atualizaGorjetaPersonalizada()).
139
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 128 – Evento de ação associado à mudança de texto de contaEditText
Essa é a declaração do atributo ouvinte contaEditText que foi atribuído anteriormente, na linha 47, 
como ouvinte de mudança de texto do contaEditText. Esse atributo recebe uma instância de uma classe 
anônima, ou seja, uma instância de uma classe que não recebeu um nome. Essa classe implementa a 
interface TextWatcher, que define os métodos que estão sobrescritos nas linhas 84, 89 e 100. Todos eles 
devem ser sobrescritos, mas o único que é utilizado pelo nosso aplicativo é o método onTextChanged(). 
Ele obtém o valor da conta digitada pelo usuário, converte para double, armazena o atributo conta e 
chama os métodos que atualizam o cálculo das gorjetas.
 Observação
Ao digitar a linha “private TextWatcher ouvinte = new ”, após a palavra 
reservada “new”, dê um espaço e use a tecla “mágica” [Ctrl] + [Espaço]. 
O mecanismo de autocompletar irá escrever a assinatura de todos os 
métodos que devem ser sobrescritos.
Repare que no trecho da figura anterior estamos criando uma instância anônima em uma atribuição, 
a atribuição iniciada na linha 82. Por isso, tal atribuição precisa ser encerrada com o ponto-e-vírgula na 
linha 103. Esse é outro ponto de erros comum.
140
Unidade IV
Figura 129 – Evento de ação associado ao movimento do percentualSeekBar
Essa é a declaração do atributo ouvinte PercentualSeekBar, que foi utilizado na linha 48 quando 
foi atribuído como ouvinte de mudança de progresso do percentualSeekBar. Sua lógica de criação é 
análoga ao do atributo ouvinte anterior.
Figura 130 – Método que grava o estado atual do aplicativo
Por fim, o método onSaveInstanceState() é chamado pelo Android quando ele está a ponto de 
suspender o aplicativo. É nesse método que gravamos as informações que devem ser recuperadas 
quando o aplicativo é recarregado. Note que essas informações só são mantidas enquanto o aplicativo 
está suspenso. Se ele for totalmente descarregado, essas informações serão perdidas.
141
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Execute seu aplicativo em uma máquina virtual Android ou em um dispositivo real. Note que o 
aplicativo funciona bem em diversas resoluções de tela, assim como em diversas orientações do dispositivo.
Figura 131 – Aplicativo sendo executado em um dispositivo virtualizado na orientação vertical
A figura a seguir apresenta o mesmo aplicativo sendo executado no mesmo dispositivo virtual, 
mas, desta vez, simulando a orientação horizontal. Note que a interface gráfica se ajustou corretamente à 
nova largura da tela. Como a altura da tela tornou-se insuficiente para apresentar toda a interface gráfica, 
o aplicativo apresenta uma barra de rolagem à direita da tela que fica visível quando a interface gráfica 
é deslocada com o dedo, o ponteiro ou a roda do mouse.
Figura 132 – Aplicativo sendo executado em um dispositivo virtualizado na orientação horizontal
142
Unidade IV
 Saiba mais
Você pode baixar o projeto para seu computador, assim como instalar 
o aplicativo diretamente em seu dispositivo Android se quiser vê-lo 
funcionando. Mas faça isso apenas se não tiver conseguido desenvolver o 
projeto por conta própria e se o fórum não estiver mais disponível para você.
https://github.com/Cassiano-Gunji/Calculadora-de-Gorjeta/
releases/tag/1.0
 Resumo
Nesta unidade desenvolvemos um aplicativo Android completo, capaz 
de realizar o cálculo do valor de uma gorjeta. Iniciamos o aplicativo 
preparando uma Activity para que seja responsiva a mudanças de 
dispositivos e de orientação do dispositivo. Para tanto, foi utilizado o 
gerenciador de layout TableLayout.
Aprendemos a utilizar diversos recursos do editor de interfaces 
gráficas para criar uma interface gráfica que respeita diversos critérios de 
usabilidade. Vimos como o Android utiliza unidades dp e sp para medir pixels 
de modo que as interfaces gráficas sempre tenham a mesma aparência, 
independentemente do tamanho e da resolução de cada dispositivo 
Android em que ele for instalado. Na sequência, vimos como incorporar 
lógica ao aplicativo. 
Também aprendemos como fazer o aplicativo se comportar corretamente 
no ambiente Android com suas peculiaridades que não fazem parte da 
realidade da programação em computadores convencionais, como a 
suspensão do aplicativo.
Relacionamos as views da Activity com os atributos da classe. Vimos 
também como utilizar classes anônimas para criar ouvintes de ação para as 
views que terão interação com o usuário e, finalmente, aprendemos como 
gravar o estado do aplicativo quando ele está a ponto de ser suspenso pelo 
sistema operacional.
 
143
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Exercícios
Questão 1. No Android, a capacidade de resposta do aplicativo é monitorada pelos serviços do 
sistema Gerenciador de atividades e pelo Gerenciador de janelas. O Android exibirá a caixa de diálogo 
de ANR para um determinado aplicativo quando detectar uma das seguintes condições:
I – Nenhuma resposta a um evento de entrada (como eventos de pressionamento de tecla ou toque 
na tela) em até cinco segundos.
II – Um BroadcastReceiver não concluiu a execução em 10 segundos.
III – Não há nenhuma interferência na programação.
Está(ão) correta(s) a(s) afirmativa(s):
A) I.
B) II.
C) I e II.
D) II e III.
E) I, II e III.
Resposta correta: alternativa C.
Análise da questão
Geralmente, o sistema exibe uma mensagem de ANR quando o aplicativo não responde à entrada 
do usuário, por exemplo, se o aplicativo fica bloqueado em alguma operação de E/S – em geral um 
acesso à rede – na linha de execução de UI, de modo que o sistema não consegue processar eventos de 
entrada do usuário; ou talvez o app gaste muito tempo criando uma estrutura elaborada na memória ou 
calculando o próximo movimento em um jogo na linha de execução de UI. É sempre importante garantir 
que esses cálculos sejam eficientes, mas mesmo o código mais eficaz demora para ser executado. Assim, 
o Android exibirá a caixa de diálogo de ANR para um determinado aplicativo quando detectar uma das 
seguintes condições: nenhuma resposta a um evento de entrada – como eventos de pressionamento de 
tecla ou toque na tela – em até cinco segundos; ou um BroadcastReceiver que não concluiu a execução 
em dez segundos.
144
Unidade IV
Questão 2. Suponha que um Analista de TI, participando da etapa de análise de requisitos de um 
sistema de emissão de certidão negativa para o TRF4, tenha elencado os requisitos apresentados a seguir:
1. Utilizar interface responsiva para que possa ser executado em dispositivos móveis e na web.
2. Validaro tipo de certidão solicitada.
3. Emitir certidão negativa após verificação de situação do requerente.
4. Solicitar o CPF do requerente.
5. Responder ao clique único do usuário em qualquer botão da interface.
6. Validar o CPF do requerente.
7. Restaurar os dados automaticamente após falhas não programadas.
8. Solicitar o nome do requerente.
9. Oferecer dois tipos de certidão: para fins gerais e para fins eleitorais.
10. Emitir aviso de impossibilidade de emissão da certidão.
Sobre os requisitos, é correto afirmar que:
A) Apenas 2, 6 e 7 são não funcionais.
B) Todos são funcionais.
C) Nenhum é funcional.
D) 1, 5 e 7 são não funcionais.
E) Apenas 3, 4, 8, 9 e 10 são funcionais.
Resposta correta: alternativa D.
Análise da questão
Os requisitos funcionais são declarações de serviços que o sistema deve fornecer, de como o sistema 
deve reagir a entradas específicas e de como o sistema deve se comportar em determinadas situações. 
Em alguns casos, os requisitos funcionais também podem explicitar o que o sistema não deve fazer. 
Os requisitos não funcionais são restrições aos serviços ou funções oferecidas pelo sistema. Incluem 
restrições de tempo, restrições no processo de desenvolvimento e restrições impostas pelas normas. 
145
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Ao contrário das características individuais ou serviços do sistema, os requisitos não funcionais, muitas 
vezes, aplicam-se ao sistema como um todo.
Temos que:
1. Requisito não funcional: utilizar interface responsiva para que possa ser executado em dispositivos 
móveis e na web.
2. Requisito funcional: validar o tipo de certidão solicitada.
3. Requisito funcional: emitir certidão negativa após verificação de situação do requerente.
4. Requisito funcional: solicitar o CPF do requerente.
5. Requisito não funcional: responder ao clique único do usuário em qualquer botão da interface.
6. Requisito funcional: validar o CPF do requerente.
7. Requisito não funcional: restaurar os dados automaticamente após falhas não programadas.
8. Requisito funcional: solicitar o nome do requerente.
9. Requisito funcional: oferecer dois tipos de certidão, um para fins gerais e outro para fins eleitorais.
10. Requisito funcional: emitir aviso de impossibilidade de emissão da certidão.
Com isso, os requisitos funcionais são: 2, 3, 4, 6, 8, 9 e 10; e os não funcionais são: 1, 5 e 7. Assim, a 
alternativa correta é a D.
146
REFERÊNCIAS
Textuais
ARRAYS. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/tutorial/java/
nutsandbolts/arrays.html. Acesso em: 10 ago. 2020.
BENYON, D. Interação humano-computador. 2. ed. São Paulo: Pearson Prentice Hall, 2011.
BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. UML: guia do usuário. 2. ed. Rio de Janeiro: Elsevier, 2012.
CLASS JOptionPane. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/tutorial/
java/nutsandbolts/for.html. Acesso em: 10 ago. 2020.
COMPATIBILIDADE com densidades de pixel diferentes. Developers. [s.d.]. Disponível em: https://
developer.android.com/training/multiscreen/screendensities?hl=pt-br. Acesso em: 10 ago. 2020.
CONFIGURAR a aceleração de hardware para o Android Emulator. Developers. [s.d.]. Disponível em: 
https://developer.android.com/studio/run/emulator-acceleration. Acesso em: 10 ago. 2020.
DEITEL, H. M.; DEITEL, P. J. Java: como programar. 6. ed. São Paulo: Pearson Prentice Hall, 2005.
DEITEL, H. M.; DEITEL, P. J. Java: como programar. 8. ed. São Paulo: Pearson Prentice Hall, 2010.
DEITEL, H. M. et. al. Android para programadores: uma abordagem baseada em aplicativos. Porto 
Alegre: Bookman, 2013.
DIFFERENCE Between dp, dip, sp, px, in, mm, pt in Android. Javapapers. 2014. Disponível em: https://
javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/. Acesso em: 
10 ago. 2020.
EVANS, B. Java: the legend. O’Reilly. 2020. Disponível em: https://www.oreilly.com/library/view/java-
the-legend/9781492048299/ch01.html. Acesso em: 10 ago. 2020.
THE FOR statement. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/tutorial/
java/nutsandbolts/for.html. Acesso em: 10 ago. 2020.
GAMMA, E. et al. Padrões de projeto. Porto Alegre: Bookman, 2000.
HORSTMANN, C. S.; CORNELL, G. Core Java. 8. ed. São Paulo: Pearson Prentice Hall, 2010.
THE IF-THEN and if-then-else statements. The Java™ Tutorials. 2019. Disponível em: https://docs.
oracle.com/javase/tutorial/java/nutsandbolts/if.html. Acesso em: 10 ago. 2020.
147
JORGE, M. Java passo a passo lite. São Paulo: Pearson Education do Brasil, 2004.
LESSON: exceptions. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/tutorial/
essential/exceptions/index.html. Acesso em: 10 ago. 2020.
LESSON: numbers and strings. The Java™Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/
tutorial/java/data/index.html. Acesso em: 10 ago. 2020.
MEDEIROS, E. S. de. Desenvolvendo software com UML 2.0: definitivo. São Paulo: Makron Books, 2004.
MENDES, D. R. Programação Java com ênfase em orientação a objetos. São Paulo: Novatec, 2009.
PAGE-JONES, M. Fundamentos do desenho orientado a objeto com UML. São Paulo: Makron Books, 2001.
ROGERS, Y.; SHARP, H.; PREECE, J. Design de interação: além da interação humano-computador. 3. ed. 
Porto Alegre: Bookman, 2013.
SINICKI, A. The best Android developer tools for getting started. Android Authority, May 2020. 
Disponível em: https://www.androidauthority.com/best-android-developer-tools-671650/. Acesso em: 
10 ago. 2020.
SINTES, T. Aprenda programação orientada a objetos em 21 dias. São Paulo: Pearson Education 
do Brasil, 2002.
SOUZA, L. S. de. Projeto de interface com o usuário. São Paulo: Sol, 2015.
THE SWITCH statement. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/
tutorial/java/nutsandbolts/switch.html. Acesso em: 10 ago. 2020.
TRAIL: collections. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.com/javase/tutorial/
collections/index.html. Acesso em: 10 ago. 2020.
THE WHILE and do-while statements. The Java™ Tutorials. 2019. Disponível em: https://docs.oracle.
com/javase/tutorial/java/nutsandbolts/while.html. Acesso em: 10 ago. 2020.
Sites
https://github.com/Cassiano-Gunji/Calculadora-de-Gorjeta/releases/tag/1.0
https://netbeans.org
https://www.businessofapps.com/marketplace/app-development-software/research/android-
development-tools/
148
https://www.oracle.com/java/technologies/
http://www.oracle.com/technetwork/java/javase/overview/index.html
http://www.eclipse.org 
Exercícios
Unidade I – Questão 1. EMPRESA MUNICIPAL DE INFORMÁTICA (EMPREL). Edital de Concurso para 
Emprego Público n. 001/2019: Analista de Sistemas. Questão 32. Disponível em: https://arquivos.
qconcursos.com/prova/arquivo_prova/67532/instituto-aocp-2019-emprel-analista-de-sistemas-prova.
pdf?_ga=2.123292040.262914850.1597440689-562286297.1597440689. Acesso em: 14 ago. 2020.
Unidade I – Questão 2. TRIBUNAL DE JUSTIÇA DO ESTADO DO PARÁ (TJ-PA). Concurso Público 
2020: Analista Judiciário-Programador. Questão 44. Disponível em: https://arquivos.qconcursos.
com/prova/arquivo_prova/67268/cespe-2020-tj-pa-analista-judiciario-programador-prova.pdf?_
ga=2.182010276.262914850.1597440689-562286297.1597440689. Acesso em: 14 ago. 2020.
Unidade II – Questão 1. TRIBUNAL DE JUSTIÇA DO ESTADO DO PARÁ (TJ-PA). Concurso Público 
2020: Analista Judiciário-Programador. Questão 42. Disponível em: https://arquivos.qconcursos.
com/prova/arquivo_prova/67268/cespe-2020-tj-pa-analista-judiciario-programador-prova.pdf?_
ga=2.40641378.1921092310.1597704213-562286297.1597440689. Acesso em: 17 ago. 2020.
Unidade II – Questão 2. INSTITUTO BRASILEIRO DE APOIO E DESENVOLVIMENTO EXECUTIVO (IBADE). 
Concurso Público 2019: Analista da Tecnologia da Informação. Questão 42. Disponível em: https://
arquivos.qconcursos.com/prova/arquivo_prova/67176/ibade-2019-if-ro-analista-de-tecnologia-da-
informacao-prova.pdf?_ga=2.138159856.1921092310.1597704213-562286297.1597440689.Acesso em: 17 ago. 2020.
Unidade III – Questão 1. CONSELHO REGIONAL DE MEDICINA DO ESTADO DE SÃO PAULO 
(CREMESP). Concurso público para provimento de cargo de Analista de Tecnologia da Informação. 
2016. Questão 37. Disponível em: https://arquivos.qconcursos.com/prova/arquivo_prova/59315/
fcc-2016-cremesp-analista-de-tecnologia-da-informacao-analise-de-sistemas-prova.pdf?_
ga=2.39977954.1921092310.1597704213-562286297.1597440689. Acesso em: 18 ago. 2020.
Unidade III – Questão 2. TRIBUNAL DE JUSTIÇA DO ESTADO DO RIO GRANDE DO SUL (TJ-RS). Concurso 
Público para provimento de cargo de Programador. 2018. Questão 43. Disponível em: https://
arquivos.qconcursos.com/prova/arquivo_prova/58522/faurgs-2018-tj-rs-programador-prova.pdf?_
ga=2.66126830.1921092310.1597704213-562286297.1597440689. Acesso em: 18 ago. 2020.
149
150
151
152
Informações:
www.sepi.unip.br ou 0800 010 9000

Continue navegando