شی گرایی در پایتون

شی گرایی در پایتون
شی گرایی(OOP) یکی از مفاهیم اساسی و بسیار قدرتمند در برنامهنویسی است که برای ساختاردهی و ترتیب دادن به کدها و همچنین افزایش قابلیت استفاده مجدد از قطعات کد بسیار مفید است. در این مقاله، به معرفی مفهوم شی گرایی و کاربردهای آن در زبان برنامهنویسی پایتون میپردازیم.
مفهوم شی گرایی
شی گرایی یک روش برنامهنویسی است که از ایده مدلسازی مبتنی بر اجزا استفاده میکند. در این روش، اشیاء (Objects) به عنوان نمونههای از کلاسها (Classes) تعریف میشوند. کلاسها مجموعهای از ویژگیها (Attributes) و روشها (Methods) هستند که توسط اشیاء قابل استفاده هستند. شی گرایی اجازه میدهد که برنامهنویسان رابطههای معنیدار بین متغیرها و عملیاتها ایجاد کنند و بدین ترتیب کد را سازماندهی و مدیریت کنند.
کلاسها و اشیاء در پایتون
در این مثال، کلاس Car تعریف شده است که دو ویژگی brand و model را دارد. همچنین دو متد نیز در این کلاس تعریف شدهاند: __init__ برای مقداردهی اولیه و display_info برای نمایش اطلاعات ماشین.
در زبان برنامهنویسی پایتون، “شیء” (Object) یک نمونه خاص از یک “کلاس” (Class) است. کلاسها بصورت الگویی برای ساختن شیء تعریف میشوند. هر کلاس میتواند ویژگیهای مختلفی داشته باشد که به آنها “ویژگی” یا “خصوصیت” میگوییم، و همچنین میتواند عملیات مختلفی را انجام دهد که به آنها “متد” میگوییم.
برای مثال، فرض کنید که یک کلاس به نام Person داریم. این کلاس میتواند ویژگیهایی مانند نام و سن داشته باشد و همچنین میتواند متدهایی مانند نمایش اطلاعات فرد را پشتیبانی کند. وقتی یک شیء از این کلاس ایجاد میشود، به عنوان یک نمونه یا موجودیت مشخص از کلاس Person در نظر گرفته میشود.
به طور خلاصه، کلاس تعریف الگویی برای ایجاد شیء است، و شیء نمونهای است که بر اساس آن الگو ایجاد میشود و دارای ویژگیها و عملیات مشخصی است که در کلاس تعریف شدهاند.
ویژگیها و متدها
ویژگیها (Attributes) متغیرهایی هستند که به شیء مربوط میشوند. متدها (Methods) عملیاتی هستند که بر روی اشیاء انجام میشوند. از آنجایی که هر چیز در پایتون شیء است، حتی اعداد و رشتهها، میتوانیم ویژگیها و متدهای خود را برای آنها تعریف کنیم.
-
1. دستورات شرطی:
- if, elif, else: برای ایجاد شرطهای گوناگون و انتخاب بین موارد مختلف.
- assert: برای اعلام شرطهایی که درست باید باشند.
-
2. حلقهها:
- for: برای تکرار اعمال بر روی یک مجموعه از عناصر.
- while: برای تکرار تا زمانی که یک شرط مشخص درست باشد.
-
3. لیستها و دیکشنریها:
- list: برای ایجاد لیستهای مرتب.
- dict: برای ایجاد دیکشنریها که هر عنصر آن دارای یک کلید و مقدار متناظر است.
-
4. توابع:
- def: برای تعریف توابع.
- return: برای بازگرداندن مقدار از توابع.
-
5. متدهای رشتهها:
- split(): برای تقسیم رشته بر اساس یک کاراکتر خاص.
- join(): برای اتصال رشتهها با یک کاراکتر مشخص.
-
6. ورودی/خروجی:
- input(): برای دریافت ورودی از کاربر.
- print(): برای چاپ اطلاعات بر روی صفحه.
-
7. مدیریت استثناءها:
- try, except: برای مدیریت خطاها و استثناءها در کد.
-
8. ماژولها:
- import: برای وارد کردن ماژولهای پیشفرض یا از پیش تعریف شده.
- from … import …: برای وارد کردن فقط بخشهای خاصی از یک ماژول.
-
9. تعریف کلاس و شیء:
- class: برای تعریف یک کلاس.
- __init__: متد سازنده کلاس که هنگام ایجاد یک شیء فراخوانی میشود.
-
10. توابع Lambda:
- lambda: برای تعریف توابع کوچک و بدون نام.
-
11. تعداد زیادی کتابخانه و پکیج:
- مانند NumPy برای عملیات عددی، Pandas برای کار با دادههای ساختار یافته، و TensorFlow برای یادگیری عمیق و ماشینی.
وراثت
وراثت یکی از مفاهیم اصلی در برنامهنویسی شیءگرا است که به شما این امکان را میدهد که ویژگیها و عملکردهای یک کلاس را به کلاس دیگری انتقال دهید. در پایتون، وراثت به شما این امکان را میدهد که از کدهایی که قبلاً نوشتهاید استفاده کنید و آنها را در کلاسهای جدیدتر استفاده کنید یا آنها را تغییر دهید.
برای وراثت در پایتون، یک کلاس میتواند از یک یا چند کلاس دیگر به ارث برده شود. این کلاسی که از کلاس دیگر به ارث برده میشود، “کلاس پایه” یا “کلاس والد” نامیده میشود و کلاسی که از آن به ارث برده میشود، “کلاس فرزند” نامیده میشود.
برای ارثبری در پایتون، کافی است کلاس فرزند را با استفاده از اسم کلاس والد به صورت زیر تعریف کنید:
در اینجا ChildClass از ParentClass به ارث برده شده است. حالا کلاس ChildClass میتواند به تمام ویژگیها و متدهایی که در ParentClass تعریف شدهاند دسترسی داشته باشد و حتی میتواند آنها را جایگزین کند یا به آنها ویژگیها و متدهای جدیدی اضافه کند.
وراثت در پایتون به شما امکان میدهد که کدهایتان را با استفاده از اصول اولیه برنامهنویسی شیءگرا سازماندهی کنید، از تکرار کدها جلوگیری کنید و کد را به صورت مدولار و قابل استفاده مجدد طراحی کنید.
اصل کپسوله سازی شی گرایی در پایتون
کپسوله سازی (Encapsulation) یکی از اصول مهم برنامهنویسی شیگرا است که در زبانهای برنامهنویسی مانند پایتون نیز مورد استفاده قرار میگیرد. این اصل به ما کمک میکند تا دادهها و عملیات مربوط به یک شیء را در داخل همان شیء محافظت کنیم و دسترسی مستقیم به آنها را از خارج از شیء محدود کنیم.
در پایتون، کپسوله سازی اغلب با استفاده از ویژگیهای دسترسی (Access Modifiers) انجام میشود. این ویژگیها شامل public، private و protected هستند که هر کدام نحوه دسترسی به اعضای یک کلاس را مشخص میکنند. در اینجا توضیح مختصری در مورد هر کدام ارائه میشود:
- Public : اگر یک عضو (متغیر یا تابع) را با استفاده از public تعریف کنید، این به معنی است که آن عضو بهطور عمومی قابل دسترسی است و میتوان از آن در هر قسمتی از برنامه استفاده کرد. در پایتون، اعضایی که بدون اضافه کردن ویژگیهای دسترسی مشخص شوند به طور پیشفرض public هستند.
- private: اگر یک عضو را با استفاده از private تعریف کنید، به این معنی است که فقط اعضای داخلی کلاس به آن دسترسی دارند و از خارج از کلاس قابل دسترسی نیستند. در پایتون، این قابلیت با استفاده از نماد زیرزیر خط (_) قابل انجام است. مثلا:
- در این مثال، _my_variable و _my_function به عنوان اعضای private کلاس تعریف شدهاند.
- protected: اگر یک عضو را با استفاده از protected تعریف کنید، این به این معنی است که فقط اعضای داخلی کلاس به آن دسترسی دارند، اما کلاسهای زیرکلاس نیز به آن دسترسی دارند. در پایتون، این قابلیت به صورت مستقیم پشتیبانی نمیشود و استفاده از آن نیازمند توافقات کاربردی برنامهنویسی است.
کپسوله سازی به ما امکان میدهد که دادهها و رفتارهای یک شیء را محافظت کنیم و از دسترسی غیرمجاز جلوگیری کنیم، که این میتواند در توسعه و نگهداری برنامهها بسیار مفید باشد.
اصل انتزاع شی گرایی در پایتون
اصل انتزاع یکی از اصول اصلی شی گرایی است که در طراحی و توسعه نرمافزارهای شی گرا به کار میرود. انتزاع به معنای جدا کردن مفهوم یا ویژگیهای مهم یک شیء از جزئیات پیادهسازی آن است. در واقع، این اصل به ما میگوید که باید فقط به ویژگیها یا رفتارهای مهم یک شیء توجه کنیم و از جزئیات پیادهسازی آن صرفنظر کنیم.
در پایتون، این اصل از طریق استفاده از کلاسها و اشیاء به خوبی پیادهسازی میشود. با تعریف کلاسها، شما میتوانید مفاهیم ویژگیها و رفتارهای مهم مربوط به یک شیء را تعریف کنید و جزئیات پیادهسازی را درون کلاس مخفی کنید.
به عنوان مثال، فرض کنید شما یک کلاس به نام “خودرو” دارید. ویژگیهای اصلی این کلاس ممکن است شامل سرعت، رنگ، مدل و روشنایی باشند. با استفاده از اصل انتزاع، شما میتوانید این ویژگیها را در کلاس تعریف کنید و برای کاربران خارجی پنهان کنید که چگونه دقیقاً این ویژگیها پیادهسازی شدهاند.
در پایتون، این اصل با استفاده از ویژگیها و روشهای private و public پیادهسازی میشود. به طور معمول، ویژگیهای private با استفاده از نشانه زیر خط (_) مشخص میشوند و فقط درون کلاس قابل دسترسی هستند. این اجازه را به شما میدهد که جزئیات پیادهسازی را مخفی کنید و فقط رابط عمومی کلاس را برای کاربران خارجی قابل دسترسی کنید.
در پایتون، اصل چندریختی یا Polymorphism به معنای قابلیت یکپارچگی یا تنوع در عملکرد یک متد، عمل یا کلاس است. این به معنای این است که یک متد یا عمل میتواند با وجود اینکه نام یکسانی دارد، در اجرا به شکلهای مختلف عمل کند.
اصل چندریختی در پایتون از طریق مکانیسم پلیمورفیسم ارثبری و یا استفاده از ویژگیهای زبان برقرار میشود. به عنوان مثال، میتوان یک متد را در کلاسهای مختلف با نام یکسان ولی با عملکرد متفاوت پیادهسازی کرد.
نوعی از اصل چندریختی در پایتون از طریق پارامترهای ورودی توابع نیز امکانپذیر است. به عبارت دیگر، یک تابع میتواند با ورودیهای مختلف، عملکرد متفاوتی داشته باشد.
در پایتون، اصل چندریختی از طریق استفاده از مفهوم همگرایی برای انجام عملیاتها بر روی اشیاء انجام میشود. به این معنا که میتوان یک عملیات را بر روی اشیاء از انواع مختلفی از کلاسها انجام داد، به شرطی که این اشیاء شامل توابع یا متدهای لازم برای انجام آن عملیات باشند.
در پایان
شی گرایی یکی از مفاهیم اساسی برنامهنویسی است که با استفاده از آن میتوانید کدهایتان را سازماندهی و مدیریت کنید. در پایتون، شی گرایی با استفاده از کلاسها و اشیاء پیادهسازی میشود و امکاناتی مانند وراثت، پلیمورفیسم و انکپسولاسیون را فراهم میکند. با استفاده از این اصول، میتوانید کدهایی تمیزتر، قابلفهمتر و قابلتوسعهتر بنویسید.
دیدگاهتان را بنویسید