ООП я вижу прежде всего как способ привязки и набора поведений к структуре данных. Каждый раз, когда мои структуры данных выглядят сложными, я составляю объекты.
Это помогает централизовать и абстрагировать код, связанный с манипулированием данными. Что в свою очередь уменьшает дублирующийся код и упрощает рефакторинг. То же самое может быть достигнуто с использованием чисто процедурного кода. Я считаю, что ООП делает отношения явными и их легче понять концептуально.
Рассмотрим эту структуру:
my $foo = {
meezle => [qw( a d g e l z )],
twill => {
prat => 'qua',
nolk => 'roo',
},
chaw => 7,
mubb => [ 123, 423,756, 432 ],
ertet => 'geflet',
};
Когда я сталкиваюсь с такой структурой (вложенной и неоднородной), я начинаю думать «объект». Я уверен, когда пишу много кода для доступа, изменения и проверки данных в структуре.
Поскольку большинство нетривиальных проектов требуют нетривиальных манипуляций с данными, я использую объекты по крайней мере для некоторой части большинства заданий.
Я могу или не могу сделать все возможное в моем ООП. Обычно есть несколько вещей, которые не являются объектами. Может существовать или не существовать базовый класс приложения. Некоторые элементы могут быть обработаны как обычный процедурный код. Некоторые могут включать функциональные подходы. Все зависит от того, что имеет смысл, учитывая требования проекта.
Самая важная вещь, которую нужно помнить, это то, что ваш код должен быть понятен бедному чмоку, которому поручено его поддерживать. (Это может быть вы через 6 месяцев, недавно пробудившись от глубокого 4 утра, спите, когда начальник босса вашего босса кричит на вас, чтобы исправить чертову программное обеспечение до того, как компания обанкротится.)