شنبه, ۸ اردیبهشت, ۱۴۰۳ / 27 April, 2024
تفاوت interface و کلاس های abstract
ابتدا مقدمهای در مورد کلاسهای abstract میآوریم. از کلاسها نمیتوان یک نمونه ساخت؛ اما سوال این است که چرا ما به کلاسهایی نیاز داریم که نمیتوان یک نمونه از آنها ایجاد کرد؟
این کلاسها قابلیت ارث بری دارند، به طور کلی نمیتوان از آنها یک نمونه ایجاد کرد، ولی کلاسهای دیگر میتوانند از آن به ارث برسند.
مزیت این کلاسها این است که سلسله مراتبی برای کلاسهایی که از آن به ارث رسیدهاند مشخص میکند؛ به عبارت سادهتر قراردادی است که تمامی کلاسهای به ارث رسیده از آن را مجبور میکند آن را در سلسله مراتبی خود رعایت کنند.
اما منظور از interfaceچیست؟ همانطور که از اسم آن مشخص است به معنای رابط است، اما چه رابطی؟
در interface هیچ پیادهسازی صورت نمیگیرد؛ در واقع معرفی الگوها بدون بدنه (پیاده سازی) است و مانند یک کلاس abstract عمل میکند که یک قرارداد برای سلسله مراتب کلاسهای مشتق شده مشخص میکند، اما تفاوت عمده آن با یک abstract کلاس در چیست؟
همانطور که میدانید در #C و جاوا مانند++C ارثبری چندگانه نداریم، یعنی یک کلاس میتواند فقط از یک کلاس دیگر به ارث برسد، اما یک کلاس میتواند از چند interface ارثبری داشته باشد.
● اما در نهایت هر دوی اینها چه کمکی به شما میکنند؟
زمانی که شما یک interface معرفی میکنید، در واقع یکسری الگو و خصوصیت تعریف کردهاید که پیادهسازی نشده است، کلاسی که این interface را پیاده میکند، این مزیت را به شما میدهد تا کلاس شما بتواند بخشی از دو کلاس باشد؛ یکی از طریق ارثبری در سلسله مراتب وراثتی کلاسها و دیگری پیادهسازی یک رابط.
اگرچه یک کلاس abstract رفتاری مشابه یک interface دارد، اما ماهیتا یک کلاس بوده و این خصوصیت تعیین میکند در یک کلاس abstract میتواند یک یا چند متد abstract داشته باشد.
به عبارتی دیگر، میتواند مانند یک کلاس در یک سلسله مراتب وراثتی قرار بگیرد و با وجود الگوهای پیادهسازی شده، رفتاری تقریبا شبیه یک کلاس داشته باشد.
اگر یک کلاس abstract همه اعضای خود را به صورت abstract تعریف کرده باشد، دقیقا مانند یک رابط با آن رفتار میشود.
در بالا با برخی شباهتها و تفاوتهای کلاس abstract و interface آشنا شدیم. در زیر برخی از این شباهتها و تفاوتها را به صورت ساختار بندی شده توضیح میدهیم.
● ارثبری چندگانه
یک کلاس میتواند از یک کلاس abstract ارثبری داشته باشد.
یک کلاس میتواند از چند interface به ارث برسد (اصطلاحا چند interface را پیاده میکند).
● پیادهسازی پیشفرض
یک کلاس abstract میتواند دارای یکسری اعضا باشد که پیادهسازی شدهاند و یکسری اعضا که پیادهسازی آنها بر عهده کلاسهایی است که از آن به ارث رسیدهاند. (این اجزا با کلمه کلیدی abstract مشخص میشود).
یک interface هیچ پیادهسازی را شامل نمیشود، بلکه فقط معرفی یک ساختار عملیاتی است.
● دسترسی به اجزا
در یک کلاس abstract میتوان سطوح دسترسی به یک جزء از کلاس را مشخص کرد.
در یک رابط هیچ صحبتی از سطوح دسترسی به میان نمیآید.
● فیلدها و ثابتها
یک کلاس abstract میتواند شامل فیلدها و ثابتهای مختلفی باشد.
یک رابط نمیتواند شامل یک فیلد یا یک ثابت باشد.
● اضافهکردن یک عملیات جدید
براحتی میتوانید یک الگوی خاص به کلاس abstractاضافه کنید، بدون اینکه نیاز داشته باشید در کلاسهای مشتقشده تغییری بدهید.
اگر بخواهید الگویی جدید به یک interface اضافه کنید، باید این متد را پیادهسازی کنید.
همانطور که مشاهده کردید interface و کلاس abstract هریک مزایا و معایب خود را دارد. اینکه کدام در چه جایی میتواند راهحل شما باشد، به عهده شماست.
برای دسترسی به اطلاعات بیشتر میتوانید
به لینک زیر مراجعه کنید:
http://www.codeproject.com/Articles/۱۱۱۵۵/Abstract-Class-versus-Interface
۲ـ http://geekswithblogs.net/mahesh/archive/۲۰۰۶/۰۷/۰۵/۸۴۱۲۰.aspx
۳ـ http://programmingincsharp.com/what-is-the-difference-between-an-abstract-class-and-an-interface-in-c/
امیربهاءالدین سبط الشیخ
نمایندگی زیمنس ایران فروش PLC S71200/300/400/1500 | درایو …
دریافت خدمات پرستاری در منزل
pameranian.com
پیچ و مهره پارس سهند
خرید میز و صندلی اداری
خرید بلیط هواپیما
گیت کنترل تردد
حجاب گشت ارشاد حماس ایران رئیس جمهور پاکستان رئیسی دولت سیزدهم مجلس شورای اسلامی کارگران رهبر انقلاب سریلانکا
کنکور سیل درمان تهران هواشناسی قم سازمان سنجش فضای مجازی اصفهان شهرداری تهران پلیس زنان
دلار قیمت دلار بانک مرکزی قیمت خودرو آفریقا تورم قیمت طلا بازار خودرو سایپا ایران خودرو ارز مسکن
پایتخت خانواده تلویزیون موسیقی ترانه علیدوستی فیلم سریال سینمای ایران مهران مدیری کتاب
کنکور ۱۴۰۳ عبدالرسول پورعباس
رژیم صهیونیستی اسرائیل فلسطین غزه آمریکا جنگ غزه روسیه چین طالبان اوکراین ایالات متحده آمریکا ترکیه
پرسپولیس فوتبال جام حذفی آلومینیوم اراک استقلال فوتسال بازی بارسلونا تیم ملی فوتسال ایران باشگاه پرسپولیس باشگاه استقلال تراکتور
هوش مصنوعی سامسونگ گوگل همراه اول ناسا الماس تسلا فیلترینگ نخبگان
مالاریا آلزایمر کاهش وزن سلامت روان زوال عقل داروخانه