یک رابط با استفاده از کلمه کلیدی interface مشابه کلاس تعریف میشود. یک اینترفیس یک الگو است که گروهی از متدها، خصوصیات، رویدادها یا ایندکسها را که یک کلاس یا ساختار باید پیادهسازی کند، مشخص میکند. برخلاف کلاسها، رابط «interface» فقط شامل اعلان اعضا است. پیادهسازی اعضای اینترفیس توسط کلاسی که آن اینترفیس را بهطور ضمنی یا صریح پیادهسازی میکند، انجام خواهد شد. در این مقاله، به بررسی مفهوم رابط ها در سی شارپ، نحوه استفاده از آنها، مزایای عمدهای که دارند و تأثیر آنها بر طراحی نرمافزار خواهیم پرداخت.
مقدمه
در زبان برنامهنویسی #C، اینترفیسها ابزارهای قدرتمندی هستند که برای تعریف قراردادهای مشترک بین کلاسها و ساختارها استفاده میشوند. اینترفیسها به توسعهدهندگان این امکان را میدهند که کدهایی با انعطافپذیری بالا و وابستگیهای کم ایجاد کنند. آنها با فراهم کردن یک ساختار مشخص برای پیادهسازی متدها و ویژگیها، به ایجاد نرمافزارهایی مقیاسپذیر و قابل نگهداری کمک میکنند.
در C#، اینترفیسها نوعی ساختار هستند که تنها شامل تعریف متدها، خصوصیات، رویدادها و ایندکسها بدون پیادهسازی جزئیات آنها میباشند. اینترفیسها به کلاسها یا ساختارها اجازه میدهند که یک قرارداد مشخص را پیادهسازی کنند. برخلاف کلاسها، اینترفیسها فقط اعلامی هستند و هیچ پیادهسازی ندارند. کلاسها یا ساختارهایی که اینترفیسها را پیادهسازی میکنند باید تمام متدهای اعلام شده در آن اینترفیس را پیادهسازی کنند.
تعریف رابط در سی شارپ
رابط ها در سی شارپ با کلمهکلیدی interface تعریف میشود. ساختار آن مشابه کلاسها است، اما برخلاف کلاسها که میتوانند دادهها (فیلدها) را نگه دارند، اینترفیسها تنها اعلام متدها، خصوصیات، رویدادها و ایندکسها را شامل میشوند. برای مثال:
public interface IShape { double Area(); double Perimeter(); }
در مثال بالا، IShape یک اینترفیس است که دو متد ()Area و ()Perimeter را اعلام کرده است. توجه کنید که این متدها پیادهسازی ندارند.
نکات مهم در مورد رابط ها در سی شارپ
- اینترفیسها نمیتوانند اعضای خصوصی داشته باشند.
- به طور پیشفرض، تمام اعضای یک اینترفیس عمومی و انتزاعی هستند.
- رابط ها در سی شارپ همیشه با کمک کلمه کلیدی interface تعریف میشود.
- رابط ها در سی شارپ نمیتواند فیلدها را شامل شود زیرا آنها نمایانگر پیادهسازی دادهها هستند.
- ما میتوانیم وراثت چندگانه را با استفاده از اینترفیسها به دست آوریم، اما نه با استفاده از کلاسها.
- ما میتوانیم چندین اینترفیس را در یک کلاس واحد پیادهسازی کنیم که با کاما از هم جدا شدهاند.
پیادهسازی رابط ها در سی شارپ
کلاسها یا ساختارها برای پیادهسازی رابط ها در سی شارپ باید تمام اعضای اعلام شده در interface را پیادهسازی کنند. به عبارت دیگر، پیادهسازی هر اینترفیس برای یک کلاس یا ساختار بهصورت الزامی است. پیادهسازی به این شکل انجام میشود:
مثال ۱: قطعه کد زیر حالت پایه برای پیادهسازی اینترفیس را نشان میدهد.
// Demonstrate working of interface using System; interface inter1 { // method having only declaration // with no declaration void display(); } // Implementing inteface in PStore class PStore : inter1 { // providing the body part of function public void display() { Console.WriteLine("Demonstration of interface"); } // Main Method public static void Main(String[] args) { PStore t = new PStore(); t.display(); } }
خروجی
Demonstration of interface
در مثال بالا کلاس PStore از inter1 ارثبری کرده است (: inter1).
این کلاس باید متد ()display را پیادهسازی کند، چون در اینترفیس inter1 تعریف شده است.
اگر متد ()display در کلاس PStore پیادهسازی نشود، برنامه خطای کامپایل خواهد داد.
مثال ۲: قطعه کد زیر پیادهسازی اینترفیسها و استفاده از چندریختی در #C را نشان میدهد.
// Using Interfaces and Polymorphism using System; // interface declaration interface Vehicle { // abstract method. void speedUp(int a); } // class implements interface class Bicycle : Vehicle { int speed; // Method increase speed public void speedUp(int increment) { speed = speed + increment; } // Method check speed public void CheckSpeed() { Console.WriteLine("speed: " + speed); } } // class implements interface class Bike : Vehicle { int speed; // to increase speed public void speedUp(int increment) { speed = speed + increment; } public void CheckSpeed() { Console.WriteLine("speed: " + speed); } } class PStore { public static void Main(String[] args) { // creating an instance of Bicycle // doing some operations Bicycle bicycle = new Bicycle(); bicycle.speedUp(3); Console.WriteLine("Bicycle present state :"); bicycle.CheckSpeed(); // creating instance of bike. Bike bike = new Bike(); bike.speedUp(4); Console.WriteLine("Bike present state :"); bike.CheckSpeed(); } }
خروجی
Bicycle present state : speed: 3 Bike present state : speed: 4
مفهوم Polymorphism در مثال بالا:
چندریختی «Polymorphism» یعنی یک اینترفیس چند پیادهسازی مختلف داشته باشد. در مثال بالا، اینترفیس Vehicle متد ()speedUp را تعریف کرده است، اما Bicycle و Bike هر کدام آن را به شیوه خود پیادهسازی کردهاند.
این ویژگی باعث انعطافپذیری و قابلیت گسترش کد میشود.
ویژگیهای رابط ها در سی شارپ
رابط ها در سی شارپ دارای ویژگیهای خاصی هستند که آنها را از کلاسها متمایز میکند. مهمترین ویژگیها عبارتند از:
- اعلان بدون پیادهسازی: اینترفیسها فقط شامل اعلان متدها و خصوصیات هستند و هیچ پیادهسازیای برای آنها وجود ندارد.
- پیادهسازی در چندین کلاس: یک اینترفیس میتواند توسط چندین کلاس مختلف پیادهسازی شود.
- چندریختی «Polymorphism»: اینترفیسها به برنامهنویسان این امکان را میدهند که از ویژگیهای چندریختی بهرهبرداری کنند. بهطور مثال، میتوان یک لیست از اشیاء با انواع مختلف کلاسها ایجاد کرد که همه آنها اینترفیس مشترک را پیادهسازی میکنند.
- وراثت چندگانه: برخلاف کلاسها که نمیتوانند از بیش از یک کلاس دیگر ارثبری کنند، اینترفیسها میتوانند از چندین اینترفیس به طور همزمان ارثبری کنند.
مزایای رابط ها در سی شارپ
- کاهش وابستگیها: اینترفیسها برای دستیابی به کاهش وابستگیها استفاده میشوند تا پیادهسازیهای مشخص، بتوانیم کلاسها را از هم جدا کرده و وابستگیهای متقابل را کاهش دهیم.
- انتزاع: اینترفیس کمک میکند تا انتزاع کامل به دست آید.
- قابلیت نگهداری: اینترفیسها به دستیابی به برنامهنویسی مبتنی بر کامپوننت کمک میکنند که میتواند کد را قابل نگهداریتر کند.
- وراثت چندگانه: اینترفیس برای دستیابی به وراثت چندگانه و انتزاع استفاده میشود.
- تعریف معماری: اینترفیسها معماریای شبیه به پلاگ و پلی را به برنامهها اضافه میکنند.
- ماژولاریتی «Modularity»: طراحی تمیزتر و مدولارتر را ترویج میدهند. با جدا کردن تعریف رفتار از پیادهسازی.
نتیجهگیری
رابط ها در سی شارپ نقش کلیدی در طراحی نرمافزارهایی با ساختار منظم و مقیاسپذیر ایفا میکنند. آنها با فراهم کردن ابزاری برای جداسازی تعریف رفتار از پیادهسازی، به برنامهنویسان این امکان را میدهند که کدهایی با انعطافپذیری بالا، قابلیت نگهداری بهتر و وابستگی کمتر بنویسند. همچنین، استفاده از اینترفیسها میتواند باعث دستیابی به ویژگیهای مهمی مانند وراثت چندگانه، انتزاع کامل و طراحی مدولار شود. در نهایت، اینترفیسها بخش مهمی از فرآیند توسعه نرمافزار به شمار میآیند و میتوانند تأثیر مثبتی بر کیفیت و قابلیت مقیاسپذیری پروژههای نرمافزاری بگذارند.