> For the complete documentation index, see [llms.txt](https://marcylabschool.gitbook.io/swe/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marcylabschool.gitbook.io/swe/mod-2-oop/overview.md).

# Overview

Object-Oriented Programming is a style of programming (a "paradigm") that uses **objects to manage state (data) and behavior** in an application. While OOP does let us do some new things, more than anything, it helps us write better, more organized code.

It can be defined by its 4 pillars:

* **Encapsulation** - bundling methods with the data they operate on while hiding / protecting access to the data
* **Abstraction** - creating interfaces that hiding complexity behind functions
* **Inheritance** - sharing behavior between classes
* **Polymorphism** - similar objects can be used interchangeably

![The four pillars of object oriented programming are abstraction, inheritance, polymorphism, and encapsulation.](/files/caOu53fYlkHuxlUfPhr7)

Throughout this module, we will be learning about these four pillars and how we implement them in JavaScript using the `class` syntax.

## Chapters

* [1. Intro to OOP, Encapsulation, Factory Functions, and Closure](broken://pages/zkOTeivcdlFyhru4gLGC)
* [2. Classes](/swe/mod-2-oop/3-classes.md)
* [3. Private & Static](/swe/mod-2-oop/4-private-properties-static-methods.md)
* [4. Inheritance](/swe/mod-2-oop/5-inheritance.md)
* [5. Polymorphism](broken://pages/x5lNA8aPO8p1a6CRZ4a6)
* [6. UML Diagrams & Has Many/Belongs To Relationships](broken://pages/K0Vd4m5Oq0bWKGh3X4fa)
* [7. Review and Practice](broken://pages/c0LCdvbo5nuDK9d2f2WU)
