JS interview in 2 minutes / Object-Oriented Programming (OOP)
Tags: javascript, typescript, beginners, career
Published: 2021-04-28 20:06:13

---
title: JS interview in 2 minutes / Object-Oriented Programming (OOP)
published: true
description: Let's try to figure out how to answer common JS questions in an interview.
tags: javascript, typescript, beginners, career
cover_image: https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Unofficial_JavaScript_logo_2.svg/1920px-Unofficial_JavaScript_logo_2.svg.png
---

**Question:**
What is object-oriented programming (OOP)?

**Quick answer:**
It is an agreement describing how you can write programs, grouping state, and related operations in one place. 

There are classes - a boilerplate for objects, objects - actual containers for the data, methods - operators over data in these objects.

// Btw, it may be useful to know the other paradigms, more info on the [wiki](https://en.wikipedia.org/wiki/Programming_paradigm).

**Longer answer:**
Let's start from some simple problem which we will try to solve using OOP.

Imagine we are building new Facebook, but for the dogs. Awesome startup idea! 
![](https://media.giphy.com/media/67ThRZlYBvibtdF9JH/giphy.gif)

Ok, so we are dealing with dog profiles, what data is there?

```
{
  name: 'Doggert',
  age: 2,
  isGood: true,
},
...
```

We need some way to create profiles like this in a blink of an eye and do some common things like barking.

At this point, OOP kicks in. Let's create a boilerplate code that will help us easily create objects like the previous one.

```javascript
class DogProfile {
  constructor(name, age) {
    this.name = name
    this.age = age
    this.isGood = true
  }
}

const doggert = new DogProfile('Doggert', 2)
```

Now we need to figure out how to bark, as it is required for every mannered dog.

```javascript
class DogProfile {
  // ...
  bark() {
    alert('Bark!')
  }
  
  barkInEnglish() {
    alert(`Hello my friend! My name is ${this.name}.`)
  }

  changeName(name) {
    this.name = name
  }

  old() {
    this.age++;
  }
}

// ...
doggert.barkInEnglish()
doggert.changeName('Doggert the Great')
doggert.barkInEnglish()
```

Finally, we have a class, which helps us create new data, objects which store data, and methods that help us to work with the data.

**Real-life applications:**

There are not only 🦄 and 🌈. In real-life applications, you should consider few caveats using this approach.

For example, you should consider how do you extend or refactor existing classes. Imagine you need to add `CatProfile`, it is the same as `DogProfile`, but still different. How do you handle situations like this?

At another moment you need to add admin profiles and admin permissions. How do you handle it? Will you need to update all classes?

There is another funny sound issue `banana, monkey, jungle problem`. It is when you need to create a banana, but you need a monkey to hold it, but the monkey only lives in a forest.

So there are a lot of possible issues which you need to be aware of in advance. `With great power comes great responsibility` as you may have heard 🕷

![](https://media.giphy.com/media/QYkX9IMHthYn0Y3pcG/giphy.gif)

p.s.: I'm not trying to be 100% accurate on every definition, but just trying to describe it in simple words. Sorry in advance 🙏

**Resources:**
[wiki/OOP](https://en.wikipedia.org/wiki/Object-oriented_programming)
[wiki/programming_paradigm](https://en.wikipedia.org/wiki/Programming_paradigm)

**Other posts:**
* [JS interview in 2 minutes / Static vs Dynamic typing](https://dev.to/kozlovzxc/js-interview-in-2-minutes-static-vs-dynamic-typing-2d5k)
* [JS interview in 2 minutes / Higher Order Functions](https://dev.to/kozlovzxc/js-interview-in-2-minutes-higher-order-functions-38kb)
* [JS interview in 2 minutes / value vs reference](https://dev.to/kozlovzxc/js-interview-in-2-minutes-value-vs-reference-5a8k)

---

Btw, I will post more fun stuff here and on [Twitter](https://twitter.com/kozlovzxc). Let's be friends 👋