کلاسها و اشیاء (Java OOP)
مقدمه شیءگرایی (OOP): انقلابی در دنیای برنامهنویسی 🏗️☕
برنامهنویسی شیءگرا یا Object-Oriented Programming روشی از برنامهنویسی است که بر اساس "اشیاء" (Objects) بنا شده است. در این روش، ما به جای تمرکز روی توابع و منطقِ خطی، روی دادهها و موجودیتها تمرکز میکنیم.
تفاوت برنامهنویسی رویهای (Procedural) و شیءگرا (OOP)
- رویهای: مثل نوشتن یک "دستور پخت" است؛ مرحله به مرحله پیش میرویم (مثل کدهایی که تا الان نوشتیم).
- شیءگرا: مثل ساختن یک "ماشین" است؛ قطعات مختلف (اشیاء) را میسازیم که هر کدام ویژگی و رفتار خود را دارند و با هم تعامل میکنند.
ارکان چهارگانه OOP 🏛️
شیءگرایی بر ۴ ستون اصلی استوار است که در این فصل با آنها آشنا میشویم:
- Encapsulation (کپسولهسازی): مخفی کردن جزئیات داخلی و نمایش فقط موارد لازم.
- Inheritance (وراثت): انتقال ویژگیهای یک کلاس به کلاس دیگر برای جلوگیری از تکرار.
- Polymorphism (چندریختی): توانایی یک موجودیت برای ظاهر شدن در چندین شکل مختلف.
- Abstraction (انتزاع): تمرکز روی "چه کاری انجام میشود" به جای "چگونه انجام میشود".
مثال عینی:
فرض کنید یک "کلاس" به نام Fruit داریم. اشیایی که از روی این کلاس ساخته میشوند میتوانند Apple، Banana و Mango باشند. همگی میوه هستند اما هر کدام رنگ و طعم خاص خود را دارند.
بخش تخصصی: مهندسی شیءگرایی و مدیریت حافظه 🏗️💎
در این بخش، به مفاهیمی میپردازیم که برای درک فیزیکیِ اتفاقاتِ پشت صحنه در جاوا ضروری هستند.
۱. کالبدشکافی شیء در حافظه Heap
زمانی که شما با دستور new یک شیء میسازید، جاوا بخشی از حافظه Heap را به آن اختصاص میدهد. هر شیء دارای یک "Header" است که شامل اطلاعات مدیریتی جاوا (مثل اطلاعات Garbage Collection) است و سپس فیلدها و دادههای شیء قرار میگیرند. متغیرِ شما در واقع فقط یک "آدرس" یا رفرنس به این منطقه از حافظه را در خود دارد.
۲. مدیریت چرخه عمر اشیاء (Garbage Collection)
برخلاف زبانهایی مثل ++C، در جاوا شما نیازی به حذف دستی اشیاء ندارید. وقتی هیچ متغیری به یک شیء اشاره نکند (مثلاً ریفرنس آن null شود)، آن شیء "یتیم" میشود. Garbage Collector به صورت خودکار این اشیاء را شناسایی کرده و حافظه آنها را برای استفادههای بعدی آزاد میکند.
۳. کدهای تمیز: جداسازی State و Behavior
یک کلاس خوب، کلاسی است که وضعیت (Attributes) را از رفتار (Methods) به درستی تفکیک کند. متغیرهای کلاس باید فقط دادههایی را نگه دارند که ذاتِ آن موجودیت را تعریف میکنند. افراط در تعریف Attributes باعث سنگین شدن اشیاء و پیچیدگی در تستنویسی میشود.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
در شیءگرایی، به نقشه یا الگوی ساختِ اشیاء چه میگویند؟ خروجی برنامه را برابر با پاسخ صحیح (به انگلیسی و حروف کوچک) قرار دهید.
public class Main {
public static void main(String[] args) {
System.out.println("class");
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.