دوره‌ها / JAVA / کلاس‌ها/اشیاء (Java Classes/Objects)

کلاس‌ها/اشیاء (Java Classes/Objects)

15 دقیقه Article

کلاس‌ها و اشیاء: الگو و نمونه 🏗️✨

برای درک کلاس و شیء، تصور کنید یک "نقشه مهندسی" برای ساخت ساختمان دارید. نقشه خودش ساختمان نیست، بلکه توصیفی از آن است. جاده‌ها و دیوارهایی که بر اساس آن نقشه ساخته می‌شوند، "اشیاء" واقعی هستند.

۱. کلاس (Class) چیست؟

کلاس یک Template یا الگوی کدنویسی است که ویژگی‌ها (Attributes) و رفتارهای (Methods) یک موجودیت را تعریف می‌کند.

{code_block('public class Car {\n int speed;\n String model;\n}')}

۲. شیء (Object) چیست؟ 🏎️

شیء یک نمونه (Instance) واقعی از کلاس است که در حافظه ساخته می‌شود. هر شیء مقادیرِ مخصوص به خودش را دارد.

{code_block('public class Main {\n public static void main(String[] args) {\n Car myCar = new Car(); // ساخت شیء\n myCar.speed = 120;\n System.out.println(myCar.speed);\n }\n}')}
new: کلمه کلیدی new برای ایجاد یک شیء جدید در حافظه استفاده می‌شود.

۳. داشتن چندین شیء

شما می‌توانید از روی یک کلاس، هزاران شیء مستقل بسازید. تغییر در یکی، تاثیری روی دیگری ندارد:

{code_block('Car bmw = new Car();\nCar benz = new Car();\nbmw.speed = 200;\nbenz.speed = 180;')}

توصیه مهندسی:

معمولاً برای نظم بهتر، کلاس‌ها را در فایل‌های جداگانه تعریف می‌کنند. نام فایل باید دقیقاً مشابه نام کلاس باشد.

نکته فنی: کلاس‌ها انواع داده ارجاعی (Reference Types) هستند. یعنی متغیر myCar خودِ ماشین نیست، بلکه آدرسِ محل استقرار ماشین در حافظه است.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی شیءگرایی و مدیریت حافظه 🏗️💎

در این بخش، به مفاهیمی می‌پردازیم که برای درک فیزیکیِ اتفاقاتِ پشت صحنه در جاوا ضروری هستند.

۱. کالبدشکافی شیء در حافظه Heap

زمانی که شما با دستور new یک شیء می‌سازید، جاوا بخشی از حافظه Heap را به آن اختصاص می‌دهد. هر شیء دارای یک "Header" است که شامل اطلاعات مدیریتی جاوا (مثل اطلاعات Garbage Collection) است و سپس فیلدها و داده‌های شیء قرار می‌گیرند. متغیرِ شما در واقع فقط یک "آدرس" یا رفرنس به این منطقه از حافظه را در خود دارد.

۲. مدیریت چرخه عمر اشیاء (Garbage Collection)

برخلاف زبان‌هایی مثل ++C، در جاوا شما نیازی به حذف دستی اشیاء ندارید. وقتی هیچ متغیری به یک شیء اشاره نکند (مثلاً ریفرنس آن null شود)، آن شیء "یتیم" می‌شود. Garbage Collector به صورت خودکار این اشیاء را شناسایی کرده و حافظه آن‌ها را برای استفاده‌های بعدی آزاد می‌کند.

۳. کدهای تمیز: جداسازی State و Behavior

یک کلاس خوب، کلاسی است که وضعیت (Attributes) را از رفتار (Methods) به درستی تفکیک کند. متغیرهای کلاس باید فقط داده‌هایی را نگه دارند که ذاتِ آن موجودیت را تعریف می‌کنند. افراط در تعریف Attributes باعث سنگین شدن اشیاء و پیچیدگی در تست‌نویسی می‌شود.

نکته پایانی: شیءگرایی فقط یک روش کدنویسی نیست؛ بلکه روشی برای "مدل‌سازی جهان واقعی" در دنیای دیجیتال است. هر چقدر مدل‌سازی شما دقیق‌تر باشد، نرم‌افزار شما پایدارتر خواهد بود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

ساخت اولین شیء Easy
سوال تمرین

یک کلاس به نام Phone از قبل تعریف شده است. در متد main، یک شیء از این کلاس به نام myPhone با استفاده از new بسازید.

پاسخ تمرین
JAVA
class Phone {
  String brand = "Apple";
}

public class Main {
  public static void main(String[] args) {
    Phone myPhone = new Phone();
    System.out.println(myPhone.brand);
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.