Rolling your own object system is an excellent way to gain a deeper understanding behind object-oriented-programming. It is generally an exercise in learning. It is by no means necessary for you to roll your own object system in scheme, as plenty of well tested object-systems already exist.

The object-oriented-programming page should be considered a prerequisite page before coming here, due to the fact that the term "object-oriented" itself is so heavily overloaded.

Features to think about...

What kind of object system do you want? This is the question that you must ask yourself before blindly forging your object system. Like all good questions, this question leads to yet more questions:

A prototype based system or a class based system?

Are you going to support mutation?, referential-transparency? or both?

How are you going to handle types?

Are you going to allow for sub-types? Multiple inheritance?

Is there going to be any kind of type safety? To what degree?

How open to viewing and modification is your object system, are you going to have a meta-object-protocol?? Reflective only like Java, or reflective and intercessory like CLOS?

Are you going to offer protection? What level? Simplistic like Smalltalk? (methods are public, members are private) or complex like Java? (Private, protected, public.)

Object Systems of Other Languages

It is a good idea to have a peek at how other object systems are implemented before blindly implementing your own. There already is a python-like-object-system available on the wiki, as well as a java-like-object-system. Oleg Kiselyov has provided the world a purely-functional object system for you functional-programming junkies. All three of these systems are very easy to understand, and can provide a firm base for your own system, or you can start from scratch.

What does it mean?

We in the Scheme world don't run screaming about calling for the
Deities to give us some object system (or even worse force us to use
it like Java) . If we want any of the various features incoherently
attributed to object-oriented-programming, we use those features.
If something is not there that we want, we build it. Welcome to our world.