How is refinement different from standard sub-classing or sub-typing?
In some important ways. When you subclass, the implementation of the child class is defined in terms of its parent, including all the instance variables and methods. Similarly, when you subtype, the child type is defined in terms of its parent, including all its attributes and action specifications. Refinement is more general. With refinement, you are taking two different levels of abstraction (e.g. an interface spec and an implementation class, or an abstract action and a detailed interaction protocol to realize it), each with its own models (attributes vs. instance variables, action specs vs. procedural method bodies), and showing the mapping between them. Details coming soon.