S-Single responsibility principle.
(A class should have only a single responsibility.)
(software entities … should be open for extension, but closed for modification.)
L-Liskov substitution principle
(objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.)
I-Interface segregation principle (many client-specific interfaces are better than one general-purpose interface)
D-Dependency inversion principle (one should Depend upon Abstractions. Do not depend upon concretions.Dependency injection is one method of following this principle.)