Какую самую главную ошибку совершают новички в ООП?



Начав изучать ООП, многие знакомятся с его тремя столпами: инкапсуляция, наследование и полиморфизм. Но удаётся ли правильно понять все из них?



Если выполнить поиск определения инкапсуляции в Google, то можно получить примерно следующее:



«Инкапсуляция в программировании — это принцип, согласно которому внутреннее устройство сущностей нужно объединять в специальной «оболочке» и скрывать от вмешательств извне.»



А теперь вспомним, что самыми популярными объектно-ориентированными языками программирования являются Java и C#, где модификаторы доступа (private, public, protected, etc.) это одни из самых используемых ключевых слов. И получается, что начинающие программисты путают сокрытие с инкапсуляцией.



На самом же деле, корректнее привести следующее определение:



«Инкапсуляция – это объединение в рамках одной структуры функций и данных, с которыми эти функции работают.»



То есть, в случае объектно-ориентированного программирования, создав некоторый объект, мы связали его данные с определёнными методами на всё время его жизни.



А в случае, например, обычных функций мы просто описали некий алгоритм, который описывает последовательность действий никак не связанных с некоторым состоянием.



Вот простой пример, чтобы понять разницу:



class Doubler

{

private readonly int value;



public Doubler(int value) => this.value = value;



public int Double() => this.value * 2;

}



//…



public int Double(int value) => value * 2;