برنامه نویسی شی گرا در پایتون همراه با کد
چکیده مقاله:
در این مطلب می خواهیم به بررسی کامل برنامه نویسی شی گرا در پایتون بپردازیم. بهتر است بدانید که برنامه نویسی شی گرا یک مفهوم اساسی در پایتون است که به توسعه دهندگان این امکان را می دهد که برنامه های مدولار، قابل نگهداری و مقیاس پذیر بسازند. با درک اصول اصلی برنامه نویسی شی گرا (کلاس ها، اشیاء، ارث بری، کپسوله سازی، چندریختی و انتزاع)، برنامه نویسان می توانند از تمام قابلیت های شی گرای پایتون برای طراحی راه حل های زیبا و کارآمد برای مسائل پیچیده استفاده کنند.
برنامه نویسی شی گرا روشی برای سازماندهی کد است که از اشیاء و کلاس ها برای نمایش موجودات و رفتارهای دنیای واقعی استفاده می کند. در برنامه نویسی شی گرا، شیء دارای ویژگی هایی است که داده های خاصی دارد و می تواند با استفاده از متدها اقداماتی را انجام دهد.
برنامه نویسی شی گرا در پایتون چیست؟
برنامه نویسی شی گرا یکی از پارادایم های مهم برنامه نویسی است که در آن، برنامه ها به جای استفاده از توابع و داده های مجزا، حول محور “اشیا” سازمان دهی می شوند. این اشیا ترکیبی از داده ها (ویژگی ها) و توابع (رفتارها) هستند که با یکدیگر مرتبط می باشند. زبان پایتون به عنوان یک زبان سطح بالا و همه منظوره، از برنامه نویسی شی گرا پشتیبانی کامل می کند و امکان ایجاد کلاس ها و اشیای قابل استفاده مجدد را برای توسعه دهندگان فراهم می نماید.
در پایتون، کلاس ها به عنوان قالب هایی برای ایجاد اشیا عمل می کنند. با تعریف یک کلاس، می توان خصوصیات و رفتارهای مشترک را مشخص کرد و سپس از این کلاس برای ایجاد اشیای متعدد استفاده نمود. این روش باعث می شود کدها خواناتر، قابل مدیریت تر و منعطف تر باشند. به عنوان مثال، می توان یک کلاس “ماشین” با ویژگی هایی مثل رنگ و مدل و رفتارهایی مثل روشن و خاموش شدن تعریف کرد و سپس از این کلاس برای ساخت اشیای مختلفی از نوع ماشین استفاده نمود.
مطلب پیشنهادی: برنامه نویسی شی گرا چیست؟
مفاهیم برنامه نویسی شی گرا در پایتون
- کلاس در پایتون
- اشیاء در پایتون
- چندریختی در پایتون
- کپسوله سازی در پایتون
- ارث بری در پایتون
- انتزاع داده در پایتون
کلاس در پایتون
کلاس مجموعه ای از اشیاء است. کلاس ها طرح هایی برای ایجاد اشیاء هستند. یک کلاس مجموعه ای از ویژگی ها و متدهایی را تعریف می کند که اشیاء ایجاد شده (نمونه ها) می توانند داشته باشند.
نکاتی در مورد کلاس های پایتون:
- کلاس ها با استفاده از کلمه کلیدی class ایجاد می شوند.
- ویژگی ها متغیرهایی هستند که به یک کلاس تعلق دارند.
- ویژگی ها همیشه عمومی هستند و می توان با استفاده از عملگر نقطه (.) به آنها دسترسی پیدا کرد. مثال: Myclass.Myattribute
ایجاد یک کلاس
در اینجا کلمه کلیدی class نشان می دهد که ما در حال ایجاد یک کلاس هستیم که پس از آن نام کلاس (در اینجا Dog) قرار می گیرد.
توضیح:
- class Dog: کلاسی به نام Dog تعریف می کند.
- species: ویژگی کلاس است که توسط تمام نمونه های کلاس به اشتراک گذاشته می شود.
- متد init: ویژگی های نام و سن را زمانی که یک شیء جدید ایجاد می شود، مقداردهی اولیه می کند.
توجه: برای اطلاعات بیشتر به کلاس های پایتون مراجعه کنید.
اشیاء در پایتون
یک شیء نمونه ای از یک کلاس است. این شیء یک پیاده سازی خاص از کلاس را نشان می دهد و داده های خودش را نگه می دارد.
یک شیء شامل موارد زیر است:
- وضعیت: که توسط ویژگی ها نشان داده می شود و خصوصیات یک شیء را منعکس می کند.
- رفتار: که توسط متدهای یک شیء نشان داده می شود و واکنش یک شیء به اشیاء دیگر را نشان می دهد.
- هویت: که به یک شیء نام منحصر به فردی می دهد و امکان تعامل آن با اشیاء دیگر را فراهم می کند.
ایجاد شیء
ایجاد یک شیء در پایتون به معنای ایجاد یک نمونه جدید از یک کلاس است. این فرایند به آن شیء سازی یا instantiation گفته می شود.
خروجی:
توضیح:
dog1 = Dog("Buddy", 3)
: شیء ای از کلاس Dog ایجاد می کند با نام “Buddy” و سن 3.dog1.name
: به ویژگی نمونه name از شیء dog1 دسترسی پیدا می کند.dog1.species
: به ویژگی کلاس species از شیء dog1 دسترسی پیدا می کند.
توجه: برای اطلاعات بیشتر به اشیاء پایتون مراجعه کنید.
پارامتر self
پارامتر self ارجاعی به نمونه فعلی کلاس است. این امکان را به ما می دهد تا به ویژگی ها و متدهای شیء دسترسی پیدا کنیم.
توضیح:
self.name
: به ویژگیname
شیء (dog1) که متد را فراخوانی کرده است، اشاره دارد.dog1.bark()
: متدbark
را برای شیءdog1
فراخوانی می کند.
توجه: برای اطلاعات بیشتر به self
در کلاس های پایتون مراجعه کنید.
متد init در پایتون
متد __init__
سازنده (constructor) در پایتون است که به طور خودکار هنگام ایجاد یک شیء جدید فراخوانی می شود. این متد ویژگی های کلاس را مقداردهی اولیه می کند.
خروجی:
توضیح:
__init__
: متد خاصی است که برای مقداردهی اولیه استفاده می شود.self.name
وself.age
: ویژگی های نمونه که در سازنده مقداردهی اولیه می شوند.
متغیرهای کلاس و نمونه
در پایتون، متغیرهای تعریف شده در یک کلاس می توانند متغیرهای کلاس یا متغیرهای نمونه باشند، و درک تفاوت بین این دو برای برنامه نویسی شی گرا اهمیت دارد.
متغیرهای کلاس
این متغیرها در سطح کلاس تعریف می شوند و بین تمام نمونه های کلاس به اشتراک گذاشته می شوند. این متغیرها در خارج از هر متدی در کلاس تعریف می شوند. همه اشیاء کلاس همان مقدار را برای متغیر کلاس دارند، مگر اینکه در یک شیء به طور خاص بازنویسی شوند.
متغیرهای نمونه
متغیرهای نمونه به هر نمونه (شیء) خاص از یک کلاس تعلق دارند. این متغیرها در داخل متد __init__
یا دیگر متدهای نمونه تعریف می شوند. هر شیء یک نسخه جداگانه از متغیرهای نمونه دارد که مستقل از سایر اشیاء است.
مثال متغیرهای کلاس و نمونه
خروجی:
توضیح:
- متغیر کلاس (species): بین تمام نمونه های کلاس به اشتراک گذاشته می شود. تغییر
Dog.species
بر تمام اشیاء تاثیر می گذارد، زیرا این متغیر متعلق به خود کلاس است. - متغیرهای نمونه (name، age): در متد
__init__
تعریف شده اند و برای هر نمونه منحصر به فرد هستند (برای مثال،dog1.name
وdog2.name
متفاوت هستند). - دسترسی به متغیرها: متغیرهای کلاس را می توان هم از طریق نام کلاس (
Dog.species
) و هم از طریق شیء (dog1.species
) دسترسی داشت. متغیرهای نمونه از طریق شیء (dog1.name
) قابل دسترسی هستند. - به روزرسانی متغیرها: تغییر
Dog.species
بر تمام نمونه ها تاثیر می گذارد. اما تغییرdog1.name
فقط برdog1
تاثیر می گذارد و برdog2
تاثیری ندارد.
ارث بری در پایتون
ارث بری در برنامه نویسی شی گرا در پایتون به کلاس ها این امکان را می دهد که ویژگی ها و متدهای یک کلاس دیگر را به ارث ببرند. این ویژگی از طبقه بندی سلسله مراتبی پشتیبانی می کند و باعث بازاستفاده از کد می شود.
انواع ارث بری:
- ارث بری تک رشته ای: یک کلاس فرزند از یک کلاس والد به ارث می برد.
- ارث بری چند رشته ای: یک کلاس فرزند از چند کلاس والد به ارث می برد.
- ارث بری چند سطحی: یک کلاس فرزند از یک کلاس والد به ارث می برد که خودش از یک کلاس دیگر به ارث برده است.
- ارث بری سلسله مراتبی: چند کلاس فرزند از یک کلاس والد به ارث می برند.
- ارث بری ترکیبی: ترکیبی از دو یا چند نوع ارث بری.
ارث بری تک رشته ای
در این مثال، کلاس Labrador
از کلاس Dog
به ارث می برد.
توضیح:
- ارث بری تک رشته ای: کلاس
Labrador
ویژگی ها و متدهای کلاسDog
را به ارث می برد. - ارث بری چند سطحی: کلاس
GuideDog
از کلاسLabrador
به ارث می برد و بنابراین ویژگی ها و متدهای کلاسDog
وLabrador
را به ارث می برد. - ارث بری چند رشته ای: کلاس
GoldenRetriever
از دو کلاسDog
وFriendly
به ارث می برد.
چندریختی در پایتون
چندریختی در برنامه نویسی شی گرا به این معناست که متدها می توانند نام مشابهی داشته باشند، اما رفتارهای متفاوتی بسته به زمینه شیء از خود نشان دهند. این ویژگی از طریق بازنویسی متد یا بارگذاری مجدد متد قابل پیاده سازی است.
انواع چندریختی:
- چندریختی زمان کامپایل: این نوع چندریختی هنگام کامپایل برنامه مشخص می شود. به این معنا که متدها یا عملگرهایی که نام مشابهی دارند، بسته به پارامترهای ورودی یا استفاده، رفتار متفاوتی دارند. معمولاً به آن بارگذاری مجدد متد یا عملگر گفته می شود.
- چندریختی زمان اجرا: این نوع چندریختی در زمان اجرای برنامه مشخص می شود. این زمانی است که یک زیرکلاس پیاده سازی خاصی برای یک متد که قبلاً در کلاس والد تعریف شده است، فراهم می کند که معمولاً به آن بازنویسی متد گفته می شود.
کد مثال:
توضیح:
- چندریختی زمان اجرا:
- با استفاده از بازنویسی متد در کلاس های
Labrador
وBeagle
پیاده سازی شده است. - متد
sound
به طور صحیح در زمان اجرا براساس نوع شیء در لیستdogs
فراخوانی می شود.
- با استفاده از بازنویسی متد در کلاس های
- چندریختی زمان کامپایل:
- پایتون به طور طبیعی از بارگذاری مجدد متد پشتیبانی نمی کند. در عوض، با استفاده از یک متد واحد (
add
) و پارامترهای پیش فرض، رفتارهای مختلف (جمع دو یا سه عدد) را با توجه به نحوه فراخوانی متد بدست می آوریم.
- پایتون به طور طبیعی از بارگذاری مجدد متد پشتیبانی نمی کند. در عوض، با استفاده از یک متد واحد (
کپسوله سازی در پایتون
کپسوله سازی در برنامه نویسی شی گرا به معنای بسته بندی داده ها (ویژگی ها) و متدها (توابع) درون یک کلاس است که دسترسی به برخی از اجزای آن را محدود می کند تا تعاملات کنترل شده باشند. این ویژگی به ما این امکان را می دهد که داده ها را از دسترسی مستقیم محافظت کرده و از طریق متدهای خاص به آنها دسترسی داشته باشیم.
یک کلاس نمونه ای از کپسوله سازی است، زیرا تمام داده ها و توابع مرتبط را درون خود نگه می دارد.
انواع کپسوله سازی:
- اعضای عمومی: قابل دسترسی از هر جایی.
- اعضای محافظت شده: قابل دسترسی فقط درون کلاس و زیرکلاس ها.
- اعضای خصوصی: فقط درون کلاس قابل دسترسی هستند.
مثال کد:
توضیح:
- اعضای عمومی: به راحتی قابل دسترسی هستند، مانند ویژگی
name
. - اعضای محافظت شده: با یک خط زیر
_
مشخص می شوند، مانند ویژگی_breed
. دسترسی به آنها در کلاس های فرزند مجاز است، اما دسترسی مستقیم در خارج از کلاس توصیه نمی شود. - اعضای خصوصی: با دو خط زیر
__
مشخص می شوند، مانند ویژگی__age
. برای دسترسی به این اعضا باید از متدهای getter و setter استفاده کرد.
انتزاع داده ها در پایتون
انتزاع در برنامه نویسی شی گرا به معنای پنهان کردن جزئیات پیاده سازی داخلی و نمایان کردن فقط عملکردهای ضروری است. این ویژگی به ما کمک می کند تا بیشتر بر روی “چه چیزی باید انجام شود” تمرکز کنیم تا “چگونه باید انجام شود”.
انواع انتزاع:
- انتزاع جزئی: کلاس انتزاعی شامل هم متدهای انتزاعی و هم متدهای واقعی است.
- انتزاع کامل: کلاس انتزاعی فقط شامل متدهای انتزاعی است (مانند رابط ها).
مثال کد:
توضیح:
- انتزاع جزئی: کلاس
Dog
شامل هم متدهای انتزاعی (sound
) و هم متدهای واقعی (display_name
) است. متد انتزاعی باید در کلاس های فرزند پیاده سازی شود. - چرا استفاده کنیم؟: انتزاع تضمین می کند که در کلاس های فرزند، پیاده سازی متدهای انتزاعی انجام شود، بنابراین یک ساختار منظم و یکسان برای کلاس ها فراهم می شود.
سوالات متداول برنامه نویسی شی گرا در پایتون
تفاوت بین کلاس و شی در پایتون چیست؟
- کلاس: یک قالب یا نقشه برای ایجاد اشیا است. کلاس ساختار و رفتار (ویژگی ها و متدها) ای که اشیا بر اساس آن ساخته می شوند را تعریف می کند.
- شی: یک نمونه از یک کلاس است. هر شی یک موجودیت مشخص است که با استفاده از نقشه تعریف شده در کلاس ایجاد می شود.
مثال:
متد بازنویسی (Method Overriding) در پایتون چیست؟
بازنویسی متد زمانی اتفاق می افتد که یک زیرکلاس پیاده سازی خاص خود را برای یک متدی که قبلاً در کلاس والد تعریف شده، ارائه می دهد. وقتی متد بازنویسی شده روی شیء زیرکلاس فراخوانی شود، به جای متد کلاس والد، متد زیرکلاس اجرا خواهد شد.
مثال:
متد بیش بارگذاری (Method Overloading) در پایتون چیست؟
پایتون به طور مستقیم از بیش بارگذاری متد پشتیبانی نمی کند. اما می توان عملکرد مشابهی را با استفاده از آرگومان های پیش فرض یا آرگومان های متغیر (*args
و **kwargs
) پیاده سازی کرد.
مثال:
چرا از self
در پایتون استفاده می شود؟
self
یک قرارداد در پایتون است که برای اشاره به نمونه فعلی کلاس (شی) استفاده می شود. این آرگومان اول در متدهای نمونه است و به شی فراخوانی کننده متد اشاره می کند. با استفاده از self
می توان به ویژگی ها و متدهای متعلق به همان نمونه دسترسی داشت و آنها را تغییر داد.
مثال:
مدیر2024-12-23T18:13:53+03:30دسامبر 23, 2024|بدون دیدگاه
چکیده مقاله: ANOVA، که مخفف آنالیز واریانس است، یک روش آماری است که برای بررسی تفاوت های معنادار بین میانگین های سه یا چند گروه غیرمرتبط استفاده می شود. این تکنیک به ویژه زمانی [...]
مدیر2024-12-21T20:28:33+03:30دسامبر 21, 2024|بدون دیدگاه
چکیده مقاله: در این مطلب می خواهیم به بررسی کامل برنامه نویسی شی گرا در پایتون بپردازیم. بهتر است بدانید که برنامه نویسی شی گرا یک مفهوم اساسی در پایتون است که به توسعه [...]
مدیر2024-12-19T17:10:27+03:30دسامبر 19, 2024|بدون دیدگاه
چکیده مقاله: پیش از صحبت درباره کاربرد متلب در ریاضیات بهتر است بدانید که متلب (MATLAB) یکی از قدرتمندترین نرم افزارهای محاسبات عددی است که به طور گسترده در رشته های مختلف علمی و [...]
مدیر2024-12-18T00:00:51+03:30دسامبر 18, 2024|بدون دیدگاه
چکیده مقاله: برنامه نویسی شی گرا (Object-Oriented Programming) یکی از محبوب ترین و موثرترین روش های طراحی و توسعه نرم افزار می باشد. این پارادایم بر اساس مفاهیمی مانند اشیا (Objects)، کلاس ها (Classes)، [...]
مدیر2024-12-15T20:10:04+03:30دسامبر 15, 2024|بدون دیدگاه
چکیده مقاله: آزمون t تک نمونه ای یکی از روش های آماری پرکاربرد است که برای مقایسه میانگین یک نمونه آماری با یک مقدار ثابت (معمولا یک مقدار فرضی یا معیار) به کار می [...]
مدیر2024-12-13T20:07:35+03:30دسامبر 13, 2024|بدون دیدگاه
چکیده مقاله: ضریب توافق کاپا (Cohen's Kappa) یکی از معیارهای آماری مهم برای ارزیابی میزان توافق میان ارزیاب ها یا ابزارهای اندازه گیری مختلف است. این ضریب به ویژه زمانی به کار می رود [...]