ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

تفاوت abstract class و interface

 
Post new topic   Reply to topic    ParsX.com Forum Index -> مهندسی نرم افزار
View previous topic :: View next topic  
Author Message
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 2970
Location: Tehran

PostPosted: Sat Nov 01, 2014 2:51 pm    Post subject: تفاوت abstract class و interface Reply with quote

abstract class و interface ظاهرا بسیار شبیه به هم هستند. اما چه زمانی از کدام باید استفاده کنیم؟ سوالی که معمولا اگر جوابش را ندانیم با مشکلات بعدی مواجه می شویم.
اولا abstract class بهتر است زمانی استفاده شود که ارتباط پدر فرزندی موجود باشد. اصطلاحا می گویند strong relation بین دو کلاس. در واقع کلاس فرزند از کلاس abstract ما ارث خواهد برد. اما در interface امکان اینکه دو کلاس هیچ ربطی به هم نداشته باشند وجود دارد.
برای مثال فرض کنید من در دوره خلبانی ارتش هوایی جمهوری اسلامی استخدام می شوم و دوره آموزشی خلبانی را می گذرانم. اما هنوز نمی توانم پرواز کنم چون باید با انواع هواپیماهای f14 و f16 و ... آشنا شوم . بعد از گذراندن دوره فوق من بعنوان یک خلبان می توانم شروع بخدمت کنم. در وسط خدمت با توجه به ضرورت عملیاتی پیش آمده باید دوره آموزش زبان عربی نیز بگذرانم.
حالا دوره خلبانی گذرانده شده می شود abstract class من. دوره آشنایی با هواپیماها در کلاس من که از کلاس دوره خلبانی ارث بری کرده است می باشدو دوره آموزش زبان عربی نیز بعنوان یک interface استفاده می شود.
تفاوت عمده interface و abstract class در این است که تمامی توابع interface باید در کلاسی که آن را implement می کند پیاده سازی شوند. اما در abstract class لزومی برای این کار وجود ندارد. در interface امکان تعریف متغیر و ویژگی وجود ندارد اما در abstract class می شود این کار را انجام داد.
درواقع interface شبیه به یک برگ قرارداد می باشد که فقط به ما می گوید توابع ذیل را پیاده سازی کن.
اگر در طول بازنویسی برنامه کلاس را interface بگذاریم مجبور می شویم تمامی کلاس هایی که این اینترفیس را implement کرده اند بازنویسی کنیم و تابع جدید را اضافه یا حذف کنیم . این در حالیستکه در abstract class نیازی به این کار نیست.
در abstract class زمانیکه حتی فقط یک تابع داریم که تکلیفش مشخص نیست باید کل کلاس را abstract کنیم . مثلا فرض کنید کلاسی داریم به نام Figure که تابعی دارد به نام Mohit برای محاسبه محیط این شکل که احتمالا دایره و مستطیل آن را ارث بری می کنند فرمول متفاوت است پس تابع Mohit در Figure وجود دارد اما تفصیلات آن در کلاس های دایره و مستطیل بصورت متفاوت خواهد آمد.
ضمنا آن که یک کلاس می تواند چندین interface را پیاده سازی کند. چون بنده بعنوان خلبان می توانم صد تا کلاس زبان خارجی دیگر نیز بروم یا حتی بروم موسیقی یاد بگیرم چون ماهیتا ربطی به کار خلبانی من ندارد. اما اگر قرار باشد از abstract class ارث بری کنم چنین اختیار بازی ندارم.
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> مهندسی نرم افزار All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum