OOP in Java Fifth Section | شی گرایی در جاوا قسمت پنجم
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
Enum
Enum یک نوع داده خاص است که برای تعریف مجموعهای از ثابتها (Constants) استفاده میشود.
زمانی از Enum استفاده میکنیم که همه حالتهای ممکن یک موجودیت در زمان کامپایل مشخص باشند؛ مانند رنگها یا وضعیتهای مختلف یک سفارش.
Association
Association یک مفهوم کلی برای نشاندادن رابطه بین دو کلاس مستقل است که با یکدیگر در ارتباط هستند.
این رابطه میتواند بهصورت یکبهیک، یکبهچند یا چندبهچند باشد.
Aggregation
Aggregation نوعی از رابطه Association و از جنس رابطه Has-a است که در آن طول عمر دو شیء به یکدیگر وابسته نیست.
برای مثال، یک کلاس درس دانشآموز دارد، اما با حذف کلاس، دانشآموزان از بین نمیروند.
Composition
Composition شکل قویتری از رابطه Association و از نوع رابطه Part-of است که در آن طول عمر اشیا کاملاً به یکدیگر وابسته است.
اگر شیء اصلی حذف شود، اجزای آن نیز از بین میروند؛ مانند خودرو و موتور آن.
Immutable Object
Immutable Object شیئی است که پس از ساختهشدن، وضعیت یا مقدار فیلدهای آن دیگر قابل تغییر نیست.
این نوع اشیا ذاتاً Thread-safe هستند.
Record
Record قابلیتی در نسخههای جدید جاوا، از نسخه 14 به بعد، است که برای تعریف کلاسهایی استفاده میشود که صرفاً حامل داده هستند.
Recordها بهصورت خودکار بخش زیادی از کدهای تکراری، مانند Constructor و متدهای اصلی، را تولید میکنند.
موارد مهم مصاحبه ای
تفاوت بین == و متد equals چیست؟
عملگر == مرجع (Reference) دو شیء را در حافظه مقایسه میکند.
اما متد equals، در صورتی که Override شده باشد، محتوای فیلدهای دو شیء را با هم مقایسه میکند؛ یعنی مقایسه بر اساس محتوا انجام میدهد، نه صرفاً آدرس حافظه.
چرا با Override کردن equals باید متد hashCode را هم Override کنیم؟
کالکشنهای مبتنی بر هش، مانند HashMap و HashSet، برای عملکرد صحیح به این قرارداد وابستهاند که اگر دو شیء با equals برابر باشند، باید hashCode یکسانی هم داشته باشند.
در غیر این صورت، در ذخیرهسازی و بازیابی دادهها اختلال ایجاد میشود.
تفاوت اصلی Aggregation و Composition در چیست؟
در Aggregation، عمر اجزا مستقل از کل است.
اما در Composition، اجزا بدون وجود شیء اصلی معنا ندارند و با حذف آن، از بین میروند.
مزیت استفاده از Record نسبت به کلاس معمولی چیست؟
مهمترین مزیت 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) نوشته شوند.
