🧰 CAPÍTULO 00: KIT DE SOBREVIVÊNCIA — FUNDAMENTOS COMUNS
Este capítulo é autoguiado e sem nota. Ele reúne o que as Atividades 01 das duas trilhas (Engenharia de Software e Banco de Dados) já pressupõem que você sabe fazer desde a Semana 1, mas que nenhum capítulo ensina isoladamente: usar o terminal, versionar código com Git, ler e escrever Python orientado a objetos, e entender JSON/HTTP o suficiente para copiar um curl e saber o que ele está fazendo.
Se você já programa em Python e já usa Git no dia a dia, pode pular direto para o capítulo 00 da sua trilha:
👉 Capítulo 00 — Engenharia de Software · 👉 Capítulo 00 — Banco de Dados
🎯 Objetivos de Aprendizagem
Estimativa de dedicação: 3 horas de estudo autoguiado. Ao final deste capítulo, você será capaz de:
- 🔹 Navegar pastas e executar scripts pelo terminal do VS Code.
- 🔹 Versionar um projeto com Git e enviá-lo para o GitHub (
clone,add,commit,push). - 🔹 Ler e escrever classes Python com
@dataclass,@propertye validação de dados. - 🔹 Interpretar um payload JSON e montar/entender um comando
curlcontra uma API REST.
🏢 Por que isso importa (Cenário TecProExpress)
Todas as atividades práticas do curso — Engenharia de Software e Banco de Dados — giram em torno da TecProExpress, uma empresa fictícia de logística. Desde a primeira semana, os roteiros já pedem para você "clonar o repositório", "rodar python script.py" ou "testar com curl" sem parar para explicar esses três movimentos. Este capítulo existe para que, quando isso acontecer, você já tenha feito esse gesto pelo menos uma vez.
🧠 1. Terminal e VS Code
Um terminal é apenas um jeito de conversar com o computador por texto em vez de cliques. Os três comandos que você vai repetir centenas de vezes neste curso:
| Comando | O que faz | Exemplo |
|---|---|---|
cd | Entra em uma pasta | cd atividades-banco-de-dados |
dir (Windows) / ls (Linux/Mac) | Lista o conteúdo da pasta atual | dir |
python arquivo.py | Executa um script Python | python app.py |
No VS Code, use o atalho Ctrl + ` (crase) para abrir o terminal integrado — ele já abre na pasta do projeto que você tem aberta, sem precisar navegar manualmente.
Instale também as extensões recomendadas do projeto: abra a pasta do repositório no VS Code e aceite a notificação para instalar o pacote definido em .vscode/extensions.json (Python, SQLTools, Docker, Draw.io).
🧠 2. Git e GitHub do Zero
Git guarda o histórico do seu código no seu computador. GitHub guarda uma cópia desse histórico na nuvem, para o professor avaliar e para você nunca perder o trabalho.
flowchart LR
A["📁 Pasta local"] -->|"git init / git clone"| B["📦 Repositório Git local"]
B -->|"git add ."| C["🗂️ Área de Stage"]
C -->|"git commit -m '...'"| D["📌 Commit (snapshot local)"]
D -->|"git push"| E["☁️ GitHub (remoto)"]
style A fill:#e3f2fd,stroke:#1e88e5
style D fill:#fff8e1,stroke:#fbc02d
style E fill:#e8f5e9,stroke:#43a047
🛠️ O ciclo que você vai repetir toda semana
# 1. Clone o repositório de atividades (uma única vez)
git clone https://github.com/SEU-USUARIO/atividades-banco-de-dados.git
cd atividades-banco-de-dados
# 2. Depois de editar/criar arquivos, veja o que mudou
git status
# 3. Selecione o que vai entrar no commit
git add .
# 4. Registre um snapshot com uma mensagem clara
git commit -m "feat: adiciona script da atividade 01"
# 5. Envie para o GitHub
git push
🔍 Detalhamento do Comando:
git status: mostra o que mudou desde o último commit — rode antes de qualquer outro comando, sempre.git add .: coloca todos os arquivos modificados na fila do próximo commit.git commit -m "...": a mensagem deve dizer o quê e por quê (ex:fix: corrige cálculo de frete, nãomudanças).git push: só depois disso o professor consegue ver seu trabalho no GitHub.
Se git push recusar com "rejected", normalmente é porque o GitHub tem uma versão mais nova do que a sua. Rode git pull primeiro para trazer as mudanças remotas, resolva qualquer conflito, e só então git push de novo.
🧠 3. Python Essencial e POO
Praticamente todo capítulo teórico do curso (Engenharia de Software e Banco de Dados) usa classes Python para modelar entidades do mundo real. Os quatro ingredientes que você precisa reconhecer:
| Ingrediente | Para que serve |
|---|---|
class NomeDaClasse: | Define um "molde" para criar objetos (ex: um Produto, um Cliente). |
self | Dentro da classe, representa "este objeto específico". |
@dataclass | Gera automaticamente o construtor (__init__) a partir dos atributos declarados. |
@property | Transforma um método em um atributo "calculado" (chamado sem parênteses). |
💻 Código Completo e Autocontido (produto.py)
"""
Módulo: produto.py
Domínio: Representação de um produto do catálogo da TecProExpress.
Execução: python produto.py
"""
from dataclasses import dataclass, field
@dataclass
class Produto:
nome: str
preco: float
tags: list[str] = field(default_factory=list)
@property
def preco_formatado(self) -> str:
"""Atributo calculado: formata o preço como moeda brasileira."""
return f"R$ {self.preco:.2f}"
def aplicar_desconto(self, percentual: float) -> None:
if not 0 <= percentual <= 100:
raise ValueError("Percentual de desconto deve estar entre 0 e 100.")
self.preco -= self.preco * (percentual / 100)
if __name__ == "__main__":
produto = Produto(nome="Notebook TecPro X1", preco=3500.00, tags=["eletronico", "oferta"])
print(f"Antes do desconto: {produto.preco_formatado}")
produto.aplicar_desconto(10)
print(f"Depois de 10% de desconto: {produto.preco_formatado}")
🚀 Como Executar
python produto.py
🖥️ Saída Esperada no Terminal
Antes do desconto: R$ 3500.00
Depois de 10% de desconto: R$ 3150.00
🔍 Detalhamento do Código:
field(default_factory=list): evita o erro clássico de usar uma lista vazia ([]) diretamente como valor padrão em Python.aplicar_desconto: valida o percentual antes de aplicar — o objeto nunca fica em um estado inconsistente (preço negativo, por exemplo).@property: repare que chamamosproduto.preco_formatado, sem parênteses — para quem usa a classe, parece um atributo comum.
Esse mesmo padrão (@dataclass + @property + validação no construtor) é a base do Capítulo 01 de Engenharia de Software e de praticamente todo mini-projeto SQLAlchemy dos capítulos de Banco de Dados. Se este código fez sentido, você está pronto para a Semana 1.
🧠 4. JSON e HTTP/REST na Prática
Desde a Atividade 06 (Engenharia de Software) e a Atividade 06 (Banco de Dados), os roteiros pedem para testar uma API com curl. Aqui está o que você precisa para não ficar copiando sem entender.
JSON é só um dicionário Python escrito como texto:
{
"nome": "Notebook TecPro X1",
"preco": 3500.00,
"tags": ["eletronico", "oferta"]
}
HTTP é o "idioma" que o navegador (ou o curl) usa para conversar com um servidor:
| Verbo HTTP | Uso típico | Status de sucesso comum |
|---|---|---|
GET | Buscar um recurso | 200 OK |
POST | Criar um recurso novo | 201 Created |
PUT | Atualizar um recurso inteiro | 200 OK |
DELETE | Remover um recurso | 204 No Content |
| Status HTTP | Significado |
|---|---|
200 / 201 | Sucesso |
400 | O cliente mandou dados inválidos |
404 | O recurso não existe |
500 | Erro interno do servidor |
🔍 Anatomia de um curl
curl -X POST "http://127.0.0.1:5000/api/pacotes" \
-H "Content-Type: application/json" \
-d '{"codigo": "BR123456", "peso_kg": 2.5}'
-X POST: qual verbo HTTP usar."http://127.0.0.1:5000/...": o endereço do servidor —127.0.0.1é "meu próprio computador";5000é a porta onde o servidor está escutando.-H "Content-Type: application/json": avisa ao servidor que o corpo da requisição é JSON.-d '{...}': o corpo (body) da requisição — os dados que você está enviando.
💡 Checkpoint de Lógica
Reflexão Profissional: Por que o Git guarda um histórico de commits em vez de simplesmente sobrescrever o arquivo mais recente? (Resposta: porque em equipe, várias pessoas mexem no mesmo código ao mesmo tempo — o histórico permite entender quem mudou o quê e quando, reverter um erro específico sem perder o resto do trabalho, e resolver conflitos quando duas pessoas editam a mesma linha.) 🧠🛡️
🧪 Quiz de Fixação e Autoavaliação
🧪 Quiz de Autoavaliação — Capítulo 00 (Fundamentos Comuns)
🧪 Quiz de Autoavaliação — Capítulo 00 (Fundamentos Comuns)
1. Qual comando envia seus commits locais para o GitHub?
-
A)
git commit -
B)
git add . -
C)
git push -
D)
git status
💡 Ver Resposta e Justificativa
Resposta Correta: C
Justificativa: git commit só registra o snapshot localmente. É o git push que envia esse histórico para o repositório remoto no GitHub.
2. Em Python, o que o decorador @dataclass gera automaticamente para a classe?
- A) Um servidor Flask
-
B) O método
__init__(construtor), a partir dos atributos declarados - C) Uma tabela SQL
- D) Um arquivo JSON
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: @dataclass elimina a necessidade de escrever __init__ manualmente — ele é gerado a partir dos atributos anotados na classe.
3. Ao rodar curl -X POST .../api/pacotes -d '{"peso_kg": -5}' e o servidor responder com status 400, o que isso indica?
- A) O servidor caiu.
- B) O recurso foi criado com sucesso.
- C) O cliente enviou dados inválidos e o servidor recusou a requisição.
- D) O recurso não existe.
💡 Ver Resposta e Justificativa
Resposta Correta: C
Justificativa: A faixa 4xx de status HTTP indica erro do lado do cliente — aqui, provavelmente um peso negativo reprovado por uma validação como a que vimos em aplicar_desconto.
🛠️ Ponte para a Sua Trilha
Agora escolha o capítulo 00 específico da sua disciplina — ele assume tudo o que você acabou de ver aqui e foca no que só aquela trilha exige logo na Semana 1:
👉 Capítulo 00 — Engenharia de Software: UML, Flask e pytest 👉 Capítulo 00 — Banco de Dados: SQL, ER e Docker
📌 Resumo Executivo & Key Takeaways
- Terminal:
cdpara navegar,python arquivo.pypara executar — é só isso que você precisa para começar. - Git: o ciclo
status → add → commit -m "..." → pushse repete em toda entrega do curso. - POO em Python:
@dataclassgera o construtor;@propertycria atributos calculados; valide dados no construtor para evitar objetos inconsistentes. - HTTP/REST: verbo (
GET/POST/...) + endereço + corpo JSON é a receita de toda requisição que você vai testar comcurlneste curso.