Open-Closed Principle
Open-Closed Principle হচ্ছে একটা ক্লাস এক্সটেনশন করার জন্য ওপেন থাকবে কিন্তু মডিফিকেশন এর জন্য ক্লোজ থাকবে। এর অন্য মানে এমন ভাবে একটা ক্লাসকে ডিজাইন করতে হবে যেন মূল ক্লাসকে মডিফাই না করে এর বিহেবিয়ার পরিবর্তন করা যায়। নিচের SpeedCalculator ক্লাসটা দেখা যাক
public class SpeedCalculator { public BigDecimal calculateSpeed(Vehicle vehicle) { if (vehicle instanceof Car) { // Calculate Speed here… } else if (vehicle instanceof Airplane) { //Calculate Speed here… } else if (vehicle instanceof Bicycle) { //Calculate Speed here… } } }
এখানে সমস্যা হচ্ছে, নতুন ভিহেকল আসলে calculateSpeed মেথডে পরিবর্তন করতে হবে। যা OC প্রিন্সিপাল ভঙ্গ করে। আমরা এই ক্লাসকে এমন করে রিফেক্টর করতে পারি যেখানে আরো অনেক ভিহেকল এর স্পিড পরিমাপ করার কোড লিখা যাবে কিন্তু মূল ক্লাস বা মেথডে কোন পরিবর্তন না করেই।
public interface Vehicle { public BigDecimal calculateSpeed(); } public class Car implements Vehicle { public BigDecimal calculateSpeed() { //calculate speed to car } } public class Airplane implements Vehicle { public BigDecimal calculateSpeed() { //calculate speed to car } }
Vehicle car = new Car();
car.calculateSpeed();
Vehicle airplane = new Airplane();
airplane.calculateSpeed();