Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

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

📖توضیحات درس

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

📄جزوه

مفاهیم کلیدی

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