Sobre "objeto", já comentei um pouco aqui, segue o trecho relevante:
Quanto à definição de objeto, ela pode ser tão confusa quanto a de OOP. O Maniero também já colocou o link, no qual podemos ver que a definição de objeto é bem mais ampla do que costumamos ver por aí. Praticamente qualquer coisa (variável, estrutura, função/método, etc), qualquer região da memória que contenha um valor e possa ser acessada e manipulada pode ser um objeto.
O problema é que cada linguagem também costuma ter sua própria definição, muitas vezes mais restrita que o conceito geral. Por exemplo, em JavaScript a MDN define como "uma coleção de propriedades". Em Python, um objeto é uma "abstração para dados". Em outras linguagens, é "uma instância de uma classe". Em C11, na seção 3.15, objeto é "uma região de armazenamento de dados no ambiente de execução, cujo conteúdo pode representar valores".
Ou seja, vc pode considerar a definição mais ampla ("qualquer região da memória que contenha um valor e possa ser acessada e manipulada") ou a da linguagem específica que vc está usando.
Classe e interface já costumam ter uma definição mais uniforme. O primeiro é uma estrutura que possui estado (membros/campos) e comportamento (métodos) - na verdade, a implementação mais comum é que a classe só contém a definição desta estrutura, e a partir dela vc cria instâncias (que seriam os objetos, mas como já dito acima, a definição de "objeto" varia conforme a linguagem - algumas adotam esta, de que objetos são instâncias de uma classe).
Mas existem outros casos em que a classe não é exatamente desta forma, como por exemplo JavaScript: nesta linguagem, a classe é apenas um syntax sugar, pois por baixo dos panos ela continua usando protótipos.
Interface é algo que define um contrato (diz o que deve fazer, mas não como - isso fica a cargo das classes que implementarem a interface). Tem mais detalhes aqui e aqui (e também nos links indicados em cada texto).
struct
é outra coisa que varia conforme a linguagem. Em C, por exemplo, é uma sequência de membros (pode-se pensar que é uma "classe sem métodos", embora seja ainda mais simples que isso). Em C# é similar a classes (possuem estado e comportamento), mas são tipos por valor (diferente das classes, que são por referência - saiba mais aqui e aqui).