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