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. Oberon (and its successor Oberon-2) include most of the functionality of objects (classes, methods, inheritance, and reusability) but in a distinctly original, and elegant, form.
Some languages include abstract data type support, but not all of the features of object orientation (eg, Modula-2 which provided excellent encapsulation adn information hiding). 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.
Languages with object-oriented features