What is Object Oriented Programming (OOP)? | DistantJob - Remote Recruitment Agency
Tech Insights

What is Object Oriented Programming (OOP)?

Joana Almeida
Software Developer - - 3 min. to read

Object Oriented Programming (OOP) is a popular programming model that organizes code around objects and classes, unlike procedural languages, which revolve around functions and procedures.

By focusing on the objects of a problem, instead of the procedures needed to solve it, programmers can quickly create complex structured projects that can be more easily maintained. Given this, it’s no surprise that OOP quickly became the most popular programming paradigm.

To truly know the capabilities of this paradigm, it’s important to know what it is, what it entails, and the advantages of Object-Oriented Programming. Let’s explore this topic and find out if and why you should use OOP in your projects.

What are the 3 principles of OOP?

Principles of object oriented programming

1. Inheritance

Classes can inherit from other classes. In this case, the class inherited from the other is called the child, and the one inherited from the parent. This is the main mechanism that allows the reusability of code in OOP.

A class can have any number of children, and the level of granularity you should have will depend on the project’s needs.

Some languages, such as JavaScript, use a similar method in the form of Prototyping. Prototypes can be used as a base from other objects to derive from.

2. Encapsulation

Encapsulation is heavily dependent on Abstraction to function. Abstraction defines that all information pertinent to a class should be present within the class. Also, objects should only externalize information relevant to outside objects and hide all other information for internal use. 

You shouldn’t allow outside objects to tampering with an object’s inner workings, thus avoiding mistakes from other programmers who will use your classes and code. You can have variables and methods that change the state of the object, but those changes should be opaque to outside objects.

Encapsulation then enforces Abstraction by defining the accessibility of a class’ variables and methods to outside objects, such as “available to all other objects” (public), “available to my child classes” (protected), and “available only to my class” (private). With this, programmers can control what information is visible and can be manipulated by outside objects.

3. Polymorphism

Polymorphism occurs when your objects change their behavior based on the class they derive from. This usually occurs when your objects belong to the same inheritance tree, and the child’s methods overload their parents.

What is an Object-Oriented Programming Language?

Many languages nowadays support the concept of objects and classes and thus can be used to develop OOP projects. Common and popular examples include:

What is Object-Oriented Programming with Examples?

Now that we know what OOP is and how its pillars define how it functions, it’s time to look at an example of those concepts. To do so, we’ll use a C# example. Let’s start by defining the class Animal and its contents:

class Animal{
	int age;
	
	// Constructor
	Animal(){
	
	}
	
	// Destructor
	~Animal(){
		Console.WriteLine("The animal was destroyed.");
	}
	
	
	void Move(){
		Console.WriteLine("The animal moves.");
	}
}

class Program
{
    static void Main(string[] args)
    {
	    Animal animal = new Animal();
	    animal.Move();
    }
}

This code, however, will produce an error. In C#, all functions, including constructors, need to have access modifiers or will be considered private. This means that the class Program cannot call Animal’s constructor. Let’s remedy that with the concept of encapsulation.

public class Animal{
	private int _age;
	
	// Constructor
	public Animal(){
		_age = 0;
	}
	
	// Destructor
	// Destructors are special in that they do not need access keywords.
	~Animal(){
		Console.WriteLine("The animal was destroyed.");
	}
	
	public int GetHumanAge(){
		return _age;
	}
	
	public void Move(){
		Console.WriteLine("The animal moves.");
	}
}

class Program
{
    static void Main(string[] args)
    {
	    Animal animal = new Animal();
	    animal.Move();
    }
}

Now that we’ve set Animal’s constructor as public, it now runs correctly.

The animal moves.

Time to add a little complexity to our code. Let’s define three different types of animal that will inherit from the Animal class:

public class Animal{
	private int _age;
	
	// Constructor
	public Animal(){
		_age = 0;
	}
	
	// Destructor
	// Destructors are special in that they do not need access keywords.
	~Animal(){
		Console.WriteLine("The animal was destroyed.");
	}
	
	public int GetHumanAge(){
		return _age;
	}
	
	public void Move(){
		Console.WriteLine("The animal moves.");
	}
}

public class Person : Animal(){

}

public class Dog : Animal(){

}

public class Fish : Animal(){

}

class Program
{
    static void Main(string[] args)
    {
	    Animal animal = new Animal();
	    animal.Move();
	    
		Person person = new Person();
	    person.Move();

	    Dog dog = new Dog();
	    dog.Move();
	    
	    Fish fish = new Fish();
	    fish.Move();
    }
}

But since we haven’t redefined any specific behavior in our child classes, they will automatically adopt the parent class’ behavior:

The animal moves.
The animal moves.
The animal moves.
The animal moves.

Let’s change that. To allow for polymorphism, we’ll need to define method overloading. In C#, that is accomplished through the keywords virtual and override. To allow the use of the variable _age in our child classes, we’ll also need to set it as protected instead of private.

public class Animal{
	protected int Age;
	
	// Constructor
	public Animal(){
		Age = 0;
	}
	
	// Destructor
	// Destructors are special in that they do not need access keywords.
	~Animal(){
		Console.WriteLine("The animal was destroyed.");
	}
	
	public virtual int GetHumanAge(){
		return Age;
	}
	
	public virtual void Move(){
		Console.WriteLine("The animal moves.");
	}
}

public class Person : Animal(){
	public override void Move(){
		Console.WriteLine("The person walks.");
	}
}

public class Dog : Animal(){
	public override int GetHumanAge(){
		int finalAge = 0;
		if(Age >= 1){ finalAge += 15; }
		if(Age >= 2){ finalAge += 9; }
		if(Age >= 3){ finalAge += 5 * (Age - 2);}
		return finalAge;
	}

	public override void Move(){
		Console.WriteLine("The dog trots.");
	}
}

public class Fish : Animal(){
	public override void Move(){
		Console.WriteLine("The fish swims.");
	}
}


class Program
{
    static void Main(string[] args)
    {
	    Animal animal = new Animal();
	    animal.Move();
	    
		Person person = new Person();
	    person.Move();

	    Dog dog = new Dog();
	    dog.Move();
	    
	    Fish fish = new Fish();
	    fish.Move();
    }
}

Now each animal will show a different type of movement when prompted:

The animal moves.
The person walks.
The dog trots.
The fish swims.

The Benefits of Object-Oriented Development Methods

If you want to adopt a programming paradigm like OOP to any project, it’s important to know its advantages and disadvantages. The benefits of OOP can easily help make a project come together, but not using it in the right context can bloat your project unnecessarily.

OOP Advantages

  • Problem Partitioning: OOP allows programmers to break problems into smaller ones until they are easily solvable. You build software from the ground-up.
  • Easy Expansion: Expanding on the previous point, OOP projects can have their functionality expanded upon through the integration of new classes and methods.
  • Better Problem Mapping: OOP allows programmers to approximate the subjects of the problem into objects, creating a strong metaphor for the real problem inside their code.
  • Increased Security: By promoting good principles of encapsulation, you avoid mistakes on the part of the programming team while at the same time increasing the overall security of the project.
  • Increased Code Reusability: By introducing inheritance, you allow your code to be reusable across several classes, reducing development time and possible errors. Also, through the use of libraries, programmers can easily share common code across projects.

Disadvantages of OOP

  • Performance: The amount of objects OOP requires to function will bloat a project in comparison to a procedural approach. This will inevitably lead to larger program sizes and slower execution times.
  • Requires planning: When programming using OOP, it is imperative you have a good grasp of the design of your architecture at the start to avoid problems and restructure everything later.

Conclusion

OOP is an excellent method to build software by empowering developers with a good way to organize and structure a project. With the current market demanding regular updates, OOP is in the best position to allow natural growth for a project to keep expanding.

If you’re looking for Object-Oriented Programmers for your projects, DistantJob can provide you with expert developers at competitive rates! Whether you need Python programmers, Java programmers, JavaScript programmers, or C# programmers, DistantJob can help you find people with the expertise you need and that are the perfect culture fit for your company. Don’t hesitate to contact us!

Joana Almeida

Joana Almeida (GitHub: SorceryStory) is our Technical Writer at DistantJob. With her unique background spanning software development and game design, Joana brings deep technical insights and clear communication to her writing on cutting-edge technologies, development frameworks, and collaboration tips and tools for remote dev teams.

Learn how to hire offshore people who outperform local hires

What if you could approach companies similar to yours, interview their top performers, and hire them for 50% of a North American salary?

Subscribe to our newsletter and get exclusive content and bloopers

or Share this post

Learn how to hire offshore people who outperform local hires

What if you could approach companies similar to yours, interview their top performers, and hire them for 50% of a North American salary?

Reduce Development Workload And Time With The Right Developer

When you partner with DistantJob for your next hire, you get the highest quality developers who will deliver expert work on time. We headhunt developers globally; that means you can expect candidates within two weeks or less and at a great value.

Increase your development output within the next 30 days without sacrificing quality.

Book a Discovery Call

What are your looking for?
+

Want to meet your top matching candidate?

Find professionals who connect with your mission and company.

    pop-up-img
    +

    Talk with a senior recruiter.

    Fill the empty positions in your org chart in under a month.