Всё это несложно реализовать в ООП-решении, например
В варианте "с геттерами и сеттерами" наш код примерно так выглядит:
class Cat{
float energy;
float hunger;
goSleep(float hours){
energy += hours * 7;
hunger += hours * 13;
}
goEat(float food) {
energy += food * 3; // три единицы энергии с каждого кг. еды
}
float play(float hours) {
if (energy >0 && hunger < 100) {
energy -= hours * 4;
hunger += 13;
return hours * 1;
} else {
return 0;
}
}
Положим я в код теперь добавлю геттеры из своего первого примера.
Программист, который будет использовать класс, вполне заметит, что у кота есть поведение играть, и оно приводит к уменьшению энергии. И есть метод setEnergy() который очевидно эту энергию восстанавливает ("сеттер").