در این مقاله قصد داریم شما را با مفهوم و ماهیت شیگرایی، کاربرد آن در علم پایتون و اصول برنامه نویسی آن آشنا کنیم. اگر در حال خواندن این مطلب هستید احتمالا با مفهوم شیگرایی آشنایی کافی ندارید. پس در ابتدا مروری کلی بر روی مفاهیم و ماهیت این مدل از برنامه نویسی میکنیم و سپس به کاربرد آن در پایتون میپردازیم. چون پایتون از ابتدای پیدایش یکی از زبانهای شیگرا بوده است.
شی گرا یک مدل از برنامه نویسی است که در آن به جای تعریف توابع و منطق از اشیا و داده ها استفاده می شود. در این مدل از برنامه نویسی هر شی را می توان به عنوان یک مدل داده ای در نظر گرفت که دارای خصوصیات و ویژگی های منحصر به فرد میباشد. برای مثال اگر انسانها را یک شی در برنامه نویسی شی گرا تصور کنیم دارای خصوصیات منحصر به فردی مانند نام، نام خانوادگی، شماره تلفن، آدرس و… است که هرکدام از این ها یک فیلد اطلاعاتی در برنامه نویسی محسوب می شوند.
برنامه نویسی شیگرا نسبت به برنامه نویسی های دیگر به علت انعطاف و کارایی بالا بین برنامهنویسان از محبوبیت خاصی برخوردار است.
دربرنامهنویسی شیگرا، اولین گام برای برنامه نویس شناسایی اشیایی است که او می خواهد در طول برنامه آنها را دستکاری کند. هنگامی که یک شی شناخته شد کلاسی از اشیا برای آن ساخته می شود که شامل انواع داده هایی است که می تواند این توالی منطقی را دستکاری کند می شود.
بنابراین برنامه نویسی شی گرا بر روی اشیایی که توسعه دهندگان می توانند دستکاری کنند متمرکز می شود نه بر روی منطق آنها . این رویکرد در برنامه نویسی برای برنامه های بزرگ و پیچیده بسیار کاربردی است زیرا می توانیم یک پروژه بزرگ را به بخش های کوچکتر تقسیم کرده و به صورت گروهی روی یک پروژه پیچیده و بزرگ کار کرد.
اصول برنامه نویسی شی گرا:
برنامه نویسی شی گرا بر اساس چهارمورد که به شرح آن پرداخته میشود، شکل گرفته است:
۱) کپسوله سازی ( Encapsulation )
ویژگی های مربوط به هر شی در محدوده و کلاس مربوط به خود شی قرار می گیرد. اشیا دیگر قدرت دسترسی و ایجاد تغییرات در داده های کلاس را ندارند و فقط می توانند به لیستی از توابع کلاس که بصورت عمومی تعریف شده اند دسترسی داشته باشند. این ویژگی در برنامه نویسی شی گرا باعث بالا رفتن امنیت و جلوگیری از فساد ناخواسته اطلاعات شده است.
۲) انتزاع ( abstraction):
با خاصیت abstraction، در برنامه نویسی شی گرا در بدنه اصلی هیچ کدی نوشته نمی شود و به همین دلیل نمی توانیم مستقیما از روی کلاس های انتزاعی اشیا را بسازیم. مفهوم انتزاعی چون کد مشخصی ندارد به برنامه نویسان کمک می کند تا به راحتی بتوانند تغییرات و افزودنی های خود را در طول زمان انجام دهند. برای مثال اگر در برنامه ای متد چاپ داشته باشیم می توانیم بدنه این متد را تعریف نکنیم. سپس کلاس های فرزند از این متد بسازیم و کدهای بدنه را در این کلاس های فرزند تعریف کنیم و به راحتی از آنها شی بسازیم.
۳) ارث بری و وراثت (Inheritance):
در مفهوم وراثت میتوانیم برای یک شی اشیا و روابط منحصر به فردی را پیاده سازی کنیم اگر این ویژگی ها در شی دیگری تکراری بود به راحتی می تواند از کلاس بالاتر خود ویژگی های مشترک را ارث بری کند بدون اینکه به خاصیت منحصر به فرد هردو لطمه ای وارد شود. این ویژگی در برنامه نویسی شی گرا، یک تحلیل داده دقیق تر را به برنامه نویس ارائه می کند و زمان توسعه را کاهش داده و سطح دقت را بالاتر می برد. برای مثال: اگر انسان را به عنوان یک شی در نظر بگیریم پدر خانواده ممکن است موی رنگی و چشم رنگی داشته باشد این ویژگی می تواند به فرزندان او تعلق بگیرد ضمن اینکه برای هرکدام یک ویژگی منحصر به فرد در نظر گرفته می شود.
۴) چندریختی(Polymorphism):
با استفاده از مفهوم چند ریختی به راحتی می توانیم یک متد عمومی تعریف کرده که هربار ورودی های متفاوتی داشته باشد. برای مثال اگر انسانها را اشیا در نظر بگیریم همه آنها غذا می خورند پس می توانیم یک متد به نام FOOD برای آنها در نظر گرفت اما باید به این نکته دقت داشت که همه افراد غذاهای یکسانی نمی خورند. بنابراین متد FOOD می تواند هربار و برای هرکدام از افراد با ورودی های متفاوتی استفاده شود.
این چهار اصل از اصول برنامه نویسی شی گرا هستند که در این مدل از برنامه نویسی به کار برده می شوند. بنابراین میتوان گفت که با برنامه نویسی شی گرا کدنویسی بسیار قابل انعطاف و سازمان دهی شده میشود. به همین دلیل برنامه نویسان این مدل را به مدل های قدیمی ترجیح می دهند. در ادامه مطلب چند زبان برنامه نویسی که بر پایه اصول و مفاهیم شی گرایی شکل گرفته و از مفهوم شی گرایی استفاده می کنند را فقط نام میبریم.
برخی اصطلاحات مهم
کلاس: نمونه اولیه ای است که توسط برنامه نویس نوشته میشود و شامل صفت ها، متدهایی است که هرکدام کار خاصی را انجام میدهد.
متغیر کلاس: متغیری است که در میان تمام اعضای کلاس مشترک است. متغیر کلاس در داخل کلاس و خارج از متدهای کلاس تعریف میشود.
بارگزاری تابع: اختصاص دادن بیش از یک رفتار به یک تابع را گویند. یعنی از یک تابع چند تعریف موجود است و بر اساس پارامترهایی که برای آن ارسال میشود یکی از رفتارها انتخاب میشود.
وراثت: انتقال خصوصیات یک کلاس به کلاس های دیگر گویند.
نمونه: شئ مخصوص هر کلاس را گویند. برای مثال، یک شی به نام obj که به کلاس circle تعلق دارد نمونه ای از کلاس circle است.
نمونه سازی (instantiation): ساخت شئ از یک کلاس را گویند.
متد: نوع خاصی از توابع هستند که در کلاس تعریف میشوند.
شئ: نمونه ای یکتا از یک ساختار داده ای که توسط کلاس آن تعریف شده است.
بارگزاری عملگرها: اختصاص بیش از یک رفتار به یک عملگر خاص است.
شیگرایی در پایتون
هر کلاس پایتون دارای صفت های داخلی و از قبل تعریف شده ایست که همانند سایر صفت ها و متدها با عملگر نقطه پس از نام شئ قابل دست یابی اند. استفاده از این متدها در بعضی موارد میتواند مفید باشد. این صفت ها عبارت اند از :
dict:
یک دیکشنری حاوی فضای نام های موجود در کلاس را برمیگرداند.
doc:
اگر در کلاس مستنداتی را تعریف کرده باشید متن آن را برمیگرداند، اگر تعریف نکرده باشید چیزی را برنمیگرداند.
Name:
نام کلاس را برمیگراند.
module:
نام ماژولی که کلاس در آن تعریف شده است را برمیگرداند که در حالت تعاملی و عادی مقدار main را برمیگرداند.
bases:
یک تاپل شامل کلاس هایی که از آن ها ارث بری کرده است را برمیگرداند. به عبارتی نام کلاس های پایه را برمیگرداند.
پایتون شئ هایی که دیگر نیازی به آن ها نیست را به طور خودکار پاک میکند تا مقدار حافظه اشغال شده توسط آن آزاد شود. پردازشی که طی آن به طور مداوم بلاک های حافظه ای که دیگر در حال استفاده نیستند را اصلاح میکند، اصطلاحا جمع آوری زباله (Garbage Collection) گویند. این پردازش در طول اجرای برنامه در حال اجراست و هنگامی که ارجاعی به شئ وجود نداشته باشد، trigger آن فعال میشود.
وقتی به شئ نام جدید یا یک ظرف جدید(tuple,list,dictionary) میدهیم تعداد ارجاع های مربوط به آن شئ افزایش میابد. وقتی که شئ را با متد del پاک میکنیم یا اینکه ارجاع آن به خارج از محدوده باشد از تعداد ارجاع های شئ مربوطه کاسته خواهد شد. وقتی که تعداد ارجاع ها به صفر برسد پایتون به طور خودکار آن شئ را از حافظه پاک میکند.
جمعبندی
در این مقاله مفهوم اولیه شیگرایی به زبانی ساده توضیح دادیم. سپس با اصول برنامه نویسی آن و انواع زبانهای شیگرایی نیز آشنا شدیم. همچنین در مورد اصطلاحات مهم در علم برنامه نویسی شی گرا و مفهوم آن در پایتون نیز صحبت کردیم. امیدوارم با خواندن این مطلب یک زمینه اولیه از مفهوم زبان شیگرایی در ذهنتان ایجاد شده باشد.