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

# OOP

ধরো তুমি একটি **City** নিয়ে ভাবছো।

* City-তে অনেক building, vehicles, এবং people আছে।
* প্রতিটা building, vehicle, person-এর **unique features এবং behavior** আছে।
* কিন্তু কিছু **common features** ও behavior আছে—যেমন সব vehicles চালানো যায়, সব buildings-এ room থাকে।

সহজ কথায়: **OOP হলো real-world objects-এর concept কে programming-এ model করা।**

***

### **OOP কি?**

**Object-Oriented Programming (OOP)** হলো একটি programming paradigm যা **objects** এবং **classes** ব্যবহার করে software design করে।

* **Class:** Blueprint বা template
* **Object:** Class-এর instance, real-world entity
* **Property / Attribute:** Object-এর state
* **Method / Behavior:** Object-এর কাজ

**Key OOP Features:**

1. [Interface](/mominur-notes/system-design/oop/inheritance.md)
2. [Encapsulation](https://mominur.gitbook.io/mominur-notes/system-design/oop/encapsulation)
3. [Abstraction](/mominur-notes/system-design/oop/abstraction.md)
4. [Inheritance](/mominur-notes/system-design/oop/inheritance.md)
5. [Polymorphism](/mominur-notes/system-design/oop/polymorphism.md)

***

### **Why OOP?**

1. **Code Reusability:** একবার class লিখলেই multiple objects use করা যায়।
2. **Maintainability:** Code modular → সহজে maintain করা যায়।
3. **Scalability:** নতুন features add করা সহজ।
4. **Real-world modeling:** Complex systems সহজে represent করা যায়।
5. **Data Security:** Encapsulation ব্যবহার করে data hide করা যায়।
