Long ago, people involved in the programming industry were not spoiled by the variety of programming languages to choose from. In the early years of the computer science era, you would most probably have to deal with such traditional languages following the procedural programming paradigm such as FORTRAN, for example. The major complaint regarding the use of such languages was probably the high risk that changing something in one place may cause an avalanche of errors somewhere else.
Years went by and, among the other things, to avoid the necessity of dealing with so-called spaghetti code, many other programming languages and paradigms were created. Nowadays, there’s so many of them it may be harder to find a language you would like to master than actually start learning it. Among a plethora of options, there are some that get the most attention. Most probably you’ve heard about Object Oriented Programming or OOP. Also, there’s another popular approach called functional programming. They take a pretty different approach to writing the code, so learning the major difference between them can be an excellent starting point in determining which technology can better suit your needs and expectations. Today, we’ll look at how programming can differ when you can choose between an object and function as the major entity.
How Programming Works When the Object is the King
As the name shows, all that the object oriented programming languages care about is objects. Instead of focusing on the results of running the code, as the functional approach implies, OOP is more about the ways you reach the result. You can change the state of the object using functions related to it and called methods or values that describe their current state and called properties.
Objects belong to particular classes. Say, if you make a video game about running your own pizzeria, you can create a class that describes an employee in general. Then, you can create as many of them as you want and manipulate their state using methods. For example, you can use a method called makeSalaryHigher() to increase the salary of a specific employee. Also, in object oriented programming, instances can interact with each other, which opens a pretty wide field of opportunities.
Programming languages that use this concept are pretty popular. Most probably you’ve heard of them even if programming is not your hobby and you don’t work in a highly experienced and competent software development company. Java, C++, Python, or JavaScript can be excellent examples of languages following the object oriented model. Now, let’s consider some examples describing how object oriented programming works.
Four Pillars of OOP
Encapsulation means a lot when you have to work with objects while programming. In a few words, it means that what’s stored inside of an object must remain a secret to others. Values and methods that an object has can be declared as public or private. Private ones can’t be called or used and the public ones are not limited by this rule. In the example of our pizzeria video game, for example, we can create a salary attribute not accessible by other objects. However, we want customers to make orders, so we can create a public method orderSomePizza(), so anyone related to the Customers can use it.
Abstraction is another important concept. The primary goal of adding it to the object oriented programming paradigm was to show coders only essential parts of a specific object and hide everything related to its functional side. Why? To make things easier for those who write the code and be better oriented in it, of course.
Read Also Node.js vs PHP
Inheritance is a pretty broad topic. Using this feature, you can create a class that will become a parent to another one. The child here will inherit all methods and attributes that the parent class has. Also, you can add some extra methods and attributes. For example, we may have the Employee class, that describes which salary a specific employee has and allows us to get this information by using the getSalary() method. You can use this class to create such a child class as TheCook. All cooks are employees, so everything seems pretty obvious here. This new class will inherit all the parent’s features, which means it’ll have a salary and you’ll be able to see how big it is using the getSalary() method. Also, you can add some methods specific to this particular class. For example, makeSomePizzas() will tell the chef to cook as many pizzas as you want.
Polymorphism enables extra features regarding object oriented programming from the parents-children standpoint. As the name suggests, it means that something (in this case, an object) can take many forms (here, we mean the form that a child and parent object have). For example, in the previous example, the method getSalary() that the parent class has can be passed to the child objects. The trick is that the way the child object uses this method is different and specific for this specific object.
What if We Use Functional Approach Instead
Functional programming, instead of dealing with objects, is centered on using functions as the fundamental building blocks. Unlike object oriented programming, this approach is more about the outcomes of running a program. In the list of languages that support functional programming, you can find some good old friends like Python or C++. Among other examples, we can name Go and Haskell, for example.
Major Principles
Since there’s no such thing as class or object, in functional programming we have to be oriented to deal with something else. As the main primitive, in this scenario, developers deal with functions that can be stored in a variable, passed as an argument to the functions, or be returned as the result of their work. The main rule a programmer should follow is to write functions everywhere, where it’s possible. The emphasis on functions allows eliminating the risk of changing the global state of the program and breaking something. With functional programming, you can rely on input parameters and values that functions return.
Constructs that enable code to repeat itself multiple times, such as for and while, aren’t used in functional programming. Instead, tail calls are used. It means that a function can take another function as an input, perform some operations, and return a function. This was made to make code more simple to read and robust thanks to avoiding the use of mutable objects.
Dealing with mutable stuff is not the path of those who prefer functional programming. Immutability is one of its key principles that, for instance, does not allow changing values assigned to specific variables. What to do if you really want a variable to have another value? It’s simple. Just create a new variable with the value you need and use it as you please. This way, you can fully rely on the use of pure functions.
When Objects Can Outplay Functional Approach
The real question here is when to choose an object oriented programming paradigm and when a functional approach can do the trick. The good news is that some programming languages support both these approaches. For example, if you already use TypeScript or Python, you can switch between OOP and functional programming without the need to learn the new language syntax.
Read Also Tips For Migrating to TypeScript Without Problems and Fuss
Nowadays, object oriented programming is used by the vast majority of programmers, since it can simplify the continuous development of feature-rich products. Functional programming, in turn, will require much effort since you’ll have to use tons of code for every feature instead of inheriting functionality like the OOP model implies. Bug fixing with OOP can be way faster too. Classes that you can use in OOP can become blueprints for tons of features you need to implement and, using inheritance, you can create as many copies of a specific class with as many modifications as you want.
But there’s some room for a functional approach as well. For example, if you’re focused on apps oriented to perform some complex data manipulations, don’t have too many inputs, and need to perform many operations. Also, building server-side apps is the field where the functional approach can become handy.
To help you better understand the major differences between these two paradigms we considered today, you can use the table below.
OOP |
Functional Programming |
|
Major Characteristic |
Uses objects and methods | Uses functions and variables |
Data Mutability |
Uses mutable data | Immutable data, variables can’t change values |
Programming Model |
Imperative | Declarative |
Statements Execution |
Statements are executed in particular order | Statements are executed in any order |
Iteration |
OOP uses loops, such as for and while | Recursion |
When to Use |
Multi Featured systems with few operations | Few inputs and many operations |
Conclusions
It’s not too hard to get lost in the diversity of programming languages, frameworks, and libraries available today. On top of that, there are different programming paradigms, following which can provide coders with some extra possibilities. Learning specifics of OOP and functional programming to become better oriented in current trends can be a decent way to spend your time, since it can expand your professional skills. Especially considering that some languages support more than one paradigm and therefore you won’t need to spend time on learning a new one.
If you’re looking for a team of web developers with substantial experience, please contact us.