Carte di Class Responsibility Collaboration
# 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 |
