رابط ها در سی شارپ Interface – به زبان ساده

تصویر شاخص رابط ها در سی شارپ

یک رابط با استفاده از کلمه کلیدی 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»: طراحی تمیزتر و مدولارتر را ترویج می‌دهند. با جدا کردن تعریف رفتار از پیاده‌سازی.

نتیجه‌گیری

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


سوالات متداول


اینترفیس (Interface) در #C چیست؟

اینترفیس در #C یک نوع داده‌ای انتزاعی است که شامل مجموعه‌ای از متدها، خصوصیات، رویدادها یا ایندکس‌ها بدون پیاده‌سازی آن‌ها است. کلاس‌ها یا ساختارها اینترفیس را پیاده‌سازی کرده و تمام اعضای تعریف‌شده در آن را اجرا می‌کنند.

چه تفاوتی بین اینترفیس و کلاس انتزاعی (Abstract Class) وجود دارد؟

یک کلاس انتزاعی می‌تواند شامل متدهای پیاده‌سازی‌شده و متدهای انتزاعی باشد، اما اینترفیس فقط شامل اعلان متدها بدون پیاده‌سازی آن‌ها است. در #C، یک کلاس فقط می‌تواند از یک کلاس انتزاعی ارث‌بری کند، اما می‌تواند چندین اینترفیس را پیاده‌سازی کند. رابط ها در سی شارپ نمی‌توانند فیلد (Field) داشته باشند، اما کلاس‌های انتزاعی می‌توانند.

آیا می‌توان چندین اینترفیس را در یک کلاس پیاده‌سازی کرد؟

بله، یک کلاس می‌تواند چندین اینترفیس را به طور همزمان پیاده‌سازی کند. این ویژگی باعث می‌شود بتوان وراثت چندگانه را در #C شبیه‌سازی کرد.

آیا رابط ها در سی شارپ می‌توانند شامل فیلد (Field) باشند؟

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

آیا متدهای رابط ها در سی شارپ به‌طور پیش‌فرض عمومی (public) هستند؟

بله، تمامی متدهای تعریف‌شده در یک اینترفیس به‌طور پیش‌فرض public و abstract هستند، بنابراین نیازی به مشخص کردن این دسترسی‌ها نیست.

آیا می‌توان یک اینترفیس را از یک کلاس ارث‌بری کرد؟

خیر، یک اینترفیس نمی‌تواند از یک کلاس ارث‌بری کند، اما یک کلاس می‌تواند یک یا چند اینترفیس را پیاده‌سازی کند.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 3 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
مجله پی استور geeksforgeeks w3schools

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
سی شارپ


پیمایش به بالا