Введение
00:00:00Принцип единой ответственности, первый из пяти принципов SOLID, по своей сути не сложен, но содержит нюансы, которые разработчики часто упускают из виду. Многие с трудом понимают его суть при первоначальном ознакомлении. Более глубокое изучение этого принципа выявляет распространенные заблуждения, которые могут препятствовать пониманию и применению при разработке программного обеспечения.
Как я собес проходил
00:00:30Много лет назад, во время технического собеседования в Syner, меня попросили объяснить принцип единой ответственности. В то время мое понимание объектно-ориентированного программирования было ограниченным; я только читал об этом в Википедии и с трудом вспоминал подробности. Используя свои знания английского, я предположил, что, если "единый" означает, что за каждый класс или метод следует отвечать по-одному. Чтобы наглядно проиллюстрировать эту концепцию, я сравнил ее с ролью пилота: хотя он управляет полетом самолета, он не несет ответственности за все внутренние коммуникации или калибровку систем в самолете.
Вопрос на собесе про SRP
00:02:02При разработке игр, особенно при создании простых игр, таких как рогалики или платформеры, принцип единоличной ответственности имеет решающее значение. Например, если игрок может атаковать врагов, передвигаться и собирать золото, эти действия должны быть закреплены за классом игрока. Каждый метод атаки, перемещения и сбора данных должен четко определять свои обязанности, не пересекаясь с другими. Это гарантирует, что каждая функция имеет одну четкую цель, которая согласуется с поддержанием чистоты архитектуры кода.
Определение SRP
00:03:05Принцип единой ответственности (SRP) гласит, что у каждого класса или метода должна быть только одна причина для изменения. Это не то же самое, что определение зоны ответственности; скорее, это подчеркивает ясность цели. На практике может быть множество причин для изменений в рамках проекта, таких как изменение логики нанесения урона врагам или изменение механики передвижения, что может усложнить соблюдение SRP. По мере продвижения разработки расширение функциональности становится необходимым независимо от того, кто участвует в процессе: будь то менеджер проекта, геймдизайнер или даже коллеги, совместно работающие над кодом.
Фикс плохого кода согласно SRP
00:04:20Чтобы исправить некачественный код в соответствии с принципом единой ответственности (SRP), необходимо реструктурировать свой класс игроков, создав три отдельных контроллера: контроллер атаки, контроллер перемещения и контроллер захвата. Такое разделение позволяет каждому контроллеру управлять своей конкретной логикой, не обременяя класс игроков множеством обязанностей. Например, если требуется новая функциональность, например, расчет урона на основе различных видов оружия, контроллер атаки может быть легко модифицирован или расширен, не затрагивая другие системы. Благодаря такому подходу добавление таких функций, как расчет критических ударов или статистики персонажа, становится более управляемым и организованным.
SRP основные правила
00:06:19Акцент на модульной конструкции с использованием SRP Принцип единой ответственности (SRP) подчеркивает, что каждый модуль должен быть сосредоточен на одной задаче, упрощая систему в целом. Когда задачи становятся сложными, их разбивка на более простые модули позволяет получить более четкую логику и упростить тестирование. Такой модульный подход улучшает читаемость и облегчает локализацию ошибок; если возникает проблема в игровой механике, например, в прыжках, разработчики могут быстро выявить проблемы в конкретных контроллерах, не просматривая обширный код.
Балансирование выгод и проблем, связанных с ПСП Хотя соблюдение SRP дает значительные преимущества, такие как улучшенная ремонтопригодность и обратная совместимость при добавлении новых функций, оно также сопряжено с трудностями. Регулярная декомпозиция классов на более мелкие подсистемы требует больших временных затрат и требует сложной архитектуры для эффективного управления этими компонентами. Несмотря на эти недостатки, четкое разделение задач в конечном итоге приводит к совершенствованию методов разработки программного обеспечения.
Когда следовать SRP?
00:09:09Принцип единой ответственности (SRP) должен соблюдаться последовательно, особенно в классах, которые, как ожидается, будут развиваться или изменяться. Понимание того, какие компоненты будут расширяться, а какие останутся стабильными, имеет решающее значение для эффективного применения SRP. При изучении основ программирования важно не подвергать чрезмерной критике примеры, которые могут не соответствовать требованиям SRP; часто основное внимание уделяется демонстрации кода, а не строгому соблюдению принципов. В конечном счете, эффективное применение SRP требует баланса между теоретическим пониманием и практической реализацией.
Шкала "труЪООП" - "быдлокод"
00:10:32Принцип "truOOP" подчеркивает баланс между двумя крайностями в разработке программного обеспечения: чрезмерно сложным и плохо структурированным кодом и чрезмерно упрощенным дизайном. Каждый подход имеет свои преимущества и недостатки, но ни один из них не следует использовать в полной мере, чтобы избежать создания неподдерживаемых или неэффективных программ. При разработке проекта важно выбрать соответствующий уровень архитектуры, исходя из сложности проекта; для крупномасштабных продуктов, таких как игры triple-A, требуется большая архитектурная строгость, в то время как более простые прототипы могут позволить себе меньшую структуру. Понимание этого спектра позволяет разработчикам эффективно распределять свое время без ущерба для функциональности.
Финал
00:12:43Спикер выражает надежду на то, что объяснение было понятным, и призывает зрителей задавать вопросы. Они подчеркивают свою приверженность тщательному освещению всех важных тем. Зрителей приглашают участвовать в обсуждении через Telegram для дальнейших вопросов, и они с нетерпением ждут следующего видеоурока.