„Najlepszym sposobem na naukę projektowania obiektowego nie jest zapamiętywanie wzorców — to granie w role.”
W tym artykule przejdziemy przezkrok po kroku wprowadzenie do kart CRC (Klasa–Odpowiedzialność–Współpracownik) z użyciem rzeczywistego przykładu przyjaznego dla początkujących: systemSystem wypożyczania książek bibliotecznych. Niezależnie od tego, czy zaczynasz swoją podróż w dziedzinie projektowania oprogramowania, czy prowadzisz warsztat zespołu, karty CRC oferują prosty, potężny i współpracy oparty sposób modelowania systemów obiektowych.
🎯 Czym są karty CRC?
Karty CRC to lekka technika modelowania, fizyczna (lub cyfrowa), używana w projektowaniu obiektowym. Każda karta reprezentuje klasęklasę i zawiera trzy kluczowe elementy:
| Pole | Opis |
|---|---|
| Klasa | Nazwa klasy (np.Książka) |
| Odpowiedzialności | Co klasawie lubrobi |
| Współpracownicy | Inne klasy, z którymi ta klasa musi współpracować |
Są szczególnie skuteczne przyrozmyślaniu, projektowaniu, iwalidacjastruktury klas na wczesnym etapie rozwoju — przed napisaniem jednego wiersza kodu.
📚 Studium przypadku: System wypożyczania książek bibliotecznych
Wyobraźmy sobie małą bibliotekę publiczną, w której członkowie mogą:
-
Szukać książek po tytule
-
Wypożyczać dostępne książki (do limitu)
-
Zwracać książki po zakończeniu
System musi śledzić:
-
Które książki są wypożyczone
-
Przez kogo
-
Kiedy są do zwrotu
Skorzystamy z metodykarty CRCaby odkryć i wdrożyć klasy w tym systemie — krok po kroku.
✅ Krok 1: Znajdź klasy kandydatów (wypracowanie rzeczowników)
Zacznij od przeczytania scenariusza i wyciągnięciarzeczowników— to potencjalne klasy.
Na podstawie opisu identyfikujemy:
-
Biblioteka
-
Członek (lub Użytkownik)
-
Książka
-
Wypożyczenie (lub Wypożyczenie)
-
Data zwrotu (może być zbyt mała)
-
Karta biblioteczna (może być częścią Członka)
Filtrujemy i pozostawiamy tylko najbardziej znaczące:
✅ Członek, Książka, Wypożyczenie
⚠️ Uwaga: Nie martw się o poprawne ustawienie wszystkich klas od razu — to właśnie piękno kart CRC. Zauważysz brakujące klasy podczas gry w role!
✏️ Krok 2: Utwórz początkowe karty CRC
Teraz przypisujemyobowiązkiiwspółpracownikówdo każdej klasy.
📘 Klasa: Książka
| Obowiązki | Współpracownicy |
|---|---|
| Znać tytuł | — |
| Znać autora | — |
| Znać numer ISBN | — |
| Wiedzieć, czy jest obecnie dostępna | Wypożyczenie |
| Zostać wypożyczoną | Wypożyczenie |
| Zostać zwróconą | Wypożyczenie |
💬 Książka nie „wie”, kto ją wypożyczył — wie tylko, czy ma aktywne wypożyczenie.
👤 Klasa: Użytkownik
| Odpowiedzialności | Współpracownicy |
|---|---|
| Znać imię | — |
| Znać identyfikator członka | — |
| Znać, ile książek jest obecnie wypożyczonych | Wypożyczenie |
| Wypożyczyć książkę (jeśli dozwolone) | Książka, Wypożyczenie |
| Zwrócić książkę | Książka, Wypożyczenie |
| Sprawdzić, czy osiągnięto limit wypożyczania | Wypożyczenie |
💬 Członek zarządza własnym zachowaniem wypożyczania i sprawdza limity za pomocą klasy Wypożyczenie.
📅 Klasa: Wypożyczenie
| Odpowiedzialności | Współpracownicy |
|---|---|
| Zapisać, jaka książka została wypożyczona | Książka |
| Zapisać, który członek ją wypożyczył | Członek |
| Zapisać datę wypożyczenia | — |
| Obliczyć datę zwrotu | — |
| Wiedzieć, czy jest opóźnione | — |
| Oznacz jako zwrócony | Książka |
💬 Klasa Loan przechowuje relację między Członkiem a Książką, w tym szczegółowe informacje o czasie.
🎭 Krok 3: Zagraj scenariusz — „Wypożycz książkę”
Teraz nadejdzie część przyjemna:granie rólscenariusz tak, jakby karty były rzeczywistymi przedmiotami.
📖 Scenariusz: Curtis chce wypożyczyć„Czysty kod”, która jest dostępna.
Przejdźmy to krok po kroku:
-
Członek (Curtis)mówi:„Chcę wypożyczyć „Czysty kod”.”
→ Najpierw sprawdza:„Czy mam mniej niż 3 książki już?”
→ PytaWypożyczenie: „Ile mam aktywnych wypożyczeń?” -
Wypożyczenieodpowiada:„Masz 1 aktywne wypożyczenie → możesz wypożyczyć.”
-
Członekszuka książki:„Gdzie jest „Czysty kod”?”
→ PytaKsiążka: „Czy jesteś dostępny?” -
Książka sprawdza: „Czy mam aktywny (nie zwrócony) pożyczkę?”
→ Zapytanie Pożyczkę: „Czy mam aktywną pożyczkę?” -
Pożyczkę odpowiada: „Nie — jesteś dostępny!”
-
Członka tworzy nową Pożyczkę obiekt:
-
Linkuje do tej Książka i Członka
-
Ustawia datę wypożyczenia = dzisiaj
-
Oblicza datę zwrotu = dzisiaj + 14 dni
-
-
Książka jest aktualizowana: „Teraz mam aktywną pożyczkę → nie jestem już dostępny.”
✅ Wynik: Proces wypożyczania wydaje się naturalny, rozproszony i logiczny.
🔄 Krok 4: Inny scenariusz — „Zwróć książkę”
📖 Scenariusz: Curtis zwraca „Czysty kod”
-
Człowiek (Curtis)mówi:„Chcę zwrócić książkę „Czysty kod“.
-
Człowiekznajduje pasującąWypożyczenie (prawdopodobnie poprzez zapytanie)Wypożyczenie z książką i użytkownikiem).
-
Wypożyczenieoznacza się jakozwrócony.
-
WypożyczeniemówiKsiążka: „Teraz znów jesteś dostępny.”
✅ Czysty, przejrzysty i spójny — żadna klasa nie wykonuje pracy poza swoją odpowiedzialnością.
🔍 Krok 5: Wyrównaj i dodaj brakujące klasy
Po odgrywaniu ról zauważamylukę:
❓ Kto znajduje książkę po tytule?
ObecnieCzłowiekpytaKsiążka bezpośrednio — ale Książka nie wie, jak wyszukiwać!
Potrzebujemy centralnego koordynatora.
➕ Nowa klasa: Biblioteka
| Odpowiedzialności | Współpracownicy |
|---|---|
| Dodaj nową książkę do kolekcji | Książka |
| Znajdź książkę po tytule | Książka |
| Zarejestruj nowego uczestnika | Uczestnik |
| Zrealizuj prośbę o wypożyczenie książki | Uczestnik, Książka, Wypożyczenie |
| Zrealizuj zwrot książki | Uczestnik, Książka, Wypożyczenie |
| Znać wszystkie obecne wypożyczenia | Wypożyczenie |
💬 Biblioteka działa jako centralny ośrodek — zna wszystkie książki, wszystkich uczestników i wszystkie wypożyczenia.
✨ Zaktualizowany przepływ: „Wypożycz książkę” z Biblioteką
-
Uczestnik → Biblioteka: „Znajdź książkę o tytule „Czysty kod”.”
-
Biblioteka szuka w swojej kolekcji i zwraca Książka (lub
nulljeśli nie znaleziono). -
Członek teraz wie, że książka istnieje → pyta Biblioteka: „Czy mogę wypożyczyć tę książkę?”
-
Biblioteka sprawdza:
-
Czy książka jest dostępna? (poprzez
Book.isAvailable()) -
Czy członek jest w granicach limitu wypożyczeń? (poprzez
Loan.countActiveLoans(member))
-
-
Jeśli tak → Biblioteka tworzy nowy Wypożyczenie i aktualizuje zarówno Książka i Wypożyczenie.
-
Książka staje się niedostępny; Wypożyczenie śledzi relację.
✅ Teraz przepływ ma sens — Biblioteka zajmuje się odkrywaniem i koordynacją.
🧩 Ostateczna podsumowanie kart CRC (uproszczone dla początkujących)
| Klasa | Główne odpowiedzialności | Główni współpracownicy |
|---|---|---|
| Biblioteka | Zarządza książkami, członkami, wypożyczeniami; obsługuje wypożyczenie/zwrot | Książka, Członek, Wypożyczenie |
| Członek | Zna informacje osobiste; inicjuje wypożyczenie/zwrot | Biblioteka, Wypożyczenie |
| Książka | Przechowuje metadane; śledzi dostępność | Biblioteka, Wypożyczenie |
| Wypożyczenie | Śledzi historię wypożyczeń; oblicza daty zwrotu; zarządza stanem zwrotu | Członek, Książka, Biblioteka |
✅ Zasada projektowania: Każda klasa ma jedno jasne zadanie, a odpowiedzialności są spójne i dobrze rozłożone.
🌟 Dlaczego karty CRC działają tak dobrze (podstawowe wnioski dla początkujących)
| Zalety | Wyjaśnienie |
|---|---|
| Projektowanie oparte na odpowiedzialności | Zmusza Cię do myślenia: „Co ten klasa wie lub robi?” a nie tylko przechowywania danych. |
| Naturalne odkrycie brakujących klas | Rozgrywanie ról ujawnia luki (np. brakującaBiblioteka) — nie potrzeba zgadywania. |
| Natychmiastowa zwracana informacja poprzez rozgrywanie ról | Jeśli przepływ wydaje się niezgrabny, wiesz, że odpowiedzialność jest w złym miejscu. |
| Niski poziom formalizmu i współpraca | Brak skomplikowanych narzędzi — tylko karty indeksowe, notesy lub tablica. Idealne dla zespołów. |
| Łączy wymagania z kodem | Przekształca historie użytkownika w rzeczywiste interakcje klas. |
🛠️ Szybkie porady na pierwszą sesję CRC
-
Używaj kart fizycznych (karty 3×5 lub notesy) — jest to bardziej angażujące.
-
Jedna klasa na kartę —保持 to proste.
-
Pisz dużymi i czytelnymi literami — inni powinni łatwo to czytać.
-
Rozgrywaj role na głos — przekazuj karty jak rzeczywiste przedmioty.
-
Zacznij od 3–6 podstawowych scenariuszy (np. wypożycz, zwróć, wyszukaj).
-
Nie dąż do doskonałości — celem jest iteracja, a nie ostateczny projekt. Doskonal go w trakcie pracy.
-
Używaj prostych, specyficznych dla dziedziny nazw — unikaj żargonu technicznego. Użyj „Człowiek” zamiast „Patron”, jeśli zespół się zgodzi.
-
Zaprosz wszystkich do udziału — nawet osoby nieprogramujące mogą pomóc zauważyć brakujące odpowiedzialności.
-
Następnie narysuj prosty diagram klas — aby wizualizować relacje i potwierdzić spójność.
-
Zachowaj zabawę — traktuj to jak grę. Im bardziej zaangażowany jest zespół, tym lepsze wyniki.
🔄 Spróbuj sam: następne dziedziny do eksploracji
Gdy opanujesz system biblioteki, spróbuj zastosować karty CRC do innych dziedzin przyjaznych dla początkujących:
☕ System zamówień w kawiarni
-
Klasy:
Klient,Zamówienie,Pozycja menu,Barman,Kasa -
Scenariusze: Złóż zamówienie → Dodaj napój → Zastosuj zniżkę → Zapłać → Wydrukuj paragon
🪙 Automat do sprzedawania towarów
-
Klasy:
Automat do sprzedawania towarów,Produkt,Moneta,Wydawacz,Kalkulator reszty -
Scenariusze: Włóż monety → Wybierz produkt → Wydaj produkt → Zwróć resztę
🎮 Gra quizowa
-
Klasy:
Quiz,Pytanie,Gracz,Śledzenie wyników,Sesja gry -
Scenariusze: Rozpocznij quiz → Odpowiedz na pytanie → Sprawdź poprawność → Pokaż końcowy wynik
🚗 Garaz samochodowy
-
Klasy:
Garaz,Samochód,Miejsce parkingowe,Bilet,Bramka -
Scenariusze: Wejście do garażu → Postaw samochód → Wyjście → Zapłać opłatę → Weź bilet
Każdy z tych systemów opiera się na tych samych zasadach:
-
Zidentyfikuj rzeczowniki → przydziel odpowiedzialności → zagraj role → doskonal → powtórz.
📌 Ostateczne rozważania: Karty CRC to więcej niż technika — to mentalność
Prawdziwa siła kart CRC nie tkwi w samych kartach — leży w rozmowiektórą wywołują.
Kiedy piszesz kartę i mówisz, „Kto to robi?” lub „Do kogo musi się odwołać?”, już myślisz jak projektant oparty na obiektach.
🔥 Porada: Używaj kart CRC podczas planowania sprintu, analiz technicznych lub nawet w rozmowach kwalifikacyjnych, aby pokazać swoje myślenie projektowe.
Nie są tylko dla programistów — są dla każdego uczestniczącego w budowaniu oprogramowania: menedżerów produktu, projektantów, testerów i studentów.
📎 Chcesz więcej?
👉 Pobierz drukowalny szablon karty CRC (PDF lub cyfrowy) do użycia w kolejnym warsztacie.
👉 Spróbuj sesji CRC na żywo z kolegą — przydziel role: „Jesteś członkiem”, „Jesteś książką”, itd.
👉 Podziel się wynikami — opublikuj swoje karty na mediach społecznościowych z hashtagiem #CRCcards lub #OODesignJourney.
🏁 Podsumowanie
The System wypożyczania książek w bibliotece jest jednym z najbardziej klasycznych i skutecznych przykładów kart CRC — nie dlatego, że jest skomplikowany, ale dlatego, że jest prosty, zrozumiały i pouczający.
Poprzez przestrzeganie tylko pięciu kroków — mózgowy sztorm, tworzenie kart, gra rolowa, doskonalenie i iterowanie — możesz:
-
Odkrywać klasy naturalnie
-
Jasno przypisywać odpowiedzialności
-
Wcześnie wykrywać wady projektu
-
Tworzyć wspólny model poznawczy jako zespół
A najlepsze? Nie musisz być starszym programistą, żeby to zrobić.
Wystarczy, że masz ciekawość, kilka kart i chęć zabawy.
✅ Teraz twoja kolej: Weź kilka notesów, wybierz prosty system (np. kawiarnia lub automaty z napojami) i spróbuj metody CRC.
📌 Pamiętaj: Dobry projekt nie polega na pisanie idealnego kodu — polega na zadawaniu odpowiednich pytań.
A z kartami CRC już je zadajesz.
📌 Dodatek: Drukowalny szablon karty CRC (wersja tekstowa)
┌────────────────────┐
│ [NAZWA KLASY] │
├────────────────────┤
│ Odpowiedzialności: │
│ - │
│ - │
│ - │
├────────────────────┤
│ Współpracownicy: │
│ - │
│ - │
└────────────────────┘
Drukuj to na kartkach 3×5 lub użyj w narzędziu cyfrowym, takim jak Miro, Figma lub Google Slides.
📚 Kolejny krok?
Chcesz kompletny przewodnik po System zamówień w kawiarni z wykorzystaniem tej samej metody CRC?
👉 Po prostu powiedz słowo — wyślemy Ci kolejny przypadek badawczy krok po kroku, z kartami, scenariuszami i grą rolową!
Miłego projektowania! 🎮🧩💻
- Jak rysować karty CRC w programie Visual Paradigm: Ten krok po kroku przewodnik zawiera instrukcje dotyczące tworzenia kart CRC za pomocą dedykowanych narzędzi do rysowania w programie.
- Zrozumienie diagramów kart CRC w programie Visual Paradigm: Przegląd wyjaśniający, jak te diagramy są używane do modelowania systemów zorientowanych obiektowo i ich interakcji.
- Jak stworzyć diagram karty CRC w programie Visual Paradigm: Pełny przewodnik dostępny na Community Circle, obejmujący tworzenie i dostosowywanie diagramów kart CRC.
- Wprowadzenie do diagramów CRC w programie Visual Paradigm: Kompleksowy przewodnik skupiony na wykorzystywaniu diagramów CRC do projektowania zorientowanego obiektowo oraz szerszego modelowania systemów.
- Generowanie kart CRC na podstawie diagramów klas: Dyskusja społeczności, która bada metody wykorzystywania istniejących diagramów klas do automatycznego generowania kart poprzez odwrotne inżynierowanie.
- Synchronizacja kart CRC z diagramami klas: Zasób techniczny omawiający modelowanie dwukierunkowe w celu zapewnienia spójności projektu między kartami a modelami klas.
- Wprowadzenie do diagramów kart CRC (przewodnik PDF): Pobieralny zasób techniczny wyjaśniający podstawowe koncepcje i zastosowania kart CRC w analizie systemów.
- Nawiazywanie połączeń między kartami CRC a diagramami klas: Artykuł ten podkreśla techniki utrzymywania śledzenia i łączenia między różnymi poziomami modelowania.
- Szablon karty CRC w galerii programu Visual Paradigm: Zasób zawierający pobieralny szablon przeznaczony do wspierania projektowania zorientowanego obiektowo na wczesnym etapie.
- Przenoszenie kart CRC między diagramami: Przewodnik wyjaśniający, jak przenosić karty między różnymi diagramami, zachowując spójność danych.
Ten post dostępny jest również w Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語 and Portuguese









