Many definitions of the term object-oriented programming may be found in various publications and presentations appearing over the last few years. These definitions often differ widely, and have resulted in a great deal of confusion and debate as to the "true" meaning of the term. It may be justifiably argued that there is no such true meaning, and the term object-oriented may be used to describe techniques ranging from simple data abstraction to the full inheritance hierarchies implemented by certain object-oriented development tools.