SOLID refere-se ao acrônimo cunhado por Michael Feathers para cinco princípios de design e padrões de projeto anteriormente introduzidos por Robert C. Martin.
Uma classe deve ter um, e somente um, motivo para mudar. Esse princípio declara que uma classe deve possuir uma única responsabilidade dentro do software, especializada em um único tipo de tarefa ou ação que irá executar.
Uma classe deve estar aberta para extensão e fechada para modificação. Esse principio declara que uma classe deve ser capaz de adquirir novas funcionalidades de maneira que tudo permaneça sustentável e sem a obrigação de que modificações desnecessárias sejam realizadas.
Uma subclasse deve ser capaz de apresentar o mesmo comportamento de sua classe base quando, e se, for realizada a substituição de uma pela outra. Esse principio declara que uma classe deve ser capaz de adquirir de maneira harmoniosa as características de sua classe base, sem que seja herdado comportamentos passíveis de erro ou que venham a ser inutilizados. (ave —> pica-pau | pinguim)
Uma classe deve implementar somente métodos que façam sentido ao seu propósito e não deve ser forçada a implementar métodos que não irá utilizar. Esse principio declara que uma classe, ao utilizar de uma interface, não deve ser forçada a implementar métodos desnecessários ao seu propósito e que, portanto, as interfaces devem ser segregadas de uma maneira lógica e organizada.
Uma classe deve depender, sempre que possível, de abstrações e não de implementações. Esse principio declara que uma classe que possua dependência de outros módulos deve satisfazê-las por meio de abstração, ou seja, sem a necessidade de declarar novas instâncias, específicas e sempre que for necessário consumi-las.