Lecture Notes: Fundamentals of Object-Oriented Programming (OOP)
Object-Oriented Programming (OOP) is a programming paradigm centered around the concept of
“objects,” which can contain data and code. It is widely used for designing software applications that
are modular, reusable, and easy to maintain.
The four main principles of OOP are:
    1. Encapsulation: This principle restricts direct access to some of an object’s components,
       bundling data and methods that operate on that data within one unit called a class.
       Encapsulation helps in protecting the integrity of data and hiding the internal state of
       objects.
    2. Inheritance: It allows a new class (subclass) to inherit properties and behaviors (methods)
       from an existing class (superclass). This promotes code reuse and the creation of hierarchical
       relationships.
    3. Polymorphism: Polymorphism enables objects of different classes to be treated as objects of
       a common superclass, particularly through method overriding and overloading. This allows
       for dynamic method invocation and flexible code.
    4. Abstraction: Abstraction focuses on exposing only essential features of an object while
       hiding unnecessary details. This simplifies interaction with complex systems by providing a
       clear interface.
Classes serve as blueprints for creating objects, which are instances of classes. Objects have
attributes (data) and methods (functions) that define their behavior.
OOP languages include Java, C++, Python, and C#. OOP improves software design by organizing code
into reusable, modular components, facilitating easier debugging and extension.
In summary, mastering OOP concepts is fundamental for modern software development.