Ну это очень просто. Объект - это сущность, которая имеет некое состояние и поведение, через которое это состояние можно изменить. Объект может содержать в себе другие объекты, тогда это принято называть агрегатом.
Скажем вы пишите софт для компании по грузоперевозкам. У компании наверняка как минимум есть автомобиль и есть груз. Груз можно поместить в автомобиль. Поместить объем груза больше объема вместительности автомобиля невозможно.
Можно смоделировать этот пример допустим на php (синтаксис может быть некорректен!) таким образом
(свойства объектов желательно делать приватными с доступом через геттеры, чтобы состояние объекта было невозможно изменить вне его. Опущено, ради упрощения).
class Car {
public $id;
public $capacity;
public $payload;
public function __construct(int $id, int $capacity, array $payload) {
$this->id = $id;
$this->capacity = $capacity;
$this->payload = $payload;
}
public function assignCargo(Cargo $cargo) {
if ($cargo->volume + $this->calculateOccupiedCapacity() > $this->capacity) {
throw new DomainException('The capacity has been exceeded.');
}
$this->payload[] = $cargo;
}
private function calculateOccupiedCapacity() {
return array_reduce($this->payload, function($accumulator, $cargo) {
return $accumulator += $cargo->volume
});
}
}
class Cargo {
public $volume;
public function __construct($volume) {
$this->volume = $volume;
}
}
Должно быть понято что примерно происходит даже человеку из бизнеса. Берем автомобиль и пытаемся его загрузить. Если автомобиль заполнен до предела, система сообщает об этом. Примерно так и создается модель реального бизнеса с помощью объектно-ориентированного проектирования.
Гораздо сложнее с инфраструктурой. Автомобиль хотелось бы сохранять в хранилище, извлекать его оттуда и до загружать его. Здесь начинаются проблемы вроде
impedance mismatch. Затем наверняка изменение одного объекта, будет влиять на состояние другого и нужно будет выстраивать систему для работы с доменными событиями. И много всего такого. Но это уже про инфраструктуру. Саму бизнес-модель спроектировать как объектно-ориентированную не является уж совсем чем-то запредельно сложным. Достаточно помнить, что это должны быть по возможности plain php object, которые не зависят от стороннего кода фреймворков и библиотек. В этом случае бизнес-модель можно будет запустить на любом фреймворке/окружении.
Почитать можно что-нибудь про многоуровневую архитектуру. В контексте Java много пишут об этом. В книге
Implementing domain-driven design автор хорошо рассказывает про все уровни приложения и о том, как они взаимодействуют друг с другом.