Blog top image

Interface Segregation Principle


Interface Segregation Principle হচ্ছে,  ক্লায়েন্ট এর দরকার নাই এমন কোন মেথড ক্লায়েন্টকে ইমপ্লিমেন্ট করতে ক্লায়েন্ট বাধ্যে করা যাবে না।  নিচের উদাহরণ দেখা যাক 

public interface Shape {
   public BigDecimal calculateArea();
   public BigDecimal calculateVolume();
}

public class Square implements Shape {
   @Override
   public BigDecimal calculateArea() {
      // calculate area
   }
   
   @Override
   public BigDecimal calculateVolume() {
     // no need to implement it
   }
}

public Sphere implements Shape {
   @Override
   public BigDecimal calculateArea() {
    //return area
   }

   @Override
   public BigDecimal calculateVolume() {
    //return volume
   }
} 

উপরের Square ক্লাসের সমস্যা হচ্ছে স্কয়ার এর ভলিউম নাই কিন্তু calculateVolume মেথড ইমপ্লেমেন্ট করতে বাধ্যে, যা IS প্রিন্সিপাল এর সাথে যায় না। তাই নিচের মতো করে রিফেক্টর করা যায় 

public interface TwoDimensional{
   public BigDecimal calculateArea() ;
}

public interface ThreeDimensional{
   public BigDecimal calculateVolume() ;
}

public class Square implements TwoDimensional {
   @Override
   public BigDecimal calculateArea() {
    //return area
   }
}

public Sphere implements ThreeDimensional {
   @Override
   public BigDecimal calculateVolume() {
     //return volume
   }
}

এখন উপরের কোন ক্লাস বাধ্য না দরকার নাই এমন কোন মেথড ইমপ্লেমেন্ট করতে।