کلاس چکیده در مقابل رابط
کلاس Abstract و Interface دو ساختار شی گرا هستند که در بسیاری از زبان های برنامه نویسی شی گرا مانند جاوا یافت می شوند. کلاس Abstract را می توان به عنوان یک نسخه انتزاعی از یک کلاس معمولی (بتنی) در نظر گرفت، در حالی که یک رابط را می توان به عنوان ابزاری برای اجرای یک قرارداد در نظر گرفت. کلاس انتزاعی کلاسی است که نمی توان مقداردهی اولیه کرد اما می توان آن را گسترش داد. رابط نوعی است که باید توسط کلاس های دیگر پیاده سازی شود. در جاوا، کلاس های Abstract با استفاده از کلمه کلیدی Abstract اعلام می شوند، در حالی که کلمه کلیدی رابط برای تعریف یک رابط استفاده می شود.
کلاس انتزاعی چیست؟
معمولاً، کلاس های Abstract، که به عنوان کلاس های پایه Abstract (ABC) نیز شناخته می شوند، نمی توانند نمونه سازی شوند (نمونه ای از آن کلاس نمی تواند ایجاد شود). بنابراین، کلاس های Abstract تنها زمانی معنادار هستند که زبان برنامه نویسی از وراثت پشتیبانی کند (توانایی ایجاد کلاس های فرعی از گسترش یک کلاس). کلاس های انتزاعی معمولاً یک مفهوم یا موجودیت انتزاعی را با اجرای جزئی یا بدون اجرا نشان می دهند. بنابراین، کلاسهای Abstract بهعنوان کلاسهای والد عمل میکنند که کلاسهای فرزند از آنها مشتق میشوند تا کلاس فرزند، ویژگیهای ناقص کلاس والد را به اشتراک بگذارد و قابلیتهایی برای تکمیل آنها اضافه شود.
کلاس های Abstract ممکن است حاوی متدهای Abstract باشند. زیر کلاس هایی که یک کلاس انتزاعی را گسترش می دهند ممکن است این متدهای Abstract (ارثی) را پیاده سازی کنند. اگر کلاس فرزند تمام این متدهای Abstract را پیاده سازی کند، یک کلاس مشخص است. اما اگر اینطور نباشد، کلاس فرزند نیز به کلاس Abstract تبدیل می شود. معنی همه اینها این است که وقتی برنامه نویس کلاسی را به عنوان Abstract معرفی می کند، می گوید که کلاس ناقص خواهد بود و دارای عناصری است که باید توسط زیر کلاس های ارثی تکمیل شوند.این یک راه خوب برای ایجاد قرارداد بین دو برنامه نویس است که کار در توسعه نرم افزار را ساده می کند. برنامه نویسی که برای ارث بردن کد می نویسد، باید دقیقاً از تعاریف روش پیروی کند (اما البته می تواند پیاده سازی خود را داشته باشد).
رابط چیست؟
اینترفیس یک نوع انتزاعی است که برای تعیین قراردادی استفاده می شود که باید توسط کلاس هایی که آن رابط را پیاده سازی می کنند، پیاده سازی شود. کلمه کلیدی رابط برای تعریف یک رابط و کلمه کلیدی Implements برای پیاده سازی یک رابط توسط یک کلاس (در زبان برنامه نویسی جاوا) استفاده می شود. معمولاً یک رابط فقط شامل امضاهای متد و اعلانهای ثابت است. هر رابطی که یک اینترفیس خاص را پیاده سازی می کند باید تمام متدهای تعریف شده در اینترفیس را پیاده سازی کند یا باید به عنوان یک کلاس انتزاعی اعلان شود. در جاوا، نوع مرجع شی را می توان به عنوان یک نوع رابط تعریف کرد. اما آن شی یا باید تهی باشد یا باید یک شی از یک کلاس را در خود جای دهد که آن رابط خاص را پیاده سازی می کند.با استفاده از کلیدواژه Implements در جاوا، می توانید چندین رابط را در یک کلاس پیاده سازی کنید.
تفاوت بین کلاس Abstract و Interface چیست؟
کلاس های انتزاعی معمولاً یک مفهوم انتزاعی یا یک موجودیت را با اجرای جزئی یا بدون اجرا نشان می دهند. از طرف دیگر، یک رابط یک نوع انتزاعی است که برای تعیین قراردادی که باید توسط کلاس ها پیاده سازی شود، استفاده می شود. کلاس های انتزاعی باید به ارث برده شوند (یا بسط داده شوند)، در حالی که رابط ها باید پیاده سازی شوند. کلاس های انتزاعی ممکن است حاوی متدهای انتزاعی باشند، در حالی که یک رابط فقط باید شامل متدهای انتزاعی باشد. کلاس های انتزاعی می توانند شامل هر متغیری باشند، اما رابط ها فقط می توانند ثابت ها را تعریف کنند. یک کلاس نمی تواند از بیش از یک کلاس انتزاعی ارث بری کند اما می تواند چندین رابط را پیاده سازی کند. یک رابط نمی تواند رابط دیگری را پیاده سازی کند. با این حال، یک رابط می تواند یک کلاس را گسترش دهد.