In this chapter, you've learned
How to formally specify method headers, the "language" with which services may be requested of an object, and how to formulate messages—using dot notation—to actually get an object to perform such services
That multiple objects often have to collaborate in carrying out a particular system function, such as registering a student for a course
That an object A can only communicate with another object B if A has a handle on B, and the various ways that such a handle can be obtained
How classes designate the public/private accessibility of their features (attributes, properties, methods)
How powerful a mechanism information hiding is, both in terms of protecting the integrity of an object's data and in preventing "ripple effects" in client code when private implementation details of an application inevitably change
How to declare and use accessors—either accessor ("get"/"set") methods or properties—to gracefully access private attributes; and, that using properties is the preferred approach with C#
How to harness the power of encapsulation
How an instance constructor is specified and used to instantiate new objects