dip -> dependency inversion principle.
isp-composition -> interface segregation principle based on composition.
isp-inheritance -> interface segregation principle based on inheritance.
lsp -> Liskov substitution principle.
ocp -> open/closed principle.
srp -> single responsibility principle. \