PDA

View Full Version : سوال: تفاوت کاربردی interface با متد abstract استفاده شده در کلاس های abstract



amirjalili
یک شنبه 16 فروردین 1388, 11:45 صبح
با سلام خدمت دوستان عزیز..
تفاوت کاربردی interface با متد abstract استفاده شده در کلاس های abstract چیه؟
این دو بسیار شبیه هم هستند

Alireza Orumand
یک شنبه 16 فروردین 1388, 13:02 عصر
سلام
دوست من در اینترفیس ها فقط میشه تعاریف رو انجام داد و هیچ پیاده سازی مشترکی در بین کلاس های ارث برنده وجود نداره ولی در کلاس های Abstract میتونید پیاده سازی هم انجام بدید و از این پیاده سازی ها در کلاس های ارث برنده استفاده کنید فقط از کلاس نمیشه شی ساخت.
موفق باشید.

amirjalili
یک شنبه 16 فروردین 1388, 13:54 عصر
با تشکر از شما..
راستش منظورم این بود که چه چیزی باعث ترجیح هر یک از اینها به هم میشه.. مثلا چرا در الگوی Composite استفاده از abstract رو به استفاده از interface ترجیح میدهند؟
دیاگرام های زیر شاید بهتر بتونن منظورم رو بیان کنند
شکل1:
http://ooad.wordpress.com/files/2008/03/comp1.jpg

شکل 2:( که استفاده از abstract را به interface ترجیح میدهد):
http://ooad.wordpress.com/files/2008/03/comp2.jpg

با تشکر

Alireza Orumand
یک شنبه 16 فروردین 1388, 14:08 عصر
سلام
دلیل این مطلب رو بالا عرض کردم.
یکی از دلایلش اینه که اگر متدها پیاده سازی یکسانی داشته باشن باید از abstract استفاده کرد که در این صورت تابع متد فقط در کلاس والد پیاده سازی میشه و در بقیه استفاده میشه ولی وقتی نیازی به پیاده سازی متد نداریم و فقط ساختار کلی شبیه به هم هست از interface استفاده میکنیم.
در این بین باید به ماهیت multi inheritance نبودن C# هم توجه کرد. شما فقط یک بار میتونید از یک کلاس ارث بری کنید ولی Nتا Interface میتونید پیاده سازی کنید. یکی دیگه از دلایل هم همین میتونه باشه! یعنی در حقیقت جبر زمانه باعث استفاده از interface میشه. :چشمک:
موفق باشید.