نمونهسازی؛ الگویی برای ساخت اشیای تکراری در برنامه
کلاس و نمونه چه رابطهای با هم دارند؟
فرض کنید میخواهید برای دوستانتان کارت دعوت بسازید. اگر برای هر نفر یک کارت جداگانه و کاملاً متفاوت طراحی کنید، خیلی وقتگیر میشود. بهتر است یک طرح اصلی (قالب) درست کنید و بعد از روی آن، به تعداد لازم کارت چاپ کنید. در برنامهنویسی به این قالب اصلی «کلاس» و به هر کارت چاپشده، یک «نمونه» میگویند. کلاس فقط یک نقشه یا طرح است و تا وقتی از روی آن نمونه نسازیم، هیچ کاری انجام نمیدهد.
نمونهسازی یعنی ایجاد یک شیء واقعی از روی کلاس. هر نمونه، ویژگیهای خاص خودش را دارد. مثلاً اگر کلاس «دانشآموز» داشته باشیم، هر نمونه میتواند نام، کلاس و نمرات متفاوتی داشته باشد. کلاس به ما میگوید که هر دانشآموزی باید نام و نمره داشته باشد، اما مقدار آنها را خودمان هنگام ساخت نمونه تعیین میکنیم.
نمونهسازی در زندگی روزمرهٔ دانشآموزی
فرض کنید در مدرسه، قرار است برای هر دانشآموز یک کارنامهٔ مشابه چاپ شود. همهٔ کارنامهها ساختار یکسانی دارند؛ ستونهای درسها، نمرات و جای امضا. این ساختار، همان کلاس «کارنامه» است. حالا وقتی برای هر دانشآموز، نمرات واقعی را وارد میکنیم، در واقع یک نمونه از کلاس کارنامه ساختهایم. به این کار در برنامهنویسی «نمونهسازی» میگویند.
مثال دیگر، بازیهای رایانهای هستند. در یک بازی، ممکن است چندین دشمن با شکل و قدرت یکسان ظاهر شوند. برنامهنویس یک کلاس به نام «دشمن» مینویسد و سپس در هنگام اجرای بازی، از روی آن کلاس، به تعداد لازم نمونه میسازد. هر نمونه موقعیت و میزان سلامتی متفاوتی دارد، اما همه از یک الگو ساخته شدهاند.
| کلاس (طرح یا الگو) | نمونه (شیء ساختهشده) |
|---|---|
| فقط یک بار تعریف میشود. | میتواند بارها و بارها ساخته شود. |
| حافظه را اشغال نمیکند (تا وقتی نمونه نسازیم). | هر نمونه در حافظه جا میگیرد. |
| شامل تعریف ویژگیها و کارهایی است که نمونه میتواند انجام دهد. | دارای مقدارهای واقعی برای ویژگیهاست. |
پرسشهای چالشی دربارهٔ نمونهسازی
پاسخ: بله. کلاس فقط نوع ویژگیها را مشخص میکند، اما مقدار آنها را نه. مثلاً کلاس «کتاب» میگوید هر کتابی عنوان و نویسنده دارد، اما هر نمونه میتواند عنوان و نویسندهٔ متفاوتی داشته باشد.
پاسخ: خیر. هر نمونه مستقل از دیگر نمونههاست. تغییر در یک نمونه، فقط خود آن نمونه را تحت تأثیر قرار میدهد؛ مگر اینکه ویژگیهایی به اشتراک گذاشته شده باشند که در برنامهنویسی پیشرفتهتر مطرح میشود.
پاسخ: اگر برنامهای بسیار ساده باشد و فقط یک شیء از یک نوع نیاز داشته باشیم، ممکن است نمونهسازی ضروری نباشد. اما در بیشتر برنامهها، نمونهسازی به ما امکان میدهد کد را مرتبتر و قابلاستفادهتر بنویسیم.