جلسه شماره 21رایگان

OOP in Java Fifth Section | شی گرایی در جاوا قسمت پنجم

01:48:03

توضیحات جلسه

🎥 این ویدیو قسمت بیست و یکم از بوت‌کمپ رایگان جاواست. 🧩 آموزش شی‌گرایی در جاوا – قسمت پنجم 📝 در این قسمت به بررسی مفاهیم تکمیلی شی‌گرایی در جاوا می‌پردازیم؛ مفاهیمی که در دنیای واقعی نرم‌افزار کاربرد مستقیم دارند و در مصاحبه‌های شغلی هم بارها مطرح می‌شن. 🔗 با انواع روابط بین کلاس‌ها مثل Association، Aggregation و Composition آشنا می‌شیم و تفاوت‌های کلیدی اون‌ها رو درک می‌کنیم. ⚙️ سپس سراغ متدهای مهم و پرکاربرد مثل equals()، hashCode() و toString() می‌ریم و می‌بینیم چطور این متدها روی رفتار اشیاء تأثیر می‌گذارن. 💡 همچنین با قابلیت‌های خودکارسازی در IntelliJ IDEA، تفاوت mutable و immutable بودن اشیاء، و در نهایت ساختار record در جاوا آشنا می‌شیم. همه‌ی این موارد با مثال‌های کاربردی و قابل فهم آموزش داده می‌شن. 💻 سورس‌کد این قسمت در گیت‌هاب: 🔗 github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/src/m_oop 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ سوالی داشتی؟ حتماً داخل گروه بپرس؛ من یا مربی‌های گروه کمکت می‌کنیم 🎓 بوت‌کمپ رایگان جاوا – آموزش تمرین‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

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) نوشته شوند.