نمونهٔ لاکپشت چیست؟ شیئی ساختهشده از کتابخانهٔ turtle برای اجرای دستورهای رسم
نمونهٔ لاکپشت؛ از تعریف تا حرکت
در زبان برنامهنویسی پایتون، کتابخانهٔ ترتل ابزاری است برای کشیدن شکلهای هندسی و یادگیری مفاهیم برنامهنویسی بهصورت دیداری. اما خودِ ترتل یک «کلاس» است، یعنی یک طرح یا نقشهٔ کلی که میگوید یک لاکپشت چه ویژگیهایی دارد و چه کارهایی میتواند انجام دهد. برای اینکه بتوانیم از آن استفاده کنیم، باید یک «نمونه» یا «شیء» از آن کلاس بسازیم. این نمونه، همان لاکپشت مجازی ما روی صفحه است که با دستورها حرکت میکند.
برای ساخت یک نمونهٔ لاکپشت، از دستور turtle.Turtle() استفاده میکنیم. این دستور یک شیء جدید از نوع ترتل میسازد و آن را در یک متغیر ذخیره میکنیم. مثلاً با نوشتن لاکپشت_من = turtle.Turtle()، یک نمونهٔ جدید به نام «لاکپشت_من» میسازیم. حالا این نمونه میتواند دستورهایی مانند لاکپشت_من.forward(100) را اجرا کند که یعنی ۱۰۰ واحد به جلو برود، یا لاکپشت_من.right(90) که یعنی ۹۰ درجه به راست بچرخد.
هر نمونهٔ ترتل ویژگیهای جداگانهای دارد؛ مثلاً رنگ، اندازهٔ قلم، سرعت حرکت و موقعیت روی صفحه. وقتی دو نمونهٔ متفاوت بسازیم، هرکدام میتوانند رنگ یا مکان متفاوتی داشته باشند و مستقل از هم حرکت کنند. این موضوع به ما امکان میدهد تا چند شکل را همزمان و بدون تداخل با هم بکشیم.
برای درک بهتر تفاوت کلاس و نمونه، میتوانیم به یک کارخانهٔ تولید خودرو فکر کنیم. نقشهٔ خودرو (کلاس) مشخص میکند که خودرو چه چرخهایی دارد، چه موتوری، و چه امکاناتی. اما خودِ خودرویی که از خط تولید خارج میشود، یک نمونه است که میتوانیم با آن رانندگی کنیم. هر خودرو نمونهای جداگانه است با شمارهٔ شاسی، رنگ و وضعیت متفاوت، درست مثل هر نمونهٔ ترتل که موقعیت و رنگ مخصوص خودش را دارد.
چند نمونه، چند لاکپشت همزمان
یکی از جذابیتهای کار با نمونههای ترتل، امکان ساخت چند لاکپشت همزمان است. میتوانیم دو یا چند نمونه بسازیم و هرکدام را به یک سمت بفرستیم تا شکلهای مختلفی بکشند. این کار نهتنها جذابیت بیشتری دارد، بلکه به ما کمک میکند تا مفهوم «همزمانی» و «استقلال اشیا» را در برنامهنویسی بهتر بفهمیم.
فرض کنید میخواهیم یک مربع و یک مثلث همزمان روی صفحه رسم کنیم. به جای اینکه یکی را بعد از دیگری بکشیم، دو نمونه میسازیم؛ یکی با رنگ آبی و دیگری با رنگ قرمز. نمونهٔ اول دستورهای رسم مربع را اجرا میکند و نمونهٔ دوم همزمان دستورهای رسم مثلث را. اینگونه میبینیم که هر نمونه کاملاً مستقل از دیگری رفتار میکند و تغییرات یکی روی دیگری تأثیری ندارد.
| ویژگی | نمونهٔ اول (آبی) | نمونهٔ دوم (قرمز) |
|---|---|---|
| رنگ | آبی | قرمز |
| موقعیت شروع | مرکز صفحه | (100- , 100-) |
| شکل رسمشده | مربع | مثلث |
| سرعت | آهسته | تند |
برای ساخت چند نمونه، کافی است هر بار یک نمونه با turtle.Turtle() بسازیم و آن را در متغیر جداگانهای ذخیره کنیم. سپس هر متغیر را بهطور مستقل کنترل میکنیم. این کار به ما نشان میدهد که در برنامهنویسی شیگرا، هر نمونه «هویت» خودش را دارد و میتواند وظایف متفاوتی را انجام دهد.
پرسش و پاسخهای چالشی دربارهٔ نمونهٔ لاکپشت
پاسخ: خیر، خودِ کتابخانهٔ ترتل فقط ابزارها و کلاسها را در اختیار ما میگذارد، اما برای رسم نیاز به یک نمونهٔ فعال داریم. اگر فقط
import turtle را بنویسیم، هیچ لاکپشتی روی صفحه ظاهر نمیشود. نمونه مثل یک خودروی واقعی است که باید آن را روشن کنیم تا حرکت کند.
پاسخ: بله، هر نمونه میتواند رنگ خودش را داشته باشد. اگر هر دو را به یک رنگ تنظیم کنید، شبیه به هم میشوند، اما همچنان مستقل هستند و تغییر رنگ یکی روی دیگری اثر نمیگذارد. این استقلال یکی از مزیتهای اصلی استفاده از نمونههاست.
پاسخ: نمونه تا وقتی که برنامه در حال اجراست و متغیر مربوط به آن وجود دارد، روی صفحه باقی میماند. با دستورهایی مثل
hideturtle میتوانیم آن را مخفی کنیم، اما همچنان در حافظه وجود دارد. برای حذف کامل، باید برنامه را ببندیم یا متغیر را حذف کنیم.
turtle.shape چیست؟پاسخ:
turtle.shape یک دستور کلی است که شکل ظاهری لاکپشت را تغییر میدهد (مثلاً از فلش به دایره)، در حالی که نمونهٔ ترتل خودِ شیء است که میتوانیم به آن دستور بدهیم. نمونه دارای موقعیت، رنگ و جهت است؛ اما shape فقط یکی از ویژگیهای ظاهری آن را تنظیم میکند.