🔹برنامهنویسی شیگرا Object-Oriented Programming - OOP چیست؟
در برنامهنویسی شیگرا، کد به شیها (objects) و کلاسها (classes) تقسیم میشود. هر شیء در OOP دارای وضعیت (متغیرها) و رفتار (متدها) است. این به ما این امکان را میدهد که موضوعات را به صورت واقعیتمحور (object-centric) شرح دهیم، بجای اینکه به شیوه ساختارمحور (procedural) عمل کنیم.
تصور کنید یک برنامه مدیریت کتابخانه دارید. در برنامهنویسی شیگرا، شما میتوانید یک کلاس "کتاب" ایجاد کنید که ویژگیهایی مانند عنوان، نویسنده، و شماره شابک را دارد. سپس شما میتوانید از این کلاس برای ایجاد اشیاء مختلفی مانند "کتاب" یا "رمان گذر" استفاده کنید.
مثالی از کد پایتون بصورت شی گرا (OOP) :
class Book:
def init(self, title, author, ISBN):
self.title = title
self.author = author
self.ISBN = ISBN
def display_info(self):
print(f"Title: {self.title}, Author: {self.author}, ISBN: {self.ISBN}")
first_book = Book("The Catcher in the Rye", "J.D. Salinger", "9780316769488")
second_book = Book("To Kill a Mockingbird", "Harper Lee", "0061120081")
first_book.display_info()
second_book.display_info()
🔸 برنامهنویسی رویهای Procedural Programming چیست؟
در برنامهنویسی رویهای، برنامه به صورت مجموعهای از رویهها یا توالیهای دستورات سازماندهی میشود. تمرکز اصلی بر روی دستورات و توالی اجرا قرار دارد، و مفاهیمی مانند تقسیم مسئله به اجزای کوچکتر یا تجزیه و تحلیل (decomposition) از اهمیت زیادی برخوردارند.
اگر در برنامهنویسی رویهای بخواهید یک برنامه برای محاسبه میانگین اعداد در یک لیست بنویسید، ممکن است شما یک توالی از دستورات برای جمع زدن اعداد لیست و سپس تقسیم بر تعداد اعضا را بنویسید.
کد پایتون بصورت رویه ای (Procedural Programming):
def calculate_average(num_list):
total = sum(num_list)
count = len(num_list)
average = total / count
return average
my_list = [3, 5, 7, 11, 13, 17]
result = calculate_average(my_list)
print(f"The average is: {result}")
🔺تفاوت برنامه نویسی شی گرا و برنامه نویسی رویه ای
1. منطق و ساختار:
- OOP: تمرکز بر روی اشیاء و آنچه که انجام میدهند و ویژگیهایشان دارد.
- Procedural: تمرکز بر روی دستورات و توالی اجرا.
2. تجزیه و تحلیل مسئله:
- OOP: به کمک مفاهیم چیدمانی شیء میتوان به ساختار منظمی دست یافت.
- Procedural: با تقسیم مسئله به اجزای کوچکتر و توالی اجرا آنها به رسیدگی میشود.
3. سطح انتزاع (Abstraction):
- OOP: قابلیت انتزاع بالا با استفاده از کلاسها و اشیاء.
- Procedural: سطح کمتری از انتزاع وجود دارد.
4. باز استفاده کد (Code Reusability):
- OOP: کد قابل استفاده مجددی را بوجود میآورد.
- Procedural: کد تکراریتر است و بازاستفاده کمتری دارد.
5. تعمیم (Generalization) و وابستگی (Dependency):
- OOP: میتوان کلاسها را به یکدیگر مرتبط کرد و ارثبری و پلیمرفیسم را پشتیبانی میکند.
- Procedural: این قابلیتها کمتر مورد پشتیبانی قرار میگیرند.
در نهایت، انتخاب بین این دو رویکرد به میزان پیچیدگی پروژه، ساختار و توسعه پذیری برنامه و البته تجربه و توانایی برنامهنویس بستگی دارد.