de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PT

Domando o Design Orientado a Objetos com Cartões CRC: Um Estudo de Caso Amigável para Iniciantes

“A melhor maneira de aprender design orientado a objetos não é memorizando padrões — é interpretando os papéis.”

Neste artigo, vamos percorrer umintrodução passo a passo aos cartões CRC (Classe–Responsabilidade–Colaboração) usando um exemplo do mundo real, amigável para iniciantes: umSistema de Empréstimo de Livros de Biblioteca. Se você está começando sua jornada no design de software ou liderando um workshop de equipe, os cartões CRC oferecem uma maneira simples, poderosa e colaborativa de modelar sistemas orientados a objetos.


🎯 O que são os Cartões CRC?

Cartões CRC são uma técnica leve de modelagem física (ou digital) usada no design orientado a objetos. Cada cartão representa umaclasse e contém três elementos principais:

Campo Descrição
Classe O nome da classe (por exemplo,Livro)
Responsabilidades O que a classesabe ou faz
Colaboradores Outras classes com as quais esta classe precisa trabalhar

Eles são especialmente eficazes parabrainstormingprojetar, e validando estruturas de classes cedo no desenvolvimento — antes de escrever uma única linha de código.


📚 Estudo de Caso: Sistema de Empréstimo de Livros da Biblioteca

Vamos imaginar uma pequena biblioteca pública onde os membros podem:

  • Pesquisar livros pelo título

  • Pegar emprestados livros disponíveis (até um limite)

  • Devolver livros quando terminar

O sistema deve rastrear:

  • Quais livros foram emprestados

  • Por quem

  • Quando eles são devidos

Vamos usar o método de cartão CRC para descobrir e aprimorar as classes neste sistema — passo a passo.


✅ Etapa 1: Encontrar Classes Candidatas (Brainstorm de Substantivos)

Comece lendo o cenário e extraia substantivos — esses são potenciais classes.

A partir da descrição, identificamos:

  • Biblioteca

  • Membro (ou Usuário)

  • Livro

  • Empréstimo (ou Empréstimo)

  • Data de Vencimento (possivelmente muito pequeno)

  • Cartão da Biblioteca (pode fazer parte do Membro)

Filtramos e mantemos apenas os mais significativos:

✅ MembroLivroEmpréstimo

⚠️ Nota: Não se preocupe em acertar todas as classes de primeira — essa é a beleza das fichas CRC. Você descobrirá as que faltam através do papelamento!


✏️ Etapa 2: Crie as Fichas CRC Iniciais

Agora, atribuímosresponsabilidades e colaboradores para cada classe.

📘 Classe: Livro

Responsabilidades Colaboradores
Saber seu título
Saber seu autor
Saber seu ISBN
Saber se está atualmente disponível Empréstimo
Ser emprestado Empréstimo
Ser devolvido Empréstimo

💬 O Livro não “sabe” quem o pegou emprestado — ele só sabe se tem um empréstimo ativo.


👤 Classe: Membro

Responsabilidades Colaboradores
Saber o nome
Saber o ID do membro
Saber quantos livros estão atualmente emprestados Empréstimo
Pegar um livro emprestado (se permitido) Livro, Empréstimo
Devolver um livro Livro, Empréstimo
Verificar se o limite de empréstimo foi atingido Empréstimo

💬 O membro gerencia seu próprio comportamento de empréstimo e verifica os limites por meio da classe Empréstimo.


📅 Classe: Empréstimo

Responsabilidades Colaboradores
Registrar qual livro foi emprestado Livro
Registrar qual membro o pegou emprestado Membro
Registrar a data de empréstimo
Calcular a data de vencimento
Saber se está em atraso
Marcar como devolvido Livro

💬 A classe Loan mantém a relação entre um Membro e um Livro, incluindo detalhes de tempo.


🎭 Etapa 3: Role-play de um cenário — “Pegar um livro emprestado”

Agora vem a parte divertida: role-playingo cenário como se os cartões fossem objetos reais.

📖 Cenário: Curtis quer pegar emprestado “Código Limpo”, que está disponível.

Vamos passar por isso passo a passo:

  1. Membro (Curtis) diz: “Quero pegar emprestado ‘Código Limpo’.”
    → Primeiro verifica: “Tenho menos de 3 livros já?”
    → Pergunta Empréstimo“Quantos empréstimos ativos tenho?”

  2. Empréstimo responde: “Você tem 1 empréstimo ativo → pode pegar emprestado.”

  3. Membro procura pelo livro: “Onde está ‘Código Limpo’?”
    → Pergunta Livro“Você está disponível?”

  4. Livro verifica: “Tenho um empréstimo ativo (não devolvido)?”
    → Pergunta Empréstimo“Há um empréstimo ativo para mim?”

  5. Empréstimo responde: “Não — você está disponível!”

  6. Membro cria um novo Empréstimo objeto:

    • Linka com este Livro e Membro

    • Define data de empréstimo = hoje

    • Calcula data de devolução = hoje + 14 dias

  7. Livro é atualizado: “Agora tenho um empréstimo ativo → já não estou disponível.”

✅ Resultado: O processo de empréstimo parece natural, distribuído e lógico.


🔄 Etapa 4: Outro cenário — “Devolver um Livro”

📖 Cenário: Curtis devolve “Código Limpo”

  1. Membro (Curtis) diz: “Quero devolver ‘Código Limpo’.”

  2. Membro encontra o correspondente Empréstimo (provavelmente consultando Empréstimo com o livro e o membro).

  3. Empréstimo marca-se como devolvido.

  4. Empréstimo diz Livro“Você está disponível novamente.”

✅ Limpo, claro e coerente — nenhuma classe está realizando trabalho fora de sua responsabilidade.


🔍 Etapa 5: Refinar e adicionar classes faltantes

Depois de simular os papéis, notamos um vazio:

❓ Quem encontra o livro pelo título?

Atualmente, Membro está perguntando Livro diretamente — mas Livro não sabe como pesquisar!
Precisamos de um coordenador central.

➕ Nova Classe: Biblioteca

Responsabilidades Colaboradores
Adicionar um novo livro à coleção Livro
Buscar livro pelo título Livro
Registrar um novo membro Membro
Processar solicitação de empréstimo de livro Membro, Livro, Empréstimo
Processar devolução de livro Membro, Livro, Empréstimo
Conhecer todos os empréstimos atuais Empréstimo

💬 A Biblioteca atua como o hub central — ela conhece todos os livros, todos os membros e todos os empréstimos.


✨ Fluxo Atualizado: “Pegar um Livro” com a Biblioteca

  1. Membro → Biblioteca“Encontre o livro intitulado ‘Código Limpo’.”

  2. Biblioteca procura em sua coleção e retorna o Livro (ou nulo se não encontrado).

  3. Membro agora sabe que o livro existe → pergunta Biblioteca“Posso pegar este livro emprestado?”

  4. Biblioteca verifica:

    • O livro está disponível? (via Livro.isDisponivel())

    • O membro está dentro do limite de empréstimos? (via Emprestimo.contarEmprestimosAtivos(membro))

  5. Se sim → Biblioteca cria um novo Emprestimo e atualiza tanto o Livro como o Emprestimo.

  6. Livro torna-se indisponível; Empréstimo rastreia a relação.

✅ Agora o fluxo faz sentido — o Biblioteca gerencia a descoberta e a coordenação.


🧩 Resumo Final das Cartas CRC (Simplificado para Iniciantes)

Classe Principais Responsabilidades Colaboradores Principais
Biblioteca Gerencia livros, membros e empréstimos; gerencia empréstimos/devoluções Livro, Membro, Empréstimo
Membro Conhece informações pessoais; inicia empréstimo/devolução Biblioteca, Empréstimo
Livro Armazena metadados; rastreia disponibilidade Biblioteca, Empréstimo
Empréstimo Rastreia o histórico de empréstimos; calcula datas de vencimento; gerencia o status de devolução Membro, Livro, Biblioteca

✅ Princípio de Design: Cada classe tem um propósito claro, e as responsabilidades são coerentes e bem distribuídas.


🌟 Por que os Cartões CRC Funcionam Tão Bem (Principais Lições para Iniciantes)

Benefício Explicação
Design Orientado a Responsabilidades Força você a pensar: “O que esta classe sabe ou faz?” em vez de apenas armazenar dados.
Descoberta Natural de Classes Ausentes O role-playing revela lacunas (como a ausência doBiblioteca) — sem necessidade de adivinhações.
Feedback Imediato por meio de Role-Playing Se um fluxo parecer desconfortável, você sabe que a responsabilidade está no lugar errado.
Baixo Cerimonial e Colaborativo Sem ferramentas complexas — apenas cartões de índice, notas adesivas ou um quadro branco. Ótimo para equipes.
Conecta Requisitos ao Código Transforma histórias de usuários em interações reais entre classes.

🛠️ Dicas Rápidas para Sua Primeira Sessão CRC

  1. Use cartões físicos (cartões de índice 3×5 ou notas adesivas) — é mais envolvente.

  2. Uma classe por cartão — mantenha simples.

  3. Escreva grande e legível — outros devem conseguir ler com facilidade.

  4. Faça o role-playing em voz alta — passe os cartões como objetos reais.

  5. Comece com 3–6 cenários principais (por exemplo, emprestar, devolver, pesquisar).

  6. Não busque a perfeição — o objetivo é iteração, não um design final. Aperfeiçoe ao longo do processo.

  7. Use nomes simples e específicos do domínio — evite jargões técnicos. Use “Membro” em vez de “Freguês” se a equipe concordar.

  8. Convide todos para participar — até não programadores podem ajudar a identificar responsabilidades ausentes.

  9. Esboce um diagrama de classe simples depois — para visualizar relações e confirmar a consistência.

  10. Mantenha o divertido — trate como um jogo. Quanto mais envolvida estiver sua equipe, melhores serão os resultados.


🔄 Experimente você mesmo: Próximos domínios para explorar

Depois que dominar o sistema de biblioteca, tente aplicar cartões CRC a outros domínios amigáveis para iniciantes:

☕ Sistema de Pedido de Cafeteria

  • Classes: ClientePedidoItem do MenuBartenderCaixa Registradora

  • Cenários: Fazer pedido → Adicionar bebida → Aplicar desconto → Pagar → Imprimir comprovante

🪙 Máquina de Venda Automática

  • Classes: Máquina de Venda AutomáticaProdutoMoedaDistribuidorCalculadora de Troco

  • Cenários: Inserir moeda → Selecionar item → Distribuir produto → Devolver troco

🎮 Jogo de Quiz

  • Classes: QuizPerguntaJogadorRastreador de PontuaçãoSessão de Jogo

  • Cenários: Iniciar quiz → Responder pergunta → Verificar correção → Mostrar pontuação final

🚗 Garagem de Estacionamento

  • Classes: GaragemCarroVaga de EstacionamentoBilhetePortão

  • Cenários: Entrar no garagem → Estacionar o carro → Sair → Pagar taxa → Pegar o ticket

Cada um desses sistemas se baseia nos mesmos princípios:

  • Identificar substantivos → atribuir responsabilidades → simular papéis → aprimorar → repetir.


📌 Pensamentos Finais: Cartões CRC São Mais do que uma Técnica — São uma Mentalidade

O verdadeiro poder dos cartões CRC não está nos próprios cartões — está na conversa que eles provocam.

Quando você escreve um cartão e diz, “Quem faz isso?” ou “Com quem ele precisa conversar?”, você já está pensando como um designer orientado a objetos.

🔥 Dica Profissional: Use cartões CRC durante o planejamento de sprint, em spikes técnicos ou até em entrevistas para demonstrar seu pensamento de design.

Eles não são apenas para desenvolvedores — são para qualquer pessoa envolvida na construção de software: gerentes de produto, designers, testadores e estudantes.


📎 Quer Mais?

👉 Baixe um modelo de cartão CRC impressível (PDF ou digital) para usar em seu próximo workshop.
👉 Experimente uma sessão ao vivo de CRC com um colega — atribua papéis: “Você é o Membro”, “Você é o Livro”, etc.
👉 Compartilhe seus resultados — poste seus cartões nas redes sociais com #CRCcards ou #OODesignJourney.


🏁 Conclusão

Sistema de Empréstimo de Livros da Bibliotecaé um dos exemplos clássicos e eficazes de cartões CRC — não porque seja complexo, mas porque ésimples, fácil de relacionar e revelador.

Ao seguir apenascinco etapas— brainstorming, criação de cartões, encenação de papéis, aprimoramento e iteração — você pode:

  • Descobrir classes naturalmente

  • Atribuir responsabilidades claramente

  • Identificar falhas de design cedo

  • Construir um modelo mental compartilhado como equipe

E o melhor de tudo? Você não precisa ser um desenvolvedor sênior para fazer isso.
Você só precisa de curiosidade, alguns cartões e disposição para brincar.


✅ Agora é sua vez: Pegue algumas notas adesivas, escolha um sistema simples (como uma cafeteria ou máquina de venda automática) e experimente o método CRC.

📌 Lembre-se: Bom design não é sobre escrever código perfeito — é sobre fazer as perguntas certas.

E com os cartões CRC, você já está fazendo isso.


📌 Bônus: Modelo de Cartão CRC Impressível (Versão de Texto)

┌────────────────────┐
│    [NOME DA CLASSE]    │
├────────────────────┤
│ Responsabilidades:  │
│ -                  │
│ -                  │
│ -                  │
├────────────────────┤
│ Colaboradores:     │
│ -                  │
│ -                  │
└────────────────────┘

Imprima isso em cartões 3×5 ou use em uma ferramenta digital como Miro, Figma ou Google Slides.


📚 Próximo passo?
Quer um passeio completo peloSistema de Pedido de Cafeteriausando o mesmo estilo CRC?
👉 Basta dizer a palavra — eu te envio o próximo estudo de caso, passo a passo, com cartões, cenários e encenação!

Boa criação! 🎮🧩💻

This post is also available in Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語 and Polski.