Инкапсуляция - это одно и только одно: удобочитаемость. Если вы действительно так беспокоитесь о производительности, что готовы начать отбрасывать инкапсулированную логику, вы можете просто начать кодирование в сборке.
Инкапсуляция также помогает в отладке и добавлении функций. Подумайте над следующим: допустим, у вас простая игра, и вам нужно добавить код, который в некоторых обстоятельствах истощает здоровье игроков. Полегче, да?
def DamagePlayer(dmg):
player.health -= dmg;
Это очень тривиальный код, поэтому очень заманчиво просто разбросать "player.health - =" везде. Но что, если позже вы захотите добавить powerup, который вдвое уменьшает урон, нанесенный игроку во время активности? Если логика все еще инкапсулирована, это просто:
def DamagePlayer(dmg):
if player.hasCoolPowerUp:
player.health -= dmg / 2
else
player.health -= dmg
Теперь подумайте, не пренебрегали ли вы инкапсулированием этого кусочка логики из-за его простоты. Теперь вы смотрите на кодирование одной и той же логики в 50 разных местах, по крайней мере, одно из которых вы почти наверняка забудете, что приводит к странным ошибкам, таким как: «Когда игрок получает powerup, весь урон уменьшается вдвое, кроме случаев, когда он поражен врагами AlienSheep. .. "
Хотите ли вы иметь проблемы с Alien Sheep? Я так не думаю. :)
На полном серьезе я хочу подчеркнуть, что инкапсуляция - очень хорошая вещь в правильных обстоятельствах. Конечно, также легко перекапсулировать, что может быть столь же проблематично. Кроме того, существуют ситуации, когда скорость действительно имеет значение (хотя они редки), и эти дополнительные несколько тактов того стоят. Единственный способ найти правильный баланс - это практика. Не избегайте инкапсуляции, потому что она медленнее. Преимущества обычно намного превышают затраты.