Prévia do material em texto
PRATICANDO PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS EM ANDROID 1. Itens iniciais Apresentação Praticar é fundamental para o seu aprendizado. Sentir-se desafiado, lidar com a frustração e aplicar conceitos são essenciais para fixar conhecimentos. No ambiente Praticando, você terá a oportunidade de enfrentar desafios específicos e estudos de caso, criados para ampliar suas competências e para a aplicação prática dos conhecimentos adquiridos. Objetivo Ampliar competências e consolidar conhecimentos através de desafios específicos e estudos de caso práticos. 1. Estudo de Caso Sincronização de Dados em Aplicativo Mobile sem conexão Caso Prático Letícia, uma desenvolvedora de uma startup em São Paulo, foi designada para criar um aplicativo móvel que permita aos usuários acessarem dados de sua conta bancária, mesmo quando estiverem offline. Esse projeto faz parte de uma estratégia da empresa para se diferenciar no mercado financeiro, garantindo que os usuários tenham acesso contínuo às informações, independentemente da disponibilidade de conexão com a internet. A ideia é que o aplicativo utilize a arquitetura “Offline First”, onde os dados são armazenados localmente e sincronizados com o servidor assim que a conexão é restabelecida. No entanto, durante a fase de testes, Letícia percebe que o aplicativo não está sincronizando corretamente os dados com o servidor quando a conexão retorna, o que pode causar inconsistências nas informações apresentadas aos usuários. Essa falha pode comprometer a experiência do usuário e a confiança no serviço oferecido. Considerando a situação enfrentada por Letícia, analise os possíveis problemas na implementação do modelo “Offline First” que poderiam estar causando a falha de sincronização dos dados. Proponha uma solução técnica que Letícia poderia aplicar para garantir que o aplicativo sincronize corretamente os dados com o servidor assim que a conexão seja restabelecida, assegurando a consistência das informações. Chave de resposta Para resolver o problema enfrentado por Letícia, é importante analisar a implementação da lógica de sincronização do aplicativo. Um dos possíveis problemas pode estar na maneira como o aplicativo verifica a conectividade e executa a sincronização. A falha pode ocorrer se o aplicativo não estiver monitorando corretamente o status da conexão ou se a lógica de sincronização não for robusta o suficiente para lidar com interrupções de conexão. Uma solução seria implementar uma abordagem que utiliza bibliotecas especializadas em gerenciar operações offline, como Redux Offline ou React-native-offline. Essas bibliotecas oferecem mecanismos para enfileirar as operações de sincronização e garantir que elas sejam executadas assim que a conexão for restabelecida, minimizando as chances de inconsistência. Além disso, Letícia deve garantir que o aplicativo esteja corretamente configurado para monitorar constantemente o status da rede e que a sincronização seja ativada automaticamente quando a conexão retornar. Também é essencial que o aplicativo utilize um banco de dados embarcado, como Realm ou SQLite, para armazenar localmente as informações enquanto o dispositivo estiver offline. Esses dados armazenados localmente devem ser sincronizados com o servidor remoto assim que a conexão for restabelecida, assegurando que todas as operações realizadas offline sejam refletidas no servidor. Para isso, a implementação deve prever a atualização dos dados no banco local e a posterior sincronização bidirecional, que não só envia as novas informações para o servidor, mas também atualiza o banco local com eventuais modificações realizadas remotamente durante o período de desconexão. Também é crucial implementar um sistema de rollback que reverte quaisquer alterações locais em caso de falha de sincronização, garantindo que o usuário seja informado e que a integridade dos dados seja mantida. Para saber mais sobre esse conteúdo, acesse: Tema: Tópicos avançados em React Native 2. Desafios Sintaxe e Componentes do React Native Desafio 1 Você está trabalhando em uma startup que decidiu expandir seu aplicativo web para uma plataforma móvel. Como desenvolvedor, você precisa decidir entre React.js ou React Native. Para tomar essa decisão, é crucial compreender as principais diferenças entre essas duas tecnologias e como elas impactam o desenvolvimento de aplicações para diferentes plataformas. Quais são as principais diferenças entre React.js e React Native que podem influenciar a escolha para o desenvolvimento de uma aplicação móvel? A React.js e React Native usam a mesma abordagem para estilização, com CSS sendo a principal ferramenta em ambos. B React.js é focado em aplicações web, enquanto React Native é voltado para desenvolvimento nativo em plataformas móveis. C React.js e React Native permitem o uso de componentes HTML nativos diretamente na interface da aplicação. D React Native permite o uso de código JavaScript diretamente no navegador, enquanto React.js requer o uso de emuladores para testar a aplicação. E React.js é utilizado para criar aplicativos móveis nativos, enquanto React Native se concentra na criação de sites responsivos. A alternativa B está correta. A) Incorreta. Embora ambos utilizem JavaScript e tenham uma abordagem de componentes, React Native usa uma abordagem específica para estilização com o uso de Stylesheets, enquanto React.js geralmente depende de CSS para estilização. B) Correta. React.js foi desenvolvido para construir interfaces de usuário para aplicações web e é executado diretamente no navegador, utilizando componentes como divs e spans. Por outro lado, React Native é uma framework criada para desenvolver aplicações móveis nativas, onde os componentes são traduzidos para elementos nativos de Android e iOS. C) Incorreta. Em React.js, você pode usar componentes HTML diretamente, como e . No entanto, em React Native, esses componentes são substituídos por equivalentes nativos, como e , que correspondem aos elementos nativos da plataforma. D) Incorreta. React Native permite o desenvolvimento de aplicações móveis nativas, que não são executadas no navegador. O teste e visualização de aplicações em React Native geralmente requerem o uso de emuladores ou dispositivos físicos, enquanto React.js pode ser testado diretamente no navegador. E) Incorreta. React.js é usado para construir interfaces de usuário para aplicações web, enquanto React Native é utilizado para desenvolver aplicativos móveis nativos. Não há sobreposição direta entre os dois nesse sentido. Para saber mais sobre esse conteúdo, acesse: Módulo 1: PRIMEIRAS PALAVRAS “React.js é uma biblioteca voltada para o desenvolvimento web. Sua principal finalidade é simplificar o processo de confecção de interfaces ricas e responsivas. Além disso, os componentes gerados pelo React podem ser utilizados em qualquer plataforma. React Native é uma biblioteca voltada para o desenvolvimento mobile, cuja principal característica é possibilitar o desenvolvimento híbrido, ou seja, permitir que um único código rode em diferentes plataformas, como Android e iOS.” Desafio 2 Você foi contratado para gerenciar a construção de uma aplicação web moderna utilizando React.js, e uma das suas primeiras tarefas é configurar as dependências necessárias para o projeto. Durante esse processo, você percebe que a utilização correta do NPM é fundamental. Qual das seguintes afirmações melhor descreve o papel do NPM no desenvolvimento de aplicações com React.js? A NPM é utilizado exclusivamente para iniciar e rodar aplicações React.js no navegador. B NPM permite o gerenciamento de dependências, pacotes e scripts automatizados em projetos Node.js e React.js. C NPM é responsável pela configuração do ambiente de produção em servidores React.js. D NPM compila o código JavaScript escrito em React.js diretamente para HTML. E NPM é uma ferramenta gráfica usada para gerenciar a interface de usuário em aplicações React.js. A alternativa B está correta.do pool de objetos do Broker.". Desafio 2 Você está desenvolvendo uma aplicação web complexa e decidiu adotar a arquitetura Flux para gerenciar o fluxo de dados. O objetivo é garantir que as atualizações na interface do usuário reflitam corretamente as mudanças nos dados subjacentes. Para isso, você precisa garantir que o fluxo de dados siga um caminho unidirecional, minimizando inconsistências e facilitando o rastreamento de ações no sistema. Considerando os componentes essenciais da arquitetura Flux, qual é a sequência correta do fluxo de dados dentro desta arquitetura? A Dispatcher → Action → Store → View B Action → Dispatcher → Store → View C Store → Action → Dispatcher → View D View → Store → Dispatcher → Action E Action → Store → Dispatcher → View A alternativa B está correta. A) Dispatcher → Action → Store → View: Incorreta. Na arquitetura Flux, a sequência inicia com uma ação (Action), não com o Dispatcher. O Dispatcher é responsável por receber as ações e distribui-las para os stores. B) Action → Dispatcher → Store → View: Correta. Esta é a sequência correta na arquitetura Flux. A View inicia uma ação (Action), que é enviada ao Dispatcher. O Dispatcher, então, direciona a ação para o Store apropriado, que atualiza o estado e, finalmente, a View é re-renderizada para refletir as mudanças. C) Store → Action → Dispatcher → View: Incorreta. O Store não inicia o fluxo de dados na arquitetura Flux. Ele apenas armazena o estado e reage às ações que são enviadas pelo Dispatcher. D) View → Store → Dispatcher → Action: Incorreta. Embora a View possa iniciar uma ação, ela não interage diretamente com o Store antes que o Dispatcher processe a ação. O fluxo correto segue uma direção unidirecional, passando primeiro pelo Dispatcher. E) Action → Store → Dispatcher → View: Incorreta. O fluxo correto envolve o Dispatcher antes de qualquer interação com o Store. O Dispatcher garante que a ação seja distribuída para o Store apropriado antes de qualquer atualização na View. Para saber mais sobre esse conteúdo, acesse: Módulo 2: ARQUITETURA FLUX "Flux é a arquitetura utilizada pelo Facebook na construção de clientes Web, tendo como objetivo um fluxo unidirecional de dados. Basicamente, uma tela (View) inicia uma ação (Action) que, por meio de um Dispatcher, inicia um processo no sistema de armazenagem (Store), atualizando a tela inicial, como pode ser observado na figura apresentada a seguir.". Desafio 3 Você está desenvolvendo uma aplicação web complexa e decidiu utilizar a arquitetura Redux para gerenciar o estado global da aplicação. Seu objetivo é garantir que as mudanças de estado sejam previsíveis e que todas as atualizações sejam feitas de forma controlada e centralizada. Considerando os principais conceitos e componentes do Redux, qual é a função principal do Reducer na manipulação dos estados da aplicação? A Criar e armazenar novos estados a partir das ações recebidas B Definir e despachar as ações para os componentes visuais C Receber as ações e retornar o novo estado baseado no estado atual D Notificar os componentes visuais sobre mudanças no estado E Gerenciar a centralização e distribuição das ações recebidas A alternativa C está correta. A) Criar e armazenar novos estados a partir das ações recebidas: Incorreta. Embora o Reducer seja responsável por manipular os estados, ele não armazena os estados diretamente. O armazenamento de estados é responsabilidade da Store. B) Definir e despachar as ações para os componentes visuais: Incorreta. A função do Reducer não é despachar ações, mas sim receber as ações já despachadas e calcular o novo estado com base nelas. C) Receber as ações e retornar o novo estado baseado no estado atual: Correta. O Reducer é uma função pura que recebe o estado atual e uma ação como argumentos e retorna um novo estado. Ele não altera o estado diretamente, mas produz uma nova versão do estado com as mudanças necessárias. D) Notificar os componentes visuais sobre mudanças no estado: Incorreta. A responsabilidade de notificar os componentes visuais sobre mudanças no estado é da Store, não do Reducer. E) Gerenciar a centralização e distribuição das ações recebidas: Incorreta. A Store centraliza o estado e distribui as ações, enquanto o Reducer apenas processa essas ações para gerar novos estados. Para saber mais sobre esse conteúdo, acesse: Módulo 2: ARQUITETURA REDUX "Uma alternativa ao Flux é a arquitetura que ficou conhecida como Redux. Embora siga princípios equivalentes, não temos a figura do Dispatcher, e a manipulação dos estados do sistema ocorre pelas funções Reducer. A arquitetura Redux tem uma abordagem funcional, e a criação de classes para definir ações não traria benefícios. Toda ação será definida em termos de uma função, com retorno de um objeto, contendo o tipo de mensagem no atributo type e os dados opcionais em payload. Para o Redux, uma classe Store gerencia os estados do sistema de forma centralizada, e qualquer manipulação deve ocorrer por meio de funções puras, as quais irão constituir o grupo classificado como Reducer. Além de armazenar os estados, a classe Store deve notificar mudanças ocorridas para os componentes visuais, que foram associados via assinatura (subscribe)." Desafio 4 Você foi recentemente designado para liderar a implantação de uma pipeline de CI/CD em um projeto de desenvolvimento ágil em sua empresa. Seu objetivo é garantir que novas funcionalidades sejam entregues de forma segura, com alta qualidade. Considerando a importância das práticas de CI/CD para o sucesso de metodologias ágeis como Scrum e XP, qual é o papel central da integração contínua (CI) no processo de desenvolvimento de software? A Garantir que todas as funcionalidades sejam testadas manualmente antes da entrega B Promover a incorporação de novos módulos de software à base de código existente de maneira contínua e automatizada C Implementar e automatizar a entrega de funcionalidades diretamente no ambiente de produção D Coordenar a comunicação entre equipes de desenvolvimento e operações sem a necessidade de testes automatizados E Fornecer relatórios de desempenho do sistema após a entrega de cada funcionalidade A alternativa B está correta. A) Garantir que todas as funcionalidades sejam testadas manualmente antes da entrega: Incorreta. Embora o teste de funcionalidades seja uma parte crucial do processo de CI/CD, a integração contínua (CI) foca na automação, minimizando a necessidade de testes manuais e permitindo a integração frequente de novos códigos. B) Promover a incorporação de novos módulos de software à base de código existente de maneira contínua e automatizada: Correta. O objetivo principal da integração contínua (CI) é permitir que desenvolvedores integrem novas partes do código na base existente de forma regular e automatizada, garantindo que as alterações sejam rapidamente verificadas e integradas, reduzindo conflitos e problemas de integração. C) Implementar e automatizar a entrega de funcionalidades diretamente no ambiente de produção: Incorreta. Essa definição se aplica mais à entrega contínua (CD), que foca na entrega automatizada e segura de código em ambientes de produção. CI se concentra na integração de código e testes automáticos. D) Coordenar a comunicação entre equipes de desenvolvimento e operações sem a necessidade de testes automatizados: Incorreta. Embora a comunicação entre equipes seja importante, CI se baseia fortemente na automação de testes e integração, não apenas na coordenação de comunicação. E) Fornecer relatórios de desempenho do sistema após a entrega de cada funcionalidade: Incorreta. Relatórios de desempenho são importantes, mas a principal função da integração contínua (CI) é garantir que todas as alterações de código sejam integradas continuamente e verificadas através de testes automatizados antes de qualquer entrega. Para saber mais sobre esse conteúdo, acesse: Módulo 4: CI/CD "Hoje em dia é comum a adoção dos termos integração contínua, ou CI, e entregacontínua, ou CD, utilizados em metodologias ágeis, como Scrum e XP (Extreme Programming). O princípio básico é a entrega de funcionalidades completas, a cada novo ciclo, priorizadas de acordo com as necessidades do cliente. Algo evidente na adoção dessas metodologias é a necessidade de indicadores palpáveis para a garantia da qualidade de cada grupo de funcionalidades entregue, em que as metodologias de teste de software apresentam grande relevância no desenvolvimento do sistema. Antes que um novo módulo seja aceito, todos os testes precisam ser completados com sucesso, e alguns testes podem envolver mais de um módulo, já que uma funcionalidade pode impactar outras. Embora alguns testes tenham como objetivo aferir apenas a eficácia, ou seja, verificar se uma funcionalidade atingiu seu objetivo, outros levam em conta a eficiência. De nada adiantaria criar um sistema que cumprisse com todas as regras de negócio, mas exigindo um tempo tão longo que inviabiliza-se sua utilização pelos usuários." Desafio 5 Você está trabalhando como engenheiro de software em um projeto onde a qualidade do código é uma prioridade máxima. Para garantir que as funcionalidades essenciais do sistema não sejam comprometidas durante o desenvolvimento, você decide implementar uma estratégia abrangente de testes automatizados. Considerando a importância dos testes em diferentes níveis de escopo funcional, qual é a principal vantagem dos testes automatizados em comparação aos testes manuais? A Eles permitem que cada modificação no código seja integrada automaticamente ao sistema. B Eles garantem a execução mais rápida de testes funcionais em comparação aos manuais. C Eles eliminam a necessidade de revisão de código por pares após cada modificação. D Eles garantem que cada modificação será automaticamente aprovada sem erros. E Eles simplificam o processo de depuração manual após a introdução de novas funcionalidades. A alternativa B está correta. A) Eles permitem que cada modificação no código seja integrada automaticamente ao sistema: Incorreta. A integração de código é parte da prática de CI/CD, mas a questão específica dos testes automatizados foca na verificação das funcionalidades, não na integração. B) Eles garantem a execução mais rápida de testes funcionais em comparação aos manuais: Correta. A principal vantagem dos testes automatizados é a velocidade e consistência com que podem ser executados, permitindo a verificação contínua das funcionalidades essenciais do software, identificando rapidamente falhas que podem ser corrigidas antes da integração. C) Eles eliminam a necessidade de revisão de código por pares após cada modificação: Incorreta. Embora os testes automatizados sejam importantes, a revisão de código por pares continua sendo uma prática recomendada para identificar questões que os testes automatizados podem não detectar. D) Eles garantem que cada modificação será automaticamente aprovada sem erros: Incorreta. Testes automatizados garantem que as funcionalidades são verificadas rapidamente, mas não garantem a aprovação automática sem erros. Modificações ainda podem falhar em testes e requerer correção. E) Eles simplificam o processo de depuração manual após a introdução de novas funcionalidades: Incorreta. Testes automatizados ajudam a identificar erros, mas a depuração manual pode ainda ser necessária para resolver problemas complexos que os testes automáticos detectam. Para saber mais sobre esse conteúdo, acesse: Módulo 4 TESTE DE SOFTWARE "Os testes automatizados visam garantir as funcionalidades essenciais do software ainda durante o processo de desenvolvimento, verificando processos pontuais e o efeito de mudanças sobre o sistema como um todo, além de simular situações de erro com grande facilidade. Em termos práticos, qualquer modificação será aceita apenas quando todos os testes forem satisfatórios. Existem diversos níveis de teste, que variam em termos do escopo funcional, como pode ser observado no quadro seguinte." 3. Conclusão Considerações finais Parabéns! Incluir exercícios em sua rotina de estudos te auxilia a fixar, aplicar e desenvolver a capacidade de resolver problemas! Continue, o processo de aprender é contínuo e seu esforço fundamental. Compartilhe conosco como foi sua experiência com este conteúdo. Por favor, responda a este formulário de avaliação e nos ajude a aprimorar ainda mais a sua experiência de aprendizado! https://forms.office.com/r/JXV3zaZitX https://forms.office.com/r/JXV3zaZitX PRATICANDO 1. Itens iniciais Apresentação Objetivo 1. Estudo de Caso Sincronização de Dados em Aplicativo Mobile sem conexão 2. Desafios Sintaxe e Componentes do React Native Interface Gráfica com React Native Persistência de Dados com React Native Conexão Remota com React Native Tópicos Avançados em React Native 3. Conclusão Considerações finaisA) Incorreta. Embora NPM possa ser utilizado para executar scripts que iniciam a aplicação, sua função principal vai além de apenas rodar o React.js no navegador. Ele gerencia pacotes, dependências e automatiza tarefas dentro do projeto. B) Correta. NPM (Node Package Manager) é uma ferramenta essencial em projetos que utilizam Node.js e React.js, pois permite o gerenciamento eficiente de pacotes e dependências. Além disso, NPM facilita a execução de scripts que automatizam tarefas comuns durante o desenvolvimento, como testes, builds, e a inicialização do servidor de desenvolvimento. C) Incorreta. NPM não se limita à configuração do ambiente de produção. Embora possa ser usado em parte para esse fim, seu papel principal é no gerenciamento de dependências e scripts, tanto em ambientes de desenvolvimento quanto de produção. D) Incorreta. NPM não compila o código JavaScript para HTML. A compilação do código JavaScript, especialmente em projetos React.js, é geralmente realizada por ferramentas como Babel e Webpack, que podem ser configuradas e gerenciadas através de scripts do NPM. E) Incorreta. NPM não é uma ferramenta gráfica. Ele é uma ferramenta de linha de comando utilizada para gerenciar pacotes e dependências, e não tem relação direta com o design ou gerenciamento da interface de usuário. Para saber mais sobre esse conteúdo, acesse: Módulo 1: NPM “O NPM (de node package manager) é um gerenciador de pacotes lançado no biênio 2009-2010. Tal pacote faz parte da instalação padrão do ambiente de execução da linguagem JavaScript Node.js, sendo ambos instalados de forma conjunta. O NPM possui três componentes: Site é possível acessar nele sua documentação, além de pesquisar e navegar pelas diversas bibliotecas (packages) disponíveis; CLI, do inglês command line interface ou interface de linha de comando, o CLI possibilita a execução de comandos por meio de um terminal. O CMD no Windows ou o bash no Linux é um exemplo disso; e Repositório aberto, local onde os pacotes (bibliotecas) ficam armazenados.” Desafio 3 Como desenvolvedor de uma aplicação móvel usando React Native, você precisa criar uma interface que se integre perfeitamente ao sistema operacional do dispositivo. Para isso, é fundamental entender como utilizar componentes nativos do React Native. Qual das alternativas a seguir melhor descreve o uso de componentes nativos no React Native para o desenvolvimento de aplicações móveis? A Componentes nativos são utilizados para substituir o uso de JavaScript na interface da aplicação. B Componentes nativos permitem a criação de interfaces de usuário personalizadas que se adaptam ao sistema operacional do dispositivo. C Componentes nativos eliminam a necessidade de usar bibliotecas externas para interagir com o hardware do dispositivo. D Componentes nativos são utilizados exclusivamente para melhorar o desempenho gráfico da aplicação em dispositivos Android. E Componentes nativos do React Native são responsáveis pela renderização da aplicação diretamente no navegador. A alternativa B está correta. A) Incorreta. Componentes nativos não substituem o uso de JavaScript na construção da interface. Na verdade, eles são acessados e manipulados através de JavaScript no React Native para renderizar interfaces que parecem nativas. B) Correta. Componentes nativos em React Native, como , , , entre outros, permitem a criação de interfaces que se integram ao comportamento e aparência padrão do sistema operacional, garantindo que a aplicação tenha uma aparência e desempenho nativos tanto em dispositivos iOS quanto Android. C) Incorreta. Embora componentes nativos possam acessar funcionalidades específicas do sistema operacional, bibliotecas externas ainda podem ser necessárias para interagir com alguns aspectos do hardware do dispositivo, como a câmera ou sensores avançados. D) Incorreta. Componentes nativos não são usados exclusivamente para melhorar o desempenho gráfico, mas sim para garantir que a interface do usuário se comporte de maneira nativa em diferentes sistemas operacionais. E) Incorreta. Componentes nativos do React Native não renderizam a aplicação no navegador, mas sim em dispositivos móveis, usando APIs nativas para renderizar componentes específicos do sistema operacional. Para saber mais sobre esse conteúdo, acesse: Módulo 2: JSX "Na escrita de um aplicativo fazendo uso do framework React Native, opta-se por um desenvolvimento chamado de híbrido. Ou seja, um único código será compilado para poder rodar em dispositivos Android ou iOS. Isso é possível pelo fato de os dispositivos possuírem dois núcleos: Núcleo nativo. De acordo com a linguagem nativa de cada sistema operacional (Java ou Kotlin para Android e Swift ou Objective-C para iOS); Núcleo JavaScript, chamado de JavaScriptCore.". Desafio 4 Você está desenvolvendo uma aplicação complexa em React.js e deseja usar React Developer Tools para melhorar sua apliacação. Qual é o principal benefício do uso do React Developer Tools no desenvolvimento de aplicações React.js? A Permitir a criação de novos componentes diretamente na ferramenta. B Facilitar a inspeção da árvore de componentes, permitindo a visualização e modificação de suas props e estado em tempo real. C Automatizar o processo de build e deploy da aplicação React.js. D Substituir a necessidade de escrever testes unitários para os componentes React. E Gerar código JavaScript automaticamente para novos componentes. A alternativa B está correta. A) Incorreta. React Developer Tools não permite a criação de novos componentes diretamente na ferramenta. Ele é utilizado para inspecionar e debugar os componentes já existentes na aplicação. B) Correta. React Developer Tools é uma extensão que permite aos desenvolvedores inspecionar a árvore de componentes de uma aplicação React. Com ela, é possível visualizar hierarquias, props, estado e outros detalhes dos componentes, facilitando o processo de depuração e identificação de problemas em tempo real. C) Incorreta. A ferramenta não é responsável pelo build ou deploy da aplicação. Suas funcionalidades estão focadas na inspeção e depuração da interface em React. D) Incorreta. React Developer Tools não substitui a necessidade de testes unitários. Testes são essenciais para garantir a funcionalidade do código, enquanto o Developer Tools ajuda a depurar e entender a estrutura da aplicação. E) Incorreta. React Developer Tools não gera código automaticamente. Sua função é auxiliar no desenvolvimento através da inspeção dos componentes e seu comportamento. Para saber mais sobre esse conteúdo, acesse: Módulo 3: REACT DEVELOPER TOOLS “Esta ferramenta é uma biblioteca que, ao ser instalada, permite, por meio do navegador, a depuração da hierarquia de: componentes; estilos; propriedades; estados do aplicativo. Para instalar essa ferramenta, execute o comando abaixo no terminal: npm install –g react-devtools.” Desafio 5 Você foi designado para desenvolver um aplicativo móvel multiplataforma e, após pesquisar as melhores ferramentas para o projeto, descobriu o Expo. Agora, você precisa explicar ao seu time as vantagens de usar o Expo como framework para acelerar o desenvolvimento, construção e implantação do aplicativo em diferentes plataformas. Como o uso do Expo pode beneficiar o desenvolvimento de aplicativos móveis multiplataforma? A Expo permite a criação de aplicativos nativos sem a necessidade de escrever código JavaScript ou TypeScript. B Expo é uma ferramenta exclusiva para testar aplicativos no ambiente de desenvolvimento sem suporte para produção. C Expo facilita o desenvolvimento, construção e implantação de aplicativos Android, iOS e web a partir de um único código base em JavaScript/TypeScript. D Expo é uma plataforma para criar interfaces de usuário apenas para aplicações web, sem suporte para dispositivos móveis. E Expo é utilizado principalmente para compilar código JavaScript em linguagens nativas de cada plataforma. A alternativa C está correta. A)Incorreta. O Expo utiliza JavaScript ou TypeScript como base para o desenvolvimento de aplicativos, mas não elimina a necessidade de escrever código nessas linguagens. B) Incorreta. Embora o Expo seja muito útil em ambientes de desenvolvimento, ele também é projetado para ser utilizado em produção, facilitando a construção e implantação de aplicativos móveis. C) Correta. O Expo é um framework e uma plataforma que oferece um conjunto de ferramentas e serviços que simplificam o processo de desenvolvimento de aplicativos móveis multiplataforma, utilizando um único código base em JavaScript/TypeScript. Isso permite a criação eficiente de aplicativos para Android, iOS e web, acelerando o desenvolvimento e simplificando a manutenção. D) Incorreta. Expo é uma ferramenta projetada para suportar o desenvolvimento de aplicativos móveis nativos, além de também oferecer suporte para aplicações web, o que o torna uma solução multiplataforma completa. E) Incorreta. Expo não é um compilador de código JavaScript para linguagens nativas, mas sim um framework que facilita o desenvolvimento e implantação de aplicativos multiplataforma usando JavaScript/ TypeScript. Para saber mais sobre esse conteúdo, acesse: Módulo 2: UTILIZAÇÃO DO EXPO “Expo é um framework é uma plataforma composta por um conjunto de ferramentas e serviços que facilita as tarefas de desenvolvimento, construção e implantação de aplicativos Android, iOS e web. Ele possui como base um mesmo código JavaScript/TypeScript, permitindo que os desenvolvedores criem e mantenham aplicativos para múltiplas plataformas de maneira mais eficiente e integrada.” Interface Gráfica com React Native Desafio 1 Você é um desenvolvedor júnior que acaba de se juntar a uma equipe responsável pelo desenvolvimento de um aplicativo móvel utilizando o framework React Native. Durante a fase inicial do projeto, foi solicitado que você implemente a lista de produtos em uma tela que exiba os itens de diferentes categorias. Seu líder de equipe sugere o uso do componente SectionList. Qual a principal vantagem de utilizar o SectionList em vez de outros componentes de lista disponíveis no React Native? A O SectionList permite a exibição de dados em formato de tabela, facilitando a organização das informações em linhas e colunas. B O SectionList é otimizado para exibir listas com uma grande quantidade de dados, garantindo desempenho eficiente em qualquer dispositivo. C O SectionList permite agrupar dados em seções, exibindo cabeçalhos específicos para cada grupo, o que facilita a visualização organizada de categorias. D O SectionList é o único componente que oferece suporte para cabeçalhos e rodapés personalizáveis em listas, melhorando a estética das telas. E O SectionList é ideal para exibir listas em modo horizontal, aproveitando ao máximo a largura da tela do dispositivo. A alternativa C está correta. A) O SectionList permite a exibição de dados em formato de tabela, facilitando a organização das informações em linhas e colunas: Incorreta. O SectionList não é projetado para exibir dados em formato de tabela; esse tipo de organização é melhor atendido por componentes específicos para tabelas. O SectionList se destina a agrupar dados em seções com cabeçalhos para cada grupo, e não a organizar informações em linhas e colunas. B) O SectionList é otimizado para exibir listas com uma grande quantidade de dados, garantindo desempenho eficiente em qualquer dispositivo: Incorreta. Embora o SectionList possa lidar bem com grandes quantidades de dados, sua principal função é agrupar dados em seções. O componente FlatList seria mais apropriado para exibir listas extensas de maneira otimizada em termos de desempenho. C) O SectionList permite agrupar dados em seções, exibindo cabeçalhos específicos para cada grupo, o que facilita a visualização organizada de categorias: Correta. A principal vantagem do SectionList é justamente a capacidade de organizar dados em seções, permitindo que cada grupo de itens seja precedido por um cabeçalho que identifica a categoria ou seção. Isso é especialmente útil quando há necessidade de dividir visualmente os dados para uma melhor compreensão por parte do usuário. D) O SectionList é o único componente que oferece suporte para cabeçalhos e rodapés personalizáveis em listas, melhorando a estética das telas: Incorreta. Vários componentes de lista, como o FlatList, também oferecem suporte para cabeçalhos e rodapés personalizáveis. O diferencial do SectionList está na organização dos dados em seções, com cabeçalhos para cada uma delas, e não na customização de cabeçalhos ou rodapés. E) O SectionList é ideal para exibir listas em modo horizontal, aproveitando ao máximo a largura da tela do dispositivo: Incorreta. Exibir listas em modo horizontal é uma funcionalidade mais associada ao FlatList. O SectionList se destaca por sua capacidade de exibir listas divididas em seções, organizando os dados em categorias distintas. Para saber mais sobre esse conteúdo, acesse: Módulo 2: COMPONENTES DE LISTA “A SectionList é um componente para a exibição de dados em formato de lista que permite que eles sejam seccionados, ou seja, exibidos em seções. Para ficar mais fácil de entender o funcionamento e a utilidade desse componente, imagine que você tenha uma lista de produtos para exibir e que esses produtos pertencem a diferentes categorias de produtos. Ao utilizar o SectionList, é possível agrupá-los por categoria, exibindo algum dado que a identifique, como seu nome, por exemplo, e aninhados a cada diferente categoria seus respectivos produtos. Como frisamos, tal componente facilita esse trabalho de seccionamento dos dados, evitando a necessidade de criar mais códigos para ter o mesmo resultado utilizando outros componentes de lista.” Desafio 2 Você é um desenvolvedor júnior que está trabalhando na criação de uma interface para exibir uma lista de produtos em um aplicativo de compras online utilizando React Native. O seu líder de equipe sugeriu o uso do componente FlatList para essa tarefa. Qual é uma característica fundamental do FlatList que o torna adequado para exibir alguns tipos de listas? A O FlatList permite a organização dos itens em seções com cabeçalhos personalizados, facilitando a categorização dos dados. B O FlatList permite exibir grandes volumes de dados de forma contínua, garantindo uma navegação suave mesmo com muitas entradas. C O FlatList suporta a exibição de listas em múltiplas colunas, o que permite uma melhor utilização do espaço da tela. D O FlatList é ideal para exibir listas curtas, garantindo que todos os elementos sejam renderizados ao mesmo tempo. E O FlatList permite exibir listas em modo de rolagem horizontal, aproveitando toda a largura da tela. A alternativa B está correta. A) O FlatList permite a organização dos itens em seções com cabeçalhos personalizados, facilitando a categorização dos dados: Incorreta. Essa característica é própria do SectionList. O FlatList é projetado para listas lineares simples, sem cabeçalhos de seções, mas com uma ótima performance para grandes quantidades de dados. B) O FlatList permite exibir grandes volumes de dados de forma contínua, garantindo uma navegação suave mesmo com muitas entradas: Correta. O FlatList é altamente eficiente para exibir longas listas de itens, permitindo uma rolagem suave e contínua, mesmo quando a lista contém centenas ou milhares de itens. Isso é particularmente útil em aplicações que exigem o carregamento de grandes conjuntos de dados. C) O FlatList suporta a exibição de listas em múltiplas colunas, o que permite uma melhor utilização do espaço da tela: Incorreta. Embora o FlatList possa ser configurado para exibir itens em colunas, essa não é sua característica principal. O FlatList é mais comumente usado para listas simples, dispostas em uma única coluna. D) O FlatList é ideal para exibir listas curtas, garantindo que todos os elementos sejam renderizados ao mesmo tempo: Incorreta. O FlatList é mais adequado para listaslongas, onde carregar todos os itens de uma vez não seria eficiente. Ele é otimizado para lidar com grandes volumes de dados de maneira eficiente. E) O FlatList permite exibir listas em modo de rolagem horizontal, aproveitando toda a largura da tela: Incorreta. Embora o FlatList suporte a rolagem horizontal, essa não é sua característica mais relevante. Seu foco está na eficiente gestão e exibição de grandes listas verticais. Para saber mais sobre esse conteúdo, acesse: Módulo 2: COMPONENTES DE LISTA "O último componente de lista que veremos é o FlatList. Ele é otimizado, em termos de desempenho, para renderizar listas simples e básicas. Além disso, possui suporte para vários recursos muito úteis. Conheça alguns deles a seguir: Possui suporte a múltiplas plataformas; Permite exibir os itens de forma horizontal; Possui suporte a cabeçalho e rodapé; Permite a inclusão de separadores (componentes que podem ser usados para separar os itens da lista).". Desafio 3 Você está trabalhando em um projeto de desenvolvimento de um aplicativo mobile que requer a exibição de uma longa lista de dados, com potencial para dezenas de milhares de itens. Para garantir que o aplicativo permaneça ágil e eficiente, seu líder de equipe recomendou o uso do componente VirtualizedList em vez de outros componentes de lista disponíveis no React Native. Qual é a principal vantagem do uso do VirtualizedList para lidar com grandes volumes de dados? A O VirtualizedList permite o agrupamento de itens em seções, com cabeçalhos específicos para cada grupo. B O VirtualizedList renderiza apenas os itens que estão na tela, sem sobrecarregar a memória com itens fora da visualização. C O VirtualizedList facilita a criação de listas animadas com transições suaves entre os itens. D O VirtualizedList é ideal para listas curtas, onde todos os elementos precisam ser carregados de uma vez. E O VirtualizedList permite a organização de dados em formato de tabela, exibindo os itens em linhas e colunas. A alternativa B está correta. A) O VirtualizedList permite o agrupamento de itens em seções, com cabeçalhos específicos para cada grupo: Incorreta. Agrupamento de itens em seções com cabeçalhos é uma característica do SectionList e não do VirtualizedList. O foco do VirtualizedList está na renderização eficiente de grandes listas de dados. B) O VirtualizedList renderiza apenas os itens que estão na tela, sem sobrecarregar a memória com itens fora da visualização: Correta. A principal vantagem do VirtualizedList é sua capacidade de renderizar apenas os elementos que estão visíveis na tela no momento, liberando a memória dos itens que não estão sendo exibidos. Isso é essencial para o desempenho eficiente em listas com um grande volume de dados. C) O VirtualizedList facilita a criação de listas animadas com transições suaves entre os itens: Incorreta. Embora o VirtualizedList possa ser usado com animações, essa não é sua principal característica. Ele é mais focado na eficiência de renderização de grandes listas de dados. D) O VirtualizedList é ideal para listas curtas, onde todos os elementos precisam ser carregados de uma vez: Incorreta. O VirtualizedList é projetado para lidar com grandes volumes de dados e não seria necessário ou vantajoso para listas curtas, onde todos os itens poderiam ser renderizados de uma vez. E) O VirtualizedList permite a organização de dados em formato de tabela, exibindo os itens em linhas e colunas: Incorreta. O VirtualizedList é utilizado para listas lineares e sua principal função é a renderização eficiente, não a exibição de dados em formato de tabela. Para saber mais sobre esse conteúdo, acesse: Módulo 2: COMPONENTES DE LISTA “Das características do VirtualizedList, destacam-se: Otimização do consumo de memória e de desempenho no manuseio de grandes listas; Manutenção de janela finita de renderização de itens ativos e substituição daqueles que estejam fora da janela de renderização; A adaptação permite que os itens sejam renderizados de forma incremental, o que minimiza a ocorrência de espaços em branco.” Desafio 4 Você é um desenvolvedor júnior que está trabalhando em um aplicativo mobile utilizando o React Native. Durante a fase de desenvolvimento, você precisa implementar a navegação entre diferentes telas do aplicativo. Seu líder de equipe sugeriu o uso da Stack Navigation como a abordagem principal para gerenciar a navegação. Considerando as funcionalidades oferecidas pela Stack Navigation, qual é uma de suas principais vantagens em comparação com outros tipos de navegação disponíveis no React Navigation? A A Stack Navigation permite a criação de fluxos de navegação complexos, com transições personalizadas entre as telas e suporte para deep linking. B A Stack Navigation gerencia automaticamente a navegação de retorno, permitindo que os usuários voltem para a tela anterior facilmente com um gesto de deslizar. C A Stack Navigation é otimizada para gerenciar múltiplas colunas de navegação, aproveitando o espaço disponível em telas maiores. D A Stack Navigation oferece suporte nativo para navegação em modo de abas, facilitando a organização das telas em categorias distintas. E A Stack Navigation permite a navegação entre telas em modo horizontal, aproveitando ao máximo a largura da tela. A alternativa B está correta. A) A Stack Navigation permite a criação de fluxos de navegação complexos, com transições personalizadas entre as telas e suporte para deep linking: Incorreta. Embora a Stack Navigation suporte transições personalizadas e deep linking, essa não é a sua principal vantagem. Esses recursos também podem ser implementados com outros tipos de navegação no React Navigation. B) A Stack Navigation gerencia automaticamente a navegação de retorno, permitindo que os usuários voltem para a tela anterior facilmente com um gesto de deslizar: Correta. Uma das principais vantagens da Stack Navigation é sua capacidade de gerenciar a navegação de forma intuitiva, permitindo que os usuários voltem à tela anterior com um simples gesto de deslizar ou pressionando o botão de voltar, oferecendo uma experiência de usuário consistente com os padrões nativos. C) A Stack Navigation é otimizada para gerenciar múltiplas colunas de navegação, aproveitando o espaço disponível em telas maiores: Incorreta. A Stack Navigation é mais adequada para fluxos lineares de navegação, onde as telas são empilhadas uma sobre a outra. Para múltiplas colunas de navegação, outras abordagens, como a Drawer Navigation ou Bottom Tab Navigation, seriam mais apropriadas. D) A Stack Navigation oferece suporte nativo para navegação em modo de abas, facilitando a organização das telas em categorias distintas: Incorreta. A navegação por abas é gerenciada por outro tipo de navegação, a Tab Navigation, e não pela Stack Navigation. A Stack Navigation se concentra em fluxos de navegação empilhados, onde uma tela é exibida sobre a outra. E) A Stack Navigation permite a navegação entre telas em modo horizontal, aproveitando ao máximo a largura da tela: Incorreta. Embora a Stack Navigation suporte a navegação entre telas, ela é mais comumente usada para navegação vertical, onde uma tela se sobrepõe à outra. A navegação horizontal não é a característica principal da Stack Navigation. Para saber mais sobre esse conteúdo, acesse: Módulo 3: STACK NAVIGATOR "O conceito do Stack Navigator é bastante similar ao do navegador utilizado em um site (ou sistema web): por meio de links ou botões exibidos em um menu, na barra de navegação e até mesmo em links no meio do próprio conteúdo, se é levado até uma nova página. Entrando nela, pode-se continuar navegando para novas páginas ou voltar – seja por intermédio de um link ou pela opção “voltar” presente no navegador – para a anterior.". Desafio 5 Você está desenvolvendo um aplicativo mobile que requer uma navegação fácil. Para essa tarefa, seu líder de equipe sugeriu a implementação da Drawer Navigation para facilitar o acesso rápido. Qual é a principal vantagem deusar a Drawer Navigation em um aplicativo móvel? A A Drawer Navigation permite organizar as telas em categorias, exibindo uma barra de navegação na parte inferior do aplicativo. B A Drawer Navigation facilita o acesso rápido a várias telas do aplicativo a partir de um menu lateral que pode ser aberto com um gesto ou clique. C A Drawer Navigation é otimizada para criar fluxos de navegação empilhados, onde as telas são sobrepostas em uma ordem linear. D A Drawer Navigation permite a navegação entre telas usando uma barra de navegação fixa na parte superior do aplicativo. E A Drawer Navigation permite a exibição de listas longas de dados, gerenciando eficientemente a memória do dispositivo. A alternativa B está correta. A) A Drawer Navigation permite organizar as telas em categorias, exibindo uma barra de navegação na parte inferior do aplicativo: Incorreta. Essa funcionalidade está mais alinhada com a Bottom Tab Navigation, que organiza a navegação em abas na parte inferior da tela, não com a Drawer Navigation. B) A Drawer Navigation facilita o acesso rápido a várias telas do aplicativo a partir de um menu lateral que pode ser aberto com um gesto ou clique: Correta. A principal vantagem da Drawer Navigation é a capacidade de acessar diferentes seções do aplicativo de forma rápida e intuitiva por meio de um menu lateral que desliza para dentro da tela, geralmente com um gesto ou um clique no ícone de menu. C) A Drawer Navigation é otimizada para criar fluxos de navegação empilhados, onde as telas são sobrepostas em uma ordem linear: Incorreta. Essa característica é própria da Stack Navigation, que organiza as telas em uma pilha, permitindo ao usuário navegar de uma tela para outra em uma sequência linear. D) A Drawer Navigation permite a navegação entre telas usando uma barra de navegação fixa na parte superior do aplicativo: Incorreta. A navegação com uma barra fixa na parte superior é típica da Top Tab Navigation ou Header Navigation, e não da Drawer Navigation. E) A Drawer Navigation permite a exibição de listas longas de dados, gerenciando eficientemente a memória do dispositivo: Incorreta. A Drawer Navigation é voltada para navegação entre diferentes telas ou seções do aplicativo, e não para a exibição de listas de dados. Componentes como FlatList ou VirtualizedList são mais adequados para gerenciar listas longas. Para saber mais sobre esse conteúdo, acesse: Módulo 3: GERENCIAMENTO DE NAVEGAÇÃO COM DRAWER NAVIGATOR "O último modelo de navegação que veremos é o Drawer Navigation. Esse modelo consiste em fornecer um menu de navegação que inicialmente fica invisível na tela, sendo acessado ao se arrastar a tela da esquerda (ou, caso queiramos, da direita) em direção ao meio dela. Ao se fazer tal movimento, as opções de navegação definidas dentro do Drawer ficam visíveis, permitindo, com isso, que se clique em uma de suas opções e navegue até a tela escolhida.". Persistência de Dados com React Native Desafio 1 Você foi contratado como desenvolvedor em uma empresa que está criando um aplicativo mobile. Durante a implementação de uma funcionalidade de salvamento de dados, você precisa decidir entre usar a serialização de objetos ou implementar uma solução de persistência. Saber a diferença entre esses dois conceitos é essencial para tomar a decisão correta. No desenvolvimento de aplicativos, qual é a principal diferença entre serialização e persistência de dados? A Serialização converte objetos em um formato específico para armazenamento ou transmissão, enquanto persistência garante que os dados estejam disponíveis após o fechamento do aplicativo. B Persistência envolve a transformação de objetos em bytes para facilitar a transferência de dados, enquanto serialização se refere ao armazenamento de dados de forma permanente em um banco de dados. C Serialização é usada para manter o estado dos objetos em memória, enquanto persistência converte objetos em formatos compatíveis com redes. D Persistência e serialização são termos intercambiáveis, ambos se referem ao armazenamento temporário de dados durante a execução de um aplicativo. E Serialização e persistência diferem apenas na linguagem de programação utilizada; a serialização é usada em Java, enquanto a persistência é exclusiva de linguagens como Python. A alternativa A está correta. A) Correta. Serialização é o processo de conversão de um objeto em um formato que pode ser facilmente armazenado ou transmitido, como JSON ou XML. Isso permite que os dados sejam enviados pela rede ou armazenados em um arquivo, enquanto a persistência refere-se à capacidade de manter esses dados acessíveis mesmo após o fechamento do aplicativo, geralmente utilizando bancos de dados ou sistemas de arquivos. B) Incorreta. Persistência não se refere à transformação de objetos em bytes para transferência de dados, mas sim ao armazenamento de dados de forma duradoura. Serialização é que transforma objetos em bytes para diferentes propósitos, incluindo transmissão e armazenamento temporário. C) Incorreta. Serialização não é usada apenas para manter o estado dos objetos em memória, mas sim para converter esses objetos em um formato que possa ser armazenado ou transmitido. A persistência é o processo que mantém os dados armazenados de forma que possam ser recuperados mesmo após o encerramento do aplicativo. D) Incorreta. Persistência e serialização não são termos intercambiáveis. Eles servem a propósitos distintos: a serialização transforma objetos em um formato para armazenamento ou transmissão, enquanto a persistência garante que os dados sejam armazenados e acessíveis a longo prazo. E) Incorreta. A diferença entre serialização e persistência não está relacionada à linguagem de programação, mas sim ao conceito e à aplicação de cada processo. Ambas as técnicas podem ser usadas em várias linguagens de programação, e a escolha entre uma ou outra depende das necessidades do aplicativo. Para saber mais sobre esse conteúdo, acesse: Módulo 1: INTRODUÇÃO À SERIALIZAÇÃO E PERSISTÊNCIA DE DADOS “Serialização. Definição: É um modo de expressar os dados de forma contígua, podendo ser uma sequência de bytes ou algum padrão de texto conhecido, como XML (eXtended Markup Language) ou JSON (Java Script Object Notation). Objetivo: Permitir a transmissão em rede ou a armazenagem em disco dos dados serializados. Persistência. Definição: Uma estrutura dotada de persistência ou persistente é aquela capaz de guardar seu estado corrente, normalmente em meio não volátil, como as unidades de disco. Objetivo: Recuperar posteriormente o seu estado corrente.” Desafio 2 Você está desenvolvendo um aplicativo de tarefas que precisa salvar as listas criadas pelos usuários. Para garantir que os dados sejam preservados mesmo após o fechamento do aplicativo, você decide usar o AsyncStorage para armazenar essas listas localmente. É importante compreender como o AsyncStorage funciona e como ele lida com a persistência e a recuperação dos dados. Ao implementar o AsyncStorage em um aplicativo React Native, qual é a principal característica e como objetos devem ser manipulados para armazenamento? A O AsyncStorage permite armazenar dados complexos como objetos diretamente, sem necessidade de conversão, garantindo a integridade dos dados no formato original. B A principal característica do AsyncStorage é sua capacidade de sincronizar dados entre dispositivos usando pares chave-valor, permitindo acesso simultâneo em múltiplos dispositivos. C Para utilizar objetos como valores no AsyncStorage, é necessário convertê-los para o formato JSON, garantindo que o armazenamento e recuperação dos dados sejam realizados de forma assíncrona e persistente. D O AsyncStorage utiliza um sistema de banco de dados relacional para armazenar dados em pares chave-valor, permitindo consultas complexas para recuperação de informações. E O AsyncStorage se destaca por permitir a criptografia nativa dos dados armazenados em pares chave-valor, assegurando proteção automática contraacessos não autorizados. A alternativa C está correta. A) Incorreta. O AsyncStorage não permite o armazenamento direto de objetos complexos. Para armazenar tais dados, é necessário convertê-los para o formato JSON, garantindo que possam ser corretamente armazenados e recuperados. B) Incorreta. O AsyncStorage não sincroniza dados automaticamente entre dispositivos. Ele é uma solução de armazenamento local que armazena pares chave-valor em um único dispositivo. C) Correta. O AsyncStorage utiliza pares chave-valor para armazenamento local e requer que objetos complexos sejam convertidos para o formato JSON. Isso assegura que o processo de armazenamento e recuperação seja feito de forma eficiente e que os dados sejam mantidos de maneira persistente. D) Incorreta. O AsyncStorage não utiliza um banco de dados relacional; ele armazena dados em pares chave-valor, sendo mais simples e direto, sem suporte a consultas complexas. E) Incorreta. O AsyncStorage não oferece criptografia nativa automática para os dados armazenados. A proteção dos dados requer implementações adicionais por parte do desenvolvedor. Para saber mais sobre esse conteúdo, acesse: Módulo 1: ARMAZENAMENTO COM ASYNCSTORAGE “Uma forma simples de persistência assíncrona é pelo AsyncStorage, que permite guardar e recuperar pares do tipo chave-valor, ou seja, um identificador e um dado associado, da mesma forma que uma chave primária identificando um registro em uma tabela. Para utilizar objetos como valores, eles devem estar serializados no formato JSON, com a utilização dos métodos descritos anteriormente. O quadro apresentado a seguir descreve os principais métodos de AsyncStorage.” Desafio 3 Você está trabalhando no desenvolvimento de um sistema complexo para uma empresa de tecnologia que utiliza uma linguagem de programação orientada a objetos. Durante as discussões sobre a escolha do banco de dados, surge a necessidade de decidir entre utilizar um banco de dados relacional ou um banco de dados orientado a objetos. A decisão correta poderá simplificar a transferência de dados entre o sistema e a base de dados. Qual é a principal vantagem de utilizar um banco de dados orientado a objetos (OODBMS) em um sistema desenvolvido com linguagens de programação orientadas a objetos, em comparação com o uso de bancos de dados relacionais tradicionais? A Bancos de dados orientados a objetos eliminam completamente a necessidade de mapeamento objeto- relacional, permitindo que objetos sejam armazenados diretamente em suas formas nativas sem perda de desempenho. B OODBMS permite a criação de consultas complexas usando SQL, facilitando a integração com sistemas legados que utilizam bancos de dados relacionais. C A principal vantagem do OODBMS é sua capacidade de armazenar grandes volumes de dados não estruturados, como vídeos e imagens, sem a necessidade de serialização prévia. D Em um OODBMS, a integração entre a base de dados e a aplicação é mais fluida, pois os objetos são armazenados em sua forma nativa, eliminando a necessidade de conversões complexas e mantendo a integridade do modelo de dados orientado a objetos. E A utilização de um OODBMS simplifica a modelagem de dados hierárquicos, permitindo que as tabelas relacionais tradicionais sejam utilizadas sem alterações significativas. A alternativa D está correta. A) Incorreta. Embora bancos de dados orientados a objetos reduzam a necessidade de mapeamento objeto-relacional, eles não eliminam completamente a necessidade de otimização de desempenho, especialmente em grandes volumes de dados. B) Incorreta. Embora seja possível criar consultas complexas em OODBMS, eles não utilizam SQL da mesma maneira que bancos de dados relacionais. A integração com sistemas legados pode, na verdade, ser mais desafiadora. C) Incorreta. A capacidade de armazenar dados não estruturados é uma característica mais comum em bancos de dados NoSQL do que em OODBMS, que são mais focados na integração com linguagens orientadas a objetos. D) Correta. A principal vantagem de um banco de dados orientado a objetos é que ele permite armazenar e manipular diretamente objetos definidos nas linguagens orientadas a objetos. Isso elimina a necessidade de mapeamento objeto-relacional, simplificando o desenvolvimento e a manutenção do sistema, além de preservar a integridade do modelo de dados orientado a objetos. E) Incorreta. OODBMS não dependem de tabelas relacionais e, portanto, não simplificam a modelagem de dados hierárquicos usando tabelas tradicionais. Em vez disso, eles utilizam a estrutura de objetos para modelar os dados. Para saber mais sobre esse conteúdo, acesse: Módulo 3: BANCO DE DADOS ORIENTADOS A OBJETOS “Atualmente, o desenvolvimento de sistemas por meio de linguagens orientadas a objetos é um padrão de mercado bem aceito pelas mais diversas empresas e consultorias, mas os bancos de dados mostram uma predominância do modelo relacional. Tal cenário traz uma boa justificativa para a adoção de técnicas de mapeamento objeto-relacional, mas a possibilidade de utilizar uma base de dados orientada a objetos simplificaria muito o processo de transferência dos dados para as estruturas da linguagem.” Desafio 4 Você está desenvolvendo um aplicativo mobile que precisa de uma solução eficiente e de fácil implementação para armazenamento de dados. Qual é a principal vantagem de utilizar o banco de dados Realm em um aplicativo mobile, em comparação ao uso do SQLite, especialmente no contexto de desenvolvimento orientado a objetos? A O Realm requer o uso de mapeamento objeto-relacional, o que permite uma maior flexibilidade na modelagem de dados complexos. B A principal vantagem do Realm é a necessidade de menos código para a implementação de operações CRUD, devido à sua integração direta com objetos de linguagem, eliminando o mapeamento objeto-relacional. C Realm utiliza um formato binário para armazenar dados, o que limita a sua compatibilidade com linguagens de programação orientadas a objetos. D A utilização do Realm é vantajosa apenas em sistemas que requerem grandes volumes de dados, onde o desempenho do SQLite não é suficiente. E Realm se destaca por oferecer suporte a linguagens procedurais, permitindo maior controle sobre a lógica do banco de dados em aplicativos mobile. A alternativa B está correta. A) Incorreta. O Realm é especificamente projetado para evitar a necessidade de mapeamento objeto- relacional, ao contrário do SQLite, que normalmente requer esse processo. B) Correta. A principal vantagem do Realm em relação ao SQLite é que ele se integra diretamente com as linguagens de programação orientadas a objetos, permitindo que os desenvolvedores trabalhem com objetos e coleções diretamente, sem a necessidade de um mapeamento objeto-relacional. Isso reduz a quantidade de código necessário para operações CRUD e simplifica o desenvolvimento. C) Incorreta. Realm utiliza um formato otimizado e eficiente para armazenar dados, mas isso não limita sua compatibilidade com linguagens orientadas a objetos; ao contrário, ele é feito para ser facilmente integrável com essas linguagens. D) Incorreta. Embora o Realm seja eficiente, sua principal vantagem não está relacionada apenas ao desempenho com grandes volumes de dados, mas sim à facilidade de uso e integração com linguagens orientadas a objetos. E) Incorreta. O foco do Realm não está em linguagens procedurais, mas sim em linguagens orientadas a objetos, o que facilita a integração com o código do aplicativo sem a necessidade de complexos procedimentos de banco de dados. Para saber mais sobre esse conteúdo, acesse: Módulo 3: BANCO DE DADOS REALM “O banco Realm é uma alternativa de código aberto ao armazenamento com SQLite, com uma abordagem mais amigável para o desenvolvedor, uma vez que trabalha dentro do padrão orientado a objetos. É uma boa opção para as plataformas móveis, com versões para as linguagens Swift, Objective-C, Java, Kotlin, C# e JavaScript. Sua utilização é muito intuitiva, seguindo a codificação padrãoda linguagem, o que torna a curva de aprendizagem muito menor, além de não necessitar de processos voltados para o mapeamento objeto-relacional, diminuindo a quantidade total de código. Todos os dados são observados como objetos e coleções, sendo necessário apenas instanciar um gestor para o acesso ao banco.” Desafio 5 Você está trabalhando em um projeto de integração de sistemas de diferentes plataformas que precisam compartilhar informações de forma eficiente. Cada sistema foi desenvolvido em momentos diferentes e com tecnologias diversas, resultando em dificuldades de interoperabilidade. O uso de formato interoperáveis, pode contribuir muito para esses sistemas. Qual é o principal benefício da adoção de formatos interoperáveis entre diferentes sistemas e plataformas, considerando o desafio da comunicação de dados em ambientes heterogêneos? A Formatos interoperáveis permitem que diferentes sistemas utilizem estruturas de dados únicas, eliminando a necessidade de replicação de informações em diferentes repositórios. B A adoção de formatos interoperáveis simplifica a replicação de dados entre sistemas diferentes, mantendo a integridade e a consistência das informações sem necessidade de tradução ou adaptação. C A utilização de formatos interoperáveis permite que diferentes plataformas compartilhem informações diretamente, reduzindo a necessidade de retrabalho e minimizando os riscos associados à interpretação incorreta de dados. D Formatos interoperáveis exigem que todas as plataformas envolvidas adotem o mesmo modelo de dados, o que pode resultar em maior uniformidade, mas também em maior complexidade de implementação. E A principal vantagem dos formatos interoperáveis é que eles facilitam a padronização das linguagens de programação utilizadas em diferentes sistemas, melhorando a eficiência do desenvolvimento de software. A alternativa C está correta. A) Incorreta. Embora formatos interoperáveis ajudem na comunicação entre sistemas, eles não necessariamente eliminam a necessidade de replicação de dados em diferentes repositórios. B) Incorreta. A replicação de dados é uma prática comum, mas o principal benefício dos formatos interoperáveis é facilitar a comunicação direta entre sistemas, não apenas a replicação. C) Correta. A principal vantagem dos formatos interoperáveis é que eles permitem que sistemas diferentes compartilhem informações de forma mais direta e eficiente. Isso reduz a necessidade de retrabalho e os problemas decorrentes de interpretações incorretas ou inconsistentes dos dados, algo que é comum quando diferentes plataformas têm diferentes modelos de interpretação e estruturas de armazenagem. D) Incorreta. Formatos interoperáveis não exigem que todas as plataformas adotem o mesmo modelo de dados; em vez disso, eles facilitam a comunicação entre diferentes modelos. E) Incorreta. Formatos interoperáveis visam facilitar a comunicação entre sistemas, independentemente da linguagem de programação utilizada, e não a padronização das linguagens. Para saber mais sobre esse conteúdo, acesse: Módulo 1: FORMATOS INTEROPERÁVEIS "Computadores transformam dados em informações, mas cada plataforma lidará com os modelos de interpretação e as estruturas de armazenagem de forma diferenciada. Por conta disso, não é raro observar diversos sistemas herméticos trabalhando a mesma informação de outros, o que significa um grande retrabalho que poderia ser amenizado. Com a evolução da tecnologia, os repositórios de dados se tornaram cada vez maiores, e a replicação inevitável, pois as plataformas inicialmente não foram projetadas para que ocorresse o compartilhamento desses dados, algo que se tornou evidente com o surgimento e a popularização das redes de computadores. […] Bases de dados relacionais, como Oracle e MySQL, são exemplos clássicos de produtos que permitem a interoperabilidade, uma vez que o sistema de gerenciamento de dados pode ser acessado por diversas plataformas, como Java e C#, desde que elas respeitem os protocolos de rede definidos para acesso ao banco. Em vez de nos preocuparmos em tratar os dados armazenados em formatos proprietários, utilizamos uma linguagem de consulta padronizada, denominada SQL (Structured Query Language), permitindo que as instruções sejam mantidas, mesmo com a mudança de fornecedor.". Conexão Remota com React Native Desafio 1 Você está desenvolvendo um aplicativo mobile utilizando React Native e precisa implementar funcionalidades que dependem de dados externos, como exibir informações de uma API pública de clima. Para isso, você tem à disposição componentes nativos e bibliotecas adicionais que facilitam a conexão com essas APIs. Em relação às opções disponíveis no React Native para realizar essas conexões, qual das alternativas a seguir descreve corretamente o uso de um componente nativo e uma biblioteca popular para essa finalidade? A O componente Axios é nativo do React Native e permite consumir dados utilizando métodos HTTP como GET e POST. B A Fetch API, componente nativo do React Native, permite consumir dados de APIs utilizando métodos HTTP e suporta formatos como JSON. C A biblioteca Fetch é nativa do React Native e suporta conexões WebSocket para consumo de dados em tempo real. D O componente nativo XMLHttpRequest é amplamente utilizado no React Native para consumo de APIs, mas não suporta o envio de dados. E A Fetch API e o Axios são ambas bibliotecas externas, sendo necessário instalá-las para consumo de APIs no React Native. A alternativa B está correta. A) Incorreta. O Axios não é um componente nativo do React Native; trata-se de uma biblioteca externa amplamente utilizada, mas que precisa ser instalada. A Fetch API, por outro lado, é nativa e permite consumir dados utilizando métodos HTTP como GET e POST. B) Correta. A Fetch API é um componente nativo do React Native que permite realizar conexões com APIs utilizando métodos HTTP como GET e POST. Ela suporta vários formatos de dados, incluindo JSON, o que facilita a integração com APIs modernas. C) Incorreta. A Fetch API não é usada para conexões WebSocket; ela é destinada ao consumo de dados via HTTP. WebSockets têm sua própria API em JavaScript e React Native, sendo utilizadas para comunicação em tempo real. D) Incorreta. Embora o XMLHttpRequest seja uma opção para consumo de APIs em ambientes JavaScript, ele não é nativamente preferido em React Native para consumo de dados. A Fetch API, por outro lado, é a escolha moderna e preferida para essas operações. E) Incorreta. A Fetch API é nativa do React Native e não requer instalação adicional. Apenas o Axios, que é uma biblioteca popular, precisa ser instalado para ser utilizado no React Native. Para saber mais sobre esse conteúdo, acesse: Módulo 1: COMPONENTES PARA CONEXÃO “No framework React Native, está disponível, nativamente, um componente que permite a conexão com recursos remotos, o Fetch API (também disponível no JavaScript em ambiente Web). Por meio do Fetch, é possível consumir e enviar dados utilizando os diferentes métodos HTTP (GET, POST etc.) e em diferentes formatos (JSON, XML, texto puro etc.). Além desse componente nativo, estão disponíveis bibliotecas como a Axios – uma das mais utilizadas –, entre outras. A seguir, será demonstrada a utilização da Fetch API e da Axios.” Desafio 2 Você está desenvolvendo um serviço web que precisa se comunicar com outras aplicações para fornecer dados e funcionalidades. Para isso, é importante entender como o REST funciona, pois ele é amplamente utilizado na construção de serviços web que permitem essa comunicação. Qual das alternativas a seguir melhor descreve o conceito de REST e sua aplicação na criação de serviços web? A REST é um protocolo de comunicação baseado em XML que garante a integridade dos dados entre diferentes sistemas. B REST é uma arquitetura de software que utiliza URLs para identificar e manipular recursos web, facilitando a comunicação entre aplicações. C REST é um modelo de segurança que protege os dados transmitidosentre cliente e servidor utilizando criptografia. D REST é uma metodologia de desenvolvimento ágil focada em entregar funcionalidades incrementais através da web. E REST é um conjunto de regras estritas que define como as APIs devem ser estruturadas em qualquer tipo de aplicação. A alternativa B está correta. A) Incorreta. REST não é um protocolo de comunicação específico como o XML. Embora o XML possa ser usado na comunicação RESTful, a arquitetura REST é mais abrangente e define princípios para o acesso e manipulação de recursos através de URLs, podendo utilizar diversos formatos de dados, como JSON e XML. B) Correta. REST, ou Transferência de Estado Representacional, é uma arquitetura de software usada para criar serviços web que permitem a comunicação entre diferentes aplicações. Ela utiliza URLs para identificar recursos e opera sobre o protocolo HTTP, permitindo a manipulação desses recursos através de métodos como GET, POST, PUT, e DELETE. C) Incorreta. REST não é um modelo de segurança, embora a segurança possa ser implementada em uma API RESTful através de autenticação, autorização e criptografia. REST é uma arquitetura que define como os recursos devem ser representados e acessados na web. D) Incorreta. REST não é uma metodologia de desenvolvimento ágil, mas uma arquitetura de software. Metodologias ágeis focam no processo de desenvolvimento, enquanto REST foca na comunicação e manipulação de recursos web. E) Incorreta. Embora REST forneça um conjunto de princípios para a criação de APIs, não é um conjunto de regras estritas. REST é flexível e pode ser adaptado para diferentes tipos de aplicações, dependendo das necessidades do sistema. Para saber mais sobre esse conteúdo, acesse: Módulo 2 ENTENDENDO O QUE É REST “Antes de tratarmos da aplicação prática da persistência remota, é importante conhecermos um pouco mais sobre o REST. Essa sigla, cujo significado em português é “Transferência de Estado Representacional” (do inglês Representational State Transfer), pode ser definida como uma abstração da arquitetura da Web, composta por um conjunto de princípios, restrições e definições, cuja principal função é permitir a comunicação entre diferentes aplicações. Em termos mais técnicos, REST é uma arquitetura de software usada para a criação de serviços web (WebServices) que permitem o acesso e a manipulação de recursos (chamados recursos Web) identificados por suas URLs.” Desafio 3 Você está desenvolvendo um aplicativo em React Native que precisa consumir dados de uma API externa. Durante o processo de requisição, é fundamental garantir que o usuário tenha feedback visual sobre o progresso da operação e que possíveis erros sejam tratados adequadamente para não comprometer a experiência de uso. Com base nessa necessidade, como você poderia implementar o controle de estado ao persistir dados remotamente no aplicativo? A Utilizando a função setError para capturar qualquer erro e o state isProcessing para indicar o andamento da requisição. B Controlando o state isLoading para indicar o processo de requisição e utilizando uma função de callback para tratar possíveis erros. C Utilizando a função catchError para capturar erros e o state requestStatus para gerenciar o progresso da requisição. D Implementando o state requestInProgress para mostrar o status da requisição e utilizando a função handleError para tratar erros. E Usando o state loadingStatus para controlar o progresso e a função tryCatch para tratar os erros. A alternativa B está correta. A) Incorreta. Embora a alternativa fale sobre a captura de erros e o controle de estado, os nomes das funções e estados não são convencionais em React Native. O uso de setError e isProcessing não reflete a prática comum, que utiliza isLoading para indicar o progresso da requisição e funções de callback ou outros métodos para tratamento de erros. B) Correta. Em React Native, é uma prática comum utilizar o state isLoading para gerenciar a exibição de um elemento de feedback visual ao usuário durante uma requisição. Além disso, funções de callback podem ser utilizadas para tratar erros que possam ocorrer durante o processo, garantindo que a experiência do usuário não seja prejudicada. C) Incorreta. Os termos catchError e requestStatus não são os mais utilizados em React Native para este propósito. A abordagem correta envolve o uso do state isLoading para feedback visual e funções de callback ou outros métodos para captura de erros. D) Incorreta. Embora a ideia de tratar erros e controlar o progresso da requisição esteja presente, os termos requestInProgress e handleError não refletem a terminologia padrão utilizada em React Native, onde isLoading e funções de callback ou outros métodos são mais adequados. E) Incorreta. O state loadingStatus e a função tryCatch não são os termos mais adequados. Em React Native, o uso de isLoading e funções de callback ou outros métodos é mais apropriado e reflete as melhores práticas para o controle do estado de requisições e tratamento de erros. Para saber mais sobre esse conteúdo, acesse: Módulo 2: PERSISTINDO DADOS REMOTAMENTE COM REACT NATIVE “Tratar os possíveis erros de uma requisição é fundamental para fornecer a melhor experiência possível ao usuário. Do contrário, e caso aconteça um erro sem que o tratemos, o usuário ficará com a sensação de que a requisição não foi realizada ou que está demorando muito, podendo, inclusive, desistir de utilizar o APP em virtude desses fatores. Outra prática importante é fornecer um elemento visual que informe ao usuário que a requisição está sendo processada. Normalmente, utilizamos a imagem conhecida como “loading” ou mesmo uma mensagem textual com tal informação. Olhando o código, podemos controlar a exibição desse elemento por meio do state “isLoading”, definido como “true” no momento que a requisição é iniciada e como “false” quando ela é finalizada.” Desafio 4 Você está desenvolvendo um aplicativo mobile que precisa ser funcional em várias situações. Considerando as diferentes abordagens possíveis, você decide implementar uma arquitetura Offline First para garantir que o aplicativo continue operando de maneira eficiente. Como essa arquitetura pode ser aplicada e quais são as considerações a serem feitas durante o planejamento do aplicativo? A A arquitetura Offline First garante que o aplicativo funcione exclusivamente offline, sem necessidade de sincronização futura com o servidor. B Em uma arquitetura Offline First, todos os recursos do aplicativo são totalmente funcionais apenas quando há uma conexão de alta velocidade. C Aplicativos desenvolvidos com a arquitetura Offline First operam de maneira semelhante com ou sem conexão, mas exigem planejamento cuidadoso para gerenciar sincronizações. D A arquitetura Offline First exige que todos os dados sejam armazenados localmente, impedindo o uso de recursos da nuvem para funcionalidades avançadas. E Aplicativos que utilizam a arquitetura Offline First não permitem a integração com APIs externas, devido à falta de conexão constante. A alternativa C está correta. A) Incorreta. A arquitetura Offline First não implica que o aplicativo funcione exclusivamente offline. Pelo contrário, ela permite que o aplicativo funcione tanto online quanto offline, sincronizando os dados quando a conexão estiver disponível. B) Incorreta. A arquitetura Offline First é projetada para que o aplicativo funcione bem independentemente da qualidade da conexão, não dependendo de uma conexão de alta velocidade para ser funcional. C) Correta. A arquitetura Offline First visa garantir que o aplicativo opere de maneira eficiente, independentemente da conectividade. Isso envolve o armazenamento local de dados e a sincronização posterior com o servidor, o que requer um planejamento cuidadoso para garantir a consistência dos dados. D) Incorreta. Embora o armazenamento local seja uma parte importante da arquitetura Offline First, isso não impede o uso de recursos da nuvem. Na verdade, a sincronização com servidoresremotos é uma parte essencial dessa abordagem. E) Incorreta. A arquitetura Offline First permite a integração com APIs externas, mas é projetada para que o aplicativo funcione corretamente mesmo quando a conexão não está disponível, sincronizando as operações quando a conexão for restabelecida. Para saber mais sobre esse conteúdo, acesse: Módulo 3: A ARQUITETURA OFFLINE FIRST “Em termos conceituais, podemos dizer que um aplicativo desenvolvido seguindo os princípios da Arquitetura Offline First é um aplicativo que funciona de modo semelhante, independentemente de possuir ou não conexão com a internet. Devemos ter em mente que cada aplicativo tem sua própria arquitetura, seus próprios requisitos e suas funcionalidades. Nesse sentido, podemos ter aplicativos nos quais, por uma decisão estratégica, a arquitetura Offline First não será aplicada. Em outros casos, podemos ter uma implementação híbrida, ou seja, alguns recursos funcionariam seguindo os princípios da arquitetura e outros não. E, por fim, podemos ter os aplicativos totalmente funcionais independentemente de estarem ou não conectados. No momento de planejamento do aplicativo, tenha em mente que há técnicas que podem ser utilizadas para a criação seguindo a arquitetura em questão e que sua utilização não é obrigatória, tratando-se de uma recomendação que traz alguns benefícios, mas que também gera preocupações e código extra.” Desafio 5 Você está desenvolvendo um aplicativo que precisa ser funcional mesmo sem conexão com a internet, utilizando o modelo Offline First. Para garantir que os dados do usuário sejam armazenados e sincronizados corretamente, você deve implementar um fluxo que lida com a ausência e o retorno da conexão. Como esse fluxo deve ser implementado para garantir a integridade dos dados e a funcionalidade do aplicativo? A O aplicativo deve armazenar os dados em um servidor remoto até que a conexão seja restabelecida. B Quando iniciado sem conexão, o aplicativo deve suspender todas as atividades até a internet voltar. C O aplicativo deve usar um banco de dados local para armazenar dados e sincronizar com o servidor remoto assim que a conexão for restaurada. D Durante a falta de conexão, o aplicativo deve solicitar ao usuário que salve manualmente os dados em um arquivo externo. E O aplicativo deve recarregar a página sempre que perder a conexão, garantindo que os dados não sejam perdidos. A alternativa C está correta. A) Incorreta. O armazenamento em um servidor remoto sem conexão à internet não é viável. O modelo Offline First depende do armazenamento local para garantir que os dados sejam mantidos até que possam ser sincronizados com o servidor remoto. B) Incorreta. Suspender as atividades do aplicativo até a internet voltar não é uma prática recomendada no modelo Offline First. O objetivo desse modelo é garantir que o aplicativo continue funcional, mesmo sem conexão. C) Correta. No modelo Offline First, o aplicativo deve usar um banco de dados local para armazenar os dados enquanto não há conexão, e então sincronizar esses dados com o servidor remoto quando a conexão for restaurada. Esse fluxo garante que o aplicativo funcione de maneira contínua e eficiente. D) Incorreta. Solicitar ao usuário que salve manualmente os dados não é necessário em um aplicativo Offline First, pois a sincronização automática é uma parte essencial desse modelo. E) Incorreta. Recarregar a página ao perder a conexão pode resultar em perda de dados e não é compatível com a filosofia do modelo Offline First, que visa a continuidade do uso do aplicativo independentemente da conexão. Para saber mais sobre esse conteúdo, acesse: Módulo 3: FLUXO DO MODELO OFFLINE FIRST “Os aplicativos criados utilizando esse modelo devem seguir um fluxo padrão em seu funcionamento: Ao serem iniciados, os aplicativos devem verificar se o dispositivo possui acesso à internet. Em caso negativo, o aplicativo deverá usar um banco de dados embarcado – que fica salvo e disponível apenas no dispositivo de cada usuário – para armazenar os dados provenientes das ações do usuário, assim como disponibilizar uma série de dados que serão necessários para o seu funcionamento. O aplicativo deve monitorar constantemente o status de conexão do dispositivo para que, tão logo ele se encontre com acesso à internet, seja executado o processo de sincronização, no qual os dados armazenados no banco embarcado serão sincronizados com o banco de dados/recurso remoto. Outro ponto importante nesse fluxo é incluir uma etapa de recuperação de dados remotos e inserção no banco embarcado a fim de que esses dados fiquem disponíveis localmente.” Tópicos Avançados em React Native Desafio 1 Você foi contratado como arquiteto de software em uma empresa que está desenvolvendo um sistema de grande porte com uma base de usuários distribuída globalmente. Durante as discussões de arquitetura, você sugere a adoção de um padrão arquitetural que seja adequado para ambientes distribuídos, garantindo que as comunicações entre os componentes sejam eficientes e que o sistema seja escalável. Nesse contexto, qual padrão arquitetural é mais apropriado para ser utilizado, considerando que ele já é amplamente adotado no mercado corporativo para soluções distribuídas? A Model-View-Controller (MVC) B Broker C Layered D Microkernel E Pipe and Filter A alternativa B está correta. A) Model-View-Controller (MVC): Incorreta. O padrão MVC é comumente utilizado para separar a lógica de apresentação da lógica de negócios e de dados em aplicações web. Embora seja eficaz para estruturar a interface com o usuário, não é especificamente destinado a ambientes distribuídos ou escalabilidade global. B) Broker: Correta. O padrão Broker é ideal para sistemas distribuídos, como CORBA e EJB, onde a comunicação eficiente entre componentes dispersos é crucial. Ele facilita a comunicação e coordenação de componentes distribuídos, utilizando stubs, skeletons, e protocolos de comunicação, além de outros padrões associados, como Proxy e Flyweight, para otimizar o desempenho. C) Layered: Incorreta. A arquitetura em camadas organiza o sistema em diferentes níveis, onde cada camada tem responsabilidades específicas. Este padrão é eficiente para modularidade e separação de preocupações, mas não é específico para ambientes distribuídos com a mesma eficácia que o Broker. D) Microkernel: Incorreta. Microkernel é um padrão arquitetural usado para desenvolver sistemas operacionais, dividindo o sistema em um pequeno núcleo que gerencia operações básicas, enquanto outras funcionalidades são implementadas como processos de espaço de usuário. Embora seja eficiente para certos sistemas, não é o padrão ideal para comunicação e escalabilidade em ambientes distribuídos. E) Pipe and Filter: Incorreta. Este padrão organiza sistemas como uma série de etapas de processamento de dados, onde cada etapa é um filtro que transforma o fluxo de dados. Embora útil para processamento de fluxo de dados, ele não é o melhor ajuste para sistemas distribuídos com foco em comunicação e escalabilidade global. Para saber mais sobre esse conteúdo, acesse: Módulo 1: PADRÕES ARQUITETURAIS "Os padrões de desenvolvimento permitem o reuso do conhecimento, trazendo soluções padronizadas para problemas já conhecidos no mercado. Embora eles solucionem boa parte dos problemas internos do desenvolvimento de um sistema, devemos observar também a necessidade de uma estratégia arquitetural para satisfazer a determinados domínios, e daí surge a ideia por trás dos padrões arquiteturais. Uma arquitetura muito comum no mercado corporativo é a de Broker, utilizada para objetos distribuídos, como CORBA e EJB, definindo a presença de stubs e skeletons, descritores de serviço, protocolo de comunicação, e demais elementos para distribuição do processamento. O uso de um padrão arquitetural sugere a utilização de diversos padrões de desenvolvimento associados ao mesmo, como o Proxy e Flyweight, que são adotados, respectivamente, na comunicação e gestão