An Object-oriented programming language is one that allows or encourages,
to some degree, object-oriented programming methods.
See object-oriented programming for details about those methods.
Though Simula (1967), a language created for making simulation programs,
was probably the first language to have the primary features
of an object-oriented language, Smalltalk is arguably
the canonical example, and the one with which much of the theory of object-oriented
programming was developed.
These languages include "pure" object-oriented languages such as
Smalltalk and Ruby, which were designed specifically
to facilitate--even enforce--object-oriented methods;
languages such as Java, Eiffel,
and Python, which are primarily designed for
object-oriented programming but have some procedural elements;
and languages such as C++ and Perl[?],
which are historically procedural languages that have been extended with some
object-oriented features.
Some languages include abstract data type support, but not all of the features of object orientation.
These are sometimes called object-based languages.
PHP 4, for example, includes no provisions for
inheritance or
polymorphism, but does allow for a concept of "class",
and thus enables the programmer to use unenforced versions of
abstraction and
encapsulation.
This is often useful--inheritance and polymorphism are usually used to reduce code bloat[?],
but abstraction and encapsulation are used to increase code clarity,
quite independent of the other two.