🧰 CAPÍTULO 00: KIT DE SOBREVIVÊNCIA — FUNDAMENTOS COMUNS


📖 Para quem é este capítulo

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, @property e validação de dados.
  • 🔹 Interpretar um payload JSON e montar/entender um comando curl contra 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:

ComandoO que fazExemplo
cdEntra em uma pastacd atividades-banco-de-dados
dir (Windows) / ls (Linux/Mac)Lista o conteúdo da pasta atualdir
python arquivo.pyExecuta um script Pythonpython app.py

🎯 Abrindo o terminal certo no VS Code

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ão mudanças).
  • git push: só depois disso o professor consegue ver seu trabalho no GitHub.

⚠️ Erro clássico

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:

IngredientePara que serve
class NomeDaClasse:Define um "molde" para criar objetos (ex: um Produto, um Cliente).
selfDentro da classe, representa "este objeto específico".
@dataclassGera automaticamente o construtor (__init__) a partir dos atributos declarados.
@propertyTransforma 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 chamamos produto.preco_formatado, sem parênteses — para quem usa a classe, parece um atributo comum.

💡 Onde isso aparece de novo

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 HTTPUso típicoStatus de sucesso comum
GETBuscar um recurso200 OK
POSTCriar um recurso novo201 Created
PUTAtualizar um recurso inteiro200 OK
DELETERemover um recurso204 No Content
Status HTTPSignificado
200 / 201Sucesso
400O cliente mandou dados inválidos
404O recurso não existe
500Erro 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

Importante

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)

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

🎯 Próximo Passo

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: cd para navegar, python arquivo.py para executar — é só isso que você precisa para começar.
  • Git: o ciclo status → add → commit -m "..." → push se repete em toda entrega do curso.
  • POO em Python: @dataclass gera o construtor; @property cria 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 com curl neste curso.