مقایسه Interface و Abstract Class و زمان استفاده از آن
یکشنبه 27 مرداد 1392مقایسه Interface و Abstract Class و زمان استفاده از آن <br/> به طور کلی Interfaceها یک قالب اجرائی برای کلاسها می باشند . بدین صورت که با تعریف مشخصات کلی متدها بدون پیاده سازی آنها، کلاسهای مشتق شده را ملزم به پیاده سازی کامل آن متدها میکند .
Interface چیست ؟
به طور کلی Interfaceها یک قالب اجرائی برای کلاسها می باشند . بدین صورت که با تعریف مشخصات کلی متدها بدون پیاده سازی آنها، کلاسهای مشتق شده را ملزم به پیاده سازی کامل آن متدها میکند . بنابراین ، فقط مشخصات متدها یک بار در Interface تعریف می شوند و هر جا که لازم باشد پس از ارث بری ، متدهای آنها پیاده سازی می شود . در کلیه نسخ دات نت Interface ها با حرف I شروع میشود و با این خصیصه از دیگر اجزا جدا و مشخص می شوند . تعریف آن بسیار شبیه کلاس میباشد ولی با همان تفاوت که در بالا ذکر شد یعنی متدهای آن فاقد کد می باشند . اینتر فیس ها سازنده و فیلد هم ندارند و نمی شود از روی آنها نمونه ای ایجاد کرد .
مزایای Interface ها چیست ؟
در حالت عادی ارث بری از چند کلاس به طور هم زمان امکان پذیر نیست ولی Interface ها این مزیت را دارند که به هر تعداد که لازم است ، کلاسهای مشتق شده از آنها ارث بری کنند . این موضوع یکی از مهم ترین مزایای Interface می باشد .
هم چنین با استفاده از Interface کد ها قبلیت بهتری در نگهداری ، انعطاف و استفاده مجدد پیدا میکنند .
Abstract Class چیست ؟
کلاس Abstract یکی از ابزارهای مهم OOP می باشد که نمیتوان از آنها نمونه ای ساخت . به عبارتی دیگر نمی توانیم متغیری از کلاس Abstract تعریف کنیم .
یک کلاس Abstract شبیه Interface میباشد ولی با دیدی وسیعتر . این کلاسها می تواند دارای متدهای Abstract باشد که شبیه Interface فقط اعلام میشوند و باید در کلاسهای مشتق شده ، بازنویسی شوند . البته میتوان در این کلاسها متد هائی داشت که Abstract نیستند و احتیاجی به پیاده سازی آنها در کلاسهای مشتق شده ندارند .
با توجه به تعاریف ذکر شده کلاس Abstract حالتی بین کلاسهای معمولی و Interface ها میباشد و کلاسی میباشد که غیر قطعی و ناتمام میباشد که باید در سطح فرزندانش تکمیل شود .
مزایای کلاسهای Abstract چیست ؟
یکی از مزیت های کلاس Abstract فراهم نمودن کلاس پایه برای دیگر کلاسهای مشتق شده می باشد با این توضیح متدهای آن می توانند کد نویسی شده باشند یا نه . از طرفی پیاده سازی تمام متدهای Abstract در کلاس مشتق شده اجباری نیست .(برخلاف Interface) .
تعریف سطوح دسترسی برای متدها و خصوصیتها مانند کلاسهای معمولی نیز یکی دیگر از مزیت های این کلاسها می باشد .
تفاوت بین کلاسهای Abstract و Interface
1- یک کلاس معمولی می تواند از یک کلاس Abstract ارث بری کند ولی همان کلاس میتواند از چندین Interface ارث ببرد .
2- یک Interface فقط میتواند اعلان متدها و خصوصیتها را داشته باشد اما یک کلاس Abstract علاوه بر آنها میتوانید متدها و خصوصیتهایی با کدهای کامل داشته باشد .
3- عناصر موجود در کلاس Abstract میتوانند مانند یک کلاس معمولی دارای سطح دسترسی باشند ولی Interface ها فاقد این امکان می باشند .
4- وقتی شما متدی را به کلاس Abstract اضافه می کنید ، اگر این متد Abstract نباشد به طور خودکار به همه زیر کلاسها اعمال می شود اما در Interface اگر متدی اضافه کنید باید در تمام زیر کلاسها آن را اعمال کنید .
5- کلاس Abstract مانند کلاسهای معمولی می توانند دارای فیلد و عناصر دیگری باشند در حالی که Interface فاقد این امکان می باشد .
6- Abstract یکی از انواع کلاس است ولی Interface کلاس نیست .
چه زمانی از Interface ها یا کلاسهای Abstract استفاده کنیم ؟
با توجه به توضیحات ذکر شده مواقعی که نیاز به وراثت چند گانه داریم باید از Interface استفاده کنیم ، به دلیل اینکه این امکان در کلاس های Abstract وجود ندارد .
زمانی که بخواهیم تمام متدهای معرفی شده در کلاس پایه به طور کامل در کلاس مشتق شده پیاده شود باید از Interface استفاده کنیم.
وقتی در پروژه های بزرگ با تغییرات زیادی مواجه هستیم استفاده از کلاس Abstract توصیه می شود چون با تغییر آن به طور خودکار تغییرات در کلاسهای مشتق شده اعمال می شود .
با توجه به اینکه به غیر از اعلان متدها و خصوصیتها امکان تعریف عناصر دیگر در Interface ها وجود ندارد ، در صورتی که ملزم به استفاده از این عناصر باشیم ، استفاده از کلاسهای Abstract ضروری می باشد .
در صورتی که نخواهیم کلیه متد ها در کلاس های مشتق شده پیاده شود و تعدادی از آنها را در کلاس پدر کدنویسی کنیم ، باید از کلاس Abstract استفاده کنیم .
به طور کلی Interface ها چارچوب و قابلیتهای کلاس را مشخص میکند و یک قرارداد است ولی کلاس Abstract نوع کلاس را معین می کند . این تفاوت کمک بسیاری برای تشخیص زمان استفاده از این دو را ، به برنامه نویسان میدهد .
منبع :http://nashrit.com
- ASP.net
- 3k بازدید
- 3 تشکر