برنامهنویسی شیءگرا (OOP)

برنامهنویسی شیءگرا (OOP): توضیح کامل و سادهای از برنامهنویسی شیءگرا (Object-Oriented Programming یا OOP) را آوردهام — از مفاهیم پایه تا اصول پیشرفته، همراه با مثالها و کاربردها 👇
🧩 برنامهنویسی شیءگرا چیست؟
برنامهنویسی شیءگرا (OOP) یک سبک برنامهنویسی است که بهجای تمرکز بر روی توابع و دادههای جدا، روی اشیاء (Objects) تمرکز دارد.
هر شیء در واقع ترکیبی از:
- دادهها (Attributes یا Properties)
- و رفتارها (Methods یا Functions)
است.
🎯 هدف OOP چیست؟
هدف اصلی OOP این است که:
- کد قابلفهمتر، قابلتوسعهتر و قابلنگهداریتر باشد.
- برنامه را به بخشهای کوچکتر و مستقل تقسیم کنیم (ماژولار بودن).
- از کدنویسی تکراری (Code Duplication) جلوگیری کنیم.
🧱 چهار اصل اصلی برنامهنویسی شیءگرا
۱. Encapsulation (کپسولهسازی)
یعنی پنهان کردن جزئیات داخلی یک کلاس از سایر قسمتهای برنامه.
بهعبارت سادهتر: دادهها را در داخل “کپسول” نگه میداریم تا از دستکاری مستقیم جلوگیری شود.
📘 مثال در Python:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # خاصیت خصوصی
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
برنامهنویسی شیءگرا (OOP): اینجا __balance فقط از داخل کلاس قابلدسترسی است.
۲. Inheritance (وراثت)
اجازه میدهد کلاسها از کلاسهای دیگر ویژگی و رفتار به ارث ببرند.
📘 مثال:
class Animal:
def speak(self):
print("Some sound")
class Dog(Animal):
def speak(self):
print("Woof!")
dog = Dog()
dog.speak() # خروجی: Woof!
کلاس Dog از Animal ارثبری کرده و تابع را بازنویسی (Override) کرده است.
۳. Polymorphism (چندریختی)
به این معناست که یک متد میتواند رفتارهای مختلفی بر اساس نوع شیء داشته باشد.
📘 مثال:
class Cat:
def speak(self):
print("Meow!")
class Dog:
def speak(self):
print("Woof!")
animals = [Cat(), Dog()]
for animal in animals:
animal.speak()
در اینجا هر حیوان با متد speak() رفتار متفاوتی دارد — این یعنی چندریختی.
۴. Abstraction (انتزاع)
یعنی فقط بخشهای مهم را نشان دهیم و جزئیات پیچیده را پنهان کنیم.
در بسیاری از زبانها با کلاسها یا متدهای انتزاعی (abstract classes/methods) انجام میشود.
📘 مثال (در Python با abc):
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, r):
self.r = r
def area(self):
return 3.14 * self.r * self.r

🧰 مفاهیم کلیدی دیگر در OOP
| مفهوم | توضیح |
|---|---|
| Class (کلاس) | قالب یا طرح کلی برای ساخت اشیاء |
| Object (شیء) | نمونهای از کلاس (instance) |
| Constructor (سازنده) | تابعی که هنگام ایجاد شیء اجرا میشود |
| Destructor (تخریبکننده) | تابعی که هنگام از بین رفتن شیء اجرا میشود |
| Overriding | بازنویسی متدهای کلاس والد در کلاس فرزند |
| Overloading | تعریف چند متد با نام یکسان ولی پارامترهای متفاوت |
💡 مزایای برنامهنویسی شیءگرا
- ✅ کدنویسی ماژولار و قابلمدیریت
- ✅ قابلیت استفادهٔ مجدد از کد (Code Reusability)
- ✅ افزایش امنیت و کنترل دادهها
- ✅ توسعه و نگهداری آسانتر برنامهها
- ✅ امکان گسترش برنامه بدون تغییر زیاد در ساختار اصلی
⚠️ معایب OOP
- ❌ طراحی اولیه سختتر و زمانبرتر از برنامهنویسی تابعی
- ❌ مصرف حافظه بیشتر (به دلیل ساخت اشیاء متعدد)
- ❌ برای پروژههای کوچک ممکن است بیش از حد پیچیده باشد
- ❌ نیاز به درک دقیق مفاهیم پایه (کپسولهسازی، وراثت و غیره)
🚀 زبانهای برنامهنویسی شیءگرا
| زبان | ویژگی |
|---|---|
| Python | یادگیری ساده، انعطافپذیر |
| Java | کلاسیکترین زبان OOP |
| C++ | ترکیبی از OOP و برنامهنویسی رویهای |
| C# | پرکاربرد در ویندوز و Unity |
| Ruby | کاملاً شیءگرا (حتی عدد و رشته هم شیء هستند) |
| Swift / Kotlin | نسخههای مدرنتر برای موبایل |
🧮 کاربردهای OOP در دنیای واقعی
- طراحی بازیها (مثلاً شخصیتها، سلاحها و محیطها بهصورت کلاس)
- نرمافزارهای مدیریتی (کاربران، محصولات، سفارشها)
- اپلیکیشنهای موبایل (مدلسازی موجودیتها)
- توسعهٔ وب (فریمورکهایی مثل Django، Laravel، ASP.NET)
اگر بخواهی، میتوانم در قدم بعدی برایت یک مثال عملی کامل از یک برنامهی شیءگرا (مثلاً «مدیریت کتابخانه» یا «فروشگاه آنلاین ساده») بنویسم تا کاملاً مفاهیم را در عمل ببینی.
دوست داری در کدام زبان بنویسم؟ (Python، Java، C++ یا زبان دیگر؟)



