شی گرا بودن در زبانهای برنامهنویسی به معنای استفاده از مفهومهای شیء (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`) باشد. با ترکیب این اصول، برنامهنویسان قادر به ساختاردهی منطق برنامه و مدیریت پیچیدگیها در آن هستند. این اصول در طراحی و توسعهی نرمافزارهای بزرگ و پیچیده به شدت موثر واقع میشوند.