title: Carte di Class Responsibility Collaboration
text: # Carte di Class Responsibility Collaboration
  
  Le carte (o schede) Class Responsibility Collaboration (CRC, "responsabilità e collaborazione di classe") sono uno strumento usato per impostare un progetto software object-oriented attraverso un processo di brainstorming. Furono originariamente proposte a scopo didattico da Ward Cunningham e Kent Beck. L'uso di CRC cards per le fasi iniziali di progettazione è fra le pratiche consigliate dall'extreme programming.
  
  Le carte CRC sono realizzate su piccole schede di carta o cartoncino. Ciascuna carta descrive una classe (o un oggetto) in modo sommario, indicando:
  
  * Il nome della classe
  * Le sue superclassi e sottoclassi (dove applicabile)
  * Le sue responsabilità
  * Il nome di altre classi con cui questa classe collabora per svolgere i compiti di cui è responsabile
  * L'autore
  
  L'uso di schede di piccole dimensioni ha lo scopo di limitare la complessità della descrizione, evitando che vengano riportate troppe informazioni di dettaglio. Serve anche a impedire che a una classe vengano assegnate troppe responsabilità. Il supporto cartaceo consente una serie di attività gestuali utili in fase di brainstorming, come piazzare le carte su un tavolo e spostarle, riorganizzarle, o anche eliminarle e sostituirle facilmente con altre nel corso della discussione. Il posizionamento delle carte su un tavolo può essere usato intuitivamente per rappresentare informazioni aggiuntive; per esempio, due carte possono essere parzialmente sovrapposte per indicare una relazione di stretta collaborazione, o una carta può essere posta sopra un'altra per indicare una relazione di controllo/supervisione.
  
  Una volta creato un sistema di carte, il team può verificare la sua efficacia provando a simulare l'esecuzione di uno scenario: è incoraggiata la pratica di prendere in mano le carte corrispondenti ai vari oggetti che entrano di volta in volta in scena. L'intenzione del metodo è infatti soprattutto quella di far visualizzare agli utilizzatori la dinamica delle interazioni in un sistema object-oriented come scambio di messaggi e servizi fra entità indipendenti. Nella loro presentazione del metodo, Beck e Cunningham hanno esplicitamente ammesso che il metodo tende a sfumare la distinzione fra classi e oggetti, per cui in diversi momenti della discussione e delle simulazioni le carte possono rappresentare le une o gli altri a seconda del contesto.
  
  ## Schema di una carta
  
  * Nome della classe
  * Sottoclassi
  * Eventuali classi derivate |
  * Responsabilità
  * Responsabilità degli oggetti della classe: di quali informazioni sono depositari, quali azioni eseguono |
  * Collaborazioni
  * Relazioni con altre classi |
  