Что вы знаете о правильном создании классов? Постараюсь угадать.
Вы наверняка запомнили уже три страшных слова:
- наследование;
- полиморфизм;
- инкапсуляция.
Теперь вы стараетесь их понять и внедрять во все ваши классы. Но пока, увы, это не очень получается.
Дело в том, что эти принципы относятся к концепции объектно-ориентированного программирования (ООП). А класс является лишь инструментом в ООП, т.е. мелкой единицей.
Все в интернете пишут о концепции ООП, но мало кто объясняет - как нужно писать именно классы. А главное, как писать классы таким образом, чтобы код было легко читать и работать с ним.
Как говорилось в старом мультике про кита и пингвина:
Чистота залог здоровья. Порядок - прежде всего.
Этот лозунг напрямую касается вашего кода, а писать сегодня код и не использовать ООП достаточно архаично. Поэтому данная статья для вас. В ней вы знаете о секретах написания легко читаемых классов.
Зачем тратить время на чистоту кода?
Достаточно глубоко тему актуальности чистоты вашего кода мы затрагивали в данной статье:
Обязательно ознакомьтесь с этой статьей, если еще не читали.
Мы будем использовать некоторые термины, которые уже объяснялись в статье про читаемость кода.
Однако в данной статье я хочу сказать вам одну важную вещь:
Если ваш код сложно читать, то он становится противным даже для вас самих.
Вы пишете код один раз, а читаете его постоянно. Поэтому важно уделять должное внимание его чистоте, чтобы получать эстетическое наслаждение от работы с кодом.
Для понимания: ваш код можно расценивать, как общественный туалет:
- В одном туалете чисто, в воздухе пахнет приятным освежителем, а из колонок играет успокаивающая музыка;
- В другом же туалете кругом грязь, сопровождающая комплексом всех неприятных запахов, а также с закрывающими нос посетителями от этих зловоний и с отсутствием туалетной бумаги…
В каком из вариантов вы будете находиться без желания быстро сбежать? Думаю не нуждается в комментариях.
Ваш нечистый код, который читаете вы или другие программисты издаёт такой же неприятный запах, как неубранный общественный туалет.
В нем неприятно перемещаться, его не хочется читать и есть только одно желание “поскорее его закрыть”.
Поэтому нужно стремиться к написанию чистого кода, а для этого нужно изучать статьи из рубрики “Чистый код”.
Теперь переходим к пониманию устройства чистоты классов.
Понятие чистоты классов
При написании классов вы должны строго придерживаться принципа единой ответственности.
Принцип единой ответственности гласит, что каждый класс должен иметь только одну причину для изменений. Это означает, что каждый класс должен быть ответственным только за выполнение одной конкретной задачи или функции.
Чтобы соблюдать это правило, необходимо понимать, как можно посчитать количество ответственностей.
С чего начинается ответственность?
Как бы это не звучало неожиданно, но ответственность класса в первую очередь измеряется его названием.
При наименовании класса необходимо использовать только существительные и никаких глаголов.
Начинающие свой путь в изучении ООП пытаются в названии класса ответить на вопрос “что он делает?”.
На самом деле при составлении имени класса вы должны отвечать на вопрос “за что он отвечает?”. Тогда использование существительных в названии класса не покажется странным.
Правильный вариант названия класса: давайте представим, что нам нужно дать название классу, который позволяет рисовать на холсте.
Начинаем с вопроса - за что он отвечает?
Отвечает он за рисование, но это глагол, а нам нужно существительное. Задаем этот же вопрос еще раз, только с уклоном на рисование.
Что отвечает за рисование?
За рисование может отвечать краски, кисточки, карандаши и другим инструменты, но фундаментальной частью является холст, на котором нужно рисовать.
Переводим слово холст на английский и получаем название класса Canvas.
Теперь мы точно видим, что существительные прекрасно показывают ответственность класса.
Неправильный вариант названия класса: предлагаю на этом же примере рассмотреть неправильный вариант.
В неправильном варианте начинают с вопроса - что он делает?
Наш класс обеспечивает рисование, поэтому переведем на английский - Drawing.
Смотрим пример:
Чтобы объяснить, почему такое наименование класса предполагает множественную ответственность, необходимо разобраться в правиле подсчета количества ответственностей.
Как считать ответственности?
Чтобы посчитать ответственности вы должны описать класс по его названию не более чем 20 словами.
Секрет кроется в разборе этого описания, о нем расскажу чуть позже. Давайте начнем с первого варианта, где название состоит из существительного.
Холст отвечает за объект, на котором можно рисовать различными инструментами.
Теперь второй вариант с использованием глагола.
Рисование предполагает наличие холста, который предоставляет объект для рисования, а также дает необходимые инструменты, такие как кисти или карандаши, заливки и выбор цветов.
Перед разбором этих описаний важно знать правило, которое определяет принцип единой ответственности:
Если в описании класса встречаются сочинительные союзы: и, или, также, но, значит такой класс не отвечает принципу единой ответственности.
Теперь разберем описание первого класса. Скажите, встречаются ли в нем что-то, что выводит его за рамки одной ответственности “Холст отвечает за объект, на котором можно рисовать различными инструментами”?
Думаю, что можно долго выискивать в этом описании хоть что-то, что не соответствует правилу, однако описание класса четко соответствует принципу единой ответственности.
Скажите в комментариях, а сколько нарушений вы насчитали в данном описании “Рисование предполагает наличие холста, который предоставляет объект для рисования, а также дает необходимые инструменты, такие как кисти или карандаши, заливки и выбор цветов.”?
Количество ответственностей класса считается по количеству союзов.
Не буду писать сколько ответственностей в классе Drawing, попробуйте написать правильный ответ в комментариях.
Выводы
Что мы сегодня узнали?
Чистота кода напрямую влияет на производительность вашей работы, а в частности на эмоциональное состояние. Чтение размытого кода способствует быстрому выгоранию.
Чистота классов в первую очередь зависит от строгого соблюдения принципа единой ответственности.
Для соблюдения данного принципа необходимо в названии класса использовать только существительные.
Нарушение принципа единой ответственности определяется на этапе наименования, если в его описании встречаются сочинительные союзы и, или, также, но.
Тема чистоты классов достаточно широкая, мы затронули лишь верхушку айсберга.
Если вас заинтересовала данная тема и вы хотите научиться писать чистый код в парадигме ООП, то дайте знать в комментариях.
Подписывайтесь на канал, чтобы ничего не пропустить.