Более сложный пример инкапсуляции.
В каталоге плохих запахов кода Мартина Фаулера есть такой запах, который называется
"Связанные данные" (Data clumps).
Начинающие рефактореры редко обращают на него внимание, и очень зря. Ибо для того,
чтобы научиться писать хороший обектно-ориентированный код нужно выработать
особенно тонкое чутье к этому запаху. Ибо он устраняется с помощью рефакторинга 
"Выделение класса" (Extract class).
Что это такой за запах?
Это когда у нас есть некоторый набор данных, довольно тесно связанных друг с другом.
Когда некоторый набор данных неразрывно путешествует друг за другом из метода в метод, 
из функции в функцию. Когда этот набор невозможно разделить на составляющие - это 
верный признак того, что из этих данных нужно составить новый класс.
Нужно ИНКАПСУЛИРОВАТЬ эти данные в класс.
А методы, в которые эти данные передавались как параметры - станут первыми кандидатами 
на то, чтобы стать методами данного класса.
Ведь что такое класс в самом общем смысле этого слова? Это некоторые данные, и методы
работы с ними. Данные первичны.
Пример.
Есть у меня достаточно хитрая система расчета зарплаты. И в рамках этой системы мне
довольно часто нужно знать коэффициент выполнения менеджером плана по бренду. А так 
же коэффициент выполнения менеджером общего плана продаж.	Естественно, эти кэффициенты
меняются каждый месяц. И у каждого менеджера эти коэффициенты разные.
Соответственно, у нас есть плотная связка данных: Менеджер + Месяц. И пара методов для
работы с ними: КВПП_Общий() и КВПП_Бренда(Бренд). Обратите внимание, мне нет надобности 
передавать в свои методы менеджера и месяц в качестве параметров. Эти данные уже там 
есть. Они инкапсулированы в классе.
Даже создание таких маленьких классов (два параметра и два метода) позволяет довольно 
сильно разгрузить код от подробностей. А говорят, что иногда такие наборы данных 
могут довольно сильно разрастись, и что в таком случае подобная инкапсуляция - это 
верное средство от расстройства рассудка. Охотно верю.
Вступайте в нашу телеграмм-группу Инфостарт
