Fundamentals of Object-Oriented Programming
Tags: programming, softwaredevelopment, tutorial, beginners
Published: 2024-01-08 15:20:54

Object-Oriented Programming (OOP) represents an approach in programming where all functionalities and programs revolve around the concept of objects. While other programming paradigms, such as procedural programming, exist, our primary focus is on Object-Oriented Programming, commonly known as OOP.

In OOP, problems are systematically broken down into units known as objects, and functionalities are developed around these objects. To illustrate this concept, consider a toy robot. Picture having a toy robot that can perform various actions like walking, talking, and dancing. In the realm of object-oriented programming, we create entities known as "objects," akin to our toy robot. Each object possesses a unique set of abilities, referred to as "methods" or "functions." These methods encapsulate the distinct functionalities, such as walking, talking, and dancing, allowing for a modular and organized approach to programming. 

It's important to note that our discussion is not tie to any  specific programming language; instead, our focus is squarely on  understanding the fundamental concepts that underpin OOP.

### Key Players in OOP
Having come across terms like objects, classes, behaviour, and methods in the first paragraph, you might be curious about their roles. It's  impossible to discuss Object-Oriented Programming (OOP) without  spotlighting these key players. Let's delve into what these elements are and their functions in OOP.

- **Classes:** A class is a a template that defines the characteristics and behaviours common to a an object or group of objects. It hides data (attributes) and methods (functions) that operate on that data.
- **Objects:** Is the entity in object-oriented system. This entity or entities (which is also referred to as the instance of a class) may be a person, a car, a place, or anything. Objects holds data in the form of attributes. For example we have an entity *User*.
- **Attribute:** It stores information. about an object. They are defined in the class template. You remembered our *User* entity (object) example, a user object can have: name, email and gender as attribute.
- **Method:** A method perform action on the object. It represents the behaviour of the object that is performing the action. The object and methods are encapsulated inside the class.

 To illustrate, diagrams will be used for examples.

The following image showcases a standard instance of a class named *User*, featuring attributes and update and delete method.

![image](https://drive.google.com/uc?export=view&id=14-yuOrVxoAEjruQrQwg19fsQhGgfjmRb)

### 4 Pillars Of OOP

Let's dive deeper into the pillars of OOP. They are:

- **Abstraction:** Is the act of displaying the essential properties and behaviours without revealing the internal details. It allows developers to focus on what an object does without bothering with how it achieves it.
- **Encapsulation:** It means to hide data from external program and exposing only necessary program or method.
- **Inheritance:** Is a mechanism where an object or entity inherits the property of an other object.
- **Polymorphism:** This concept might seem a bit tricky but Is the ability for objects (entities) to share the same behaviour which may result to different form or output based on the type of data used. There are two ways this is done:
  1. **Method Overriding:** A subclass can override the method of the super class.
  2. **Method Overloading:** you can define multiple methods with the same name in a class, as long as they have different parameter lists. Which may result to different behaviour of the objects. 



We have a *Student* and *Teacher* objects that is inheriting the property of the *User* object. The *User* class is now assuming the role of a super class while the Student and Teacher classes function as the child classes.


![image](https://drive.google.com/uc?export=view&id=1kjit68GqBpdmWIq8wAc3KvD9WfrOOKdz)

This is a basic representation of how classes and inheritance look in OOP.

### OOP Languages

There are several programming languages that support or are designed  around the principles of Object-Oriented Programming (OOP). Here is a  list of some prominent ones:

- Java
- PHP
- JavaScript
- C#
- Python
- Ruby
- Dart

These languages vary in terms of syntax, use cases, and ecosystems, but  they all incorporate OOP concepts to some extent. The choice of a  particular language often depends on the requirements of a specific  project or application.



### Benefits Of OOP

- **Reusable Code:** Code reuse is enhanced through features like inheritance, allowing developers to build on existing classes and create new ones with shared  functionality.
- **Ease of Maintenance:** Changes to one part of the code (a class) do not necessarily affect  other parts, reducing the risk of introducing errors during maintenance.
- **Scalability:** OOP promotes scalable software design. As new features or requirements  arise, developers can extend existing classes or create new ones,  maintaining a scalable and adaptable codebase.



### Conclusion

As you grasp these core OOP concepts, you gain the ability to design software systems that are scalable, maintainable, and easily extensible. You'll find yourself adept at creating modular and reusable code, simplifying the development and maintenance processes. Whether you are working on small-scale projects or large-scale applications, a solid understanding of OOP empowers you to build robust and well-organized solutions.

In essence, mastering these fundamental OOP concepts is akin to acquiring a powerful set of tools that will elevate your programming capabilities. It opens the door to creating efficient, readable, and flexible code, enabling you to meet the challenges of software development with confidence and innovation.


### Related
*[Understanding Horizontal And Vertical Scaling](https://dev.to/tochine/understanding-horizontal-and-vertical-scaling-pros-and-cons-33b)*

*[How To Store And Retrieve RedisJSON on Redis Cloud using Node.js](https://dev.to/tochine/how-to-store-and-retrieve-redisjson-on-redis-cloud-using-nodejs-42o2)*