Что это вообще за буквы и почему они так важны? Это принципы, которые показывают, как лучше всего объединять методы и структуры данных в классы и как эти классы будут сочетаться. Благодаря этим принципам мы сможем создавать приложения, которые будут простыми, понятными, гибкими и расширяемыми.
Формироваться принципы начали еще в 1980 году, но окончательный вариант появился только в 2004.
Итак, расшифровка букв:
S — Single Responsibility Principle — принцип единственной ответственности. Есть популярное мнение, что этот принцип расшифровывается как "каждый класс/метод должен отвечать за что-то одно". Но сам Мартин пишет, что это не совсем так. И традиционный вариант звучит так: "Класс должен иметь одну и только одну причину для изменения". Таким образом мы приходим к тому, что класс должен отвечать только за одну какую-то группу пользователей, которые хотят изменение.
O — open-closed principle — принцип открытости/закрытости. Наши классы должны быть открыты для расширения и закрыты для изменения. Таким образом у нас всегда будут высокоуровневые классы защищены от изменений, которые могут произойти на низком уровне, и мы ничего не сломаем.
L — Liskov Substitution Principle — принцип подстановки Барбары Лисков. Если мы хотим создать приложение из взаимозаменяемых частей, то эти части должны соответствовать контракту, который позволяет заменять эти части друг другом. Если совсем просто, то классы-наследники должны легко и просто заменять классы-родителей (мы должны уметь писать murzik.meow(), а не if(murzik is Cat) murzik.meow()).
I — Interface Segregation Principle — принцип разделения интерфейсов. Тут всё просто. Не надо добавлять зависимости, которые нам не нужны.
D — Dependency Inversion Principle — принцип инверсии зависимости. Высокоуровневый код не должен зависеть от низкоуровневого кода. Да здравствует абстракция. :)
Статья основана на книге Мартина, который все эти принципы и расписал. :)
Дубль статей в телеграмме — https://t.me/android_junior
Мой твиттер в телеграмме — https://t.me/android_junior_notes