بیژن حجازی
بیژن حجازی
خواندن ۴ دقیقه·۳ سال پیش

مقایسه 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 = 2002

Private 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 نیست. به طور کلی میشه گفت:

شئ گرایی در پایتان انعطاف پذیر تر، راحت تر و هوشمندانه تره.
برنامه نویسیشئ گراییجاواپایتون
سلام! نوشتن به منزله مطالعه «خود» هست. من بیشتر تو زمینه برنامه نویسی و روان شناسی مطلب میذارم. خوشحال میشم نظرات تون رو باهام در میون بذارین.
شاید از این پست‌ها خوشتان بیاید