Программа, как известно, состоит из функций и данных. Т.е. составляя программу, мы составляем какие действия нужно совершить. Таким образом программу можно разложить на блоки действий, эти блоки и называются объектами. Объект - это набор функций, связанных данными, обрабатываемых этими функциями.
Понятно, что данных в коде много, и часто между ними и функциями связи сложные и ветвистые. Задача программиста (а точнее проектировщика) эти связи упорядочить и разложить в "пучки", затем в нужных местах рассечь, а то что останется - сгруппировать в объекты. Объекты - это кирпичики программы, более крупные, чем функции. Запомнили? Объекты - это альтернатива функциям, причём лучшая, потому что они позволяют меньшим количеством манипуляций оперировать с тем же объёмом данных. Аналогия - это электронная схема устройства, где радиодетали - это функции, а компонентные блоки - это объекты.
Для того чтобы один блок (объект) подошёл к другому они должны быть согласованы. Один блок (объект) должен знать каких команд и данных ждёт от него другой блок (объект) и наоборот. Когда мы пишем одну программу - это не страшно. Но преимущество блочной сборки в том, что мы можем блоки изымать и заменять другими. Для того чтобы один блок всегда мог заменить другой придуманы
интерфейсы. Наглядный пример интерфейса - это SATA, он означает, что один жёсткий диск всегда встанет на место другого. Также и с объектами
interface SATA { … }
class HDD_SATA implements SATA { … }
interface IDE { … }
class HDD_IDE implements IDE { … }
function connect_to_PC (SATA $hdd){ … }
$hdd = new HDD_SATA;
connect_to_PC($hdd); // ок
$hdd = new HDD_IDE;
connect_to_PC($hdd); // залупу
не всё полезно, что в swap полезло