مقایسه OOP در پایتان و جاوا

پایتان به عنوان یک زبان همه کاره از شئ گرایی پشتیبانی میکنه.مقدمهزبان پایتان مثل بسیاری دیگه از زبان ها از شئ گرایی پشتیبانی میکنه. تقریبا هر چیزی تو پایتان یک Object حساب میشه. هر چند که در مقایسه با زبان هایی مثل Java این شی گرایی اون قدرا هم ملموس نیست. تو این مقاله میخایم به بررسی تفاوت ها و شباهت های شئ گرایی در پایتان و جاوا بپردازیم. به صورت کلی OOP در پایتان ساده و سبک تره. این اصلا به معنی بی دقت بودن پایتان نیست بلکه به معنی هوشمند تر بودن پایتانه. منظور از OOP (Object Oriented Programming) همون شئ گرایی هست.اسم فایلتو زبان جاوا اسم فایلی که کلاس در اون اعلان شده باید با اسم کلاس یکی باشه. ولی تو پایتان اصلا لزومی نداره این طوری باشه. مثلا تو کد زیر کلاس Car رو داخل فایلی به اسم carclass.py ذخیره کردیم.# carclass.py class Car: def __init__(self, color): self.color = colorو به این صورت هم ازش تو فایل های دیگه استفاده می کنیم:# test.py import carclass my_car = carclass.Car(&quotred&quot) print(my_car.color)حواست باشه که اسم فایل ات برابر با اسم کتاب خونه های خود پایتان نباشه مثلا اسم فایل ات رو نذار math چون math اسم یکی از کتاب خونه های اصلی خود پایتانه.Constructor Methodبر خلاف جاوا که اسم متد سازنده هر کلاسی برابر با اسم کلاسش هست توی پایتان متد __init__ رو داریم که همون کار رو انجام میده. class Car: def __init__(self, color): self.color = colorهمون طوری که تا الان متوجه شدی دیگه مثل جاوا کلید واژه هایی مثل public و private و static و امثالهم رو نداریم توی پایتان. البته پایتان استراتژی های خاص خودش رو برای private کردن یا static کردن داره که در ادامه بررسی می کنیم.Attributes Declarationبر خلاف جاوا که Attribute ها (اسامی دیگه ای هم دارن مثل field, property و ...) رو داخل خود کلاس اعلان می کردیم و باید سطح دسترسی و جنس و ایناشون رو هم مشخص می کردیم پایتان در این مورد خیلی راحت تر می اندیشه! خیلی راحت. توی همون متد __init__ هر چیزی رو که مقدار دادی بهش انگاری اعلانش هم کردی!class Car: def __init__(self, color, brand): self.color = color self.brand = brandهمون طوری که دیدی به جای کلید واژه this که تو جاوا داشتیم این جا self رو داریم. البته فرقی نداره اسمش رو چی بذاری حتی میتونی همون this هم بذاری. مهم اینه که اولین پارامتر متد هات باشه.Static Attributesتو جاوا این قدر کلیدواژه های اضافی بود که آدم گیج میشد. مثلا واسه یک فایل hello world ساده باید public static void main راه مینداختیم! تو رو خدا یادته؟! این جا تو پایتان اگه لازم می بینی یک attribute ای static باشه فقط کافیه خارج از __init__ اعلانش کنی و بهش مقدار بدی! تموم شد رفت!class Car: a_static_attribute = 5 def __init__(self, brand): self.brand = brandو نکته جالب این جاست که برای هر object ای که از روی کلاسش ساختی می تونی مقدار static attribute‌ ها رو عوض کنی.Object Specific Attributesاین امکان در پایتان وجود داره که بعد از نمونه برداری object از روی کلاس متناظرش، بهش attribute ها مختص همون object رو اضافه کنی. یعنی بدون این که توی کلاس این attribute ها اصلا پیش بینی شده باشن!class Car: def __init__(self, brand): self.brand = brand my_car = Car(&quotBenz&quot) my_car.production = 2002Private membersاگه دوست داری یک attribute یا یک method خصوصی (private) داشته باشی (یعنی این که فقط داخل همون کلاس بشه ازش استفاده کرد) نیازی به کلیدواژه های private نیست! کافیه قبل اسمشون __ بیاری (double underscore):class Car: def __init__(self, color, brand): self.color = color self.brand = brand self.__serial = 3467البته پایتان چون مهربون عه یک تکنیکی درست کرده که باز هم بشه به اعضای private دسترسی داشت به اسم name mangling. می تونی در خصوصش مطالعه کنی.Protected membersتو پایتان چون به سخت گیری Java کار نمی کنیم اگه واقعا بخایم یک عضوی از کلاس رو protected کنیم باید از property decorator استفاده کنیم. ولی به عنوان یک رسم (به این چیزا میگن convention یعنی رسمی که جا افتاده باشه) می تونیم اعضایی که توقع داریم به صورت protected در نظرشون بگیریم رو قبل اسمشون یک underscore قرار بدیم. (هر چند که با این کار واقعا protected نمیشن)نتیجه گیریتو این مقاله اصلی ترین تفاوت ها و شباهات های OOP در پایتان و جاوا رو بررسی کردیم. هر وقت صحبت از شی گرایی میشه Java حرف اول رو میزنه. در مقایسه، پایتان به صورت هوشمندانه تری تونسته OOP رو پیاده سازی کنه. تو پایتان خبری از کلیدواژه هایی مثل public, private, protected نیست. به طور کلی میشه گفت: شئ گرایی در پایتان انعطاف پذیر تر، راحت تر و هوشمندانه تره.