Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

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

Mais conteúdos dessa disciplina