شیگرایی (Object-Oriented Programming یا OOP) یک پارادایم برنامهنویسی است که به توسعهدهندگان اجازه میدهد برنامهها را بر اساس اشیاء و کلاسها بسازند. این پارادایم برنامهنویسی نسبت به برنامهنویسی رویهای (Procedural Programming) که در آن کد به صورت خطی نوشته میشود، مزایای زیادی دارد. پایتون به عنوان یک زبان برنامهنویسی چندمنظوره و سطح بالا، از شیگرایی پشتیبانی کاملی دارد. در این مقاله به بررسی مفاهیم اصلی شیگرایی در پایتون و ارائهی مثالهای کاربردی میپردازیم تا شما با این روش برنامهنویسی قدرتمند و کاربردهای آن در پایتون آشنا شوید.
1.کلاس (Class): کلاس یک قالب یا چارچوب است که برای ایجاد اشیاء استفاده میشود. در واقع کلاسها نقشههای کلی برای ساخت اشیاء هستند و ویژگیها و رفتارهای آنها را تعریف میکنند.
2.شی (Object): شی نمونهای از یک کلاس است. وقتی یک کلاس تعریف میشود، میتوان از آن اشیاء مختلفی ایجاد کرد که هر یک از این اشیاء ویژگیها و رفتارهای خاص خود را دارند.
3.ویژگیها (Attributes): ویژگیها مشخصات و خصوصیات یک شی هستند. این ویژگیها میتوانند دادههایی مانند نام، سن و غیره باشند که با استفاده از متغیرها تعریف میشوند.
4.متدها (Methods): متدها عملکردها و رفتارهای یک شی هستند. این متدها توابعی هستند که در داخل کلاس تعریف میشوند و میتوانند بر روی ویژگیهای کلاس عملیات انجام دهند.
5.وراثت (Inheritance): وراثت به کلاسها اجازه میدهد تا ویژگیها و متدهای یک کلاس دیگر را به ارث ببرند. این ویژگی باعث میشود کدهای تکراری کاهش یابد و قابلیت استفاده مجدد کد افزایش یابد.
6.چندریختی (Polymorphism): چندریختی به کلاسها اجازه میدهد تا متدهای یکسانی را به روشهای مختلف پیادهسازی کنند. این ویژگی باعث میشود که کلاسهای مختلف بتوانند از یک رابط مشترک استفاده کنند.
7.پنهانسازی (Encapsulation): پنهانسازی به معنی مخفی کردن جزئیات پیادهسازی و ارائه یک رابط ساده و قابل دسترسی به کاربران است. این ویژگی به محافظت از دادهها و جلوگیری از دسترسی غیرمجاز به آنها کمک میکند.
بیشتر بخوانید: آموزش پایتون
برای درک بهتر مفاهیم شیگرایی، مثالهای کاربردی از استفاده این مفاهیم در پایتون را بررسی میکنیم.
در این مثال، یک کلاس ساده به نام `Person` تعریف میکنیم که دارای ویژگیهای `name` و `age` و یک متد به نام `greet` است:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
#ایجاد یک شی از کلاس Person
person1 = Person("Alice", 30)
person1.greet() # خروجی: Hello, my name is Alice and I am 30 years old.
```
در این مثال، کلاس `Person` دارای یک سازنده (`__init__`) است که ویژگیهای `name` و `age` را مقداردهی میکند. متد `greet` نیز یک پیام خوشآمدگویی چاپ میکند.
در این مثال، کلاس `Student` را تعریف میکنیم که از کلاس `Person` به ارث میبرد و یک ویژگی جدید به نام `student_id` دارد:
```python
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def show_student_id(self):
print(f"My student ID is {self.student_id}.")
#ایجاد یک شی از کلاس Student
student1 = Student("Bob", 22, "S12345")
student1.greet()
#خروجی: Hello, my name is Bob and I am 22 years old.
student1.show_student_id()
#خروجی: My student ID is S12345.
```
در این مثال، کلاس `Student` ویژگیها و متدهای کلاس `Person` را به ارث میبرد و یک متد جدید به نام `show_student_id` دارد که شناسه دانشجویی را نمایش میدهد.
در این مثال، دو کلاس `Dog` و `Cat` را تعریف میکنیم که هر دو دارای متدی به نام `make_sound` هستند اما هر کدام به روش خاص خود پیادهسازی شدهاند:
```python
class Dog:
def make_sound(self):
print("Woof!")
class Cat:
def make_sound(self):
print("Meow!")
def animal_sound(animal):
animal.make_sound()
#hیجاد اشیاء از کلاسهای Dog و Cat
dog = Dog()
cat = Cat()
#استفاده از چندریختی
animal_sound(dog) #
خروجی: Woof!
animal_sound(cat) #
خروجی: Meow!
```
در این مثال، تابع `animal_sound` میتواند با هر شیای که دارای متد `make_sound` باشد کار کند، بدون توجه به نوع کلاس آن شی.
در این مثال، از پنهانسازی برای مخفی کردن جزئیات پیادهسازی و حفاظت از دادههای داخلی کلاس استفاده میکنیم. ویژگیها و متدهای خصوصی با دو آندرلاین (`__`) در ابتدای نام آنها مشخص میشوند.
```python
class BankAccount:
def __init__(self, account_number, balance):
self.__account_number = account_number
self.__balance = balance
def deposit(self, amount):
if amount > 0:
self.__balance += amount
else:
print("Invalid deposit amount.")
def withdraw(self, amount):
if 0 < amount <= self.__balance:
self.__balance -= amount
else:
print("Invalid withdrawal amount or insufficient funds.")
def get_balance(self):
return self.__balance
#ایجاد یک شی از کلاس BankAccount
account = BankAccount("12345678", 1000)
account.deposit(500)
print(account.get_balance())#
خروجی: 1500
account.withdraw(300)
print(account.get_balance())#
خروجی: 1200
#تلاش برای دسترسی مستقیم به ویژگیهای خصوصی (ناموفق خواهد بود)
print(account.__balance)#
#خطا: AttributeError: 'BankAccount' object has no attribute '__balance'
```
در این مثال، ویژگیهای `__account_number` و `__balance` به عنوان خصوصی تعریف شدهاند و فقط از طریق متدهای کلاس قابل دسترسی و تغییر هستند.
مطالب مرتبط: جاوا اسکریپت یا پایتون؟ بررسی تفاوت ها و کاربردها
شیگرایی در برنامهنویسی مزایای زیادی دارد که برخی از آنها عبارتند از:
1. قابلیت استفاده مجدد کد: با استفاده از کلاسها و وراثت، میتوان کدهای قابل استفاده مجدد نوشت و از تکرار کدها جلوگیری کرد.
2. افزایش خوانایی و نگهداری کد: با تفکیک وظایف به کلاسها و اشیاء مجزا، کدها خواناتر و نگهداری آنها آسانتر میشود.
3. سهولت در مدیریت پروژههای بزرگ: شیگرایی به توسعهدهندگان اجازه میدهد پروژههای بزرگ را به قسمتهای کوچکتر و مدیریتپذیرتر تقسیم کنند.
4. افزایش امنیت و پنهانسازی: با استفاده از پنهانسازی، میتوان از دسترسی غیرمجاز به دادهها و متدهای داخلی کلاسها جلوگیری کرد.
5. سهولت در تست و اشکالزدایی: با استفاده از کلاسها و متدها، میتوان بخشهای مختلف کد را به طور مستقل تست و اشکالزدایی کرد.
شیگرایی یک پارادایم برنامهنویسی قدرتمند و انعطافپذیر است که به توسعهدهندگان کمک میکند تا کدهای سازماندهی شده و قابل نگهداری بنویسند. پایتون با پشتیبانی کامل از شیگرایی، این امکان را فراهم میکند تا برنامههای پیچیده و کاربردی را با استفاده از کلاسها، اشیاء، وراثت، چندریختی و پنهانسازی توسعه دهیم. با استفاده از مثالهای ارائه شده، میتوان به راحتی مفاهیم اصلی شیگرایی را درک و در پروژههای خود به کار گرفت. یادگیری و استفاده از شیگرایی در پایتون نه تنها به افزایش تواناییهای برنامهنویسی شما کمک میکند، بلکه باعث بهبود کیفیت کدها و پروژههایتان نیز خواهد شد.
آموزشگاه پل استار برگزار کننده دوره های مختلف در زمینه هوش مصنوعی، رباتیک و برنامه نویسی برای کودکان است که شما در صورت علاقمندی به این حوزه ها می توانید با مشاوران ما برای شرکت در این دوره در تماس باشید و یا برای آگاهی از شرایط ثبت نام در این دوره ها بر روی لینک آبی قبل کلیک کنید.