An object has an external or public view that prescribes how other objects or applications can interact with it. An object also has an internal or private view that prescribes how data and methods actually are implemented. Object implementation is hidden or encapsulated from the public view.
You can externalize as much of an object's definition as they choose. However, you should carefully consider what to choose to externalize. Published methods and instance variables become a permanent part of an object's interface. Unnecessary externalization of an object's definition might compromise future compatibility.
SOM permits changes to an object's internal implementation without affecting the compatibility of resulting binaries. This means that applications using SOM objects will not require recompilation when the SOM object definitions change. Full forward, binary compatibility can be retained when: