The idea of viewing software (and, indeed, of designing and writing software) in terms of objects is not a new one. The idea started in the mid-1960s with the language Simula, a language designed for performing simulations (for example, using computer graphics). However, the value of the object-oriented approach only really became evident in the next two decades with the development of languages such as Smalltalk, Eiffel, Objective C and C++.
By the 1990s C++ had emerged as the market leader in object-oriented languages. Its popularity was due in part to the familiarity of its syntax to the large existing base of C language programmers. C is used extensively on computers that run the Unix operating system and its derivatives, such as Linux, and indeed is still frequently used today.
Although C++ created many converts to object-oriented ideas it does have a major drawback. It is what is termed a hybrid language, a procedural language that has had the capabilities for object-oriented programming bolted on. The ramifications of this are that it is possible for a programmer to write in an object-oriented style, or a procedural style, or a mixture of both! This can (and does) result in complicated, hard to follow code that is difficult to maintain.
Java was built from the ground up with object-orientation in mind. While its syntax superficially resembles C, it is a fully-fledged object-oriented language owing more to the spirit of Smalltalk than to C. Java has done much to increase the spread of object-oriented programming and today object-oriented programming (delivered via languages such as Java, Ruby and C#) is the dominant form of software development, especially for software with graphical user interfaces.