Я надеюсь, что этот ответ будет полезен для вас, хотя это довольно абстрактный комментарий и не слишком сфокусирован на конкретных деталях вашего вопроса.
IMO, объекты наиболее полезны, потому что они обеспечивают способ инкапсуляциикусок данных и связать его с набором поведений.
В коде наблюдаются несколько подсказок, указывающих на то, что ООП может быть хорошим путем:
- Многие подпрограммы, которые принимаютта же группа аргументов.
- Вы работаете с неоднородными структурами данных глубиной 3 или более уровней.
Итак, все (или большинство) ваших подпрограмм имеют 3 или 4общие аргументы?
sub whiz {
my ($foo, $bar, $baz, $pogo) = @_;
# blah
}
sub bang {
my ($foo, $bar, $baz, $whibble) = @_;
# blah
}
sub fiz {
my ($foo, $bar, $baz, $smot) = @_;
# blah
}
Если вы обнаружите, что ваш код выглядит так, то, возможно, $foo
, $bar
и $baz
должны быть частью объекта, который группирует все эти беспорядочные вещи в одном месте.
Возможно, у вас есть большой объект данных или состояния, который выглядит примерно так:
{ Foo => [ { a => 1, z => 3 }, [qw( milk milk lemonade)], ],
quack => { round => 'the', corner => [qw( fudge is made )] },
...
}
Подумайте о том, чтобы разбить эту структуру на меньшие связанные, носимые единицы.Это ваши объекты.
Посмотрите на эту структуру:
{ teacher => $miss_jones,
students => [ $bobby, $suzy, $joseph, $jenny ],
principal => $mr_goodcop,
vice_principal => $mr_badcop,
custodian => $mr_mopitup,
}
И представьте, что каждая переменная была расширена в свою собственную с собственным набором полей.Некоторые присутствуют во всех переменных, другие уникальны для некоторого подмножества записей.Но если $ miss_jones находится в классе $ teacher, мы можем позвонить $miss_jones->add_student( $bobby )
, не беспокоясь о том, как Учитель хранит учащихся.
Это принципы, которые я использую, чтобы определить, когда использовать ООП.