برنامه نویسی شی گرا در پایتون همراه با کد

برنامه نویسی شی گرا در پایتون همراه با کد
توسط منتشر شده در : دسامبر 21, 2024دسته بندی: مقالات برنامه نویسیLast Updated: دسامبر 21, 2024بدون دیدگاه on برنامه نویسی شی گرا در پایتون همراه با کدنمایش: 25

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

برنامه نویسی شی گرا در پایتون چیست؟

برنامه نویسی شی گرا یکی از پارادایم های مهم برنامه نویسی است که در آن، برنامه ها به جای استفاده از توابع و داده های مجزا، حول محور “اشیا” سازمان دهی می شوند. این اشیا ترکیبی از داده ها (ویژگی ها) و توابع (رفتارها) هستند که با یکدیگر مرتبط می باشند. زبان پایتون به عنوان یک زبان سطح بالا و همه منظوره، از برنامه نویسی شی گرا پشتیبانی کامل می کند و امکان ایجاد کلاس ها و اشیای قابل استفاده مجدد را برای توسعه دهندگان فراهم می نماید.

در پایتون، کلاس ها به عنوان قالب هایی برای ایجاد اشیا عمل می کنند. با تعریف یک کلاس، می توان خصوصیات و رفتارهای مشترک را مشخص کرد و سپس از این کلاس برای ایجاد اشیای متعدد استفاده نمود. این روش باعث می شود کدها خواناتر، قابل مدیریت تر و منعطف تر باشند. به عنوان مثال، می توان یک کلاس “ماشین” با ویژگی هایی مثل رنگ و مدل و رفتارهایی مثل روشن و خاموش شدن تعریف کرد و سپس از این کلاس برای ساخت اشیای مختلفی از نوع ماشین استفاده نمود.

مطلب پیشنهادی: برنامه نویسی شی گرا چیست؟

مفاهیم برنامه نویسی شی گرا در پایتون

  1. کلاس در پایتون
  2. اشیاء در پایتون
  3. چندریختی در پایتون
  4. کپسوله سازی در پایتون
  5. ارث بری در پایتون
  6. انتزاع داده در پایتون

کلاس در پایتون

کلاس مجموعه ای از اشیاء است. کلاس ها طرح هایی برای ایجاد اشیاء هستند. یک کلاس مجموعه ای از ویژگی ها و متدهایی را تعریف می کند که اشیاء ایجاد شده (نمونه ها) می توانند داشته باشند.

نکاتی در مورد کلاس های پایتون:

  • کلاس ها با استفاده از کلمه کلیدی 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 تاثیری ندارد.

ارث بری در پایتون

ارث بری در برنامه نویسی شی گرا در پایتون به کلاس ها این امکان را می دهد که ویژگی ها و متدهای یک کلاس دیگر را به ارث ببرند. این ویژگی از طبقه بندی سلسله مراتبی پشتیبانی می کند و باعث بازاستفاده از کد می شود.

انواع ارث بری:

  1. ارث بری تک رشته ای: یک کلاس فرزند از یک کلاس والد به ارث می برد.
  2. ارث بری چند رشته ای: یک کلاس فرزند از چند کلاس والد به ارث می برد.
  3. ارث بری چند سطحی: یک کلاس فرزند از یک کلاس والد به ارث می برد که خودش از یک کلاس دیگر به ارث برده است.
  4. ارث بری سلسله مراتبی: چند کلاس فرزند از یک کلاس والد به ارث می برند.
  5. ارث بری ترکیبی: ترکیبی از دو یا چند نوع ارث بری.

ارث بری تک رشته ای

در این مثال، کلاس Labrador از کلاس Dog به ارث می برد.

نمایش کپی در حافظه

توضیح:

  1. ارث بری تک رشته ای: کلاس Labrador ویژگی ها و متدهای کلاس Dog را به ارث می برد.
  2. ارث بری چند سطحی: کلاس GuideDog از کلاس Labrador به ارث می برد و بنابراین ویژگی ها و متدهای کلاس Dog و Labrador را به ارث می برد.
  3. ارث بری چند رشته ای: کلاس GoldenRetriever از دو کلاس Dog و Friendly به ارث می برد.

چندریختی در پایتون

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

انواع چندریختی:

  1. چندریختی زمان کامپایل: این نوع چندریختی هنگام کامپایل برنامه مشخص می شود. به این معنا که متدها یا عملگرهایی که نام مشابهی دارند، بسته به پارامترهای ورودی یا استفاده، رفتار متفاوتی دارند. معمولاً به آن بارگذاری مجدد متد یا عملگر گفته می شود.
  2. چندریختی زمان اجرا: این نوع چندریختی در زمان اجرای برنامه مشخص می شود. این زمانی است که یک زیرکلاس پیاده سازی خاصی برای یک متد که قبلاً در کلاس والد تعریف شده است، فراهم می کند که معمولاً به آن بازنویسی متد گفته می شود.

کد مثال:

نمایش کپی در حافظه

توضیح:

  1. چندریختی زمان اجرا:
    • با استفاده از بازنویسی متد در کلاس های Labrador و Beagle پیاده سازی شده است.
    • متد sound به طور صحیح در زمان اجرا براساس نوع شیء در لیست dogs فراخوانی می شود.
  2. چندریختی زمان کامپایل:
    • پایتون به طور طبیعی از بارگذاری مجدد متد پشتیبانی نمی کند. در عوض، با استفاده از یک متد واحد (add) و پارامترهای پیش فرض، رفتارهای مختلف (جمع دو یا سه عدد) را با توجه به نحوه فراخوانی متد بدست می آوریم.

کپسوله سازی در پایتون

کپسوله سازی در برنامه نویسی شی گرا به معنای بسته بندی داده ها (ویژگی ها) و متدها (توابع) درون یک کلاس است که دسترسی به برخی از اجزای آن را محدود می کند تا تعاملات کنترل شده باشند. این ویژگی به ما این امکان را می دهد که داده ها را از دسترسی مستقیم محافظت کرده و از طریق متدهای خاص به آنها دسترسی داشته باشیم.

یک کلاس نمونه ای از کپسوله سازی است، زیرا تمام داده ها و توابع مرتبط را درون خود نگه می دارد.

انواع کپسوله سازی:

  1. اعضای عمومی: قابل دسترسی از هر جایی.
  2. اعضای محافظت شده: قابل دسترسی فقط درون کلاس و زیرکلاس ها.
  3. اعضای خصوصی: فقط درون کلاس قابل دسترسی هستند.

مثال کد:

نمایش کپی در حافظه

توضیح:

  1. اعضای عمومی: به راحتی قابل دسترسی هستند، مانند ویژگی name.
  2. اعضای محافظت شده: با یک خط زیر _ مشخص می شوند، مانند ویژگی _breed. دسترسی به آنها در کلاس های فرزند مجاز است، اما دسترسی مستقیم در خارج از کلاس توصیه نمی شود.
  3. اعضای خصوصی: با دو خط زیر __ مشخص می شوند، مانند ویژگی __age. برای دسترسی به این اعضا باید از متدهای getter و setter استفاده کرد.

انتزاع داده ها در پایتون

انتزاع در برنامه نویسی شی گرا به معنای پنهان کردن جزئیات پیاده سازی داخلی و نمایان کردن فقط عملکردهای ضروری است. این ویژگی به ما کمک می کند تا بیشتر بر روی “چه چیزی باید انجام شود” تمرکز کنیم تا “چگونه باید انجام شود”.

انواع انتزاع:

  1. انتزاع جزئی: کلاس انتزاعی شامل هم متدهای انتزاعی و هم متدهای واقعی است.
  2. انتزاع کامل: کلاس انتزاعی فقط شامل متدهای انتزاعی است (مانند رابط ها).

مثال کد:

نمایش کپی در حافظه

توضیح:

  1. انتزاع جزئی: کلاس Dog شامل هم متدهای انتزاعی (sound) و هم متدهای واقعی (display_name) است. متد انتزاعی باید در کلاس های فرزند پیاده سازی شود.
  2. چرا استفاده کنیم؟: انتزاع تضمین می کند که در کلاس های فرزند، پیاده سازی متدهای انتزاعی انجام شود، بنابراین یک ساختار منظم و یکسان برای کلاس ها فراهم می شود.

سوالات متداول برنامه نویسی شی گرا در پایتون

تفاوت بین کلاس و شی در پایتون چیست؟

  • کلاس: یک قالب یا نقشه برای ایجاد اشیا است. کلاس ساختار و رفتار (ویژگی ها و متدها) ای که اشیا بر اساس آن ساخته می شوند را تعریف می کند.
  • شی: یک نمونه از یک کلاس است. هر شی یک موجودیت مشخص است که با استفاده از نقشه تعریف شده در کلاس ایجاد می شود.

مثال:

نمایش کپی در حافظه

متد بازنویسی (Method Overriding) در پایتون چیست؟

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

مثال:

نمایش کپی در حافظه

متد بیش بارگذاری (Method Overloading) در پایتون چیست؟

پایتون به طور مستقیم از بیش بارگذاری متد پشتیبانی نمی کند. اما می توان عملکرد مشابهی را با استفاده از آرگومان های پیش فرض یا آرگومان های متغیر (*args و **kwargs) پیاده سازی کرد.

مثال:

نمایش کپی در حافظه

چرا از self در پایتون استفاده می شود؟

self یک قرارداد در پایتون است که برای اشاره به نمونه فعلی کلاس (شی) استفاده می شود. این آرگومان اول در متدهای نمونه است و به شی فراخوانی کننده متد اشاره می کند. با استفاده از self می توان به ویژگی ها و متدهای متعلق به همان نمونه دسترسی داشت و آنها را تغییر داد.

مثال:

نمایش کپی در حافظه
اشتراک گذاری این محتوا، پلتفرم خود را انتخاب کنید!
مطالب مرتبط دیگر :

  • آنالیز واریانس (ANOVA) چیست؟ انواع، کاربرد و فرمول
آنالیز واریانس (ANOVA) چیست؟ انواع، کاربرد و فرمول

دسامبر 23, 2024|بدون دیدگاه

چکیده مقاله: ANOVA، که مخفف آنالیز واریانس است، یک روش آماری است که برای بررسی تفاوت های معنادار بین میانگین های سه یا چند گروه غیرمرتبط استفاده می شود. این تکنیک به ویژه زمانی [...]

  • برنامه نویسی شی گرا چیست؟ همراه با کد آموزشی
برنامه نویسی شی گرا چیست؟ همراه با کد آموزشی

دسامبر 18, 2024|بدون دیدگاه

چکیده مقاله: برنامه نویسی شی گرا (Object-Oriented Programming) یکی از محبوب ترین و موثرترین روش های طراحی و توسعه نرم افزار می باشد. این پارادایم بر اساس مفاهیمی مانند اشیا (Objects)، کلاس ها (Classes)، [...]

  • ضریب توافق کاپا (Kappa coefficient) چیست؟
ضریب توافق کاپا (Kappa coefficient) چیست؟

دسامبر 13, 2024|بدون دیدگاه

چکیده مقاله: ضریب توافق کاپا (Cohen's Kappa) یکی از معیارهای آماری مهم برای ارزیابی میزان توافق میان ارزیاب ها یا ابزارهای اندازه گیری مختلف است. این ضریب به ویژه زمانی به کار می رود [...]