What Is Object-Oriented Programming? 

6 minutes

Every programming language has its own syntax and features, and many of them also use different paradigms or styles of writing and organizing code. 

The most common programming paradigms are procedural, functional, and object-oriented programming. Object-oriented is the most popular, and the one most often taught in programming courses.  

Object-oriented programming is a software development approach that focuses on defining and sculpting named classes as entities with attributes and behaviors. One key benefit of object-oriented programming? It makes reusing and maintaining code easier. Ahead, we’ll break down what you need to know about object-oriented programming and the courses to take if you want to get started.

Learn something new for free

The building blocks of object-oriented programming 

The object-oriented programming paradigm uses the following building blocks to structure an application: 


Classes are user-defined data types used as a blueprint or template for the objects a software program will use in its operation. Classes define the methods and attributes that each object created from them has. Most object-oriented programming languages use classes, though some (like Go, for example) do not. 

Modern JavaScript has classes now, but it didn’t originally. It first used a similar concept called prototypes. 

Here’s an example class in JavaScript:

class Cat { 

    constructor(name, type) { 

        this.name = name; 

        this.type = type; 


    getTag() { 

        console.log(`Hi, my name is ${this.name} and I am a ${this.type}.`); 


    speak() { 





In an object-oriented language that uses classes, objects are instances of those classes created with specific data. To create an object with the Cat class above, we would use the following code:

const myCat = new Cat('Morris', 'Tabby');

When the myCat object is created, it calls the constructor method with the parameters we specify and sets the name and type attributes of the object. We get the following output when we call the methods we’ve defined above: 

​​​​​myCat.speak(); // Prints "meow" 

myCat.getTag(); // Prints "Hi, my name is Morris, and I am a Tabby."


Methods are functions stated inside a class that define the behavior of the objects created from the class. They perform actions like returning information about the object or modifying the data contained in the object. The Cat class we created above has two methods: speak() and getTag()


Attributes are variables defined inside a class that describe what data the objects created from the class will contain. In our Cat class, we have two attributes: name and type. It’s common to set these attributes in the constructor of the class as we did above. 

The main principles of object-oriented programming 

There are four primary principles of object-oriented programming, including encapsulation, abstraction, inheritance, and polymorphism. 


Inheritance allows a class to inherit the features of other classes. The original class is called the parent class, and the class inheriting the features is called the child class. Inheritance provides reusability. The child class can also add new attributes and methods. 

Inheritance is often used to create generic parent classes and child classes that have more specific functionality. Here’s an example using our Cat class as a parent class: 

class Tiger extends Cat { 

    huntGazelle() { 




This new Tiger class has all the methods and attributes of the original Cat class but also has a huntGazelle() method.   


This principle means that all the important data and functionality of an object is contained within that object. Only select information that is needed outside of the object is exposed to the outside world. When an object is created from a class, the methods and attributes are encapsulated inside the object. Encapsulation also hides the implementation of this code inside the object. 

Encapsulation requires that you define some attributes and methods as public or private. “Public” dictates that the attributes and methods can be accessed, modified, or executed from the outside. “Private” limits access to use from inside the object. Attributes and methods can also be defined as protected. This means that classes that inherit from the parent class can also access these attributes and methods, just like the parent class. 

Encapsulation also adds a layer of security by preventing attributes from being changed or methods from being executed by the outside world, which can cause unintended data corruption. Here’s an example: 

​​​​​class Cat { 

        // This is a private attribute 

        const #sound = 'meow'; 

    constructor(name, type) { 

        this.name = name; 

        this.type = type;  


    getTag() { 

        console.log(`Hi, my name is ${this.name} and I am a ${this.type}.`)  


    speak() { 




The sound attribute is hidden from the outside world in this class. This ensures that the class can’t be modified by other code, like code to make the cat bark.


Abstraction is a means for providing a higher-level interface for interacting with objects. It extends the encapsulation principle by making only key attributes visible to a user and hiding the remaining complexity. This suggests that the complexity of the actual object can be represented by a simple class with a limited number of methods you can execute or attributes you can access. 

One way to imagine the concept of abstraction is to think about driving a car. To make the car turn right, you only have to turn the steering wheel right. The driver doesn’t have to know how the tires, rack and pinion, or power steering pump works — they just turn the wheel. Having to manage all of those other things while driving the car would cause chaos and a lot of accidents. 


Polymorphism means objects can share behaviors and can take on more than one form. So far, we have created two classes: Cat and Tiger. If another part of our program has a random list of objects created from these classes, we know we can loop through them and call the speak() method on any of them.​ ​Because of polymorphism, we know that any of these objects contain that method. 

With inheritance, a child object can also override the functionality of the parent object. Remember when we created the Tiger class, but the tiger still meowed like a cat? We can fix that by creating the class like this instead: 

class Tiger extends Cat { 

    huntGazelle() { 



    speak() { 




Here we simply override the speak() method of the parent Cat class, and now our tiger will roar. Inheritance is what allows methods and attributes to carry over, but polymorphism allows those elements to take another form in a new class. 

The benefits of object-oriented programming 

There are many reasons the object-oriented paradigm is the most popular programming paradigm. Here are some of the main benefits: 

  • You can represent complex objects with simple, reproducible classes. 
  • The same object you create in one object-oriented program can be reused in other software. 
  • You can use polymorphism to define class-specific behavior. 
  • By encapsulating all the information about an object within the object, object-oriented software is easy to debug.
  • Encapsulation protects data from being modified from unexpected events and actions. 

Which programming languages are object-oriented? 

Simula, which was developed in the 1960s, was the first object-oriented programming language and influenced many of the programming languages we have today. While some languages are either purely procedural or functional, most of the popular ones support the object-oriented programming style in some way. Here are some of those languages: 

  • Java is a general-purpose programming language used widely in enterprise development and is object-oriented. 
  • Python is a popular programming language used for a wide variety of tasks that supports object-oriented, procedural, and functional programming.
  • Ruby is what is called a “pure” object-oriented language where everything in a program is an object. 
  • JavaScript is an object-oriented language that used prototypes instead of classes in its earlier days. 
  • C++ was created as an extension of the C programming language and is designed to be object-oriented. 
  • C# is an object-oriented language developed by Microsoft to run either in the .NET framework or the cross-platform .NET Core framework. 
  • Go is an object-oriented programming language that doesn’t have classes. Instead, you build up objects using composition. 

Learn more about object-oriented programming 

Learning object-oriented programming can change how you think about code and make you a better developer. By breaking up the requirements of a complex project into reusable classes, you can simplify the coding process, make your code more organized, and make it easier to debug.

You can learn the basics of object-oriented programming in any of the courses below: 

Related courses

3 courses

Each of these courses was created for beginners. So don’t worry if you know nothing about coding or very little about technology now. The course you choose will start by introducing you to the concepts of programming, teach you the fundamentals of the programming language itself, and leave you with multiple projects that will look great in your technical portfolio.

Related articles

4 articles

What is C# ​U​sed ​F​or? 

4 minutes
By Codecademy Team

C# is a popular programming language that’s similar to C and C++. Learn what it’s used for, what you can do with it, and how to get started.


What is the Waterfall Model?

7 minutes
By Codecademy Team

T​​he waterfall model follows a linear sequential flow where each phase of development is completed and approved before the next begins. Here’s how it works.