I agree about 2.5. I think it's one of the coolest examples I've ever seen regarding the abstraction of data, specifically between data's representation and it's implementation. When ever I've come across other examples for this technique the difference in implementation are very similar so the true value is not as striking. But, in this object-oriented-centric environment most of us have probably already bought into the idea that this separation is good and useful.
On the other hand, I have never considered or come across the idea of representing something as basic as 1 and 0 with procedures until working through problem 2.6.