مفهوم شیء‌ گرائی در برنامه نویسی

شی گرا بودن در زبان‌های برنامه‌نویسی به معنای استفاده از مفهوم‌های شیء (Object) است که دارای ویژگی‌ها (Properties) و رفتارها (Behaviors) هستند. این مفهوم به برنامه‌نویس این امکان را می‌دهد که برنامه را به شیء‌های مستقل تقسیم کند و با هم تعامل داشته باشد.

مفاهیم مقدماتی شی گرا:
1. کلاس (Class):
یک الگوی تعریف شیء با ویژگی‌ها و رفتارها.
2. شیء (Object):
نمونه‌ای از یک کلاس که دارای ویژگی‌ها و رفتارهای مشخصی است.


```python
class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
        self.speed = 0

    def accelerate(self):
        self.speed += 10
        print(f"The car is now moving at {self.speed} km/h.")

# ایجاد یک شیء از کلاس Car
my_car = Car("Toyota", "Camry")

# استفاده از رفتارها
my_car.accelerate()
```

مفاهیم پیشرفته شی گرا:
1. انکاپسولیشن (Encapsulation):
محدود کردن دسترسی به ویژگی‌ها و رفتارها به داخل کلاس. 2. وراثت‌بخشی (Inheritance):
ارث‌بری ویژگی‌ها و رفتارها از یک کلاس به کلاس دیگر.
3. پلی‌مورفیسم (Polymorphism):
امکان استفاده از یک رفتار با شکل‌های مختلف.


```python
class ElectricCar(Car):
    def __init__(self, make, model, battery_capacity):
        super().__init__(make, model)
        self.battery_capacity = battery_capacity

    def accelerate(self):
        self.speed += 20
        print(f"The electric car is now moving at {self.speed} km/h.")

# ایجاد یک شیء از کلاس ElectricCar
my_electric_car = ElectricCar("Tesla", "Model S", 100)

# استفاده از رفتارها با پلی‌مورفیسم
my_electric_car.accelerate()
```

با این مفاهیم، برنامه‌نویسان می‌توانند کدهای ساختارمند، قابل توسعه و قابل‌نگهداری بنویسند.
1. انکاپسولیشن (Encapsulation):
- محافظت از داده‌ها با استفاده از private و public در ویژگی‌ها و متدها.
- این اصل کمک می‌کند تا تغییرات در داخل یک کلاس بدون تأثیر بر بخش‌های دیگر برنامه اعمال شود.

2. وراثت‌بخشی (Inheritance):
- امکان استفاده مجدد از کد با به اشتراک گذاشتن ویژگی‌ها و رفتارها از یک کلاس به کلاس دیگر.
- سهولت در توسعه کلاس‌ها با افزودن یا تغییر ویژگی‌ها و رفتارها.

3. پلی‌مورفیسم (Polymorphism):
- امکان استفاده از یک رفتار با شکل‌های مختلف برای اشیاء مختلف.
- سهولت در تعامل با شیء بدون نیاز به جزئیات داخلی آن.

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

1. انکاپسولیشن (Encapsulation):
- در انکاپسولیشن، داده‌ها و عملیات مرتبط به یک شیء در یک واحد محافظت شده جمع می‌شوند. به این ترتیب، تغییرات در داخل کلاس بدون تأثیر بر سایر بخش‌های برنامه اعمال می‌شود.


```python
     class BankAccount:
         def __init__(self, balance):
             self.__balance = balance  # ویژگی خصوصی

         def get_balance(self):
             return self.__balance

         def deposit(self, amount):
             self.__balance += amount
     ```

در اینجا، `__balance` به عنوان یک ویژگی خصوصی (private) استفاده شده است.
2. وراثت‌بخشی (Inheritance):
- این اصل به برنامه‌نویس این امکان را می‌دهد که یک کلاس جدید را بسازد که از ویژگی‌ها و رفتارهای یک کلاس موجود به ارث ببرد.


```python
     class Animal:
         def speak(self):
             pass

     class Dog(Animal):  # ارث‌بری از Animal
         def speak(self):
             return "Woof!"

     class Cat(Animal):  # ارث‌بری از Animal
         def speak(self):
             return "Meow!"
     ```

در اینجا، `Dog` و `Cat` از کلاس `Animal` ارث‌بری کرده‌اند و رفتار `speak` را پیاده‌سازی کرده‌اند.
3. پلی‌مورفیسم (Polymorphism):
- این اصل به برنامه‌نویس این امکان را می‌دهد که یک رفتار را برای اشیاء مختلف پیاده‌سازی کند.


```python
     def animal_sound(animal):
         return animal.speak()

     dog = Dog()
     cat = Cat()

     print(animal_sound(dog))  # خروجی: Woof!
     print(animal_sound(cat))  # خروجی: Meow!
     ```

در اینجا، تابع `animal_sound` می‌تواند برای اشیاء مختلفی از کلاس `Animal` (مانند `Dog` و `Cat`) باشد. با ترکیب این اصول، برنامه‌نویسان قادر به ساختاردهی منطق برنامه و مدیریت پیچیدگی‌ها در آن هستند. این اصول در طراحی و توسعه‌ی نرم‌افزارهای بزرگ و پیچیده به شدت موثر واقع می‌شوند.

  1. ورود به صفحه فارسی