Baixe o app para aproveitar ainda mais
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
Compartilhar