Qual é o princípio fundamental da orientação a objetos que estabelece uma estrutura com um conjunto de métodos abstratos e/ou constantes, definindo quais métodos uma classe deve implementar e estabelecendo um tipo de contrato entre diferentes partes do código?