PDA

View Full Version : سوال: جاوا,سی#



mozhgan khodaii
دوشنبه 02 بهمن 1391, 20:02 عصر
تفاوت اینترفیس با کلاس چیست؟

Saeed_script
دوشنبه 02 بهمن 1391, 20:14 عصر
اما منظور از 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 هريك مزایا و معایب خود را دارد. این‌كه كدام در چه جایی می‌تواند راه‌حل شما باشد، به عهده شماست.