SOLID – #2 Zasada otwarte/zamknięte


SOLID jest to zestaw zasad dobrego programowania obiektowego. Stanowią fundament projektowania oprogramowania, które mogą pomóc programistom tworzyć bardziej zorganizowane, elastyczne i łatwe w utrzymaniu systemy.

Druga zasada SOLID jest to zasada otwarte/zamknięte (ang. open/close principle) sformułowana przez Bertranda Meyera.

Jaka jest Definicja ?

Zgodnie z zasadą otwarte/zamknięte każda klasa powinna być otwarta na rozbudowę, ale zamknięta na modyfikację. W związku z tym istniejący kod nie powinien być zmieniany w celu dodania nowych funkcji, a jedynie możliwy do rozszerzania.

Jak to osiągnąć?

Stosując interfejsy oraz polimorfizm możemy traktować wiele rożnych obiektów zgodnie z jednym interfejsem, co znacznie ułatwia dodawanie nowych funkcji bez ingerencji w kod istniejący.

W poniższym przykładzie klasa Pilot może wywołać wszystkie klasy, które tylko będą implementowały interfejs ITv. Ponadto, rozszerzając aplikację poprzez dodanie nowego programu nie wymusza wprowadzania żadnych zmian w kodzie. Jedyną modyfikacją jest dodanie odpowiedniej klasy oraz utworzenie jej dependencji w metodzie main.

public interface ITv {

    public void włącz();
}

public class CanalPlus implements ITv{
    @Override
    public void włącz() {
        System.out.println("Program Canal+");
    }
}

public class Discovery implements ITv{
    @Override
    public void włącz() {
        System.out.println("Program na Discovery");
    }
}
    
public class HBO implements ITv{
    @Override
    public void włącz() {
        System.out.println("Program HBO");
    }
}
    
public class Pilot {
    public void włączProgram(ITv program){
        program.włącz();
    }
}   

public class App 
{
    public static void main( String[] args )
    {
        HBO HBO = new HBO();
        CanalPlus canalPlus = new CanalPlus();
        Discovery discovery = new Discovery();

        Pilot pilot = new Pilot();
        pilot.włączProgram(discovery);
    }
}