de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Opanowanie projektowania obiektowego za pomocą kart CRC: Przykład przyjazny dla początkujących

„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:

  1. 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ń?”

  2. Wypożyczenieodpowiada:„Masz 1 aktywne wypożyczenie → możesz wypożyczyć.”

  3. Członekszuka książki:„Gdzie jest „Czysty kod”?”
    → PytaKsiążka: „Czy jesteś dostępny?”

  4. Książka sprawdza: „Czy mam aktywny (nie zwrócony) pożyczkę?”
    → Zapytanie Pożyczkę: „Czy mam aktywną pożyczkę?”

  5. Pożyczkę odpowiada: „Nie — jesteś dostępny!”

  6. 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

  7. 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”

  1. Człowiek (Curtis)mówi:„Chcę zwrócić książkę „Czysty kod“.

  2. Człowiekznajduje pasującąWypożyczenie (prawdopodobnie poprzez zapytanie)Wypożyczenie z książką i użytkownikiem).

  3. Wypożyczenieoznacza się jakozwrócony.

  4. 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ą

  1. Uczestnik → Biblioteka: „Znajdź książkę o tytule „Czysty kod”.”

  2. Biblioteka szuka w swojej kolekcji i zwraca Książka (lub null jeśli nie znaleziono).

  3. Członek teraz wie, że książka istnieje → pyta Biblioteka: „Czy mogę wypożyczyć tę książkę?”

  4. Biblioteka sprawdza:

    • Czy książka jest dostępna? (poprzez Book.isAvailable())

    • Czy członek jest w granicach limitu wypożyczeń? (poprzez Loan.countActiveLoans(member))

  5. Jeśli tak → Biblioteka tworzy nowy Wypożyczenie i aktualizuje zarówno Książka i Wypożyczenie.

  6. 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

  1. Używaj kart fizycznych (karty 3×5 lub notesy) — jest to bardziej angażujące.

  2. Jedna klasa na kartę —保持 to proste.

  3. Pisz dużymi i czytelnymi literami — inni powinni łatwo to czytać.

  4. Rozgrywaj role na głos — przekazuj karty jak rzeczywiste przedmioty.

  5. Zacznij od 3–6 podstawowych scenariuszy (np. wypożycz, zwróć, wyszukaj).

  6. Nie dąż do doskonałości — celem jest iteracja, a nie ostateczny projekt. Doskonal go w trakcie pracy.

  7. Używaj prostych, specyficznych dla dziedziny nazw — unikaj żargonu technicznego. Użyj „Człowiek” zamiast „Patron”, jeśli zespół się zgodzi.

  8. Zaprosz wszystkich do udziału — nawet osoby nieprogramujące mogą pomóc zauważyć brakujące odpowiedzialności.

  9. Następnie narysuj prosty diagram klas — aby wizualizować relacje i potwierdzić spójność.

  10. 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! 🎮🧩💻

Ten post dostępny jest również w Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文