Projeto lógico completo: especificar, construir, explicar

Organizar um pequeno sistema como conjunto de regras verificáveis e documentadas.

Projeto lógico completo: especificar, construir, explicar

Objetivo da aula

Organizar um pequeno sistema como conjunto de regras verificáveis e documentadas.

Como estudar esta aula: partimos do zero. Leia tentando explicar cada ideia em suas próprias palavras. Nos exemplos, faça uma previsão antes de executar. O objetivo não é decorar sintaxe: é conseguir reconstruir o raciocínio sem depender do texto.

Começando do problema, não do código

A maturidade L2 começa quando você consegue defender por que a solução está estruturada daquela forma e mostrar evidências de que os casos importantes foram considerados.

Quando alguém está começando, é comum olhar para um trecho de código e enxergar apenas símbolos. Por isso vamos fazer o caminho inverso: primeiro entender a regra humana, depois representar essa regra, e só no final observar uma implementação executável. Se a regra não pode ser explicada em português claro, o código provavelmente ainda está escondendo uma dúvida.

Uma imagem mental para tornar a ideia concreta

Um bom projeto não é um monte de linhas que “parecem funcionar”. É uma sequência de decisões explícitas: problema, dados, regras, casos, implementação, testes e explicação.

Analogias não são definições formais, mas funcionam como uma ponte. Depois que a imagem mental estiver clara, voltamos aos termos técnicos e vemos exatamente onde a comparação ajuda e onde ela deixa de ser suficiente.

Conceitos essenciais, explicados um por um

especificação

Especificação significa descrição do comportamento esperado. Não memorize apenas o termo: pergunte sempre “que pergunta este conceito me ajuda a responder no problema?”.

modelo de regras

Modelo de regras significa representação das decisões. Não memorize apenas o termo: pergunte sempre “que pergunta este conceito me ajuda a responder no problema?”.

implementação

Implementação significa código que realiza o modelo. Não memorize apenas o termo: pergunte sempre “que pergunta este conceito me ajuda a responder no problema?”.

evidência

Evidência significa testes, traços e resultados que sustentam a confiança. Não memorize apenas o termo: pergunte sempre “que pergunta este conceito me ajuda a responder no problema?”.

Modelo mental

ESPECIFICAR → MODELAR → IMPLEMENTAR → TESTAR → EXPLICAR → REVISAR

Use esse modelo como uma sequência de perguntas. Em uma prova ou em um programa real, você deve conseguir apontar onde estão os dados, qual regra está sendo aplicada, qual estado muda e como o resultado será observado.

Exemplo completo e executável

def avaliar_tarefa(pontos, prazo_ok):
    if pontos < 0:
        return "inválida"
    if pontos >= 80 and prazo_ok:
        return "excelente"
    if pontos >= 60:
        return "adequada"
    return "revisar"

for caso in [(90, True), (90, False), (60, True), (59, True), (-1, True)]:
    print(caso, avaliar_tarefa(*caso))

Leitura orientada do exemplo

  • def avaliar_tarefa(pontos, prazo_ok):: define uma função: uma unidade nomeada de raciocínio que poderá ser chamada depois.
  • if pontos < 0:: abre uma decisão: a expressão após if será avaliada antes de escolher o bloco.
  • return "inválida": encerra a função neste caminho e devolve um valor ao chamador.
  • if pontos >= 80 and prazo_ok:: abre uma decisão: a expressão após if será avaliada antes de escolher o bloco.
  • return "excelente": encerra a função neste caminho e devolve um valor ao chamador.
  • if pontos >= 60:: abre uma decisão: a expressão após if será avaliada antes de escolher o bloco.
  • return "adequada": encerra a função neste caminho e devolve um valor ao chamador.
  • return "revisar": encerra a função neste caminho e devolve um valor ao chamador.

Não trate a saída como mágica. Faça o traçado: anote os valores que existem antes da primeira linha relevante e como eles ficam depois de cada transformação. Quando houver uma condição, escreva explicitamente se ela é verdadeira ou falsa naquele caso.

Segundo experimento: mude o caso, não apenas o texto

Agora troque os valores do exemplo por outros que façam a regra percorrer um caminho diferente. Antes de executar, escreva sua previsão. Depois rode o programa e compare. Se a previsão falhar, registre a primeira linha em que seu raciocínio divergiu. Essa é uma prática de lógica, não apenas de Python.

Experimento guiado

  1. Copie o exemplo para um arquivo separado e execute sem alterar nada, apenas para estabelecer um resultado de referência.
  2. Escolha uma entrada ou valor que leve a um comportamento diferente. Antes de executar, escreva o resultado esperado e a justificativa.
  3. Altere somente um elemento por vez. Execute novamente e compare com a previsão.
  4. Crie pelo menos um caso de fronteira: um valor exatamente no limite de uma comparação, no primeiro ou no último item de uma sequência, ou no estado em que uma repetição deve parar.
  5. Explique o algoritmo em voz alta sem olhar o código. Se você precisar citar “porque o Python faz assim”, volte à regra lógica anterior à sintaxe.

Mini desafio

Pegue um problema simples do cotidiano e produza: especificação, regras, tabela de decisão, pseudocódigo, implementação e cinco testes.

Como resolver sem chutar

  1. Escreva quais dados existem.
  2. Defina o resultado esperado.
  3. Liste as regras em português.
  4. Crie ao menos três casos de teste, incluindo uma fronteira.
  5. Só então traduza para pseudocódigo ou Python.

Solução-modelo

Não existe necessariamente uma única forma correta de escrever a solução. Uma solução aceitável é aquela cuja regra você consegue explicar, cujos casos importantes estão cobertos e cujo resultado pode ser verificado. Use o exemplo da aula como ponto de partida e compare raciocínio, não apenas aparência do código.

Erros comuns e por que acontecem

  • Começar pela sintaxe: a pessoa procura “qual comando usar” antes de saber qual regra precisa representar.
  • Testar apenas um caso: um exemplo feliz pode esconder fronteiras, lacunas e caminhos não percorridos.
  • Mudar muitas coisas ao mesmo tempo: quando o resultado muda, fica difícil saber qual alteração foi responsável.
  • Confundir valor com significado: o número 18 é apenas um valor; “18 é a idade mínima” é uma regra de domínio.
  • Aceitar o resultado porque o programa não deu erro: ausência de exceção não prova correção lógica.

Cheque se você realmente entendeu

O que é especificação?

Resposta: descrição do comportamento esperado. Agora invente um exemplo diferente do usado na aula.

Qual problema modelo de regras ajuda a evitar ou resolver?

Resposta: ele ajuda a raciocinar explicitamente sobre representação das decisões, em vez de deixar essa parte implícita.

Como implementação aparece no exemplo?

Resposta: localize a linha, condição ou estado correspondente e descreva o antes e o depois.

Resumo

Nesta aula, o mais importante não é o trecho Python. É o modelo lógico: ESPECIFICAR → MODELAR → IMPLEMENTAR → TESTAR → EXPLICAR → REVISAR. Se você consegue aplicar esse modelo a outro problema, prever casos e explicar por que cada passo existe, então o conceito está começando a ficar sólido.

Ligação com a próxima etapa

A lógica de programação é cumulativa. A próxima aula reutilizará as ideias desta aula em um contexto diferente. Antes de avançar, refaça pelo menos um exemplo sem copiar e confirme que consegue explicar tanto um caso que funciona quanto um caso que não deveria funcionar.