Vivasoft-logo

ইন্টারফেসে নতুন মেথড যুক্ত করা

আমরা আমাদের এক্সিস্টিং ইন্টারফেসে যদি একটি নতুন মেথড যুক্ত করি তাহলে একই ভাবে বিল্ড ফেইলিওর তৈরি করবে যতক্ষণ পর্যন্ত না তা ইমপ্লিমেন্ট করা হবে।

এজন্য সাধারণত বেস্ট প্র্যাকটিস হিসেবে ইন্টারফেসকে মডিফাই না করে নতুন আরেকটি ইন্টারফেস তৈরি করা বা ইন্টারফেসের ভার্শনিক তৈরি করা উত্তম কারণ ব্যাকওয়ার্ড কম্পটেবিলিটি।

রেফারেঞ্ছ / Reference :

  1. https://adactin.com/java-api-backward-compatibility
  2. https://softwareengineering.stackexchange.com/a/275546

এজন্য বেস্ট প্র্যাকটিস ফলো করে আমরা এখন আরেকটি নতুন ক্লাস স্পটিফাই-প্লেয়ার (SpotifyPlayer) সাথে কাজ করব, যার সাথে ডাউনলোড করার একটি নতুন ফিচার বা মেথড যুক্ত থাকবে কিন্তু আগের যে ভিএলসিপ্লেয়ার (VlcPlayer) ক্লাসটিতে তা থাকবে না।

লিংকঃ http://tpcg.io/_XYPUGU

//জাভা (Java)
interface Playable {
    void play();
    void stop();
}
// Define a new interface called Downloadable
interface Downloadable {
    void download();
}
class VlcPlayer implements Playable {
    public void play() {
        System.out.println(“Vlc player is playing video.”);
    }
    public void stop() {
        System.out.println(“Vlc player is paused.”);
    }
}
// multiple interface implementation example
class SpotifyPlayer implements Playable, Downloadable {
    public void play() {
        System.out.println(“Spotify player is playing music.”);
    }
    public void stop() {
        System.out.println(“Spotify player is paused.”);
    }
    public void download() {
        System.out.println(“Spotify player is downloading music.”);
    }
}
public class HelloWorld {
    public static void testPlayable(Playable p) {
        p.play();
        p.stop();
    }
    public static void testDownloadable(Downloadable d) {
        d.download();
    }
    public static void main(String []args) {
        VlcPlayer vlc = new VlcPlayer();
        SpotifyPlayer spotify = new SpotifyPlayer();
        System.out.println(“Vlc Player Test!”);
        testPlayable(vlc);
        System.out.println(“Spotify Player Test!”);
        testPlayable(spotify);
        testDownloadable(spotify);
    }
}

Output:

//Output – আউটপুট
Vlc Player Test!
Vlc player is playing video.
Vlc player is paused.
Spotify Player Test!
Spotify player is playing music.
Spotify player is paused.
Spotify player is downloading music.

মাল্টিপল ইন্টারফেস ইমপ্লিমেন্টেশনের ব্যাখ্যা:

এখানে “ class SpotifyPlayer implements Playable, Downloadable {

আমরা দেখতে পাচ্ছি যে স্পটিফাই-প্লেয়ার (SpotifyPlayer) মাল্টিপল ইন্টারফেসকে ইমপ্লিমেন্ট করছে যা কি না ক্লাসের ক্ষেত্রে মাল্টিপল ইনহেরিটেন্স ছাড়া পসিবল না ।

একই ভাবে আমরা এখন সি# (C#) উদাহরণ দেখব।

লিংকঃ https://dotnetfiddle.net/hvb6hH

using System;
namespace App
{
	internal interface IPlayable
	{
		void Play();
		void Stop();
	}
	// Define a new interface called IDownloadable
	internal interface IDownloadable
	{
		void Download();
	}
	class VlcPlayer : IPlayable
	{
		public void Play()
		{
			Console.WriteLine(“Vlc player is playing video.”);
		}
		public void Stop()
		{
			Console.WriteLine(“Vlc player is paused.”);
		}
	}
	class SpotifyPlayer : IPlayable, IDownloadable
	{
		public void Play()
		{
			Console.WriteLine(“Spotify player is playing music.”);
		}
		public void Stop()
		{
			Console.WriteLine(“Spotify player is paused.”);
		}
		public void Download()
		{
			Console.WriteLine(“Spotify player is downloading music.”);
		}
	}
	class HelloWorld
	{
		// Use a common name, such as value or item, rather than repeating the type name
		public static void TestPlayable(IPlayable item)
		{
			item.Play();
			item.Stop();
		}
		public static void TestDownloadable(IDownloadable downloadable)
		{
			downloadable.Download();
		}
		public static void Main(string[] args)
		{
			VlcPlayer vlc = new VlcPlayer();
			SpotifyPlayer spotify = new SpotifyPlayer();
			Console.WriteLine(“Vlc Player Test!”);
			TestPlayable(vlc);
			Console.WriteLine(“Spotify Player Test!”);
			TestPlayable(spotify);
			TestDownloadable(spotify);
		}
	}
}

Output:

//Output – আউটপুট
Vlc Player Test!
Vlc player is playing video.
Vlc player is paused.
Spotify Player Test!
Spotify player is playing music.
Spotify player is paused.
Spotify player is downloading music.