💻 Semana 1 – Fundamentos de Aplicações Desktop

📌 Tópico 1 - O que é uma aplicação desktop?

Uma aplicação desktop é um programa desenvolvido para rodar diretamente no sistema operacional de um computador (Windows, Linux, macOS), utilizando os recursos locais da máquina como processador (CPU), memória RAM, disco rígido e periféricos (impressoras, scanners, câmeras, etc.).

Diferente de aplicações web (que funcionam em navegadores) e mobile (para smartphones), o desktop oferece maior integração com o sistema, acesso mais direto ao hardware e, geralmente, melhor desempenho para tarefas pesadas.

Características principais:

  • 📂 Instalação local no computador (via instalador ou executável).
  • ⚡ Acesso direto aos recursos do sistema (arquivos, pastas, hardware).
  • 🔌 Pode funcionar offline, sem necessidade de internet.
  • 🎨 Interfaces gráficas mais robustas, com menus, botões, janelas e atalhos.
  • 🔒 Dependência do sistema operacional (Windows, Linux, macOS).

Exemplos do dia a dia:

  • ✍️ Microsoft Word – editor de textos.
  • 📊 Excel – planilhas e cálculos.
  • 🎨 Photoshop – edição de imagens.
  • 💻 Visual Studio Code – ambiente de desenvolvimento.
  • 🎬 VLC Player – reprodução de vídeos.

Atualmente, muitas aplicações desktop modernas utilizam frameworks multiplataforma (como Flet, Electron, Qt, Flutter) que permitem criar softwares que funcionam em diferentes sistemas operacionais a partir de um único código-base.

Aplicação Desktop
🧱 Tópico 2 - Diferenças entre Aplicações Desktop, Web e Mobile

Antes de mergulharmos no desenvolvimento com Flet, é importante entender as principais diferenças entre os três tipos de aplicações mais comuns no mercado:

  • 💻 Desktop: São programas instalados diretamente no computador.
    ➡ Funcionam mesmo sem internet, possuem maior desempenho e podem acessar recursos do sistema operacional (como pastas, impressoras e dispositivos conectados).
  • 🌐 Web: Executadas dentro do navegador.
    ➡ Têm a vantagem de serem multiplataforma (funcionam em qualquer dispositivo com navegador), mas geralmente dependem de conexão com a internet.
  • 📱 Mobile: Projetadas para smartphones e tablets.
    ➡ São distribuídas em lojas de aplicativos (Google Play, App Store) e exploram recursos nativos, como GPS, câmera e sensores do dispositivo.

💡 Hoje, muitas empresas adotam aplicações híbridas, que combinam as vantagens de mais de uma plataforma. Exemplos: Slack e WhatsApp Desktop, que têm versão web, desktop e mobile, mantendo a experiência unificada para o usuário.

⚙️ Tópico 3 - Arquitetura típica (UI + Lógica + Dados)

Uma aplicação desktop bem estruturada geralmente é organizada em camadas. Essa separação facilita a manutenção, o reaproveitamento de código e a compreensão do sistema. Podemos imaginar como se fosse uma empresa: cada setor tem sua função, mas todos trabalham juntos.

📌 As 3 principais camadas
  • UI (Interface do Usuário): Onde o usuário interage. Inclui telas, botões, menus e formulários. É a parte “visível” da aplicação, responsável por exibir informações de forma clara.
    Exemplo: Uma janela de login com campos de usuário e senha.
  • Lógica (Regra de Negócio): Onde ficam as instruções que dão “inteligência” ao sistema. Controla o fluxo da aplicação, processa dados e garante que as regras do negócio sejam seguidas.
    Exemplo: Ao clicar em “Login”, verificar se usuário e senha são válidos.
  • Dados (Armazenamento): Responsável por guardar as informações. Pode ser um banco de dados, arquivos ou até mesmo memória temporária.
    Exemplo: Uma tabela de usuários cadastrados no SQLite.
📂 Estrutura típica de pastas

    app/
      ui/        # telas e componentes visuais (ex.: login.py, dashboard.py)
      services/  # regras de negócio (ex.: autenticação, cálculos)
      data/      # banco de dados, arquivos ou conexões
        
💡 Por que separar em camadas?
  • Facilita a manutenção do código (problemas localizados em uma camada não afetam as outras diretamente).
  • Permite que equipes diferentes trabalhem em paralelo (UI designers podem focar no visual, enquanto devs de dados trabalham no banco).
  • Torna o projeto escalável: é mais fácil adicionar novas telas, novos serviços ou trocar o banco de dados sem refazer tudo.
🧪 Exemplo prático

Imagine um programa de cadastro de alunos:

  • UI: Tela com formulário para digitar nome, idade e curso.
  • Lógica: Verificar se todos os campos foram preenchidos e aplicar regras (ex.: idade mínima de 15 anos).
  • Dados: Salvar as informações em um banco SQLite chamado alunos.db.

Essa arquitetura modular é conhecida como MVC (Model-View-Controller) ou Camada em Três Partes, sendo uma das mais usadas em aplicações desktop modernas.

🔄 Tópico 4 - Ciclo de vida de uma aplicação desktop

O ciclo de vida descreve as etapas pelas quais uma aplicação desktop passa: desde a instalação até o encerramento, incluindo como ela reage aos eventos do usuário e do sistema operacional. Entender esse fluxo ajuda a projetar apps estáveis, rápidos e fáceis de manter.

🧭 Etapas principais
  1. Instalação / Primeira execução: criação de pastas de dados do usuário, geração de arquivos de configuração padrão, verificação de dependências.
  2. Inicialização: carregar configurações (tema, idioma, janelas recentes), abrir conexões necessárias (ex.: banco local), preparar o estado inicial.
  3. Renderização da UI: construir a janela principal, menus, barras e registrar handlers de eventos.
  4. Loop de eventos: a UI fica “escutando” cliques, digitação, redimensionamento, atalhos, timers, etc. Essa é a “vida” do app.
  5. Execução de tarefas: operações de I/O, leitura/escrita em disco, consultas, cálculos — preferencialmente sem travar a UI.
  6. Persistência/Autosave: salvar preferências e dados periodicamente (ou ao fechar) para evitar perdas.
  7. Minimizar / Tray (opcional): enviar para bandeja do sistema, pausar atualizações pesadas, economizar recursos.
  8. Encerramento: confirmar saídas não salvas, fechar conexões, gravar logs finais e liberar recursos.
⚙️ Modelo dirigido a eventos

Apps desktop são direcionados a eventos: a UI dispara eventos (cliques, teclas, mudanças de foco) e o seu código reage. Evite bloquear a thread da interface; use filas de tarefas, threads ou processos para trabalhos pesados.

Padrão geral (pseudo):
# iniciar_app()
    carregar_configuracoes()
    inicializar_banco_local()  # opcional
    montar_janela_principal()
    registrar_eventos_ui()
    entrar_no_loop_de_eventos()  # fica rodando até fechar
    
    # ao_clicar_em("Salvar"):
    coletar_dados_da_tela()
    validar()
    escrever_em_arquivo_ou_db()
    mostrar_feedback("Salvo!")
          
🗂️ Onde salvar configurações e dados?
  • Config do usuário: pasta específica do usuário (ex.: AppData no Windows, ~/.config/meuapp/ no Linux, ~/Library/Application Support/ no macOS).
  • Dados do app: base local (ex.: SQLite) em pasta de dados, e não na pasta do executável.
  • Logs: arquivo de log rotativo para diagnóstico (ex.: logs/app.log).
🧰 Boas práticas
  • Não congele a UI: operações longas devem ser assíncronas (fila/worker).
  • Autosave em tarefas críticas; confirme antes de fechar se houver alterações não salvas.
  • Tratamento de exceções centralizado (exibir mensagem amigável + registrar no log).
  • Preferências versionadas: se mudar o formato, migre de forma segura.
🚩 Armadilhas comuns
  • Executar consultas pesadas na thread da UI → travamentos perceptíveis.
  • Salvar configs no diretório do executável (pode não ter permissão).
  • Não tratar fechamento inesperado → perda de dados.
🛠️ Tópico 5 - Exemplos e casos de uso

Onde o desktop ainda brilha? Em cenários com alto desempenho local, acesso a hardware, trabalho com arquivos e fluxos que exigem produtividade e recursos do sistema operacional.

🏭 Categorias comuns
  • Produtividade: editores de texto/planilhas, IDEs (VS Code, IntelliJ), gerenciadores de projetos.
  • Criação de conteúdo: edição de imagem/vídeo/áudio (Photoshop, DaVinci, Audacity).
  • Engenharia/CAD/Simulação: ferramentas que exigem GPU/CPU e integração com dispositivos.
  • Negócios/ERP/PDV: controle de estoque, vendas, emissão de notas, impressão local.
  • Educação/Ciência: estatística, visualização de dados, laboratórios offline.
  • Utilitários: backup local, gerenciadores de arquivos, conversores, players.
🧪 Casos de uso ilustrativos
  • PDV em loja: precisa imprimir, ler código de barras e funcionar sem internet → desktop.
  • CAD/Renderização: uso intenso de GPU/CPU e grandes arquivos → desktop.
  • Editor de vídeo: arquivos grandes, efeitos em tempo real → desktop.
  • Ferramenta de gerenciamento interno: pode ser web, mas se exige integração forte com periféricos/arquivos → desktop.
🧭 Quando escolher Desktop, Web ou Mobile?
Cenário Requisito forte Mais indicado
Trabalho offline e arquivos locais Acesso a pastas, impressão, periféricos Desktop
Uso por muitos usuários em locais diferentes Zero instalação, atualizações centralizadas Web
Funcionalidades nativas do smartphone GPS, câmera, notificações push Mobile
Mesma experiência em várias plataformas Time pequeno, entrega rápida Híbrido (desktop + web)
🔗 Híbridos e multiplataforma

Muitas soluções usam frameworks multiplataforma para compartilhar código entre desktop e web, mantendo a experiência consistente. Isso reduz custo e acelera entregas, desde que os requisitos de hardware e UX sejam compatíveis.

✅ Checklist rápido para decidir
  • Precisa rodar sem internet?
  • Requer periféricos (impressora, leitor, scanner)?
  • Manipula arquivos grandes localmente?
  • Precisa de desempenho alto e acesso a recursos do SO?
  • Usuários estão em múltiplos dispositivos/navegadores? (talvez web)
  • Requer recursos nativos do smartphone? (talvez mobile)
Dica: comece listando os requisitos “não funcionais” (desempenho, offline, segurança, instalação, manutenção). Eles costumam definir melhor a plataforma do que a própria funcionalidade.
🛠️ Prática Guiada – Semana 1

Objetivo: consolidar os conceitos de aplicações desktop, diferenças para web/mobile e a arquitetura em camadas (UI/Lógica/Dados).

  1. Mapeamento do seu uso real: liste 5 softwares desktop que você utiliza (ex.: VS Code, Excel, VLC). Para cada um, responda:
    • O que o software faz? (1–2 frases)
    • Por que desktop é adequado aqui? (desempenho, offline, acesso a arquivos, periféricos, etc.)
  2. Comparativo rápido (Desktop × Web × Mobile):
    • Escolha uma tarefa (ex.: “editar uma planilha com macros” ou “imprimir etiquetas em lote”).
    • Explique como seria essa tarefa nas 3 plataformas e indique a mais adequada, justificando.
  3. Mini-diagrama de arquitetura (UI/Lógica/Dados):
    • Projete um Bloco de Notas simples (ou “Cadastro de Alunos”).
    • Desenhe a separação em camadas (pode ser feito no papel e fotografado, ou em ferramenta digital).
    • Especifique:
      • UI: telas/componentes (ex.: editor de texto, botões Salvar/Abrir).
      • Lógica: validações e regras (ex.: impedir salvar vazio, contar caracteres).
      • Dados: como/onde salvar (ex.: arquivo .txt ou SQLite).
  4. Checklist de ciclo de vida:
    • Instalação/primeira execução prevê pasta de dados do usuário?
    • Carrega/salva preferências básicas? (tema/nome de arquivo recente)
    • Encerramento seguro (perguntar se há alterações não salvas)?
Dica: Use linguagem simples, mas seja específico nas justificativas. Pense nos requisitos não funcionais (offline, desempenho, periféricos, manutenção).
🎯 Entregáveis da prática (no mesmo PDF):
  • Lista com 5 softwares + justificativas.
  • Comparativo Desktop × Web × Mobile para uma tarefa escolhida.
  • Foto/imagem do mini-diagrama (ou anexo em página separada).
  • Checklist de ciclo de vida preenchido.
📋 Tarefas / Entrega – Semana 1

Formato do envio:

  • Um único arquivo PDF nomeado: Desktop_Semana01_NomeSobrenome.pdf
  • Conteúdo: prática completa (itens 1–4), mais a reflexão final (abaixo).
  • Envio pela plataforma da disciplina até domingo 23:59.

Reflexão final (5–8 linhas):

  • Em quais cenários desktop é claramente superior para você? Em quais não é?
  • O que mais chamou atenção na separação UI/Lógica/Dados?
📏 Rubrica de Avaliação (0–10 pontos)
Critério Descrição Pontuação
Compreensão das plataformas Clareza ao diferenciar Desktop, Web e Mobile, com justificativas conectadas a requisitos (offline, periféricos, desempenho). 0–2,0
Argumentação aplicada Comparativo da tarefa escolhido: análise realista, indicação da plataforma mais adequada e justificativa consistente. 0–2,0
Diagrama de arquitetura Diagrama legível, com separação clara de UI/Lógica/Dados e exemplos de elementos em cada camada. 0–2,5
Ciclo de vida Checklist coerente (instalação, preferências, encerramento seguro) e observações pertinentes. 0–1,5
Clareza e organização Padronização visual, ortografia, títulos/âncoras, entrega em PDF no padrão solicitado. 0–1,0
Reflexão final Capacidade crítica e síntese do aprendido (5–8 linhas, objetivas). 0–1,0
Total 10,0
🎯 Critérios de aceite
  • PDF único, nomeado corretamente.
  • Todos os itens da prática presentes.
  • Diagrama legível (foto nítida ou exportação digital).
  • Comparativo com justificativas objetivas (não apenas opinião).
🌟 Desafio (até +1,0 ponto extra)
  • Desenhe uma variação do diagrama usando um “service de preferências” (ex.: tema claro/escuro) e explique como seria o fluxo para salvar/ler essas preferências ao abrir/fechar o app.
Aviso: trabalhos idênticos ou com trechos copiados sem citação serão atribuídos nota 0. Colabore, mas escreva com suas próprias palavras.

Dica: se precisar de inspiração para diagramar, use draw.io, Figma, PowerPoint, ou papel + foto com boa iluminação.

📋 Tarefas / Entrega – Semana 1

Formato do envio:

  • Um único arquivo PDF nomeado: Desktop_Semana01_NomeSobrenome.pdf
  • Conteúdo: prática completa (itens 1–4), mais a reflexão final (abaixo).
  • Envio pela plataforma da disciplina até domingo 23:59.

Reflexão final (5–8 linhas):

  • Em quais cenários desktop é claramente superior para você? Em quais não é?
  • O que mais chamou atenção na separação UI/Lógica/Dados?
📏 Rubrica de Avaliação (0–10 pontos)
Critério Descrição Pontuação
Compreensão das plataformas Clareza ao diferenciar Desktop, Web e Mobile, com justificativas conectadas a requisitos (offline, periféricos, desempenho). 0–2,0
Argumentação aplicada Comparativo da tarefa escolhido: análise realista, indicação da plataforma mais adequada e justificativa consistente. 0–2,0
Diagrama de arquitetura Diagrama legível, com separação clara de UI/Lógica/Dados e exemplos de elementos em cada camada. 0–2,5
Ciclo de vida Checklist coerente (instalação, preferências, encerramento seguro) e observações pertinentes. 0–1,5
Clareza e organização Padronização visual, ortografia, títulos/âncoras, entrega em PDF no padrão solicitado. 0–1,0
Reflexão final Capacidade crítica e síntese do aprendido (5–8 linhas, objetivas). 0–1,0
Total 10,0
🎯 Critérios de aceite
  • PDF único, nomeado corretamente.
  • Todos os itens da prática presentes.
  • Diagrama legível (foto nítida ou exportação digital).
  • Comparativo com justificativas objetivas (não apenas opinião).
🌟 Desafio (até +1,0 ponto extra)
  • Desenhe uma variação do diagrama usando um “service de preferências” (ex.: tema claro/escuro) e explique como seria o fluxo para salvar/ler essas preferências ao abrir/fechar o app.
Aviso: trabalhos idênticos ou com trechos copiados sem citação serão atribuídos nota 0. Colabore, mas escreva com suas próprias palavras.

Dica: se precisar de inspiração para diagramar, use draw.io, Figma, PowerPoint, ou papel + foto com boa iluminação.