OOPS & Design principles
Dependancy Inversion Principle
High-Level Modules Should Not Depend on Low-Level Modules. Both Should Depend on Abstractions:
High-level modules (which contain complex logic) and low-level modules (which perform detailed operations) should both depend on abstractions (interfaces or abstract classes).
Abstractions Should Not Depend on Details. Details Should Depend on Abstractions:
The concrete implementation details should depend on abstract layers, not the other way around.
The main goal of Abstraction is to handle complexity by hiding unnecessary details from the user. That enables the user to implement more complex logic on top of the provided abstraction without understanding or even thinking about all the hidden complexity.
Encapsulation is defined as wrapping up of data and information under a single unit
Inheritance in OOP = When a class derives from another class. The child class will inherit all the public and protected properties and methods from the parent class
Polymorphism is the ability of an object to take on many forms.
Compile time polymorphism and Runtime polymorphism. Method overloading, operator overloading, and method overriding are examples.