Types of OOP
Tags: oop, programmingparadigm, objectorientedprogramming, prototypebasedoop
Published: 2023-02-14 16:52:25

---
title: Types of OOP
published: true
description: Various object oriented programming implementations
tags: OOP, programmingparadigm, objectorientedprogramming, prototypebasedoop
# cover_image: 
# Use a ratio of 100:42 for best results.
# published_at: 2023-02-14 16:42 +0000
---
![OOP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhtxqun6uhqix7iwsjhj.jpg)
Object-Oriented Programming (OOP) is a popular programming paradigm that many programming languages adopt. The idea is to model real-world concepts as objects, encapsulating data and behaviour within these objects and using these objects to solve complex problems.

In this blog, we’ll take a closer look at the different types of OOP implementations that various languages adopt. By understanding the different approaches, we’ll gain a deeper appreciation for the power and flexibility of OOP and how it can be applied to solve a wide range of problems.

## Classical OOP:
Languages such as Java, C++, and Python use this classical implementation. It is based on the concepts of classes, objects, inheritance, polymorphism, and encapsulation. Classes define the blueprint for objects, and objects are instances of classes. Inheritance allows classes to inherit properties and behaviour from their parent classes, while polymorphism enables objects to take on different forms based on the context in which they are used. Encapsulation ensures that objects’ internal state is hidden and only accessible through defined methods.

## Prototype-based OOP:
Languages such as JavaScript and Lua implement this style of OOP. It is based on the concept of prototypes. Prototypes are objects that serve as templates for other objects. Objects can inherit properties and behaviour from their prototypes. Modify the objects by adding new properties and behaviour at runtime. This approach allows for more dynamic and flexible object creation, but can also lead to difficulties in managing the inheritance chain.

## Aspect-Oriented OOP:
This implementation is used in languages such as AspectJ and is an extension of classical OOP. It allows developers to define “aspects” of the program that cut across multiple classes and objects, such as logging or security. These aspects can then be woven into the code at runtime, making it possible to add new behaviour to a system without modifying the existing code.

## Metaobject-Protocol OOP:
Languages such as Common Lisp use this implementaion. It is a type of OOP that allows for customization of the behaviour of the object system itself. It means that developers can define how classes and objects behave in a program, rather than being limited by the default behaviour set by the language.
For example, A developer could define how to create objects, what properties they have, and how they interact with each other. This level of customization provides greater flexibility and control over the object system, but it also requires a deeper understanding of the underlying system.
In simple terms, Metaobject-Protocol OOP gives the ability to shape and mould the object system to fit their specific needs rather than being limited by the object system’s default behaviour.

## Conclusion:
In conclusion, each of these OOP implementations offers its own unique set of features and benefits. Understanding the different approaches will help you to make an informed decision and choose the implementation that best suits your needs. Whether you’re a seasoned developer or just starting, OOP is a powerful tool that will help you to create robust and maintainable software.

Originally, published at [medium](https://medium.com/@himankbh/types-of-oop-8885423d5a00).