Сколько фигни понаписали, а человек просто просил реальный пример для применения ООП.
ООП помогает строить приложения так, как человеку удобнее мыслить. Наш мир окружают объекты. И в программировании мы описываем эти объекты. Например: человек - объект. Человека мы можем описать не целиком, если нам нужен человек только лишь как клиент. А для этого нам важен его идентификатор, имя и прочие данные.
После чего мы используем списки таких объектов для манипуляции данных. Список клиентов - список объектов.
Объекты могут совершать действия, или над объектами могут совершатся действия. Т.е. клиент сам может создавать заявку или этим может заниматься менеджер.
Что то типа Client.CreateOrder (клиент создает заказ) или Orders.CreateOrder(Client) (менеджер заявок создает новую для такого-то клиента).
Всё достаточно просто.
Тебе достаточно придумать любую задачу и просто решить её с помощью объектов.
Например, музыкальный плеер. Пусть трек будет представлять объект, содержащий путь к файлу, название, продолжительность и так далее. И список треков. Дальше сам решай кто чем будет управлять. Либо ты работаешь над списком объектов, либо каждый объект может сам делать что нужно. Но для музыкального плеера удобнее, когда треки лишь содержат данные (DTO). Т.е. имеем список треков и манипулируем объектами (добавляем, редактируем, удаляем и т.д.)
Это в общих чертах. После чего добавляем наследование. Например, есть базовый класс - трек, но он может быть как ссылка на веб-ресурс, а может быть как файл. Т.е. мы создаем общий абстрактный класс для хранения любых треков в списке (как файловых, так и веб)
TAudio = class abstract
private
FId: string;
protected
function GetTime: TTime;
function GetName: string;
public
property Id: string read Fid write FId; //Пусть тут будет полное имя файла или ссылка на веб
property Time: TTime read GetTime; //Время
property Name: string read GetName; //И имя
end;
После чего мы можем от него наследовать два класса (для файлов и для веб)
TAudioFile = class(TAudio)
protected
function GetTime: TTime; override;
function GetName: string; override;
end;
TAudioUrl = class(TAudio)
protected
function GetTime: TTime; override;
function GetName: string; override;
end;
И хранить оба типа объектов в одном списке.
TAudioList = TObjectList<TAudio>;
Каждый класс по своему реализует получение имени и времени, но мы можем единообразно получать к ним доступ и пользоваться ими.
Используя список мы можем
var AudioList := TAudioList.Create;
var Audio: TAudio := TAudioFile.Create('C:\Music\Track1.mp3');
AudioList.Add(Audio); // Добавлять аудио файлы
Audio := TAudioUrl.Create('webmusic.ru/tracks/track1.mp3');
AudioList.Add(Audio); // Добавлять веб аудио
AudioList.Delete(0); // Удалять элементы
// менять местами, сортировать, редактировать и т.д.
Теперь у нас общий плейлист для тех и других видов аудио и мы можем скармливать их плееру для воспроизведения.
Player.Play(AudioList[0].Id);
А дальше мы можем усложнять и усложнять, добавляя новые возможности. Например, завести интерфейс и принимать аудио файлы из плагинов. Или использовать ОРМ для хранения плейлистов в базе данных. Мы можем отличать один вид от другого при переборе списка и обрабатывать уникально для некоторых.