رابط کاربری در برنامه نویسی شی گرا چه کاری انجام می دهد؟ – CloudSavvy IT


یکی از م keyلفه های کلیدی زبان های شی گرا مانند جاوا و C # توانایی نوشتن کلاس ها با استفاده از رابط هایی است که تعاریف متد را استاندارد می کند و امکان بهبود چند شکلی را فراهم می کند. ما در مورد اینکه آنها چیست و چگونه از آنها استفاده کنیم بحث خواهیم کرد.

چندشکلی رسمی شده

رابط ها در اصل کلاسهایی بدون کد هستند. این می تواند خصوصیات و روش ها را تعریف کند (البته مستقیماً فیلد نیست) بدون اینکه داده ها ذخیره شود یا اجرای توابع برای آن نوشته شود.

به عنوان مثال ، رابط IEnumerable .NET بسیار رایج است. تنها چیزی که لازم است تابعی است که یک IEnumerator را برمی گرداند که می تواند برای تکرار مجموعه استفاده شود.

  1. public interface IEnumerable
  2. {
  3.     IEnumerator GetEnumerator();
  4. }

هر مجموعه در NET دستگاه ها این رابط در حقیقت ، اکثر مجموعه ها رابط های بسیاری را پیاده سازی می کنند ، همگی روش های استفاده شده برای کار با آنها را استاندارد می کنند.

مزیت انجام این روش این است که همه متدها در رابط استاندارد شده اند ، بنابراین هر زمان که می خواهید انواع مختلفی از کلاس ها را بپذیرد ، می توانید با دسترسی به روش های رابط این کار را انجام دهید.

مثلا، foreach چرخه زیر کاپوت در واقع فقط استفاده کنید .GetEnumerator()بنابراین آنها از هر نوع مجموعه استفاده شده پشتیبانی می کنند IEnumerableمانند لیست ها ، دیکشنری ها و HashSets.

  1. void Main()
  2. {
  3.     foreach(var item in  IEnumerable) 
  4.     {
  5.        // do something
  6.     }
  7. }

می توانید رابط ها را به عنوان جایگزینی برای کلاس های پایه در نظر بگیرید. کلاسهای پایه هنوز بسیار مفید هستند ، اما الزام هر کلاس برای به ارث بردن و جایگزینی روشها ممکن است ناخوشایند باشد. علاوه بر این ، شما فقط می توانید یک کلاس پایه داشته باشید ، اما می توانید هر تعداد رابط را پیاده سازی کنید.

به جای پارامترهای نوع می توان از رابط ها نیز استفاده کرد. به عنوان مثال ، شما ممکن است یک مجموعه سفارشی داشته باشید ، CustomList<T>. این برای هر نوع کارساز است ، اما اگر بخواهید برای هر عنصر یک روش خاص فراخوانی کنید ، نمی توانید ، زیرا اگر نوع استفاده شده از آن روش پشتیبانی کند ، کامپایلر هیچ ایده ای ندارد. تنها گزینه هایی که خواهید گرفت روش های اساسی است objects.

با این حال ، اگر می خواهید پارامتر نوع معمولی را کنار بگذارید و از یک رابط استفاده کنید ، می توانید برای عناصر یک متد فراخوانی کنید. این مجموعه همچنان از هر نوع پشتیبانی خواهد کرد ، اگرچه اکنون هر موردی که قصد دارید در آن قرار دهید ، نیاز به پیاده سازی رابط دارد.

به طور کلی ، هنگام استفاده مجدد از همان روش ها برای بسیاری از کلاس هایی که از یکدیگر به ارث نمی رسند ، باید از رابط ها استفاده کنید و دوست دارید که بتوانید کد های چند شکلی بنویسید که علاقه ای به کلاس پایه خاص ندارند.

با استفاده از رابط

استفاده از رابط ها کاملاً آسان است. آنها از همان نحو وراثت به عنوان کلاسهای پایه استفاده می کنند ، پس از تعریف کلاس ، یک کولون است. توجه داشته باشید که اگر می خواهید از یک رابط کلاس پایه استفاده کنید ، ابتدا باید کلاس پایه را با کاما دنبال کنید و سپس تمام رابط هایی را که پیاده سازی می کند ، دنبال کنید.

پس از افزودن تعریف رابط ، احتمالاً با خطا روبرو خواهید شد. Visual Studio به شما می گوید که شما در واقع از خصوصیات و روش های رابط استفاده نمی کنید. این در واقع می تواند بسیار مفید باشد ، زیرا اگر تغییراتی در رابط کاربری ایجاد کنید ، مجبور خواهید بود که تمام کلاسهایی را که از آن استفاده می کنند ، به روز کنید.

Visual Studio کاملاً پیشرفته است و اگر روی «نمایش رفع اشکال احتمالی» کلیک کنید ، این گزینه برای VS فراهم می شود که به طور خودکار الگوی رابط را به کلاس خود اضافه کند. بدیهی است که شما باید NotImplementedExcepts را جایگزین کنید.

همچنین می توانید رابط ها را پیاده سازی کنید صریحاً این همان تأثیر را دارد ، اما با یک نحو متفاوت که مشخص می کند که متد یا خاصیت از کدام رابط حاصل می شود. این در نگاه اول بسیار عجیب به نظر می رسد ، اما اگر بسیاری از رابط ها را اجرا کنید می تواند مفید باشد.

نوشتن رابط های شخصی

تعاریف رابط کاربری تقریباً همان تعاریف کلاسها است ، اگرچه هر روش بدنه ای نخواهد داشت و بدیهی است که شما مجبورید از “اینترفیس” به جای “کلاس” استفاده کنید. مانند کلاس ها ، رابط ها می توانند از پارامترهای نوع معمولی استفاده کنند ، که می تواند برای مجموعه های سفارشی مفید باشد.

شما می توانید استفاده کنید { get; set; } نحو برای مشخص کردن ضمنی خصوصیات ، که هنگام اجرای آنها در کلاس واقعی نیز کار می کند:

همچنین می توانید رابط هایی برای وراثت داشته باشید. به عنوان مثال این ICustomList اگر فقط همه تعاریف دیگری را شامل شود ، رابط کاربری می تواند بسیار مفیدتر باشد List استفاده می کند اما چند مورد سفارشی اضافه می کند. حالا وقتی می خواهید از رابط استفاده کنید ، باید تمام اعضای رابط را از هر رابطی که از آن به ارث می برد ، پیاده سازی کنید.


منبع: khabar-mehman.ir

دیدگاهتان را بنویسید

Comment
Name*
Mail*
Website*