Question - Object Oriented : Essentials and History
Answer -
An object-oriented programming language (also called an OO language) is one that allows or encourages, to some degree, object-oriented programming methods.
Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed.
OO languages can be grouped into several broad classes, determined by the extent to which they support all features and functionality of object-orientation and objects: classes, methods, polymorphism, inheritance, and reusability.
* Languages called “pure” OO languages, because everything in them is treated consistently as an object, from primitives such as characters and punctuation, all the way up to whole classes, prototypes, blocks, modules, etc. They were designed specifically to facilitate, even enforce, OO methods. Examples: Smalltalk, Eiffel, Ruby.
* Languages designed mainly for OO programming, but with some procedural elements. Examples: Java, Python.
* Languages that are historically procedural languages, but have been extended with some OO features. Examples: C++, Fortran 2003, Perl.
* Languages with most of the features of objects (classes, methods, inheritance, reusability), but in a distinctly original, even elegant, form. Examples: Oberon, and successor Oberon-2.
* Languages with abstract data type support, but not all features of object-orientation, sometimes called object-based languages. Examples: Modula-2 (with excellent encapsulation and information hiding), Pliant.
Inheritance and polymorphism are usually used to reduce code bloat. Abstraction and encapsulation are used to increase code clarity, quite independent of the other two traits.