Kahibaro
Discord Login Register

مثال‌های سادهٔ شی‌گرا

چند مثال ساده برای تمرین OOP

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


مثال ۱: کلاس سادهٔ `Person`

هدف: داشتن یک شیء که اطلاعات یک شخص را نگه دارد و بتوانیم با آن کار کنیم.

class Person:
    def __init__(self, name, age):
        self.name = name    # ویژگی (attribute)
        self.age = age      # ویژگی (attribute)
    def introduce(self):
        print(f"سلام، من {self.name} هستم و {self.age} سال دارم.")
# ساخت چند شیء از کلاس Person
p1 = Person("علی", 20)
p2 = Person("نگار", 25)
p1.introduce()
p2.introduce()

نکاتی که می‌توانید تمرین کنید:

مثال ۲: ماشین حساب ساده به شکل کلاس

هدف: تبدیل یک مفهوم آشنا (ماشین‌حساب) به کلاس.

class Calculator:
    def add(self, a, b):
        return a + b
    def sub(self, a, b):
        return a - b
    def mul(self, a, b):
        return a * b
    def div(self, a, b):
        if b == 0:
            print("خطا: تقسیم بر صفر مجاز نیست.")
            return None
        return a / b
calc = Calculator()
print(calc.add(3, 5))   # 8
print(calc.sub(10, 4))  # 6
print(calc.mul(2, 7))   # 14
print(calc.div(10, 2))  # 5.0
print(calc.div(10, 0))  # خطا

ایده برای تمرین:

مثال ۳: کلاس `BankAccount` (حساب بانکی ساده)

هدف: شبیه‌سازی یک حساب بانکی خیلی ساده با واریز، برداشت و نمایش موجودی.

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner        # صاحب حساب
        self.balance = balance    # موجودی اولیه
    def deposit(self, amount):
        if amount <= 0:
            print("مبلغ واریز باید مثبت باشد.")
            return
        self.balance += amount
        print(f"{amount} تومان واریز شد. موجودی جدید: {self.balance}")
    def withdraw(self, amount):
        if amount <= 0:
            print("مبلغ برداشت باید مثبت باشد.")
            return
        if amount > self.balance:
            print("موجودی کافی نیست!")
            return
        self.balance -= amount
        print(f"{amount} تومان برداشت شد. موجودی جدید: {self.balance}")
    def show_balance(self):
        print(f"موجودی حساب {self.owner}: {self.balance} تومان")
acc1 = BankAccount("مریم", 100000)
acc1.show_balance()
acc1.deposit(50000)
acc1.withdraw(200000)   # موجودی کافی نیست
acc1.withdraw(30000)
acc1.show_balance()

تمرین:

مثال ۴: استفاده از وراثت در مثال حیوانات

در این مثال فقط استفادهٔ عملی از وراثت را می‌بینیم (تعریف تئوری قبلاً گفته شده).

class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        print("این حیوان صدای خاص خود را دارد.")
class Dog(Animal):
    def speak(self):
        print(f"{self.name}: هاپ هاپ!")
class Cat(Animal):
    def speak(self):
        print(f"{self.name}: میووو!")
a = Animal("حیوان")
d = Dog("بادی")
c = Cat("پیشی")
a.speak()
d.speak()
c.speak()

ایده‌ها:

مثال ۵: مدیریت فهرست کارها (To-Do) با کلاس

هدف: تمرین کار با فهرست‌ها در کنار کلاس‌ها.

class TodoList:
    def __init__(self):
        self.tasks = []   # فهرست کارها
    def add_task(self, title):
        self.tasks.append({"title": title, "done": False})
        print(f"کار '{title}' اضافه شد.")
    def show_tasks(self):
        if not self.tasks:
            print("هیچ کاری ثبت نشده است.")
            return
        for i, task in enumerate(self.tasks, start=1):
            status = "✓" if task["done"] else "✗"
            print(f"{i}. [{status}] {task['title']}")
    def mark_done(self, index):
        if index < 1 or index > len(self.tasks):
            print("شمارهٔ کار معتبر نیست.")
            return
        self.tasks[index - 1]["done"] = True
        print(f"کار شمارهٔ {index} انجام شده علامت خورد.")
    def remove_task(self, index):
        if index < 1 or index > len(self.tasks):
            print("شمارهٔ کار معتبر نیست.")
            return
        task = self.tasks.pop(index - 1)
        print(f"کار '{task['title']}' حذف شد.")
todo = TodoList()
todo.add_task("مطالعهٔ پایتون")
todo.add_task("ورزش")
todo.show_tasks()
todo.mark_done(1)
todo.show_tasks()
todo.remove_task(2)
todo.show_tasks()

تمرین:

مثال ۶: مدل‌سازی یک کتاب و کتابخانه

در این مثال، چند کلاس با هم کار می‌کنند.

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
        self.is_borrowed = False
    def info(self):
        status = "امانت داده شده" if self.is_borrowed else "در دسترس"
        print(f"«{self.title}» نوشتهٔ {self.author} - وضعیت: {status}")
class Library:
    def __init__(self, name):
        self.name = name
        self.books = []  # فهرست کتاب‌ها
    def add_book(self, book):
        self.books.append(book)
        print(f"کتاب «{book.title}» به کتابخانه اضافه شد.")
    def show_books(self):
        if not self.books:
            print("هیچ کتابی در کتابخانه نیست.")
            return
        print(f"کتاب‌های کتابخانهٔ {self.name}:")
        for book in self.books:
            book.info()
    def borrow_book(self, title):
        for book in self.books:
            if book.title == title:
                if book.is_borrowed:
                    print("این کتاب قبلاً امانت داده شده است.")
                else:
                    book.is_borrowed = True
                    print(f"کتاب «{title}» امانت داده شد.")
                return
        print("کتاب مورد نظر پیدا نشد.")
    def return_book(self, title):
        for book in self.books:
            if book.title == title:
                if not book.is_borrowed:
                    print("این کتاب در حال حاضر امانت داده نشده است.")
                else:
                    book.is_borrowed = False
                    print(f"کتاب «{title}» پس داده شد.")
                return
        print("کتاب مورد نظر پیدا نشد.")
lib = Library("کتابخانهٔ مرکزی")
b1 = Book("پایتون برای مبتدیان", "احمدی")
b2 = Book("مبانی برنامه‌نویسی", "کریمی")
lib.add_book(b1)
lib.add_book(b2)
lib.show_books()
lib.borrow_book("پایتون برای مبتدیان")
lib.show_books()
lib.return_book("پایتون برای مبتدیان")
lib.show_books()

تمرین:

مثال ۷: شبیه‌سازی خیلی ساده بازی نمره

هدف: استفاده از کلاس برای نگهداری وضعیت (state).

class Player:
    def __init__(self, name):
        self.name = name
        self.score = 0
    def add_score(self, points):
        if points < 0:
            print("امتیاز منفی مجاز نیست.")
            return
        self.score += points
        print(f"{self.name} {points} امتیاز گرفت. مجموع: {self.score}")
    def reset(self):
        self.score = 0
        print(f"امتیاز {self.name} ریست شد.")
class Game:
    def __init__(self, player1_name, player2_name):
        self.player1 = Player(player1_name)
        self.player2 = Player(player2_name)
    def show_scores(self):
        print(f"{self.player1.name}: {self.player1.score}")
        print(f"{self.player2.name}: {self.player2.score}")
    def winner(self):
        if self.player1.score > self.player2.score:
            print(f"برنده: {self.player1.name}")
        elif self.player2.score > self.player1.score:
            print(f"برنده: {self.player2.name}")
        else:
            print("بازی مساوی شد.")
game = Game("سارا", "مهدی")
game.player1.add_score(10)
game.player2.add_score(7)
game.show_scores()
game.winner()

تمرین:

پیشنهاد برای تمرین نهایی

۱. یکی از مثال‌های بالا را انتخاب کنید.
۲. حداقل دو ویژگی جدید و دو متد جدید به آن اضافه کنید.
۳. سناریو (داستان) کوتاهی بنویسید که توضیح دهد این کلاس‌ها چه چیزی را در دنیای واقعی مدل می‌کنند.
۴. کد را اجرا کنید و چند ورودی مختلف امتحان کنید.

هر وقت در مثال‌ها احساس راحتی کردید، آماده‌اید که در پروژه‌های کوچک (فصل ۱۷) از OOP به صورت جدی‌تر استفاده کنید.

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!