Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE Ficha de Expectativa de Resposta da Prova Escrita Departamento Acadêmico ou Unidade Acadêmica Especializada Unidade Acadêmica Especializada em Ciências Agrárias Coordenação de Informática CRITÉRIOS DE AVALIAÇÃO PARA TODAS AS QUESTÕES Clareza e propriedade no uso da linguagem; Coerência e coesão textual, com uso correto da Língua Portuguesa; Domínio dos conteúdos, evidenciando a compreensão dos temas objeto da prova; Domínio e precisão no uso de conceitos; Coerência no desenvolvimento das ideias e capacidade argumentativa. Questão 01: O ciclo de vida de aplicativos Android compreende uma série de estados e métodos que respondem a cada mudança de estado. Primeiro, relacione e descreva esses estados e, em seguida, indique a sequência de métodos que é executada em cada uma das situações a seguir: (Valor 0,00 a 0,75 pts). a. O aplicativo foi iniciado b. No estado resumed, o usuário rotacionou a tela c. No estado resumed, o usuário apertou a tecla home do dispositivo Na primeira parte da questão espera a seguinte resposta: Os estados possíveis são: Resumed: a atividade está em primeiro plano e o usuário tem seu foco Paused: outra atividade tanto está em primeiro plano como possui foco, mas a atividade ainda está visível Stopped: nesse estado, a atividade não está visível, mas ainda existe como processo Segue-se a expectativa dos outros pontos: a) onCreate, onStart, onResume b) onPause, onStop, onDestroy, onCreate, onStart, onResume c) onPause, onStop Questão 02: Sobre a tecnologia de Java Server Pages - JSP, cite quatro "objetos implícitos" que estão disponíveis na construção de qualquer JSP, descrevendo a finalidade de cada um deles (fazendo um paralelo com a tecnologia de Servlets). Para cada objeto implícito, escolha um dos seus métodos e ilustre a utilização do mesmo em uma linha de código, descrevendo o efeito produzido pela execução de cada um deles. (Valor 0,00 a 1,00 pts). (1) o objeto "session", que é uma instância de HttpSession, tem por objetivo armazenar informações relativas a cada um dos usuários específicos que estão acessando a aplicação Web. Pode ser utilizado para armazenar atributos, como por exemplo um objeto qualquer, de nome "object" com o rótulo "nome": session.setAttribute("nome", object); (2) o objeto "request", que é uma instância de HttpServletRequest, tem por objetivo representar a requisição HTTP que gerou o acionamento do servlet. Através desse objeto é possível recuperar os parâmetros que foram trazidos com a requisição. Por exemplo, a recuperação de um parâmetro de rótulo "nome" e armazenamento em uma variável String: String texto = request.getParameter("nome"); (3) o objeto "out", que é uma instância de PrintWriter, tem por objetivo permitir escrever na saída HTML que será enviada como resposta. Por exemplo, para imprimir um título (h2) contendo o valor associado a uma variável do tipo String: out.println("<h2>Bom dia "+ nome +"</h2>"); (4) o objeto "response", que é uma instância de HttpServletResponse, tem por objetivo representar a resposta a ser enviada ao usuário. Por exemplo, para adicionar um objeto "cookie" da classe Cookie na resposta é utilizado: response.addCookie(cookie); Questão 03: No desenvolvimento para dispositivos móveis, na plataforma Android, uma Intent é um objeto de comunicação, o qual pode ser utilizado para requisitar ações de outro componente da aplicação. Embora uma Intent facilite a comunicação entre os componentes de várias maneiras, há três formas fundamentais de utilização. Explique quais são essas formas e quais são os métodos utilizados para realizar as requisições em cada uma delas. (Valor 0,00 a 1,00 pts). (1) Para iniciar uma Activity: uma Activity representa uma única tela da aplicação. Você pode iniciar uma nova instância de Activity passando uma Intent para o método startActivity(). A Intent descreve qual a Activity deve ser iniciada, e pode transportar as informações necessárias. Se você deseja receber um resultado a partir dessa outra Activity que será iniciada, basta invocar a mesma através do método startActivityForResult(). A Activity que realizou a invocação recebe o resultado na forma de um objeto Intent em separado através do método onActivityResult() que é invocado quando a Activity que foi acionada é finalizada. (2) Para iniciar um Service: um Service é um componente que realizar operações de segundo plano sem a interface com o usuário. Você pode iniciar um Service para realizar uma operação de uma única execução (como o download de um arquivo) através da passagem de uma Intent para o método startService(). A Intent descreve qual o Service a ser iniciado e pode levar junto as informações necessárias. Se o Service for projetado com uma interface cliente-servidor, você pode se ligar ao Service a partir de outro componente, passando uma Intent para o método bindService(). (3) Para enviar um broadcast: um broadcast é uma mensagem que qualquer aplicação pode receber. O sistema entrega vários broadcasts para o sistema de eventos, como quando o sistema realiza a inicialização ou quando a bateria do dispositivo inicia a ser carregada. Você pode enviar um broadcast para outras aplicações passado uma Intent para os métodos sendBroadcast(), sendOrdereredBroacast() ou sendStickyBroadcast(). Questão 04: Dadas as tecnologias de Servlets e JSP para aplicações Web em Java. (Valor 0,00 a 0,75 pts). a. Explique qual seria o papel de cada uma delas na aplicação do modelo arquitetural MVC (Model View Controller) no desenvolvimento de uma aplicação; b. Exemplifique, utilizando como base uma funcionalidade de um sistema hipotético, como seriam utilizadas tais tecnologias. a) A tecnologia de Servlets seria utilizada para implementação da lógica de “controle” da aplicação – gerenciando a interação entre visão e modelo; enquanto a tecnologia de JSP seria utilizada na implementação da “visão” da aplicação – definição de como as informações serão exibidas ao usuário final. b) Em um sistema Web em Java, com Servlets e JSP, teríamos todas as telas da aplicação implementadas com JSP, e as ações como links e formulários seriam recebidos por Servlets responsáveis pelo tratamento dos mesmos e encaminhamento para as JSPs responsáveis por mostrar os resultados. Por exemplo: para exibir todos os usuários cadastrados no sistema – (1) a ação é direcionada a um Servlet que tem a incumbência de se comunicar com a classe da aplicação responsável por fornecer tal informação; (2) então o Servlet armazena essa informação no próprio objeto representando a requisição ou na sessão, e encaminha para uma JSP; (3) a JSP acessa tal informação e se preocupa exclusivamente em dispor tal informação no HTML resultado – o qual será exibido para o usuário final. Questão 05: Existem 3 etapas envolvidas na utilização de cookies em JSP que estão relacionadas à parametrização deles e ao seu tempo de vida. Indique as etapas e explique em que consiste cada uma delas. (Valor 0,00 a 0,75 pts). Criação de um cookie - etapa em que se invoca o construtor passando as strings de nome e valor do cookie. Configuração de sua validade - emprego do método setMaxAge para especificar a longevidade (em segundos) do cookie. Envio do cookie no cabeçalho de resposta HTTP - emprego do método response.addCookie para adicionar cookies num cabeçalho de resposta HTTP. Questão 06: Cumpra corretamente o que se solicita sobre o padrão arquitetural MVC aplicado ao contexto de aplicações Web. (Valor 0,00 a 1,00 pts). a. Elabore um diagrama ilustrando seus elementos e como eles devem se comunicar; b. Descreva a proposta do padrão e como funciona (relacione o texto da resposta com o que é ilustrado pelo diagrama elaborado). a) b) O objetivo principal do padrão arquitetural MVC é normatizar a divisão de responsabilidadesdos elementos que compõem uma aplicação Web. A estratégia de divisão de responsabilidade é aplicada com o intuito de fatorar a complexidade do desenvolvimento da aplicação - simplificando o desenvolvimento e manutenção. Os elementos classificados como "model" têm a responsabilidade de armazenar os dados necessários à aplicação, bem como a lógica do negócio aplicada a esses dados. Os elementos classificados como "view" são responsáveis pela renderização gráfica do que será apresentado para o usuário da aplicação. Os elementos classificados como "controller" são responsáveis por controlar o fluxo das telas da aplicação e invocar elementos "model" com relação ao alteração do estado dos mesmos e encaminhar a resposta para ser renderizada na "view" apropriada. O funcionamento de uma aplicação segundo o padrão arquitetural MVC inicia com as requisições do usuário que são realizadas através de elementos da "view", tais requisições são recebidas por um "controller", e então encaminhadas para o elemento de "model" responsável. Após a conclusão da operação, o "controller" direciona para um elemento de "view" para renderizar a resposta. A "view" responsável pode consultar os elementos de "model" que representam a resposta a fim de recuperar as informações a serem exibidas na interface com usuário. Questão 07: Considerando as opções de armazenamento Internal Storage e External Storage disponíveis no desenvolvimento de aplicações para plataforma Android: (Valor 0,00 a 0,75 pts). a. Em qual(is) opção(ões) é possível acessar os arquivos criados a partir de outras aplicações? b. Diferencie o modos MODE_APPEND e MODE_PRIVATE e indique a qual(is) opção(ões) se aplicam. c. Complete o trecho de código necessário para viabilizar o leitura e escrita em arquivo <manifest ...> <uses-permission android:name="android.permission.___________________________" /> ... </manifest> a) Na opção de armazenamento externo (External Storage). b) Podem ser empregados em ambas as opções de armazenamento. A principal diferença entre os modos é que o MODE_PRIVATE é o modo de criação padrão que permitirá criar um novo arquivo caso o mesmo ainda não exista, mas que o sobrescreverá caso tenha o mesmo nome de um arquivo existente, enquanto o MODE_APPEND criará um arquivo caso não exista e no caso de já existir tal arquivo acrescenta informações apenas ao final do arquivo. c) WRITE_EXTERNAL_STORAGE Questão 08: Implemente, numa classe Java (dispensando os "imports"), um Servlet acessível através da URL http://localhost/AppExemplo/Autenticar, o qual realiza os seguintes passos: (Valor 0,00 a 2,00 pts). a. Recebe os parâmetros "login" e "senha" provenientes de um formulário (considere que o formulário já existe e o encaminhamento dos parâmetros é efetuado adequadamente); b. Verifica o preenchimento dos campos (certificar que os mesmos possuem valores); c. Através da classe FachadaSistema (singleton acessível através do método getInstancia()) autentica tais informações dos parâmetros, através do método Usuario getUsuario(String login, String senha); d. Caso se trate de um login válido, o objeto representando o usuário deve ser armazenado na sessão e a resposta deve ser realizada pela página paginaPrincipal.jsp; e. Caso se trate de um usuário inválido (método retornou uma referência nula), ou algum dos parâmetros não esteja presente ou esteja vazio, deve redirecionar de volta ao formulário formLogin.jsp, enviando o parâmetro "erro" com o texto "Parâmetros Inválidos". 1. @WebServlet("/Autenticar") 2. public class Qestao1Servlet extends HttpServlet { 3. private static final long serialVersionUID = 1L; 4. public Qestao1Servlet() { 5. super(); 6. } 7. protected void doPost(HttpServletRequest request, HttpServletResponse response) 8. throws ServletException, IOException { 9. String login = request.getParameter("login"); 10. String senha = request.getParameter("senha"); 11. if (login!=null && !login.isEmpty() && senha!=null && !senha.isEmpty()) { 12. FachadaSistema fachada = FachadaSistema.getInstancia(); 13. Usuario usr = fachada.getUsuario(login, senha); 14. if (usr != null) { 15. HttpSession session = request.getSession(); 16. session.setAttribute("usuario", usr); 17. request.getRequestDispatcher("paginaPrincipal.jsp").forward(request, response); 18. } 19. } 20. response.sendRedirect("formLogin.jsp?erro=Parâmetros Invalidos"); 21. } 22. } Questão 09: O seguinte código adiciona dinamicamente em um LinearLayout (itensLinearLayout) 10 componentes TextView seguido de um componente Button que estão especificados em um layout (summary_item). (Valor 0,00 a 1,00 pts). LayoutInflater inflater = (LayoutInflater); getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout itensLinearLayout = (LinearLayout) findViewById(R.id.itensLinearLayout); for(int i = 0; i < 10; i++) { View summaryItemView = inflater.inflate(R.layout.summary_item, null); Button goButton = (Button) findViewById(R.id.goButton); TextView itemTextView = (TextView) findViewById(R.id.itemTextView); itemTextView.setText(i + "."); itensLinearLayout.addView(summaryItemView); } Suponha que em nenhuma parte do aplicativo exista ainda um componente de summary_item na interface. Explique por que o código acima gera um erro de execução e como corrigi-lo. O código acima gera um erro de execução pois na primeira iteração findViewById(R.id.itemTextView) retorna NULL e nenhum itemTextView é adicionado até que o componente summaryItemView seja adicionado à raiz dos componentes onde findViewById realiza a busca. Dessa forma, para que o código seja corrigido é necessário especificar a partir de qual componente será realizado a busca pelo ID: summaryItemView.findViewById(R.id.goButton). Questão 10: Aplicativos Android podem ser interrompidos durante a execução por uma série de motivos como, por exemplo, chamadas telefônica, bateria descarregada, usuário rotacionando a tela ou uma mudança do foco para um outro aplicativo. Existem estratégias para assegurar que as informações do aplicativo não se perderão. Considerando esse contexto, responda: (Valor 0,00 a 1,00 pts). a. Como salvar e como recuperar informações através do uso de um objeto da classe Bundle? b. Qual a limitação da estratégia acima? c. Explique como superar tal limitação e apresente exemplos. d. Considere o código a seguir, indique a que se destina e preencha adequadamente as lacunas a fim de cumprir esse propósito. public class DicionarioOpenHelper extends SQLiteOpenHelper { private static final String ______________________________ = "meu_banco"; private static final int DATABASE_VERSION = 1; private static final String COMANDO = "CREATE TABLE DICIONARIO (PALAVRA TEXT," + " DEFINICAO TEXT);"; DictionaryOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { _________________ (COMANDO); } } a) É possível gravar as informações do aplicativo para recuperá-las posteriormente utilizando um objeto da classe Bundle nos métodos onSaveInstanceState e onRestoreInstanceState. b) O estado interno da atividade não é salvo em todas as situações em que o aplicativo é destruído. c) Para que possamos gravar e recuperar as informações, é necessário realizá-las através de uma forma persistente: (1) em um arquivo sharedPreferences (2) em um arquivo no sistema de arquivos do dispositivo ou externo (3) usando a base de dados SQLite. d) DATABASE_NAME db.execSQL Assinatura dos Membros da Comissão 1o membro (Presidente): 2o membro: 3o membro:
Compartilhar