カプセル化とは次のような意味です。
  1. 隠蔽(変数や関数の詳細を外から見えなくすること)
  2. 集約(似通ったものをひとつに纏めること)

なぜそんなことが必要なのか?
という疑問があるでしょう。その答えはDLLを使うことで理解できると思います。

カプセル化はオブジェクト指向で最も重要だという人もいますが勘違いして欲しくないのは
カプセル化はオブジェクト指向言語でなくても可能です。
極端な例ではアセンブリ言語でも可能になります。
それもDLL理解できると思います。

DLLは外部に公開する関数や変数をExportします。それ以外は直接には扱えません。
また、(まともな開発者なら)似通ったものは1つのDLLに入れます。
Windowsではグラフィックに関わる機能をGDI32.DLLという名前で公開していますが、
その実装(実際のプログラム)は通常お目にかかれませんよね。

DLLは一般にAPIというような名前で仕様(関数の宣言とその使い方)のみ公開されています。
それは、仕様さえ変わらなければ中で実装を変えても構わないということの裏返しです。
Win32APIが明日から仕様変更で使えなくなったら大変ですよね?
でもその内部で改良されるのは大いに歓迎されますよね?

カプセル化はクラスを作る人と使う人の間に『こういった仕様で公開します』という意思表示です。
カプセル化を推し進めたものに仮想関数(インターフェース)というものがあります。

クラスでは見せる部分をPublicで表し、隠す部分をPrivateにします。
protectedというのは自分とその派生クラスのみ見えます。