شیگرایی (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` به عنوان خصوصی تعریف شدهاند و فقط از طریق متدهای کلاس قابل دسترسی و تغییر هستند.
مطلب مرتبط: شی گرایی در c++ چیست
شیگرایی در برنامهنویسی مزایای زیادی دارد که برخی از آنها عبارتند از:
1. قابلیت استفاده مجدد کد: با استفاده از کلاسها و وراثت، میتوان کدهای قابل استفاده مجدد نوشت و از تکرار کدها جلوگیری کرد.
2. افزایش خوانایی و نگهداری کد: با تفکیک وظایف به کلاسها و اشیاء مجزا، کدها خواناتر و نگهداری آنها آسانتر میشود.
3. سهولت در مدیریت پروژههای بزرگ: شیگرایی به توسعهدهندگان اجازه میدهد پروژههای بزرگ را به قسمتهای کوچکتر و مدیریتپذیرتر تقسیم کنند.
4. افزایش امنیت و پنهانسازی: با استفاده از پنهانسازی، میتوان از دسترسی غیرمجاز به دادهها و متدهای داخلی کلاسها جلوگیری کرد.
5. سهولت در تست و اشکالزدایی: با استفاده از کلاسها و متدها، میتوان بخشهای مختلف کد را به طور مستقل تست و اشکالزدایی کرد.
بیشتر بخوانید: شی گرایی در php چیست
جمعبندی
شیگرایی یک پارادایم برنامه نویسی قدرتمند و انعطافپذیر است که به توسعهدهندگان کمک میکند تا کدهای سازماندهی شده و قابل نگهداری بنویسند. پایتون با پشتیبانی کامل از شیگرایی، این امکان را فراهم میکند تا برنامههای پیچیده و کاربردی را با استفاده از کلاسها، اشیاء، وراثت، چندریختی و پنهانسازی توسعه دهیم.
با استفاده از مثالهای ارائه شده، میتوان به راحتی مفاهیم اصلی شیگرایی را درک و در پروژههای خود به کار گرفت. یادگیری و استفاده از شیگرایی در پایتون نه تنها به افزایش تواناییهای برنامهنویسی شما کمک میکند، بلکه باعث بهبود کیفیت کدها و پروژههایتان نیز خواهد شد.
آموزشگاه پل استار برگزار کننده دوره های مختلف در زمینه هوش مصنوعی، رباتیک و برنامه نویسی برای کودکان است که شما در صورت علاقمندی به این حوزه ها می توانید با مشاوران ما برای شرکت در این دوره در تماس باشید و یا برای آگاهی از شرایط ثبت نام در این دوره ها بر روی لینک آبی قبل کلیک کنید.