Введение

В разработке программного обеспечения проблема "йо-йо" – это антипаттерн, возникающий, когда программисту необходимо читать и понимать программу, граф наследования которой настолько длинный и сложный, что ему приходится постоянно переключаться между множеством определений классов, чтобы проследить ход выполнения программы. Чаще всего это наблюдается в контексте объектно-ориентированного программирования. Название термина возникло из сравнения "подпрыгивающего" внимания программиста с движением игрушки йо-йо вверх и вниз. Тэнзер, Ганти и Подар описали эту проблему под названием, пояснив: "Зачастую, когда мы пытаемся разобраться в одном из таких деревьев сообщений, возникает ощущение езды на йо-йо". Большинство практик объектно-ориентированного программирования рекомендуют поддерживать граф наследования максимально плоским, в том числе для избежания этой проблемы. Использование композиции вместо наследования также настоятельно рекомендуется, хотя это все равно требует одновременного удержания в памяти нескольких определений классов. Глубокие иерархии – это "запах кода" и признак подклассификации ради повторного использования кода. В более широком смысле, проблема "йо-йо" может относиться к любой ситуации, когда человеку приходится постоянно переключаться между различными источниками информации, чтобы понять концепцию. Существуют различные методы рефакторинга кода для упрощения этих иерархий без ущерба для общего поведения. Методы объектно-ориентированного проектирования, такие как документирование уровней иерархии наследования, могут снизить влияние этой проблемы, поскольку они собирают в одном месте информацию, необходимую программисту для понимания.