Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В разработке программного обеспечения проблема "йо-йо" – это антипаттерн, возникающий, когда программисту необходимо читать и понимать программу, граф наследования которой настолько длинный и сложный, что ему приходится постоянно переключаться между множеством определений классов, чтобы проследить ход выполнения программы. Чаще всего это наблюдается в контексте объектно-ориентированного программирования. Название термина возникло из сравнения "подпрыгивающего" внимания программиста с движением игрушки йо-йо вверх и вниз. Тэнзер, Ганти и Подар описали эту проблему под названием, пояснив: "Зачастую, когда мы пытаемся разобраться в одном из таких деревьев сообщений, возникает ощущение езды на йо-йо". Большинство практик объектно-ориентированного программирования рекомендуют поддерживать граф наследования максимально плоским, в том числе для избежания этой проблемы. Использование композиции вместо наследования также настоятельно рекомендуется, хотя это все равно требует одновременного удержания в памяти нескольких определений классов. Глубокие иерархии – это "запах кода" и признак подклассификации ради повторного использования кода. В более широком смысле, проблема "йо-йо" может относиться к любой ситуации, когда человеку приходится постоянно переключаться между различными источниками информации, чтобы понять концепцию. Существуют различные методы рефакторинга кода для упрощения этих иерархий без ущерба для общего поведения. Методы объектно-ориентированного проектирования, такие как документирование уровней иерархии наследования, могут снизить влияние этой проблемы, поскольку они собирают в одном месте информацию, необходимую программисту для понимания.
In software development, the yo yo problem is an anti pattern that occurs when a programmer has to read and understand a program whose inheritance graph is so long and complicated that the programmer has to keep flipping between many different class definitions in order to follow the control flow of the program. It is most often seen in the context of object oriented programming. The term comes from comparing the bouncing attention of the programmer to the up down movement of a toy yo yo. Taenzer, Ganti, and Podar described the problem by name, explaining: "Often we get the feeling of riding a yoyo when we try to understand one of these message trees." Most practices of object oriented programming recommend keeping the inheritance graph as shallow as possible, in part to avoid this problem. The use of composition instead of inheritance is also strongly preferred, although this still requires that a programmer keep multiple class definitions in mind at once. Deep hierarchies are a code smell and a symptom of sub classification for code reuse. More generally, the yo yo problem can also refer to any situation where a person must keep flipping between different sources of information in order to understand a concept. There are several code refactor techniques to flatten these hierarchies without compromising the overall behavior. Object oriented design techniques such as documenting layers of the inheritance hierarchy can reduce the effect of this problem, as they collect in one place the information that the programmer is required to understand.