Vivasoft-logo

জাভা (Java) – ইন্টারফেসে চুক্তি ভঙ্গের জন্য বিল্ড সমস্যা

এখন এই ভিএলসিপ্লেয়ার (VlcPlayer) ক্লাসটিতে যদি কোন একটি মেথড ইনক্রিমেন্ট না করতাম তাহলে আমরা কম্পাইল করতে পারতাম না, যেমন আমরা আউটপুটে দেখিঃ

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

//জাভা (Java) -ইন্টারফেসে চুক্তি ভঙ্গের জন্য বিল্ড সমস্যা  – violating contract in Interface
interface Playable {
    void play();
    void stop();
}
class VlcPlayer implements Playable {
    public void play() {
        System.out.println(“Vlc player is playing video.”);
    }
    // stop method not implemented
}
public class HelloWorld {
    public static void testPlayable(Playable p) {
        p.play();
        p.stop();
    }
    public static void main(String []args) {
        System.out.println(“Vlc Player Test!”);
        testPlayable(new VlcPlayer());
    }
}

Output:

//Output – আউটপুট
HelloWorld.java:6: error: VlcPlayer is not abstract and does not override abstract method stop() in Playable
class VlcPlayer implements Playable {
^
1 error

আবার এখানে যে ইরোর (error) বা সমস্যা টা পাওয়া যাচ্ছে সেখানে বলা হচ্ছে যদি Build বা কম্পাইল ইসু এড়াতে চাই, তাহলে আমরা ভিএলসিপ্লেয়ার (VlcPlayer) ক্লাসটিকে অ্যাবস্ট্র্যাক ক্লাসে কনভার্ট করতে পারি, কিন্তু স্টপ (Stop) মেথড ছাড়া তাও Build বা কম্পাইল সমস্যা হবে না।

যেমন, লিংকঃ http://tpcg.io/_BHLZSL

//জাভা (Java) -ইন্টারফেসে চুক্তি ভঙ্গের জন্য বিল্ড সমস্যা  – violating contract in Interface
interface Playable {
    void play();
    void stop();
}
abstract class VlcPlayer implements Playable {
    public void play() {
        System.out.println(“Vlc player is playing video.”);
    }
    // stop method not implemented
}
public class HelloWorld {
    public static void testPlayable(Playable p) {
        p.play();
        p.stop();
    }
    public static void main(String []args) {
        System.out.println(“Vlc Player Test!”);
        testPlayable(new VlcPlayer());
    }
}

Output:

//Output – আউটপুট
HelloWorld.java:22: error: VlcPlayer is abstract; cannot be instantiated
testPlayable(new VlcPlayer());
                     ^
1 error

একইভাবে আমরা এখন সি# (C#) এক্সাম্পল দেখব।

সি# (C#) – ইন্টারফেসে চুক্তি ভঙ্গের জন্য বিল্ড সমস্যা

এখন এই ভিএলসিপ্লেয়ার (VlcPlayer) ক্লাসটিতে যদি কোন একটি মেথড ইনক্রিমেন্ট না করতাম তাহলে আমরা কম্পাইল করতে পারতাম না, যেমন আমরা আউটপুটে দেখিঃ

লিংকঃ https://dotnetfiddle.net/8xrW8r

//সি# (C#) – ইন্টারফেসে চুক্তি ভঙ্গের জন্য বিল্ড সমস্যা  – violating contract in Interface
public interface IPlayable
{
	void Play();
	void Stop();
}
public class VlcPlayer : IPlayable
{
	public void Play()
	{
		Console.WriteLine(“Vlc player is playing video.”);
	}
	public void Stop()
	{
		Console.WriteLine(“Vlc player is paused.”);
	}
}
public class Program
{
	public static void TestPlayable(IPlayable playableResource)
	{
		playableResource.Play();
		playableResource.Stop();
	}
	public static void Main(string[] args)
	{
		Console.WriteLine(“Vlc Player Test!”);
		TestPlayable(new VlcPlayer());
	}
}

Output

//Output – আউটপুট
Compilation error (line 9, col 26): ‘VlcPlayer’ does not implement interface member ‘IPlayable.Stop()’

সি# (C#) এরর (error) বা সমস্যা টা একদম স্পেসিফিক সে বলেই দিচ্ছে যতক্ষণ পর্যন্ত স্টপ (Stop) মেথড টি Implement না করা হবে ততক্ষণ পর্যন্ত সে বিল্ড হবে না