What does it mean to be ``object-oriented''? The ``big three'' concepts are encapsulation, polymorphism, and inheritance, but the text ``Fundamentals of Object-Oriented Design in UML'' [12] specifies that the following criteria are necessary for a language to be considered object oriented.
Encapsulation - the grouping of related ideas into unit. Encapsulating attributes and behaviors.
Inheritance - a class can inherit its behavior from a superclass (parent class) that it extends.
Polymorphism - literally means ``many forms''.
Information/implementation hiding - the use of encapsulation to keep implementation details from being externally visible.
State retention - the set of values an object holds.
Oject identity - an object can be identified and treated as a distinct entity.
Message passing - the ability to send messages from one object to another.
Classes - the templates/blueprints from which objects are created.
Genericity - the construction of a class so that one or more of the classes it uses internally is supplied only at run time.