solid-principles-java S - single responsibility principle O - open closed principle L - liskov substituition principle I - interface segregation principle D - dependency inversion principle