1. Introduction: From Procedural to Object-Oriented Programming 1.1 What is Object-Oriented Programming? Object-Oriented Programming (OOP) is a programming paradigm that organizes code around objects rather than functions and logic. An object is a data structure that contains both data (attributes) and code (methods) that operates on that data. Key Paradigm Comparison: Aspect Procedural (C) Object-Oriented (C++) Focus Functions and procedures Objects and classes Data & Functions Separate Bundled together Code Organization By functionality By entities/objects Data Protection Limited (global/local) Strong (access specifiers) Code Reuse Function reuse Inheritance & polymorphism Maintenance Harder for large projects Easier through modularity 1.2 The Four Pillars of OOP Encapsulation : Bundling data and methods that operate on that data within a single unit (class), hiding internal details Abstraction : Showing only essential features while hiding implementation details Inheritance : Creating new classes from existing classes, promoting code reuse Polymorphism : Ability of objects to take many forms, allowing different implementations of the same interface 1.3 Real-World Analogy Think of a car : Object : Your specific car (e.g., a red Toyota Camry 2020) Class : The blueprint/design for all Toyota Camry cars Attributes (data): color, model, year, speed, fuel level Methods (functions): start(), accelerate(), brake(), turn() Encapsulation : You don't need to know how the engine works internally; you just use the steering wheel and pedals Abstraction : The dashboard shows you speed and fuel, hiding complex engine computations