JS/TS OOP Course: 1-Introduction
Tags: javascript, oop, typescript
Published: 2022-11-16 10:18:43

---
title: JS/TS OOP Course: 1-Introduction
published: true
description: 
series: jstsoop
tags: javascript, oop, typescript
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rkg5o93du11bwyvtqsn8.png
# Use a ratio of 100:42 for best results.
# published_at: 2022-10-25 09:51 +0000
---

## Introduction

`OOP` stands for `Object Oriented Programming`, it is programming paradigm that is used to structure a software app into simple, reusable pieces of code blueprints (usually called classes), which are used to create individual instances of objects.

## OOP In Javascript

Javascript is a multi-paradigm language, meaning that it supports multiple programming paradigms. One of the paradigms that Javascript supports is OOP.

`Classes` was firstly introduced in ES6, it was improved and made more powerful.

## OOP Before ES6

Before ES6 `Classes`, Javascript had a prototype-based inheritance, which is a pattern that uses prototypal inheritance to build up inheritance hierarchies.

For example, A class like this in ES6:

```js
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age}`);
  }
}
```

Is equivalent to this in ES5:

```js
function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function () {
  console.log(`Hello, my name is ${this.name} and I am ${this.age}`);
};
```

But we can't really say this is a formal OOP structure, that's why i consider real OOP to be introduced in ES6.

## What we'll cover in this course

In this course, we'll cover the following topics:

* `Classes`
* `Objects`
* `Constructors`
* `Class Members`
* `Static And Non-Static Members`
* `Methods`
* `Properties`
* `Getters And Setters`
* `Static Methods`
* `Inheritance`
* `Abstract Classes`
* `Access Modifiers`
* `Interfaces`
* `Polymorphism`
* `Encapsulation`
* `Composition`
* `Aggregation`
* `SOLID Principles`
* `Coupling And Cohesion`

So in the previous list, there are two things, OOP principles and OOP concepts, we'll see it in depth for each single topic of the list.

## What about Design Patterns?

Design patterns are not part of the OOP paradigm, but they are very useful in OOP. We'll cover them in a separate course.

> Sometimes they are also called `Object-Oriented Design` or `OOD` for short.

## Hint about this course

I will try to make this course more simpler, which means it will not be an academic course, but all the concepts will be explained in a simple way, so that you can understand them easily, and i'll provide a real world examples for each topic.

So you'll not see a lot of talking here, simple words and definitions will be the `Dominator` here.

## ☕♨️ Buy me a Coffee ♨️☕

If you enjoy my articles and see it useful to you, you may [buy me a coffee](https://www.paypal.com/paypalme/hassanzohdy), it will help me to keep going and keep creating more content.

## 😍 Join our community

Join our community on [Discord](https://discord.gg/pb2vmdfhGf) to get help and support (Node Js 2023 Channel).

## 📚 Bonus Content 📚

You may have a look at these articles, it will definitely boost your knowledge and productivity.

General Topics

* [Event Driven Architecture: A Practical Guide in Javascript](https://dev.to/hassanzohdy/event-driven-architecture-the-best-paradigm-that-i-love-to-work-with-in-javascript-and-node-js-1gnk)
* [Best Practices For Case Styles: Camel, Pascal, Snake, and Kebab Case In Node And Javascript](https://dev.to/hassanzohdy/best-practices-for-case-styles-camel-pascal-snake-and-kebab-case-in-node-and-javascript-55oi)
* [After 6 years of practicing MongoDB, Here are my thoughts on MongoDB vs MySQL
](https://dev.to/hassanzohdy/after-6-years-of-practicing-mongodb-here-are-my-thoughts-on-mongodb-vs-mysql-574b)

Packages & Libraries

* [Collections: Your ultimate Javascript Arrays Manager](https://dev.to/hassanzohdy/collections-your-ultimate-javascript-array-handler-3o15)
* [Supportive Is: an elegant utility to check types of values in JavaScript](https://dev.to/hassanzohdy/supportive-is-an-elegant-utility-to-check-types-of-values-in-javascript-1b3e)
* [Localization: An agnostic i18n package to manage localization in your project](https://dev.to/hassanzohdy/mongez-localization-the-simplest-way-to-translate-your-website-regardless-your-favorite-framework-4gi3)

 React Js Packages

* [useFetcher: easiest way to fetch data in React Js](https://dev.to/hassanzohdy/usefetcher-the-easiest-way-to-fetch-data-in-react-45o9)

Courses (Articles)

* [ES6++: The Ultimate Guide to ES6 and Beyond](https://dev.to/hassanzohdy/es6-1-introduction-h3e)
* [Node Js 2023 Course: Node With Typescript, The Ultimate Guide](https://dev.to/hassanzohdy/nodejs-course-2023-introduction-to-nodejs-3n4e)
* [React Js: Let"s Create File Manager With React Js and Node Js](https://dev.to/hassanzohdy/lets-create-a-file-manager-from-scratch-with-react-and-typescript-chapter-i-a-good-way-to-expand-your-experience-5g4k)