de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PT

تسلط بر طراحی شیءگرا با کارت‌های CRC: یک مطالعه موردی مناسب برای مبتدیان

Table of Contents hide

«بهترین راه یادگیری طراحی شیءگرا این نیست که الگوها را به خاطر بسپارید — بلکه این است که نقش‌ها را ایفا کنید.»

در این مقاله، ما به طور مرحله‌ای به یکمقدمه‌ای گام به گام به کارت‌های CRC (کلاس–مسئولیت–همکاری) با استفاده از یک مثال واقع‌گرایانه و مناسب برای مبتدیان: یکسیستم امانت کتاب کتابخانه. هرچه شما در حال شروع مسیر خود به سمت طراحی نرم‌افزار باشید یا کارگاه تیمی را رهبری می‌کنید، کارت‌های CRC راهی ساده، قدرتمند و مشارکتی برای مدل‌سازی سیستم‌های شیءگرا ارائه می‌دهند.


🎯 کارت‌های CRC چیستند؟

کارت‌های CRC روشی سبک، فیزیکی (یا دیجیتال) برای مدل‌سازی که در طراحی شیءگرا استفاده می‌شود. هر کارت نماینده یککلاس و سه عنصر کلیدی دارد:

فیلد توضیحات
کلاس نام کلاس (مثلاًکتاب)
مسئولیت‌ها چه چیزی کلاسمی‌داندیاانجام می‌دهد
همکاران کلاس‌های دیگری که این کلاس نیاز دارد با آن‌ها کار کند

آن‌ها به‌ویژه برایذهن‌زنیطراحی کردنوتأییدساختارهای کلاس را در مراحل اولیه توسعه — قبل از نوشتن هر خط کدی — بررسی کنید.


📚 مطالعه موردی: سیستم امانت کتاب کتابخانه

فرض کنید یک کتابخانه عمومی کوچک که اعضا می‌توانند:

  • جستجوی کتاب‌ها بر اساس عنوان

  • امانت کتاب‌های موجود (تا حدی که مجاز باشند)

  • برگرداندن کتاب‌ها وقتی کار تمام شد

سیستم باید ردیابی کند:

  • کدام کتاب‌ها امانت گرفته شده‌اند

  • توسط چه کسی

  • چه زمانی موعد بازگشت آنهاست

ما از روشروش کارت CRCبرای کشف و بهبود کلاس‌های این سیستم — گام به گام.


✅ مرحله 1: یافتن کلاس‌های احتمالی (ذهن‌بازی با اسم‌ها)

اول از همه سناریو را بخوانید واسم‌ها— این‌ها کلاس‌های احتمالی هستند.

از توضیحات، ما شناسایی می‌کنیم:

  • کتابخانه

  • عضو (یا مراجع)

  • کتاب

  • امانت (یا امانت‌گیری)

  • تاریخ بازگشت (ممکن است خیلی کوچک باشد)

  • کارت کتابخانه (ممکن است بخشی از عضو باشد)

ما فیلتر می‌کنیم و فقط مهم‌ترین‌ها را نگه می‌داریم:

✅ عضوکتابقرض

⚠️ یادداشت: اول از همه نگران اینکه همه کلاس‌ها را درست بگیرید نباشید — این همان زیبایی کارت‌های CRC است. با بازی نقش‌ها، کلاس‌های گم‌شده را کشف خواهید کرد!


✏️ مرحله ۲: ایجاد کارت‌های اولیه CRC

اکنون، مامأموریت‌هاوهمکارانرا به هر کلاس اختصاص می‌دهیم.

📘 کلاس: کتاب

مأموریت‌ها همکاران
دانستن عنوان آن
دانستن نویسنده آن
دانستن شماره ISBN آن
دانستن اینکه آیا در حال حاضر در دسترس است یا خیر قرض
دریافت شدن به عنوان قرض قرض
بازگشت داده شدن قرض

💬 کتاب «نمی‌داند» کی آن را به عنوان قرض گرفته است — تنها می‌داند که آیا قرض فعالی دارد یا خیر.


👤 کلاس: عضو

وظایف همکاران
شناسایی نام
شناسایی شناسه عضو
شناسایی تعداد کتاب‌هایی که در حال حاضر امانت گرفته شده‌اند امانت
امانت کردن یک کتاب (در صورت امکان) کتاب، امانت
بازگرداندن یک کتاب کتاب، امانت
بررسی اینکه آیا حد امانت به پایان رسیده است امانت

💬 عضو رفتار امانت خود را مدیریت می‌کند و محدودیت‌ها را از طریق کلاس امانت بررسی می‌کند.


📅 کلاس: امانت

وظایف همکاران
ثبت اینکه کدام کتاب امانت گرفته شده است کتاب
ثبت اینکه کدام عضو آن را امانت گرفته است عضو
ثبت تاریخ امانت
محاسبه تاریخ انقضا
شناسایی اینکه آیا به تأخیر افتاده است
علامت‌گذاری به عنوان بازگشت‌شده کتاب

💬 کلاس وام رابطه بین یک عضو و یک کتاب را نگه می‌دارد، شامل جزئیات زمانی.


🎭 مرحله ۳: بازی نقش — «قرض گرفتن یک کتاب»

حالا بخش سرگرم‌کننده آمده است: بازی نقشسناریو را به گونه‌ای که کارت‌ها اشیاء واقعی باشند بازی کنید.

📖 سناریو: کرتیس می‌خواهد قرض بگیرد «کد تمیز»، که در دسترس است.

بیایید به صورت گام به گام آن را بررسی کنیم:

  1. عضو (کرتیس)می‌گوید: «من می‌خواهم کتاب «کد تمیز» را قرض بگیرم.»
    → اولین بررسی‌ها: «آیا تا به حال کمتر از ۳ کتاب دارم؟»
    → می‌پرسد وام«تعداد وام‌های فعالی که دارم چندتا است؟»

  2. وامپاسخ می‌دهد: «شما ۱ وام فعال دارید → می‌توانید قرض بگیرید.»

  3. عضوجستجوی کتاب: «کجا کتاب «کد تمیز» است؟»
    → می‌پرسد کتاب«آیا شما در دسترس هستید؟»

  4. کتاب بررسی می‌کند: «آیا من یک وام فعال (بازگردانده نشده) دارم؟»
    → پرسش می‌کند وام«آیا برای من وام فعالی وجود دارد؟»

  5. وام پاسخ می‌دهد: «نه — شما در دسترس هستید!»

  6. عضو یک مورد جدید ایجاد می‌کند وام شیء: 

    • به این کتاب و عضو

    • تاریخ امانت = امروز تنظیم می‌شود

    • تاریخ انقضا = امروز + ۱۴ روز محاسبه می‌شود

  7. کتاب به‌روزرسانی می‌شود: «حالا من یک وام فعال دارم → دیگر در دسترس نیستم.»

✅ نتیجه: فرآیند امانت‌گیری طبیعی، پراکنده و منطقی به نظر می‌رسد.


🔄 مرحله ۴: سناریوی دیگر — «بازگرداندن کتاب»

📖 سناریو: کرتیس بازگرداندن «کد تمیز»

  1. عضو (کرتیس)می‌گوید:«من می‌خواهم کتاب «کد تمیز» را برگردانم.»

  2. عضومی‌یابد مطابق باقرض (احتمالاً با پرس و جو)قرضبا کتاب و عضو).

  3. قرضخود را به عنوان علامت می‌گذاردبازگردانده شده.

  4. قرضبه می‌گویدکتاب«شما دوباره در دسترس هستید.»

✅ تمیز، روشن و یکپارچه — هیچ کلاسی کاری فراتر از مسئولیت خود انجام نمی‌دهد.


🔍 مرحله ۵: بهبود و افزودن کلاس‌های گم‌شده

پس از بازی نقش، متوجه یکشکاف:

❓ کی کتاب را بر اساس عنوان پیدا می‌کند؟

در حال حاضر،عضودر حال پرسش استکتابمستقیم — اماکتابنمی‌داند چگونه جستجو کند!
ما به یک نیاز داریمهمکار مرکزی.

➕ کلاس جدید:کتابخانه

وظایف همکاران
کتاب جدیدی به مجموعه اضافه کنید کتاب
کتاب را بر اساس عنوان پیدا کنید کتاب
عضو جدیدی ثبت کنید عضو
درخواست امانت کتاب را پردازش کنید عضو، کتاب، امانت
بازگرداندن کتاب را پردازش کنید عضو، کتاب، امانت
همه امانت‌های فعلی را بدانید امانت

💬 کتابخانه به عنوان گره مرکزی عمل می‌کند — تمام کتاب‌ها، اعضای و تمام امانت‌ها را می‌داند.


✨ جریان به‌روزشده: «امانت کتاب» با کتابخانه

  1. عضو → کتابخانه«کتابی با عنوان «کد تمیز» را پیدا کن.»

  2. کتابخانهمجموعه خود را جستجو می‌کند و بازگرداندنکتابیاخالیاگر پیدا نشود).

  3. عضواکنون می‌داند که کتاب وجود دارد → می‌پرسدکتابخانه«آیا می‌توانم این کتاب را امانت بگیرم؟»

  4. کتابخانهبررسی می‌کند:

    • آیا کتاب در دسترس است؟ (از طریقکتاب.در دسترس است())

    • آیا عضو در محدودیت امانت گرفتن قرار دارد؟ (از طریقامانت.تعدادامانت‌هایفعال(عضو))

  5. اگر بله →کتابخانهیک مورد جدید ایجاد می‌کندامانتو هر دو را به‌روز می‌کندکتابوامانت.

  6. کتاببه حالت عدم دسترسی تبدیل می‌شود؛قرضرابطه را ردیابی می‌کند.

✅ اکنون جریان منطقی به نظر می‌رسد— آنکتابخانهکشف و هماهنگی را مدیریت می‌کند.


🧩 خلاصه نهایی کارت‌های CRC (ساده‌شده برای مبتدیان)

کلاس وظایف کلیدی همکاران کلیدی
کتابخانه کتاب‌ها، اعضا و قرض‌ها را مدیریت می‌کند؛ امانت‌گیری/بازگرداندن را مدیریت می‌کند کتاب، عضو، قرض
عضو اطلاعات شخصی را می‌داند؛ امانت‌گیری/بازگرداندن را آغاز می‌کند کتابخانه، قرض
کتاب متادیتا را ذخیره می‌کند؛ دسترسی را ردیابی می‌کند کتابخانه، قرض
قرض تاریخچه امانت‌گیری را ردیابی می‌کند؛ تاریخ‌های انقضا را محاسبه می‌کند؛ وضعیت بازگرداندن را مدیریت می‌کند عضو، کتاب، کتابخانه

✅ اصل طراحی: هر کلاس داردیک هدف واضحو وظایفیکپارچه و به خوبی توزیع‌شده.


🌟 چرا کارت‌های CRC به این اندازه خوب کار می‌کنند (نکات اولیه برای مبتدیان)

مزیت توضیح
طراحی مبتنی بر مسئولیت مجبور می‌شود فکر کنید: «این کلاس چه چیزی می‌داند یا انجام می‌دهد؟» نه تنها ذخیره داده، بلکه چیزی دیگر.
کشف طبیعی کلاس‌های گم‌شده نقاشی نقش‌ها شکاف‌ها را آشکار می‌کند (مثل کلاس گم‌شده کتابخانه) — نیازی به حدس‌زنی نیست.
بازخورد فوری از طریق بازی نقش اگر جریان احساس نامطبوعی داشته باشد، می‌دانید مسئولیت در جای اشتباه است.
کم‌مراسم و مشارکتی ابزارهای پیچیده نیاز نیست — فقط کارت‌های شاخص، نوت‌های چسبنده یا یک تابلوی سفید. عالی برای تیم‌ها.
پل بین نیازها و کد داستان‌های کاربر را به تعاملات واقعی کلاس‌ها تبدیل می‌کند.

🛠️ نکات سریع برای جلسه اول CRC

  1. از کارت‌های فیزیکی استفاده کنید (کارت‌های 3×5 یا نوت‌های چسبنده) — جذاب‌تر است.

  2. یک کلاس در هر کارت — ساده نگه دارید.

  3. نوشتن بزرگ و خوانا — دیگران باید آن را به راحتی بخوانند.

  4. بازی نقش را به صورت صوتی انجام دهید — کارت‌ها را مانند اشیاء واقعی به هم بدهید.

  5. با 3 تا 6 سناریوی اصلی شروع کنید (مثلاً امانت گرفتن، بازگرداندن، جستجو).

  6. به دستیابی به کامل بودن توجه نکنید — هدف این است بازنویسی، نه یک طراحی نهایی. به مرور بهبود بخشید.

  7. از نام‌های ساده و مخصوص حوزه استفاده کنید — از اصطلاحات فنی اجتناب کنید. اگر تیم شما موافق باشد، از «عضو» به جای «مشتری» استفاده کنید.

  8. همه را به مشارکت دعوت کنید — حتی افراد غیربرنامه‌نویس می‌توانند به شناسایی مسئولیت‌های گمشده کمک کنند.

  9. بعداً یک نمودار کلاس ساده رسم کنید — برای دیداری کردن روابط و تأیید یکپارچگی.

  10. آن را سرگرم‌کننده نگه دارید — آن را مانند یک بازی در نظر بگیرید. هرچه تیم شما پر انرژی‌تر باشد، نتایج بهتری خواهید داشت.


🔄 خودتان امتحان کنید: حوزه‌های بعدی برای بررسی

پس از آنکه سیستم کتابخانه را به خوبی یاد گرفتید، سعی کنید کارت‌های CRC را به حوزه‌های دیگری که برای شروع‌کنندگان مناسب هستند، اعمال کنید:

☕ سیستم سفارش کافه

  • کلاس‌ها: مشتریسفارشآیتم منوباریستاصندوق کاشی

  • سناریوها: سفارش دادن → افزودن نوشیدنی → اعمال تخفیف → پرداخت → چاپ رسید

🪙 ماشین فروش اتوماتیک

  • کلاس‌ها: ماشین فروش اتوماتیکمحصولسکهماشین توزیع کنندهماشین محاسبه پول اضافه

  • سناریوها: وارد کردن سکه → انتخاب کالا → توزیع کالا → بازگرداندن وجه

🎮 بازی سوال و جواب

  • کلاس‌ها: مسابقهسوالبازیکنردیاب نمرهجلسه بازی

  • سناریوها: شروع مسابقه → پاسخ به سوال → بررسی صحت پاسخ → نمایش نمره نهایی

🚗 گاراژ پارکینگ

  • کلاس‌ها: گاراژماشینمحل پارکینگبلیطدریچه

  • سناریوها: ورود به گاراژ → پارک خودرو → خروج → پرداخت هزینه → دریافت بلیط

هر یک از این سیستم‌ها بر اساس اصول یکسانی ساخته می‌شوند:

  • شناسایی اسم‌ها → اختصاص مسئولیت‌ها → بازی نقش → بهبود → تکرار.


📌 نکات نهایی: کارت‌های CRC بیش از یک تکنیک هستند — اینها یک دیدگاه ذهنی هستند

توانایی واقعی کارت‌های CRC در خود کارت‌ها نیست — بلکه در مکالمه که ایجاد می‌کنند.

وقتی کارتی می‌نویسی و می‌گویی، «کی این کار را انجام می‌دهد؟» یا «کی باید با او صحبت کند؟»، شما از همین حالا به شیء‌گرا فکر می‌کنید.

🔥 نکته حرفه‌ای: از کارت‌های CRC در برنامه‌ریزی اسپرینت، فعالیت‌های فنی یا حتی در مصاحبه‌ها برای نشان دادن تفکر طراحی خود استفاده کنید.

این‌ها فقط برای توسعه‌دهندگان نیستند — این‌ها برای هر کسی که در ساخت نرم‌افزار شرکت می‌کنند: مدیران محصول، طراحان، آزمون‌کنندگان و دانش‌آموزان.


📎 می‌خواهید بیشتر؟

👉 یک الگوی قابل چاپ از کارت CRC دانلود کنید (PDF یا دیجیتال) برای استفاده در کارگاه بعدی خود.
👉 یک جلسه زنده CRC را امتحان کنید با یک همکار — نقش‌ها را تخصیص دهید: «شما عضو هستید»، «شما کتاب هستید» و غیره.
👉 نتایج خود را به اشتراک بگذارید — کارت‌های خود را در شبکه‌های اجتماعی منتشر کنید با برچسب #CRCcards یا #OODesignJourney.


🏁 نتیجه‌گیری

این سیستم امانت کتاب کتابخانهیکی از کلاسیک‌ترین و مؤثرترین مثال‌های کارت CRC است — نه به این دلیل که پیچیده است، بلکه به این دلیل کهساده، قابل درک و برجسته است.

با دنبال کردن فقطپنج مرحله— طراحی مفهومی، ایجاد کارت، بازی نقش، بهبود و تکرار — می‌توانید:

  • کلاس‌ها را به طور طبیعی کشف کنید

  • مسئولیت‌ها را به طور واضح تخصیص دهید

  • نقایص طراحی را به موقع شناسایی کنید

  • مدل ذهنی مشترکی به عنوان یک تیم بسازید

و بهترین نکته؟ نیازی به این نیست که یک توسعه‌دهنده ارشد باشید تا این کار را انجام دهید.
فقط نیاز دارید به شهامت کنجکاوی، چند کارت و تمایل به بازی کردن.


✅ حالا نوبت شماست: یک دسته نوت‌پد چسبنده بگیرید، یک سیستم ساده انتخاب کنید (مثل یک کافه یا ماشین فروش اتوماتیک) و روش CRC را امتحان کنید.

📌 به یاد داشته باشید: طراحی خوب درباره نوشتن کد کامل نیست — بلکه درباره پرسیدن سوالات درست است.

و با کارت‌های CRC، شما قبلاً این سوالات را می‌پرسید.


📌 بونوس: الگوی قابل چاپ کارت CRC (نسخه متنی)

┌────────────────────┐
│    [نام کلاس]    │
├────────────────────┤
│ مسئولیت‌ها:  │
│ -                  │
│ -                  │
│ -                  │
├────────────────────┤
│ همکاران:     │
│ -                  │
│ -                  │
└────────────────────┘

این را روی کارت‌های 3×5 چاپ کنید یا از آن در ابزارهای دیجیتالی مانند مایرو، فیگما یا گوگل اسلاید استفاده کنید.


📚 مرحله بعدی؟
آیا می‌خواهید راهنمای کامل سیستمسیستم سفارش کافهبا همان سبک CRC؟
👉 فقط کافی است کلمه را بگویید — من به شما مطالعه مورد بعدی را به صورت گام به گام، با کارت‌ها، سناریوها و بازی نقش ارسال می‌کنم!

طراحی خوش! 🎮🧩💻

This post is also available in Deutsch, English, Español, Français, English, Bahasa Indonesia, 日本語, Polski and Portuguese.