“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 parabrainstorming, projetar, 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:
✅ Membro, Livro, Empré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:
-
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?” -
Empréstimo responde: “Você tem 1 empréstimo ativo → pode pegar emprestado.”
-
Membro procura pelo livro: “Onde está ‘Código Limpo’?”
→ Pergunta Livro: “Você está disponível?” -
Livro verifica: “Tenho um empréstimo ativo (não devolvido)?”
→ Pergunta Empréstimo: “Há um empréstimo ativo para mim?” -
Empréstimo responde: “Não — você está disponível!”
-
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
-
-
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”
-
Membro (Curtis) diz: “Quero devolver ‘Código Limpo’.”
-
Membro encontra o correspondente Empréstimo (provavelmente consultando Empréstimo com o livro e o membro).
-
Empréstimo marca-se como devolvido.
-
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
-
Membro → Biblioteca: “Encontre o livro intitulado ‘Código Limpo’.”
-
Biblioteca procura em sua coleção e retorna o Livro (ou
nulose não encontrado). -
Membro agora sabe que o livro existe → pergunta Biblioteca: “Posso pegar este livro emprestado?”
-
Biblioteca verifica:
-
O livro está disponível? (via
Livro.isDisponivel()) -
O membro está dentro do limite de empréstimos? (via
Emprestimo.contarEmprestimosAtivos(membro))
-
-
Se sim → Biblioteca cria um novo Emprestimo e atualiza tanto o Livro como o Emprestimo.
-
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
-
Use cartões físicos (cartões de índice 3×5 ou notas adesivas) — é mais envolvente.
-
Uma classe por cartão — mantenha simples.
-
Escreva grande e legível — outros devem conseguir ler com facilidade.
-
Faça o role-playing em voz alta — passe os cartões como objetos reais.
-
Comece com 3–6 cenários principais (por exemplo, emprestar, devolver, pesquisar).
-
Não busque a perfeição — o objetivo é iteração, não um design final. Aperfeiçoe ao longo do processo.
-
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.
-
Convide todos para participar — até não programadores podem ajudar a identificar responsabilidades ausentes.
-
Esboce um diagrama de classe simples depois — para visualizar relações e confirmar a consistência.
-
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:
Cliente,Pedido,Item do Menu,Bartender,Caixa Registradora -
Cenários: Fazer pedido → Adicionar bebida → Aplicar desconto → Pagar → Imprimir comprovante
🪙 Máquina de Venda Automática
-
Classes:
Máquina de Venda Automática,Produto,Moeda,Distribuidor,Calculadora de Troco -
Cenários: Inserir moeda → Selecionar item → Distribuir produto → Devolver troco
🎮 Jogo de Quiz
-
Classes:
Quiz,Pergunta,Jogador,Rastreador de Pontuação,Sessão de Jogo -
Cenários: Iniciar quiz → Responder pergunta → Verificar correção → Mostrar pontuação final
🚗 Garagem de Estacionamento
-
Classes:
Garagem,Carro,Vaga de Estacionamento,Bilhete,Portã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
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! 🎮🧩💻
- Como desenhar cartões CRC no Visual Paradigm: Este guia passo a passo fornece instruções sobre como criar cartões CRC usando as ferramentas dedicadas de diagramação do software.
- Compreendendo os diagramas de cartões CRC no Visual Paradigm: Uma visão geral que explica como esses diagramas são usados para modelar sistemas orientados a objetos e suas interações.
- Como criar um diagrama de cartão CRC no Visual Paradigm: Um tutorial detalhado encontrado no Community Circle que aborda a criação e personalização de diagramas CRC.
- Introdução aos diagramas CRC no Visual Paradigm: Um guia abrangente focado na utilização de diagramas CRC para design orientado a objetos e modelagem de sistemas mais ampla.
- Gerando cartões CRC a partir de diagramas de classe: Esta discussão da comunidade explora métodos para aproveitar diagramas de classe existentes para gerar cartões automaticamente por meio de engenharia reversa.
- Sincronizando cartões CRC com diagramas de classe: Um recurso técnico que discute a modelagem bidirecional para garantir consistência de design entre cartões e modelos de classe.
- Introdução aos diagramas de cartões CRC (guia em PDF): Um recurso técnico baixável que explica os conceitos centrais e aplicações dos cartões CRC na análise de sistemas.
- Estabelecendo links entre cartões CRC e diagramas de classe: Este artigo destaca técnicas para manter rastreabilidade e ligação entre diferentes níveis de modelagem.
- Modelo de cartão CRC na galeria do Visual Paradigm: Um recurso que apresenta um modelo baixável projetado para apoiar o design orientado a objetos em estágios iniciais.
- Movendo cartões CRC entre diagramas: Um guia que detalha como transferir cartões entre diferentes diagramas, mantendo a consistência dos dados.
This post is also available in Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語 and Polski.









