دوره‌ها / JAVA / سطح دسترسی/اصلاح‌گرها (Java Modifiers)

سطح دسترسی/اصلاح‌گرها (Java Modifiers)

15 دقیقه Article

اصلاح‌کننده‌ها (Modifiers): کنترل دسترسی 🛡️🔑

اصلاح‌کننده‌ها کلماتی کلیدی هستند که مشخص می‌کنند چه کسی و از کجا اجازه دسترسی به کلاس‌ها، ویژگی‌ها و متدها را دارد.

۱. انواع اصلاح‌کننده‌های دسترسی (Access Modifiers)

  • public: از همه جا قابل دسترسی است.
  • private: فقط و فقط در داخل همان کلاس قابل دسترسی است (بسیار مهم برای امنیت).
  • protected: در همان پکیج و در کلاس‌های فرزند قابل دسترسی است.
  • Default: اگر چیزی ننویسید، فقط در همان پکیج قابل دسترسی است.

۲. اصلاح‌کننده‌های غیر دسترسی (Non-Access Modifiers) ⚙️

این‌ها ویژگی‌های دیگری را به کد اضافه می‌کنند:

  • final: کلاس قابل ارث‌بری نیست، متد قابل بازنویسی نیست و متغیر غیرقابل تغییر است.
  • static: متعلق به کلاس است نه به شیء.
  • abstract: مخصوص کلاس‌ها و متدهای انتزاعی (که در ادامه فصل خواهیم دید).
چرا Private؟ اگر متغیرهای حساس (مثل موجودی حساب) را public بگذارید، هر کسی می‌تواند از بیرون آن را دستکاری کند. با private کردن، شما کنترل کامل روی داده‌ها دارید.

مثال Private:

{code_block('class Person {\n private String name; // غیرقابل دسترسی از بیرون\n}')}
ترکیب: شما می‌توانید چندین modifier را با هم استفاده کنید، مثلاً: public static final int MAX_LIMIT = 100;
قاعده کلی: همیشه سعی کنید با private شروع کنید و فقط اگر واقعاً نیاز بود، دسترسی را بازتر کنید.
<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 باعث سنگین شدن اشیاء و پیچیدگی در تست‌نویسی می‌شود.

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

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

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

استفاده از Final Easy
سوال تمرین

یک متغیر int ثابت (غیرقابل تغییر) به نام CODE با مقدار 99 در کلاس Secret تعریف کنید.

پاسخ تمرین
JAVA
class Secret {
  public final int CODE = 99;
}

public class Main {
  public static void main(String[] args) {
    Secret s = new Secret();
    System.out.println(s.CODE);
  }
}

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

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