A class is a recipe for an object. A class is a "design time" object, and when the code runs, the class creates an instance of an object.
Think of a class as a blueprint. A single blueprint can be used to build multiple houses. Each house is unique and distinct, and can even have different characteristics (properties!) such as paint color, brick vs. stone, etc.
An object can have properties, and methods. It can also respond to or create events.
Most of the examples in books aren't very clear, and aren't good examples of classes or objects. No one writes a "shoe" class.
As for how objects relate to each other: I often have to write programs that work with truly huge files. Now, C# provides a StreamReader class. It does buffered file IO.
In my applications, I'll write a class that does some specific operations on a file. However, I don't want to write all the underlying buffered reads and so on. I write my class to require that the "user" give my class/object an already built, instantiated StreamReader object. In my class, this is a simple property. To use it, the programmer/user would have to do something like:
StreamReader myStreamReader = new StreamReader();
// set the streamreader properties, etc. Open a file, and so on.
tgreerFileClass myCustomObject = new tgreerFileClass();
myCustomObject.fileToActOn = myStreamReader;
myCustomObject.doSomethingToTheFile();
This code has two objects: a StreamReader, and a "tgreerFileClass". The StreamReader object is created, and then …