In my experience, encapsulation makes doing the "wrong" thing much more difficult. You can group together functionality which semantically go together and isolate them from functionality which can lead to bad or unpredictable behavior. It can also help hide the details from the end user which may help increase safety and reliability. 

Consider this post by John D Cook. Consider that you have a Bread object. One natural thing to slice this bread. So you write a slice() function, so you can do 


slice(loaf)


with a new loaf object you've created. This makes sense. But if you're not careful, you might accidentally call


slice(finger)


with a finger object somewhere in your project. This could lead to very bad things. Instead, encapsulate this function/method into a Bread class so you can do this


loaf.slice()


This definitely  helps avoid calling finger.slice() accidentally, since finger probably doesn't have a slice() method associated with it. 

This is a bit of a contrived example but I've found it helpful. Encapsulation is can sometimes be an underrated aspect of OOP, but it's a good one.

How is encapsulation used for safety?
Does anyone know of a decent tool for XP to monitor the throughput of a NIC by process? Something similar to the Resource Monitor baked into Windows 7 would be perfect. I’ve considered WireShark but don’t need to analyse down to the packet level, just need a good real-time bytes per second tool.
