آشنایی مقدماتی با مفهوم شیء گرایی در زبان برنامه نویسی پایتون


پیش از آن که شروع به یادگیری سینتکس زبان برنامه نویسی پایتون کنیم، لازم است با بعضی مفاهیم بسیار مهم در برنامه نویسی آشنا شویم که یکی از این مفاهیم مهم که الگوی اصلی تفکر ما در برنامه نویسی به زبان پایتون را شکل خواهد داد مسئله ی شیء گرایی است. در این آموزش سعی داریم با ذکر مثال‌هایی ساده و کاربردی، با اصول این الگوی برنامه نویسی آشنا شویم.

در دهه ی 1960 میلادی، برنامه نویسان به این نتیجه رسیدند که برای استفاده از سرعت و قدرت محاسباتی کامپیوترها در حل مسائل پیچیده ی دنیای واقعی، لازم است اجزای محیطی که رویدادها در آن اتفاق می افتند را به صورت مجازی برای کامپیوترها شبیه سازی کنند. به عبارت دیگر، برای هر چیزی که در دنیای واقعی وجود دارد مشابهی در محیط مجازی کامپیوتر تعریف کنند که نماینده ی آن چیز باشد. این نماینده باید آن قدر کلی می بود که به هیچ چیز خاصی محدود نمی شد و برای اشاره به تمام چیزهایی که در دنیای واقعی وجود داشتند مورد استفاده قرار می گرفت. در نهایت برنامه نویسان به این نتیجه رسیدند که در ساده ترین شکل ممکن نماینده ی هر چیز را در دنیای مجازی Object یا شیء بنامند و شیوه ی برنامه نویسی بر اساس این رویکرد Object Oriented Programming یا برنامه نویسی شیء گرا نامیده شد.

اولین زبان برنامه نویسی که بر اساس این الگو طراحی و ساخته شد Simula-67 بود که نام آن برگرفته از واژه ی Simulation به معنی شبیه سازی گرفته شده بود که برای شبیه سازی اجرای عملیات بانکی مورد استفاده قرار می گرفت. پس از آن، زبان Smalltalk طراحی شد که به عنوان اولین زبان برنامه نویسی موفق شیء گرا به حساب می آید.

برنامه ای که با یک زبان شیء گرا نوشته می شود، مجموعه ای از اشیاء را در بر می‌گیرد که هر یک از این اشیاء خصوصیات و رفتارهای خاص خود را دارند. با توجه به این خصوصیات و رفتارهای خاص، ما به عنوان برنامه نویس می توانیم کارهای خاصی را برای هر شیء در نظر بگیریم. به علاوه این که مانند دنیای واقعی، اشیاء مختلف در یک برنامه‌ای که با یک زبان برنامه نویسی شیء گرا نوشته شده باشند می توانند با هم تعامل داشته باشند.

یک مثال ساده از اشیاء می تواند افراد باشد. هر فرد نامی دارد که به عنوان هویت یا Identity اش تنها مخصوص خود او است. این فرد خصوصیات متفاوتی می تواند داشته باشد، به طور مثال جنسیت، سن، ملیت، و ... که در اصطلاح برنامه نویسی شیء گرا به آن ها Attribute یا خصوصیت می‌گوییم. هم چنین هر فرد می تواند اعمال خاصی را انجام دهد، مثلاً راه برود، غذا بخورد، صحبت کند، رانندگی کند، و ... که به این اعمال Behaviour یا رفتار می گوییم.

فرض کنید می خواهید برنامه ای بنویسید که شبیه ساز رانندگی فردی باشد که ماشین خود را از نقطه ی الف به نقطه ی ب می راند. این برنامه در ساده ترین حالت شامل دو شیء است: راننده و ماشین. برای شروع باید این دو شیء را برای کامپیوتر تعریف کنیم به طوری که راننده بداند چطور رانندگی کند، مثلاً چطور ماشین را روشن کند، با چه سرعتی براند، چطور به ماشین فرمان توقف بدهد و …

به همین ترتیب ماشین نیز باید بداند که چه خصوصیاتی باید داشته باشد تا بتواند با دستورات راننده شروع به حرکت کند، مسیر را بپیماید و متوقف شود. بنابراین اکنون باید یک قدم به عقب برگردیم و ببینیم چطور می توانیم اشیاء را تعریف کنیم.

بر اساس آن چه گفتیم، برای تعریف هر شیء باید خصوصیت و نحوه ی عملکرد و رفتار آن شیء را برای کامپیوتر تعریف کنیم. مسئله ای که برای برنامه نویسان مطرح شد این بود که برخی از اشیاء در برنامه خصوصیات و رفتارهای مشترکی داشتند، به طور مثال در شبیه سازی یک مسابقه ی رانندگی تعداد زیادی راننده و تعداد زیادی ماشین وجود داشت. اگر چه این اشیاء می توانند تفاوت هایی با هم داشته باشند اما همه ی راننده ها می دانند چطور باید رانندگی کنند و همه ی ماشین ها هم اشتراکاتی دارند مثلاً همه خصوصیتی دارند که مقدار سرعت آن ها را تعیین می کند، یا می دانند اگر دستوری مبنی بر توقف از طرف راننده دریافت کردند چه طور بایستند. این شباهت ها، برنامه نویسان را به سمتی هدایت کرد تا برای ساخت اشیائی که مانند هم هستند یک طرح و نقشه کلی تعریف کنند و هر زمان نیاز بود شیئ با آن طرح در برنامه تعریف کنند یا به عبارتی یک نمونه -Instance- از آن طرح از پیش تعریف شده بسازند.

می توان گفت این طرح مثل یک فرم تکمیل مشخصات است که گزینه های از پیش تعیین شده ای مثل سن، جنس، تاریخ تولد، محل تولد، میزان تحصیلات، توانایی های ورزشی، مهارت های هنری، و غیره را دارا است و به هر فرد به عنوان یک نمونه داده می شود تا بر اساس هویت و توانایی های خود آن را تکمیل کند.

نکته
در برنامه نویسی شیء گرا به این طرح کلی که بر اساس آن نمونه سازی صورت می گیرد Class یا Type گفته می شود و هر شیء نوع خاصی دارد و یا به بیان دیگر به کلاس خاصی تعلق می گیرد.

ایده ی تعریف کلاس ها و استفاده از اشیاء در برنامه ها، کار برنامه نویسان را بسیار راحت تر از پیش کرد به طوری که پیچیدگی های زیاد مسائل و برنامه ها پشت سادگی مفاهیم اشیاء و کلاس ها پوشیده شد. مهم ترین مشخصه ی متمایز کننده ی یک کلاس از کلاس های دیگر، پیام هایی است که می توانیم در قالب کدهای برنامه به نمونه های آن کلاس ارسال کنیم و از آن ها بخواهیم کار خاصی را انجام دهند و این در حالی است که اشیائی با کلاس یکسان می توانند پیام های یکسانی هم دریافت کنند. جمع بندی کلی این مبحث را می توان در قالب این عبارت آورد که در برنامه‌های بزرگ و پیچیده ی نوشته شده به زبان پایتون، برای شبیه سازی مسائل دنیای واقعی تک تک اجزا آن برنامه را به صورت شیئ تعریف می کنیم که هویتی یکتا و منحصر به فرد دارند. با وجود این، شیء مد نظر ما به کلاسی از اشیاء تعلق دارد که خصوصیات و رفتار مشترکی دارند.

علاوه بر این، دانشجویانی که به دنبال مباحث بیشتری در ارتباط با شیء گرایی هستند خواهند توانست به فصل هفتم از دوره ی آموزش اصول برنامه نویسی که مرتبط با مباحث کلی شیء گرایی است مراجعه نمایند.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
a.r.j.f
a.r.j.f
پس فرق تابع با کلاس چیه؟
saeedx4
saeedx4
کلاس یک تمپلیت یا الگو هست که قراره از روی اون شی ساخته بشه حالا این شی می تونه دارای تابع باشه (مشخه رفتاری) و دارای صفت (مشخصه داده ای) باشه.
مثلا کلاس می تونه مثل نقشه ساختمان باشه شما یک نقشه ساختمان داری اما می تونی 1000 تا ساختمان از روی اون نقشه بسازی.
در برنامه نویسی هم فرض کنید شما کلاس دانش آموز روی داری که صفت (نام، نام خانوادگی، نام پدر و ...) رو داره و تابع های مثل (محاسبه معدل، نمایش دروس انتخاب شده و ... رو داره) حالا شما وقتی این الگو یا کلاس دانش آموز رو ساختید می تونید 1000 تا دانش آموز درست کنید که یکی اسم پارسا یکی اسم یزدان بعدی اسم میترا داشته باشه و الا آخر

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام
واقعا برای اولین بار احساس می کنم که تا حدی مفهوم شی گرایی رو فهمیدم
ممنون که اینقدر خوب توضیح می دید.
fparviz
fparviz
سلام. چرا نمی تونم نتایج رو بعد از جواب دادن به آزمون های پایانی هر بخش ببینم؟
محمدهادی
محمدهادی
گزینه ی مشاهده نتایج رو میزنی؟ :|

در پاسخ به

lark
lark
سلام
پیاده سازی کلاس ها کی آموزش داده میشه ؟
saeed
saeed
بهترین توضیح برا مفهوم شیء گرایی تشکر فراوان