В реальном мире каждый предмет или процесс обладает набором статических и динамических характеристик, иными словами, свойствами и поведением. Поведение объекта зависит от его состояния и внешних воздействий. Например, бессмысленно пытаться работать в С#, если компьютер не включен и не загружено необходимое программное обеспечение.
В программе объект представляется как совокупность данных, характеризующих его состояние, и кода (функций их обработки, моделирующих его поведение). В программе, естественно, используется не сам реальный объект, а некоторая его абстракция, где учтены с точки зрения разработчика только существенные его особенности, а прочие опущены.
Важным свойством объекта является его обособленность. Детали внутренней структуры данных и алгоритмы их обработки в ООП скрыты от пользователя объекта и недоступны для непреднамеренных изменений. Скрытие деталей реализации называется инкапсуляцией.
Таким образом, инкапсуляция – это механизм, который связывает код и обрабатываемые им данные, ограждая их от внешнего наследования и неправильного использования.
Это позволяет представить программу в укрупненном виде – на уровне объектов и их взаимосвязей, а следовательно, управлять большим объемом информации и успешно отлаживать сложные программы.
Доступ к объекту осуществляется через его интерфейс – совокупность правил доступа.
Инкапсуляция позволяет изменить реализацию объекта без модификации основной части программы, если его интерфейс остался прежним. Простота модификации является очень важным критерием качества программы, ведь любой программный продукт в течение своего жизненного цикла претерпевает множество изменений и дополнений.
Кроме того, инкапсуляция позволяет использовать объект в другом окружении и быть уверенным, что он не испортит не принадлежащие ему области памяти, а также создавать библиотеки объектов для применения во многих программах.
При создании объектно-ориентированной программы предметная область представляется в виде совокупности объектов. Выполнение программы состоит в том, что объекты обмениваются сообщениями. Это позволяет использовать при программировании понятия, более адекватно отражающие предметную область.