«بهترین راه یادگیری طراحی شیءگرا این نیست که الگوها را به خاطر بسپارید — بلکه این است که نقشها را ایفا کنید.»
در این مقاله، ما به طور مرحلهای به یکمقدمهای گام به گام به کارتهای CRC (کلاس–مسئولیت–همکاری) با استفاده از یک مثال واقعگرایانه و مناسب برای مبتدیان: یکسیستم امانت کتاب کتابخانه. هرچه شما در حال شروع مسیر خود به سمت طراحی نرمافزار باشید یا کارگاه تیمی را رهبری میکنید، کارتهای CRC راهی ساده، قدرتمند و مشارکتی برای مدلسازی سیستمهای شیءگرا ارائه میدهند.
🎯 کارتهای CRC چیستند؟
کارتهای CRC روشی سبک، فیزیکی (یا دیجیتال) برای مدلسازی که در طراحی شیءگرا استفاده میشود. هر کارت نماینده یککلاس و سه عنصر کلیدی دارد:
| فیلد | توضیحات |
|---|---|
| کلاس | نام کلاس (مثلاًکتاب) |
| مسئولیتها | چه چیزی کلاسمیداندیاانجام میدهد |
| همکاران | کلاسهای دیگری که این کلاس نیاز دارد با آنها کار کند |
آنها بهویژه برایذهنزنی, طراحی کردنوتأییدساختارهای کلاس را در مراحل اولیه توسعه — قبل از نوشتن هر خط کدی — بررسی کنید.
📚 مطالعه موردی: سیستم امانت کتاب کتابخانه
فرض کنید یک کتابخانه عمومی کوچک که اعضا میتوانند:
-
جستجوی کتابها بر اساس عنوان
-
امانت کتابهای موجود (تا حدی که مجاز باشند)
-
برگرداندن کتابها وقتی کار تمام شد
سیستم باید ردیابی کند:
-
کدام کتابها امانت گرفته شدهاند
-
توسط چه کسی
-
چه زمانی موعد بازگشت آنهاست
ما از روشروش کارت CRCبرای کشف و بهبود کلاسهای این سیستم — گام به گام.
✅ مرحله 1: یافتن کلاسهای احتمالی (ذهنبازی با اسمها)
اول از همه سناریو را بخوانید واسمها— اینها کلاسهای احتمالی هستند.
از توضیحات، ما شناسایی میکنیم:
-
کتابخانه
-
عضو (یا مراجع)
-
کتاب
-
امانت (یا امانتگیری)
-
تاریخ بازگشت (ممکن است خیلی کوچک باشد)
-
کارت کتابخانه (ممکن است بخشی از عضو باشد)
ما فیلتر میکنیم و فقط مهمترینها را نگه میداریم:
✅ عضو, کتاب, قرض
⚠️ یادداشت: اول از همه نگران اینکه همه کلاسها را درست بگیرید نباشید — این همان زیبایی کارتهای CRC است. با بازی نقشها، کلاسهای گمشده را کشف خواهید کرد!
✏️ مرحله ۲: ایجاد کارتهای اولیه CRC
اکنون، مامأموریتهاوهمکارانرا به هر کلاس اختصاص میدهیم.
📘 کلاس: کتاب
| مأموریتها | همکاران |
|---|---|
| دانستن عنوان آن | — |
| دانستن نویسنده آن | — |
| دانستن شماره ISBN آن | — |
| دانستن اینکه آیا در حال حاضر در دسترس است یا خیر | قرض |
| دریافت شدن به عنوان قرض | قرض |
| بازگشت داده شدن | قرض |
💬 کتاب «نمیداند» کی آن را به عنوان قرض گرفته است — تنها میداند که آیا قرض فعالی دارد یا خیر.
👤 کلاس: عضو
| وظایف | همکاران |
|---|---|
| شناسایی نام | — |
| شناسایی شناسه عضو | — |
| شناسایی تعداد کتابهایی که در حال حاضر امانت گرفته شدهاند | امانت |
| امانت کردن یک کتاب (در صورت امکان) | کتاب، امانت |
| بازگرداندن یک کتاب | کتاب، امانت |
| بررسی اینکه آیا حد امانت به پایان رسیده است | امانت |
💬 عضو رفتار امانت خود را مدیریت میکند و محدودیتها را از طریق کلاس امانت بررسی میکند.
📅 کلاس: امانت
| وظایف | همکاران |
|---|---|
| ثبت اینکه کدام کتاب امانت گرفته شده است | کتاب |
| ثبت اینکه کدام عضو آن را امانت گرفته است | عضو |
| ثبت تاریخ امانت | — |
| محاسبه تاریخ انقضا | — |
| شناسایی اینکه آیا به تأخیر افتاده است | — |
| علامتگذاری به عنوان بازگشتشده | کتاب |
💬 کلاس وام رابطه بین یک عضو و یک کتاب را نگه میدارد، شامل جزئیات زمانی.
🎭 مرحله ۳: بازی نقش — «قرض گرفتن یک کتاب»
حالا بخش سرگرمکننده آمده است: بازی نقشسناریو را به گونهای که کارتها اشیاء واقعی باشند بازی کنید.
📖 سناریو: کرتیس میخواهد قرض بگیرد «کد تمیز»، که در دسترس است.
بیایید به صورت گام به گام آن را بررسی کنیم:
-
عضو (کرتیس)میگوید: «من میخواهم کتاب «کد تمیز» را قرض بگیرم.»
→ اولین بررسیها: «آیا تا به حال کمتر از ۳ کتاب دارم؟»
→ میپرسد وام: «تعداد وامهای فعالی که دارم چندتا است؟» -
وامپاسخ میدهد: «شما ۱ وام فعال دارید → میتوانید قرض بگیرید.»
-
عضوجستجوی کتاب: «کجا کتاب «کد تمیز» است؟»
→ میپرسد کتاب: «آیا شما در دسترس هستید؟» -
کتاب بررسی میکند: «آیا من یک وام فعال (بازگردانده نشده) دارم؟»
→ پرسش میکند وام: «آیا برای من وام فعالی وجود دارد؟» -
وام پاسخ میدهد: «نه — شما در دسترس هستید!»
-
عضو یک مورد جدید ایجاد میکند وام شیء:
-
به این کتاب و عضو
-
تاریخ امانت = امروز تنظیم میشود
-
تاریخ انقضا = امروز + ۱۴ روز محاسبه میشود
-
-
کتاب بهروزرسانی میشود: «حالا من یک وام فعال دارم → دیگر در دسترس نیستم.»
✅ نتیجه: فرآیند امانتگیری طبیعی، پراکنده و منطقی به نظر میرسد.
🔄 مرحله ۴: سناریوی دیگر — «بازگرداندن کتاب»
📖 سناریو: کرتیس بازگرداندن «کد تمیز»
-
عضو (کرتیس)میگوید:«من میخواهم کتاب «کد تمیز» را برگردانم.»
-
عضومییابد مطابق باقرض (احتمالاً با پرس و جو)قرضبا کتاب و عضو).
-
قرضخود را به عنوان علامت میگذاردبازگردانده شده.
-
قرضبه میگویدکتاب: «شما دوباره در دسترس هستید.»
✅ تمیز، روشن و یکپارچه — هیچ کلاسی کاری فراتر از مسئولیت خود انجام نمیدهد.
🔍 مرحله ۵: بهبود و افزودن کلاسهای گمشده
پس از بازی نقش، متوجه یکشکاف:
❓ کی کتاب را بر اساس عنوان پیدا میکند؟
در حال حاضر،عضودر حال پرسش استکتابمستقیم — اماکتابنمیداند چگونه جستجو کند!
ما به یک نیاز داریمهمکار مرکزی.
➕ کلاس جدید:کتابخانه
| وظایف | همکاران |
|---|---|
| کتاب جدیدی به مجموعه اضافه کنید | کتاب |
| کتاب را بر اساس عنوان پیدا کنید | کتاب |
| عضو جدیدی ثبت کنید | عضو |
| درخواست امانت کتاب را پردازش کنید | عضو، کتاب، امانت |
| بازگرداندن کتاب را پردازش کنید | عضو، کتاب، امانت |
| همه امانتهای فعلی را بدانید | امانت |
💬 کتابخانه به عنوان گره مرکزی عمل میکند — تمام کتابها، اعضای و تمام امانتها را میداند.
✨ جریان بهروزشده: «امانت کتاب» با کتابخانه
-
عضو → کتابخانه: «کتابی با عنوان «کد تمیز» را پیدا کن.»
-
کتابخانهمجموعه خود را جستجو میکند و بازگرداندنکتابیا
خالیاگر پیدا نشود). -
عضواکنون میداند که کتاب وجود دارد → میپرسدکتابخانه: «آیا میتوانم این کتاب را امانت بگیرم؟»
-
کتابخانهبررسی میکند:
-
آیا کتاب در دسترس است؟ (از طریق
کتاب.در دسترس است()) -
آیا عضو در محدودیت امانت گرفتن قرار دارد؟ (از طریق
امانت.تعدادامانتهایفعال(عضو))
-
-
اگر بله →کتابخانهیک مورد جدید ایجاد میکندامانتو هر دو را بهروز میکندکتابوامانت.
-
کتاببه حالت عدم دسترسی تبدیل میشود؛قرضرابطه را ردیابی میکند.
✅ اکنون جریان منطقی به نظر میرسد— آنکتابخانهکشف و هماهنگی را مدیریت میکند.
🧩 خلاصه نهایی کارتهای CRC (سادهشده برای مبتدیان)
| کلاس | وظایف کلیدی | همکاران کلیدی |
|---|---|---|
| کتابخانه | کتابها، اعضا و قرضها را مدیریت میکند؛ امانتگیری/بازگرداندن را مدیریت میکند | کتاب، عضو، قرض |
| عضو | اطلاعات شخصی را میداند؛ امانتگیری/بازگرداندن را آغاز میکند | کتابخانه، قرض |
| کتاب | متادیتا را ذخیره میکند؛ دسترسی را ردیابی میکند | کتابخانه، قرض |
| قرض | تاریخچه امانتگیری را ردیابی میکند؛ تاریخهای انقضا را محاسبه میکند؛ وضعیت بازگرداندن را مدیریت میکند | عضو، کتاب، کتابخانه |
✅ اصل طراحی: هر کلاس داردیک هدف واضحو وظایفیکپارچه و به خوبی توزیعشده.
🌟 چرا کارتهای CRC به این اندازه خوب کار میکنند (نکات اولیه برای مبتدیان)
| مزیت | توضیح |
|---|---|
| طراحی مبتنی بر مسئولیت | مجبور میشود فکر کنید: «این کلاس چه چیزی میداند یا انجام میدهد؟» نه تنها ذخیره داده، بلکه چیزی دیگر. |
| کشف طبیعی کلاسهای گمشده | نقاشی نقشها شکافها را آشکار میکند (مثل کلاس گمشده کتابخانه) — نیازی به حدسزنی نیست. |
| بازخورد فوری از طریق بازی نقش | اگر جریان احساس نامطبوعی داشته باشد، میدانید مسئولیت در جای اشتباه است. |
| کممراسم و مشارکتی | ابزارهای پیچیده نیاز نیست — فقط کارتهای شاخص، نوتهای چسبنده یا یک تابلوی سفید. عالی برای تیمها. |
| پل بین نیازها و کد | داستانهای کاربر را به تعاملات واقعی کلاسها تبدیل میکند. |
🛠️ نکات سریع برای جلسه اول CRC
-
از کارتهای فیزیکی استفاده کنید (کارتهای 3×5 یا نوتهای چسبنده) — جذابتر است.
-
یک کلاس در هر کارت — ساده نگه دارید.
-
نوشتن بزرگ و خوانا — دیگران باید آن را به راحتی بخوانند.
-
بازی نقش را به صورت صوتی انجام دهید — کارتها را مانند اشیاء واقعی به هم بدهید.
-
با 3 تا 6 سناریوی اصلی شروع کنید (مثلاً امانت گرفتن، بازگرداندن، جستجو).
-
به دستیابی به کامل بودن توجه نکنید — هدف این است بازنویسی، نه یک طراحی نهایی. به مرور بهبود بخشید.
-
از نامهای ساده و مخصوص حوزه استفاده کنید — از اصطلاحات فنی اجتناب کنید. اگر تیم شما موافق باشد، از «عضو» به جای «مشتری» استفاده کنید.
-
همه را به مشارکت دعوت کنید — حتی افراد غیربرنامهنویس میتوانند به شناسایی مسئولیتهای گمشده کمک کنند.
-
بعداً یک نمودار کلاس ساده رسم کنید — برای دیداری کردن روابط و تأیید یکپارچگی.
-
آن را سرگرمکننده نگه دارید — آن را مانند یک بازی در نظر بگیرید. هرچه تیم شما پر انرژیتر باشد، نتایج بهتری خواهید داشت.
🔄 خودتان امتحان کنید: حوزههای بعدی برای بررسی
پس از آنکه سیستم کتابخانه را به خوبی یاد گرفتید، سعی کنید کارتهای CRC را به حوزههای دیگری که برای شروعکنندگان مناسب هستند، اعمال کنید:
☕ سیستم سفارش کافه
-
کلاسها:
مشتری,سفارش,آیتم منو,باریستا,صندوق کاشی -
سناریوها: سفارش دادن → افزودن نوشیدنی → اعمال تخفیف → پرداخت → چاپ رسید
🪙 ماشین فروش اتوماتیک
-
کلاسها:
ماشین فروش اتوماتیک,محصول,سکه,ماشین توزیع کننده,ماشین محاسبه پول اضافه -
سناریوها: وارد کردن سکه → انتخاب کالا → توزیع کالا → بازگرداندن وجه
🎮 بازی سوال و جواب
-
کلاسها:
مسابقه,سوال,بازیکن,ردیاب نمره,جلسه بازی -
سناریوها: شروع مسابقه → پاسخ به سوال → بررسی صحت پاسخ → نمایش نمره نهایی
🚗 گاراژ پارکینگ
-
کلاسها:
گاراژ,ماشین,محل پارکینگ,بلیط,دریچه -
سناریوها: ورود به گاراژ → پارک خودرو → خروج → پرداخت هزینه → دریافت بلیط
هر یک از این سیستمها بر اساس اصول یکسانی ساخته میشوند:
-
شناسایی اسمها → اختصاص مسئولیتها → بازی نقش → بهبود → تکرار.
📌 نکات نهایی: کارتهای CRC بیش از یک تکنیک هستند — اینها یک دیدگاه ذهنی هستند
توانایی واقعی کارتهای CRC در خود کارتها نیست — بلکه در مکالمه که ایجاد میکنند.
وقتی کارتی مینویسی و میگویی، «کی این کار را انجام میدهد؟» یا «کی باید با او صحبت کند؟»، شما از همین حالا به شیءگرا فکر میکنید.
🔥 نکته حرفهای: از کارتهای CRC در برنامهریزی اسپرینت، فعالیتهای فنی یا حتی در مصاحبهها برای نشان دادن تفکر طراحی خود استفاده کنید.
اینها فقط برای توسعهدهندگان نیستند — اینها برای هر کسی که در ساخت نرمافزار شرکت میکنند: مدیران محصول، طراحان، آزمونکنندگان و دانشآموزان.
📎 میخواهید بیشتر؟
👉 یک الگوی قابل چاپ از کارت CRC دانلود کنید (PDF یا دیجیتال) برای استفاده در کارگاه بعدی خود.
👉 یک جلسه زنده CRC را امتحان کنید با یک همکار — نقشها را تخصیص دهید: «شما عضو هستید»، «شما کتاب هستید» و غیره.
👉 نتایج خود را به اشتراک بگذارید — کارتهای خود را در شبکههای اجتماعی منتشر کنید با برچسب #CRCcards یا #OODesignJourney.
🏁 نتیجهگیری
این سیستم امانت کتاب کتابخانهیکی از کلاسیکترین و مؤثرترین مثالهای کارت CRC است — نه به این دلیل که پیچیده است، بلکه به این دلیل کهساده، قابل درک و برجسته است.
با دنبال کردن فقطپنج مرحله— طراحی مفهومی، ایجاد کارت، بازی نقش، بهبود و تکرار — میتوانید:
-
کلاسها را به طور طبیعی کشف کنید
-
مسئولیتها را به طور واضح تخصیص دهید
-
نقایص طراحی را به موقع شناسایی کنید
-
مدل ذهنی مشترکی به عنوان یک تیم بسازید
و بهترین نکته؟ نیازی به این نیست که یک توسعهدهنده ارشد باشید تا این کار را انجام دهید.
فقط نیاز دارید به شهامت کنجکاوی، چند کارت و تمایل به بازی کردن.
✅ حالا نوبت شماست: یک دسته نوتپد چسبنده بگیرید، یک سیستم ساده انتخاب کنید (مثل یک کافه یا ماشین فروش اتوماتیک) و روش CRC را امتحان کنید.
📌 به یاد داشته باشید: طراحی خوب درباره نوشتن کد کامل نیست — بلکه درباره پرسیدن سوالات درست است.
و با کارتهای CRC، شما قبلاً این سوالات را میپرسید.
📌 بونوس: الگوی قابل چاپ کارت CRC (نسخه متنی)
┌────────────────────┐
│ [نام کلاس] │
├────────────────────┤
│ مسئولیتها: │
│ - │
│ - │
│ - │
├────────────────────┤
│ همکاران: │
│ - │
│ - │
└────────────────────┘
این را روی کارتهای 3×5 چاپ کنید یا از آن در ابزارهای دیجیتالی مانند مایرو، فیگما یا گوگل اسلاید استفاده کنید.
📚 مرحله بعدی؟
آیا میخواهید راهنمای کامل سیستمسیستم سفارش کافهبا همان سبک CRC؟
👉 فقط کافی است کلمه را بگویید — من به شما مطالعه مورد بعدی را به صورت گام به گام، با کارتها، سناریوها و بازی نقش ارسال میکنم!
طراحی خوش! 🎮🧩💻
- چگونه کارتهای CRC را در Visual Paradigm رسم کنیم: این راهنما مرحله به مرحله دستورالعملهایی برای ایجاد کارتهای CRC با استفاده از ابزارهای اختصاصی نمودارسازی نرمافزار ارائه میکند.
- درک نمودارهای کارت CRC در Visual Paradigm: مروری که توضیح میدهد این نمودارها چگونه برای مدلسازی سیستمهای شیگرا و تعاملات آنها استفاده میشوند.
- چگونه یک نمودار کارت CRC در Visual Paradigm ایجاد کنیم: یک آموزش جامع که در گروه جامعه پیدا شده و شامل ایجاد و شخصیسازی نمودارهای CRC میشود.
- معرفی نمودارهای CRC در Visual Paradigm: راهنمای جامعی که بر استفاده از نمودارهای CRC برای طراحی شیگرا و مدلسازی سیستمهای گسترده تمرکز دارد.
- تولید کارتهای CRC از نمودارهای کلاس: این بحث جامعه روشهایی را بررسی میکند که در آن از نمودارهای کلاس موجود برای تولید خودکار کارتها از طریق مهندسی معکوس استفاده میشود.
- همگامسازی کارتهای CRC با نمودارهای کلاس: منبع فنیای که درباره مدلسازی دوطرفه صحبت میکند تا اطمینان از یکدستی طراحی بین کارتها و مدلهای کلاس حاصل شود.
- معرفی نمودارهای کارت CRC (راهنمای PDF): منبع فنی قابل دانلود که مفاهیم اصلی و کاربردهای کارتهای CRC در تحلیل سیستم را توضیح میدهد.
- برقراری ارتباط بین کارتهای CRC و نمودارهای کلاس: این مقاله تکنیکهایی را برجسته میکند که برای حفظ ردیابی و ارتباط بین سطوح مختلف مدلسازی استفاده میشوند.
- الگوی کارت CRC در گالری Visual Paradigm: منبعی که شامل الگوی قابل دانلودی است که برای پشتیبانی از طراحی شیگرا در مراحل اولیه طراحی طراحی شده است.
- انتقال کارتهای CRC بین نمودارها: راهنماهایی که نحوه انتقال کارتها بین نمودارهای مختلف را با حفظ یکدستی دادهها توضیح میدهد.
This post is also available in Deutsch, English, Español, Français, English, Bahasa Indonesia, 日本語, Polski and Portuguese.









