Farzad Afi Logo

FarzadAfi

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

OOP in Java Fourth Section | شی گرایی در جاوا قسمت چهارم

📖توضیحات درس

🎥 این ویدیو قسمت بیستم از بوت‌کمپ رایگان جاواست. 🧩 آموزش شی‌گرایی در جاوا – قسمت چهارم 📝 در این قسمت وارد یکی از مفاهیم کلیدی و عمیق دنیای شی‌گرایی می‌شویم: انتزاعی‌سازی (Abstraction). 🔍 یاد می‌گیریم چطور با مخفی کردن جزئیات پیاده‌سازی و فقط نمایش رفتار مورد نیاز، برنامه‌ای انعطاف‌پذیرتر و قابل نگهداری‌تر بنویسیم. 🧠 سپس با مفاهیم بسیار مهمی مثل ثابت‌ها (Constants)، Interface، و تفاوت کلاس انتزاعی (Abstract Class) با Interface آشنا می‌شیم. 🛠️ در طول مسیر، با تمرین‌های عملی متعدد این مفاهیم رو به‌صورت کاربردی و پروژه‌محور یاد می‌گیریم و درک عمیق‌تری از طراحی شی‌گرا پیدا می‌کنیم. 💻 سورس‌کد این قسمت در گیت‌هاب: 🔗 github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/src/l_oop 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ اگه سوالی داشتی، می‌تونی توی گروه بپرسی؛ خودم یا مربی‌های گروه همراهت هستیم 🎓 بوت‌کمپ رایگان جاوا – آموزش تمرین‌محور برای یادگیری عمیق و ورود به بازار کار.
02:19:31🎯رایگان

📄جزوه

مفاهیم کلیدی

Abstraction فرآیندی که در آن جزئیات پیاده‌سازی از کاربر پنهان شده و فقط عملکردهای اصلی نمایش داده می‌شود. به عبارت دیگر، تمرکز بر روی "چه کاری انجام می‌شود" (What) است نه "چگونه انجام می‌شود" (How).

Abstract Class کلاسی که با کلمه کلیدی abstract تعریف می‌شود و نمی‌توان مستقیماً از آن object ساخت. این کلاس می‌تواند شامل متدهای انتزاعی (بدون بدنه) و متدهای معمولی (با بدنه) باشد.

Interface یک ساختار کاملاً انتزاعی که مجموعه‌ای از رفتارها را به صورت قرارداد تعریف می‌کند. کلاس‌هایی که یک interface را پیاده‌سازی می‌کنند، موظف به اجرای تمامی متدهای آن هستند.

Constant متغیرهایی که مقدار آن‌ها غیرقابل تغییر است. در جاوا معمولاً با ترکیب static final تعریف می‌شوند تا به کلاس وابسته باشند و پس از مقداردهی، تغییر نکنند.

Polymorphism توانایی یک مرجع (Reference) از نوع کلاس والد یا اینترفیس برای اشاره به اشیایی از انواع مختلف فرزندان و اجرای رفتارهای مختص به هر کدام.

نکات مهم مصاحبه‌ای

تفاوت اصلی کلاس Abstract و Interface در چیست؟ کلاس abstract می‌تواند دارای وضعیت (state) یا همان فیلد غیر ثابت و constructor باشد و ارث‌بری در آن تک‌گانه است. اما interface اصولاً برای تعریف رفتارها (Capabilities) استفاده می‌شود، سازنده ندارد و اجازه ارث‌بری چندگانه (Multiple Inheritance) را فراهم می‌کند.

آیا کلاس Abstract می‌تواند Constructor داشته باشد؟ بله، با وجود اینکه نمی‌توان از خود کلاس abstract نمونه‌سازی کرد، اما سازنده آن زمانی که کلاس فرزند instantiate می‌شود، فراخوانی می‌گردد تا فیلدهای والد را مقداردهی کند.

چرا نمی‌توان از یک کلاس Abstract نمونه ساخت؟ زیرا این کلاس ممکن است دارای متدهای abstract باشد که پیاده‌سازی و بدنه ندارند؛ بنابراین جی‌وی‌ام (JVM) نمی‌داند در صورت فراخوانی آن متدها چه عملیاتی را باید انجام دهد.

کاربرد متدهای default در اینترفیس‌ها چیست؟ این متدها در جاوا ۸ معرفی شدند تا بدون شکستن کدهای قبلی (Backward Compatibility)، بتوان متدهای جدیدی را به اینترفیس‌هایی که قبلاً توسط کلاس‌های زیادی پیاده‌سازی شده‌اند، اضافه کرد.

مثال یا سناریوی کاربردی

در ویدیو برای درک بهتر این مفاهیم، سیستم مدیریت پارکینگ طراحی شد:

  1. یک کلاس abstract به نام Vehicle تعریف شد که ویژگی‌های مشترک مانند licensePlate و متدی انتزاعی برای محاسبه هزینه پارکینگ (calculateParkingFee) داشت.
  2. کلاس‌های فرزند مانند Car ،Motorcycle و Truck این کلاس را extend کرده و هر کدام فرمول خاص خود را برای محاسبه هزینه در متد مربوطه پیاده‌سازی کردند.
  3. یک interface به نام Loggable برای ثبت وقایع در کنسول تعریف شد که کلاس‌ها می‌توانستند در کنار ارث‌بری از والد، آن را هم implements کنند.

بیشتر بدانید

IDE Tip در نرم‌افزار IntelliJ، استفاده از کلیدهای ترکیبی Alt + Enter روی نام کلاسی که متدهای انتزاعی را پیاده‌سازی نکرده، به شما کمک می‌کند تا به صورت خودکار قالب متدها را ایجاد کنید.

Naming Convention طبق قراردادهای برنامه‌نویسی، متغیرهای ثابت (static final) باید با حروف بزرگ و جداکننده _ نام‌گذاری شوند (مثلاً: MAX_CAPACITY).