Guia de estudo

Aula 25 · Qui, 09/07

Projeto Final — mostre tudo o que você aprendeu

Em duplas, um app desktop que funciona de verdade e resolve um problema real — Tkinter + SQLite + POO

A largada do projeto que fecha o curso. Hoje é briefing, escolha de tema e começar a modelar.

Em duplas Tkinter + SQLite + POO Modelar → codificar Início hoje

A ideia central

Juntar tudo num app que faz sentido usar

  • 🎯 Não é "só um programa que roda" — é escolher um problema real e entregar algo com utilidade, um app que você usaria de verdade.
  • 🧩 O projeto costura todo o curso numa peça só: classes, herança, polimorfismo, encapsulamento, abstração, Tkinter e SQLite trabalhando juntos.
  • 🏗️ A ordem que salva tempo: escolher o problema → modelar → codificar. Nesta sequência, sempre.

POO

o raciocínio orientado a objetos — o critério-mor.

SQLite

dados que sobrevivem ao fechar o programa.

Tkinter

interface gráfica funcional, com eventos.

O que vamos avaliar em você

Objetivos de aprendizagem

01

Modelar com POO

Traduzir um problema real em classes e representá-lo num diagrama de classes (UML).

02

POO justificada

Aplicar herança, polimorfismo, encapsulamento e abstração de forma justificada — não decorativa.

03

Persistir com SQLite

Guardar os dados num banco para que sobrevivam ao fechar o programa.

04

Interface Tkinter

Construir uma janela funcional, tratando os eventos (botões, campos, listas).

05

Documentar e apresentar

Explicar as decisões técnicas — por que cada classe, cada herança, cada escolha.

Escopo — leia com atenção

Faça ISSO rodar primeiro (escopo mínimo viável)

  • ⏱️ São poucos dias de aula (25 e 26) + trabalho fora — planeje pequeno. Ambição demais no papel vira projeto pela metade na entrega.
  • O mínimo que já vale: uma hierarquia de classe justificada + uma tabela com CRUD funcionando + uma janela Tkinter usável.
  • 🚀 Faça esse núcleo rodar de ponta a ponta ANTES de sofisticar. Recurso extra é bônus — só depois que o essencial funciona.

1 hierarquia

base + subclasses com polimorfismo real.

1 tabela + CRUD

SQLite persistindo: cadastrar, listar, editar, apagar.

1 janela

Tkinter tratando eventos, usável.

As regras do jogo

Como vai funcionar

  • 👥 Em duplas — os dois codam e os dois apresentam. Não é dividir em "quem faz o código" e "quem fala"; os dois entendem tudo.
  • 🎨 Tema livre: escolha um dos 8 sugeridos ou traga o seu.
  • 🛂 Ideia de fora da lista PRECISA validar comigo antes de começar (checamos escopo POO + Tkinter + SQLite e tamanho). Escolher da lista é livre, sem aprovação.
  • 📐 Modele antes de codificar — o diagrama vem antes do código e guia a construção.

Filtro rápido antes de decidir

Antes de escolher, cheque se o tema cabe no molde

  • Tem pelo menos uma hierarquia de classe justificada (base + subclasses que se comportam diferente)?
  • Dá para guardar os dados numa tabela SQLite (cadastrar, listar, editar, apagar)?
  • A tela Tkinter tem o quê fazer — botões, campos, uma lista?
  • O problema é real e você usaria de verdade?
  • Dá para fazer o núcleo rodar em ~2 dias de aula + trabalho fora?
  • Se é ideia de fora da lista: já validou comigo?

Tema 1 · Organize tarefas com prazo e status

Gerenciador de Tarefas (To-Do)

  • 🎯 Problema: a gente esquece compromissos. O app organiza tarefas com prazo e status — cadastrar, listar, editar, concluir, definir prioridade, filtrar por status e marcar data de vencimento.
  • 🔑 Onde entra a POO: classe Tarefa como base, com subclasses TarefaSimples e TarefaComPrazo — herança e polimorfismo (cada tipo mostra/verifica o prazo do seu jeito).

Tema 2 · Registre entradas e saídas e veja para onde vai o dinheiro

Controle de Gastos Pessoais

  • 🎯 Problema: não saber para onde o dinheiro foi. O app registra receitas e despesas — categorizar, ver o saldo, relatório por categoria e por mês.
  • 🔑 Onde entra a POO: base Lancamento com subclasses Receita e Despesa — polimorfismo no impacto sobre o saldo (uma soma, a outra subtrai) e encapsulamento protegendo os valores.

Tema 3 · Baralhos e cartões para fixar conteúdo

Flashcards de Estudo

  • 🎯 Problema: flashcards com repetição ajudam a fixar. O app tem baralhos e cartões (pergunta/resposta), modo estudo que revela a resposta, marcar acerto/erro e estatística por baralho.
  • 🔑 Onde entra a POO: classes Baralho e Cartao em composição (um baralho tem vários cartões), com métodos de embaralhar e pontuar.

Tema 4 · Centralize contatos com busca rápida

Agenda de Contatos

  • 🎯 Problema: números e e-mails espalhados por todo canto. O app centraliza tudo — cadastrar, editar, excluir, buscar por nome, agrupar (família/trabalho) e validar e-mail/telefone.
  • 🔑 Onde entra a POO: classe Contato, com possível hierarquia ContatoPessoal/ContatoProfissional, e encapsulamento com validação nos setters (e-mail e telefone só entram se forem válidos).

Tema 5 · Saiba o que tem, sem perder venda

Controle de Estoque

  • 🎯 Problema: o comerciante perde venda por não saber o estoque. O app cadastra produtos, registra entrada/saída, alerta estoque baixo e lista o que está abaixo do mínimo.
  • 🔑 Onde entra a POO: classe Produto e classe Estoque que gerencia a coleção (composição), com métodos que aplicam regra de negócio — não deixar a quantidade ficar negativa.

Tema 6 · Catalogue o que você já consumiu

Biblioteca Pessoal (livros/filmes/jogos)

  • 🎯 Problema: coleção grande vira bagunça. O app cataloga e mostra o que já foi consumido — cadastrar itens, marcar concluído, avaliar (1–5), filtrar por tipo/status e buscar por título.
  • 🔑 Onde entra a POO: base ItemDeMidia com subclasses Livro, Filme e Jogo, cada uma com atributos próprios; polimorfismo na exibição da ficha (__str__).

Tema 7 · Registre hábitos e acompanhe a sequência (streak)

Controle de Hábitos

  • 🎯 Problema: manter a constância é difícil. O app registra hábitos diários e mostra a sequência (streak) — cadastrar hábitos, marcar feito no dia, ver o streak e estatística de cumprimento.
  • 🔑 Onde entra a POO: base Habito com subclasses HabitoSimples (sim/não) e HabitoComMeta (ex.: beber 2L) — polimorfismo em como cada tipo verifica o cumprimento.

Tema 8 · Marque horários sem se perder no papel

Sistema de Agendamento (salão/barbearia/clínica)

  • 🎯 Problema: pequenos negócios anotam horário no papel e se perdem. O app cadastra clientes e serviços, marca horários, lista a agenda do dia e evita dois agendamentos no mesmo horário.
  • 🔑 Onde entra a POO: classes Cliente, Servico e Agendamento em composição; encapsulamento das regras (não agendar horário já ocupado) e um método de listagem por dia.

O que a dupla precisa entregar

As 4 entregas

1

Etapa 1 · Descrição + motivação

Qual problema o app resolve, por que vocês escolheram e as funcionalidades planejadas. Um documento de 1–2 páginas, entregue em PDF.

2

Etapa 2 · Diagrama de classes (UML)

Classes, atributos, métodos e as relações entre elas. Entregue em PDF.

3

Etapa 3 · Código-fonte funcional

O projeto .py rodando: Tkinter + SQLite + POO trabalhando juntos.

4

Etapa 4 · Apresentação

Demo ao vivo do app + explicação das decisões técnicas. Cerca de 10 minutos, com os dois integrantes falando.

Onde e quando entregar

Como entregar — GitHub, prazo firme

  • 📦 Todos os arquivos (documento, diagrama e código) num repositório no GitHub.
  • Publicado até 24h antes da apresentação — a apresentação é 16/07, então o repo no ar até ~15/07 (e 15/07 não tem aula: organizem-se fora da aula).
  • 🔗 Mandem o link do repositório comigo.

Documento

descrição + motivação (1–2 páginas).

Diagrama UML

classes e relações, imagem ou PDF.

Código .py

Tkinter + SQLite + POO rodando.

Template de entrega

O que cada artefato precisa ter

📄 Documento

Nome do projeto + os 2 integrantes; o problema; a motivação; as funcionalidades planejadas; e quais conceitos de POO vão usar e onde.

📐 Diagrama UML

Todas as classes com atributos e métodos; a visibilidade (público/privado/protegido); as relações (herança/composição/associação). O diagrama tem que bater com o código — se mudar o código, atualize o diagrama.

💻 Código

Uso real de POO; SQLite com CRUD funcionando; Tkinter com eventos tratados; comentários nas partes principais.

🎤 Apresentação

Demo ao vivo; mostrar os pontos-chave e os aprendizados; preparados para perguntas; os dois falam.

Rubrica

Como será avaliado

item detalhe
Documentação Descrição e motivação claras; problema real bem definido.
Modelagem UML Diagrama coerente com o código; relações corretas (herança × composição × associação).
Aplicação de POO Uso real de classes, herança, polimorfismo, encapsulamento e abstração — não só 'código que funciona'.
Banco de dados Persistência com SQLite funcionando; os dados sobrevivem ao fechar o programa.
Interface Tkinter Funcional, organizada e usável; eventos tratados.
Apresentação Demonstra o app, mostra os pontos-chave e aprendizados, e responde às perguntas.

O critério que mais pesa

Aplicação de POO acima de tudo

  • Um app bonito que não usa os conceitos vale menos que um app simples bem modelado. Beleza não substitui modelagem.
  • 🧠 A gente avalia o raciocínio orientado a objetos: por que essa classe, por que herança aqui e composição ali.
  • 🎯 Tradução prática: cada uso de POO tem que ter justificativa — nada de herança decorativa, nada de if tipo == ... onde cabia polimorfismo.

O que separa uma da outra

POO que conta × POO decorativa

É o mesmo conceito das duas — o que muda é se você usou porque precisava ou só para "parecer POO".

❌ Decorativo

  • Herança que não muda comportamento nenhum
  • if tipo == "carro" espalhado pelo código
  • Classe que é só um dicionário com nome chique
  • Nenhuma validação nos setters

✅ Justificado

  • Subclasses que respondem diferente ao mesmo método (polimorfismo)
  • Base abstrata que exige um método (ABC)
  • Setter que valida e protege o dado
  • "tem um" → composição; "é um" → herança

Antes da primeira linha de código

Modelar antes de codificar — economia, não burocracia

  • 🗺️ O diagrama é o mapa do código: decidir as classes no papel custa minutos; descobrir que a modelagem estava errada no meio do código custa horas.
  • ⏱️ Com poucos dias de aula, o diagrama é o que evita retrabalho — o tempo que você não tem para desperdiçar.
  • ✍️ Regra: nenhuma linha de código antes de rascunhar as classes e como elas se ligam.

Mão na massa — modelagem

Como montar o diagrama de classes

1

Liste os substantivos do problema

Eles viram candidatos a classe: Tarefa, Usuário, Categoria, Produto…

2

Para cada classe, atributos e métodos

O que ela guarda (nome, preco, _placa) e o que ela faz (concluir(), valor()).

3

Marque a visibilidade

Público (+), privado (-), protegido (#). O que passa por property/setter é privado.

4

Desenhe as relações

Herança (seta com triângulo, "é um") e composição/associação (linha, "tem um").

5

Monte o diagrama

Uma caixa por classe (nome / atributos / métodos) e conecte pelas relações. Numa ferramenta de UML ou no papel — como a dupla preferir. Na entrega, exporte ou fotografe em PDF.

A decisão que define a seta

Herança ("é um") × Composição ("tem um") no diagrama

A pergunta que decide a seta: "X é um Y, ou X tem Y?"

É um → herança

  • Carro é um Veiculo
  • Livro é um ItemDeMidia
  • No diagrama: seta com triângulo apontando para a base

Tem um → composição

  • Estacionamento tem veículos
  • Baralho tem cartões · Agenda tem contatos
  • No diagrama: linha simples; a coleção vive dentro

A camada de dados do projeto

Onde o SQLite entra no seu modelo

  • 🗄️ Uma classe do seu modelo vira uma tabela: cada objeto é uma linha, cada atributo é uma coluna (exatamente a aula 24).
  • 🎁 Copie o molde do RepositorioProduto da aula 24 — salvar, listar, buscar, atualizar, remover — e troque Produto pela sua classe.
  • 🖥️ A tela Tkinter conversa com o repositório, nunca com o SQL direto. A janela pede, o repositório fala com o banco.

📍 Aula 24 — SQLite + Repositório

o molde do CRUD encapsulado.

📍 Aula 17 — Persistência

de onde veio a ideia de gravar dados.

Linha do tempo

Cronograma do projeto — onde a gente está

  • 📅 Hoje (25, 09/07): formar a dupla, escolher o tema e começar a modelar.
  • 🛠️ 26 (10/07): desenvolvimento com acompanhamento. 27 (13/07): finalização, testes e preparar a apresentação.
  • ⚠️ 28 (14/07) é a 2ª VA (prova prática individual — não é o projeto, mas ocupa o dia).
  • 🎤 29 (16/07): apresentação ao vivo. 🔔 Repo no GitHub até ~15/07 (fora de aula).

25–26 · construir

modelar e desenvolver.

27 · finalizar

testes e apresentação.

28 · 2ª VA

prova prática individual.

29 · apresentar

demo ao vivo.

Agora, nos próximos 40 minutos

Comece a modelar em dupla

  • Forme sua dupla e me avise quem é com quem.
  • Escolha o tema (um dos 8 ou ideia própria — se for de fora, me chame para validar).
  • Escreva em uma frase o problema real que o app resolve.
  • Liste os substantivos do problema → candidatos a classe.
  • Rascunhe (na ferramenta ou no papel) 2–3 classes com atributos e métodos.
  • Decida cada relação: 'é um' (herança) ou 'tem um' (composição)?
  • Me mostre o rascunho antes de escrever qualquer código.

Depois do diagrama

Por onde começar a codar

1

As classes do modelo

Crie a base + as subclasses, com __init__ e __str__. Rode: crie um objeto e dê print nele.

2

Encapsule o que precisa validar

property/setter no que tem regra. Teste de propósito com um valor inválido — o erro tem que aparecer.

3

Suba a tabela + repositório

Copie o molde da aula 24. Salve e liste — confirme que os dados persistem ao reabrir o programa.

4

Só então a janela Tkinter

Um campo, um botão, uma lista — chamando o repositório (nunca o SQL direto).

5

Trate os erros previstos

try/except; uma exceção própria quando fizer sentido (pátio lotado, item não encontrado).

próxima aula

Aula 26 · 10/07

Projeto final — desenvolvimento

Amanhã é studio: você desenvolve e eu tiro dúvidas — POO, arquivos, SQLite, revisão de código ao vivo e checkpoint diagrama × código. Venha com o modelo rascunhado de hoje.

acompanhamento das duplas revisão de código ao vivo checkpoint: UML × código