## Notes - Abstraction - Encapsulating Data - Inheritance - Polymorphism ## Abstraction - Define core properties/behaviors and remove the rest - In the example of a car, people don't have to worry about the internal combustion engine; they only need to know how to operate the steering wheel, the pedals, mirrors, seatbelts, etc - Keep the method signature the same and you can change the internal details, like API callers not needing to know underlying database details ## Encapsulating Data - Define access controls to data - Some variables can be private/internal whereas others can be publicly accessible - Information hiding - Fosters modular design ## Inheritance - Favors/provides for code reusability by using base classes, parent classes, subclasses ## Polymorphism - Objects can be composed of many forms - Makes code more flexible - Compile-time polymorphism - Method overloading: describes which implementation to use based on provided inputs - Runtime polymorphism - Method overriding: defines which implementation to use based on inheritance ## References - [[Study for EPAM Backend Interview]] - [Principles of OOP - Interview Bit](https://www.interviewbit.com/blog/principles-of-oops/) - [Principles of OOP - The Knowledge Academy](https://www.theknowledgeacademy.com/blog/principles-of-object-oriented-programming/)