Started out as a way to do object oriented C. Has grown into benefits beyond that.
Objects have parameters which can be accessed controlled
Read-only
Read / write
Write only at construction time, read any time.
Parameter values can have a known type or be "boxed", making them opaque to applications.
Objects can have descriptive enums associated with them. Slightly more powerful than the corrseponding C construct.