🎯

آموزش مقدماتی شیءگرایی (OOP)

در کمتر از ۱۵ دقیقه، مفاهیم پایه شیءگرایی را یاد بگیرید. کلاس، شیء، وراثت، چندریختی و کپسوله‌سازی — با مثال‌های ساده.

۱۵ دقیقه مقدماتی رایگان
پیشرفت یادگیری: ۰ از ۶ مفهوم ۰٪

۱ شیءگرایی (OOP) چیست؟

برنامه‌نویسی شیءگرا (OOP) یک سبک برنامه‌نویسی است که در آن برنامه از «اشیاء» ساخته می‌شود. هر شیء هم داده دارد (ویژگی‌ها) و هم رفتار (متدها).

این سبک برخلاف برنامه‌نویسی رویه‌ای است که در آن فقط توابع و متغیرهای جدا وجود دارند. OOP به شما کمک می‌کند برنامه‌های بزرگ را به بخش‌های کوچک و قابل مدیریت تقسیم کنید.

مثال ساده: فرض کنید یک ماشین دارید. ماشین یک شیء است. ویژگی‌هایش: رنگ، مدل، سرعت. رفتارش: حرکت کردن، ترمز کردن. در OOP، ماشین یک «کلاس» است و ماشین شما یک «شیء» از آن کلاس.

۲ کلاس (Class) و شیء (Object)

کلاس یک «قالب» یا «طرح» است که ویژگی‌ها و رفتارهای یک موجودیت را تعریف می‌کند. شیء یک نمونهٔ واقعی از آن کلاس است.

مثال با پایتون:

# تعریف کلاس
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"من {self.name} هستم، {self.age} ساله")

# ساخت شیء
s1 = Student("علی", 20)
s1.introduce()
# خروجی: من علی هستم، 20 ساله
نکته: در پایتون، __init__ «سازنده» (constructor) است که هنگام ساخت شیء اجرا می‌شود. self به خود شیء اشاره می‌کند.

۳ کپسوله‌سازی (Encapsulation)

کپسوله‌سازی یعنی مخفی کردن جزئیات داخلی یک شیء و فقط نمایش آنچه لازم است. این کار از دسترسی غیرمجاز به داده‌ها جلوگیری می‌کند.

مثال با پایتون:

# کپسوله‌سازی با _ و __
class BankAccount:
    def __init__(self, balance):
        self.__balance = balance # خصوصی (private)

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def get_balance(self):
        return self.__balance

acc = BankAccount(1000)
acc.deposit(500)
print(acc.get_balance()) # 1500
# acc.__balance → خطا (دسترسی مستقیم ممنوع)
قانون: در پایتون، _name یک قرارداد «محافظت‌شده» است و __name یک «خصوصی» واقعی. در زبان‌های دیگر (مثل Java) از private و public استفاده می‌شود.

۴ وراثت (Inheritance)

وراثت به یک کلاس اجازه می‌دهد ویژگی‌ها و متدهای کلاس دیگری را به ارث ببرد. این کار از تکرار کد جلوگیری می‌کند.

مثال با پایتون:

# کلاس پایه
class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return "سلام، " + self.name

# کلاس فرزند (ارث‌بری از Person)
class Student(Person):
    def __init__(self, name, field):
        super().__init__(name) # فراخوانی سازنده والد
        self.field = field

    def study(self):
        return self.name + " در حال مطالعه " + self.field

s = Student("مریم", "برنامه‌نویسی")
print(s.greet()) # از والد به ارث برده
print(s.study()) # متد جدید
نکته: super() به کلاس والد اشاره می‌کند. با آن می‌توانید متدهای والد را فراخوانی کنید.

۵ چندریختی (Polymorphism)

چندریختی یعنی یک متد می‌تواند در کلاس‌های مختلف رفتار متفاوتی داشته باشد. به عبارت ساده: «یک نام، چند شکل».

مثال با پایتون:

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "واق واق!"

class Cat(Animal):
    def sound(self):
        return "میو میو!"

# استفاده
for animal in [Dog(), Cat()]:
    print(animal.sound())
# واق واق!
# میو میو!
نکته: در این مثال، متد sound در هر کلاس رفتار متفاوتی دارد. اما از دید بیرونی، همه‌شان یک متد sound دارند.

۶ انتزاع (Abstraction)

انتزاع یعنی تمرکز روی «چه کاری» انجام می‌شود، نه «چطور». شما فقط با «رابط» کار می‌کنید و جزئیات پیاده‌سازی مخفی می‌ماند.

مثلاً وقتی با ماشین رانندگی می‌کنید، نیازی نیست بدانید موتور چطور کار می‌کند. فقط پدال گاز را فشار می‌دهید.

مثال با پایتون:

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 ** 2

c = Circle(5)
print(c.area()) # 78.5
نکته: کلاس انتزاعی (Abstract) را نمی‌توان مستقیماً شیء ساخت. باید ارث‌بری شود و متدهایش پیاده‌سازی شوند.

مثال تعاملی — کلاس دانشجو

با وارد کردن نام و رشته، یک «شیء» از کلاس دانشجو ساخته می‌شود. ببینید هر شیء چطور ویژگی‌های خودش را دارد.

هنوز شیئی ساخته نشده. اول یک نام و رشته وارد کنید.

آزمون کوتاه

۳ سوال — دانش خود را بسنجید!

۱) در شیءگرایی، «کلاس» چه چیزی است؟
الف یک نمونهٔ واقعی
ب یک قالب برای ساخت شیء
ج یک متغیر سراسری
۲) کدام مفهوم به «مخفی کردن جزئیات داخلی» اشاره دارد؟
الف وراثت (Inheritance)
ب کپسوله‌سازی (Encapsulation)
ج چندریختی (Polymorphism)
۳) کدام گزینه دربارهٔ «وراثت» درست است؟
الف کلاس فرزند، ویژگی‌های والد را به ارث می‌برد
ب کلاس فرزند، والد را حذف می‌کند
ج وراثت فقط در پایتون وجود دارد
📚

ادامهٔ مسیر یادگیری

مفاهیم پایه شیءگرایی را یاد گرفتید؟ حالا جزوه‌های کامل کالاکن را برای تعمیق دانش‌تان دانلود کنید.

جزوه‌ها رایگان — برای اعضای کالاکن