Capabilities: Existing and Process to Add New. Note: Capabilities ~= Interfaces?: Capabilities MUST be very strictly defined and enforced (attributes / commands / events)?

As the fallback I suggested, let’s reference the Java documentation:

In the Java programming language, an interface is a reference type, similar to a class, that can contain only constants, method signatures, default methods, static methods, and nested types. Method bodies exist only for default methods and static methods. Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces.

In other words, an Interface is really only a set of rules for the Classes that implement it. Conveniently, Interface definitions look a lot like Abstract Class definitions.

Thus, in SmartThings, a Capability is just a set of rules for the Device Types that implement them.

For your car example…

Before we create “class car”, we start with “interface car” (i.e., an interface can inherit other interfaces, just as a sub-class can).

Translate to SmartThings:
interface car { includes door, includes steering, includes seat, car attributes, car methods }

Now any device type that implements capability.car, must implement all of the included (inherited?) capabilities.

Ummm… I’m deferring more “grouping” concepts at the moment, because we need to figure out the difference between Inheritance, multi-instantiation (i.e., groups of same capability), and other types of Groups.