OOP in Java Fifth Section | شی گرایی در جاوا قسمت پنجم
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
Enum یک نوع داده خاص که برای تعریف مجموعهای از ثوابت (Constants) به کار میرود. زمانی استفاده میشود که تمام حالتهای ممکن یک موجودیت در زمان کامپایل مشخص باشد (مانند رنگها یا وضعیتهای یک سفارش).
Association یک مفهوم کلی برای نشان دادن رابطه بین دو کلاس مستقل که با هم در ارتباط هستند. این رابطه میتواند یکبهیک، یکبه-چند یا چندبه-چند باشد.
Aggregation نوعی از رابطه Association (رابطه Has-a) که در آن عمر دو آبجکت به هم وابسته نیست. به عنوان مثال، یک کلاس درس دانشآموز دارد، اما با حذف کلاس، دانشآموزان از بین نمیروند.
Composition شکل قویتری از رابطه Association (رابطه Part-of) که در آن عمر آبجکتها کاملاً به هم وابسته است. اگر کلاس اصلی حذف شود، اجزای آن هم از بین میروند (مانند خودرو و موتور آن).
Immutable Object آبجکتی که پس از ساخته شدن، حالت یا مقادیر فیلدهای آن قابل تغییر نباشد. این آبجکتها ذاتاً Thread-safe هستند.
Record قابلیتی در نسخههای جدید جاوا (از نسخه ۱۴) برای تعریف کلاسهایی که صرفاً حامل داده هستند. Recordها به طور خودکار کدهای تکراری مانند Constructor و متدهای اصلی را تولید میکنند.
موارد مهم مصاحبه ای
تفاوت بین == و متد equals چیست؟
عملگر == رفرنسهای دو آبجکت را در حافظه مقایسه میکند، اما متد equals (در صورت Override شدن) محتوای فیلدها را با هم مقایسه میکند (Deep Comparison).
چرا با Override کردن equals باید متد hashCode را هم Override کنیم؟
چون کالکشنهای مبتنی بر هش (مانند HashMap و HashSet) برای کارکرد درست نیاز دارند که دو آبجکت مساوی، حتماً کد هش یکسانی داشته باشند؛ در غیر این صورت در ذخیرهسازی و بازیابی دادهها اختلال ایجاد میشود.
تفاوت اصلی Aggregation و Composition در چیست؟ در Aggregation، عمر اجزا مستقل از کل است، اما در Composition، اجزا بدون وجود ظرف اصلی معنا ندارند و با حذف آن از بین میروند.
مزیت استفاده از Record نسبت به کلاس معمولی چیست؟
کاهش شدید کدهای تکراری (Boilerplate Code). جاوا برای یک Record به صورت خودکار Constructor ،equals ،hashCode ،toString و Getterها را میسازد.
سناریو واقعی
سناریوی مدیریت وضعیت سفارش با Enum:
به جای استفاده از String برای ذخیره وضعیت سفارش (که ممکن است باعث خطای تایپی شود)، از یک Enum به نام OrderStatus با مقادیر NEW, PROCESSING, SHIPPED, DELIVERED استفاده میکنیم. این کار باعث میشود در زمان کدنویسی، فقط بتوانیم از همین حالات تعریف شده استفاده کنیم و از بروز خطاهای منطقی در زمان اجرا (Runtime) جلوگیری شود.
بیشتر بدانید
IDE Tip
در محیط IntelliJ IDEA، با استفاده از کلیدهای ترکیبی Alt + Insert میتوانید منوی Generate را باز کرده و به سرعت Getter ،Setter ،Constructor و متدهای equals را تولید کنید.
Java Convention
پیشنهاد میشود نام ثابتها در Enum با حروف بزرگ (Capital Letters) نوشته شوند.
