Object-oriented programming languages support three features: data abstraction, inheritance, and run-time method determination. Each helps the programmer build more abstract, powerful, and malleable data types than the structures of C or records of Pascal . Commonly used object-oriented programming languages include Simula , Smalltalk , Flavors, the Common Lisp Object System , and C++ . Since not all object-oriented languages support all constructs in the same way and use the same terms to describe those constructs, we will develop a terminology derived from several different languages.