در میان توسعه دهندگان، برنامه نویسی شی گرا طرفداران قابل توجهی را به خود جلب کرده است. زبان کامپیوتری محبوب پایتون نیز به پارادایم شی گرا پایبند است.
با تعریف اشیا و کلاس ها در پایتون سروکار دارد که اساس اصول OOPs را تشکیل می دهد. در این آموزش "برنامه نویسی شی گرا در پایتون"، نحوه اعلان کلاس های پایتون، ایجاد اشیاء از آنها و استفاده از چهار تکنیک OOPs را خواهید آموخت.
بنابراین، اول از همه.
برنامه نویسی شی گرا چیست؟
تمرکز اصلی برنامه نویسی شی گرا (OOP) ایجاد "اشیاء" است. مجموعه ای از متغیرها و توابع به هم پیوسته یک شی را تشکیل می دهند.
این متغیرها اغلب به عنوان ویژگی های شی و رفتارهای آن به عنوان عملکردهای آن شناخته می شوند. این موارد ساختار موثرتر و قابل فهم تری به اپلیکیشن ارائه می دهند. خودرو نمونه ای از یک آیتم است.
اگر خودرو یک کالا بود، ویژگیهای آن شامل مواردی مانند رنگ، مدل، قیمت، مارک و غیره میشد.
مثال دیگر: اگر سگ را به عنوان یک وسیله در نظر بگیریم، برخی از ویژگی های آن ممکن است رنگ، نژاد، نام، وزن و غیره باشد و در حال حرکت، پارس کردن، بازی کردن و غیره باشد.
از آنجا که مفاهیم دنیای واقعی مانند اشیاء، پنهان کردن، ارث و غیره را در برنامه نویسی گنجانده است، برنامه نویسی شی گرا به خوبی شناخته شده است. از آنجا که بسیار شبیه به شرایط دنیای واقعی است، تجسم سادهتر شده است.
مفاهیم برنامه نویسی شی گرا
کلاس ها و اشیاء در پایتون
مانند سایر زبان های شی گرا، پایتون شما را قادر می سازد تا کلاس هایی را برای تولید اشیاء طراحی کنید. محبوب ترین انواع داده در پایتون، از جمله رشته ها، لیست ها، دیکشنری ها و سایر اشیاء، کلاس های داخلی هستند.
کلاس گروهی از متدهای مرتبط و متغیرهای نمونه است که نوع خاصی از شی را تعریف می کند. یک کلاس ممکن است به عنوان مدل یا الگوی یک شی دیده شود. متغیرهایی که یک کلاس را تشکیل می دهند به عنوان ویژگی شناخته می شوند.
یک شی عضوی از یک کلاس است که دارای مجموعه ای از ویژگی های تعریف شده است. به همین دلیل، هر تعداد شی را می توان با استفاده از همان کلاس ایجاد کرد.
کلاسهای پایتون با استفاده از کلمه class تعریف میشوند که بعد از آن نام کلاس و یک کولون قرار میگیرد. مثالی از کلاس طوطی ممکن است به صورت زیر باشد:
در اینجا، کلاس خالی Parrot را با استفاده از کلمه کلیدی class اعلام می کنیم. ما نمونه هایی از کلاس ها ایجاد می کنیم. یک نمونه یک شی خاص است که از یک کلاس خاص ساخته شده است. 'pass' اغلب به عنوان یک پایه برای کد استفاده می شود که ممکن است در حال حاضر از اجرای آن صرف نظر کنیم. با استفاده از کلمه کلیدی “pass” می توانیم کد پایتون را بدون ایجاد خطا اجرا کنیم.
نمونه سازی از یک کلاس منجر به یک شی (نمونه) می شود. زمانی که یک کلاس ایجاد می شود، فقط توضیحات شی تعریف می شود. در نتیجه هیچ فضای ذخیره سازی یا رم اختصاص داده نمی شود.
مثالی از یک شی کلاس طوطی:
Obj در این مثال یک شی از کلاس Parrot است.
بیایید بگوییم که ما اطلاعات خاصی در مورد طوطی ها داریم. اکنون نحوه ایجاد کلاس طوطی و اشیاء آن را نشان خواهیم داد.
روش ویژه (__init__)
متدی به نام init ویژگی هایی را تعریف می کند که هر شیء Parrot باید () داشته باشد. هنگامی که یک آبجکت جدید Parrot تشکیل می شود، تابع __init__ با تخصیص مقادیری که در ویژگی های شی ارائه می کنیم، حالت اولیه شی را ایجاد می کند.
بنابراین، هر نمونه جدید کلاس با استفاده از __init__() مقداردهی اولیه می شود. اگرچه __init__() می تواند هر تعداد پارامتر را بپذیرد، self همیشه اولین پارامتر است.
ارجاع به نمونه کلاس فعال در استدلال خود گنجانده شده است. پارامتر self، که به آدرس شی فعلی یک کلاس پیوند میدهد و به ما امکان دسترسی به دادههای متغیرهای آن (شیء) را میدهد، نشاندهنده آن است.
1 مثال
در کد بالا کلاسی به نام Parrot ایجاد کردیم. در ادامه، ویژگی ها تعریف می شوند. خصوصیات یک چیز، خواص آن است. تابع __init__ کلاس جایی است که این ویژگی ها مشخص می شوند.
هنگامی که یک شی تشکیل می شود، روش اولیه همان روشی است که در ابتدا فراخوانی می شود. سپس نمونه هایی از کلاس Parrot ایجاد می شوند. Blaze و Wonda در این مثال ارجاعات (ارزش) به اشیاء جدید ما هستند. __class .species به ما امکان می دهد به ویژگی class دسترسی داشته باشیم.
هر نمونه از یک کلاس ویژگی های یکسانی دارد. همچنین میتوان با استفاده از blaze.name و blaze.age به ویژگیهای نمونه دسترسی داشت. هر چند تمام نمونه های یک کلاس دارای ویژگی های نمونه منحصر به فرد هستند.
2 مثال
مواد و روش ها
توابع تعریف شده در بدنه یک کلاس را متد می گویند. آنها برای تعیین نحوه رفتار یک آیتم استفاده می شوند.
دو روش sing() و dance در برنامه فوق الذکر () تعریف شده است. از آنجایی که آنها بر روی یک شیء نمونه فراخوانی می شوند، مانند شعله، به آنها روش های نمونه می گویند.
مبانی مفهوم OOPS
چهار ایده اصلی برنامه نویسی شی گرا عبارتند از:
- وراثت
- کپسوله سازی
- پلی مورفیسم
- انتزاع - مفهوم - برداشت
وراثت
مردم به طور مکرر به نوزادان می گویند که ویژگی های چهره ای دارند که شبیه چهره والدینشان است یا ویژگی های خاصی را از والدین خود به ارث برده اند.
این امکان وجود دارد که شما نیز مشاهده کرده باشید که چند ویژگی مشترک با والدین خود دارید. وضعیت دنیای واقعی نیز تقریباً مشابه وراثت است.
با این حال، در این مورد، ویژگی های "طبقات والدین" به "طبقات کودک" منتقل می شود. در این زمینه به این جنبهها «خواص» و «روشها» گفته میشود.
یک کلاس میتواند متدها و ویژگیهای خود را با استفاده از تکنیکی به نام وراثت از کلاس دیگری استخراج کند. وراثت فرآیندی است که یک کلاس فرزند، ویژگی های یک کلاس والد را دریافت می کند.
مثال:
کلاس والد Human توسط فرزند کلاس Boy در مثال بالا به ارث می رسد. از آنجایی که Boy از Human به ارث میبرد، وقتی نمونهای از کلاس Boy ایجاد میکنیم، میتوانیم به تمام متدها و ویژگیهای آن دسترسی داشته باشیم.
در کلاس Boy نیز متدی به نام schoolName تعریف شده است. شی کلاس والد نمی تواند به متد schoolName دسترسی پیدا کند. با این حال، متد schoolName را می توان با ایجاد یک شی کلاس فرزند (Boy) فراخوانی کرد.
کپسوله سازی
دادن دسترسی سراسری به هر متغیر در برنامه هنگام کار با کلاس ها و مدیریت داده های حساس حرکت عاقلانه ای نیست.
بدون دسترسی کامل برنامه به هر یک از آن متغیرها، کپسوله سازی مکانیزمی را برای ما فراهم می کند تا متغیرهای لازم را به دست آوریم.
روش هایی که به صراحت برای این منظور تعریف شده اند می توانند برای به روز رسانی، ویرایش یا حذف داده ها از متغیرها استفاده شوند. این روش برنامه نویسی دارای مزایای افزایش امنیت و کنترل بر ورودی داده است.
ببینید با چه سرعتی متغیرها می توانند در نمایش زیر قابل دسترسی باشند:
پلی مورفیسم
فرض کنید از تلفن خود برای مرور استفاده می کنید نمایش مشخصات عمومی تغذیه می شود. وقتی هوس شنیدن موسیقی را پیدا کردید، به Spotify دسترسی پیدا کردید و شروع به پخش آهنگ مورد علاقه خود کردید.
پس از مدتی، تماسی دریافت کردید، بنابراین هر کاری را که در پسزمینه انجام میدادید برای پاسخ به آن مکث کردید. دوست شما تماس گرفت و درخواست کرد که شماره تلفن شخص خاصی را به آنها پیامک کنید.
بنابراین شماره تلفن را از طریق پیامک برای او ارسال کردید و کارهای خود را ادامه دادید. آیا چیزی برداشت کرده اید؟ فقط با یک دستگاه - تلفن همراه خود - می توانید در فیدها گشت و گذار کنید، به موسیقی گوش دهید، تماس تلفنی بگیرید و پیام دهید.
بنابراین پلی مورفیسم با آن قابل مقایسه است. Poly به معنای متعدد است و مورف نشان دهنده اشکال مختلف است. بنابراین، چندشکلی در کل به چیزی با اشکال مختلف اشاره دارد.
یا «چیزی» که بسته به شرایط، می تواند رفتارهای مختلفی از خود نشان دهد. در OOPS، چندشکلی توابعی را با نامهای مشابه اما رفتارهای متمایز توصیف میکند. متناوبا، یک امضای تابع متفاوت با نام تابع یکسان (پارامترهای ارسال شده به تابع).
مثال:
در اینجا، میتوانیم با استفاده از روشهای نمونه مربوطه، از حیوان متغیر برای تکرار در میان اشیاء گورخر و خرگوش استفاده کنیم. در نتیجه، رفتار (color() & eats()) هر دو گورخر و خرگوش در اینجا با یک متغیر منفرد به نام حیوان نشان داده می شود. بنابراین به قوانین چندشکلی پایبند است.
انتزاع - مفهوم - برداشت
به احتمال زیاد برای خواندن این محتوا از لپ تاپ، تلفن یا تبلت استفاده می کنید. در حین خواندن آن، احتمالاً یادداشت برداری میکنید، زیر قسمتهای کلیدی خط میکشید و شاید برخی اطلاعات را در فایلهای شخصی خود ذخیره میکنید.
تنها چیزی که با خواندن این مطلب می توانید ببینید یک "صفحه" با داده هایی است که به شما نمایش داده می شود. شما فقط کلیدهای صفحه کلید را هنگام تایپ می بینید، بنابراین لازم نیست نگران ظرافت های داخلی مانند فشار دادن یک کلید باشید که آن کلمه روی صفحه ظاهر شود.
روش دیگر، چگونه فشار دادن یک دکمه روی صفحه نمایش شما می تواند یک برگه جدید راه اندازی کند.
بنابراین، هر آنچه در این موقعیت مشاهده کنیم، انتزاعی است. ما فقط می توانیم نتیجه ای که ایجاد می کند و نه پیچیدگی های درونی (که در واقع برای ما مهم هستند) را ببینیم.
مشابه این، انتزاع تنها کارکردهایی را که همه چیز دارند آشکار می کند در حالی که هر گونه پیاده سازی یا جزئیات داخلی را پنهان می کند.
هدف اصلی Abstraction پنهان کردن اطلاعات پسزمینه و هرگونه اجرای دادههای اضافی است به طوری که مردم فقط آنچه را که باید ببینند ببینند. این به مدیریت پیچیدگی کد کمک می کند.
مثال:
یک کلاس انتزاعی مرتبط با خودرو در اینجا حضور دارد. از آنجایی که از کلاس انتزاعی ABC به ارث می برد، انتزاعی است. از آنجایی که متدهای انتزاعی تعریف نمی شوند یا خالی می مانند، کلاس Vehicle یک متد انتزاعی به نام no of wheels دارد که فاقد تعریف است.
آنها کلاسهایی را که کلاسهای انتزاعی را به ارث میبرند پیشبینی میکنند تا اجرای متد را ارائه دهند.
مزایای مفاهیم OOPS
- با کپسوله کردن، امنیت بالا و حفظ حریم خصوصی داده ها حاصل می شود.
- انعطاف پذیری در داشتن بسیاری از نسخه های چند شکلی از یک کلاس.
- سطح بالای پیچیدگی کد با انتزاع کاهش یافت.
- ماژولار بودن برنامه نویسی به جای بررسی صدها خط کد برای یافتن یک مشکل واحد، اشکال زدایی را ساده می کند.
- استفاده مجدد از کد به دلیل به ارث بردن ویژگی های کلاس والد توسط کلاس فرزند ایجاد می شود.
- حل موثر مشکل امکان پذیر است زیرا ما کلاس هایی ایجاد می کنیم که اقدامات لازم را برای هر مشکل کوچک انجام می دهند. مشکل زیر را میتوان با سرعت بیشتری حل کرد زیرا میتوانیم از آن کلاسها دوباره استفاده کنیم.
نتیجه
در پایان، ما در مورد ایده های OOPS در پایتون، داغ ترین پارادایم برنامه نویسی در حال حاضر، آشنا شدیم.
پس از خواندن این مطلب، حتما متوجه شده اید که پارادایم OOPS به طور کامل با ایده کلاس ها و اشیاء سروکار دارد. و مفاهیم OOPS مانند کپسولاسیون، چندشکلی، وراثت و انتزاع.
پاسخ دهید