Object oriented programming originated with the Simula programming languages of the 1960s. It has since become an important paradigm in computer science. The key concepts of object oriented programming include classes and objects, encapsulation, inheritance and polymorphism. An object encapsulates state (attributes) and behavior (methods) and communicates with other objects via message passing. Classes define types of objects and can be arranged in a hierarchy using inheritance where subclasses inherit attributes and methods from parent classes. Polymorphism allows objects to have multiple identities based on their class, allowing them to be used in different ways. These concepts provide benefits like modularity, code reuse and ability to model real-world problems.